Cleanup how koan modules get their intros
This commit is contained in:
23
lib/koans.ex
23
lib/koans.ex
@@ -82,11 +82,32 @@ defmodule Koans do
|
|||||||
end
|
end
|
||||||
|
|
||||||
defmacro __before_compile__(env) do
|
defmacro __before_compile__(env) do
|
||||||
koans = Module.get_attribute(env.module, :koans) |> Enum.reverse
|
koans = koans(env)
|
||||||
|
intro = extract_into(env)
|
||||||
quote do
|
quote do
|
||||||
def all_koans do
|
def all_koans do
|
||||||
unquote(koans)
|
unquote(koans)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def intro do
|
||||||
|
unquote(intro)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp koans(env) do
|
||||||
|
env.module
|
||||||
|
|> Module.get_attribute(:koans)
|
||||||
|
|> Enum.reverse
|
||||||
|
end
|
||||||
|
|
||||||
|
defp extract_into(env) do
|
||||||
|
env.module
|
||||||
|
|> Module.get_attribute(:intro)
|
||||||
|
|> default("")
|
||||||
|
|> String.strip
|
||||||
|
end
|
||||||
|
|
||||||
|
defp default(nil, n), do: n
|
||||||
|
defp default(n, _), do: n
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -8,6 +8,10 @@ defmodule ExecuteTest do
|
|||||||
test "stops at the first failing koan" do
|
test "stops at the first failing koan" do
|
||||||
{:failed, %{file: file, line: line}, SampleKoan, _name} = Execute.run_module(SampleKoan)
|
{:failed, %{file: file, line: line}, SampleKoan, _name} = Execute.run_module(SampleKoan)
|
||||||
assert file == 'test/support/sample_koan.ex'
|
assert file == 'test/support/sample_koan.ex'
|
||||||
assert line == 4
|
assert line == 8
|
||||||
|
end
|
||||||
|
|
||||||
|
test "can access intro" do
|
||||||
|
assert SampleKoan.intro == "There is something"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
defmodule SampleKoan do
|
defmodule SampleKoan do
|
||||||
use Koans
|
use Koans
|
||||||
|
|
||||||
|
@intro """
|
||||||
|
There is something
|
||||||
|
"""
|
||||||
|
|
||||||
koan "Thinking more than once" do
|
koan "Thinking more than once" do
|
||||||
assert 3 == ___
|
assert 3 == ___
|
||||||
assert 4 == ___
|
assert 4 == ___
|
||||||
|
|||||||
Reference in New Issue
Block a user