Merge pull request #52234 from kwstannard/indifferent
refactor HashWithIndifferentAccess#to_hash
This commit is contained in:
commit
d43ee20881
@ -378,13 +378,10 @@ def compact
|
||||
|
||||
# Convert to a regular hash with string keys.
|
||||
def to_hash
|
||||
_new_hash = Hash.new
|
||||
set_defaults(_new_hash)
|
||||
|
||||
each do |key, value|
|
||||
_new_hash[key] = convert_value(value, conversion: :to_hash)
|
||||
end
|
||||
_new_hash
|
||||
copy = Hash[self]
|
||||
copy.transform_values! { |v| convert_value_to_hash(v) }
|
||||
set_defaults(copy)
|
||||
copy
|
||||
end
|
||||
|
||||
def to_proc
|
||||
@ -398,11 +395,7 @@ def convert_key(key)
|
||||
|
||||
def convert_value(value, conversion: nil)
|
||||
if value.is_a? Hash
|
||||
if conversion == :to_hash
|
||||
value.to_hash
|
||||
else
|
||||
value.nested_under_indifferent_access
|
||||
end
|
||||
elsif value.is_a?(Array)
|
||||
if conversion != :assignment || value.frozen?
|
||||
value = value.dup
|
||||
@ -413,6 +406,17 @@ def convert_value(value, conversion: nil)
|
||||
end
|
||||
end
|
||||
|
||||
def convert_value_to_hash(value)
|
||||
if value.is_a? Hash
|
||||
value.to_hash
|
||||
elsif value.is_a?(Array)
|
||||
value.map { |e| convert_value_to_hash(e) }
|
||||
else
|
||||
value
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
def set_defaults(target)
|
||||
if default_proc
|
||||
target.default_proc = default_proc.dup
|
||||
|
Loading…
Reference in New Issue
Block a user