Current section
Files
Jump to
Current section
Files
lib/exenv.ex
defmodule Exenv do
use Application
alias Exenv.Config
alias Exenv.Server
def start(_type, _args) do
if Config.get(:start_on_application) do
start_link()
else
Supervisor.start_link([], strategy: :one_for_one)
end
end
def start_link(opts \\ []) do
Exenv.Supervisor.start_link(opts)
end
def child_spec(opts \\ []) do
%{
id: Exenv.Supervisor,
start: {Exenv.Supervisor, :start_link, [opts]}
}
end
@doc """
Loads all env vars using the adapters defined within our config.
"""
@spec load() :: Exenv.Adapter.result() | no_return
def load do
Server.load()
end
@doc """
Loads all env vars asynchronously using the adapters defined within our config.
"""
@spec async_load() :: :ok | no_return
def async_load do
Server.async_load()
end
@doc """
Loads all env vars using the adapter config provided.
"""
@spec load(adapters :: [Exenv.Adapter.config()]) :: [{Exenv.Adapter.t(), Exenv.Adapter.result()}]
def load(adapters) when is_list(adapters) do
for {adapter, opts} <- adapters do
result = load(adapter, opts)
{adapter, result}
end
end
@doc """
Loads env vars using the adapter and options provided.
"""
@spec load(adapter :: Exenv.Adapter.t(), opts :: keyword()) :: Exenv.Adapter.result()
def load(adapter, opts) when is_atom(adapter) do
apply(adapter, :load, [opts])
end
end