Class: Hash
- Includes:
- HashRecursiveBlank, HashRecursiveMerge
- Defined in:
- lib/lib/hash.rb,
lib/lib/hash.rb
Instance Method Summary collapse
- #diff(other) ⇒ Object
-
#nested_set(keys, value) ⇒ Object
ensures nested hash from keys, and sets final key to value keys: Array of Symbol|String value: any.
Methods included from HashRecursiveBlank
Methods included from HashRecursiveMerge
Instance Method Details
#diff(other) ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/lib/hash.rb', line 49 def diff(other) (keys + other.keys).uniq.each_with_object({}) do |key, memo| next if self[key] == other[key] memo[key] = if self[key].is_a?(Hash) && other[key].is_a?(Hash) self[key].diff(other[key]) else [self[key], other[key]] end end end |
#nested_set(keys, value) ⇒ Object
ensures nested hash from keys, and sets final key to value keys: Array of Symbol|String value: any
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/lib/hash.rb', line 66 def nested_set(keys, value) raise 'DEBUG: nested_set keys must be an Array' unless keys.is_a?(Array) final_key = keys.pop return unless valid_key?(final_key) position = self keys.each do |key| return unless valid_key?(key) position[key] = {} unless position[key].is_a?(Hash) position = position[key] end position[final_key] = value end |