Unify Config.get behaviour for atom/list key param

This commit is contained in:
Roman Chvanikov 2020-08-04 14:35:47 +03:00
commit 56e9bf3393
3 changed files with 67 additions and 9 deletions

View file

@ -11,13 +11,33 @@ defmodule Pleroma.Config do
def get([key], default), do: get(key, default)
def get([parent_key | keys], default) do
case :pleroma
|> Application.get_env(parent_key)
|> get_in(keys) do
nil -> default
any -> any
end
def get([root_key | keys], default) do
# This is to mimic Application.get_env/3 behaviour that returns `nil` if the
# actual value is `nil`.
Enum.reduce_while(keys, Application.get_env(:pleroma, root_key), fn key, config ->
case key do
[last_key] when is_map(config) ->
{:halt, Map.get(config, last_key, default)}
[last_key] when is_list(config) ->
{:halt, Keyword.get(config, last_key, default)}
_ ->
case config do
%{^key => value} ->
{:cont, value}
[_ | _] ->
case :lists.keyfind(key, 1, config) do
{_, value} -> {:cont, value}
_ -> {:halt, default}
end
_ ->
{:halt, default}
end
end
end)
end
def get(key, default) do