From e52475a7cd2953b7c17214b97da00e031a355c45 Mon Sep 17 00:00:00 2001 From: Justin Li Date: Wed, 30 Oct 2019 13:44:29 -0400 Subject: [PATCH] Wrap evaluations in render and include to override for tracking --- lib/liquid/tags/include.rb | 28 +++++++++++++++++++--------- lib/liquid/tags/render.rb | 10 ++++++++-- 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/lib/liquid/tags/include.rb b/lib/liquid/tags/include.rb index 5b7bcc5..a0a9159 100644 --- a/lib/liquid/tags/include.rb +++ b/lib/liquid/tags/include.rb @@ -56,14 +56,6 @@ module Liquid parse_context: parse_context ) - context_variable_name = @alias_name || template_name.split('/').last - - variable = if @variable_name_expr - context.evaluate(@variable_name_expr) - else - context.find_variable(template_name, raise_on_not_found: false) - end - old_template_name = context.template_name old_partial = context.partial begin @@ -71,7 +63,15 @@ module Liquid context.partial = true context.stack do @attributes.each do |key, value| - context[key] = context.evaluate(value) + context[key] = evaluate(context, value) + end + + context_variable_name = @alias_name || template_name.split('/').last + + variable = if @variable_name_expr + evaluate(context, @variable_name_expr) + else + find_variable(context, template_name, raise_on_not_found: false) end if variable.is_a?(Array) @@ -103,6 +103,16 @@ module Liquid ] + @node.attributes.values end end + + private + + def evaluate(context, value) + context.evaluate(value) + end + + def find_variable(context, *args) + context.find_variable(*args) + end end Template.register_tag('include', Include) diff --git a/lib/liquid/tags/render.rb b/lib/liquid/tags/render.rb index 8ce560a..a41c93b 100644 --- a/lib/liquid/tags/render.rb +++ b/lib/liquid/tags/render.rb @@ -53,14 +53,14 @@ module Liquid inner_context['forloop'] = forloop if forloop @attributes.each do |key, value| - inner_context[key] = context.evaluate(value) + inner_context[key] = evaluate(context, value) end inner_context[context_variable_name] = var unless var.nil? partial.render_to_output_buffer(inner_context, output) forloop&.send(:increment!) } - variable = @variable_name_expr ? context.evaluate(@variable_name_expr) : nil + variable = @variable_name_expr ? evaluate(context, @variable_name_expr) : nil if @for && variable.respond_to?(:each) && variable.respond_to?(:count) forloop = Liquid::ForloopDrop.new(template_name, variable.count, nil) variable.each { |var| render_partial_func.call(var, forloop) } @@ -78,6 +78,12 @@ module Liquid ] + @node.attributes.values end end + + private + + def evaluate(context, value) + context.evaluate(value) + end end Template.register_tag('render', Render)