module LessStruct::Util::Hash

Public Class Methods

deep_stringify_keys(hash) click to toggle source
# File lib/less_struct/util/hash.rb, line 11
def deep_stringify_keys(hash)
  deep_transform_keys_in_hac(hash, &:to_s)
end
deep_symbolize_keys(hash) click to toggle source
# File lib/less_struct/util/hash.rb, line 15
def deep_symbolize_keys(hash)
  deep_transform_keys_in_hac(hash, &:to_sym)
end
deep_transform_keys(hash, &block) click to toggle source
# File lib/less_struct/util/hash.rb, line 19
def deep_transform_keys(hash, &block)
  deep_transform_keys_in_hac(hash, &block)
end
deep_transform_values(hash, &block) click to toggle source
# File lib/less_struct/util/hash.rb, line 23
def deep_transform_values(hash, &block)
  deep_transform_values_in_hac(hash, &block)
end

Private Class Methods

deep_transform_keys_in_hac(object) { |key| ... } click to toggle source

def deep_restore_time_in_hac(hash)

hash.inject({}) do |result_hash,(k,v)|
  case v
  when ::Hash
    result_hash[k] = deep_restore_time_in_hac(v)
  when Array
    result_hash[k] = v.map {|o| deep_restore_time_in_hac(o) }
  else
    if k.to_s.end_with?("_at") && v.is_a?(::String)
      result_hash[k] = Time.parse(v).utc
    else
      result_hash[k] = v
    end
  end
  result_hash
end

end

# File lib/less_struct/util/hash.rb, line 47
def deep_transform_keys_in_hac(object, &block)
  case object
  when ::Hash
    object.keys.each do |key|
      value = object.delete(key)
      object[yield(key)] = deep_transform_keys_in_hac(value, &block)
    end
    object
  when Array
    object.map! { |element| deep_transform_keys_in_hac(element, &block) }
  else
    object
  end
end
deep_transform_values_in_hac(object) { |object| ... } click to toggle source
# File lib/less_struct/util/hash.rb, line 62
def deep_transform_values_in_hac(object, &block)
  case object
  when ::Hash
    object.each_with_object({}) do |(key, value), result|
      result[key] = deep_transform_values_in_hac(value, &block)
    end
  when Array
    object.map {|element| deep_transform_values_in_hac(element, &block) }
  else
    yield(object)
  end
end