akkoma/lib/pleroma/config/loader.ex

40 lines
1,001 B
Elixir
Raw Normal View History

2020-01-18 13:55:33 +00:00
defmodule Pleroma.Config.Loader do
@paths ["config/config.exs", "config/#{Mix.env()}.exs"]
if Code.ensure_loaded?(Config.Reader) do
@spec load(Path.t()) :: keyword()
def load(path), do: Config.Reader.read!(path)
defp do_merge(conf1, conf2), do: Config.Reader.merge(conf1, conf2)
else
# support for Elixir less than 1.9
@spec load(Path.t()) :: keyword()
def load(path) do
{config, _paths} = Mix.Config.eval!(path)
config
end
defp do_merge(conf1, conf2), do: Mix.Config.merge(conf1, conf2)
end
@spec load_and_merge() :: keyword()
def load_and_merge do
all_paths =
if Pleroma.Config.get(:release),
do: @paths ++ ["config/releases.exs"],
else: @paths
all_paths
|> Enum.map(&load(&1))
|> merge()
end
@spec merge([keyword()], keyword()) :: keyword()
def merge(configs, acc \\ [])
def merge([], acc), do: acc
def merge([config | others], acc) do
merge(others, do_merge(acc, config))
end
end