Sha256: daf00ba98fb1301e4b02fbeab226579ca57b9ff7a734366e2708cbfd5189d389

Contents?: true

Size: 1.63 KB

Versions: 39

Compression:

Stored size: 1.63 KB

Contents

require 'active_support/core_ext/string/inflections'
require 'resque'

module Pwwka
  # A handler that simply queues the payload into a Resque job.  This is useful
  # if the code that should respond to a message needs to be managed by Resque, e.g.
  # for the purposes of retry or better failure management.  You can ask for the routing key and properties
  # by setting `PWWKA_QUEUE_EXTENDED_INFO` to `true` in your environment.
  #
  # You should be able to use this directly from your handler configuration, e.g. for a Heroku-style `Procfile`:
  #
  #     my_handler: rake message_handler:receive HANDLER_KLASS=Pwwka::QueueResqueJobHandler JOB_KLASS=MyResqueJob QUEUE_NAME=my_queue ROUTING_KEY="my.key.completed"
  #     my_handler_that_wants_more_info: rake message_handler:receive HANDLER_KLASS=Pwwka::QueueResqueJobHandler JOB_KLASS=MyOthgerResqueJob PWWKA_QUEUE_EXTENDED_INFO=true QUEUE_NAME=my_queue ROUTING_KEY="my.key.#"
  #
  # Note that this will not check the routing key, so you should be sure to specify the most precise ROUTING_KEY you can for handling the message.
  class QueueResqueJobHandler
    def self.handle!(delivery_info,properties,payload)
      job_klass = ENV["JOB_KLASS"].constantize
      args = [
        job_klass,
        payload
      ]
      if ENV["PWWKA_QUEUE_EXTENDED_INFO"] == 'true' || job_klass_can_handle_args?(job_klass)
        args << delivery_info.routing_key
        args << properties.to_hash
      end
      Resque.enqueue(*args)
    end

  private

  def self.job_klass_can_handle_args?(job_klass)
      method = job_klass.method(:perform)
      return false if method.nil?
      method.arity == 3
    end
  end

end

Version data entries

39 entries across 39 versions & 1 rubygems

Version Path
pwwka-1.0.0 lib/pwwka/queue_resque_job_handler.rb
pwwka-1.0.0.RC1 lib/pwwka/queue_resque_job_handler.rb
pwwka-0.24.0 lib/pwwka/queue_resque_job_handler.rb
pwwka-0.23.0 lib/pwwka/queue_resque_job_handler.rb
pwwka-0.22.7 lib/pwwka/queue_resque_job_handler.rb
pwwka-0.22.7.RC lib/pwwka/queue_resque_job_handler.rb
pwwka-0.23.0.RC2 lib/pwwka/queue_resque_job_handler.rb
pwwka-0.22.6 lib/pwwka/queue_resque_job_handler.rb
pwwka-0.23.RC1 lib/pwwka/queue_resque_job_handler.rb
pwwka-0.22.5 lib/pwwka/queue_resque_job_handler.rb
pwwka-0.22.4 lib/pwwka/queue_resque_job_handler.rb
pwwka-0.22.3 lib/pwwka/queue_resque_job_handler.rb
pwwka-0.22.2 lib/pwwka/queue_resque_job_handler.rb
pwwka-0.21.3 lib/pwwka/queue_resque_job_handler.rb
pwwka-0.22.2.RC4 lib/pwwka/queue_resque_job_handler.rb
pwwka-0.22.2.RC3 lib/pwwka/queue_resque_job_handler.rb
pwwka-0.22.2.RC2 lib/pwwka/queue_resque_job_handler.rb
pwwka-0.22.0.RC2 lib/pwwka/queue_resque_job_handler.rb
pwwka-0.22.0.RC lib/pwwka/queue_resque_job_handler.rb
pwwka-0.21.2 lib/pwwka/queue_resque_job_handler.rb