class Liquid::ResourceLimits
Attributes
assign_score[R]
assign_score_limit[RW]
render_length_limit[RW]
render_score[R]
render_score_limit[RW]
Public Class Methods
new(limits)
click to toggle 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
increment_assign_score(amount)
click to toggle 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
increment_render_score(amount)
click to toggle 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
increment_write_score(output)
click to toggle source
update either render_length or assign_score
based on whether or not the writes are captured
# 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
raise_limits_reached()
click to toggle source
# File lib/liquid/resource_limits.rb, line 37 def raise_limits_reached @reached_limit = true raise MemoryError, "Memory limits exceeded" end
reached?()
click to toggle source
# File lib/liquid/resource_limits.rb, line 42 def reached? @reached_limit end
reset()
click to toggle source
# File lib/liquid/resource_limits.rb, line 46 def reset @reached_limit = false @last_capture_length = nil @render_score = @assign_score = 0 end
with_capture() { || ... }
click to toggle 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