Skip to content

Commit

Permalink
make it possible to inject a custom worker for QC's rake tasks.
Browse files Browse the repository at this point in the history
In every project I'm using QueueClassic we end up writing
our own Worker. This is also encouraged in the README.

The process is very smooth but one drawback is that you can't
continue to use the rake tasks, which ship with QC. Or at least
not `rake qc:work` as this would always use the default worker.

I think we should encourage custom workers and make it trivial
to inject them into QC's rake tasks.
  • Loading branch information
senny committed Jan 10, 2015
1 parent d824284 commit 37bac1e
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 1 deletion.
8 changes: 8 additions & 0 deletions lib/queue_classic.rb
Expand Up @@ -70,6 +70,14 @@ def self.default_conn_adapter=(conn)
@conn_adapter = conn
end

def self.default_worker_class
@worker_class ||= QC::Worker
end

def self.default_worker_class=(worker_class)
@worker_class = worker_class
end

def self.log_yield(data)
begin
t0 = Time.now
Expand Down
2 changes: 1 addition & 1 deletion lib/queue_classic/tasks.rb
Expand Up @@ -8,7 +8,7 @@
namespace :qc do
desc "Start a new worker for the (default or $QUEUE) queue"
task :work => :environment do
@worker = QC::Worker.new
@worker = QC.default_worker_class.new

trap('INT') do
$stderr.puts("Received INT. Shutting down.")
Expand Down
12 changes: 12 additions & 0 deletions test/worker_test.rb
Expand Up @@ -27,6 +27,18 @@ def handle_failure(job,e)
end

class WorkerTest < QCTest
def test_qc_worker_is_the_default_worker
assert_equal QC::Worker, QC.default_worker_class
end

def test_default_worker_can_be_changed
original_worker = QC.default_worker_class
QC.default_worker_class = TestWorker

assert_equal TestWorker, QC.default_worker_class
ensure
QC.default_worker_class = original_worker
end

def test_work
QC.enqueue("TestObject.no_args")
Expand Down

0 comments on commit 37bac1e

Please sign in to comment.