Class: Igniter::LedgerClient::Transports::ObjectDispatch
- Inherits:
-
Object
- Object
- Igniter::LedgerClient::Transports::ObjectDispatch
- Defined in:
- lib/igniter/ledger_client/transports/object_dispatch.rb
Instance Method Summary collapse
- #close ⇒ Object
- #dispatch(envelope) ⇒ Object
-
#initialize(target) ⇒ ObjectDispatch
constructor
A new instance of ObjectDispatch.
- #subscribe(stores:, cursor: nil, &block) ⇒ Object
Constructor Details
#initialize(target) ⇒ ObjectDispatch
Returns a new instance of ObjectDispatch.
9 10 11 |
# File 'lib/igniter/ledger_client/transports/object_dispatch.rb', line 9 def initialize(target) @target = target end |
Instance Method Details
#close ⇒ Object
36 37 38 |
# File 'lib/igniter/ledger_client/transports/object_dispatch.rb', line 36 def close @target.close if @target.respond_to?(:close) end |
#dispatch(envelope) ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/igniter/ledger_client/transports/object_dispatch.rb', line 13 def dispatch(envelope) if @target.respond_to?(:dispatch) @target.dispatch(envelope) elsif @target.respond_to?(:wire) @target.wire.dispatch(envelope) elsif @target.respond_to?(:protocol) && @target.protocol.respond_to?(:wire) @target.protocol.wire.dispatch(envelope) else raise ArgumentError, "object does not expose dispatch(envelope), wire.dispatch(envelope), or protocol.wire.dispatch(envelope)" end end |
#subscribe(stores:, cursor: nil, &block) ⇒ Object
25 26 27 28 29 30 31 32 33 34 |
# File 'lib/igniter/ledger_client/transports/object_dispatch.rb', line 25 def subscribe(stores:, cursor: nil, &block) raise ArgumentError, "subscribe requires a block" unless block feed = changefeed_source raise NotImplementedError, "object dispatch target does not expose changefeed.subscribe" unless feed.respond_to?(:subscribe) replay(feed, stores: stores, cursor: cursor, handler: block) if cursor handle = feed.subscribe(stores: stores) { |event| block.call(event) } Subscription.new { handle.close } end |