lib/github/issues/url_template.ex

defmodule GitHub.Issues.URLTemplate do
  @moduledoc """
  Returns a URL based on a user, a project and a URL template.
  """

  alias GitHub.Issues.CLI

  @doc """
  Returns a URL based on `user`, `project` and `url_template`.

  ## Parameters

    - `user`         - GitHub user
    - `project`      - GitHub project
    - `url_template` - URL template (EEx string)

  ## Examples

      iex> alias GitHub.Issues.URLTemplate
      iex> url_template = "api.github.com/repos/<%=user%>/<%=project%>/issues"
      iex> URLTemplate.url("Kraigie", "nostrum", url_template)
      "api.github.com/repos/Kraigie/nostrum/issues"

      iex> alias GitHub.Issues.URLTemplate
      iex> url_template = "elixir-lang.org/<%=project%>/<%=user%>/wow"
      iex> URLTemplate.url("José", "Elixir", url_template)
      "elixir-lang.org/Elixir/José/wow"

      iex> alias GitHub.Issues.URLTemplate
      iex> url_template = "elixir-lang.org/<project>/<user>/wow"
      iex> URLTemplate.url("José", "Elixir", url_template)
      "elixir-lang.org/<project>/<user>/wow"
  """
  @spec url(CLI.user(), CLI.project(), String.t()) :: String.t()
  def url(user, project, url_template) do
    EEx.eval_string(url_template, user: user, project: project)
  end
end