Module: Cosmo::Utils::Hash
- Defined in:
- lib/cosmo/utils/hash.rb
Class Method Summary collapse
-
.dup(hash) ⇒ Object
deep dup.
-
.keys?(hash, *keys) ⇒ Boolean
dig keys.
-
.merge(hash1, hash2) ⇒ Object
deep merge.
-
.set(hash, *keys, value) ⇒ Object
deep set.
- .symbolize_keys!(obj) ⇒ Object
Class Method Details
.dup(hash) ⇒ Object
deep dup
27 28 29 |
# File 'lib/cosmo/utils/hash.rb', line 27 def dup(hash) Marshal.load(Marshal.dump(hash)) end |
.keys?(hash, *keys) ⇒ Boolean
dig keys
32 33 34 35 36 37 38 39 40 |
# File 'lib/cosmo/utils/hash.rb', line 32 def keys?(hash, *keys) keys.reduce(hash) do |base, key| return false if !base.is_a?(::Hash) || !base.key?(key) base[key] end true end |
.merge(hash1, hash2) ⇒ Object
deep merge
53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/cosmo/utils/hash.rb', line 53 def merge(hash1, hash2) return hash1 unless hash2 hash1.merge(hash2) do |_key, old_val, new_val| if old_val.is_a?(::Hash) && new_val.is_a?(::Hash) merge(old_val, new_val) else new_val end end end |
.set(hash, *keys, value) ⇒ Object
deep set
43 44 45 46 47 48 49 50 |
# File 'lib/cosmo/utils/hash.rb', line 43 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 |