49 lines
916 B
Elixir
49 lines
916 B
Elixir
defmodule Runner do
|
|
@modules [
|
|
Equalities,
|
|
Strings,
|
|
Tuples,
|
|
Lists,
|
|
Maps,
|
|
Structs,
|
|
PatternMatching,
|
|
Functions,
|
|
Enums,
|
|
Processes,
|
|
Tasks,
|
|
Agents,
|
|
]
|
|
|
|
def koan?(koan), do: Enum.member?(@modules, koan)
|
|
|
|
def run do
|
|
Options.initial_koan
|
|
|>run
|
|
end
|
|
|
|
def run(start_module) when start_module in @modules, do: run(start_module, @modules)
|
|
def run(start_module), do: Display.invalid_koan(start_module, @modules)
|
|
|
|
def run(start_module, modules) do
|
|
Display.clear_screen()
|
|
|
|
modules
|
|
|> Enum.drop_while( &(&1 != start_module))
|
|
|> Enum.take_while( &(run_module(&1) == :passed))
|
|
end
|
|
|
|
def run_module(module) do
|
|
module
|
|
|> Display.considering
|
|
|> Execute.run_module
|
|
|> display
|
|
|
|
end
|
|
|
|
defp display({:failed, error, module, name}) do
|
|
Display.show_failure(error, module, name)
|
|
:failed
|
|
end
|
|
defp display(_), do: :passed
|
|
end
|