Current section

Files

Jump to
resty lib resty resource url_builder.ex
Raw

lib/resty/resource/url_builder.ex

defmodule Resty.Resource.UrlBuilder do
@moduledoc false
def build(module, id, params) do
{final_url, _} =
{module.site(), params}
|> add_resource_path(module.resource_path(), id)
|> replace_prefix_params()
|> add_extension(module.extension())
|> add_query_string()
final_url
end
defp add_resource_path({url, params}, resource_path, nil) do
{url <> resource_path, params}
end
defp add_resource_path({url, params}, resource_path, id) do
{url <> resource_path <> "/#{id}", params}
end
defp add_extension({url, params}, extension) do
{url <> extension, params}
end
defp replace_prefix_params(url_data, unused_params \\ [])
defp replace_prefix_params({url, []}, unused_params), do: {url, unused_params}
defp replace_prefix_params({url, [{param, value} | next_params]}, unused_params) do
case String.contains?(url, ":#{param}") do
false ->
replace_prefix_params({url, next_params}, unused_params ++ [{param, value}])
true ->
value = value |> to_string() |> URI.encode_www_form()
updated_url = String.replace(url, ":#{param}", value)
replace_prefix_params({updated_url, next_params}, unused_params)
end
end
defp add_query_string({_, []} = url_data), do: url_data
defp add_query_string({url, params}) do
{url <> "?" <> URI.encode_query(params), []}
end
end