README.md in take2-0.0.1 vs README.md in take2-0.0.2

- old
+ new

@@ -1,81 +1,162 @@ -# Work in process +## Take2 +# +Define rules for retrying behavior. +Yield block of code into the public api of the take2. +Things getting take two :) + +## Install +# +``` +gem install take2 +``` +## Examples +# +``` +class KratosService + include Take2 + + + number_of_retries 3 + + # Could be configured globally or on class level. + retriable_errors Net::HTTPRetriableError, Net::HTTPServerError + + # 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})" } + + sleep_before_retry 3.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 + + raise Net::HTTPRetriableError.new 'Release the Kraken...many times!!', nil + end + end + +end + +KratosService.new.call_boy => +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 + +``` + +## Configurations +#### could be implemented as rails initializer +# +``` +# config/initializers/take2.rb + +Take2.configure do |config| + config.retries = 3 + config.retriable = [ + Net::HTTPServerError, + Net::HTTPServerException, + 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"} +end +``` \ No newline at end of file