add name attribute to Template for more flexibility to set context's template name

This commit is contained in:
Michael Go
2023-02-27 17:11:52 -04:00
parent 0fe4a5d144
commit 428c66ffac
6 changed files with 15 additions and 14 deletions
+7
View File
@@ -16,6 +16,13 @@ module Liquid
template = template_factory.for(template_name)
partial = template.parse(source, parse_context)
partial.name ||= if context.registers[:file_system]&.respond_to?(:actual_template_name)
context.registers[:file_system].actual_template_name(template_name)
else
template_name
end
cached_partials[template_name] = partial
ensure
parse_context.partial = false
+1 -5
View File
@@ -72,11 +72,7 @@ module Liquid
old_partial = context.partial
begin
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
context.template_name = partial.name if partial.name
context.partial = true
context.stack do
+1 -5
View File
@@ -77,11 +77,7 @@ module Liquid
render_partial_func = ->(var, forloop) {
inner_context = context.new_isolated_subcontext
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.template_name = partial.name if partial.name
inner_context.partial = true
inner_context['forloop'] = forloop if forloop
+1 -1
View File
@@ -15,7 +15,7 @@ module Liquid
# template.render('user_name' => 'bob')
#
class Template
attr_accessor :root
attr_accessor :root, :name
attr_reader :resource_limits, :warnings
class TagRegistry
+4 -2
View File
@@ -268,12 +268,14 @@ class RenderTagTest < Minitest::Test
def test_render_tag_renders_actual_template_name_for_error
original_file_system = Liquid::Template.file_system
Liquid::Template.file_system = MemoryFileSystem.new(
context = Liquid::Context.new('errors' => ErrorDrop.new)
context.registers[: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))
assert_equal('Liquid error (/some/path/snippets/foo line 1): standard error', template.render(context))
ensure
Liquid::Template.file_system = original_file_system
end
+1 -1
View File
@@ -233,6 +233,6 @@ class MemoryFileSystem
end
def actual_template_name(template_name)
@snippets[template_name][:actual_template_name]
@snippets[template_name][:actual_template_name].delete_suffix(".liquid")
end
end