Sha256: 8c224d48eea6b8ffbb1abb420c0ffff707dbc341c7220ad9ca98a902480801e2

Contents?: true

Size: 1.79 KB

Versions: 17

Compression:

Stored size: 1.79 KB

Contents

module ASIR
  class Transport
    # !SLIDE
    # A Transport that delgated to one or more other Transports.
    #
    # Classes that include this must define #_send_message(message, message_payload).
    module Delegation
      # If true, reraise the first Exception that occurred during Transport#send_message.
      attr_accessor :reraise_first_exception

      # Proc to call(transport, message, exc) when a delegated #send_message fails.
      attr_accessor :on_send_message_exception

      # Proc to call(transport, message) when #send_message fails with no recourse.
      attr_accessor :on_failed_message

      # Return the subTransports#send_message result unmodified from #_send_message.
      def _receive_result message, opaque_result
        opaque_result
      end

      # Return the subTransports#send_message result unmodified from #_send_message.
      def receive_result message, opaque_result
        opaque_result
      end

      def needs_message_identifier? message
        @needs_message_identifier ||
          transports.any? { | t | t.needs_message_identifier?(message) }
      end

      def needs_message_timestamp? message
        @needs_message_timestamp ||
          transports.any? { | t | t.needs_message_timestamp?(message) }
      end

      # Subclasses with multiple transports should override this method.
      def transports
        @transports ||= [ transport ]
      end

      # Called from within _send_message rescue.
      def _handle_send_message_exception! transport, message, exc
        _log { [ :send_message, :transport_failed, exc ] }
        (message[:transport_exceptions] ||= [ ]) << "#{exc.inspect}: #{exc.backtrace.first}"
        @on_send_message_exception.call(self, message, exc) if @on_send_message_exception
        self
      end
    end
    # !SLIDE END
  end
end

Version data entries

17 entries across 17 versions & 1 rubygems

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