Browse Source

Follow Credo refactor recommendations

master^2
buttercat1791 2 months ago
parent
commit
d3f6d88380
  1. 22
      lib/gc_index_relay_web/controllers/filter_controller.ex

22
lib/gc_index_relay_web/controllers/filter_controller.ex

@ -74,10 +74,10 @@ defmodule GcIndexRelayWeb.FilterController do
@spec validate_required_params(map()) :: {:ok, map()} | {:error, String.t()} @spec validate_required_params(map()) :: {:ok, map()} | {:error, String.t()}
def validate_required_params(params) do def validate_required_params(params) do
if not Map.has_key?(params, "limit") do if Map.has_key?(params, "limit") do
{:error, "The filter must specify a limit."}
else
{:ok, params} {:ok, params}
else
{:error, "The filter must specify a limit."}
end end
end end
@ -141,11 +141,7 @@ defmodule GcIndexRelayWeb.FilterController do
|> Enum.reduce_while({:ok, %{}}, fn {key, value}, {:ok, acc} -> |> Enum.reduce_while({:ok, %{}}, fn {key, value}, {:ok, acc} ->
case parse_param(key, value) do case parse_param(key, value) do
{:ok, parsed_value} -> {:ok, parsed_value} ->
out_key = out_key = parse_tag(key)
if byte_size(key) == 1 and
((key >= "a" and key <= "z") or (key >= "A" and key <= "Z")),
do: "#" <> key,
else: key
{:cont, {:ok, Map.put(acc, out_key, parsed_value)}} {:cont, {:ok, Map.put(acc, out_key, parsed_value)}}
@ -155,6 +151,16 @@ defmodule GcIndexRelayWeb.FilterController do
end) end)
end end
# Parse filter keys that represent tags. Note that only single-letter keys are treated as tags;
# all other keys are passed through unchanged.
@spec parse_tag(String.t()) :: String.t()
defp parse_tag(key) do
if byte_size(key) == 1 and
((key >= "a" and key <= "z") or (key >= "A" and key <= "Z")),
do: "#" <> key,
else: key
end
# Parse individual parameter based on its key # Parse individual parameter based on its key
@spec parse_param(String.t(), String.t()) :: {:ok, any()} | {:error, String.t()} @spec parse_param(String.t(), String.t()) :: {:ok, any()} | {:error, String.t()}
defp parse_param("ids", value), do: {:ok, String.split(value, ",")} defp parse_param("ids", value), do: {:ok, String.split(value, ",")}

Loading…
Cancel
Save