class Liquid::ResourceLimits
Attributes
Public Class Methods
Source
# File lib/liquid/resource_limits.rb, line 8 def initialize(limits) @render_length_limit = limits[:render_length_limit] @render_score_limit = limits[:render_score_limit] @assign_score_limit = limits[:assign_score_limit] reset end
Public Instance Methods
Source
# File lib/liquid/resource_limits.rb, line 20 def increment_assign_score(amount) @assign_score += amount raise_limits_reached if @assign_score_limit && @assign_score > @assign_score_limit end
Source
# File lib/liquid/resource_limits.rb, line 15 def increment_render_score(amount) @render_score += amount raise_limits_reached if @render_score_limit && @render_score > @render_score_limit end
Source
# File lib/liquid/resource_limits.rb, line 26 def increment_write_score(output) if (last_captured = @last_capture_length) captured = output.bytesize increment = captured - last_captured @last_capture_length = captured increment_assign_score(increment) elsif @render_length_limit && output.bytesize > @render_length_limit raise_limits_reached end end
update either render_length or assign_score
based on whether or not the writes are captured
Source
# File lib/liquid/resource_limits.rb, line 37 def raise_limits_reached @reached_limit = true raise MemoryError, "Memory limits exceeded" end
Source
# File lib/liquid/resource_limits.rb, line 46 def reset @reached_limit = false @last_capture_length = nil @render_score = @assign_score = 0 end
Source
# File lib/liquid/resource_limits.rb, line 52 def with_capture old_capture_length = @last_capture_length begin @last_capture_length = 0 yield ensure @last_capture_length = old_capture_length end end