1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

validates_inclusion_of and validates_exclusion_of now accept

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

Fix #7118
This commit is contained in:
Rafael Mendonça França 2012-07-20 13:53:31 -03:00
parent f3e4d2097d
commit 53edd32684
3 changed files with 26 additions and 3 deletions

View file

@ -7,7 +7,7 @@ module ActiveModel
"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 @@ module ActiveModel
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.

View file

@ -28,6 +28,16 @@ class ExclusionValidationTest < ActiveModel::TestCase
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 )

View file

@ -60,6 +60,16 @@ class InclusionValidationTest < ActiveModel::TestCase
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 )