class ReeHash::TransformKeys

def call(hash, deep: true, &proc)

def call(hash, deep: true, &proc)
  recursively_transform_keys(hash, deep, &proc)
end

def recursively_transform_keys(object, deep, &block)

def recursively_transform_keys(object, deep, &block)
  case object
  when Hash
    result = {}
    result.default = object.default
    result.default_proc = object.default_proc if object.default_proc
    object.keys.each do |key|
      value = object[key]
      result[yield(key)] = if deep
        recursively_transform_keys(value, deep, &block)
      else
        value
      end
    end
    result
  when Array
    if deep
      object.map { recursively_transform_keys(_1, deep, &block) }
    else
      object
    end
  else
    object
  end
end