Class: Hash

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

Instance Method Summary collapse

Instance Method Details

#deep_merge(with, merge_arrays: true, overwrite_vals: true) ⇒ Object

Merges with another hash but also merges all nested hashes and arrays/values. Based on method found @ stackoverflow.com/questions/9381553/ruby-merge-nested-hash



5
6
7
8
# File 'lib/hash/bbhash.rb', line 5

def deep_merge with, merge_arrays: true, overwrite_vals: true
    merger = proc{ |k, v1, v2| v1.is_a?(Hash) && v2.is_a?(Hash) ? v1.merge(v2, &merger) : (merge_arrays && v1.is_a?(Array) && v2.is_a?(Array) ? (v1 + v2) : (overwrite_vals ? v2 : [v1, v2].flatten)) }
    self.merge(with, &merger)
end

#deep_merge!(with, merge_arrays: true, overwrite_vals: true) ⇒ Object



10
11
12
# File 'lib/hash/bbhash.rb', line 10

def deep_merge! with, merge_arrays: true, overwrite_vals: true
  replace self.deep_merge(with, merge_arrays: merge_arrays, overwrite_vals: overwrite_vals)
end

#keys_to_symObject

Converts the keys of the hash as well as any nested hashes to symbols. Based on method found @ stackoverflow.com/questions/800122/best-way-to-convert-strings-to-symbols-in-hash



16
17
18
# File 'lib/hash/bbhash.rb', line 16

def keys_to_sym
  self.inject({}){|memo,(k,v)| memo[k.to_sym] = (Hash === v ? v.keys_to_sym : v); memo}
end

#keys_to_sym!Object



20
21
22
# File 'lib/hash/bbhash.rb', line 20

def keys_to_sym!
  replace self.keys_to_sym
end

#reverseObject

Reverses the order of keys in the Hash



25
26
27
# File 'lib/hash/bbhash.rb', line 25

def reverse
  self.to_a.reverse.to_h
end

#reverse!Object



29
30
31
# File 'lib/hash/bbhash.rb', line 29

def reverse!
  replace self.reverse
end