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