Module: Events::Bus

Defined in:
lib/events/bus.rb

Overview

Central event bus built on Rails Structured Event Reporter. All Anima events flow through here — subsystems emit events and subscribers react independently without coupling.

Subscribers must implement the Subscriber interface (#emit method). Rails.event wraps payloads: subscribers receive a Hash with :name, :payload (the event’s to_h), and :timestamp keys.

Examples:

Emitting an event

Events::Bus.emit(Events::UserMessage.new(content: "Hello"))

Subscribing

subscriber = MySubscriber.new  # must implement #emit(event_hash)
Events::Bus.subscribe(subscriber)

Constant Summary collapse

NAMESPACE =
"anima"

Class Method Summary collapse

Class Method Details

.emit(event) ⇒ Object

Parameters:



23
24
25
# File 'lib/events/bus.rb', line 23

def emit(event)
  Rails.event.notify(event.event_name, event.to_h)
end

.subscribe(subscriber, &filter) ⇒ Object

Parameters:

  • subscriber (#emit)

    object implementing the Subscriber interface

  • filter (Proc)

    optional filter block passed to Rails.event



29
30
31
# File 'lib/events/bus.rb', line 29

def subscribe(subscriber, &filter)
  Rails.event.subscribe(subscriber, &filter)
end

.unsubscribe(subscriber) ⇒ Object

Parameters:

  • subscriber (#emit)

    previously subscribed object



34
35
36
# File 'lib/events/bus.rb', line 34

def unsubscribe(subscriber)
  Rails.event.unsubscribe(subscriber)
end