mirror of
https://github.com/Shopify/liquid.git
synced 2026-09-12 23:40:45 -07:00
fix cycle tag not resetting
This commit is contained in:
@@ -68,7 +68,13 @@ module Liquid
|
|||||||
def variables_from_string(markup)
|
def variables_from_string(markup)
|
||||||
markup.split(',').collect do |var|
|
markup.split(',').collect do |var|
|
||||||
var =~ /\s*(#{QuotedFragment})\s*/o
|
var =~ /\s*(#{QuotedFragment})\s*/o
|
||||||
Regexp.last_match(1) ? parse_expression(Regexp.last_match(1)) : nil
|
next unless Regexp.last_match(1)
|
||||||
|
|
||||||
|
# Expression Parser returns cached objects, and we need to dup them to
|
||||||
|
# start the cycle over for each new cycle call.
|
||||||
|
# Liquid-C does not have a cache, so we don't need to dup the object.
|
||||||
|
var = parse_expression(Regexp.last_match(1))
|
||||||
|
var.is_a?(VariableLookup) ? var.dup : var
|
||||||
end.compact
|
end.compact
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,48 @@
|
|||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require 'test_helper'
|
||||||
|
|
||||||
|
class CycleTagTest < Minitest::Test
|
||||||
|
def test_simple_cycle
|
||||||
|
template = <<~LIQUID
|
||||||
|
{%- cycle '1', '2', '3' -%}
|
||||||
|
{%- cycle '1', '2', '3' -%}
|
||||||
|
{%- cycle '1', '2', '3' -%}
|
||||||
|
LIQUID
|
||||||
|
|
||||||
|
assert_template_result("123", template)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_simple_cycle_inside_for_loop
|
||||||
|
template = <<~LIQUID
|
||||||
|
{%- for i in (1..3) -%}
|
||||||
|
{% cycle '1', '2', '3' %}
|
||||||
|
{%- endfor -%}
|
||||||
|
LIQUID
|
||||||
|
|
||||||
|
assert_template_result("123", template)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_cycle_with_variables_inside_for_loop
|
||||||
|
template = <<~LIQUID
|
||||||
|
{%- assign a = 1 -%}
|
||||||
|
{%- assign b = 2 -%}
|
||||||
|
{%- assign c = 3 -%}
|
||||||
|
{%- for i in (1..3) -%}
|
||||||
|
{% cycle a, b, c %}
|
||||||
|
{%- endfor -%}
|
||||||
|
LIQUID
|
||||||
|
|
||||||
|
assert_template_result("123", template)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_cycle_tag_always_resets_cycle
|
||||||
|
template = <<~LIQUID
|
||||||
|
{%- assign a = "1" -%}
|
||||||
|
{%- cycle a, "2" -%}
|
||||||
|
{%- cycle a, "2" -%}
|
||||||
|
LIQUID
|
||||||
|
|
||||||
|
assert_template_result("11", template)
|
||||||
|
end
|
||||||
|
end
|
||||||
Reference in New Issue
Block a user