class Athena::EventDispatcher::GenericEvent(S, V)
inherits Athena::EventDispatcher::Event
#
An extension of AED::Event
that provides a generic event type that can be used in place of dedicated event types.
Allows using various instantiations of this one event type to handle multiple events.
Info
This type is provided for convenience for use within simple use cases. Dedicated event types are still considered a best practice.
Usage#
A generic event consists of a #subject
of type S
, which is some object/value representing an event that has occurred.
#arguments
of type V
may also be provided to augment the event with additional context, which is modeled as a Hash(String, V)
.
dispatcher.dispatch(
AED::GenericEvent(MyClass, Int32 | String).new(
my_class_instance,
{"counter" => 0, "data" => "bar"}
)
)
Refer to AED::Event for examples of how listeners on events with generics behave.
Todo
Make this include Mappable
when/if https://github.com/crystal-lang/crystal/issues/10886 is implemented.
Constructors#
Methods#
#[](key : String) : V
#
Returns the argument with the provided key, raising if it does not exist.
#[]=(key : String, value : V) : Nil
#
Sets the argument with the provided key to the provided value.
#[]?(key : String) : V | Nil
#
Returns the argument with the provided key, or nil
if it does not exist.
#arguments=(arguments : Hash(String, V))
#
Sets the extra information that should be stored with this event.
#has_key?(key : String) : Bool
#
Returns true
if there is an argument with the provided key, otherwise false
.