Class: Hash

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

Instance Method Summary collapse

Methods included from HashRecursiveBlank

#rblank, #rblank!

Methods included from HashRecursiveMerge

#rmerge, #rmerge!

Instance Method Details

#diff(other) ⇒ Object



229
230
231
232
233
234
235
236
237
238
239
240
# File 'lib/lib/utils.rb', line 229

def diff(other)
  (self.keys + other.keys).uniq.inject({}) do |memo, key|
    unless self[key] == other[key]
      if self[key].kind_of?(Hash) &&  other[key].kind_of?(Hash)
        memo[key] = self[key].diff(other[key])
      else
        memo[key] = [self[key], other[key]]
      end
    end
    memo
  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



249
250
251
252
253
254
255
256
257
258
259
260
261
# File 'lib/lib/utils.rb', line 249

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
  for key in keys
    return unless valid_key?(key)
    position[key] = {} unless position[key].is_a?(Hash)
    position = position[key]
  end
  position[final_key] = value
end