class

Athena::EventDispatcher::GenericEvent(S, V)

Inherits Athena::EventDispatcher::Event < Athena::Contracts::EventDispatcher::Event < Athena::Contracts::EventDispatcher::StoppableEvent < Reference < Object

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][Athena::EventDispatcher::Event--generics] 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

new(subject : S, arguments : Hash(String, V))
Source
new(subject : S)
Source

Instance methods

[](key : String) : V

Returns the argument with the provided key, raising if it does not exist.

Source
[]=(key : String, value : V) : Nil

Sets the argument with the provided key to the provided value.

Source
[]?(key : String) : V | Nil

Returns the argument with the provided key, or nil if it does not exist.

Source
arguments

Returns the extra information stored with this event.

Source
arguments=(arguments : Hash(String, V))

Sets the extra information that should be stored with this event.

Source
has_key?(key : String) : Bool

Returns true if there is an argument with the provided key, otherwise false.

Source
subject

Returns the subject of this event.

Source