class Announcer::Publishers::RemoteResquePublisher

Public Instance Methods

publish(event) click to toggle source
# File lib/announcer/publishers/remote_resque_publisher.rb, line 10
def publish(event)
  super

  # Based on Resque 1.25.2

  # Resque call stack:
  # -> Resque.enqueue(klass, *args)
  # -> Resque.enqueue_to(queue, klass, *args)
  # -> Job.create(queue, klass, *args)
  # -> Resque.push(queue, class: klass.to_s, args: args)

  # These should be the same as the args passed to Resque.enqueue in
  # ResquePublisher#publish(event).
  args = [
    event.serialize
  ]

  enqueue_to(config.queue.to_s, Publishers::ResquePublisher::PublisherJob, *args)
end
redis() click to toggle source
# File lib/announcer/publishers/remote_resque_publisher.rb, line 30
def redis
  @redis ||= _redis
end

Private Instance Methods

_redis() click to toggle source

Helper Methods

# File lib/announcer/publishers/remote_resque_publisher.rb, line 69
def _redis
  if config.redis?
    config.redis
  elsif config.redis_url?
    redis = Redis.connect(url: config.redis_url, thread_safe: true)
    Redis::Namespace.new(config.redis_namespace.to_sym, redis: redis)
  else
    raise Errors::RemoteResquePublisherError, "missing redis configuration"
  end
end
encode(object) click to toggle source
# File lib/announcer/publishers/remote_resque_publisher.rb, line 60
def encode(object)
  # This one we can call directly.
  Resque.encode(object)
end
enqueue_to(queue, klass, *args) click to toggle source

Methods copied from Resque v1.25.2

# File lib/announcer/publishers/remote_resque_publisher.rb, line 40
def enqueue_to(queue, klass, *args)
  # This is a functionality copy, not a direct code copy.
  # Here, I'm skipping the call to Job.create(queue, klass, *args) and
  # calling push directly.
  push(queue, class: klass.to_s, args: args)
end
push(queue, item) click to toggle source

Resque::push(queue, items)

# File lib/announcer/publishers/remote_resque_publisher.rb, line 48
def push(queue, item)
  redis.pipelined do
    watch_queue(queue)
    redis.rpush "queue:#{queue}", encode(item)
  end
end
watch_queue(queue) click to toggle source

Resque::watch_queue

# File lib/announcer/publishers/remote_resque_publisher.rb, line 56
def watch_queue(queue)
  redis.sadd(:queues, queue.to_s)
end