From 7ca2846d9c215af3799f2694fefb72d114b05bf0 Mon Sep 17 00:00:00 2001 From: Peter Zhu Date: Wed, 16 Dec 2020 12:06:29 -0500 Subject: [PATCH 1/2] Move configure options to a method --- lib/liquid/template.rb | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/lib/liquid/template.rb b/lib/liquid/template.rb index 276cdbf..adcf6bd 100644 --- a/lib/liquid/template.rb +++ b/lib/liquid/template.rb @@ -106,16 +106,8 @@ module Liquid # Parse source code. # Returns self for easy chaining def parse(source, options = {}) - if (profiling = options[:profile]) - raise "Profiler not loaded, require 'liquid/profiler' first" unless defined?(Liquid::Profiler) - end - - @options = options - @profiling = profiling - @line_numbers = options[:line_numbers] || profiling - parse_context = options.is_a?(ParseContext) ? options : ParseContext.new(options) + parse_context = configure_options(options) @root = Document.parse(tokenize(source), parse_context) - @warnings = parse_context.warnings self end @@ -218,6 +210,19 @@ module Liquid private + def configure_options(options) + if (profiling = options[:profile]) + raise "Profiler not loaded, require 'liquid/profiler' first" unless defined?(Liquid::Profiler) + end + + @options = options + @profiling = profiling + @line_numbers = options[:line_numbers] || @profiling + parse_context = options.is_a?(ParseContext) ? options : ParseContext.new(options) + @warnings = parse_context.warnings + parse_context + end + def tokenize(source) Tokenizer.new(source, @line_numbers) end From 51e8d6234a6ac902efe5cf21768bfbf0260228e8 Mon Sep 17 00:00:00 2001 From: Peter Zhu Date: Wed, 16 Dec 2020 15:18:34 -0500 Subject: [PATCH 2/2] Freeze blocks in reverse order --- lib/liquid/tags/case.rb | 2 +- lib/liquid/tags/for.rb | 4 ++-- lib/liquid/tags/if.rb | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/liquid/tags/case.rb b/lib/liquid/tags/case.rb index 43d4b3b..ccd69bd 100644 --- a/lib/liquid/tags/case.rb +++ b/lib/liquid/tags/case.rb @@ -21,7 +21,7 @@ module Liquid def parse(tokens) body = case_body = new_body body = @blocks.last.attachment while parse_body(body, tokens) - @blocks.each do |condition| + @blocks.reverse_each do |condition| body = condition.attachment unless body.frozen? body.remove_blank_strings if blank? diff --git a/lib/liquid/tags/for.rb b/lib/liquid/tags/for.rb index 2c80a58..328ba02 100644 --- a/lib/liquid/tags/for.rb +++ b/lib/liquid/tags/for.rb @@ -63,11 +63,11 @@ module Liquid parse_body(@else_block, tokens) end if blank? - @for_block.remove_blank_strings @else_block&.remove_blank_strings + @for_block.remove_blank_strings end - @for_block.freeze @else_block&.freeze + @for_block.freeze end def nodelist diff --git a/lib/liquid/tags/if.rb b/lib/liquid/tags/if.rb index b4a680a..44aea61 100644 --- a/lib/liquid/tags/if.rb +++ b/lib/liquid/tags/if.rb @@ -31,7 +31,7 @@ module Liquid def parse(tokens) while parse_body(@blocks.last.attachment, tokens) end - @blocks.each do |block| + @blocks.reverse_each do |block| block.attachment.remove_blank_strings if blank? block.attachment.freeze end