Introduce global state for options so we don't have to pass it around

This commit is contained in:
Uku Taht
2016-03-07 17:53:41 +02:00
parent c105f586bf
commit a59ce4f294
5 changed files with 34 additions and 27 deletions

View File

@@ -1,16 +1,22 @@
defmodule Options do
@defaults %{
clear_screen: false
}
def parse([]), do: defaults
def parse(args) do
Enum.reduce(args, defaults, fn(arg, acc) ->
options = Enum.reduce(args, @defaults, fn(arg, acc) ->
Map.merge(acc, parse_argument(arg))
end)
Agent.start_link(fn -> options end, name: __MODULE__)
end
def clear_screen? do
Agent.get(__MODULE__, fn(options) ->
Map.fetch!(options, :clear_screen)
end)
end
def parse_argument("--clear-screen"), do: %{ clear_screen: true}
def parse_argument(_), do: %{}
defp defaults do
%{ clear_screen: false}
end
end