Class: Hash

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

Direct Known Subclasses

Dictionary

Instance Method Summary collapse

Instance Method Details

#__recurse_deep_symbolize_keys(value) ⇒ Object



46
47
48
49
50
51
52
53
54
55
# File 'lib/angry_mob/extend/hash.rb', line 46

def __recurse_deep_symbolize_keys(value)
  case value
  when Hash
    value.deep_symbolize_keys
  when Array
    value.map {|v| __recurse_deep_symbolize_keys(v)}
  else
    value
  end
end

#deep_merge(other_hash) ⇒ Object

from ActiveSupport:

Returns a new hash with self and other_hash merged recursively.



12
13
14
15
16
17
18
# File 'lib/angry_mob/extend/hash.rb', line 12

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_merge!(other_hash) ⇒ Object

Returns a new hash with self and other_hash merged recursively. Modifies the receiver in place.



22
23
24
# File 'lib/angry_mob/extend/hash.rb', line 22

def deep_merge!(other_hash)
  replace(deep_merge(other_hash))
end

#deep_symbolize_keysObject



39
40
41
42
43
44
# File 'lib/angry_mob/extend/hash.rb', line 39

def deep_symbolize_keys
  inject({}) do |options, (key, value)|
    options[(key.to_sym rescue key) || key] = __recurse_deep_symbolize_keys(value)
  options
  end
end

#delete_all_of(*keys) ⇒ Object



2
3
4
5
6
7
# File 'lib/angry_mob/extend/hash.rb', line 2

def delete_all_of(*keys)
	keys = keys.map {|k| [ k.to_s, k.to_sym ]}.flatten.uniq
	values = values_at(*keys).flatten.compact.uniq
	keys.each {|k| delete k}
	values
end

#symbolize_keysObject

Return a new hash with all keys converted to symbols.



27
28
29
30
31
32
# File 'lib/angry_mob/extend/hash.rb', line 27

def symbolize_keys
  inject({}) do |options, (key, value)|
    options[(key.to_sym rescue key) || key] = value
    options
  end
end

#symbolize_keys!Object

Destructively convert all keys to symbols.



35
36
37
# File 'lib/angry_mob/extend/hash.rb', line 35

def symbolize_keys!
  self.replace(self.symbolize_keys)
end