69 lines
1.4 KiB
Elixir
69 lines
1.4 KiB
Elixir
defmodule Display do
|
|
use GenServer
|
|
|
|
alias IO.ANSI
|
|
alias Display.{ProgressBar, Intro, Failure, Notifications}
|
|
|
|
def start_link do
|
|
GenServer.start_link(__MODULE__, %{clear_screen: true}, name: __MODULE__)
|
|
end
|
|
|
|
def disable_clear do
|
|
GenServer.cast(__MODULE__, :disable_clear)
|
|
end
|
|
|
|
def handle_cast(:disable_clear, state) do
|
|
{:noreply, %{state | clear_screen: false}}
|
|
end
|
|
|
|
def handle_cast(:clear_screen, state = %{clear_screen: true}) do
|
|
IO.puts(ANSI.clear())
|
|
IO.puts(ANSI.home())
|
|
|
|
{:noreply, state}
|
|
end
|
|
|
|
def handle_cast(:clear_screen, state) do
|
|
{:noreply, state}
|
|
end
|
|
|
|
def invalid_koan(koan, modules) do
|
|
Notifications.invalid_koan(koan, modules)
|
|
|> IO.puts()
|
|
end
|
|
|
|
def show_failure(failure, module, name) do
|
|
format(failure, module, name)
|
|
|> IO.puts()
|
|
end
|
|
|
|
def show_compile_error(error) do
|
|
Failure.show_compile_error(error)
|
|
|> IO.puts()
|
|
end
|
|
|
|
def congratulate do
|
|
Notifications.congratulate()
|
|
|> IO.puts()
|
|
end
|
|
|
|
def clear_screen do
|
|
GenServer.cast(__MODULE__, :clear_screen)
|
|
end
|
|
|
|
defp format(failure, module, name) do
|
|
"""
|
|
#{Intro.intro(module, Tracker.visited())}
|
|
Now meditate upon #{format_module(module)}
|
|
#{ProgressBar.progress_bar(Tracker.summarize())}
|
|
----------------------------------------
|
|
#{name}
|
|
#{Failure.format_failure(failure)}
|
|
"""
|
|
end
|
|
|
|
defp format_module(module) do
|
|
Module.split(module) |> List.last()
|
|
end
|
|
end
|