Packages

A collection of helpers to operate on nested maps. See README for the complete list of helpers. The test suite is also helpful.

Current section

Files

Jump to
digger lib impl snake_caser string.ex
Raw

lib/impl/snake_caser/string.ex

defimpl Digger.SnakeCaser, for: BitString do
alias Digger.Opts.SnakeCaser, as: Opts
def snake_case(string, opts) do
opts = Opts.set_options(opts)
string
|> to_snake(opts)
end
defp to_snake(string, type: :key, key_transform: :snake, value_transform: _) do
string
|> String.replace(~r/([A-Z\d]+)([A-Z][a-z])/, "\\1_\\2")
|> String.replace(~r/([a-z\d])([A-Z])/, "\\1_\\2")
|> String.replace(~r/-/, "_")
|> String.downcase()
end
defp to_snake(string, type: :value, key_transform: _, value_transform: :snake) do
string
|> String.replace(~r/([A-Z\d]+)([A-Z][a-z])/, "\\1_\\2")
|> String.replace(~r/([a-z\d])([A-Z])/, "\\1_\\2")
|> String.replace(~r/-/, "_")
|> String.downcase()
end
defp to_snake(string, _), do: string
end