diff --git a/lib/liquid/block.rb b/lib/liquid/block.rb index 9d7b752..b3a982e 100644 --- a/lib/liquid/block.rb +++ b/lib/liquid/block.rb @@ -10,7 +10,7 @@ module Liquid end def parse(tokens) - @body = BlockBody.new + @body = new_body while parse_body(@body, tokens) end end @@ -55,8 +55,14 @@ module Liquid @block_delimiter ||= "end#{block_name}" end - protected + private + # @api public + def new_body + BlockBody.new + end + + # @api public def parse_body(body, tokens) if parse_context.depth >= MAX_DEPTH raise StackLevelError, "Nesting too deep" diff --git a/lib/liquid/tags/case.rb b/lib/liquid/tags/case.rb index f6e0e70..0b48bf1 100644 --- a/lib/liquid/tags/case.rb +++ b/lib/liquid/tags/case.rb @@ -19,7 +19,7 @@ module Liquid end def parse(tokens) - body = BlockBody.new + body = new_body body = @blocks.last.attachment while parse_body(body, tokens) if blank? @blocks.each { |condition| condition.attachment.remove_blank_strings } @@ -59,7 +59,7 @@ module Liquid private def record_when_condition(markup) - body = BlockBody.new + body = new_body while markup unless markup =~ WhenSyntax @@ -80,7 +80,7 @@ module Liquid end block = ElseCondition.new - block.attach(BlockBody.new) + block.attach(new_body) @blocks << block end diff --git a/lib/liquid/tags/for.rb b/lib/liquid/tags/for.rb index bb03392..6f66ebd 100644 --- a/lib/liquid/tags/for.rb +++ b/lib/liquid/tags/for.rb @@ -54,7 +54,7 @@ module Liquid super @from = @limit = nil parse_with_selected_parser(markup) - @for_block = BlockBody.new + @for_block = new_body @else_block = nil end @@ -74,7 +74,7 @@ module Liquid def unknown_tag(tag, markup, tokens) return super unless tag == 'else' - @else_block = BlockBody.new + @else_block = new_body end def render_to_output_buffer(context, output) diff --git a/lib/liquid/tags/if.rb b/lib/liquid/tags/if.rb index 43c8b0a..1b4de55 100644 --- a/lib/liquid/tags/if.rb +++ b/lib/liquid/tags/if.rb @@ -64,7 +64,7 @@ module Liquid end @blocks.push(block) - block.attach(BlockBody.new) + block.attach(new_body) end def lax_parse(markup)