class Shoulda::Matchers::ActiveModel::NumericalityMatchers::ComparisonMatcher

Examples:

it { should validate_numericality_of(:attr).
              is_greater_than(6).
              less_than(20)...(and so on) }

Constants

ERROR_MESSAGES

Public Class Methods

new(numericality_matcher, value, operator) click to toggle source
# File lib/shoulda/matchers/active_model/numericality_matchers/comparison_matcher.rb, line 18
def initialize(numericality_matcher, value, operator)
  unless numericality_matcher.respond_to? :diff_to_compare
    raise ArgumentError, 'numericality_matcher is invalid'
  end
  @numericality_matcher = numericality_matcher
  @value = value
  @operator = operator
  @message = ERROR_MESSAGES[operator]
  @comparison_combos = comparison_combos
end

Public Instance Methods

comparison_description() click to toggle source
# File lib/shoulda/matchers/active_model/numericality_matchers/comparison_matcher.rb, line 43
def comparison_description
  "#{expectation} #{@value}"
end
for(attribute) click to toggle source
# File lib/shoulda/matchers/active_model/numericality_matchers/comparison_matcher.rb, line 29
def for(attribute)
  @attribute = attribute
  self
end
matches?(subject) click to toggle source
# File lib/shoulda/matchers/active_model/numericality_matchers/comparison_matcher.rb, line 34
def matches?(subject)
  @subject = subject
  all_bounds_correct?
end
with_message(message) click to toggle source
# File lib/shoulda/matchers/active_model/numericality_matchers/comparison_matcher.rb, line 39
def with_message(message)
  @message = message
end

Private Instance Methods

all_bounds_correct?() click to toggle source
# File lib/shoulda/matchers/active_model/numericality_matchers/comparison_matcher.rb, line 78
def all_bounds_correct?
  @comparison_combos.all? do |diff, checker_type|
    __send__(checker_type, @value + diff) do |matcher|
      matcher.with_message(@message, values: { count: @value })
    end
  end
end
comparison_combos() click to toggle source
# File lib/shoulda/matchers/active_model/numericality_matchers/comparison_matcher.rb, line 49
def comparison_combos
  allow = :allows_value_of
  disallow = :disallows_value_of
  checker_types =
    case @operator
      when :> then [allow, disallow, disallow]
      when :>= then [allow, allow, disallow]
      when :== then [disallow, allow, disallow]
      when :< then [disallow, disallow, allow]
      when :<= then [disallow, allow, allow]
    end
  diffs_to_compare.zip(checker_types)
end
diffs_to_compare() click to toggle source
# File lib/shoulda/matchers/active_model/numericality_matchers/comparison_matcher.rb, line 63
def diffs_to_compare
  diff = @numericality_matcher.diff_to_compare
  [diff, 0, -diff]
end
expectation() click to toggle source
# File lib/shoulda/matchers/active_model/numericality_matchers/comparison_matcher.rb, line 68
def expectation
  case @operator
    when :> then "greater than"
    when :>= then "greater than or equal to"
    when :== then "equal to"
    when :< then "less than"
    when :<= then "less than or equal to"
  end
end