aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--activesupport/lib/active_support/core_ext/object/public_send.rb2
-rw-r--r--railties/guides/source/active_support_core_extensions.textile24
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+