From 3d79284aab58eac114d2c08a5edaaae0cfc2e278 Mon Sep 17 00:00:00 2001 From: Felipe Sere Date: Tue, 10 May 2016 22:49:04 +0100 Subject: [PATCH] Shows into the first time a module is visted. --- lib/display.ex | 12 ++++++++++++ lib/execute.ex | 8 ++++---- lib/runner.ex | 14 +++++++++++--- 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/lib/display.ex b/lib/display.ex index c0d2b65..21ee774 100644 --- a/lib/display.ex +++ b/lib/display.ex @@ -20,6 +20,18 @@ defmodule Display do defp name("Elixir." <> module), do: module defp name(module), do: name(Atom.to_string(module)) + def intro(module) do + show_intro(module.intro) + module + end + + defp show_intro(""), do: nil + defp show_intro(message) do + message <> "\n" + |> Colours.green + |> IO.puts + end + def show_failure(failure, module, name) do IO.puts(format(failure, module, name)) end diff --git a/lib/execute.ex b/lib/execute.ex index 2af0a5e..be98273 100644 --- a/lib/execute.ex +++ b/lib/execute.ex @@ -1,15 +1,15 @@ defmodule Execute do - def run_module(module, callback \\ fn(_result, _koan) -> nil end) do + def run_module(module, callback \\ fn(_result, _module, _koan) -> nil end) do Enum.reduce_while(module.all_koans, :passed, fn(koan, _) -> module |> run_koan(koan) - |> hook(koan, callback) + |> hook(module, koan, callback) |> continue? end) end - defp hook(result,koan, callback) do - callback.(result, koan) + defp hook(result, module, koan, callback) do + callback.(result, module, koan) result end diff --git a/lib/runner.ex b/lib/runner.ex index aff090a..2b73429 100644 --- a/lib/runner.ex +++ b/lib/runner.ex @@ -17,6 +17,7 @@ defmodule Runner do ] def koan?(koan), do: Enum.member?(@modules, koan) + def modules, do: @modules def modules_to_run, do: Options.initial_koan |> modules_to_run @@ -31,16 +32,23 @@ defmodule Runner do def run_module(module) do module - |> Execute.run_module(&track/2) + |> Execute.run_module(&track/3) |> display end - defp track(:passed, koan), do: Tracker.completed(koan) - defp track(_, _), do: nil + defp track(:passed, module, koan), do: Tracker.completed(module, koan) + defp track(_, _, _), do: nil defp display({:failed, error, module, name}) do + intro(module, Tracker.summarize) Display.show_failure(error, module, name) :failed end defp display(_), do: :passed + + defp intro(module, %{visited_modules: modules}) do + if ! module in modules do + Display.intro(module) + end + end end