Skip to content
Browse files

Fixed ActiveSupport::OrderedHash::[] work identically to ::Hash::[] i…

…n ruby 1.8.7 [#2832 state:resolved]

Signed-off-by: Yehuda Katz + Carl Lerche <ykatz+clerche@engineyard.com>
  • Loading branch information...
1 parent 1c855ad commit 944f4fc7d2ee8fc54008dfda1014983334427edc @brewski brewski committed with Yehuda Katz + Carl Lerche Jun 24, 2009
Showing with 42 additions and 5 deletions.
  1. +18 −4 activesupport/lib/active_support/ordered_hash.rb
  2. +24 −1 activesupport/test/ordered_hash_test.rb
View
22 activesupport/lib/active_support/ordered_hash.rb
@@ -12,11 +12,25 @@ def initialize(*args, &block)
def self.[](*args)
ordered_hash = new
- args.each_with_index { |val,ind|
- # Only every second value is a key.
- next if ind % 2 != 0
+
+ if (args.length == 1 && args.first.is_a?(Array))
+ args.first.each do |key_value_pair|
+ next unless (key_value_pair.is_a?(Array))
+ ordered_hash[key_value_pair[0]] = key_value_pair[1]
+ end
+
+ return ordered_hash
+ end
+
+ unless (args.size % 2 == 0)
+ raise ArgumentError.new("odd number of arguments for Hash")
+ end
+
+ args.each_with_index do |val, ind|
+ next if (ind % 2 != 0)
ordered_hash[val] = args[ind + 1]
- }
+ end
+
ordered_hash
end
View
25 activesupport/test/ordered_hash_test.rb
@@ -163,9 +163,32 @@ def test_inspect
assert @ordered_hash.inspect.include?(@hash.inspect)
end
- def test_alternate_initialization
+ def test_alternate_initialization_with_splat
alternate = ActiveSupport::OrderedHash[1,2,3,4]
assert_kind_of ActiveSupport::OrderedHash, alternate
assert_equal [1, 3], alternate.keys
end
+
+ def test_alternate_initialization_with_array
+ alternate = ActiveSupport::OrderedHash[ [
+ [1, 2],
+ [3, 4],
+ "bad key value pair",
+ [ 'missing value' ]
+ ]]
+
+ assert_kind_of ActiveSupport::OrderedHash, alternate
+ assert_equal [1, 3, 'missing value'], alternate.keys
+ assert_equal [2, 4, nil ], alternate.values
+ end
+
+ def test_alternate_initialization_raises_exception_on_odd_length_args
+ begin
+ alternate = ActiveSupport::OrderedHash[1,2,3,4,5]
+ flunk "Hash::[] should have raised an exception on initialization " +
+ "with an odd number of parameters"
+ rescue
+ assert_equal "odd number of arguments for Hash", $!.message
+ end
+ end
end

0 comments on commit 944f4fc

Please sign in to comment.
Something went wrong with that request. Please try again.