Sha256: ca48d93016f1a49c07e44c50463083d0f333ac81c1d86222b86a9db6b1ed582d

Contents?: true

Size: 1.61 KB

Versions: 1

Compression:

Stored size: 1.61 KB

Contents

# rrrretry

Because `retry` was already taken.

## Install

In your `Gemfile` add:

    gem 'rrrretry'

Then run `bundle install`.

## What Does it Do?

Monkey patches Enumerable to add a method called `retry` that attempts to run code for every element, returns the first valid run.

If code does not return, the original error will be raised.

## Whoa Crazy! Give me an example:

Most people will use it for network communication like this:

```ruby
10.times.retry do
  SomeNetworkCommunicationThingyHere.new
end
```

But if you prefer runnable examples check these out:

First run returns a `divided by 0` error, so the next result is returned.

```ruby
[0, 1, 2].each.retry { |i| 1/i }
  # => 1
```

If there are no valid returns, the last error will be raised.

```ruby
[0, 1, 2].each.retry { raise "bar" }
  # => RuntimeError: bar
```

By default only `StandardError` is caught, multiple error types can be
specified.

```ruby
array = [->{ raise Exception }, ->{ raise SignalException }, ->{ 1 }]
array.each.retry(Exception, SignalException) { |i| i.call }
  # => 1
```

## Is it Complex?

Naw, it's 8 lines of ruby:

```ruby
def retry(*exceptions, &block)
  exceptions << StandardError if exceptions.empty?
  enum       ||= self.to_enum
  yield enum.next
rescue *exceptions => e
  last_exception = e and retry unless e.is_a? StopIteration
  raise last_exception unless last_exception.nil?
end
```

## Why?

Because I needed this code in more than one project, I didn't like the other solutions, and because coding is fun.

## Isn't Monkey Patching Evil?

Yes. Do as I say, not as I do.

## License

MIT YO. See MIT-LICENSE for more info

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rrrretry-0.0.1 README.md