Class: Igniter::LedgerClient::Transports::ObjectDispatch

Inherits:
Object
  • Object
show all
Defined in:
lib/igniter/ledger_client/transports/object_dispatch.rb

Instance Method Summary collapse

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

#closeObject



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

Raises:

  • (ArgumentError)


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