Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Merge pull request #10631 from kennyj/improve_10266

Fix HWIA#to_hash behavior with array of hashes.
  • Loading branch information...
commit e84207b3373bfb0ab7fbce1fd807e26451442cff 2 parents 5db5665 + f9c82f5
@rafaelfranca rafaelfranca authored
View
4 activesupport/lib/active_support/hash_with_indifferent_access.rb
@@ -231,7 +231,7 @@ def to_options!; self end
def to_hash
_new_hash= {}
each do |key, value|
- _new_hash[convert_key(key)] = convert_value(value,true)
+ _new_hash[convert_key(key)] = convert_value(value, true)
end
Hash.new(default).merge!(_new_hash)
end
@@ -246,7 +246,7 @@ def convert_value(value, _convert_for_to_hash = false)
_convert_for_to_hash ? value.to_hash : value.nested_under_indifferent_access
elsif value.is_a?(Array)
value = value.dup if value.frozen?
- value.map! { |e| convert_value(e) }
+ value.map! { |e| convert_value(e, _convert_for_to_hash) }
else
value
end
View
5 activesupport/test/core_ext/hash_ext_test.rb
@@ -506,6 +506,11 @@ def test_lookup_returns_the_same_object_that_is_stored_in_hash_indifferent_acces
def test_indifferent_hash_with_array_of_hashes
hash = { "urls" => { "url" => [ { "address" => "1" }, { "address" => "2" } ] }}.with_indifferent_access
assert_equal "1", hash[:urls][:url].first[:address]
+
+ hash = hash.to_hash
+ assert_not hash.instance_of?(HashWithIndifferentAccess)
+ assert_not hash["urls"].instance_of?(HashWithIndifferentAccess)
+ assert_not hash["urls"]["url"].first.instance_of?(HashWithIndifferentAccess)
end
def test_should_preserve_array_subclass_when_value_is_array
Please sign in to comment.
Something went wrong with that request. Please try again.