Skip to content

Commit

Permalink
Rename Worker to Job, fixes #2160
Browse files Browse the repository at this point in the history
  • Loading branch information
mperham committed Jan 27, 2015
1 parent 67dc667 commit 708fedf
Show file tree
Hide file tree
Showing 30 changed files with 348 additions and 341 deletions.
49 changes: 49 additions & 0 deletions lib/generators/sidekiq/job_generator.rb
@@ -0,0 +1,49 @@
require 'rails/generators/named_base'

module Sidekiq
module Generators # :nodoc:
class JobGenerator < ::Rails::Generators::NamedBase # :nodoc:
desc 'This generator creates a Sidekiq Job in app/jobs and a corresponding test'

check_class_collision suffix: 'Job'

def self.default_generator_root
File.dirname(__FILE__)
end

def create_job_file
template 'job.rb.erb', File.join('app/jobs', class_path, "#{file_name}_job.rb")
end

def create_test_file
if defined?(RSpec)
create_job_spec
else
create_job_test
end
end

private

def create_job_spec
template_file = File.join(
'spec/jobs',
class_path,
"#{file_name}_job_spec.rb"
)
template 'job_spec.rb.erb', template_file
end

def create_job_test
template_file = File.join(
'test/jobs',
class_path,
"#{file_name}_job_test.rb"
)
template 'job_test.rb.erb', template_file
end


end
end
end
@@ -1,9 +1,9 @@
<% module_namespacing do -%>
class <%= class_name %>Worker
include Sidekiq::Worker
class <%= class_name %>Job
include Sidekiq::Job

def perform(*args)
# Do something
end
end
<% end -%>
<% end -%>
@@ -1,6 +1,6 @@
require 'rails_helper'
<% module_namespacing do -%>
RSpec.describe <%= class_name %>Worker, :type => :worker do
RSpec.describe <%= class_name %>Job, :type => :job do
pending "add some examples to (or delete) #{__FILE__}"
end
<% end -%>
<% end -%>
8 changes: 8 additions & 0 deletions lib/generators/sidekiq/templates/job_test.rb.erb
@@ -0,0 +1,8 @@
require_relative 'test_helper'
<% module_namespacing do -%>
class <%= class_name %>JobTest < MiniTest::Unit::TestCase
def test_example
skip "add some examples to (or delete) #{__FILE__}"
end
end
<% end -%>
8 changes: 0 additions & 8 deletions lib/generators/sidekiq/templates/worker_test.rb.erb

This file was deleted.

49 changes: 0 additions & 49 deletions lib/generators/sidekiq/worker_generator.rb

This file was deleted.

14 changes: 11 additions & 3 deletions lib/sidekiq.rb
Expand Up @@ -4,7 +4,7 @@

require 'sidekiq/logging'
require 'sidekiq/client'
require 'sidekiq/worker'
require 'sidekiq/job'
require 'sidekiq/redis_connection'

require 'json'
Expand Down Expand Up @@ -96,12 +96,20 @@ def self.server_middleware
@server_chain
end

def self.default_job_options=(hash)
@default_job_options = default_job_options.merge(hash.stringify_keys)
end

def self.default_job_options
defined?(@default_job_options) ? @default_job_options : { 'retry' => true, 'queue' => 'default' }
end

def self.default_worker_options=(hash)
@default_worker_options = default_worker_options.merge(hash.stringify_keys)
raise "This method has been renamed to default_job_options"
end

def self.default_worker_options
defined?(@default_worker_options) ? @default_worker_options : { 'retry' => true, 'queue' => 'default' }
raise "This method has been renamed to default_job_options"
end

def self.load_json(string)
Expand Down
10 changes: 5 additions & 5 deletions lib/sidekiq/api.rb
Expand Up @@ -178,7 +178,7 @@ def date_stat_hash(stat)
#
# queue = Sidekiq::Queue.new("mailer")
# queue.each do |job|
# job.klass # => 'MyWorker'
# job.klass # => 'MyJob'
# job.args # => [1, 2, 3]
# job.delete if job.jid == 'abcdef1234567890'
# end
Expand Down Expand Up @@ -229,7 +229,7 @@ def each(&block)
break if entries.empty?
page += 1
entries.each do |entry|
block.call Job.new(entry, @name)
block.call PendingJob.new(entry, @name)
end
deleted_size = initial_size - size
end
Expand All @@ -255,9 +255,9 @@ def clear
# sorted set.
#
# The job should be considered immutable but may be
# removed from the queue via Job#delete.
# removed from the queue via PendingJob#delete.
#
class Job
class PendingJob
KNOWN_WRAPPERS = [/\ASidekiq::Extensions::Delayed/, "ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper"]
attr_reader :item

