diff options
author | Alex S <alex.strizhakov@gmail.com> | 2019-06-22 17:30:53 +0300 |
---|---|---|
committer | Alex S <alex.strizhakov@gmail.com> | 2019-06-22 17:30:53 +0300 |
commit | 410add1c30d230e86c22de4e54bb9999de980b16 (patch) | |
tree | e0b9c47070751946f0fc1c3a171a07d77e6cc030 /lib | |
parent | f0fccb75783bcac406133d8cb3d4d3a485189092 (diff) | |
download | pleroma-410add1c30d230e86c22de4e54bb9999de980b16.tar.gz |
support for tuples with more than 2 values
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pleroma/web/admin_api/config.ex | 48 |
1 files changed, 27 insertions, 21 deletions
diff --git a/lib/pleroma/web/admin_api/config.ex b/lib/pleroma/web/admin_api/config.ex index ddcfc87d5..2e149bf25 100644 --- a/lib/pleroma/web/admin_api/config.ex +++ b/lib/pleroma/web/admin_api/config.ex @@ -77,6 +77,8 @@ defmodule Pleroma.Web.AdminAPI.Config do defp do_convert({k, v} = value) when is_tuple(value), do: %{k => do_convert(v)} + defp do_convert(value) when is_tuple(value), do: %{"tuple" => do_convert(Tuple.to_list(value))} + defp do_convert(value) when is_binary(value) or is_map(value) or is_number(value), do: value defp do_convert(value) when is_atom(value) do @@ -108,11 +110,16 @@ defmodule Pleroma.Web.AdminAPI.Config do defp do_transform(%Regex{} = value) when is_map(value), do: value + defp do_transform(%{"tuple" => [k, values] = entity}) when length(entity) == 2 do + {do_transform(k), do_transform(values)} + end + + defp do_transform(%{"tuple" => values}) do + Enum.reduce(values, {}, fn val, acc -> Tuple.append(acc, do_transform(val)) end) + end + defp do_transform(value) when is_map(value) do - values = - for {key, val} <- value, - into: [], - do: {String.to_atom(key), do_transform(val)} + values = for {key, val} <- value, into: [], do: {String.to_atom(key), do_transform(val)} Enum.sort(values) end @@ -124,28 +131,27 @@ defmodule Pleroma.Web.AdminAPI.Config do defp do_transform(entity) when is_list(entity) and length(entity) == 1, do: hd(entity) defp do_transform(value) when is_binary(value) do - value = String.trim(value) + String.trim(value) + |> do_transform_string() + end + + defp do_transform(value), do: value - case String.length(value) do - 0 -> - nil + defp do_transform_string(value) when byte_size(value) == 0, do: nil - _ -> - cond do - String.starts_with?(value, "Pleroma") -> - String.to_existing_atom("Elixir." <> value) + defp do_transform_string(value) do + cond do + String.starts_with?(value, "Pleroma") or String.starts_with?(value, "Phoenix") -> + String.to_existing_atom("Elixir." <> value) - String.starts_with?(value, ":") -> - String.replace(value, ":", "") |> String.to_existing_atom() + String.starts_with?(value, ":") -> + String.replace(value, ":", "") |> String.to_existing_atom() - String.starts_with?(value, "i:") -> - String.replace(value, "i:", "") |> String.to_integer() + String.starts_with?(value, "i:") -> + String.replace(value, "i:", "") |> String.to_integer() - true -> - value - end + true -> + value end end - - defp do_transform(value), do: value end |