mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Fixes minor ruby 1.8 inconsistency
ActiveSupport::OrderedHash did not behave identically to Hash when given a block with a splat.
This commit is contained in:
parent
d1c74706c3
commit
c9cc36bde9
2 changed files with 28 additions and 1 deletions
|
@ -158,7 +158,11 @@ module ActiveSupport
|
|||
self
|
||||
end
|
||||
|
||||
alias_method :each_pair, :each
|
||||
def each_pair
|
||||
return to_enum(:each_pair) unless block_given?
|
||||
@keys.each {|key| yield key, self[key]}
|
||||
self
|
||||
end
|
||||
|
||||
alias_method :select, :find_all
|
||||
|
||||
|
|
|
@ -114,6 +114,9 @@ class OrderedHashTest < Test::Unit::TestCase
|
|||
end
|
||||
assert_equal @values, values
|
||||
assert_equal @keys, keys
|
||||
|
||||
expected_class = RUBY_VERSION < '1.9' ? Enumerable::Enumerator : Enumerator
|
||||
assert_kind_of expected_class, @ordered_hash.each_pair
|
||||
end
|
||||
|
||||
def test_find_all
|
||||
|
@ -257,6 +260,26 @@ class OrderedHashTest < Test::Unit::TestCase
|
|||
assert_equal @values, values
|
||||
end
|
||||
|
||||
def test_each_when_yielding_to_block_with_splat
|
||||
hash_values = []
|
||||
ordered_hash_values = []
|
||||
|
||||
@hash.each { |*v| hash_values << v }
|
||||
@ordered_hash.each { |*v| ordered_hash_values << v }
|
||||
|
||||
assert_equal hash_values.sort, ordered_hash_values.sort
|
||||
end
|
||||
|
||||
def test_each_pair_when_yielding_to_block_with_splat
|
||||
hash_values = []
|
||||
ordered_hash_values = []
|
||||
|
||||
@hash.each_pair { |*v| hash_values << v }
|
||||
@ordered_hash.each_pair { |*v| ordered_hash_values << v }
|
||||
|
||||
assert_equal hash_values.sort, ordered_hash_values.sort
|
||||
end
|
||||
|
||||
def test_order_after_yaml_serialization
|
||||
@deserialized_ordered_hash = YAML.load(YAML.dump(@ordered_hash))
|
||||
|
||||
|
|
Loading…
Reference in a new issue