lib/refinements/hashes.rb in refinements-8.2.2 vs lib/refinements/hashes.rb in refinements-8.3.0

- old
+ new

@@ -1,18 +1,25 @@ # frozen_string_literal: true module Refinements + # Provides additional enhancements to the Hash primitive. module Hashes refine Hash.singleton_class do def infinite new { |new_hash, missing_key| new_hash[missing_key] = new(&new_hash.default_proc) } end def with_default(value) = new { |new_hash, missing_key| new_hash[missing_key] = value } end refine Hash do + def compress = dup.compress! + + def compress! + compact!.delete_if { |_key, value| value.respond_to?(:empty?) && value.empty? } + end + def deep_merge other clazz = self.class merge other do |_key, this_value, other_value| if this_value.is_a?(clazz) && other_value.is_a?(clazz) @@ -60,16 +67,16 @@ transform.each do |key, value| transform[key] = value.recurse(&block) if value.is_a? self.class end end - def stringify_keys = reduce({}) { |hash, (key, value)| hash.merge key.to_s => value } + def stringify_keys = transform_keys(&:to_s) - def stringify_keys! = replace(stringify_keys) + def stringify_keys! = transform_keys!(&:to_s) - def symbolize_keys = reduce({}) { |hash, (key, value)| hash.merge key.to_sym => value } + def symbolize_keys = transform_keys(&:to_sym) - def symbolize_keys! = replace(symbolize_keys) + def symbolize_keys! = transform_keys!(&:to_sym) def use &block return [] unless block block.parameters