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
|
# File 'activemodel/lib/active_model/validations/numericality.rb', line 36
def validate_each(record, attr_name, value, precision: Float::DIG, scale: nil)
unless is_number?(value, precision, scale)
record.errors.add(attr_name, :not_a_number, **filtered_options(value))
return
end
if allow_only_integer?(record) && !is_integer?(value)
record.errors.add(attr_name, :not_an_integer, **filtered_options(value))
return
end
value = parse_as_number(value, precision, scale)
options.slice(*RESERVED_OPTIONS).each do |option, option_value|
if NUMBER_CHECKS.include?(option)
unless value.to_i.public_send(NUMBER_CHECKS[option])
record.errors.add(attr_name, option, **filtered_options(value))
end
elsif RANGE_CHECKS.include?(option)
unless value.public_send(RANGE_CHECKS[option], option_value)
record.errors.add(attr_name, option, **filtered_options(value).merge!(count: option_value))
end
elsif COMPARE_CHECKS.include?(option)
option_value = option_as_number(record, option_value, precision, scale)
unless value.public_send(COMPARE_CHECKS[option], option_value)
record.errors.add(attr_name, option, **filtered_options(value).merge!(count: option_value))
end
end
end
end
|