aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/lib/active_support/core_ext/object
diff options
context:
space:
mode:
authorJeremy Kemper <jeremy@bitsweat.net>2009-01-07 13:19:48 -0800
committerJeremy Kemper <jeremy@bitsweat.net>2009-01-07 13:19:48 -0800
commit0f9e65b71f9af30dac17689e81f4353e9fcac5b6 (patch)
tree60b61c07e519ae2078575ec07ef7a030e4857467 /activesupport/lib/active_support/core_ext/object
parent17da45b789e0a2581eae6e6b2b1ae8d2b98e0f5d (diff)
downloadrails-0f9e65b71f9af30dac17689e81f4353e9fcac5b6.tar.gz
rails-0f9e65b71f9af30dac17689e81f4353e9fcac5b6.tar.bz2
rails-0f9e65b71f9af30dac17689e81f4353e9fcac5b6.zip
Object#tap for Ruby < 1.8.7
Diffstat (limited to 'activesupport/lib/active_support/core_ext/object')
-rw-r--r--activesupport/lib/active_support/core_ext/object/misc.rb15
1 files changed, 15 insertions, 0 deletions
diff --git a/activesupport/lib/active_support/core_ext/object/misc.rb b/activesupport/lib/active_support/core_ext/object/misc.rb
index 46f9c7d676..4570570bbc 100644
--- a/activesupport/lib/active_support/core_ext/object/misc.rb
+++ b/activesupport/lib/active_support/core_ext/object/misc.rb
@@ -40,6 +40,21 @@ class Object
value
end
+ # Yields <code>x</code> to the block, and then returns <code>x</code>.
+ # The primary purpose of this method is to "tap into" a method chain,
+ # in order to perform operations on intermediate results within the chain.
+ #
+ # (1..10).tap { |x| puts "original: #{x.inspect}" }.to_a.
+ # tap { |x| puts "array: #{x.inspect}" }.
+ # select { |x| x%2 == 0 }.
+ # tap { |x| puts "evens: #{x.inspect}" }.
+ # map { |x| x*x }.
+ # tap { |x| puts "squares: #{x.inspect}" }
+ def tap
+ yield self
+ self
+ end unless Object.respond_to?(:tap)
+
# An elegant way to factor duplication out of options passed to a series of
# method calls. Each method called in the block, with the block variable as
# the receiver, will have its options merged with the default +options+ hash