Class: FaradayMiddleware::Request::RetryUtil

Inherits:
Object
  • Object
show all
Defined in:
lib/faraday_middleware-request-retry/retry.rb

Overview

Standalone HTTP request retry utility class Can be used outside of FaradayMiddleware, e.g. when Faraday::UploadIO is used

Constant Summary collapse

DEFAULT_ERROR_CODES =
[429, 503].freeze
DEFAULT_RETRY_AFTER =
10

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(opts = {}) ⇒ RetryUtil

Returns a new instance of RetryUtil.



42
43
44
45
46
# File 'lib/faraday_middleware-request-retry/retry.rb', line 42

def initialize(opts = {})
  @error_codes = opts[:error_codes] || DEFAULT_ERROR_CODES
  @retry_after = opts[:retry_after] || DEFAULT_RETRY_AFTER
  @logger = opts[:logger]
end

Instance Attribute Details

#error_codesObject

Returns the value of attribute error_codes.



39
40
41
# File 'lib/faraday_middleware-request-retry/retry.rb', line 39

def error_codes
  @error_codes
end

#retry_afterObject

Returns the value of attribute retry_after.



40
41
42
# File 'lib/faraday_middleware-request-retry/retry.rb', line 40

def retry_after
  @retry_after
end

Instance Method Details

#retry_status(status, this_retry_after = nil) ⇒ Object



48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/faraday_middleware-request-retry/retry.rb', line 48

def retry_status(status, this_retry_after = nil)
  return false unless @error_codes.include? status
  seconds_left = (this_retry_after || @retry_after).to_i
  @logger.warn "You have been rate limited. Retrying in #{seconds_left} seconds..." if @logger
  seconds_left.times do |i|
    sleep 1
    time_left = seconds_left - i
    @logger.warn "#{time_left}..." if time_left > 0 && time_left % 5 == 0 && @logger
  end
  @logger.warn 'Retrying...' if @logger
  true
end