From 22f6189a55b3a096e91d3ec3a97cf5114fc93b72 Mon Sep 17 00:00:00 2001 From: Ari Pollak Date: Thu, 23 Oct 2014 21:47:16 -0400 Subject: DRY up try/try! --- activesupport/lib/active_support/core_ext/object/try.rb | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) (limited to 'activesupport') diff --git a/activesupport/lib/active_support/core_ext/object/try.rb b/activesupport/lib/active_support/core_ext/object/try.rb index 112ec05e15..09b8a19789 100644 --- a/activesupport/lib/active_support/core_ext/object/try.rb +++ b/activesupport/lib/active_support/core_ext/object/try.rb @@ -44,22 +44,18 @@ class Object # +SimpleDelegator+ will delegate +try+ to the target instead of calling it on # delegator itself. def try(*a, &b) - if a.empty? && block_given? - if b.arity.zero? - instance_eval(&b) - else - yield self - end - else - public_send(*a, &b) if respond_to?(a.first) - end + try!(*a, &b) if a.empty? || respond_to?(a.first) end # Same as #try, but will raise a NoMethodError exception if the receiving is not nil and # does not implement the tried method. def try!(*a, &b) if a.empty? && block_given? - try(*a, &b) + if b.arity.zero? + instance_eval(&b) + else + yield self + end else public_send(*a, &b) end -- cgit v1.2.3