Skip to content

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#

.new(subject : S, arguments : Hash(String, V))#

View source

.new(subject : S)#

View source

Methods#

#[](key : String) : V#

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

View source

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

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

View source

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

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

View source

#arguments : Hash(String, V)#

Returns the extra information stored with this event.

View source

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

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

View source

#has_key?(key : String) : Bool#

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

View source

#subject : S#

Returns the subject of this event.

View source