From 50fbd2402d6b4841f07fafa12ef7a8bdab0b560a Mon Sep 17 00:00:00 2001 From: David Levine Date: Tue, 27 Sep 2022 22:10:33 -0400 Subject: [PATCH 1/2] convert inject/1 to a macro this ensures that Application.get_env is called only when inject is enabled in the config. Otherwise, it does not get included in the compiled code. --- lib/inject.ex | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/lib/inject.ex b/lib/inject.ex index 98fcf80..76b3fd3 100644 --- a/lib/inject.ex +++ b/lib/inject.ex @@ -8,21 +8,23 @@ defmodule Inject do :ok end - def i(mod) do - inject(mod) - end - - def inject(mod) do + defmacro inject(mod) do if Application.get_env(:inject, :disabled) do mod else - Inject.Registry - |> Registry.lookup(mod) - |> Enum.reverse() - |> find_override() || mod + 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 + defp find_override([]), do: nil defp find_override([{pid, {override, shared: shared}} | overrides]) do From 557258039a85a5b6fdc4bc39c85b0c3da591b995 Mon Sep 17 00:00:00 2001 From: David Levine Date: Mon, 10 Oct 2022 09:54:49 -0400 Subject: [PATCH 2/2] update test to evaluate code with update env vars --- lib/inject.ex | 6 +++++- test/inject_configuration_test.exs | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/inject.ex b/lib/inject.ex index 76b3fd3..e768430 100644 --- a/lib/inject.ex +++ b/lib/inject.ex @@ -8,7 +8,7 @@ defmodule Inject do :ok end - defmacro inject(mod) do + defmacro inject_module(mod) do if Application.get_env(:inject, :disabled) do mod else @@ -25,6 +25,10 @@ defmodule Inject do inject(mod) end + def inject(mod) do + inject_module(mod) + end + defp find_override([]), do: nil defp find_override([{pid, {override, shared: shared}} | overrides]) do 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