1
0
Fork 0
mirror of https://github.com/mperham/sidekiq.git synced 2022-11-09 13:52:34 -05:00

Implement generic Ruby support via simple require flag

Various cleanups
It's "assert_equal(expected, actual)"
This commit is contained in:
Mike Perham 2012-02-09 20:32:59 -08:00
parent 9bb382aaab
commit a1f78816a7
12 changed files with 49 additions and 77 deletions

2
.rvmrc
View file

@ -1,3 +1,3 @@
export RUBYOPT="-Ilib" export RUBYOPT="-Ilib:test"
export JRUBY_OPTS="--1.9" export JRUBY_OPTS="--1.9"
rvm use 1.9.3@sidekiq --create rvm use 1.9.3@sidekiq --create

View file

@ -1,34 +0,0 @@
PATH
remote: .
specs:
sidekiq (0.5.1)
celluloid
connection_pool
multi_json
redis
redis-namespace
GEM
remote: http://rubygems.org/
specs:
celluloid (0.8.0)
connection_pool (0.1.0)
minitest (2.11.1)
multi_json (1.0.4)
rake (0.9.2.2)
redis (2.2.2)
redis-namespace (1.1.0)
redis (< 3.0.0)
simplecov (0.5.4)
multi_json (~> 1.0.3)
simplecov-html (~> 0.5.3)
simplecov-html (0.5.3)
PLATFORMS
ruby
DEPENDENCIES
minitest
rake
sidekiq!
simplecov

View file

@ -1,4 +1,4 @@
require 'sidekiq/version' require 'sidekiq/version'
require 'sidekiq/client' require 'sidekiq/client'
require 'sidekiq/worker' require 'sidekiq/worker'
require 'sidekiq/rails' if defined?(Rails) require 'sidekiq/rails' if defined?(::Rails)

View file

@ -12,7 +12,7 @@ module Sidekiq
def initialize def initialize
parse_options parse_options
validate! validate!
boot_rails boot_system
end end
FOREVER = 2_000_000_000 FOREVER = 2_000_000_000
@ -37,10 +37,21 @@ module Sidekiq
private private
def boot_rails def detected_environment
ENV['RAILS_ENV'] = @options[:environment] || ENV['RAILS_ENV'] || 'development' @options[:environment] || ENV['RAILS_ENV'] || ENV['RACK_ENV'] || 'development'
require File.expand_path("#{@options[:rails]}/config/environment.rb") end
def boot_system
ENV['RACK_ENV'] = ENV['RAILS_ENV'] = detected_environment
raise ArgumentError, "#{@options[:require]} does not exist" if !File.exist?(@options[:require])
if File.directory?(@options[:require])
require File.expand_path("#{@options[:require]}/config/environment.rb")
::Rails.application.eager_load! ::Rails.application.eager_load!
else
require @options[:require]
end
end end
def validate! def validate!
@ -49,8 +60,12 @@ module Sidekiq
$DEBUG = @options[:verbose] $DEBUG = @options[:verbose]
if !File.exist?("#{@options[:rails]}/config/boot.rb") if !File.exist?(@options[:require]) &&
log "========== Please point sidekiq to a Rails 3 application ==========" !File.exist?("#{@options[:require]}/config/application.rb")
log "=================================================================="
log " Please point sidekiq to a Rails 3 application or a Ruby file "
log " to load your worker classes."
log "=================================================================="
log @parser log @parser
exit(1) exit(1)
end end
@ -61,7 +76,7 @@ module Sidekiq
:verbose => false, :verbose => false,
:queues => [], :queues => [],
:processor_count => 25, :processor_count => 25,
:rails => '.', :require => '.',
:environment => nil, :environment => nil,
} }
@ -85,12 +100,12 @@ module Sidekiq
@options[:server] = arg @options[:server] = arg
end end
o.on '-e', '--environment ENV', "Rails application environment" do |arg| o.on '-e', '--environment ENV', "Application environment" do |arg|
@options[:environment] = arg @options[:environment] = arg
end end
o.on '-r', '--rails PATH', "Location of Rails application with workers" do |arg| o.on '-r', '--require [PATH|DIR]', "Location of Rails application with workers or file to require" do |arg|
@options[:rails] = arg @options[:require] = arg
end end
o.on '-c', '--concurrency INT', "processor threads to use" do |arg| o.on '-c', '--concurrency INT', "processor threads to use" do |arg|

View file

@ -3,7 +3,7 @@ require 'redis'
require 'sidekiq/redis_connection' require 'sidekiq/redis_connection'
require 'sidekiq/middleware/chain' require 'sidekiq/middleware/chain'
require 'sidekiq/middleware/client/resque_web_compatability' require 'sidekiq/middleware/client/resque_web_compatibility'
require 'sidekiq/middleware/client/unique_jobs' require 'sidekiq/middleware/client/unique_jobs'
module Sidekiq module Sidekiq
@ -51,16 +51,10 @@ module Sidekiq
# #
# Sidekiq::Client.enqueue(MyWorker, 'foo', 1, :bat => 'bar') # Sidekiq::Client.enqueue(MyWorker, 'foo', 1, :bat => 'bar')
# #
# Messages are enqueued to the 'default' queue. Optionally, # Messages are enqueued to the 'default' queue.
# MyWorker can define a queue class method:
#
# def self.queue
# 'my_queue'
# end
# #
def self.enqueue(klass, *args) def self.enqueue(klass, *args)
queue = (klass.respond_to?(:queue) && klass.queue) || 'default' push('default', { 'class' => klass.name, 'args' => args })
push(queue, { 'class' => klass.name, 'args' => args })
end end
end end
end end

