Commit 89b238e2280a5816a06b8d9da1272fb2df893804
1 parent
59f6602a
Exists in
master
and in
29 other branches
ActionItem461: add custom message to uploaded file larger then size limit
git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@2044 3f533792-8f58-4932-b0fe-aaf55b0a4547
Showing
3 changed files
with
49 additions
and
2 deletions
Show diff stats
app/models/uploaded_file.rb
@@ -5,12 +5,15 @@ | @@ -5,12 +5,15 @@ | ||
5 | class UploadedFile < Article | 5 | class UploadedFile < Article |
6 | 6 | ||
7 | # FIXME need to define min/max file size | 7 | # FIXME need to define min/max file size |
8 | + # | ||
9 | + # default max_size is 1.megabyte to redefine it set options: | ||
10 | + # :min_size => 2.megabytes | ||
11 | + # :max_size => 5.megabytes | ||
8 | has_attachment :storage => :file_system, | 12 | has_attachment :storage => :file_system, |
9 | :thumbnails => { :icon => [24,24] }, | 13 | :thumbnails => { :icon => [24,24] }, |
10 | :thumbnail_class => Thumbnail | 14 | :thumbnail_class => Thumbnail |
11 | - | ||
12 | 15 | ||
13 | - validates_as_attachment | 16 | + validates_attachment :size => _('The file you uploaded was larger than the maximum size of 1MB') |
14 | 17 | ||
15 | def icon_name | 18 | def icon_name |
16 | self.image? ? public_filename(:icon) : self.content_type.gsub('/', '-') | 19 | self.image? ? public_filename(:icon) : self.content_type.gsub('/', '-') |
test/unit/uploaded_file_test.rb
@@ -58,4 +58,14 @@ class UploadedFileTest < Test::Unit::TestCase | @@ -58,4 +58,14 @@ class UploadedFileTest < Test::Unit::TestCase | ||
58 | assert file.save | 58 | assert file.save |
59 | end | 59 | end |
60 | 60 | ||
61 | + should 'has attachment_fu validation options' do | ||
62 | + file = UploadedFile.new(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')) | ||
63 | + assert_respond_to file, :attachment_validation_options | ||
64 | + end | ||
65 | + | ||
66 | + should 'has attachment_fu validation option for size' do | ||
67 | + file = UploadedFile.new(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png')) | ||
68 | + assert_includes file.attachment_validation_options, :size | ||
69 | + end | ||
70 | + | ||
61 | end | 71 | end |
vendor/plugins/attachment_fu_validates_attachment/init.rb
0 → 100644
@@ -0,0 +1,34 @@ | @@ -0,0 +1,34 @@ | ||
1 | +# friendlier attachment validations by Tim Lucas | ||
2 | +# ref.: http://toolmantim.com/article/2007/12/3/rollin_your_own_attachment_fu_messages_evil_twin_stylee | ||
3 | + | ||
4 | +Technoweenie::AttachmentFu::InstanceMethods.module_eval do | ||
5 | + protected | ||
6 | + def attachment_valid? | ||
7 | + if self.filename.nil? | ||
8 | + errors.add_to_base attachment_validation_options[:empty] | ||
9 | + return | ||
10 | + end | ||
11 | + [:content_type, :size].each do |option| | ||
12 | + if attachment_validation_options[option] && attachment_options[option] && !attachment_options[option].include?(self.send(option)) | ||
13 | + errors.add_to_base attachment_validation_options[option] | ||
14 | + end | ||
15 | + end | ||
16 | + end | ||
17 | +end | ||
18 | + | ||
19 | +Technoweenie::AttachmentFu::ClassMethods.module_eval do | ||
20 | + # Options: | ||
21 | + # * <tt>:empty</tt> - Base error message when no file is uploaded. Default is "No file uploaded" | ||
22 | + # * <tt>:content_type</tt> - Base error message when the uploaded file is not a valid content type. | ||
23 | + # * <tt>:size</tt> - Base error message when the uploaded file is not a valid size. | ||
24 | + # | ||
25 | + # Example: | ||
26 | + # validates_attachment :content_type => "The file you uploaded was not a JPEG, PNG or GIF", | ||
27 | + # :size => "The image you uploaded was larger than the maximum size of 10MB" | ||
28 | + def validates_attachment(options={}) | ||
29 | + options[:empty] ||= "No file uploaded" | ||
30 | + class_inheritable_accessor :attachment_validation_options | ||
31 | + self.attachment_validation_options = options | ||
32 | + validate :attachment_valid? | ||
33 | + end | ||
34 | +end |