Add else blocks to for and case nodelists

This commit is contained in:
Nicholas Jones 2014-01-13 11:50:35 -08:00
parent fbfd5712df
commit 06e2f2577f
5 changed files with 34 additions and 2 deletions

View File

@ -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

View File

@ -15,6 +15,10 @@ module Liquid
super
end
def nodelist
@blocks.map(&:attachment).flatten
end
def unknown_tag(tag, markup, tokens)
@nodelist = []
case tag

View File

@ -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 = []

View 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

View File

@ -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