class RateThrottleClient::ExponentialIncreaseProportionalDecrease

Attributes

decrease_divisor[RW]

Public Class Methods

new(*args, decrease_divisor: nil, **kargs) click to toggle source
Calls superclass method RateThrottleClient::Base::new
# File lib/rate_throttle_client/clients/exponential_increase_proportional_decrease.rb, line 5
def initialize(*args, decrease_divisor: nil, **kargs)
  super(*args, **kargs)
  @decrease_divisor = (decrease_divisor || RateThrottleClient.max_limit).to_f
end

Public Instance Methods

call(&block) click to toggle source
# File lib/rate_throttle_client/clients/exponential_increase_proportional_decrease.rb, line 10
def call(&block)
  sleep_for = @sleep_for
  sleep(sleep_for + jitter(sleep_for))

  while (req = yield) && req.status == 429
    sleep_for += @min_sleep

    @log.call(Info.new(sleep_for: sleep_for, request: req))
    sleep(sleep_for + jitter(sleep_for))

    sleep_for *= @multiplier
  end

  decrease_value = sleep_for / @decrease_divisor

  if sleep_for >= decrease_value
    sleep_for -= decrease_value
  else
    sleep_for = 0
  end

  @sleep_for = sleep_for

  req
end