Module: Rage::Events::Subscriber

Defined in:
lib/rage/events/subscriber.rb

Overview

Include this module in a class to make it an event subscriber.

Example:

# Define an event class
MyEvent = Data.define

# Define the subscriber class
class MySubscriber
  include Rage::Events::Subscriber
  subscribe_to MyEvent

  def call(event)
    puts "Received event: #{event.inspect}"
  end
end

# Publish an event
Rage::Events.publish(MyEvent.new)

When an event matching the specified class is published, the call method will be invoked with the event instance.

You can also subscribe to multiple event classes:

class MySubscriber
  include Rage::Events::Subscriber
  subscribe_to EventA, EventB

  def call(event)
    puts "Received event: #{event.inspect}"
  end
end

Subscribers are executed synchronously by default. You can make a subscriber asynchronous by passing the deferred option:

class MySubscriber
  include Rage::Events::Subscriber
  subscribe_to MyEvent, deferred: true

  def call(event)
    puts "Received event in background: #{event.inspect}"
  end
end

Such subscriber will be executed in the background using Rage’s deferred task system.

You can also define custom error handling for exceptions raised during event processing using rescue_from:

class MySubscriber
  include Rage::Events::Subscriber
  subscribe_to MyEvent

  rescue_from StandardError do |exception|
    puts "An error occurred: #{exception.message}"
  end
end

See Also:

Defined Under Namespace

Modules: ClassMethods