zf

zenflows testing
git clone https://s.sonu.ch/~srfsh/zf.git
Log | Files | Refs | Submodules | README | LICENSE

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