class Spidy::Connector::RetryableCaller

retry

Attributes

origin_connector[R]

Public Class Methods

new(connector, logger:, wait_time:) click to toggle source
# File lib/spidy/connector.rb, line 63
def initialize(connector, logger:, wait_time:)
  @origin_connector = connector
  @logger = logger
  @wait_time = wait_time
  @retry_attempt_count = 5
end

Public Instance Methods

call(url, &block) click to toggle source
# File lib/spidy/connector.rb, line 70
def call(url, &block)
  block ||= ->(result) { break result }
  connect(url, &block)
end
connect(url, retry_attempt_count: @retry_attempt_count, &block) click to toggle source
# File lib/spidy/connector.rb, line 75
def connect(url, retry_attempt_count: @retry_attempt_count, &block)
  @logger.call('connnector.get': url, 'connnector.accessed': Time.current)
  @origin_connector.call(url, &block)
rescue Spidy::Connector::Retry => e
  @logger.call('retry.accessed': Time.current,
               'retry.uri': url,
               'retry.response_code': e.response_code,
               'retry.attempt_count': retry_attempt_count)

  retry_attempt_count -= 1
  if retry_attempt_count.positive?
    sleep @wait_time
    @origin_connector.refresh! if @origin_connector.respond_to?(:refresh!)
    retry
  end
  raise e.error
end