Module: ActiveRecord::Validations::ClassMethods
- Defined in:
- lib/delocalize/rails_ext/validation.rb
Instance Method Summary collapse
- #validates_date_format_of(*attr_names) ⇒ Object
-
#validates_numericality_of(*attr_names) ⇒ Object
Validates whether the value of the specified attribute is numeric by trying to convert it to a float with Kernel.Float (if
only_integer
is false) or applying it to the regular expression/\A[+\-]?\d+\Z/
(ifonly_integer
is set to true). - #validates_time_format_of(*attr_names) ⇒ Object
Instance Method Details
#validates_date_format_of(*attr_names) ⇒ Object
72 73 74 75 76 77 78 79 80 |
# File 'lib/delocalize/rails_ext/validation.rb', line 72 def validates_date_format_of(*attr_names) configuration = { :on => :save, :allow_nil => false } configuration.update(attr_names.) validates_each(attr_names,configuration) do |record, attr_name, value| raw_value = record.send("#{attr_name}_before_type_cast") || value Delocalize::LocalizedDateTimeParser.valid_format?(raw_value, Date) end end |
#validates_numericality_of(*attr_names) ⇒ Object
Validates whether the value of the specified attribute is numeric by trying to convert it to a float with Kernel.Float (if only_integer
is false) or applying it to the regular expression /\A[+\-]?\d+\Z/
(if only_integer
is set to true).
class Person < ActiveRecord::Base
validates_numericality_of :value, :on => :create
end
Configuration options:
-
:message
- A custom error message (default is: “is not a number”). -
:on
- Specifies when this validation is active (default is:save
, other options:create
,:update
). -
:only_integer
- Specifies whether the value has to be an integer, e.g. an integral value (default isfalse
). -
:allow_nil
- Skip validation if attribute isnil
(default isfalse
). Notice that for fixnum and float columns empty strings are converted tonil
. -
:greater_than
- Specifies the value must be greater than the supplied value. -
:greater_than_or_equal_to
- Specifies the value must be greater than or equal the supplied value. -
:equal_to
- Specifies the value must be equal to the supplied value. -
:less_than
- Specifies the value must be less than the supplied value. -
:less_than_or_equal_to
- Specifies the value must be less than or equal the supplied value. -
:odd
- Specifies the value must be an odd number. -
:even
- Specifies the value must be an even number. -
:if
- Specifies a method, proc or string to call to determine if the validation should occur (e.g.:if => :allow_validation
, or:if => Proc.new { |user| user.signup_step > 2 }
). The method, proc or string should return or evaluate to a true or false value. -
:unless
- Specifies a method, proc or string to call to determine if the validation should not occur (e.g.:unless => :skip_validation
, or:unless => Proc.new { |user| user.signup_step <= 2 }
). The method, proc or string should return or evaluate to a true or false value.
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/delocalize/rails_ext/validation.rb', line 28 def validates_numericality_of(*attr_names) configuration = { :on => :save, :only_integer => false, :allow_nil => false } configuration.update(attr_names.) = ALL_NUMERICALITY_CHECKS.keys & configuration.keys ( - [ :odd, :even ]).each do |option| raise ArgumentError, ":#{option} must be a number" unless configuration[option].is_a?(Numeric) end validates_each(attr_names,configuration) do |record, attr_name, value| raw_value = record.send("#{attr_name}_before_type_cast") || value next if configuration[:allow_nil] and raw_value.nil? unless raw_value.is_a?(Numeric) if configuration[:only_integer] matcher = /^[-+]?\d+([_]\d{3})*$/ else matcher = /^[-+]?\d+([_]\d{3})*[.]?\d*$/ end unless matcher.match(raw_value.to_s.strip) record.errors.add(attr_name, :not_a_number, :value => raw_value, :default => configuration[:message]) next end raw_value = configuration[:only_integer] ? raw_value.to_i : raw_value.to_f end .each do |option| case option when :odd, :even unless raw_value.to_i.method(ALL_NUMERICALITY_CHECKS[option])[] record.errors.add(attr_name, option, :value => raw_value, :default => configuration[:message]) end else record.errors.add(attr_name, option, :default => configuration[:message], :value => raw_value, :count => configuration[option]) unless raw_value.method(ALL_NUMERICALITY_CHECKS[option])[configuration[option]] end end end end |
#validates_time_format_of(*attr_names) ⇒ Object
82 83 84 85 86 87 88 89 90 |
# File 'lib/delocalize/rails_ext/validation.rb', line 82 def validates_time_format_of(*attr_names) configuration = { :on => :save, :allow_nil => false } configuration.update(attr_names.) validates_each(attr_names,configuration) do |record, attr_name, value| raw_value = record.send("#{attr_name}_before_type_cast") || value Delocalize::LocalizedDateTimeParser.valid_format?(raw_value, Time) end end |