Current section
Files
Jump to
Current section
Files
lib/utils/case.ex
defmodule StarkCore.Utils.Case do
@moduledoc false
def camel_to_kebab(string) do
string
|> camel_to_snake()
|> String.replace("_", "-")
end
def camel_to_snake(string) do
string
|> String.graphemes()
|> camel_to_snake_graphemes()
|> strip_underscore()
|> Enum.join()
end
defp camel_to_snake_graphemes([letter | rest]) do
cond do
letter == letter |> String.upcase() ->
["_" | [String.downcase(letter) | camel_to_snake_graphemes(rest)]]
:error != Integer.parse(letter) ->
["_" | [letter | camel_to_snake_graphemes(rest)]]
true ->
[letter | camel_to_snake_graphemes(rest)]
end
end
defp camel_to_snake_graphemes([]) do
[]
end
defp strip_underscore([letter | rest]) when letter == "_" do
rest
end
defp strip_underscore(string) do
string
end
def snake_to_camel(string) do
string
|> String.graphemes()
|> snake_to_camel_graphemes()
|> Enum.join()
end
defp snake_to_camel_graphemes([letter | rest]) when letter == "_" do
snake_to_camel_graphemes([String.upcase(hd(rest)) | tl(rest)])
end
defp snake_to_camel_graphemes([letter | rest]) do
[letter | snake_to_camel_graphemes(rest)]
end
defp snake_to_camel_graphemes([]) do
[]
end
end