Current section

Files

Jump to
phoenix_sync lib phoenix sync application.ex
Raw

lib/phoenix/sync/application.ex

defmodule Phoenix.Sync.Application do
@moduledoc false
use Application
require Logger
@default_adapter Phoenix.Sync.Electric
@impl true
def start(_type, _args) do
case children() do
{:ok, children} ->
Supervisor.start_link(children, strategy: :one_for_one, name: Phoenix.Sync.Supervisor)
{:error, reason} ->
Logger.warning(reason)
Supervisor.start_link([], strategy: :one_for_one, name: Phoenix.Sync.Supervisor)
end
end
@doc false
def config do
Application.get_all_env(:phoenix_sync)
end
@doc false
def adapter do
config() |> adapter()
end
@doc false
def adapter(opts) do
Keyword.get(opts, :adapter, @default_adapter)
end
@doc false
def children do
config() |> children()
end
@doc false
def children(opts) when is_list(opts) do
{adapter, env} = adapter_env(opts)
apply(adapter, :children, [env, opts])
end
@doc false
def adapter_env(opts) do
{
adapter(),
Keyword.get(opts, :env, :prod)
}
end
@spec plug_opts() :: keyword()
def plug_opts do
config() |> plug_opts()
end
@doc false
def plug_opts(opts) when is_list(opts) do
{adapter, env} = adapter_env(opts)
apply(adapter, :plug_opts, [env, opts])
end
@doc false
def fetch_with_error(opts, key) do
case Keyword.fetch(opts, key) do
{:ok, url} -> {:ok, url}
:error -> {:error, "Missing required key #{inspect(key)}"}
end
end
end