48 lines
964 B
Elixir
48 lines
964 B
Elixir
defmodule Mix.Tasks.Meditate do
|
|
use Mix.Task
|
|
|
|
@shortdoc "Start the koans"
|
|
|
|
def run(args) do
|
|
Application.ensure_all_started(:elixir_koans)
|
|
Code.compiler_options(ignore_module_conflict: true)
|
|
|
|
{parsed, _, _} = OptionParser.parse(args)
|
|
|
|
modules =
|
|
parsed
|
|
|> initial_module
|
|
|> ok?
|
|
|> Runner.modules_to_run()
|
|
|
|
Tracker.set_total(modules)
|
|
Tracker.notify_on_complete(self())
|
|
|
|
set_clear_screen(parsed)
|
|
Runner.run(modules)
|
|
|
|
Tracker.wait_until_complete()
|
|
Display.congratulate()
|
|
end
|
|
|
|
defp initial_module(parsed) do
|
|
name = Keyword.get(parsed, :koan, "Equalities")
|
|
String.to_atom("Elixir." <> name)
|
|
end
|
|
|
|
defp set_clear_screen(parsed) do
|
|
if Keyword.has_key?(parsed, :no_clear_screen) do
|
|
Display.disable_clear()
|
|
end
|
|
end
|
|
|
|
defp ok?(koan) do
|
|
if Runner.koan?(koan) do
|
|
koan
|
|
else
|
|
Display.invalid_koan(koan, Runner.modules())
|
|
exit(:normal)
|
|
end
|
|
end
|
|
end
|