lib/liquex/tag/break_tag.ex

defmodule Liquex.Tag.BreakTag do
  @moduledoc """
  Causes the loop to stop iterating when it encounters the break tag.

  ### Input

      {% for i in (1..5) %}
        {% if i == 4 %}
          {% break %}
        {% else %}
          {{ i }}
        {% endif %}
      {% endfor %}

  ### Output

      1 2 3
  """

  @behaviour Liquex.Tag

  alias Liquex.Parser.Tag

  import NimbleParsec

  @impl true
  def parse do
    ignore(Tag.tag_directive("break"))
  end

  @impl true
  def parse_liquid_tag do
    ignore(Tag.liquid_tag_directive("break"))
  end

  @impl true
  def render(_, context) do
    {:break, [], context}
  end
end