lib/openagents_web/controllers/label_json.ex

58e6347eeb72 · 866 B

defmodule OpenAgentsWeb.LabelJSON do
  @moduledoc """
  Renders GitHub-compatible label JSON.
  """

  def render("index.json", %{labels: labels} = assigns) do
    %{labels: Enum.map(labels, &label_json(&1, assigns))}
  end

  def render("show.json", %{label: label} = assigns) do
    label_json(label, assigns)
  end

  defp label_json(label, assigns) do
    owner = Map.get(assigns, :owner, "OpenAgents")
    repo = Map.get(assigns, :repo, "openagents")

    %{
      id: label.id,
      name: label.name,
      color: label.color,
      description: label.description,
      default: false,
      url:
        "#{url_base(assigns)}/api/v1/repos/#{owner}/#{repo}/labels/#{URI.encode(label.name, &URI.char_unreserved?/1)}"
    }
  end

  defp url_base(assigns) do
    Map.get(assigns, :url_base) || String.trim_trailing(OpenAgentsWeb.Endpoint.url(), "/")
  end
end