module Mycrm::CoreExt::Hash

Public Instance Methods

depp_merge(newhash) click to toggle source
# File lib/mycrm/core_ext/hash.rb, line 18
def depp_merge(newhash)
  return self.dup unless newhash
  # merger = -> (key, oldval, newval) { oldval.is_a? Hash ? oldval.recursive_merge(newval) : newval } # not working :(
  new_hash = (newhash.keys - keys).each_with_object({}) { |k, nh| nh[k] = newhash[k] }
  self.each_with_object(new_hash) do |(key, value), nh|
    nh[key] = value.kind_of?(Hash) ? value.depp_merge(newhash[key]) : (newhash[key] || value)
  end
end
modify_keys_deep(method = :to_sym ) click to toggle source
# File lib/mycrm/core_ext/hash.rb, line 12
def modify_keys_deep(method = :to_sym )
  self.each_with_object({}) do |(key, value), copy|
    copy[key.send(method)] = value.kind_of?(Hash) ? value.modify_keys_deep(method) : value
  end
end
stringify_keys_deep!() click to toggle source
# File lib/mycrm/core_ext/hash.rb, line 8
def stringify_keys_deep!
  self.replace modify_keys_deep(:to_s)
end
symbolize_keys_deep!() click to toggle source
# File lib/mycrm/core_ext/hash.rb, line 4
def symbolize_keys_deep!
  self.replace modify_keys_deep(:to_sym)
end