Skip to content

Commit a6503f4

Browse files
committed
up tp Chapter 2 - Compile-time hooks
1 parent d6cba13 commit a6503f4

File tree

3 files changed

+40
-0
lines changed

3 files changed

+40
-0
lines changed

module-extension/.iex.exs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
c("module_extension.exs")
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
defmodule Assertion do
2+
defmacro __using__(_options) do
3+
quote do
4+
import unquote(__MODULE__)
5+
Module.register_attribute(__MODULE__, :tests, accumulate: true)
6+
7+
def run do
8+
IO.puts("Running the tests (#{inspect(@tests)}")
9+
end
10+
end
11+
end
12+
13+
defmacro test(description, do: test_block) do
14+
test_func = String.to_atom(descriptions)
15+
16+
quote do
17+
@tests {unquote(test_func), unquote(description)}
18+
def unquote(test_func)(), do: unquote(test_block)
19+
end
20+
end
21+
end

module-extension/module_extension.exs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
defmodule Assertion do
2+
# ...
3+
defmacro extend(options \\ []) do
4+
quote do
5+
import unquote(__MODULE__)
6+
7+
def run do
8+
IO.puts("Running the tests...")
9+
end
10+
end
11+
end
12+
13+
# ...
14+
end
15+
16+
defmodule MathTest do
17+
use Assertion
18+
end

0 commit comments

Comments
 (0)