mirror of
https://github.com/github/rails.git
synced 2026-04-26 03:00:59 -04:00
Fixed ActiveSupport::OrderedHash::[] work identically to ::Hash::[] in ruby 1.8.7 [#2832 state:resolved]
Signed-off-by: Yehuda Katz + Carl Lerche <ykatz+clerche@engineyard.com>
This commit is contained in:
committed by
Yehuda Katz + Carl Lerche
parent
1c855ad4e7
commit
944f4fc7d2
@@ -12,11 +12,25 @@ module ActiveSupport
|
||||
|
||||
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 @@ class OrderedHashTest < Test::Unit::TestCase
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user