diff --git a/lib/inject.ex b/lib/inject.ex index 98fcf80..e768430 100644 --- a/lib/inject.ex +++ b/lib/inject.ex @@ -8,19 +8,25 @@ defmodule Inject do :ok end + defmacro inject_module(mod) do + if Application.get_env(:inject, :disabled) do + mod + else + quote bind_quoted: [mod: mod] do + Inject.Registry + |> Registry.lookup(mod) + |> Enum.reverse() + |> find_override() || mod + end + end + end + def i(mod) do inject(mod) end def inject(mod) do - if Application.get_env(:inject, :disabled) do - mod - else - Inject.Registry - |> Registry.lookup(mod) - |> Enum.reverse() - |> find_override() || mod - end + inject_module(mod) end defp find_override([]), do: nil diff --git a/test/inject_configuration_test.exs b/test/inject_configuration_test.exs index 5da06bd..503e41b 100644 --- a/test/inject_configuration_test.exs +++ b/test/inject_configuration_test.exs @@ -19,7 +19,7 @@ defmodule InjectConfigurationTest do test "it does not lookup modules in the registry" do register(ExampleModule, StubModule) Application.put_env(:inject, :disabled, true) - assert "unstubbed" = i(ExampleModule).hello() + assert {"unstubbed", []} = Code.eval_quoted(quote(do: inject_module(ExampleModule).hello())) Application.put_env(:inject, :disabled, false) end end