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