Module: Esse::HashUtils

Defined in:
lib/esse/primitives/hash_utils.rb

Overview

The idea here is to add useful methods to the ruby standard objects without monkey patching them

Class Method Summary collapse

Class Method Details

.deep_dup(hash) ⇒ Object



9
10
11
12
13
14
15
16
17
18
# File 'lib/esse/primitives/hash_utils.rb', line 9

def deep_dup(hash)
  hash.each_with_object({}) do |(key, value), result|
    result[key] = \
      if value.is_a?(Hash)
        deep_dup(value)
      else
        value
      end
  end
end

.deep_merge(target, source) ⇒ Object



31
32
33
34
35
36
37
38
39
# File 'lib/esse/primitives/hash_utils.rb', line 31

def deep_merge(target, source)
  target.merge(source) do |key, oldval, newval|
    if oldval.is_a?(Hash) && newval.is_a?(Hash)
      deep_merge(oldval, newval)
    else
      newval
    end
  end
end

.deep_merge!(target, source) ⇒ Object



41
42
43
44
45
46
47
48
49
# File 'lib/esse/primitives/hash_utils.rb', line 41

def deep_merge!(target, source)
  target.merge!(source) do |key, oldval, newval|
    if oldval.is_a?(Hash) && newval.is_a?(Hash)
      deep_merge!(oldval, newval)
    else
      newval
    end
  end
end

.deep_transform_keys(hash, &block) ⇒ Object



20
21
22
23
24
25
26
27
28
29
# File 'lib/esse/primitives/hash_utils.rb', line 20

def deep_transform_keys(hash, &block)
  hash.each_with_object({}) do |(key, value), result|
    result[yield(key)] = \
      if value.is_a?(Hash)
        deep_transform_keys(value, &block)
      else
        value
      end
  end
end