Minor cleanup

This commit is contained in:
Felipe Sere
2016-04-09 19:26:58 +01:00
parent 7e03cc37a9
commit cc8fa19ce0
4 changed files with 24 additions and 22 deletions

View File

@@ -33,6 +33,7 @@ defmodule Display do
def considering(module) do def considering(module) do
IO.puts("Considering #{format_module(module)}...") IO.puts("Considering #{format_module(module)}...")
module
end end
def clear_screen do def clear_screen do

View File

@@ -1,36 +1,32 @@
defmodule Execute do defmodule Execute do
def run_module(module) do def run_module(module) do
run_until_failure(module, &run_koan/2) Enum.reduce_while(module.all_koans, :passed, fn(koan, _) ->
end module
|> run_koan(koan)
def run_until_failure(module, callback) do |> continue?
Enum.reduce_while(module.all_koans, :passed, fn(it, _acc) ->
result = callback.(module, it)
if result == :passed do
{:cont, :passed}
else
{:halt, result}
end
end) end)
end end
defp continue?(:passed), do: {:cont, :passed}
defp continue?(result), do: {:halt, result}
def run_koan(module, name, args \\ []) do def run_koan(module, name, args \\ []) do
parent = self() parent = self()
spawn fn -> exec(module, name, args, parent) end spawn(fn -> exec(module, name, args, parent) end)
receive do receive do
:ok -> :passed :ok -> :passed
error -> {:failed, error, module, name} error -> {:failed, error, module, name}
end end
end end
def exec(module, name, args, parent) do defp exec(module, name, args, parent) do
result = apply(module, name, args) result = apply(module, name, args)
send parent, expand(result) send parent, expand(result)
Process.exit(self(), :kill) Process.exit(self(), :kill)
end end
def expand(:ok), do: :ok defp expand(:ok), do: :ok
def expand(error) do defp expand(error) do
{file, line} = System.stacktrace {file, line} = System.stacktrace
|> Enum.drop_while(&in_ex_unit?/1) |> Enum.drop_while(&in_ex_unit?/1)
|> List.first |> List.first

View File

@@ -33,11 +33,16 @@ defmodule Runner do
end end
def run_module(module) do def run_module(module) do
Display.considering(module) module
case Execute.run_module(module) do |> Display.considering
{:failed, error, module, name} -> Display.show_failure(error, module, name) |> Execute.run_module
:failed |> display
_ -> :passed
end
end end
defp display({:failed, error, module, name}) do
Display.show_failure(error, module, name)
:failed
end
defp display(_), do: :passed
end end

View File

@@ -1,4 +1,4 @@
defmodule RunnerTest do defmodule ExecuteTest do
use ExUnit.Case use ExUnit.Case
test "passes a koan" do test "passes a koan" do