From bc5e444d049373fca8eb205baf22ae6c13cbed55 Mon Sep 17 00:00:00 2001 From: Dylan Thacker-Smith Date: Thu, 16 Oct 2014 23:02:41 -0400 Subject: [PATCH] Use Expression.parse and Context#evaluate in the Include class. --- lib/liquid/profiler/hooks.rb | 2 +- lib/liquid/tags/include.rb | 25 ++++++++++++++----------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/lib/liquid/profiler/hooks.rb b/lib/liquid/profiler/hooks.rb index 8a92189..e752c5e 100644 --- a/lib/liquid/profiler/hooks.rb +++ b/lib/liquid/profiler/hooks.rb @@ -12,7 +12,7 @@ module Liquid class Include < Tag def render_with_profiling(context) - Profiler.profile_children(@template_name) do + Profiler.profile_children("'#{context.evaluate(@template_name)}'") do render_without_profiling(context) end end diff --git a/lib/liquid/tags/include.rb b/lib/liquid/tags/include.rb index e367ac3..f816e2e 100644 --- a/lib/liquid/tags/include.rb +++ b/lib/liquid/tags/include.rb @@ -22,12 +22,16 @@ module Liquid if markup =~ Syntax - @template_name = $1 - @variable_name = $3 + template_name = $1 + variable_name = $3 + + @variable_name = Expression.parse(variable_name || template_name[1..-2]) + @context_variable_name = template_name[1..-2].split('/'.freeze).last + @template_name = Expression.parse(template_name) @attributes = {} markup.scan(TagAttributes) do |key, value| - @attributes[key] = value + @attributes[key] = Expression.parse(value) end else @@ -40,21 +44,20 @@ module Liquid def render(context) partial = load_cached_partial(context) - variable = context[@variable_name || @template_name[1..-2]] + variable = context.evaluate(@variable_name) context.stack do @attributes.each do |key, value| - context[key] = context[value] + context[key] = context.evaluate(value) end - context_variable_name = @template_name[1..-2].split('/'.freeze).last if variable.is_a?(Array) variable.collect do |var| - context[context_variable_name] = var + context[@context_variable_name] = var partial.render(context) end else - context[context_variable_name] = variable + context[@context_variable_name] = variable partial.render(context) end end @@ -63,7 +66,7 @@ module Liquid private def load_cached_partial(context) cached_partials = context.registers[:cached_partials] || {} - template_name = context[@template_name] + template_name = context.evaluate(@template_name) if cached = cached_partials[template_name] return cached @@ -81,9 +84,9 @@ module Liquid # make read_template_file call backwards-compatible. case file_system.method(:read_template_file).arity when 1 - file_system.read_template_file(context[@template_name]) + file_system.read_template_file(context.evaluate(@template_name)) when 2 - file_system.read_template_file(context[@template_name], context) + file_system.read_template_file(context.evaluate(@template_name), context) else raise ArgumentError, "file_system.read_template_file expects two parameters: (template_name, context)" end