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