Expand Down Expand Up @@ -346,7 +346,7 @@ def safe_load(content, default)
end
end

class SortedEntry < Job
class SortedEntry < PendingJob
attr_reader :score
attr_reader :parent

Expand Down
4 changes: 2 additions & 2 deletions lib/sidekiq/cli.rb
Expand Up @@ -259,7 +259,7 @@ def validate!
(File.directory?(options[:require]) && !File.exist?("#{options[:require]}/config/application.rb"))
logger.info "=================================================================="
logger.info " Please point sidekiq to a Rails 3/4 application or a Ruby file "
logger.info " to load your worker classes with -r [DIR|FILE]."
logger.info " to load your job classes with -r [DIR|FILE]."
logger.info "=================================================================="
logger.info @parser
die(1)
Expand Down Expand Up @@ -295,7 +295,7 @@ def parse_options(argv)
parse_queue opts, queue, weight
end

o.on '-r', '--require [PATH|DIR]', "Location of Rails application with workers or file to require" do |arg|
o.on '-r', '--require [PATH|DIR]', "Location of Rails application with jobs or file to require" do |arg|
opts[:require] = arg
end

Expand Down
30 changes: 15 additions & 15 deletions lib/sidekiq/client.rb
Expand Up @@ -11,7 +11,7 @@ class Client
# client.middleware do |chain|
# chain.use MyClientMiddleware
# end
# client.push('class' => 'SomeWorker', 'args' => [1,2,3])
# client.push('class' => 'SomeJob', 'args' => [1,2,3])
#
# All client instances default to the globally-defined
# Sidekiq.client_middleware but you can change as necessary.
Expand Down Expand Up @@ -47,7 +47,7 @@ def initialize(redis_pool=nil)
# The main method used to push a job to Redis. Accepts a number of options:
#
# queue - the named queue to use, default 'default'
# class - the worker class to call, required
# class - the job class to call, required
# args - an array of simple arguments to the perform method, must be JSON-serializable
# retry - whether to retry this job if it fails, true or false, default true
# backtrace - whether to save any error backtrace, default false
Expand All @@ -58,7 +58,7 @@ def initialize(redis_pool=nil)
# Returns a unique Job ID. If middleware stops the job, nil will be returned instead.
#
# Example:
# push('queue' => 'my_queue', 'class' => MyWorker, 'args' => ['foo', 1, :bat => 'bar'])
# push('queue' => 'my_queue', 'class' => MyJob, 'args' => ['foo', 1, :bat => 'bar'])
#
def push(item)
normed = normalize_item(item)
Expand Down Expand Up @@ -99,8 +99,8 @@ def push_bulk(items)
#
# pool = ConnectionPool.new { Redis.new }
# Sidekiq::Client.via(pool) do
# SomeWorker.perform_async(1,2,3)
# SomeOtherWorker.perform_async(1,2,3)
# SomeJob.perform_async(1,2,3)
# SomeOtherJob.perform_async(1,2,3)
# end
#
# Generally this is only needed for very large Sidekiq installs processing
Expand Down Expand Up @@ -132,10 +132,10 @@ def push_bulk(items)
end

# Resque compatibility helpers. Note all helpers
# should go through Worker#client_push.
# should go through Job#client_push.
#
# Example usage:
# Sidekiq::Client.enqueue(MyWorker, 'foo', 1, :bat => 'bar')
# Sidekiq::Client.enqueue(MyJob, 'foo', 1, :bat => 'bar')
#
# Messages are enqueued to the 'default' queue.
#
Expand All @@ -144,14 +144,14 @@ def enqueue(klass, *args)
end

# Example usage:
# Sidekiq::Client.enqueue_to(:queue_name, MyWorker, 'foo', 1, :bat => 'bar')
# Sidekiq::Client.enqueue_to(:queue_name, MyJob, 'foo', 1, :bat => 'bar')
#
def enqueue_to(queue, klass, *args)
klass.client_push('queue' => queue, 'class' => klass, 'args' => args)
end

