Skip to content
This repository has been archived by the owner on Jul 13, 2023. It is now read-only.

Lambda (or Proc) support in validation messages #411

Merged
1 commit merged into from
Feb 16, 2011
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions lib/paperclip.rb
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -276,6 +276,7 @@ def validates_attachment_size name, options = {}
max = options[:less_than] || (options[:in] && options[:in].last) || (1.0/0) max = options[:less_than] || (options[:in] && options[:in].last) || (1.0/0)
range = (min..max) range = (min..max)
message = options[:message] || "file size must be between :min and :max bytes." message = options[:message] || "file size must be between :min and :max bytes."
message = message.call if message.respond_to?(:call)
message = message.gsub(/:min/, min.to_s).gsub(/:max/, max.to_s) message = message.gsub(/:min/, min.to_s).gsub(/:max/, max.to_s)


validates_inclusion_of :"#{name}_file_size", validates_inclusion_of :"#{name}_file_size",
Expand Down Expand Up @@ -330,6 +331,7 @@ def validates_attachment_content_type name, options = {}
if !allowed_types.any?{|t| t === value } && !(value.nil? || value.blank?) if !allowed_types.any?{|t| t === value } && !(value.nil? || value.blank?)
if record.errors.method(:add).arity == -2 if record.errors.method(:add).arity == -2
message = options[:message] || "is not one of #{allowed_types.join(", ")}" message = options[:message] || "is not one of #{allowed_types.join(", ")}"
message = message.call if message.respond_to?(:call)
record.errors.add(:"#{name}_content_type", message) record.errors.add(:"#{name}_content_type", message)
else else
record.errors.add(:"#{name}_content_type", :inclusion, :default => options[:message], :value => value) record.errors.add(:"#{name}_content_type", :inclusion, :default => options[:message], :value => value)
Expand Down
30 changes: 30 additions & 0 deletions test/paperclip_test.rb
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -252,6 +252,21 @@ def self.should_validate validation, options, valid_file, invalid_file
should_validate validation, options, valid_file, invalid_file should_validate validation, options, valid_file, invalid_file
end end


context "with content_type validation and lambda message" do
context "and assigned an invalid file" do
setup do
Dummy.send(:"validates_attachment_content_type", :avatar, :content_type => %r{image/.*}, :message => lambda {'lambda content type message'})
@dummy = Dummy.new
@dummy.avatar &&= File.open(File.join(FIXTURES_DIR, "text.txt"), "rb")
@dummy.valid?
end

should "have a content type error message" do
assert [@dummy.errors[:avatar_content_type]].flatten.any?{|error| error =~ %r/lambda content type message/ }
end
end
end

context "with size validation and less_than 10240 option" do context "with size validation and less_than 10240 option" do
context "and assigned an invalid file" do context "and assigned an invalid file" do
setup do setup do
Expand All @@ -267,5 +282,20 @@ def self.should_validate validation, options, valid_file, invalid_file
end end
end end


context "with size validation and less_than 10240 option with lambda message" do
context "and assigned an invalid file" do
setup do
Dummy.send(:"validates_attachment_size", :avatar, :less_than => 10240, :message => lambda {'lambda between 0 and 10240 bytes'})
@dummy = Dummy.new
@dummy.avatar &&= File.open(File.join(FIXTURES_DIR, "12k.png"), "rb")
@dummy.valid?
end

should "have a file size min/max error message" do
assert [@dummy.errors[:avatar_file_size]].flatten.any?{|error| error =~ %r/lambda between 0 and 10240 bytes/ }
end
end
end

end end
end end