Current section

Files

Jump to
walkman lib walkman_wrapper.ex
Raw

lib/walkman_wrapper.ex

defmodule Walkman.Wrapper do
@moduledoc """
Use Walkman.Wrapper to isolate modules from the outside world.
```elixir
defmodule MyModule do
def my_function do
# ...
end
# ...
end
defmodule MyModuleWrapper do
use Walkman.Wrapper, MyModule
end
```
Now `MyModuleWrapper` can be used instead of `MyModule` to test your application.
"""
defmacro __using__(module) do
quote bind_quoted: [module: module] do
Enum.each(module.__info__(:functions), fn {fun, arity} ->
args = Macro.generate_arguments(arity, module)
def unquote(fun)(unquote_splicing(args)) do
Walkman.call_function(unquote(module), unquote(fun), unquote(args))
end
end)
end
end
end