Merge pull request #1195 from dmathieu/try_undefined_method

Don't raise NoMethodError the tried method doesn't exists
This commit is contained in:
David Heinemeier Hansson 2011-05-21 17:56:44 -07:00
commit 073f80eaa8
2 changed files with 9 additions and 1 deletions

View File

@ -28,6 +28,8 @@ class Object
def try(*a, &b)
if a.empty? && block_given?
yield self
elsif !a.empty? && !respond_to?(a.first)
nil
else
__send__(*a, &b)
end

View File

@ -99,7 +99,13 @@ class ObjectTryTest < Test::Unit::TestCase
def test_nonexisting_method
method = :undefined_method
assert !@string.respond_to?(method)
assert_raise(NoMethodError) { @string.try(method) }
assert_nil @string.try(method)
end
def test_nonexisting_method_with_arguments
method = :undefined_method
assert !@string.respond_to?(method)
assert_nil @string.try(method, 'llo', 'y')
end
def test_valid_method