# File lib/attempt.rb, line 77
  def attempt
    count = 1
    begin
      if @timeout
        SafeTimeout.timeout(@timeout){ yield }
      else
        yield
      end
    rescue @level => error
      @tries -= 1
      if @tries > 0
        msg = "Error on attempt # #{count}: #{error}; retrying"
        count += 1
        warn Warning, msg if @warnings

        if @log # Accept an IO or Logger object
          @log.respond_to?(:puts) ? @log.puts(msg) : @log.warn(msg)
        end

        @interval += @increment if @increment
        sleep @interval
        retry
      end
      raise
    end
  end