lib/noaa/observations/url_templates.ex

defmodule NOAA.Observations.URLTemplates do
  @moduledoc """
  Returns a URL based on `url_templates` and `station` or `state`.
  """

  @doc """
  Returns a URL based on `url_templates` and `station` or `state`.

  ## Parameters

    - `url_templates` - keyword of EEx strings
    - `keyword`       - [station: `station`] or [state: `state`]

  ## Examples

      iex> alias NOAA.Observations.URLTemplates
      iex> url_templates = [
      ...>  state: "w1.weather.gov/seek.php?state=<%=state%>&Find=Find",
      ...>  station: "w1.weather.gov/display.php?stid=<%=station%>"
      ...> ]
      iex> {URLTemplates.url(url_templates, state: "vt"),
      ...>  URLTemplates.url(url_templates, station: "KBTV")}
      {"w1.weather.gov/seek.php?state=vt&Find=Find",
       "w1.weather.gov/display.php?stid=KBTV"}

      iex> alias NOAA.Observations.URLTemplates
      iex> url_templates = [
      ...>   state: "weather.gc.ca/forecast/canada/index_e.html?id=<%=state%>"
      ...> ]
      iex> URLTemplates.url(url_templates, state: "qc")
      "weather.gc.ca/forecast/canada/index_e.html?id=qc"
  """
  @spec url(Keyword.t(), Keyword.t()) :: String.t()
  def url(url_templates, station: station) do
    EEx.eval_string(url_templates[:station], station: station)
  end

  def url(url_templates, state: state) do
    EEx.eval_string(url_templates[:state], state: state)
  end
end