Class: Spidy::Connector::RetryableCaller

Inherits:
Object
  • Object
show all
Defined in:
lib/spidy/connector.rb

Overview

retry

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(connector, logger:, wait_time:, retry_attempt_count: 5) ⇒ RetryableCaller

Returns a new instance of RetryableCaller.



65
66
67
68
69
70
# File 'lib/spidy/connector.rb', line 65

def initialize(connector, logger:, wait_time:, retry_attempt_count: 5)
  @origin_connector = connector
  @logger = logger
  @wait_time = wait_time
  @retry_attempt_count = retry_attempt_count
end

Instance Attribute Details

#loggerObject (readonly)

Returns the value of attribute logger.



63
64
65
# File 'lib/spidy/connector.rb', line 63

def logger
  @logger
end

#origin_connectorObject (readonly)

Returns the value of attribute origin_connector.



63
64
65
# File 'lib/spidy/connector.rb', line 63

def origin_connector
  @origin_connector
end

#wait_timeObject (readonly)

Returns the value of attribute wait_time.



63
64
65
# File 'lib/spidy/connector.rb', line 63

def wait_time
  @wait_time
end

Instance Method Details

#call(url, &block) ⇒ Object



72
73
74
75
# File 'lib/spidy/connector.rb', line 72

def call(url, &block)
  block ||= ->(result) { break result }
  connect(url, &block)
end

#connect(url, retry_attempt_count: @retry_attempt_count) ⇒ Object



77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/spidy/connector.rb', line 77

def connect(url, retry_attempt_count: @retry_attempt_count, &)
  logger.call('connnector.get': url, 'connnector.accessed': Time.current)
  origin_connector.call(url, &)
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