lib/refinements/hashes.rb in refinements-11.0.1 vs lib/refinements/hashes.rb in refinements-11.1.0

- old
+ new

@@ -43,10 +43,16 @@ def deep_symbolize_keys = recurse(&:symbolize_keys) def deep_symbolize_keys! = replace(deep_symbolize_keys) + def diff other + return differences_from other if other.is_a?(self.class) && keys.sort! == other.keys.sort! + + each.with_object({}) { |(key, value), diff| diff[key] = [value, nil] } + end + def fetch_value(key, *default_value, &) = fetch(key, *default_value, &) || default_value.first def flatten_keys prefix: nil, delimiter: "_" reduce({}) do |accumulator, (key, value)| flat_key = prefix ? "#{prefix}#{delimiter}#{key}".to_sym : key @@ -85,9 +91,16 @@ return [] unless block block.parameters .map { |(_type, key)| self[key] || self[key.to_s] } .then { |values| yield values } + end + + private + + def differences_from other + result = merge(other.to_h) { |_, one, two| [one, two].uniq } + result.select { |_, diff| diff.size == 2 } end end end end