Sha256: 9502b3e0661e36d217dc263db77cfbfd1868e40c3beb1208fcb6e46a48b33d18

Contents?: true

Size: 865 Bytes

Versions: 3

Compression:

Stored size: 865 Bytes

Contents

class Waiter
  def initialize(message = nil)
    @message = message || 'Waiting'
  end

  attr_accessor :message

  def wait(sleep_time)
    while sleep_time > 0
      wait_time = [10, sleep_time].min
      puts "#{message} (#{sleep_time}s left)" if wait_time > 1
      sleep(wait_time)
      sleep_time -= wait_time
    end
  end
end

class RateLimitWaiter < Waiter
  def initialize(provider)
    super("Waiting on #{provider} rate-limit")
  end
end

class BackoffWaiter < Waiter
  def initialize(message, initial_delay:, multiplier:, max_delay: nil)
    super(message)

    @initial_delay = @current_delay = initial_delay
    @multiplier = multiplier
    @max_delay = max_delay
  end

  def reset
    @current_delay = @initial_delay
  end

  def wait
    super(@current_delay)
    @current_delay = [@current_delay * @multiplier, @max_delay].compact.min
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
record_store-6.3.0 lib/record_store/provider/provider_utils/waiter.rb
record_store-6.2.1 lib/record_store/provider/provider_utils/waiter.rb
record_store-6.2.0 lib/record_store/provider/provider_utils/waiter.rb