mirror of
https://github.com/Shopify/liquid.git
synced 2026-09-19 02:40:41 -07:00
Simplify interface for setting template resource limits
This commit is contained in:
@@ -21,12 +21,7 @@ module Liquid
|
|||||||
@scopes = [(outer_scope || {})]
|
@scopes = [(outer_scope || {})]
|
||||||
@registers = registers
|
@registers = registers
|
||||||
@errors = []
|
@errors = []
|
||||||
|
@resource_limits = resource_limits || ResourceLimits.new(Template.default_resource_limits)
|
||||||
@resource_limits = if resource_limits.is_a?(ResourceLimits)
|
|
||||||
resource_limits
|
|
||||||
else
|
|
||||||
ResourceLimits.new(resource_limits || Template.default_resource_limits)
|
|
||||||
end
|
|
||||||
squash_instance_assigns_with_environments
|
squash_instance_assigns_with_environments
|
||||||
|
|
||||||
@this_stack_used = false
|
@this_stack_used = false
|
||||||
|
|||||||
@@ -21,10 +21,6 @@ module Liquid
|
|||||||
attr_accessor :root
|
attr_accessor :root
|
||||||
attr_reader :resource_limits
|
attr_reader :resource_limits
|
||||||
|
|
||||||
def resource_limits=(limits)
|
|
||||||
@resource_limits = ResourceLimits.new(limits)
|
|
||||||
end
|
|
||||||
|
|
||||||
@@file_system = BlankFileSystem.new
|
@@file_system = BlankFileSystem.new
|
||||||
|
|
||||||
class TagRegistry
|
class TagRegistry
|
||||||
@@ -116,7 +112,7 @@ module Liquid
|
|||||||
end
|
end
|
||||||
|
|
||||||
def initialize
|
def initialize
|
||||||
self.resource_limits = self.class.default_resource_limits
|
@resource_limits = ResourceLimits.new(self.class.default_resource_limits)
|
||||||
end
|
end
|
||||||
|
|
||||||
# Parse source code.
|
# Parse source code.
|
||||||
|
|||||||
@@ -93,51 +93,54 @@ class TemplateTest < Minitest::Test
|
|||||||
|
|
||||||
def test_resource_limits_works_with_custom_length_method
|
def test_resource_limits_works_with_custom_length_method
|
||||||
t = Template.parse("{% assign foo = bar %}")
|
t = Template.parse("{% assign foo = bar %}")
|
||||||
t.resource_limits = { :render_length_limit => 42 }
|
t.resource_limits.render_length_limit = 42
|
||||||
assert_equal "", t.render!("bar" => SomethingWithLength.new)
|
assert_equal "", t.render!("bar" => SomethingWithLength.new)
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_resource_limits_render_length
|
def test_resource_limits_render_length
|
||||||
t = Template.parse("0123456789")
|
t = Template.parse("0123456789")
|
||||||
t.resource_limits = { :render_length_limit => 5 }
|
t.resource_limits.render_length_limit = 5
|
||||||
assert_equal "Liquid error: Memory limits exceeded", t.render()
|
assert_equal "Liquid error: Memory limits exceeded", t.render()
|
||||||
assert t.resource_limits.reached?
|
assert t.resource_limits.reached?
|
||||||
|
|
||||||
t.resource_limits = { :render_length_limit => 10 }
|
t.resource_limits.render_length_limit = 10
|
||||||
assert_equal "0123456789", t.render!()
|
assert_equal "0123456789", t.render!()
|
||||||
refute_nil t.resource_limits.render_length
|
refute_nil t.resource_limits.render_length
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_resource_limits_render_score
|
def test_resource_limits_render_score
|
||||||
t = Template.parse("{% for a in (1..10) %} {% for a in (1..10) %} foo {% endfor %} {% endfor %}")
|
t = Template.parse("{% for a in (1..10) %} {% for a in (1..10) %} foo {% endfor %} {% endfor %}")
|
||||||
t.resource_limits = { :render_score_limit => 50 }
|
t.resource_limits.render_score_limit = 50
|
||||||
assert_equal "Liquid error: Memory limits exceeded", t.render()
|
assert_equal "Liquid error: Memory limits exceeded", t.render()
|
||||||
assert t.resource_limits.reached?
|
assert t.resource_limits.reached?
|
||||||
|
|
||||||
t = Template.parse("{% for a in (1..100) %} foo {% endfor %}")
|
t = Template.parse("{% for a in (1..100) %} foo {% endfor %}")
|
||||||
t.resource_limits = { :render_score_limit => 50 }
|
t.resource_limits.render_score_limit = 50
|
||||||
assert_equal "Liquid error: Memory limits exceeded", t.render()
|
assert_equal "Liquid error: Memory limits exceeded", t.render()
|
||||||
assert t.resource_limits.reached?
|
assert t.resource_limits.reached?
|
||||||
|
|
||||||
t.resource_limits = { :render_score_limit => 200 }
|
t.resource_limits.render_score_limit = 200
|
||||||
assert_equal (" foo " * 100), t.render!()
|
assert_equal (" foo " * 100), t.render!()
|
||||||
refute_nil t.resource_limits.render_score
|
refute_nil t.resource_limits.render_score
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_resource_limits_assign_score
|
def test_resource_limits_assign_score
|
||||||
t = Template.parse("{% assign foo = 42 %}{% assign bar = 23 %}")
|
markup = "{% assign foo = 42 %}{% assign bar = 23 %}"
|
||||||
t.resource_limits = { :assign_score_limit => 1 }
|
|
||||||
|
t = Template.parse(markup)
|
||||||
|
t.resource_limits.assign_score_limit = 1
|
||||||
assert_equal "Liquid error: Memory limits exceeded", t.render()
|
assert_equal "Liquid error: Memory limits exceeded", t.render()
|
||||||
assert t.resource_limits.reached?
|
assert t.resource_limits.reached?
|
||||||
|
|
||||||
t.resource_limits = { :assign_score_limit => 2 }
|
t = Template.parse(markup)
|
||||||
|
t.resource_limits.assign_score_limit = 2
|
||||||
assert_equal "", t.render!()
|
assert_equal "", t.render!()
|
||||||
refute_nil t.resource_limits.assign_score
|
refute_nil t.resource_limits.assign_score
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_resource_limits_aborts_rendering_after_first_error
|
def test_resource_limits_aborts_rendering_after_first_error
|
||||||
t = Template.parse("{% for a in (1..100) %} foo1 {% endfor %} bar {% for a in (1..100) %} foo2 {% endfor %}")
|
t = Template.parse("{% for a in (1..100) %} foo1 {% endfor %} bar {% for a in (1..100) %} foo2 {% endfor %}")
|
||||||
t.resource_limits = { :render_score_limit => 50 }
|
t.resource_limits.render_score_limit = 50
|
||||||
assert_equal "Liquid error: Memory limits exceeded", t.render()
|
assert_equal "Liquid error: Memory limits exceeded", t.render()
|
||||||
assert t.resource_limits.reached?
|
assert t.resource_limits.reached?
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user