class Resque::Plugins::Approve::PendingJobQueue

A class representing a queue of Pending jobs.

The queue is named with the approval_key for all of the jobs in the queue and contains a list of the jobs.

Attributes

approval_key[R]

Public Class Methods

new(approval_key) click to toggle source
# File lib/resque/plugins/approve/pending_job_queue.rb, line 16
def initialize(approval_key)
  @approval_key = approval_key
end

Public Instance Methods

add_job(job) click to toggle source
# File lib/resque/plugins/approve/pending_job_queue.rb, line 76
def add_job(job)
  redis.rpush(queue_key, job.id)

  job.save!
end
approve_all() click to toggle source
# File lib/resque/plugins/approve/pending_job_queue.rb, line 94
def approve_all
  true while approve_one
end
approve_num(num_approve) click to toggle source
# File lib/resque/plugins/approve/pending_job_queue.rb, line 90
def approve_num(num_approve)
  num_approve.times { approve_one }
end
approve_one() click to toggle source
# File lib/resque/plugins/approve/pending_job_queue.rb, line 82
def approve_one
  return false if paused_job_skip?

  id = redis.lpop(queue_key)

  enqueue_job(id)
end
decrement_running() click to toggle source
# File lib/resque/plugins/approve/pending_job_queue.rb, line 33
def decrement_running
  Resque::Plugins::Approve::ApprovalKeyList.new.add_key approval_key
  redis.decr(running_key)
end
delete() click to toggle source
# File lib/resque/plugins/approve/pending_job_queue.rb, line 56
def delete
  jobs.each(&:delete)
end
first_enqueued() click to toggle source
# File lib/resque/plugins/approve/pending_job_queue.rb, line 144
def first_enqueued
  jobs(0, 0).first&.queue_time
end
increment_running() click to toggle source
# File lib/resque/plugins/approve/pending_job_queue.rb, line 28
def increment_running
  Resque::Plugins::Approve::ApprovalKeyList.new.add_key approval_key
  redis.incr(running_key)
end
jobs(start = 0, stop = -1) click to toggle source
# File lib/resque/plugins/approve/pending_job_queue.rb, line 136
def jobs(start = 0, stop = -1)
  redis.lrange(queue_key, start, stop).map { |id| Resque::Plugins::Approve::PendingJob.new(id) }
end
num_ignored() click to toggle source
# File lib/resque/plugins/approve/pending_job_queue.rb, line 47
def num_ignored
  redis.get(paused_count_key).to_i
end
num_jobs() click to toggle source
# File lib/resque/plugins/approve/pending_job_queue.rb, line 140
def num_jobs
  redis.llen(queue_key)
end
num_running() click to toggle source
# File lib/resque/plugins/approve/pending_job_queue.rb, line 20
def num_running
  redis.get(running_key)
end
paged_jobs(page_num = 1, job_page_size = nil) click to toggle source
# File lib/resque/plugins/approve/pending_job_queue.rb, line 126
def paged_jobs(page_num = 1, job_page_size = nil)
  job_page_size ||= 20
  job_page_size = job_page_size.to_i
  job_page_size = 20 if job_page_size < 1
  start         = (page_num - 1) * job_page_size
  start         = 0 if start >= num_jobs || start.negative?

  jobs(start, start + job_page_size - 1)
end
pause() click to toggle source
# File lib/resque/plugins/approve/pending_job_queue.rb, line 38
def pause
  redis.set(pause_key, true)
  redis.set(paused_count_key, 0)
end
paused?() click to toggle source
# File lib/resque/plugins/approve/pending_job_queue.rb, line 43
def paused?
  redis.get(pause_key)
end
pop_job() click to toggle source
# File lib/resque/plugins/approve/pending_job_queue.rb, line 98
def pop_job
  return false if paused_job_skip?

  id = redis.rpop(queue_key)

  enqueue_job(id)
end
remove_all() click to toggle source
# File lib/resque/plugins/approve/pending_job_queue.rb, line 116
def remove_all
  true while remove_one
end
remove_job(job) click to toggle source
# File lib/resque/plugins/approve/pending_job_queue.rb, line 60
def remove_job(job)
  redis.lrem(queue_key, 0, job.id)

  remove_approval_key(job)
end
remove_job_pop() click to toggle source
# File lib/resque/plugins/approve/pending_job_queue.rb, line 120
def remove_job_pop
  id = redis.rpop(queue_key)

  delete_job(id)
end
remove_num(num_approve) click to toggle source
# File lib/resque/plugins/approve/pending_job_queue.rb, line 112
def remove_num(num_approve)
  num_approve.times { remove_one }
end
remove_one() click to toggle source
# File lib/resque/plugins/approve/pending_job_queue.rb, line 106
def remove_one
  id = redis.lpop(queue_key)

  delete_job(id)
end
reset_running() click to toggle source
# File lib/resque/plugins/approve/pending_job_queue.rb, line 24
def reset_running
  redis.set(running_key, 0)
end
resume() click to toggle source
# File lib/resque/plugins/approve/pending_job_queue.rb, line 51
def resume
  redis.del(paused_count_key)
  redis.del(pause_key)
end
verify_job(job) click to toggle source
# File lib/resque/plugins/approve/pending_job_queue.rb, line 66
def verify_job(job)
  ApprovalKeyList.new.add_key(job.approval_key)

  ids = redis.lrange(queue_key, 0, -1)

  return if ids.include?(job.id)

  redis.lpush(queue_key, job.id)
end

Private Instance Methods

delete_job(id) click to toggle source
# File lib/resque/plugins/approve/pending_job_queue.rb, line 172
def delete_job(id)
  return false unless id.present?

  Resque::Plugins::Approve::PendingJob.new(id).delete

  true
end
enqueue_job(id) click to toggle source
# File lib/resque/plugins/approve/pending_job_queue.rb, line 164
def enqueue_job(id)
  return false unless id.present?

  Resque::Plugins::Approve::PendingJob.new(id).enqueue_job

  true
end
pause_key() click to toggle source
# File lib/resque/plugins/approve/pending_job_queue.rb, line 184
def pause_key
  @pause_key ||= "approve.job_queue.#{approval_key}.paused"
end
paused_count_key() click to toggle source
# File lib/resque/plugins/approve/pending_job_queue.rb, line 192
def paused_count_key
  @paused_count_key ||= "approve.job_queue.#{approval_key}.paused.count"
end
paused_job_skip?() click to toggle source
# File lib/resque/plugins/approve/pending_job_queue.rb, line 156
def paused_job_skip?
  return false unless paused?

  redis.incr(paused_count_key)

  true
end
queue_key() click to toggle source
# File lib/resque/plugins/approve/pending_job_queue.rb, line 180
def queue_key
  @queue_key ||= "approve.job_queue.#{approval_key}"
end
remove_approval_key(job) click to toggle source
# File lib/resque/plugins/approve/pending_job_queue.rb, line 150
def remove_approval_key(job)
  return unless job.class_name.constantize.auto_delete_approval_key

  ApprovalKeyList.new.remove_key(approval_key) if num_jobs.zero?
end
running_key() click to toggle source
# File lib/resque/plugins/approve/pending_job_queue.rb, line 188
def running_key
  @running_key ||= "approve.job_queue.#{approval_key}.running"
end