diff options
-rw-r--r-- | activesupport/lib/active_support/core_ext/object/public_send.rb | 2 | ||||
-rw-r--r-- | railties/guides/source/active_support_core_extensions.textile | 24 |
2 files changed, 25 insertions, 1 deletions
diff --git a/activesupport/lib/active_support/core_ext/object/public_send.rb b/activesupport/lib/active_support/core_ext/object/public_send.rb index 233e69b4f8..2e77a22c4b 100644 --- a/activesupport/lib/active_support/core_ext/object/public_send.rb +++ b/activesupport/lib/active_support/core_ext/object/public_send.rb @@ -3,7 +3,7 @@ require 'active_support/core_ext/kernel/singleton_class' class Object unless Object.public_method_defined?(:public_send) # Backports Object#public_send from 1.9 - def public_send(method, *args, &block) # :nodoc: + def public_send(method, *args, &block) # Don't create a singleton class for the object if it doesn't already have one # (This also protects us from classes like Fixnum and Symbol, which cannot have a # singleton class.) diff --git a/railties/guides/source/active_support_core_extensions.textile b/railties/guides/source/active_support_core_extensions.textile index 781d3d08cd..8716e94bd9 100644 --- a/railties/guides/source/active_support_core_extensions.textile +++ b/railties/guides/source/active_support_core_extensions.textile @@ -452,6 +452,30 @@ Examples of +in?+: NOTE: Defined in +active_support/core_ext/object/inclusion.rb+. +h4. +public_send+ + +This method is available by default in Ruby 1.9, and is backported to Ruby 1.8 by Active Support. Like the regular +send+ method, +public_send+ allows you to call a method when the name is not known until runtime. However, if the method is not public then a +NoMethodError+ exception will be raised. + +<ruby> +class Greeter + def hello(who) + "Hello " + who + end + + private + + def secret + "sauce" + end +end + +greeter = Greeter.new +greeter.public_send(:hello, 'Jim') # => "Hello Jim" +greeter.public_send(:secret) # => NoMethodError +</ruby> + +NOTE: Defined in +active_support/core_ext/object/public_send.rb+. + h3. Extensions to +Module+ h4. +alias_method_chain+ |