Giter VIP home page Giter VIP logo

retryable's Introduction

retryable gem

travis-ci

Description

Runs a code block, and retries it when an exception occurs. It's great when working with flakey webservices (for example).

It's configured using four optional parameters --:tries, :on, :sleep, :matching--, and runs the passed block. Should an exception occur, it'll retry for (n-1) times.

Should the number of retries be reached without success, the last exception will be raised.

Examples

Open an URL, retry up to two times when an OpenURI::HTTPError occurs.

require "retryable"
require "open-uri"

retryable( :tries => 3, :on => OpenURI::HTTPError ) do
  xml = open( "http://example.com/test.xml" ).read
end

Do something, retry up to four times for either ArgumentError or TimeoutError exceptions.

require "retryable"

retryable( :tries => 5, :on => [ ArgumentError, TimeoutError ] ) do
  # some crazy code
end

Defaults

:tries => 2, :on => StandardError, :sleep => 1, :matching  => /.*/ 

Sleeping

By default Retryable waits for one second between retries. You can change this and even provide your own exponential backoff scheme.

retryable(:sleep => 0) { }                # don't pause at all between retries
retryable(:sleep => 10) { }               # sleep ten seconds between retries
retryable(:sleep => lambda { |n| 4**n }) { }   # sleep 1, 4, 16, etc. each try

Matching error messages

You can also retry based on the exception message:

retryable(:matching => /IO timeout/) do |retries, exception|
  raise "yo, IO timeout!" if retries == 0
end

Block Parameters

Your block is called with two optional parameters: the number of tries until now, and the most recent exception.

retryable do |retries, exception|
  puts "try #{retries} failed with exception: #{exception}" if retries > 0
  pick_up_soap
end

Installation

Install the gem:

$ gem install retryable

Add it to your Gemfile:

gem 'retryable'

Changelog

  • v1.3.0: StandardError is now default exception for rescuing.
  • v1.2.5: became friendly to any rubygems version installed
  • v1.2.4: added :matching option + better options validation
  • v1.2.3: fixed dependencies
  • v1.2.2: added :sleep option
  • v1.2.1: stability -- Thoroughly unit-tested
  • v1.2: FIX -- block would run twice when :tries was set to 0. (Thanks for the heads-up to Tuker.)

Thanks

Chu Yeow for this nifty piece of code Scott Bronson

retryable's People

Stargazers

 avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.