提交 51730792 编写于 作者: P Pratik Naik

Added Object#try. ( Taken from http://ozmm.org/posts/try.html ) [Chris Wanstrath]

上级 51a19ae2
*2.3.0 [Edge]*
* Added Object#try. ( Taken from http://ozmm.org/posts/try.html ) [Chris Wanstrath]
* Added Enumerable#none? to check that none of the elements match the block #1408 [Damian Janowski]
* TimeZone offset tests: use current_period, to ensure TimeZone#utc_offset is up-to-date [Geoff Buesing]
......
......@@ -71,4 +71,17 @@ def with_options(options)
def acts_like?(duck)
respond_to? "acts_like_#{duck}?"
end
# Tries to send the method only if object responds to it. Return +nil+ otherwise.
#
# ==== Example :
#
# # Without try
# @person ? @person.name : nil
#
# With try
# @person.try(:name)
def try(method)
send(method) if respond_to?(method, true)
end
end
......@@ -247,3 +247,28 @@ def test_instance_exec_nested
[arg] + instance_exec('bar') { |v| [reverse, v] } }
end
end
class ObjectTryTest < Test::Unit::TestCase
def setup
@string = "Hello"
end
def test_nonexisting_method
method = :undefined_method
assert !@string.respond_to?(method)
assert_nil @string.try(method)
end
def test_valid_method
assert_equal 5, @string.try(:size)
end
def test_valid_private_method
class << @string
private :size
end
assert_equal 5, @string.try(:size)
end
end
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册