Skip to content

Commit

Permalink
WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
catlee committed May 30, 2024
1 parent 0b93182 commit bac0d6d
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 2 deletions.
18 changes: 16 additions & 2 deletions lib/liquid/tags/assign.rb
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,28 @@ def initialize(tag_name, markup, parse_context)
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
Expand Down
15 changes: 15 additions & 0 deletions test/integration/assign_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,21 @@ def test_expression_with_whitespace_in_square_brackets
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
Expand Down

0 comments on commit bac0d6d

Please sign in to comment.