提交 ebf69ab1 编写于 作者: T Tadas Tamošauskas

Object#in? also accepts multiple parameters

上级 4cdd44e3
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
......@@ -2,6 +2,16 @@
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])
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册