Fixed ActiveSupport::OrderedHash #delete_if, #reject!, and #reject, which did not sync the @keys after the operation.
This probably holds true for other mutating methods as well. Signed-off-by: Michael Koziarski <michael@koziarski.com>
This commit is contained in:
parent
69387ce016
commit
7394d12dc7
@ -25,6 +25,25 @@ def delete(key)
|
|||||||
super
|
super
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def delete_if
|
||||||
|
super
|
||||||
|
sync_keys!
|
||||||
|
self
|
||||||
|
end
|
||||||
|
|
||||||
|
def reject!
|
||||||
|
super
|
||||||
|
sync_keys!
|
||||||
|
self
|
||||||
|
end
|
||||||
|
|
||||||
|
def reject(&block)
|
||||||
|
dup.reject!(&block)
|
||||||
|
end
|
||||||
|
|
||||||
|
alias_method :super_keys, :keys
|
||||||
|
private :super_keys
|
||||||
|
|
||||||
def keys
|
def keys
|
||||||
@keys
|
@keys
|
||||||
end
|
end
|
||||||
@ -48,6 +67,12 @@ def each_value
|
|||||||
def each
|
def each
|
||||||
keys.each {|key| yield [key, self[key]]}
|
keys.each {|key| yield [key, self[key]]}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def sync_keys!
|
||||||
|
(@keys - super_keys).each { |k| @keys.delete(k) }
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -83,4 +83,24 @@ def test_each
|
|||||||
def test_each_with_index
|
def test_each_with_index
|
||||||
@ordered_hash.each_with_index { |pair, index| assert_equal [@keys[index], @values[index]], pair}
|
@ordered_hash.each_with_index { |pair, index| assert_equal [@keys[index], @values[index]], pair}
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
def test_delete_if
|
||||||
|
(copy = @ordered_hash.dup).delete('pink')
|
||||||
|
assert_equal copy, @ordered_hash.delete_if { |k, _| k == 'pink' }
|
||||||
|
assert !@ordered_hash.keys.include?('pink')
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_reject!
|
||||||
|
(copy = @ordered_hash.dup).delete('pink')
|
||||||
|
@ordered_hash.reject! { |k, _| k == 'pink' }
|
||||||
|
assert_equal copy, @ordered_hash
|
||||||
|
assert !@ordered_hash.keys.include?('pink')
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_reject
|
||||||
|
copy = @ordered_hash.dup
|
||||||
|
new_ordered_hash = @ordered_hash.reject { |k, _| k == 'pink' }
|
||||||
|
assert_equal copy, @ordered_hash
|
||||||
|
assert !new_ordered_hash.keys.include?('pink')
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue
Block a user