Sha256: c6654b18c8c2d4b1afe96badf6449382c669e4fcdb515c6681a36fb0f0888339

Contents?: true

Size: 1.03 KB

Versions: 2

Compression:

Stored size: 1.03 KB

Contents

module Resque
  class Job
    class <<self
      alias_method :origin_reserve, :reserve
      
      def reserve(queue)
        if queue =~ /^#{Plugins::Restriction::RESTRICTION_QUEUE_PREFIX}/
          # If processing the restriction queue, when poping and pushing to end,
          # we can't tell when we reach the original one, so just walk the length
          # of the queue so we don't run infinitely long
          Resque.size(queue).times do |i|
            # For the job at the head of the queue, repush to restricition queue
            # if still restricted, otherwise we have a runnable job, so create it
            # and return
            payload = Resque.pop(queue)
            if payload
              if ! constantize(payload['class']).repush(*payload['args'])
                return new(queue, payload)
              end
            end
          end
          return nil
        else
          # drop through to original Job::Reserve if not restriction queue
          origin_reserve(queue)
        end
      end

    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
resque-restriction-0.3.0 lib/resque-restriction/job.rb
resque-restriction-0.2.2 lib/resque-restriction/job.rb