From bca510cec23aff4c147f2ab5c30de930f120d84b Mon Sep 17 00:00:00 2001 From: Jeremy Kemper Date: Sat, 21 Mar 2009 04:33:15 -0700 Subject: try is an object extension --- .../lib/active_support/core_ext/object.rb | 1 + .../lib/active_support/core_ext/object/try.rb | 36 ++++++++++++++++++++++ activesupport/lib/active_support/core_ext/try.rb | 36 ---------------------- 3 files changed, 37 insertions(+), 36 deletions(-) create mode 100644 activesupport/lib/active_support/core_ext/object/try.rb delete mode 100644 activesupport/lib/active_support/core_ext/try.rb (limited to 'activesupport/lib/active_support/core_ext') diff --git a/activesupport/lib/active_support/core_ext/object.rb b/activesupport/lib/active_support/core_ext/object.rb index 31a1526674..96385d2b87 100644 --- a/activesupport/lib/active_support/core_ext/object.rb +++ b/activesupport/lib/active_support/core_ext/object.rb @@ -1,5 +1,6 @@ require 'active_support/core_ext/object/blank' require 'active_support/core_ext/object/duplicable' +require 'active_support/core_ext/object/try' require 'active_support/core_ext/object/conversions' require 'active_support/core_ext/object/extending' diff --git a/activesupport/lib/active_support/core_ext/object/try.rb b/activesupport/lib/active_support/core_ext/object/try.rb new file mode 100644 index 0000000000..a1c63a0e54 --- /dev/null +++ b/activesupport/lib/active_support/core_ext/object/try.rb @@ -0,0 +1,36 @@ +class Object + # Invokes the method identified by the symbol +method+, passing it any arguments + # and/or the block specified, just like the regular Ruby Object#send does. + # + # *Unlike* that method however, a +NoMethodError+ exception will *not* be raised + # and +nil+ will be returned instead, if the receiving object is a +nil+ object or NilClass. + # + # ==== Examples + # + # Without try + # @person && @person.name + # or + # @person ? @person.name : nil + # + # With try + # @person.try(:name) + # + # +try+ also accepts arguments and/or a block, for the method it is trying + # Person.try(:find, 1) + # @people.try(:collect) {|p| p.name} + #-- + # This method definition below is for rdoc purposes only. The alias_method call + # below overrides it as an optimization since +try+ behaves like +Object#send+, + # unless called on +NilClass+. + def try(method, *args, &block) + send(method, *args, &block) + end + remove_method :try + alias_method :try, :__send__ +end + +class NilClass #:nodoc: + def try(*args) + nil + end +end diff --git a/activesupport/lib/active_support/core_ext/try.rb b/activesupport/lib/active_support/core_ext/try.rb deleted file mode 100644 index 3de198d198..0000000000 --- a/activesupport/lib/active_support/core_ext/try.rb +++ /dev/null @@ -1,36 +0,0 @@ -class Object - # Invokes the method identified by the symbol +method+, passing it any arguments - # and/or the block specified, just like the regular Ruby Object#send does. - # - # *Unlike* that method however, a +NoMethodError+ exception will *not* be raised - # and +nil+ will be returned instead, if the receiving object is a +nil+ object or NilClass. - # - # ==== Examples - # - # Without try - # @person && @person.name - # or - # @person ? @person.name : nil - # - # With try - # @person.try(:name) - # - # +try+ also accepts arguments and/or a block, for the method it is trying - # Person.try(:find, 1) - # @people.try(:collect) {|p| p.name} - #-- - # This method definition below is for rdoc purposes only. The alias_method call - # below overrides it as an optimization since +try+ behaves like +Object#send+, - # unless called on +NilClass+. - def try(method, *args, &block) - send(method, *args, &block) - end - remove_method :try - alias_method :try, :__send__ -end - -class NilClass - def try(*args) - nil - end -end -- cgit v1.2.3