Sha256: 0e4b91d3d9c723c7d9829e689f721be2470f80469ddff60a16bfb9abd6e476bd
Contents?: true
Size: 841 Bytes
Versions: 1
Compression:
Stored size: 841 Bytes
Contents
module Retryable extend self def retryable(options = {}) opts = {:on => Exception, :times => 1, :sleep => 0.1}.merge(options) handler = {} retry_exception = opts[:on].is_a?(Array) ? opts[:on] : [opts[:on]] times = retries = opts[:times] attempts = 0 begin attempts += 1 return yield(handler) rescue *retry_exception => exception opts[:then].call(exception, handler, attempts, retries, times) if opts[:then] if attempts <= times sleep opts[:sleep] retries -= 1 retry else opts[:finally].call(exception, handler, attempts, retries, times) if opts[:finally] raise exception end ensure opts[:always].call(handler, attempts, retries, times) if opts[:always] end yield(handler) end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
retryable-rb-1.0.0 | lib/retryable.rb |