switch.ex (1236B)
1 defmodule Credo.CLI.Switch do 2 defstruct name: nil, 3 type: :string, 4 alias: nil 5 6 def boolean(name, keywords \\ []) when is_atom(name) or is_binary(name) do 7 from_keywords(name, Keyword.put(keywords, :type, :boolean)) 8 end 9 10 def string(name, keywords \\ []) when is_atom(name) or is_binary(name) do 11 from_keywords(name, Keyword.put(keywords, :type, :string)) 12 end 13 14 def keep(name, keywords \\ []) when is_atom(name) or is_binary(name) do 15 from_keywords(name, Keyword.put(keywords, :type, :keep)) 16 end 17 18 def ensure(%__MODULE__{} = switch), do: switch 19 def ensure(%{} = switch), do: from_map(switch) 20 21 def ensure(switch) do 22 raise("Expected Credo.CLI.Switch, got: #{inspect(switch, pretty: true)}") 23 end 24 25 defp from_map(%{name: name} = switch) when is_atom(name) or is_binary(name) do 26 name = String.to_atom(to_string(switch.name)) 27 28 struct(__MODULE__, %{switch | name: name}) 29 end 30 31 defp from_keywords(name, keywords) when is_atom(name) or is_binary(name) do 32 name = String.to_atom(to_string(name)) 33 type = keywords[:type] || :string 34 35 keywords = 36 keywords 37 |> Keyword.put(:type, type) 38 |> Keyword.put(:name, name) 39 40 struct(__MODULE__, keywords) 41 end 42 end