# Example usage:
# Sidekiq::Client.enqueue_to_in(:queue_name, 3.minutes, MyWorker, 'foo', 1, :bat => 'bar')
# Sidekiq::Client.enqueue_to_in(:queue_name, 3.minutes, MyJob, 'foo', 1, :bat => 'bar')
#
def enqueue_to_in(queue, interval, klass, *args)
int = interval.to_f
Expand All @@ -165,7 +165,7 @@ def enqueue_to_in(queue, interval, klass, *args)
end

# Example usage:
# Sidekiq::Client.enqueue_in(3.minutes, MyWorker, 'foo', 1, :bat => 'bar')
# Sidekiq::Client.enqueue_in(3.minutes, MyJob, 'foo', 1, :bat => 'bar')
#
def enqueue_in(interval, klass, *args)
klass.perform_in(interval, *args)
Expand Down Expand Up @@ -197,26 +197,26 @@ def atomic_push(conn, payloads)
end
end

def process_single(worker_class, item)
def process_single(job_class, item)
queue = item['queue']

middleware.invoke(worker_class, item, queue, @redis_pool) do
middleware.invoke(job_class, item, queue, @redis_pool) do
item
end
end

def normalize_item(item)
raise(ArgumentError, "Message must be a Hash of the form: { 'class' => SomeWorker, 'args' => ['bob', 1, :foo => 'bar'] }") unless item.is_a?(Hash)
raise(ArgumentError, "Message must be a Hash of the form: { 'class' => SomeJob, 'args' => ['bob', 1, :foo => 'bar'] }") unless item.is_a?(Hash)
raise(ArgumentError, "Message must include a class and set of arguments: #{item.inspect}") if !item['class'] || !item['args']
raise(ArgumentError, "Message args must be an Array") unless item['args'].is_a?(Array)
raise(ArgumentError, "Message class must be either a Class or String representation of the class name") unless item['class'].is_a?(Class) || item['class'].is_a?(String)

if item['class'].is_a?(Class)
raise(ArgumentError, "Message must include a Sidekiq::Worker class, not class name: #{item['class'].ancestors.inspect}") if !item['class'].respond_to?('get_sidekiq_options')
raise(ArgumentError, "Message must include a Sidekiq::Job class, not class name: #{item['class'].ancestors.inspect}") if !item['class'].respond_to?('get_sidekiq_options')
normalized_item = item['class'].get_sidekiq_options.merge(item)
normalized_item['class'] = normalized_item['class'].to_s
else
normalized_item = Sidekiq.default_worker_options.merge(item)
normalized_item = Sidekiq.default_job_options.merge(item)
end

normalized_item['queue'] = normalized_item['queue'].to_s
Expand Down
2 changes: 1 addition & 1 deletion lib/sidekiq/extensions/action_mailer.rb
Expand Up @@ -10,7 +10,7 @@ module Extensions
# UserMailer.delay_for(5.days).send_welcome_email(new_user)
# UserMailer.delay_until(5.days.from_now).send_welcome_email(new_user)
class DelayedMailer
include Sidekiq::Worker
include Sidekiq::Job

def perform(yml)
(target, method_name, args) = YAML.load(yml)
Expand Down
2 changes: 1 addition & 1 deletion lib/sidekiq/extensions/active_record.rb
Expand Up @@ -12,7 +12,7 @@ module Extensions
# object to Redis. Your Sidekiq jobs should pass IDs, not entire instances.
# This is here for backwards compatibility with Delayed::Job only.
class DelayedModel
include Sidekiq::Worker
include Sidekiq::Job

def perform(yml)
(target, method_name, args) = YAML.load(yml)
Expand Down
2 changes: 1 addition & 1 deletion lib/sidekiq/extensions/class_methods.rb
Expand Up @@ -10,7 +10,7 @@ module Extensions
# Wikipedia.delay.download_changes_for(Date.today)
#
class DelayedClass
include Sidekiq::Worker
include Sidekiq::Job

def perform(yml)
(target, method_name, args) = YAML.load(yml)
Expand Down

0 comments on commit 708fedf

Please sign in to comment.