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