class Lightspeed::RequestThrottler

Attributes

bucket_level[RW]
bucket_max[RW]
units_per_second[RW]

Public Class Methods

new() click to toggle source
# File lib/lightspeed/request_throttler.rb, line 7
def initialize
  @units_per_second = 0.5
  @bucket_max = Float::INFINITY
  @bucket_level = 0
end

Public Instance Methods

perform_request(request) click to toggle source
# File lib/lightspeed/request_throttler.rb, line 13
def perform_request request
  u = units request
  sleep(u / @units_per_second) if @bucket_level + u > @bucket_max
  response = request.perform
  extract_rate_limits request
  response
end

Private Instance Methods

extract_rate_limits(request) click to toggle source
# File lib/lightspeed/request_throttler.rb, line 27
def extract_rate_limits request
  @bucket_max, @bucket_level = request.bucket_max, request.bucket_level
  @units_per_second = @bucket_max/60.0
end
units(request) click to toggle source
# File lib/lightspeed/request_throttler.rb, line 23
def units request
  if request.raw_request.is_a? Net::HTTP::Get then 1 else 10 end
end