Skip to content

Commit

Permalink
add support for resque
Browse files Browse the repository at this point in the history
  • Loading branch information
y-yagi committed Oct 9, 2016
1 parent 5fa8352 commit 1b72115
Show file tree
Hide file tree
Showing 8 changed files with 82 additions and 1 deletion.
1 change: 1 addition & 0 deletions activejob-cancel.gemspec
Expand Up @@ -26,6 +26,7 @@ Gem::Specification.new do |spec|
spec.add_development_dependency "activerecord", '>= 4.2.0'
spec.add_development_dependency "delayed_job"
spec.add_development_dependency "delayed_job_active_record"
spec.add_development_dependency "resque"
spec.add_development_dependency "sqlite3"
spec.add_development_dependency "byebug"
end
1 change: 1 addition & 0 deletions gemfiles/active_job_42.gemfile
Expand Up @@ -5,6 +5,7 @@ gem 'rake'
gem 'sidekiq'
gem 'delayed_job'
gem 'delayed_job_active_record'
gem 'resque'
gem 'sqlite3'
gem 'activesupport', '~> 4.2.0'
gem 'activejob', '~> 4.2.0'
Expand Down
1 change: 1 addition & 0 deletions gemfiles/active_job_50.gemfile
Expand Up @@ -5,6 +5,7 @@ gem 'rake'
gem 'sidekiq'
gem 'delayed_job'
gem 'delayed_job_active_record'
gem 'resque'
gem 'sqlite3'
gem 'activesupport', '~> 5.0.0'
gem 'activejob', '~> 5.0.0'
Expand Down
1 change: 1 addition & 0 deletions gemfiles/active_job_master.gemfile
Expand Up @@ -5,6 +5,7 @@ gem 'rake'
gem 'sidekiq'
gem 'delayed_job'
gem 'delayed_job_active_record'
gem 'resque'
gem 'sqlite3'
gem 'activesupport', github: 'rails/rails'
gem 'activejob', github: 'rails/rails'
Expand Down
2 changes: 1 addition & 1 deletion lib/active_job/cancel.rb
Expand Up @@ -7,7 +7,7 @@ module ActiveJob
module Cancel
extend ActiveSupport::Concern

SUPPORTED_ADAPTERS = %w(Sidekiq DelayedJob).freeze
SUPPORTED_ADAPTERS = %w(Sidekiq DelayedJob Resque).freeze

def cancel
if self.class.can_cancel?
Expand Down
1 change: 1 addition & 0 deletions lib/active_job/cancel/queue_adapters.rb
Expand Up @@ -5,6 +5,7 @@ module QueueAdapters

autoload :SidekiqAdapter
autoload :DelayedJobAdapter
autoload :ResqueAdapter
end
end
end
34 changes: 34 additions & 0 deletions lib/active_job/cancel/queue_adapters/resque_adapter.rb
@@ -0,0 +1,34 @@
require 'resque'

module ActiveJob
module Cancel
module QueueAdapters
class ResqueAdapter
def cancel(job_id, queue_name)
job = find_job(job_id, queue_name)

if job
Resque.redis.lrem(redis_key_for_queue(queue_name), 0, Resque.encode(job))
return true
end

false
end

private
def find_job(job_id, queue_name)
jobs = Resque.list_range(redis_key_for_queue(queue_name), 0, Resque.size(queue_name))
jobs = [jobs] if jobs.is_a?(Hash)

jobs.find do |job|
job["args"][0]["job_id"] == job_id
end
end

def redis_key_for_queue(queue)
"queue:#{queue}"
end
end
end
end
end
42 changes: 42 additions & 0 deletions test/queue_adapters/resque_adapter_test.rb
@@ -0,0 +1,42 @@
require 'test_helper'
require 'resque'

module ActiveJob::Cancel::QueueAdapters
class ActiveJob::Cancel::QueueAdapters::ResqueAdapterTest< Minitest::Test
def setup
ActiveJob::Base.queue_adapter = :resque
end

def test_cancel_queued_job_with_instance_method
assert_equal 0, Resque.size(HelloJob.queue_name)

job = HelloJob.perform_later
assert_equal 1, Resque.size(HelloJob.queue_name)

job.cancel
assert_equal 0, Resque.size(HelloJob.queue_name)
ensure
Resque.remove_queue(HelloJob.queue_name)
end

def test_cancel_with_class_method
assert_equal 0, Resque.size(HelloJob.queue_name)

job = HelloJob.perform_later
assert_equal 1, Resque.size(HelloJob.queue_name)

HelloJob.cancel(job.job_id)
assert_equal 0, Resque.size(HelloJob.queue_name)
ensure
Resque.remove_queue(HelloJob.queue_name)
end

def test_cancel_with_invalid_id
job = HelloJob.perform_later
refute HelloJob.cancel(job.job_id.to_i + 1)
assert_equal 1, Resque.size(HelloJob.queue_name)
ensure
Resque.remove_queue(HelloJob.queue_name)
end
end
end

0 comments on commit 1b72115

Please sign in to comment.