Sha256: 080018d081b755721b9fdf66f6e033bd7b02994af7107c4dd8aedba5dbb53597

Contents?: true

Size: 980 Bytes

Versions: 1

Compression:

Stored size: 980 Bytes

Contents

# frozen_string_literal: true

module AdvancedSneakersActiveJob
  module Support
    class LocateWorkersByQueues
      def initialize(queues)
        @queues = queues.uniq.reject(&:blank?)
        @queues_without_workers = []
        @workers = []
      end

      def call
        detect_workers_for_queues!
        ensure_all_workers_found!

        @workers
      end

      private

      def ensure_all_workers_found!
        return if @queues_without_workers.empty?

        raise("Missing workers for queues: #{@queues_without_workers.join(', ')}")
      end

      def all_workers
        @all_workers ||= Sneakers::Worker::Classes.activejob_workers
      end

      def detect_workers_for_queues!
        @queues.each do |queue|
          worker = all_workers.detect { |klass| klass.queue_name == queue }

          if worker
            @workers << worker
          else
            @queues_without_workers << queue
          end
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
advanced-sneakers-activejob-0.3.3 lib/advanced_sneakers_activejob/support/locate_workers_by_queues.rb