Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/pr/547'
Browse files Browse the repository at this point in the history
Conflicts:
	lib/delayed/backend/shared_spec.rb
  • Loading branch information
albus522 committed Sep 24, 2014
2 parents 2cfe2f5 + 0a381e5 commit af7fb40
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 9 deletions.
16 changes: 14 additions & 2 deletions README.md
Expand Up @@ -252,10 +252,22 @@ NewsletterJob = Struct.new(:text, :emails) do
end

def max_attempts
return 3
3
end
end
````
```
To set a default queue name for a custom job that overrides Delayed::Worker.default_queue_name, you can define a queue_name method on the job
```ruby
NewsletterJob = Struct.new(:text, :emails) do
def perform
emails.each { |e| NewsletterMailer.deliver_text_to_email(text, e) }
end

def queue_name
'newsletter_queue'
end
end
```


Hooks
Expand Down
16 changes: 10 additions & 6 deletions lib/delayed/backend/base.rb
Expand Up @@ -7,13 +7,17 @@ def self.included(base)

module ClassMethods
# Add a job to the queue
def enqueue(*args)
options = {
:priority => Delayed::Worker.default_priority,
:queue => Delayed::Worker.default_queue_name
}.merge!(args.extract_options!)

def enqueue(*args) # rubocop:disable CyclomaticComplexity
options = args.extract_options!
options[:payload_object] ||= args.shift
options[:priority] ||= Delayed::Worker.default_priority

if options[:queue].nil?
if options[:payload_object].respond_to?(:queue_name)
options[:queue] = options[:payload_object].queue_name
end
options[:queue] ||= Delayed::Worker.default_queue_name
end

if args.size > 0
warn '[DEPRECATION] Passing multiple arguments to `#enqueue` is deprecated. Pass a hash with :priority and :run_at.'
Expand Down
13 changes: 12 additions & 1 deletion lib/delayed/backend/shared_spec.rb
Expand Up @@ -14,6 +14,7 @@ def create_job(opts = {})
Delayed::Worker.min_priority = nil
Delayed::Worker.default_priority = 99
Delayed::Worker.delay_jobs = true
Delayed::Worker.default_queue_name = 'default_tracking'
SimpleJob.runs = 0
described_class.delete_all
end
Expand Down Expand Up @@ -62,9 +63,19 @@ def create_job(opts = {})
end

it 'is able to set queue' do
job = described_class.enqueue :payload_object => SimpleJob.new, :queue => 'tracking'
job = described_class.enqueue :payload_object => NamedQueueJob.new, :queue => 'tracking'
expect(job.queue).to eq('tracking')
end

it 'uses default queue' do
job = described_class.enqueue :payload_object => SimpleJob.new
expect(job.queue).to eq(Delayed::Worker.default_queue_name)
end

it "uses the payload object's queue" do
job = described_class.enqueue :payload_object => NamedQueueJob.new
expect(job.queue).to eq(NamedQueueJob.new.queue_name)
end
end

context 'with multiple arguments' do
Expand Down
6 changes: 6 additions & 0 deletions spec/sample_jobs.rb
Expand Up @@ -12,6 +12,12 @@ def perform
end
end

class NamedQueueJob < SimpleJob
def queue_name
'job_tracking'
end
end

class ErrorJob
cattr_accessor :runs
@runs = 0
Expand Down

0 comments on commit af7fb40

Please sign in to comment.