class
EventHandler::Subscription
- EventHandler::Subscription
- Reference
- Object
Overview
A single event subscription that remembers how to cancel itself.
The target is captured at subscribe time inside the cancel closure, so
#off always removes from the exact object it added to, regardless of
where the owner later points. #off is idempotent, so two teardown paths
can both call it without double-freeing; #on cancels any previous handler
first, so a slot re-armed repeatedly can't leak.
target is any EventHandler includer (duck-typed: anything with the
generated on(type, ...)/off(type, wrapper) pair).
Defined in:
subscription.crConstructors
-
.new(cancel : Proc(Nil), wrapper : Nil | EventHandler::Wrapper(EventHandler::Event -> _) = nil)
A subscription over an already-installed handler: cancel removes it.
-
.new
An empty (inactive) subscription, armed later via
#on.
Instance Method Summary
-
#active? : Bool
Whether a handler is currently installed.
-
#dispose : Nil
#dispose/#disposed?aliases of#off/!active?, for callers whose teardown vocabulary is#dispose(e.g. -
#disposed? : Bool
:ditto: — whether this subscription has been torn down (no handler live).
-
#handler_hash : UInt64
The registered handler's identity hash (
Wrapper#handler_hash), for theoff(type, hash)bulk-removal form. -
#off : Nil
Removes the handler if one is installed.
-
#on(target, type : T.class, once = false, async = ::EventHandler.async?, at = ::EventHandler.at_end, &block : T -> Nil) : self forall T
Subscribes block to event type on target, first cancelling any handler this slot already holds.
-
#wrapper : EventHandler::Wrapper(Proc(EventHandler::Event, Nil)) | Nil
The
Wrapperbehind this subscription, when it was returned by the generated#on/once(in the erasedWrapper(Proc(Event, Nil))form those hand toAddHandlerEventlisteners).
Constructor Detail
A subscription over an already-installed handler: cancel removes it.
This is the form the generated EventHandler#on/#once return, so
every subscription — whether built here or handed out by #on — tears
down through the same idempotent #off.
Instance Method Detail
#dispose/#disposed? aliases of #off/!active?, for callers whose
teardown vocabulary is #dispose (e.g. reactive stacks). #off stays the
canonical spelling (it mirrors #on/#off).
The registered handler's identity hash (Wrapper#handler_hash), for the
off(type, hash) bulk-removal form. Raises ArgumentError when this
subscription holds no wrapper (see #wrapper).
Subscribes block to event type on target, first cancelling any
handler this slot already holds. Returns self.