mirror of
https://github.com/Shopify/liquid.git
synced 2026-10-03 00:55:11 -07:00
render error message with actual template path
This commit is contained in:
@@ -70,9 +70,15 @@ 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 = if Template.file_system.respond_to?(:actual_template_name)
|
||||||
context.partial = true
|
Template.file_system.actual_template_name(template_name).delete_suffix('.liquid')
|
||||||
|
else
|
||||||
|
template_name
|
||||||
|
end
|
||||||
|
|
||||||
|
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,13 @@ 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 = if Template.file_system.respond_to?(:actual_template_name)
|
||||||
|
Template.file_system.actual_template_name(template_name).delete_suffix('.liquid')
|
||||||
|
else
|
||||||
|
template_name
|
||||||
|
end
|
||||||
|
|
||||||
inner_context.partial = true
|
inner_context.partial = true
|
||||||
inner_context['forloop'] = forloop if forloop
|
inner_context['forloop'] = forloop if forloop
|
||||||
|
|
||||||
|
|||||||
@@ -356,4 +356,17 @@ class IncludeTagTest < Minitest::Test
|
|||||||
partials: { 'break' => "{% break %}" },
|
partials: { 'break' => "{% break %}" },
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_include_tag_renders_actual_template_name_for_error
|
||||||
|
original_file_system = Liquid::Template.file_system
|
||||||
|
|
||||||
|
Liquid::Template.file_system = MemoryFileSystem.new(
|
||||||
|
'/some/path/snippets/foo.liquid' => "{{ foo.standard_error }}",
|
||||||
|
)
|
||||||
|
|
||||||
|
template = Liquid::Template.parse("{% include 'foo' with errors %}", line_numbers: true)
|
||||||
|
assert_equal('Liquid error (/some/path/snippets/foo line 1): standard error', template.render('errors' => ErrorDrop.new))
|
||||||
|
ensure
|
||||||
|
Liquid::Template.file_system = original_file_system
|
||||||
|
end
|
||||||
end # IncludeTagTest
|
end # IncludeTagTest
|
||||||
|
|||||||
@@ -264,4 +264,17 @@ class RenderTagTest < Minitest::Test
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_render_tag_renders_actual_template_name_for_error
|
||||||
|
original_file_system = Liquid::Template.file_system
|
||||||
|
|
||||||
|
Liquid::Template.file_system = MemoryFileSystem.new(
|
||||||
|
'/some/path/snippets/foo.liquid' => "{{ foo.standard_error }}",
|
||||||
|
)
|
||||||
|
|
||||||
|
template = Liquid::Template.parse("{% render 'foo' with errors %}", line_numbers: true)
|
||||||
|
assert_equal('Liquid error (/some/path/snippets/foo line 1): standard error', template.render('errors' => ErrorDrop.new))
|
||||||
|
ensure
|
||||||
|
Liquid::Template.file_system = original_file_system
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -214,3 +214,25 @@ class StubTemplateFactory
|
|||||||
Liquid::Template.new
|
Liquid::Template.new
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
class MemoryFileSystem
|
||||||
|
def initialize(values)
|
||||||
|
# values is a hash of template_path => template_source
|
||||||
|
@snippets = {}
|
||||||
|
values.each do |file_path, source|
|
||||||
|
key = file_path.split('/').last.delete_suffix(".liquid")
|
||||||
|
@snippets[key] = {
|
||||||
|
source: source,
|
||||||
|
actual_template_name: file_path,
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def read_template_file(template_name)
|
||||||
|
@snippets[template_name][:source]
|
||||||
|
end
|
||||||
|
|
||||||
|
def actual_template_name(template_name)
|
||||||
|
@snippets[template_name][:actual_template_name]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user