Module: Rage::Events::Subscriber::ClassMethods

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

Instance Method Summary collapse

Instance Method Details

#rescue_from(*klasses, with: nil) {|exception| ... } ⇒ Object

Note:

If you do not re-raise exceptions in deferred subscribers, the subscriber will be marked as successful and Rage will not attempt to retry it.

Define exception handlers for the subscriber.

Parameters:

  • klasses (Class, Array<Class>)

    one or more exception classes to handle

  • with (Symbol, String) (defaults to: nil)

    the method name to call when an exception is raised

Yields:

  • (exception)

    optional block to handle the exception



123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
# File 'lib/rage/events/subscriber.rb', line 123

def rescue_from(*klasses, with: nil, &block)
  unless with
    if block_given?
      with = Rage::Internal.define_dynamic_method(self, block)
    else
      raise ArgumentError, "No handler provided. Pass the `with` keyword argument or provide a block."
    end
  end

  if @__rescue_handlers.nil?
    @__rescue_handlers = []
  elsif @__rescue_handlers.frozen?
    @__rescue_handlers = @__rescue_handlers.dup
  end

  @__rescue_handlers.unshift([klasses, with])
end

#subscribe_to(*event_classes, deferred: false) ⇒ Object

Subscribe the class to one or more events.

Parameters:

  • event_classes (Class, Array<Class>)

    one or more event classes to subscribe to

  • deferred (Boolean) (defaults to: false)

    whether to process events asynchronously



102
103
104
105
106
107
108
109
110
111
112
113
114
115
# File 'lib/rage/events/subscriber.rb', line 102

def subscribe_to(*event_classes, deferred: false)
  @__event_classes = (@__event_classes || []) | event_classes
  @__is_deferred = !!deferred
  @__log_context = { subscriber: name }.freeze

  @__event_classes.each do |event_class|
    Rage::Events.__register_subscriber(event_class, self)
  end

  if @__is_deferred
    include Rage::Deferred::Task
    alias_method :perform, :__call
  end
end