Class: Solana::Ruby::Kit::RpcSubscriptions::Subscription

Inherits:
Object
  • Object
show all
Extended by:
T::Generic, T::Sig
Includes:
Enumerable
Defined in:
lib/solana/ruby/kit/rpc_subscriptions/subscription.rb

Overview

A live subscription to a Solana WebSocket notification channel. Wraps a DataPublisher channel and exposes an Enumerator interface.

Typical usage:

sub = client.slot_subscribe
sub.take(10).each { |notification| puts notification }
sub.unsubscribe  # or break from the enumerator loop

Constant Summary collapse

Elem =
type_member { { fixed: T.untyped } }

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(enumerator:, unsubscribe:, timeout: nil) ⇒ Subscription

Returns a new instance of Subscription.



29
30
31
32
33
# File 'lib/solana/ruby/kit/rpc_subscriptions/subscription.rb', line 29

def initialize(enumerator:, unsubscribe:, timeout: nil)
  @enumerator  = enumerator
  @unsubscribe = unsubscribe
  @timeout     = timeout
end

Instance Attribute Details

#enumeratorObject (readonly)

Returns the value of attribute enumerator.



20
21
22
# File 'lib/solana/ruby/kit/rpc_subscriptions/subscription.rb', line 20

def enumerator
  @enumerator
end

Instance Method Details

#each(&block) ⇒ Object



43
44
45
46
47
# File 'lib/solana/ruby/kit/rpc_subscriptions/subscription.rb', line 43

def each(&block)
  @enumerator.each(&block)
ensure
  unsubscribe
end

#nextObject



53
# File 'lib/solana/ruby/kit/rpc_subscriptions/subscription.rb', line 53

def next = @enumerator.next

#take(n) ⇒ Object



50
# File 'lib/solana/ruby/kit/rpc_subscriptions/subscription.rb', line 50

def take(n) = @enumerator.take(n)

#unsubscribeObject



37
38
39
# File 'lib/solana/ruby/kit/rpc_subscriptions/subscription.rb', line 37

def unsubscribe
  @unsubscribe.call
end