diff options
author | José Valim <jose.valim@gmail.com> | 2011-05-27 09:43:09 -0700 |
---|---|---|
committer | José Valim <jose.valim@gmail.com> | 2011-05-27 09:43:09 -0700 |
commit | 4ae8381e3a2170a667a12a88156414cbb3a35a83 (patch) | |
tree | 7cafd42a31275b177367545aa2a378ae9283dffb | |
parent | d1c74706c35b0b17b22c4b2541353d1b9ac6bfa5 (diff) | |
parent | c9cc36bde9f779c917171e7c378285b57f748414 (diff) | |
download | rails-4ae8381e3a2170a667a12a88156414cbb3a35a83.tar.gz rails-4ae8381e3a2170a667a12a88156414cbb3a35a83.tar.bz2 rails-4ae8381e3a2170a667a12a88156414cbb3a35a83.zip |
Merge pull request #1359 from AndrewRadev/master
Fix for ruby 1.8 bug with ActiveSupport::OrderedHash
-rw-r--r-- | activesupport/lib/active_support/ordered_hash.rb | 6 | ||||
-rw-r--r-- | activesupport/test/ordered_hash_test.rb | 23 |
2 files changed, 28 insertions, 1 deletions
diff --git a/activesupport/lib/active_support/ordered_hash.rb b/activesupport/lib/active_support/ordered_hash.rb index 762a64a881..68f4bd66da 100644 --- a/activesupport/lib/active_support/ordered_hash.rb +++ b/activesupport/lib/active_support/ordered_hash.rb @@ -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 diff --git a/activesupport/test/ordered_hash_test.rb b/activesupport/test/ordered_hash_test.rb index f3dcd7b068..bf851dbcbc 100644 --- a/activesupport/test/ordered_hash_test.rb +++ b/activesupport/test/ordered_hash_test.rb @@ -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)) |