Class: Hash

Inherits:
Object show all
Includes:
HashRecursiveBlank, HashRecursiveMerge
Defined in:
lib/lib/hash.rb,
lib/lib/hash.rb

Instance Method Summary collapse

Methods included from HashRecursiveBlank

#rblank, #rblank!

Methods included from HashRecursiveMerge

#rmerge, #rmerge!

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