Skip to content

Commit

Permalink
Fixed ActiveSupport::OrderedHash::[] work identically to ::Hash::[] i…
Browse files Browse the repository at this point in the history
…n ruby 1.8.7 [#2832 state:resolved]

Signed-off-by: Yehuda Katz + Carl Lerche <ykatz+clerche@engineyard.com>
  • Loading branch information
Brian Abreu authored and Yehuda Katz + Carl Lerche committed Jul 2, 2009
1 parent 1c855ad commit 944f4fc
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 5 deletions.
22 changes: 18 additions & 4 deletions activesupport/lib/active_support/ordered_hash.rb
Expand Up @@ -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

Expand Down
25 changes: 24 additions & 1 deletion activesupport/test/ordered_hash_test.rb
Expand Up @@ -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.