Module: Cosmo::Utils::Hash

Defined in:
lib/cosmo/utils/hash.rb

Class Method Summary collapse

Class Method Details

.dup(hash) ⇒ Object

deep dup



37
38
39
# File 'lib/cosmo/utils/hash.rb', line 37

def dup(hash)
  Marshal.load(Marshal.dump(hash))
end

.set(hash, *keys, value) ⇒ Object

deep set



27
28
29
30
31
32
33
34
# File 'lib/cosmo/utils/hash.rb', line 27

def set(hash, *keys, value)
  last_key = keys.pop
  target = keys.reduce(hash) do |base, key|
    base[key] ||= {}
    base[key]
  end
  target[last_key] = value
end

.symbolize_keys!(obj) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/cosmo/utils/hash.rb', line 8

def symbolize_keys!(obj)
  case obj
  when ::Hash
    obj.keys.each do |key|
      raise ArgumentError, "key cannot be converted to symbol" unless key.respond_to?(:to_sym)

      sym = key.to_sym
      value = obj.delete(key)
      obj[sym] = symbolize_keys!(value)
    end
    obj
  when ::Array
    obj.map! { |v| symbolize_keys!(v) }
  else
    obj
  end
end