From 428c66ffacb8836f448196e5b397d98aa52a1bd1 Mon Sep 17 00:00:00 2001 From: Michael Go Date: Mon, 27 Feb 2023 16:12:40 -0400 Subject: [PATCH] add name attribute to Template for more flexibility to set context's template name --- lib/liquid/partial_cache.rb | 7 +++++++ lib/liquid/tags/include.rb | 6 +----- lib/liquid/tags/render.rb | 6 +----- lib/liquid/template.rb | 2 +- test/integration/tags/render_tag_test.rb | 6 ++++-- test/test_helper.rb | 2 +- 6 files changed, 15 insertions(+), 14 deletions(-) diff --git a/lib/liquid/partial_cache.rb b/lib/liquid/partial_cache.rb index 56e10805..7f94f76b 100644 --- a/lib/liquid/partial_cache.rb +++ b/lib/liquid/partial_cache.rb @@ -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 diff --git a/lib/liquid/tags/include.rb b/lib/liquid/tags/include.rb index d451a636..98f64fdb 100644 --- a/lib/liquid/tags/include.rb +++ b/lib/liquid/tags/include.rb @@ -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 diff --git a/lib/liquid/tags/render.rb b/lib/liquid/tags/render.rb index a29c3622..4f2dfafa 100644 --- a/lib/liquid/tags/render.rb +++ b/lib/liquid/tags/render.rb @@ -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 diff --git a/lib/liquid/template.rb b/lib/liquid/template.rb index 39bde833..e20ec1e0 100644 --- a/lib/liquid/template.rb +++ b/lib/liquid/template.rb @@ -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 diff --git a/test/integration/tags/render_tag_test.rb b/test/integration/tags/render_tag_test.rb index c26d2258..f24a5ef9 100644 --- a/test/integration/tags/render_tag_test.rb +++ b/test/integration/tags/render_tag_test.rb @@ -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 diff --git a/test/test_helper.rb b/test/test_helper.rb index ed55ec40..840b888a 100755 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -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