aboutsummaryrefslogtreecommitdiffstats
path: root/activemodel/lib/active_model/validations/numericality.rb
diff options
context:
space:
mode:
authorreu <rnavarro1@gmail.com>2010-04-24 14:17:14 -0300
committerJosé Valim <jose.valim@gmail.com>2010-04-25 10:14:15 +0200
commit77c099c231f2efb36a2a77a32138ed5c6761ec19 (patch)
treea4e08061caf1848a5ace8e1262266e88f7772c0f /activemodel/lib/active_model/validations/numericality.rb
parent864bd9c21fdc8ce265c48fdfa2d4d7917032e717 (diff)
downloadrails-77c099c231f2efb36a2a77a32138ed5c6761ec19.tar.gz
rails-77c099c231f2efb36a2a77a32138ed5c6761ec19.tar.bz2
rails-77c099c231f2efb36a2a77a32138ed5c6761ec19.zip
Fix validates_numericaly_of only integer error message [#4406 state:resolved]
Signed-off-by: José Valim <jose.valim@gmail.com>
Diffstat (limited to 'activemodel/lib/active_model/validations/numericality.rb')
-rw-r--r--activemodel/lib/active_model/validations/numericality.rb29
1 files changed, 18 insertions, 11 deletions
diff --git a/activemodel/lib/active_model/validations/numericality.rb b/activemodel/lib/active_model/validations/numericality.rb
index c6d84c5312..f974999bef 100644
--- a/activemodel/lib/active_model/validations/numericality.rb
+++ b/activemodel/lib/active_model/validations/numericality.rb
@@ -25,11 +25,18 @@ module ActiveModel
return if options[:allow_nil] && raw_value.nil?
- unless value = parse_raw_value(raw_value, options)
+ unless value = parse_raw_value_as_a_number(raw_value)
record.errors.add(attr_name, :not_a_number, :value => raw_value, :default => options[:message])
return
end
+ if options[:only_integer]
+ unless value = parse_raw_value_as_an_integer(raw_value)
+ record.errors.add(attr_name, :not_an_integer, :value => raw_value, :default => options[:message])
+ return
+ end
+ end
+
options.slice(*CHECKS.keys).each do |option, option_value|
case option
when :odd, :even
@@ -44,23 +51,23 @@ module ActiveModel
record.errors.add(attr_name, option, :default => options[:message], :value => value, :count => option_value)
end
end
- end
+ end
end
protected
- def parse_raw_value(raw_value, options)
- if options[:only_integer]
- raw_value.to_i if raw_value.to_s =~ /\A[+-]?\d+\Z/
- else
- begin
- Kernel.Float(raw_value)
- rescue ArgumentError, TypeError
- nil
- end
+ def parse_raw_value_as_a_number(raw_value)
+ begin
+ Kernel.Float(raw_value)
+ rescue ArgumentError, TypeError
+ nil
end
end
+ def parse_raw_value_as_an_integer(raw_value)
+ raw_value.to_i if raw_value.to_s =~ /\A[+-]?\d+\Z/
+ end
+
end
module ClassMethods