Class: Spidy::Connector::RetryableCaller
- Inherits:
-
Object
- Object
- Spidy::Connector::RetryableCaller
- Defined in:
- lib/spidy/connector.rb
Overview
retry
Instance Attribute Summary collapse
-
#logger ⇒ Object
readonly
Returns the value of attribute logger.
-
#origin_connector ⇒ Object
readonly
Returns the value of attribute origin_connector.
-
#wait_time ⇒ Object
readonly
Returns the value of attribute wait_time.
Instance Method Summary collapse
- #call(url, &block) ⇒ Object
- #connect(url, retry_attempt_count: @retry_attempt_count) ⇒ Object
-
#initialize(connector, logger:, wait_time:, retry_attempt_count: 5) ⇒ RetryableCaller
constructor
A new instance of RetryableCaller.
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
#logger ⇒ Object (readonly)
Returns the value of attribute logger.
63 64 65 |
# File 'lib/spidy/connector.rb', line 63 def logger @logger end |
#origin_connector ⇒ Object (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_time ⇒ Object (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 |