mirror of
https://github.com/Shopify/liquid.git
synced 2026-10-03 09:05:13 -07:00
Merge pull request #559 from Shopify/fix-include-var
Merge pull request 559
This commit is contained in:
@@ -12,7 +12,7 @@ module Liquid
|
|||||||
|
|
||||||
class Include < Tag
|
class Include < Tag
|
||||||
def render_with_profiling(context)
|
def render_with_profiling(context)
|
||||||
Profiler.profile_children(context.evaluate(@template_name).to_s) do
|
Profiler.profile_children(context.evaluate(@template_name_expr).to_s) do
|
||||||
render_without_profiling(context)
|
render_without_profiling(context)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -25,9 +25,8 @@ module Liquid
|
|||||||
template_name = $1
|
template_name = $1
|
||||||
variable_name = $3
|
variable_name = $3
|
||||||
|
|
||||||
@variable_name = Expression.parse(variable_name || template_name[1..-2])
|
@variable_name_expr = variable_name ? Expression.parse(variable_name) : nil
|
||||||
@context_variable_name = template_name[1..-2].split('/'.freeze).last
|
@template_name_expr = Expression.parse(template_name)
|
||||||
@template_name = Expression.parse(template_name)
|
|
||||||
@attributes = {}
|
@attributes = {}
|
||||||
|
|
||||||
markup.scan(TagAttributes) do |key, value|
|
markup.scan(TagAttributes) do |key, value|
|
||||||
@@ -44,7 +43,15 @@ module Liquid
|
|||||||
|
|
||||||
def render(context)
|
def render(context)
|
||||||
partial = load_cached_partial(context)
|
partial = load_cached_partial(context)
|
||||||
variable = context.evaluate(@variable_name)
|
|
||||||
|
template_name = context.evaluate(@template_name_expr)
|
||||||
|
context_variable_name = template_name.split('/'.freeze).last
|
||||||
|
|
||||||
|
variable = if @variable_name_expr
|
||||||
|
context.evaluate(@variable_name_expr)
|
||||||
|
else
|
||||||
|
context.find_variable(template_name)
|
||||||
|
end
|
||||||
|
|
||||||
context.stack do
|
context.stack do
|
||||||
@attributes.each do |key, value|
|
@attributes.each do |key, value|
|
||||||
@@ -53,11 +60,11 @@ module Liquid
|
|||||||
|
|
||||||
if variable.is_a?(Array)
|
if variable.is_a?(Array)
|
||||||
variable.collect do |var|
|
variable.collect do |var|
|
||||||
context[@context_variable_name] = var
|
context[context_variable_name] = var
|
||||||
partial.render(context)
|
partial.render(context)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
context[@context_variable_name] = variable
|
context[context_variable_name] = variable
|
||||||
partial.render(context)
|
partial.render(context)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -66,7 +73,7 @@ module Liquid
|
|||||||
private
|
private
|
||||||
def load_cached_partial(context)
|
def load_cached_partial(context)
|
||||||
cached_partials = context.registers[:cached_partials] || {}
|
cached_partials = context.registers[:cached_partials] || {}
|
||||||
template_name = context.evaluate(@template_name)
|
template_name = context.evaluate(@template_name_expr)
|
||||||
|
|
||||||
if cached = cached_partials[template_name]
|
if cached = cached_partials[template_name]
|
||||||
return cached
|
return cached
|
||||||
@@ -81,7 +88,7 @@ module Liquid
|
|||||||
def read_template_from_file_system(context)
|
def read_template_from_file_system(context)
|
||||||
file_system = context.registers[:file_system] || Liquid::Template.file_system
|
file_system = context.registers[:file_system] || Liquid::Template.file_system
|
||||||
|
|
||||||
file_system.read_template_file(context.evaluate(@template_name))
|
file_system.read_template_file(context.evaluate(@template_name_expr))
|
||||||
end
|
end
|
||||||
|
|
||||||
def pass_options
|
def pass_options
|
||||||
|
|||||||
@@ -219,4 +219,12 @@ class IncludeTagTest < Minitest::Test
|
|||||||
assert_equal 'x', Template.parse("{% include template %}", error_mode: :strict, include_options_blacklist: [:error_mode]).render!("template" => '{{ "X" || downcase }}')
|
assert_equal 'x', Template.parse("{% include template %}", error_mode: :strict, include_options_blacklist: [:error_mode]).render!("template" => '{{ "X" || downcase }}')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_including_via_variable_value
|
||||||
|
assert_template_result "from TestFileSystem", "{% assign page = 'pick_a_source' %}{% include page %}"
|
||||||
|
|
||||||
|
assert_template_result "Product: Draft 151cm ", "{% assign page = 'product' %}{% include page %}", "product" => {'title' => 'Draft 151cm'}
|
||||||
|
|
||||||
|
assert_template_result "Product: Draft 151cm ", "{% assign page = 'product' %}{% include page for foo %}", "foo" => {'title' => 'Draft 151cm'}
|
||||||
|
end
|
||||||
end # IncludeTagTest
|
end # IncludeTagTest
|
||||||
|
|||||||
Reference in New Issue
Block a user