lib/helpers/url_builder.ex

defmodule Ravix.Helpers.UrlBuilder do
  @moduledoc """
  Helper to facilitate building url query params following the RavenDB API
  """

  @doc """
  Receives a base url, param name and a (list of) param value and parses it to 
  a valid RavenDB url
  """
  @spec append_param(String.t(), String.t(), any()) :: String.t()
  def append_param(base_url, param_name, param_value)

  def append_param(base_url, name, values) when is_list(values),
    do:
      base_url
      |> build_list_params(name, values)

  def append_param(base_url, _param_name, param_value) when param_value == nil, do: base_url

  def append_param(base_url, param_name, param_value),
    do: append_param(base_url, param_name, [param_value])

  defp build_list_params(base_url, name, values) do
    base_url <> Enum.map_join(values, "", &"&#{name}=#{&1}")
  end
end