diff options
author | Jeremy Kemper <jeremy@bitsweat.net> | 2009-03-21 04:33:15 -0700 |
---|---|---|
committer | Jeremy Kemper <jeremy@bitsweat.net> | 2009-03-21 04:39:54 -0700 |
commit | bca510cec23aff4c147f2ab5c30de930f120d84b (patch) | |
tree | b68b8adddf5ede72fb4dd8730af1102ce4f9d099 /activesupport/lib/active_support/core_ext/object/try.rb | |
parent | baf73e19a6f05fcb46c06d759b08f3cbe22ed1c9 (diff) | |
download | rails-bca510cec23aff4c147f2ab5c30de930f120d84b.tar.gz rails-bca510cec23aff4c147f2ab5c30de930f120d84b.tar.bz2 rails-bca510cec23aff4c147f2ab5c30de930f120d84b.zip |
try is an object extension
Diffstat (limited to 'activesupport/lib/active_support/core_ext/object/try.rb')
-rw-r--r-- | activesupport/lib/active_support/core_ext/object/try.rb | 36 |
1 files changed, 36 insertions, 0 deletions
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 <tt>Object#send</tt> 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 |