Module: ASIR::Transport::Delegation

Included in:
Buffer, Composite, Demux, Retry
Defined in:
lib/asir/transport/delegation.rb

Overview

!SLIDE A Transport that delgated to one or more other Transports.

Classes that include this must define #_send_message(message, message_payload).

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#on_failed_messageObject

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



15
16
17
# File 'lib/asir/transport/delegation.rb', line 15

def on_failed_message
  @on_failed_message
end

#on_send_message_exceptionObject

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



12
13
14
# File 'lib/asir/transport/delegation.rb', line 12

def on_send_message_exception
  @on_send_message_exception
end

#reraise_first_exceptionObject

If true, reraise the first Exception that occurred during Transport#send_message.



9
10
11
# File 'lib/asir/transport/delegation.rb', line 9

def reraise_first_exception
  @reraise_first_exception
end

Instance Method Details

#_handle_send_message_exception!(transport, message, exc) ⇒ Object

Called from within _send_message rescue.



43
44
45
46
47
48
# File 'lib/asir/transport/delegation.rb', line 43

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

#_receive_result(message, opaque_result) ⇒ Object

Return the subTransports#send_message result unmodified from #_send_message.



18
19
20
# File 'lib/asir/transport/delegation.rb', line 18

def _receive_result message, opaque_result
  opaque_result
end

#needs_message_identifier?(message) ⇒ Boolean

Returns:

  • (Boolean)


27
28
29
30
# File 'lib/asir/transport/delegation.rb', line 27

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

#needs_message_timestamp?(message) ⇒ Boolean

Returns:

  • (Boolean)


32
33
34
35
# File 'lib/asir/transport/delegation.rb', line 32

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

#receive_result(message, opaque_result) ⇒ Object

Return the subTransports#send_message result unmodified from #_send_message.



23
24
25
# File 'lib/asir/transport/delegation.rb', line 23

def receive_result message, opaque_result
  opaque_result
end

#transportsObject

Subclasses with multiple transports should override this method.



38
39
40
# File 'lib/asir/transport/delegation.rb', line 38

def transports
  @transports ||= [ transport ]
end