Methods
- C
- F
- P
- V
Constants
CHECKS | = | { :greater_than => :>, :greater_than_or_equal_to => :>=, :equal_to => :==, :less_than => :<, :less_than_or_equal_to => :<=, :odd => :odd?, :even => :even? }.freeze |
RESERVED_OPTIONS | = | CHECKS.keys + [:only_integer] |
Instance Public methods
# File activemodel/lib/active_model/validations/numericality.rb, line 11 11: def check_validity! 12: keys = CHECKS.keys - [:odd, :even] 13: options.slice(*keys).each do |option, value| 14: next if value.is_a?(Numeric) || value.is_a?(Proc) || value.is_a?(Symbol) 15: raise ArgumentError, ":#{option} must be a number, a symbol or a proc" 16: end 17: end
# File activemodel/lib/active_model/validations/numericality.rb, line 19 19: def validate_each(record, attr_name, value) 20: before_type_cast = "#{attr_name}_before_type_cast" 21: 22: raw_value = record.send(before_type_cast) if record.respond_to?(before_type_cast.to_sym) 23: raw_value ||= value 24: 25: return if options[:allow_nil] && raw_value.nil? 26: 27: unless value = parse_raw_value_as_a_number(raw_value) 28: record.errors.add(attr_name, :not_a_number, filtered_options(raw_value)) 29: return 30: end 31: 32: if options[:only_integer] 33: unless value = parse_raw_value_as_an_integer(raw_value) 34: record.errors.add(attr_name, :not_an_integer, filtered_options(raw_value)) 35: return 36: end 37: end 38: 39: options.slice(*CHECKS.keys).each do |option, option_value| 40: case option 41: when :odd, :even 42: unless value.to_i.send(CHECKS[option]) 43: record.errors.add(attr_name, option, filtered_options(value)) 44: end 45: else 46: option_value = option_value.call(record) if option_value.is_a?(Proc) 47: option_value = record.send(option_value) if option_value.is_a?(Symbol) 48: 49: unless value.send(CHECKS[option], option_value) 50: record.errors.add(attr_name, option, filtered_options(value).merge(:count => option_value)) 51: end 52: end 53: end 54: end
Instance Protected methods
# File activemodel/lib/active_model/validations/numericality.rb, line 58 58: def parse_raw_value_as_a_number(raw_value) 59: case raw_value 60: when /\A0[xX]/ 61: nil 62: else 63: begin 64: Kernel.Float(raw_value) 65: rescue ArgumentError, TypeError 66: nil 67: end 68: end 69: end