提交 d0368997 编写于 作者: B Brian Abreu 提交者: Yehuda Katz + Carl Lerche

Fixed ActiveSupport::OrderedHash::[] work identically to ::Hash::[] in ruby...

Fixed ActiveSupport::OrderedHash::[] work identically to ::Hash::[] in ruby 1.8.7 [#2832 state:resolved]
Signed-off-by: NYehuda Katz + Carl Lerche <ykatz+clerche@engineyard.com>
上级 e61afed6
......@@ -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
......
......@@ -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
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册