mirror of
https://github.com/Shopify/liquid.git
synced 2026-09-20 11:20:41 -07:00
Merge pull request #1692 from Shopify/error-message-with-filepath
set context's template_name with template.name in render and include tag
This commit is contained in:
@@ -16,6 +16,8 @@ module Liquid
|
|||||||
template = template_factory.for(template_name)
|
template = template_factory.for(template_name)
|
||||||
|
|
||||||
partial = template.parse(source, parse_context)
|
partial = template.parse(source, parse_context)
|
||||||
|
partial.name ||= template_name
|
||||||
|
|
||||||
cached_partials[template_name] = partial
|
cached_partials[template_name] = partial
|
||||||
ensure
|
ensure
|
||||||
parse_context.partial = false
|
parse_context.partial = false
|
||||||
|
|||||||
@@ -70,9 +70,11 @@ module Liquid
|
|||||||
|
|
||||||
old_template_name = context.template_name
|
old_template_name = context.template_name
|
||||||
old_partial = context.partial
|
old_partial = context.partial
|
||||||
|
|
||||||
begin
|
begin
|
||||||
context.template_name = template_name
|
context.template_name = partial.name
|
||||||
context.partial = true
|
context.partial = true
|
||||||
|
|
||||||
context.stack do
|
context.stack do
|
||||||
@attributes.each do |key, value|
|
@attributes.each do |key, value|
|
||||||
context[key] = context.evaluate(value)
|
context[key] = context.evaluate(value)
|
||||||
|
|||||||
@@ -76,7 +76,7 @@ module Liquid
|
|||||||
|
|
||||||
render_partial_func = ->(var, forloop) {
|
render_partial_func = ->(var, forloop) {
|
||||||
inner_context = context.new_isolated_subcontext
|
inner_context = context.new_isolated_subcontext
|
||||||
inner_context.template_name = template_name
|
inner_context.template_name = partial.name
|
||||||
inner_context.partial = true
|
inner_context.partial = true
|
||||||
inner_context['forloop'] = forloop if forloop
|
inner_context['forloop'] = forloop if forloop
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ module Liquid
|
|||||||
# template.render('user_name' => 'bob')
|
# template.render('user_name' => 'bob')
|
||||||
#
|
#
|
||||||
class Template
|
class Template
|
||||||
attr_accessor :root
|
attr_accessor :root, :name
|
||||||
attr_reader :resource_limits, :warnings
|
attr_reader :resource_limits, :warnings
|
||||||
|
|
||||||
class TagRegistry
|
class TagRegistry
|
||||||
|
|||||||
@@ -356,4 +356,25 @@ class IncludeTagTest < Minitest::Test
|
|||||||
partials: { 'break' => "{% break %}" },
|
partials: { 'break' => "{% break %}" },
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_render_tag_renders_error_with_template_name
|
||||||
|
assert_template_result(
|
||||||
|
'Liquid error (foo line 1): standard error',
|
||||||
|
"{% include 'foo' with errors %}",
|
||||||
|
{ 'errors' => ErrorDrop.new },
|
||||||
|
partials: { 'foo' => '{{ foo.standard_error }}' },
|
||||||
|
render_errors: true,
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_render_tag_renders_error_with_template_name_from_template_factory
|
||||||
|
assert_template_result(
|
||||||
|
'Liquid error (some/path/foo line 1): standard error',
|
||||||
|
"{% include 'foo' with errors %}",
|
||||||
|
{ 'errors' => ErrorDrop.new },
|
||||||
|
partials: { 'foo' => '{{ foo.standard_error }}' },
|
||||||
|
template_factory: StubTemplateFactory.new,
|
||||||
|
render_errors: true,
|
||||||
|
)
|
||||||
|
end
|
||||||
end # IncludeTagTest
|
end # IncludeTagTest
|
||||||
|
|||||||
@@ -264,4 +264,25 @@ class RenderTagTest < Minitest::Test
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_render_tag_renders_error_with_template_name
|
||||||
|
assert_template_result(
|
||||||
|
'Liquid error (foo line 1): standard error',
|
||||||
|
"{% render 'foo' with errors %}",
|
||||||
|
{ 'errors' => ErrorDrop.new },
|
||||||
|
partials: { 'foo' => '{{ foo.standard_error }}' },
|
||||||
|
render_errors: true,
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_render_tag_renders_error_with_template_name_from_template_factory
|
||||||
|
assert_template_result(
|
||||||
|
'Liquid error (some/path/foo line 1): standard error',
|
||||||
|
"{% render 'foo' with errors %}",
|
||||||
|
{ 'errors' => ErrorDrop.new },
|
||||||
|
partials: { 'foo' => '{{ foo.standard_error }}' },
|
||||||
|
template_factory: StubTemplateFactory.new,
|
||||||
|
render_errors: true,
|
||||||
|
)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
+7
-4
@@ -39,11 +39,12 @@ module Minitest
|
|||||||
|
|
||||||
def assert_template_result(
|
def assert_template_result(
|
||||||
expected, template, assigns = {},
|
expected, template, assigns = {},
|
||||||
message: nil, partials: nil, error_mode: nil, render_errors: false
|
message: nil, partials: nil, error_mode: nil, render_errors: false,
|
||||||
|
template_factory: nil
|
||||||
)
|
)
|
||||||
template = Liquid::Template.parse(template, line_numbers: true, error_mode: error_mode&.to_sym)
|
template = Liquid::Template.parse(template, line_numbers: true, error_mode: error_mode&.to_sym)
|
||||||
file_system = StubFileSystem.new(partials || {})
|
file_system = StubFileSystem.new(partials || {})
|
||||||
registers = Liquid::Registers.new(file_system: file_system)
|
registers = Liquid::Registers.new(file_system: file_system, template_factory: template_factory)
|
||||||
context = Liquid::Context.build(static_environments: assigns, rethrow_errors: !render_errors, registers: registers)
|
context = Liquid::Context.build(static_environments: assigns, rethrow_errors: !render_errors, registers: registers)
|
||||||
output = template.render(context)
|
output = template.render(context)
|
||||||
assert_equal(expected, output, message)
|
assert_equal(expected, output, message)
|
||||||
@@ -209,8 +210,10 @@ class StubTemplateFactory
|
|||||||
@count = 0
|
@count = 0
|
||||||
end
|
end
|
||||||
|
|
||||||
def for(_template_name)
|
def for(template_name)
|
||||||
@count += 1
|
@count += 1
|
||||||
Liquid::Template.new
|
template = Liquid::Template.new
|
||||||
|
template.name = "some/path/" + template_name
|
||||||
|
template
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -156,4 +156,22 @@ class PartialCacheUnitTest < Minitest::Test
|
|||||||
|
|
||||||
assert_equal(1, shared_file_system.file_read_count)
|
assert_equal(1, shared_file_system.file_read_count)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_uses_template_name_from_template_factory
|
||||||
|
template_factory = StubTemplateFactory.new
|
||||||
|
context = Liquid::Context.build(
|
||||||
|
registers: {
|
||||||
|
file_system: StubFileSystem.new('my_partial' => 'my partial body'),
|
||||||
|
template_factory: template_factory,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
partial = Liquid::PartialCache.load(
|
||||||
|
'my_partial',
|
||||||
|
context: context,
|
||||||
|
parse_context: Liquid::ParseContext.new,
|
||||||
|
)
|
||||||
|
|
||||||
|
assert_equal('some/path/my_partial', partial.name)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user