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