Sha256: cf1a198ebe3db8499f832ea728de5d16cab188701683c529b2f698b8a513162e

Contents?: true

Size: 743 Bytes

Versions: 5

Compression:

Stored size: 743 Bytes

Contents

# frozen_string_literal: true

class CompareValidator < BaseValidator

  CHECKS = {
    less_than: :<,
    less_than_or_equal_to: :<=,
    greater_than: :>,
    greater_than_or_equal_to: :>=,
    equal_to: :==,
    not_equal_to: :!=
  }.freeze

  def validate_each(record, attribute, value)
    assert_valid_to!
    assert_valid_check!
    super
  end

  private

  def assert_valid_check!
    assert_valid_option!(:check, CHECKS.keys)
  end

  def assert_valid_to!
    return if options.key?(:to)

    raise ArgumentError, 'Missing ":to" attribute for comparison.'
  end

  def check
    options[:check] || :equal_to
  end

  def valid_attr?
    other = record.public_send(options[:to])
    value.public_send(CHECKS[check], other)
  end

end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
lite-validators-1.8.0 lib/lite/validators/compare_validator.rb
lite-validators-1.7.2 lib/lite/validators/compare_validator.rb
lite-validators-1.7.1 lib/lite/validators/compare_validator.rb
lite-validators-1.7.0 lib/lite/validators/compare_validator.rb
lite-validators-1.6.0 lib/lite/validators/compare_validator.rb