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.



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

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.



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

def logger
  @logger
end

#origin_connectorObject (readonly)

Returns the value of attribute origin_connector.



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

def origin_connector
  @origin_connector
end

#wait_timeObject (readonly)

Returns the value of attribute wait_time.



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

def wait_time
  @wait_time
end

Instance Method Details

#call(url, &block) ⇒ Object



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

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

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



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

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