class AdvancedSneakersActiveJob::Support::LocateWorkersByQueues
Public Class Methods
new(queues)
click to toggle source
# File lib/advanced_sneakers_activejob/support/locate_workers_by_queues.rb, line 6 def initialize(queues) @queues = queues.uniq.reject(&:blank?) @queues_without_workers = [] @workers = [] end
Public Instance Methods
call()
click to toggle source
# File lib/advanced_sneakers_activejob/support/locate_workers_by_queues.rb, line 12 def call detect_workers_for_queues! ensure_all_workers_found! @workers.uniq end
Private Instance Methods
all_workers()
click to toggle source
# File lib/advanced_sneakers_activejob/support/locate_workers_by_queues.rb, line 27 def all_workers @all_workers ||= Sneakers::Worker::Classes.activejob_workers end
detect_workers_for_queues!()
click to toggle source
# File lib/advanced_sneakers_activejob/support/locate_workers_by_queues.rb, line 31 def detect_workers_for_queues! @queues.each do |queue| matching_workers = all_workers.select { |klass| klass.queue_name.match?(queue_regex(queue)) } if matching_workers.any? @workers += matching_workers else @queues_without_workers << queue end end end
ensure_all_workers_found!()
click to toggle source
# File lib/advanced_sneakers_activejob/support/locate_workers_by_queues.rb, line 21 def ensure_all_workers_found! return if @queues_without_workers.empty? raise("Missing workers for queues: #{@queues_without_workers.join(', ')}") end
queue_regex(queue)
click to toggle source
www.rabbitmq.com/tutorials/tutorial-five-python.html
# File lib/advanced_sneakers_activejob/support/locate_workers_by_queues.rb, line 44 def queue_regex(queue) regex = Regexp.escape(queue) .gsub(/\A\\\*|(\.)\\\*/, '\1[^\.]+') # "*" (star) substitutes for exactly one word .sub('\.\#', '(\.[^\.]+)*') # "#" (hash) substitutes for zero or more words Regexp.new(['\A', regex, '\z'].join) end