Current section
Files
Jump to
Current section
Files
lib/siren/utils.ex
defmodule Siren.Utils do
alias Siren.Utils
def action_name(action, class) do
"#{action}-#{Enum.join(class, "-")}"
end
def action_method(action) do
cond do
action == :create -> "POST"
action == :edit -> "PATCH"
action == :replace -> "PUT"
action == :delete -> "DELETE"
true -> "GET"
end
end
def remove_empty(map) do
Enum.reduce(map, %{}, fn {key, value}, acc ->
if value == nil || value == [] || value == %{} do
acc
else
Map.put(acc, key, value)
end
end)
end
def get_query(uri) do
if uri.query do
URI.decode_query(uri.query)
else
%{}
end
end
if Code.ensure_loaded?(Plug.Conn) do
alias Plug.Conn
def get_int_param(query, key, default) do
value = Map.get(query, key, default)
if is_integer(value) do
value
else
value
|> Integer.parse()
|> elem(0)
end
end
def get_page_items(query, opts) do
query
|> Utils.get_int_param(:page_items, Keyword.get(opts, :page_items, 20))
end
def opts_from_conn(conn, opts) do
url = Conn.request_url(conn)
query = url |> URI.parse() |> Utils.get_query()
opts
|> Keyword.put(:base_url, url)
|> Keyword.put(:page, Utils.get_int_param(query, :page, 1))
|> Keyword.put(:page_items, Utils.get_page_items(query, opts))
end
end
end