diff options
author | Roman Chvanikov <chvanikoff@pm.me> | 2020-08-04 14:35:47 +0300 |
---|---|---|
committer | Roman Chvanikov <chvanikoff@pm.me> | 2020-08-04 14:35:47 +0300 |
commit | 56e9bf33932bacfdffd700b97e3117fc593cac11 (patch) | |
tree | e16ea207bb67fe8f54174f42fb3e0f4edd6e6fd7 /lib/pleroma | |
parent | e3953923aca1706ab508bfda1ab892304b29c09a (diff) | |
download | pleroma-56e9bf33932bacfdffd700b97e3117fc593cac11.tar.gz |
Unify Config.get behaviour for atom/list key param
Diffstat (limited to 'lib/pleroma')
-rw-r--r-- | lib/pleroma/config.ex | 34 |
1 files changed, 27 insertions, 7 deletions
diff --git a/lib/pleroma/config.ex b/lib/pleroma/config.ex index cc80deff5..88d1972ba 100644 --- a/lib/pleroma/config.ex +++ b/lib/pleroma/config.ex @@ -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 |