Class: SumOfValidator

Inherits:
ActiveModel::EachValidator
  • Object
show all
Defined in:
lib/activemodel-validators/sum_of_validator.rb

Instance Method Summary collapse

Instance Method Details

#check_validity!Object



2
3
4
5
6
# File 'lib/activemodel-validators/sum_of_validator.rb', line 2

def check_validity!
  unless options[:attr_names]
    raise ArgumentError, "must supply :attr_names option"
  end
end

#validate_each(record, attribute, value) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/activemodel-validators/sum_of_validator.rb', line 8

def validate_each(record, attribute, value)
  addends = options[:attr_names].map {|_| record[_] }
  return if value.blank? || addends.any?(&:blank?)
  sum = addends.sum
  unless value == sum
    record.errors.add(attribute, options[:message] || :sum_of,
                      options.merge(
                        attr_names: options[:attr_names].to_sentence,
                        addends: addends.join(' + '),
                        sum: sum,
                        value: value,
                      )
    )
  end
end