Sha256: 632df0f8f3bae59cb65c4849266cc43c9e17e2ccb8cc2a0cfb924b70babc8999

Contents?: true

Size: 955 Bytes

Versions: 5

Compression:

Stored size: 955 Bytes

Contents

class EqualityValidator < ActiveModel::EachValidator

  def validate_each(record, attribute, value)
    to = options.fetch(:to, nil)
    if to.nil?
      raise ArgumentError,
        "ArgumentError: missing ':to' attribute for comparison."
    end

    operator  = options.fetch(:operator, nil)
    operators = OPERATORS.keys
    unless operators.include?(operator)
      raise ArgumentError,
        "Unknown operator: #{operator.inspect}. Valid operators are: #{operators.map(&:inspect).join(', ')}"
    end
    operator  = OPERATORS.fetch(operator)

    unless value.send(operator.to_sym, record.send(to.to_sym))
      record.errors[attribute] << (options[:message] || I18n.t('active_validation.errors.messages.equality', attr: to, operator: operator))
    end
  end

  private

  OPERATORS = {
    less_than: :<,
    less_than_or_equal_to: :<=,
    greater_than: :>,
    greater_than_or_equal_to: :>=,
    equal_to: :==,
    not_equal_to: :!=
  }

end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
active_validation-2.2.2 lib/active_validation/validators/equality_validator.rb
active_validation-2.2.1 lib/active_validation/validators/equality_validator.rb
active_validation-2.2.0 lib/active_validation/validators/equality_validator.rb
active_validation-2.0.1 lib/active_validation/validators/equality_validator.rb
active_validation-2.0.0 lib/active_validation/validators/equality_validator.rb