Class: Hash

Inherits:
Object
  • Object
show all
Defined in:
lib/hash.rb

Overview

Add a deep_merge method to a Hash. It unions arrays (for terraform profiles behaviour)

Instance Method Summary collapse

Instance Method Details

#deep_merge(second) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/hash.rb', line 6

def deep_merge(second)
    merger = proc { |_key, v1, v2|
        if v1.is_a?(Hash) && v2.is_a?(Hash)
            v1.merge(v2, &merger)
        elsif v1.is_a?(Array) && v2.is_a?(Array)
            v1 | v2
        elsif [:undefined, nil, :nil].include?(v2)
            v1
        else
            v2
        end
    }
    merge(second.to_h, &merger)
end

#symbolize_names!(result = self) ⇒ Object

Copied from ruby 2.6 Psych for 2.3 compatibility.



22
23
24
25
26
27
28
29
30
31
32
# File 'lib/hash.rb', line 22

def symbolize_names!(result = self)
    case result
    when Hash
        result.keys.each do |key|
            result[key.to_sym] = symbolize_names!(result.delete(key))
        end
    when Array
        result.map! { |r| symbolize_names!(r) }
    end
    result
end