README.md in take2-0.1.1 vs README.md in take2-1.0.0
- old
+ new
@@ -1,80 +1,73 @@
## Take2
[![CircleCI](https://circleci.com/gh/restaurant-cheetah/take2/tree/master.svg?style=shield)](https://circleci.com/gh/restaurant-cheetah/take2/tree/master)
![Gem](https://img.shields.io/gem/dt/take2.svg)
![GitHub last commit](https://img.shields.io/github/last-commit/restaurant-cheetah/take2.svg)
![Gem](https://img.shields.io/gem/v/take2.svg)
-Define rules for retrying behavior.
-Yield block of code into the public api of the take2.
-Things getting take two :)
+1. Define rules for retrying behavior.
+2. Yield block of code into the with_retry method.
+3. Things getting take two :)
## Install
```ruby
gem install take2
```
## Examples
```ruby
-class KratosService
+class Service
include Take2
-
number_of_retries 3
-
+
# Could be configured globally or on class level.
- retriable_errors Net::HTTPRetriableError, Net::HTTPServerException
+ retriable_errors Net::HTTPRetriableError, Errno::ECONNRESET
# Retry unless the response status is 5xx. The implementation is dependent of the http lib in use.
retriable_condition proc { |error| error.response.code < 500 }
# Defines callable code to run before next retry. Could be an out put to some logger.
- on_retry proc { |error, tries| puts "#{self.name} - Retrying.. #{tries} of #{self.retriable_configuration[:retries]} (#{error})" }
-
- # The available strategies are:
+ on_retry proc { |error, tries| puts "#{name} - Retrying.. #{tries} of #{retriable_configuration[:retries]} (#{error})" }
+
+ # The available strategies are:
# type :constant, start: 2 => [2, 2, 2, 2 ... ]
# type :linear, start: 3, factor: 2 => [3, 6, 12, 24 ... ]
# type :fibonacci, start: 2 => [2, 3, 5, 8, 13 ... ]
- # type :exponential, start: 3 => [3, 7, 12, 28, 47 ... ]
+ # type :exponential, start: 3 => [3, 7, 12, 28, 47 ... ]
backoff_strategy type: :fibonacci, start: 3
- def call_boy
- call_api_with_retry do
- # Some logic that might raise..
- # If it will raise retriable, magic happens.
- # If not the original error re raised
+ class << self
+ def call
+ with_retry do
+ # Some logic that might raise..
+ # If it will raise retriable, magic happens.
+ # If not the original error re raised
- raise Net::HTTPRetriableError.new 'Release the Kraken...many times!!', nil
+ raise Net::HTTPRetriableError.new('Release the Kraken...many times!!', nil)
+ end
end
- end
- # Pass custom options per method call
- # The class defaults will not be overwritten
- def kill_baldur
- call_api_with_retry(retries: 2, retriable: [IOError], retry_proc: proc {}, retry_condition_proc: proc {}) do
- # Some logic that might raise..
+ # Pass custom options per method call
+ # The class defaults will not be overwritten
+ def read(file)
+ with_retry(retries: 2, retriable: [IOError], retry_proc: proc {}, retry_condition_proc: proc {}) do
+ # Some logic that might raise..
+ end
end
end
-
end
-KratosService.new.call_boy
+Service.call
#=> KratosService - Retrying.. 3 of 3 (Release the Kraken...many times!!)
#=> KratosService - Retrying.. 2 of 3 (Release the Kraken...many times!!)
#=> KratosService - Retrying.. 1 of 3 (Release the Kraken...many times!!)
# After the retrying is done, original error re-raised
#=> Net::HTTPRetriableError: Release the Kraken...many times!!
-# Not wrapping with method
-KratosService.new.call_api_with_retry { 1 / 0 }
-
-# Or..
-Class.new { include Take2 }.new.call_api_with_retry { 1 / 0 }
-
-
# Current configuration hash
-KratosService.retriable_configuration
+Service.retriable_configuration
```
## Configurations
#### could be implemented as rails initializer
@@ -82,17 +75,15 @@
```ruby
# config/initializers/take2.rb
Take2.configure do |config|
config.retries = 3
- config.retriable = [
- Net::HTTPServerException,
+ config.retriable = [
Net::HTTPRetriableError,
Errno::ECONNRESET,
IOError
].freeze
- config.retry_condition_proc = proc {false}
- config.time_to_sleep = nil
- config.retry_proc = proc {Rails.logger.info "Retry message"}
+ config.retry_condition_proc = proc { false }
+ config.retry_proc = proc { Rails.logger.info "Retry message" }
config.backoff_intervals = Take2::Backoff.new(:linear, 1).intervals
end
```
\ No newline at end of file