Sha256: 985c63c4f8611594527d9e8b6f0ca238898212123f76aeb5f3552d6fc0a460ef

Contents?: true

Size: 869 Bytes

Versions: 3

Compression:

Stored size: 869 Bytes

Contents

module ActiveModel
  module Validations
    class SumOfValidator < ActiveModel::EachValidator
      def check_validity!
        unless options[:attr_names]
          raise ArgumentError, "must supply :attr_names option"
        end
      end

      def validate_each(record, attribute, value)
        addends = options[:attr_names].map {|_| record[_] }
        return if value.blank?
        sum = addends.reject(&:blank?).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
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
activemodel-validators-3.0.1 lib/activemodel-validators/sum_of_validator.rb
activemodel-validators-3.0.0 lib/activemodel-validators/sum_of_validator.rb
activemodel-validators-2.0.0 lib/activemodel-validators/sum_of_validator.rb