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"
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/client'
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
parse_options
validate!
boot_rails
boot_system
end
FOREVER = 2_000_000_000
@ -37,10 +37,21 @@ module Sidekiq
private
def boot_rails
ENV['RAILS_ENV'] = @options[:environment] || ENV['RAILS_ENV'] || 'development'
require File.expand_path("#{@options[:rails]}/config/environment.rb")
::Rails.application.eager_load!
def detected_environment
@options[:environment] || ENV['RAILS_ENV'] || ENV['RACK_ENV'] || 'development'
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!
else
require @options[:require]
end
end
def validate!
@ -49,8 +60,12 @@ module Sidekiq
$DEBUG = @options[:verbose]
if !File.exist?("#{@options[:rails]}/config/boot.rb")
log "========== Please point sidekiq to a Rails 3 application =========="
if !File.exist?(@options[:require]) &&
!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
exit(1)
end
@ -61,7 +76,7 @@ module Sidekiq
:verbose => false,
:queues => [],
:processor_count => 25,
:rails => '.',
:require => '.',
:environment => nil,
}
@ -85,12 +100,12 @@ module Sidekiq
@options[:server] = arg
end
o.on '-e', '--environment ENV', "Rails application environment" do |arg|
o.on '-e', '--environment ENV', "Application environment" do |arg|
@options[:environment] = arg
end
o.on '-r', '--rails PATH', "Location of Rails application with workers" do |arg|
@options[:rails] = arg
o.on '-r', '--require [PATH|DIR]', "Location of Rails application with workers or file to require" do |arg|
@options[:require] = arg
end
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/middleware/chain'
require 'sidekiq/middleware/client/resque_web_compatability'
require 'sidekiq/middleware/client/resque_web_compatibility'
require 'sidekiq/middleware/client/unique_jobs'
module Sidekiq
@ -51,16 +51,10 @@ module Sidekiq
#
# Sidekiq::Client.enqueue(MyWorker, 'foo', 1, :bat => 'bar')
#
# Messages are enqueued to the 'default' queue. Optionally,
# MyWorker can define a queue class method:
#
# def self.queue
# 'my_queue'
# end
# Messages are enqueued to the 'default' queue.
#
def self.enqueue(klass, *args)
queue = (klass.respond_to?(:queue) && klass.queue) || 'default'
push(queue, { 'class' => klass.name, 'args' => args })
push('default', { 'class' => klass.name, 'args' => args })
end
end
end

View file

@ -2,13 +2,14 @@ module Sidekiq
# Middleware is code configured to run before/after
# a message is processed. It is patterned after Rack
# 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:
#
# Sidekiq::Processor.middleware.register do
# use Sidekiq::Airbrake
# use Sidekiq::ActiveRecord
# use Middleware::Server::Airbrake
# use Middleware::Server::ActiveRecord
# end
#
# To add middleware for the client, do:

View file

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

View file

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

View file

@ -13,8 +13,8 @@ module Sidekiq
def send_to_airbrake(msg, ex)
::Airbrake.notify(:error_class => ex.class.name,
:error_message => "#{ex.class.name}: #{ex.message}",
:parameters => msg)
:error_message => "#{ex.class.name}: #{ex.message}",
:parameters => msg)
end
end
end

View file

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

View file

@ -12,13 +12,13 @@ class TestClient < MiniTest::Unit::TestCase
it 'does not push duplicate messages when configured for unique only' do
Sidekiq::Client.ignore_duplicate_jobs = true
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
it 'does push duplicate messages when not configured for unique only' do
Sidekiq::Client.ignore_duplicate_jobs = false
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
@ -51,9 +51,6 @@ class TestClient < MiniTest::Unit::TestCase
class MyWorker
include Sidekiq::Worker
def self.queue
'foo'
end
end
it 'handles perform_async' do
@ -64,7 +61,7 @@ class TestClient < MiniTest::Unit::TestCase
end
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)
assert count > 0
@redis.verify

View file

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