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?