mirror of
https://github.com/Shopify/liquid.git
synced 2025-09-23 00:01:14 -04:00
Add else
blocks to for
and case
nodelists
This commit is contained in:
parent
fbfd5712df
commit
06e2f2577f
@ -1,7 +1,7 @@
|
||||
module Liquid
|
||||
class Tag
|
||||
attr_accessor :nodelist, :options
|
||||
attr_reader :warnings
|
||||
attr_accessor :options
|
||||
attr_reader :nodelist, :warnings
|
||||
|
||||
def self.new_with_options(tag_name, markup, tokens, options)
|
||||
# Forgive me Matz for I have sinned. I know this code is weird
|
||||
|
@ -15,6 +15,10 @@ module Liquid
|
||||
super
|
||||
end
|
||||
|
||||
def nodelist
|
||||
@blocks.map(&:attachment).flatten
|
||||
end
|
||||
|
||||
def unknown_tag(tag, markup, tokens)
|
||||
@nodelist = []
|
||||
case tag
|
||||
|
@ -52,6 +52,14 @@ module Liquid
|
||||
super
|
||||
end
|
||||
|
||||
def nodelist
|
||||
if @else_block
|
||||
@for_block + @else_block
|
||||
else
|
||||
@for_block
|
||||
end
|
||||
end
|
||||
|
||||
def unknown_tag(tag, markup, tokens)
|
||||
return super unless tag == 'else'
|
||||
@nodelist = @else_block = []
|
||||
|
10
test/liquid/tags/case_tag_test.rb
Normal file
10
test/liquid/tags/case_tag_test.rb
Normal file
@ -0,0 +1,10 @@
|
||||
require 'test_helper'
|
||||
|
||||
class CaseTagTest < Test::Unit::TestCase
|
||||
include Liquid
|
||||
|
||||
def test_case_nodelist
|
||||
template = Liquid::Template.parse('{% case var %}{% when true %}WHEN{% else %}ELSE{% endcase %}')
|
||||
assert_equal ['WHEN', 'ELSE'], template.root.nodelist[0].nodelist
|
||||
end
|
||||
end # CaseTest
|
@ -294,4 +294,14 @@ HERE
|
||||
assigns = {'items' => [1,2,3,4,5]}
|
||||
assert_template_result(expected, template, assigns)
|
||||
end
|
||||
|
||||
def test_for_nodelist
|
||||
template = Liquid::Template.parse('{% for item in items %}FOR{% endfor %}')
|
||||
assert_equal ['FOR'], template.root.nodelist[0].nodelist
|
||||
end
|
||||
|
||||
def test_for_else_nodelist
|
||||
template = Liquid::Template.parse('{% for item in items %}FOR{% else %}ELSE{% endfor %}')
|
||||
assert_equal ['FOR', 'ELSE'], template.root.nodelist[0].nodelist
|
||||
end
|
||||
end
|
||||
|
Loading…
x
Reference in New Issue
Block a user