mirror of
https://github.com/Shopify/liquid.git
synced 2026-09-29 15:15:19 -07:00
Compare commits
21
Commits
@@ -1,5 +1,14 @@
|
||||
# Liquid Change Log
|
||||
|
||||
## 5.10.0
|
||||
* Introduce support for Inline Snippets [Julia Boutin]
|
||||
```
|
||||
{%- snippet snowdevil -%}
|
||||
Snowdevil
|
||||
{%- endsnippet -%}
|
||||
{% render snowdevil %}
|
||||
```
|
||||
|
||||
## 5.9.0
|
||||
* Introduce `:rigid` error mode for stricter, safer parsing of all tags [CP Clermont, Guilherme Carreiro]
|
||||
|
||||
|
||||
@@ -2,13 +2,13 @@
|
||||
|
||||
module Liquid
|
||||
class SnippetDrop < Drop
|
||||
attr_reader :body, :name, :parent_name
|
||||
attr_reader :body, :name, :filename
|
||||
|
||||
def initialize(body, name, parent_name)
|
||||
def initialize(body, name, filename)
|
||||
super()
|
||||
@body = body
|
||||
@name = name
|
||||
@parent_name = parent_name
|
||||
@filename = filename
|
||||
end
|
||||
|
||||
def to_partial
|
||||
|
||||
@@ -51,16 +51,14 @@ module Liquid
|
||||
|
||||
if template.respond_to?(:to_partial)
|
||||
partial = template.to_partial
|
||||
template_name = template.parent_name
|
||||
context_variable_name = @alias_name || template.name.split('/').last
|
||||
|
||||
template_name = template.filename
|
||||
context_variable_name = @alias_name || template.name
|
||||
elsif @template_name_expr.is_a?(String)
|
||||
partial = PartialCache.load(template, context: context, parse_context: parse_context)
|
||||
template_name = partial.name
|
||||
context_variable_name = @alias_name || template_name.split('/').last
|
||||
|
||||
else
|
||||
raise ::ArgumentError, parse_context.locale.t("errors.argument.render")
|
||||
raise ::ArgumentError
|
||||
end
|
||||
|
||||
render_partial_func = ->(var, forloop) {
|
||||
|
||||
@@ -2,5 +2,5 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Liquid
|
||||
VERSION = "5.8.7"
|
||||
VERSION = "5.10.0"
|
||||
end
|
||||
|
||||
@@ -101,13 +101,6 @@ class RenderTagTest < Minitest::Test
|
||||
end
|
||||
end
|
||||
|
||||
def test_dynamically_chosen_templates_are_not_allowed
|
||||
error = assert_raises(::ArgumentError) do
|
||||
Template.parse('{% assign name = "snippet" %}{% render name %}').render!
|
||||
end
|
||||
assert_equal("Argument error in tag 'render' - Dynamically chosen templates are not allowed", error.message)
|
||||
end
|
||||
|
||||
def test_rigid_parsing_errors
|
||||
with_error_modes(:lax, :strict) do
|
||||
assert_template_result(
|
||||
|
||||
@@ -482,39 +482,51 @@ class SnippetTest < Minitest::Test
|
||||
end
|
||||
|
||||
def test_render_with_non_existent_tag
|
||||
template = <<-LIQUID
|
||||
template = Liquid::Template.parse(<<~LIQUID.chomp, line_numbers: true)
|
||||
{% snippet foo %}
|
||||
Hello,
|
||||
|
||||
{{ errors.standard_error }} will raise a standard error.
|
||||
|
||||
Bla bla test.
|
||||
|
||||
{{ errors.syntax_error }} will raise a syntax error.
|
||||
|
||||
This is an argument error: {{ errors.argument_error }}
|
||||
|
||||
Bla.
|
||||
{% render non_existent %}
|
||||
{% endsnippet %}
|
||||
{%- render foo -%}
|
||||
|
||||
{% render foo %}
|
||||
LIQUID
|
||||
|
||||
expected = <<-TEXT
|
||||
Hello,
|
||||
expected = <<~TEXT
|
||||
|
||||
Liquid error (line 3): standard error will raise a standard error.
|
||||
|
||||
|
||||
Liquid error (index line 2): internal
|
||||
TEXT
|
||||
template.name = "index"
|
||||
|
||||
assert_equal(expected, template.render('errors' => ErrorDrop.new))
|
||||
end
|
||||
|
||||
def test_render_handles_errors
|
||||
template = Liquid::Template.parse(<<~LIQUID.chomp, line_numbers: true)
|
||||
{% snippet foo %}
|
||||
{% render non_existent %} will raise an error.
|
||||
|
||||
Bla bla test.
|
||||
|
||||
Liquid syntax error (line 7): syntax error will raise a syntax error.
|
||||
This is an argument error: {{ 'test' | slice: 'not a number' }}
|
||||
{% endsnippet %}
|
||||
|
||||
This is an argument error: Liquid error (line 9): argument error
|
||||
{% render foo %}
|
||||
LIQUID
|
||||
|
||||
Bla.
|
||||
expected = <<~TEXT
|
||||
|
||||
|
||||
|
||||
Liquid error (index line 2): internal will raise an error.
|
||||
|
||||
Bla bla test.
|
||||
|
||||
This is an argument error: Liquid error (index line 6): invalid integer
|
||||
TEXT
|
||||
template.name = "index"
|
||||
|
||||
output = Liquid::Template.parse(template, line_numbers: true).render('errors' => ErrorDrop.new)
|
||||
assert_equal(expected, output)
|
||||
assert_equal(expected, template.render('errors' => ErrorDrop.new))
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1005,8 +1017,37 @@ class SnippetTest < Minitest::Test
|
||||
|
||||
|
||||
|
||||
Liquid error (foo line 2): No such template 'non_existent'
|
||||
Liquid error (index line 2): internal
|
||||
TEXT
|
||||
template.name = "index"
|
||||
|
||||
assert_equal(expected, template.render('errors' => ErrorDrop.new))
|
||||
end
|
||||
|
||||
def test_render_handles_errors
|
||||
template = Liquid::Template.parse(<<~LIQUID.chomp, line_numbers: true, error_mode: :rigid)
|
||||
{% snippet foo %}
|
||||
{% render non_existent %} will raise an error.
|
||||
|
||||
Bla bla test.
|
||||
|
||||
This is an argument error: {{ 'test' | slice: 'not a number' }}
|
||||
{% endsnippet %}
|
||||
|
||||
{% render foo %}
|
||||
LIQUID
|
||||
|
||||
expected = <<~TEXT
|
||||
|
||||
|
||||
|
||||
Liquid error (index line 2): internal will raise an error.
|
||||
|
||||
Bla bla test.
|
||||
|
||||
This is an argument error: Liquid error (index line 6): invalid integer
|
||||
TEXT
|
||||
template.name = "index"
|
||||
|
||||
assert_equal(expected, template.render('errors' => ErrorDrop.new))
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user