Method: ASIR::RetryBehavior#with_retry
- Defined in:
- lib/asir/retry_behavior.rb
#with_retry ⇒ Object
Yields:
:try, n_try
:rescue, exc
:retry, exc
:failed, nil
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/asir/retry_behavior.rb', line 19 def with_retry n_try = 0 sleep_secs = try_sleep result = done = last_exception = nil begin n_try += 1 result = yield :try, n_try done = true rescue *Error::Unforwardable.unforwardable => exc raise rescue ::Exception => exc last_exception = exc yield :rescue, exc if ! try_max || try_max > n_try yield :retry, exc if sleep_secs sleep sleep_secs if sleep_secs > 0 sleep_secs += try_sleep_increment if try_sleep_increment sleep_secs = try_sleep_max if try_sleep_max && sleep_secs > try_sleep_max end retry end end unless done unless yield :failed, last_exception exc = last_exception raise RetryError, "Retry failed: #{exc.inspect}", exc.backtrace end end result end |