lib/refinements/hashes.rb in refinements-7.3.0 vs lib/refinements/hashes.rb in refinements-7.4.0
- old
+ new
@@ -21,25 +21,56 @@
def deep_merge other
dup.deep_merge! other
end
- # :reek:FeatureEnvy
def deep_merge! other
+ clazz = self.class
+
merge! other do |_key, this_value, other_value|
- if this_value.is_a?(Hash) && other_value.is_a?(Hash)
+ if this_value.is_a?(clazz) && other_value.is_a?(clazz)
this_value.deep_merge other_value
else
other_value
end
end
end
+ def deep_symbolize_keys
+ recurse(&:symbolize_keys)
+ end
+
+ def deep_symbolize_keys!
+ recurse(&:symbolize_keys!)
+ end
+
+ def recurse &block
+ return self unless block_given?
+
+ transform = yield self
+
+ transform.each do |key, value|
+ transform[key] = value.recurse(&block) if value.is_a? self.class
+ end
+ end
+
+ def rekey mapping = {}
+ return self if mapping.empty?
+
+ transform_keys { |key| mapping[key] || key }
+ end
+
+ def rekey! mapping = {}
+ replace rekey(mapping)
+ end
+
def reverse_merge other
+ warn "[DEPRECATION]: #reverse_merge is deprecated, use #merge instead."
other.merge self
end
def reverse_merge! other
+ warn "[DEPRECATION]: #reverse_merge! is deprecated, use #merge! instead."
merge!(other) { |_key, old_value, _new_value| old_value }
end
def use &block
return [] unless block_given?