Compare commits

...
Author SHA1 Message Date
Chris AtLee bac0d6d2b5 WIP 2024-05-30 11:57:36 -04:00
2 changed files with 31 additions and 2 deletions
+16 -2
View File
@@ -27,14 +27,28 @@ module Liquid
super
if markup =~ Syntax
@to = Regexp.last_match(1)
@from = Variable.new(Regexp.last_match(2), parse_context)
from_ = Regexp.last_match(2).strip
if /^\[.*\]$/.match?(from_)
from_ = from_[1..-2].split(",")
@from = from_.map { |s| Variable.new(s.strip, parse_context) }
else
@from = Variable.new(from_, parse_context)
end
else
self.class.raise_syntax_error(parse_context)
end
end
def render_to_output_buffer(context, output)
val = @from.render(context)
val = nil
if @from.is_a?(Array)
val = []
@from.each do |var|
val << var.render(context)
end
else
val = @from.render(context)
end
context.scopes.last[@to] = val
context.resource_limits.increment_assign_score(assign_score_of(val))
output
+15
View File
@@ -53,6 +53,21 @@ class AssignTest < Minitest::Test
assert_template_result('result', source, { 'a' => { 'b' => 'result' } })
end
def test_assign_array
source = "{% assign r = [1, 2, 3] %}{{ r | join: ';' }}"
assert_template_result('1;2;3', source)
source = <<~LIQUID
{%- assign a = "one" -%}
{%- assign b = "two" -%}
{%- assign c = "three" -%}
{%- assign l = [a, b, c] -%}
{{- l | join: ", and " -}}
LIQUID
assert_template_result("one, and two, and three", source)
end
def test_assign_score_exceeding_resource_limit
t = Template.parse("{% assign foo = 42 %}{% assign bar = 23 %}")
t.resource_limits.assign_score_limit = 1