Current section

Files

Jump to
casefy lib casefy.ex
Raw

lib/casefy.ex

defmodule Casefy do
defp casefy(object, module) do
keys = Map.keys(object)
Enum.reduce(keys, Map.new(), fn element, acc ->
transform = is_atom(element)
el =
transform
|> case do
true -> Atom.to_string(element)
false -> element
end
camel_key = apply(module, :convert, [el])
current_value = Map.get(object, element)
has_keys = is_map(current_value)
nested =
has_keys
|> case do
true -> casefy(current_value, module)
false -> current_value
end
Map.put(acc, camel_key, nested)
end)
end
def camel_case(object), do: casefy(object, Recase.CamelCase)
def snake_case(object), do: casefy(object, Recase.SnakeCase)
end