module RocketJob::Subscriber
Mix-in to publish and subscribe to events.
Example: def MySubscriber
include RocketJob::Subscriber def hello logger.info "Hello Action Received" end def show(message:) logger.info "Received: #{message}" end # If `message` is not supplied it defaults to "Hello World" def show_default(message: "Hello World") logger.info "Received: #{message}" end
end
MySubscriber.subscribe
Public Class Methods
publish(action, **parameters)
click to toggle source
# File lib/rocket_job/subscriber.rb, line 47 def self.publish(action, **parameters) raise(ArgumentError, "Invalid action: #{action}") unless public_method_defined?(action) if event_name == Event::ALL_EVENTS raise(NotImplementedError, "Cannot publish to an all events subscriber: event_name='#{Event::ALL_EVENTS}'") end event = Event.new(name: event_name, action: action, parameters: parameters) Subscriber.test_mode? ? Event.process_event(event) : event.save! end
subscribe(*args, &block)
click to toggle source
# File lib/rocket_job/subscriber.rb, line 57 def self.subscribe(*args, &block) instance = new(*args) Event.subscribe(instance, &block) end
test_mode!()
click to toggle source
Test Mode Bypasses publishing the event and calls the subscribers directly
# File lib/rocket_job/subscriber.rb, line 30 def self.test_mode! @test_mode = true end
test_mode?()
click to toggle source
# File lib/rocket_job/subscriber.rb, line 34 def self.test_mode? @test_mode end
Public Instance Methods
process_action(action, parameters)
click to toggle source
# File lib/rocket_job/subscriber.rb, line 63 def process_action(action, parameters) unless public_methods.include?(action) logger.warn("Ignoring unknown action: #{action}") return end args = method(action).arity.zero? || parameters.nil? ? nil : parameters.symbolize_keys args ? public_send(action, **args) : public_send(action) rescue ArgumentError => e logger.error("##{action}: Invalid Arguments. Resuming..", e) rescue StandardError => e logger.error("##{action}: Exception caught. Resuming..", e) end
process_event(name, action, parameters)
click to toggle source
# File lib/rocket_job/subscriber.rb, line 77 def process_event(name, action, parameters) raise(NotImplementedError) end