module Qs::DispatchJobHandler::InstanceMethods

Attributes

event[R]
subscribed_queue_names[R]

Public Instance Methods

init!() click to toggle source
# File lib/qs/dispatch_job_handler.rb, line 20
def init!
  @event = Qs::DispatchJob.event(job)
  @subscribed_queue_names = Qs.event_subscribers(@event)
  @qs_failed_dispatches = []
end
run!() click to toggle source
# File lib/qs/dispatch_job_handler.rb, line 26
def run!
  logger.info "Dispatching #{self.event.route_name}"
  logger.info "  params:       #{self.event.params.inspect}"
  logger.info "  publisher:    #{self.event.publisher}"
  logger.info "  published at: #{self.event.published_at}"
  logger.info "Found #{self.subscribed_queue_names.size} subscribed queue(s):"
  self.subscribed_queue_names.each do |queue_name|
    qs_dispatch(queue_name, self.event)
  end
  qs_handle_errors(self.event, @qs_failed_dispatches)
end

Private Instance Methods

qs_dispatch(queue_name, event) click to toggle source
# File lib/qs/dispatch_job_handler.rb, line 40
def qs_dispatch(queue_name, event)
  Qs.push(queue_name, Qs::Payload.event_hash(event))
  logger.info "  => #{queue_name}"
rescue StandardError => exception
  logger.info "  => #{queue_name} (failed)"
  @qs_failed_dispatches << FailedDispatch.new(queue_name, exception)
end
qs_handle_errors(event, failed_dispatches) click to toggle source
# File lib/qs/dispatch_job_handler.rb, line 48
def qs_handle_errors(event, failed_dispatches)
  return if failed_dispatches.empty?
  logger.info "Failed to dispatch the event to " \
              "#{failed_dispatches.size} subscribed queues"
  descriptions = failed_dispatches.map do |fail|
    exception_desc = "#{fail.exception.class}: #{fail.exception.message}"
    logger.info "#{fail.queue_name}"
    logger.info "  #{exception_desc}"
    logger.info "  #{fail.exception.backtrace.first}"
    "#{fail.queue_name} - #{exception_desc}"
  end
  message = "#{event.route_name} event wasn't dispatched to:\n" \
            "  #{descriptions.join("\n  ")}"
  raise DispatchError.new(message, failed_dispatches)
end