Skip to content

Commit

Permalink
Return a sized Enumerator from Hash#transform_values{!}
Browse files Browse the repository at this point in the history
But transform_keys{!} can't settlement own size.
  • Loading branch information
kachick committed Sep 29, 2015
1 parent 64df657 commit 3692a2c
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 4 deletions.
4 changes: 2 additions & 2 deletions activesupport/lib/active_support/core_ext/hash/keys.rb
Expand Up @@ -10,7 +10,7 @@ class Hash
#
# hash.transform_keys.with_index { |k, i| [k, i].join } # => {"name0"=>"Rob", "age1"=>"28"}
def transform_keys
return enum_for(:transform_keys) unless block_given?
return enum_for(:transform_keys) { size } unless block_given?
result = self.class.new
each_key do |key|
result[yield(key)] = self[key]
Expand All @@ -21,7 +21,7 @@ def transform_keys
# Destructively converts all keys using the +block+ operations.
# Same as +transform_keys+ but modifies +self+.
def transform_keys!
return enum_for(:transform_keys!) unless block_given?
return enum_for(:transform_keys!) { size } unless block_given?
keys.each do |key|
self[yield(key)] = delete(key)
end
Expand Down
2 changes: 2 additions & 0 deletions activesupport/test/core_ext/hash/transform_keys_test.rb
Expand Up @@ -21,12 +21,14 @@ class TransformKeysTest < ActiveSupport::TestCase
test "transform_keys returns an Enumerator if no block is given" do
original = { a: 'a', b: 'b' }
enumerator = original.transform_keys
assert_nil enumerator.size
assert_equal Enumerator, enumerator.class
end

test "transform_keys! returns an Enumerator if no block is given" do
original = { a: 'a', b: 'b' }
enumerator = original.transform_keys!
assert_nil enumerator.size
assert_equal Enumerator, enumerator.class
end

Expand Down
6 changes: 4 additions & 2 deletions activesupport/test/core_ext/hash/transform_values_test.rb
Expand Up @@ -47,15 +47,17 @@ class TransformValuesTest < ActiveSupport::TestCase
assert_nil mapped[:b]
end

test "transform_values returns an Enumerator if no block is given" do
test "transform_values returns a sized Enumerator if no block is given" do
original = { a: 'a', b: 'b' }
enumerator = original.transform_values
assert_equal original.size, enumerator.size
assert_equal Enumerator, enumerator.class
end

test "transform_values! returns an Enumerator if no block is given" do
test "transform_values! returns a sized Enumerator if no block is given" do
original = { a: 'a', b: 'b' }
enumerator = original.transform_values!
assert_equal original.size, enumerator.size
assert_equal Enumerator, enumerator.class
end

Expand Down

0 comments on commit 3692a2c

Please sign in to comment.