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
      iex> url_template = "api.github.com/repos/<%=user%>/<%=project%>/issues"
      iex> Issues.url("opendrops", "passport", url_template)
      "api.github.com/repos/opendrops/passport/issues"
  
      iex> alias GitHub.Issues
      iex> url_template = "elixir-lang.org/<%=project%>/<%=user%>/wow"
      iex> Issues.url("José", "Elixir", url_template)
      "elixir-lang.org/Elixir/José/wow"
  
      iex> alias GitHub.Issues
      iex> url_template = "elixir-lang.org/<project>/<user>/wow"
      iex> Issues.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