module AdvancedSneakersActiveJob

Advanced Sneakers adapter for ActiveJob

Constants

CONTENT_TYPE
EXPONENTIAL_BACKOFF

Calculating exponential backoff by formulas with randomization leads to numerous RabbitMQ queues.

VERSION

Public Class Methods

config() click to toggle source
# File lib/advanced_sneakers_activejob.rb, line 35
def config
  @config ||= Configuration.new
end
configure() { |config| ... } click to toggle source
# File lib/advanced_sneakers_activejob.rb, line 39
def configure
  yield config
end
const_missing(name) click to toggle source
Calls superclass method
# File lib/advanced_sneakers_activejob.rb, line 80
def const_missing(name)
  Sneakers::Worker::Classes.define_active_job_consumers

  constants.include?(name) ? const_get(name) : super
end
consumer_name(queue_name:) click to toggle source

Based on ActiveSupport::Inflector#parameterize

# File lib/advanced_sneakers_activejob.rb, line 65
def consumer_name(queue_name:)
  # replace accented chars with their ascii equivalents
  parameterized_string = ::ActiveSupport::Inflector.transliterate(queue_name)
  # Turn unwanted chars into the separator
  parameterized_string.gsub!(/[^a-z0-9\-_]+/, '_')
  # No more than one of the separator in a row.
  parameterized_string.gsub!(/_{2,}/, '_')
  # Remove leading/trailing separator.
  parameterized_string.gsub!(/^_|_$/, '')
  # Ruby does not allow classes with leading digits
  parameterized_string.gsub!(/\A(\d)/, 'queue\1')

  [parameterized_string, 'consumer'].join('_').classify
end
define_consumer(queue_name:) click to toggle source
# File lib/advanced_sneakers_activejob.rb, line 43
def define_consumer(queue_name:)
  name = consumer_name(queue_name: queue_name)

  return const_get(name) if const_defined?(name)

  klass = Class.new(ActiveJob::QueueAdapters::AdvancedSneakersAdapter::JobWrapper)
  const_set(name, klass)
  klass.include Sneakers::Worker
  klass.from_queue(queue_name, config.sneakers)

  klass
end
delayed_publisher() click to toggle source
# File lib/advanced_sneakers_activejob.rb, line 60
def delayed_publisher
  @delayed_publisher ||= AdvancedSneakersActiveJob::DelayedPublisher.new(**config.publisher_config)
end
publisher() click to toggle source
# File lib/advanced_sneakers_activejob.rb, line 56
def publisher
  @publisher ||= AdvancedSneakersActiveJob::Publisher.new(**config.publisher_config)
end