View file

@ -2,13 +2,14 @@ module Sidekiq
# Middleware is code configured to run before/after # Middleware is code configured to run before/after
# a message is processed. It is patterned after Rack # a message is processed. It is patterned after Rack
# middleware. Middleware exists for the client side # middleware. Middleware exists for the client side
# as well as the server side. # (pushing jobs onto the queue) as well as the server
# side (when jobs are actually processed).
# #
# Default middleware for the server side: # Default middleware for the server side:
# #
# Sidekiq::Processor.middleware.register do # Sidekiq::Processor.middleware.register do
# use Sidekiq::Airbrake # use Middleware::Server::Airbrake
# use Sidekiq::ActiveRecord # use Middleware::Server::ActiveRecord
# end # end
# #
# To add middleware for the client, do: # To add middleware for the client, do:

View file

@ -1,17 +1,16 @@
module Sidekiq module Sidekiq
module Middleware module Middleware
module Client module Client
class ResqueWebCompatability class ResqueWebCompatibility
def initialize(redis) def initialize(redis)
@redis = redis @redis = redis
end end
#Add job queue to list of queues resque web displays
def call(item, queue) def call(item, queue)
@redis.sadd('queues', queue) @redis.sadd('queues', queue)
yield yield
end end
end end
end end
end end

View file

@ -15,7 +15,7 @@ module Sidekiq
return if already_scheduled?(payload_hash) return if already_scheduled?(payload_hash)
@redis.multi do @redis.multi do
@redis.set(payload_hash, payload_hash) @redis.set(payload_hash, 1)
@redis.expire(payload_hash, HASH_KEY_EXPIRATION) @redis.expire(payload_hash, HASH_KEY_EXPIRATION)
end end

View file

@ -1,3 +1,3 @@
module Sidekiq module Sidekiq
VERSION = "0.5.1" VERSION = "0.6.0"
end end

View file

@ -12,13 +12,13 @@ class TestClient < MiniTest::Unit::TestCase
it 'does not push duplicate messages when configured for unique only' do it 'does not push duplicate messages when configured for unique only' do
Sidekiq::Client.ignore_duplicate_jobs = true Sidekiq::Client.ignore_duplicate_jobs = true
10.times { Sidekiq::Client.push('customqueue', 'class' => 'Foo', 'args' => [1, 2]) } 10.times { Sidekiq::Client.push('customqueue', 'class' => 'Foo', 'args' => [1, 2]) }
assert_equal Sidekiq::Client.redis.llen("queue:customqueue"), 1 assert_equal 1, Sidekiq::Client.redis.llen("queue:customqueue")
end end
it 'does push duplicate messages when not configured for unique only' do it 'does push duplicate messages when not configured for unique only' do
Sidekiq::Client.ignore_duplicate_jobs = false Sidekiq::Client.ignore_duplicate_jobs = false
10.times { Sidekiq::Client.push('customqueue2', 'class' => 'Foo', 'args' => [1, 2]) } 10.times { Sidekiq::Client.push('customqueue2', 'class' => 'Foo', 'args' => [1, 2]) }
assert_equal Sidekiq::Client.redis.llen("queue:customqueue2"), 10 assert_equal 10, Sidekiq::Client.redis.llen("queue:customqueue2")
end end
end end
@ -51,9 +51,6 @@ class TestClient < MiniTest::Unit::TestCase
class MyWorker class MyWorker
include Sidekiq::Worker include Sidekiq::Worker
def self.queue
'foo'
end
end end
it 'handles perform_async' do it 'handles perform_async' do
@ -64,7 +61,7 @@ class TestClient < MiniTest::Unit::TestCase
end end
it 'enqueues messages to redis' do it 'enqueues messages to redis' do
@redis.expect :rpush, 1, ['queue:foo', String] @redis.expect :rpush, 1, ['queue:default', String]
count = Sidekiq::Client.enqueue(MyWorker, 1, 2) count = Sidekiq::Client.enqueue(MyWorker, 1, 2)
assert count > 0 assert count > 0
@redis.verify @redis.verify

View file

@ -29,7 +29,7 @@ class TestMiddleware < MiniTest::Unit::TestCase
use CustomMiddleware, 1, [] use CustomMiddleware, 1, []
end end
assert_equal chain.entries.last.klass, CustomMiddleware assert_equal CustomMiddleware, chain.entries.last.klass
end end
class CustomWorker class CustomWorker
@ -58,7 +58,7 @@ class TestMiddleware < MiniTest::Unit::TestCase
processor = Sidekiq::Processor.new(@boss) processor = Sidekiq::Processor.new(@boss)
@boss.expect(:processor_done!, nil, [processor]) @boss.expect(:processor_done!, nil, [processor])
processor.process(msg) processor.process(msg)
assert_equal recorder.flatten, %w(0 before 1 before work_performed 1 after 0 after) assert_equal %w(0 before 1 before work_performed 1 after 0 after), recorder.flatten
end end
it 'allows middleware to abruptly stop processing rest of chain' do it 'allows middleware to abruptly stop processing rest of chain' do
@ -72,8 +72,8 @@ class TestMiddleware < MiniTest::Unit::TestCase
final_action = nil final_action = nil
chain.invoke { final_action = true } chain.invoke { final_action = true }
assert_equal final_action, nil assert_equal nil, final_action
assert_equal recorder, [] assert_equal [], recorder
end end
end end
end end