Packages

Inject is a library that lets you write testable Elixir code that can run concurrently in ExUnit.

Current section

Files

Jump to
inject lib inject.ex
Raw

lib/inject.ex

defmodule Inject do
def register(source_module, inject_module, opts \\ []) do
shared = opts |> Keyword.get(:shared, false)
:ok = Registry.unregister(Inject.Registry, source_module)
{:ok, _} =
Registry.register(Inject.Registry, source_module, {inject_module, [shared: shared]})
:ok
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)
|> find_override() || mod
end
end
defp find_override([]), do: nil
defp find_override([{pid, {override, shared: shared}} | overrides]) do
if pid == self() || shared do
override
else
find_override(overrides)
end
end
end