Module: Just

Defined in:
lib/just/retry.rb,
lib/just/retry/version.rb

Defined Under Namespace

Modules: Retry

Class Method Summary collapse

Class Method Details

.retry(opts = {}) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/just/retry.rb', line 4

def retry(opts={})
  opts = {delay: 0.0, on: StandardError, tries: 2}.merge(opts)
  delay, tries, exception, logger = opts[:delay], opts[:tries], opts[:on], opts[:logger]
  count = 0
  begin
    count += 1
    yield
  rescue exception => e
    if count < tries
      if logger
        logger.error "retry #{count} of #{tries - 1} on #{e.message}"
        logger.debug "rescued: #{e.class} - #{e.backtrace.first}"
      end
      if delay > 0.0
        sleep delay
      end
      retry
    else
      raise e
    end
  end
end