defmodule StepFlow.Repo do
use Ecto.Repo,
otp_app: :step_flow,
show_sensitive_data_on_connection_error: true,
adapter: Ecto.Adapters.Postgres
require Logger
def init(_, opts) do
opts =
opts
|> replace_if_present(:hostname)
|> replace_if_present(:port)
|> replace_if_present(:username)
|> replace_if_present(:password)
|> replace_if_present(:database)
|> replace_if_present(:runtime_pool_size, :pool_size, &StepFlow.Configuration.to_integer/1)
Logger.debug("StepFlow connecting to Postgres with parameters: #{inspect(opts)}")
{:ok, opts}
end
defp replace_if_present(opts, key, output_key \\ nil, processor \\ &StepFlow.Repo.bypass/1) do
case StepFlow.Configuration.get_var_value(StepFlow.Repo, key) do
nil ->
opts
value ->
value = processor.(value)
output_key =
if output_key == nil do
key
else
output_key
end
Keyword.put(opts, output_key, value)
end
end
def bypass(value), do: value
end