Sha256: a8b6bb0d7e0c6379244583835750da5def110051e288c9e432e0841156cdfebf

Contents?: true

Size: 1.1 KB

Versions: 20

Compression:

Stored size: 1.1 KB

Contents

require 'asir/transport/delegation'
require 'asir/retry_behavior'

module ASIR
  class Transport
    # !SLIDE
    # Retry Transport
    class Retry < self
      include Delegation, RetryBehavior

      # The transport to delegate to.
      attr_accessor :transport
      # Proc to call(transport, message) before retry.
      attr_accessor :before_retry

      def _send_message message, message_payload
        first_exception = nil
        with_retry do | action, data |
          case action
          when :try
            transport.send_message(message)
          when :rescue #, exc
            first_exception ||= data
            _handle_send_message_exception! transport, message, data
          when :retry #, exc
            before_retry.call(self, message) if before_retry
          when :failed
            @on_failed_message.call(self, message) if @on_failed_message
            if first_exception && @reraise_first_exception
              $! = first_exception
              raise
            end
            nil # fallback to raise RetryError
          end
        end
      end
    end
    # !SLIDE END
  end
end

Version data entries

20 entries across 20 versions & 1 rubygems

Version Path
asir-1.1.12 lib/asir/transport/retry.rb
asir-1.1.11 lib/asir/transport/retry.rb
asir-1.1.10 lib/asir/transport/retry.rb
asir-1.1.9 lib/asir/transport/retry.rb
asir-1.1.8 lib/asir/transport/retry.rb
asir-1.1.7 lib/asir/transport/retry.rb
asir-1.1.6 lib/asir/transport/retry.rb
asir-1.1.5 lib/asir/transport/retry.rb
asir-1.1.4 lib/asir/transport/retry.rb
asir-1.1.3 lib/asir/transport/retry.rb
asir-1.1.2 lib/asir/transport/retry.rb
asir-1.1.1 lib/asir/transport/retry.rb
asir-1.1.0 lib/asir/transport/retry.rb
asir-1.0.8 lib/asir/transport/retry.rb
asir-1.0.7 lib/asir/transport/retry.rb
asir-1.0.6 lib/asir/transport/retry.rb
asir-1.0.5 lib/asir/transport/retry.rb
asir-1.0.4 lib/asir/transport/retry.rb
asir-1.0.1 lib/asir/transport/retry.rb
asir-0.2.0 lib/asir/transport/retry.rb