mirror of
https://github.com/github/rails.git
synced 2026-04-26 03:00:59 -04:00
Object#tap for Ruby < 1.8.7
This commit is contained in:
committed by
Yehuda Katz
parent
b1530545d2
commit
c2d23affad
@@ -1,5 +1,8 @@
|
||||
*2.3.0 [Edge]*
|
||||
|
||||
* Object#tap shim for Ruby < 1.8.7. Similar to Object#returning, tap yields self then returns self. [Jeremy Kemper]
|
||||
array.select { ... }.tap(&:inspect).map { ... }
|
||||
|
||||
* TimeWithZone#- gives correct result with wrapped DateTime, and with DateTime argument [Geoff Buesing]
|
||||
|
||||
* Updated i18n gem to version 0.1.1 #1635 [Yaroslav Markin]
|
||||
|
||||
@@ -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
|
||||
|
||||
8
activesupport/test/core_ext/object_ext_test.rb
Normal file
8
activesupport/test/core_ext/object_ext_test.rb
Normal file
@@ -0,0 +1,8 @@
|
||||
require 'abstract_unit'
|
||||
|
||||
class ObjectExtTest < Test::Unit::TestCase
|
||||
def test_tap_yields_and_returns_self
|
||||
foo = Object.new
|
||||
assert_equal foo, foo.tap { |x| assert_equal foo, x; :bar }
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user