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

Object#in? also accepts multiple parameters

This commit is contained in:
Tadas Tamošauskas 2011-11-26 23:51:09 +00:00
parent 4cdd44e3e0
commit ebf69ab163
2 changed files with 27 additions and 7 deletions

View file

@ -1,15 +1,25 @@
class Object
# Returns true if this object is included in the argument. Argument must be
# any object which responds to +#include?+. Usage:
# Returns true if this object is included in the argument(s). Argument must be
# any object which responds to +#include?+ or optionally, multiple arguments can be passed in. Usage:
#
# characters = ["Konata", "Kagami", "Tsukasa"]
# "Konata".in?(characters) # => true
#
# character = "Konata"
# character.in?("Konata", "Kagami", "Tsukasa") # => true
#
# This will throw an ArgumentError if the argument doesn't respond
# This will throw an ArgumentError if a single argument is passed in and it doesn't respond
# to +#include?+.
def in?(another_object)
another_object.include?(self)
rescue NoMethodError
raise ArgumentError.new("The parameter passed to #in? must respond to #include?")
def in?(*args)
if args.length > 1
args.include? self
else
another_object = args.first
if another_object.respond_to? :include?
another_object.include? self
else
raise ArgumentError.new("The single parameter passed to #in? must respond to #include?")
end
end
end
end

View file

@ -2,6 +2,16 @@ require 'abstract_unit'
require 'active_support/core_ext/object/inclusion'
class InTest < Test::Unit::TestCase
def test_in_multiple_args
assert :b.in?(:a,:b)
assert !:c.in?(:a,:b)
end
def test_in_multiple_arrays
assert [1,2].in?([1,2],[2,3])
assert ![1,2].in?([1,3],[2,1])
end
def test_in_array
assert 1.in?([1,2])
assert !3.in?([1,2])