`validates_inclusion_of` and `validates_exclusion_of` now accept

`:within` option as alias of `:in` as documented.

Fix #7118
上级 f3e4d209
......@@ -7,7 +7,7 @@ module Clusivity #:nodoc:
"and must be supplied as the :in option of the configuration hash"
def check_validity!
unless [:include?, :call].any?{ |method| options[:in].respond_to?(method) }
unless [:include?, :call].any?{ |method| range.respond_to?(method) }
raise ArgumentError, ERROR_MESSAGE
end
end
......@@ -15,11 +15,14 @@ def check_validity!
private
def include?(record, value)
delimiter = options[:in]
exclusions = delimiter.respond_to?(:call) ? delimiter.call(record) : delimiter
exclusions = range.respond_to?(:call) ? range.call(record) : range
exclusions.send(inclusion_method(exclusions), value)
end
def range
@range ||= options[:in] || options[:within]
end
# In Ruby 1.9 <tt>Range#include?</tt> on non-numeric ranges checks all possible values in the
# range for equality, so it may be slow for large ranges. The new <tt>Range#cover?</tt>
# uses the previous logic of comparing a value with the range endpoints.
......
......@@ -28,6 +28,16 @@ def test_validates_exclusion_of_with_formatted_message
assert_equal ["option monkey is restricted"], t.errors[:title]
end
def test_validates_exclusion_of_with_within_option
Topic.validates_exclusion_of( :title, :within => %w( abe monkey ) )
assert Topic.new("title" => "something", "content" => "abc")
t = Topic.new("title" => "monkey")
assert t.invalid?
assert t.errors[:title].any?
end
def test_validates_exclusion_of_for_ruby_class
Person.validates_exclusion_of :karma, :in => %w( abe monkey )
......
......@@ -60,6 +60,16 @@ def test_validates_inclusion_of_with_formatted_message
assert_equal ["option uhoh is not in the list"], t.errors[:title]
end
def test_validates_inclusion_of_with_within_option
Topic.validates_inclusion_of( :title, :within => %w( a b c d e f g ) )
assert Topic.new("title" => "a", "content" => "abc").valid?
t = Topic.new("title" => "uhoh", "content" => "abc")
assert t.invalid?
assert t.errors[:title].any?
end
def test_validates_inclusion_of_for_ruby_class
Person.validates_inclusion_of :karma, :in => %w( abe monkey )
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册