Skip to content

Commit

Permalink
Add support to numericality: :other_than
Browse files Browse the repository at this point in the history
  • Loading branch information
gmmcal committed Mar 21, 2020
1 parent 321b87e commit af843e0
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 1 deletion.
Expand Up @@ -9,7 +9,8 @@ class ComparisonMatcher < ValidationMatcher
:>= => :greater_than_or_equal_to,
:< => :less_than,
:<= => :less_than_or_equal_to,
:== => :equal_to
:== => :equal_to,
:!= => :other_than,
}

def initialize(numericality_matcher, value, operator)
Expand Down Expand Up @@ -125,6 +126,8 @@ def assertions
[true, false, false]
when :<=
[true, true, false]
when :!=
[true, false, true]
end
end

Expand All @@ -146,6 +149,7 @@ def comparison_expectation
when :== then "equal to"
when :< then "less than"
when :<= then "less than or equal to"
when :!= then 'other than'
end
end
end
Expand Down
Expand Up @@ -204,6 +204,33 @@ module ActiveModel
# is_greater_than(21)
# end
#
# ##### is_other_than
#
# Use `is_other_than` to test usage of the `:other_than` option.
# This asserts that the attribute can take a number which is not equal to
# the given value.
#
# class Person
# include ActiveModel::Model
# attr_accessor :legal_age
#
# validates_numericality_of :legal_age, other_than: 21
# end
#
# # RSpec
# RSpec.describe Person, type: :model do
# it do
# should validate_numericality_of(:legal_age).
# is_other_than(21)
# end
# end
#
# # Minitest (Shoulda)
# class PersonTest < ActiveSupport::TestCase
# should validate_numericality_of(:legal_age).
# is_other_than(21)
# end
#
# ##### even
#
# Use `even` to test usage of the `:even` option. This asserts that the
Expand Down Expand Up @@ -395,6 +422,11 @@ def is_less_than_or_equal_to(value)
self
end

def is_other_than(value)
prepare_submatcher(comparison_matcher_for(value, :!=).for(@attribute))
self
end

def with_message(message)
@expects_custom_validation_message = true
@expected_message = message
Expand Down
Expand Up @@ -39,6 +39,13 @@ def all_qualifiers
validation_name: :equal_to,
validation_value: 1,
},
{
category: :comparison,
name: :is_other_than,
argument: 1,
validation_name: :other_than,
validation_value: 1,
},
{
category: :cardinality,
name: :odd,
Expand Down

0 comments on commit af843e0

Please sign in to comment.