Class: Hash

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

Overview

File

Instance Method Summary collapse

Instance Method Details

#deep_merge(other_hash) ⇒ Object

recursively merge two hashes



42
43
44
45
46
47
48
# File 'lib/biopsy/base_extensions.rb', line 42

def deep_merge(other_hash)
  self.merge(other_hash) do |key, oldval, newval|
    oldval = oldval.to_hash if oldval.respond_to?(:to_hash)
    newval = newval.to_hash if newval.respond_to?(:to_hash)
    oldval.class.to_s == 'Hash' && newval.class.to_s == 'Hash' ? oldval.deep_merge(newval) : newval
  end
end

#deep_symbolizeObject

recursively convert all keys to symbols



31
32
33
34
35
36
37
38
39
# File 'lib/biopsy/base_extensions.rb', line 31

def deep_symbolize
  target = dup    
  target.inject({}) do |memo, (key, value)|
    value = value.deep_symbolize if value.is_a?(Hash)
    value = value.map{ |x| x.is_a?(Hash) ? x.deep_symbolize : x } if value.is_a?(Array)
    memo[(key.to_sym rescue key) || key] = value
    memo
  end
end