Class: Hash
- Inherits:
-
Object
- Object
- Hash
- Defined in:
- lib/doing/hash.rb
Overview
Hash helpers
Instance Method Summary collapse
-
#deep_freeze ⇒ Object
Freeze all values in a hash.
- #deep_freeze! ⇒ Object
-
#deep_set(path, value) ⇒ Object
Set a nested hash value using an array.
- #deep_thaw ⇒ Object
- #deep_thaw! ⇒ Object
-
#stringify_keys ⇒ Object
Turn all keys into string.
-
#symbolize_keys ⇒ Object
Turn all keys into symbols.
Instance Method Details
#deep_freeze ⇒ Object
Freeze all values in a hash
11 12 13 14 15 16 17 18 |
# File 'lib/doing/hash.rb', line 11 def deep_freeze chilled = {} each do |k, v| chilled[k] = v.is_a?(Hash) ? v.deep_freeze : v.freeze end chilled.freeze end |
#deep_freeze! ⇒ Object
20 21 22 |
# File 'lib/doing/hash.rb', line 20 def deep_freeze! replace deep_thaw.deep_freeze end |
#deep_set(path, value) ⇒ Object
Set a nested hash value using an array
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/doing/hash.rb', line 58 def deep_set(path, value) if path.count == 1 unless value.nil? || value =~ /^ *$/ self[path[0]] = value else delete(path[0]) end else if value self.default_proc = ->(h, k) { h[k] = Hash.new(&h.default_proc) } dig(*path[0..-2])[path.fetch(-1)] = value else return self unless dig(*path) dig(*path[0..-2]).delete(path.fetch(-1)) path.pop cleaned = self path.each do |key| if cleaned[key].empty? cleaned.delete(key) break end cleaned = cleaned[key] end empty? ? nil : self end end end |
#deep_thaw ⇒ Object
24 25 26 27 28 29 30 31 |
# File 'lib/doing/hash.rb', line 24 def deep_thaw chilled = {} each do |k, v| chilled[k] = v.is_a?(Hash) ? v.deep_thaw : v.dup end chilled.dup end |
#deep_thaw! ⇒ Object
33 34 35 |
# File 'lib/doing/hash.rb', line 33 def deep_thaw! replace deep_thaw end |
#stringify_keys ⇒ Object
Turn all keys into string
Return a copy of the hash where all its keys are strings
40 41 42 |
# File 'lib/doing/hash.rb', line 40 def stringify_keys each_with_object({}) { |(k, v), hsh| hsh[k.to_s] = v.is_a?(Hash) ? v.stringify_keys : v } end |
#symbolize_keys ⇒ Object
Turn all keys into symbols
45 46 47 |
# File 'lib/doing/hash.rb', line 45 def symbolize_keys each_with_object({}) { |(k, v), hsh| hsh[k.to_sym] = v.is_a?(Hash) ? v.symbolize_keys : v } end |