Class: HalClient::Retryinator
- Inherits:
-
Object
- Object
- HalClient::Retryinator
- Defined in:
- lib/hal_client/retryinator.rb
Overview
Example usage: Retryinator.call { fetch_http_response }
Constant Summary collapse
- DEFAULT_MAX_TRIES =
3
- DEFAULT_DURATION =
1
Instance Attribute Summary collapse
-
#duration ⇒ Object
readonly
Returns the value of attribute duration.
-
#logger ⇒ Object
readonly
Returns the value of attribute logger.
-
#max_tries ⇒ Object
readonly
Returns the value of attribute max_tries.
Instance Method Summary collapse
-
#initialize(options = {}) ⇒ Retryinator
constructor
A new instance of Retryinator.
- #retryable(&block) ⇒ Object
- #server_error?(status_code) ⇒ Boolean
Constructor Details
#initialize(options = {}) ⇒ Retryinator
Returns a new instance of Retryinator.
19 20 21 22 23 |
# File 'lib/hal_client/retryinator.rb', line 19 def initialize(={}) @max_tries = .fetch(:max_tries, DEFAULT_MAX_TRIES) @duration = .fetch(:duration, DEFAULT_DURATION) @logger = .fetch(:logger, HalClient::NullLogger.new) end |
Instance Attribute Details
#duration ⇒ Object (readonly)
Returns the value of attribute duration.
14 15 16 |
# File 'lib/hal_client/retryinator.rb', line 14 def duration @duration end |
#logger ⇒ Object (readonly)
Returns the value of attribute logger.
14 15 16 |
# File 'lib/hal_client/retryinator.rb', line 14 def logger @logger end |
#max_tries ⇒ Object (readonly)
Returns the value of attribute max_tries.
14 15 16 |
# File 'lib/hal_client/retryinator.rb', line 14 def max_tries @max_tries end |
Instance Method Details
#retryable(&block) ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/hal_client/retryinator.rb', line 25 def retryable(&block) current_try = 1 loop do begin result = yield block if server_error?(result.code) logger.warn "Received a #{result.code} response with body:\n#{result.body}" return result if current_try >= max_tries else return result end rescue HttpError => e logger.warn "Encountered an HttpError: #{e.}" raise e if current_try >= max_tries end logger.warn "Failed attempt #{current_try} of #{max_tries}. " + "Waiting #{duration} seconds before retrying" current_try += 1 sleep duration end end |
#server_error?(status_code) ⇒ Boolean
51 52 53 |
# File 'lib/hal_client/retryinator.rb', line 51 def server_error?(status_code) 500 <= status_code && status_code < 600 end |