qu 0.1.4 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +24 -0
- data/Gemfile +3 -6
- data/README.md +1 -0
- data/lib/qu.rb +0 -8
- data/lib/qu/backend/immediate.rb +23 -0
- data/lib/qu/backend/spec.rb +0 -38
- data/lib/qu/version.rb +1 -1
- data/qu-airbrake.gemspec +20 -0
- data/qu-exceptional.gemspec +19 -0
- data/qu-mongo.gemspec +21 -0
- data/qu-rails.gemspec +19 -0
- data/qu-redis.gemspec +20 -0
- data/qu.gemspec +7 -5
- data/spec/qu/backend/mongo_spec.rb +77 -0
- data/spec/qu/backend/redis_spec.rb +61 -0
- data/spec/qu/failure/airbrake_spec.rb +30 -0
- data/spec/qu/failure/exceptional_spec.rb +50 -0
- metadata +21 -11
- data/lib/qu/railtie.rb +0 -13
data/ChangeLog
CHANGED
@@ -1,3 +1,24 @@
|
|
1
|
+
0.2.0 - 2012-06-13
|
2
|
+
|
3
|
+
Backwards-incompatible Changes:
|
4
|
+
|
5
|
+
* Remove #requeue from all backends. It was not used internally.
|
6
|
+
* Move implicit Rails dependency to it's own Gem, which you must declare now in your Gemfile.
|
7
|
+
|
8
|
+
gem 'qu-rails'
|
9
|
+
|
10
|
+
Enhancements
|
11
|
+
|
12
|
+
* qu-mongo: Add mongolab environment variable for automatic configuration on Heroku.
|
13
|
+
|
14
|
+
Bug Fixes:
|
15
|
+
|
16
|
+
* Fixing Immediate backend to satisfy the backend interface
|
17
|
+
|
18
|
+
|
19
|
+
https://github.com/bkeepers/qu/compare/v0.1.4...v0.2.0
|
20
|
+
|
21
|
+
|
1
22
|
0.1.4 - 2012-01-07
|
2
23
|
|
3
24
|
Enhancements:
|
@@ -10,6 +31,7 @@
|
|
10
31
|
|
11
32
|
https://github.com/bkeepers/qu/compare/v0.1.3...v0.1.4
|
12
33
|
|
34
|
+
|
13
35
|
0.1.3 - 2011-10-10
|
14
36
|
|
15
37
|
Bug Fixes:
|
@@ -28,6 +50,7 @@
|
|
28
50
|
|
29
51
|
https://github.com/bkeepers/qu/compare/v0.1.2..v0.1.3
|
30
52
|
|
53
|
+
|
31
54
|
0.1.2 - 2011-10-05
|
32
55
|
|
33
56
|
Bug Fixes:
|
@@ -36,6 +59,7 @@
|
|
36
59
|
|
37
60
|
https://github.com/bkeepers/qu/compare/v0.1.1...v0.1.2
|
38
61
|
|
62
|
+
|
39
63
|
0.1.1 - 2011-10-02
|
40
64
|
|
41
65
|
Bug Fixes:
|
data/Gemfile
CHANGED
@@ -3,18 +3,15 @@ gemspec :name => 'qu'
|
|
3
3
|
|
4
4
|
Dir['qu-*.gemspec'].each do |gemspec|
|
5
5
|
plugin = gemspec.scan(/qu-(.*)\.gemspec/).flatten.first
|
6
|
-
|
7
|
-
group plugin do
|
8
|
-
gemspec(:name => "qu-#{plugin}", :development_group => plugin)
|
9
|
-
end
|
6
|
+
gemspec(:name => "qu-#{plugin}", :development_group => plugin)
|
10
7
|
end
|
11
8
|
|
12
9
|
group :test do
|
13
10
|
gem 'SystemTimer', :platform => :mri_18
|
14
11
|
gem 'ruby-debug', :platform => :mri_18
|
15
|
-
gem '
|
12
|
+
gem 'debugger', :platform => :mri_19
|
16
13
|
gem 'rake'
|
17
14
|
gem 'rspec', '~> 2.0'
|
18
15
|
gem 'guard-rspec'
|
19
16
|
gem 'guard-bundler'
|
20
|
-
end
|
17
|
+
end
|
data/README.md
CHANGED
data/lib/qu.rb
CHANGED
data/lib/qu/backend/immediate.rb
CHANGED
@@ -13,6 +13,29 @@ module Qu
|
|
13
13
|
|
14
14
|
def failed(payload, error)
|
15
15
|
end
|
16
|
+
|
17
|
+
def register_worker(*)
|
18
|
+
end
|
19
|
+
|
20
|
+
def unregister_worker(*)
|
21
|
+
end
|
22
|
+
|
23
|
+
def clear(*)
|
24
|
+
end
|
25
|
+
|
26
|
+
def connection=(*)
|
27
|
+
end
|
28
|
+
|
29
|
+
def reserve(*)
|
30
|
+
end
|
31
|
+
|
32
|
+
def length(*)
|
33
|
+
0
|
34
|
+
end
|
35
|
+
|
36
|
+
def queues(*)
|
37
|
+
["default"]
|
38
|
+
end
|
16
39
|
end
|
17
40
|
end
|
18
41
|
end
|
data/lib/qu/backend/spec.rb
CHANGED
@@ -200,44 +200,6 @@ shared_examples_for 'a backend' do
|
|
200
200
|
end
|
201
201
|
end
|
202
202
|
|
203
|
-
describe 'requeue' do
|
204
|
-
context 'with a failed job' do
|
205
|
-
before do
|
206
|
-
subject.enqueue(payload)
|
207
|
-
subject.reserve(worker).id.should == payload.id
|
208
|
-
subject.failed(payload, Exception.new)
|
209
|
-
end
|
210
|
-
|
211
|
-
it 'should add the job back on the queue' do
|
212
|
-
subject.length(payload.queue).should == 0
|
213
|
-
subject.requeue(payload.id)
|
214
|
-
subject.length(payload.queue).should == 1
|
215
|
-
|
216
|
-
p = subject.reserve(worker)
|
217
|
-
p.should be_instance_of(Qu::Payload)
|
218
|
-
p.id.should == payload.id
|
219
|
-
p.klass.should == payload.klass
|
220
|
-
p.args.should == payload.args
|
221
|
-
end
|
222
|
-
|
223
|
-
it 'should remove the job from the failed jobs' do
|
224
|
-
subject.length('failed').should == 1
|
225
|
-
subject.requeue(payload.id)
|
226
|
-
subject.length('failed').should == 0
|
227
|
-
end
|
228
|
-
|
229
|
-
it 'should return the job' do
|
230
|
-
subject.requeue(payload.id).id.should == payload.id
|
231
|
-
end
|
232
|
-
end
|
233
|
-
|
234
|
-
context 'without a failed job' do
|
235
|
-
it 'should return false' do
|
236
|
-
subject.requeue('1').should be_false
|
237
|
-
end
|
238
|
-
end
|
239
|
-
end
|
240
|
-
|
241
203
|
describe 'register_worker' do
|
242
204
|
it 'should add worker to array of workers' do
|
243
205
|
subject.register_worker(worker)
|
data/lib/qu/version.rb
CHANGED
data/qu-airbrake.gemspec
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "qu/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "qu-airbrake"
|
7
|
+
s.version = Qu::VERSION
|
8
|
+
s.authors = ["Brandon Keepers", "Scott Ellard"]
|
9
|
+
s.email = ["brandon@opensoul.org"]
|
10
|
+
s.homepage = "http://github.com/bkeepers/qu"
|
11
|
+
s.summary = "Airbrake failure backend for qu"
|
12
|
+
s.description = "Airbrake failure backend for qu"
|
13
|
+
|
14
|
+
s.files = `git ls-files -- lib | grep airbrake`.split("\n")
|
15
|
+
s.require_paths = ["lib"]
|
16
|
+
|
17
|
+
s.add_dependency 'airbrake'
|
18
|
+
s.add_dependency 'i18n'
|
19
|
+
s.add_dependency 'qu', Qu::VERSION
|
20
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "qu/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "qu-exceptional"
|
7
|
+
s.version = Qu::VERSION
|
8
|
+
s.authors = ["Brandon Keepers"]
|
9
|
+
s.email = ["brandon@opensoul.org"]
|
10
|
+
s.homepage = "http://github.com/bkeepers/qu"
|
11
|
+
s.summary = "Exceptional failure backend for qu"
|
12
|
+
s.description = "Exceptional failure backend for qu"
|
13
|
+
|
14
|
+
s.files = `git ls-files -- lib | grep exceptional`.split("\n")
|
15
|
+
s.require_paths = ["lib"]
|
16
|
+
|
17
|
+
s.add_dependency 'exceptional'
|
18
|
+
s.add_dependency 'qu', Qu::VERSION
|
19
|
+
end
|
data/qu-mongo.gemspec
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "qu/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "qu-mongo"
|
7
|
+
s.version = Qu::VERSION
|
8
|
+
s.authors = ["Brandon Keepers"]
|
9
|
+
s.email = ["brandon@opensoul.org"]
|
10
|
+
s.homepage = "http://github.com/bkeepers/qu"
|
11
|
+
s.summary = "Mongo backend for qu"
|
12
|
+
s.description = "Mongo backend for qu"
|
13
|
+
|
14
|
+
s.files = `git ls-files -- lib | grep mongo`.split("\n")
|
15
|
+
s.require_paths = ["lib"]
|
16
|
+
|
17
|
+
s.add_dependency 'mongo'
|
18
|
+
s.add_dependency 'qu', Qu::VERSION
|
19
|
+
|
20
|
+
s.add_development_dependency 'bson_ext'
|
21
|
+
end
|
data/qu-rails.gemspec
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "qu/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "qu-rails"
|
7
|
+
s.version = Qu::VERSION
|
8
|
+
s.authors = ["Brandon Keepers"]
|
9
|
+
s.email = ["brandon@opensoul.org"]
|
10
|
+
s.homepage = "http://github.com/bkeepers/qu"
|
11
|
+
s.summary = "Rails integration for qu"
|
12
|
+
s.description = "Rails integration for qu"
|
13
|
+
|
14
|
+
s.files = `git ls-files -- lib | grep rails`.split("\n")
|
15
|
+
s.require_paths = ["lib"]
|
16
|
+
|
17
|
+
s.add_dependency 'rails', '~>3.0'
|
18
|
+
s.add_dependency 'qu', Qu::VERSION
|
19
|
+
end
|
data/qu-redis.gemspec
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "qu/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "qu-redis"
|
7
|
+
s.version = Qu::VERSION
|
8
|
+
s.authors = ["Brandon Keepers"]
|
9
|
+
s.email = ["brandon@opensoul.org"]
|
10
|
+
s.homepage = "http://github.com/bkeepers/qu"
|
11
|
+
s.summary = "Redis backend for qu"
|
12
|
+
s.description = "Redis backend for qu"
|
13
|
+
|
14
|
+
s.files = `git ls-files -- lib | grep redis`.split("\n")
|
15
|
+
s.require_paths = ["lib"]
|
16
|
+
|
17
|
+
s.add_dependency 'redis-namespace'
|
18
|
+
s.add_dependency 'simple_uuid'
|
19
|
+
s.add_dependency 'qu', Qu::VERSION
|
20
|
+
end
|
data/qu.gemspec
CHANGED
@@ -2,7 +2,9 @@
|
|
2
2
|
$:.push File.expand_path("../lib", __FILE__)
|
3
3
|
require "qu/version"
|
4
4
|
|
5
|
-
|
5
|
+
plugin_files = Dir['qu-*.gemspec'].map { |gemspec|
|
6
|
+
eval(File.read(gemspec)).files
|
7
|
+
}.flatten.uniq
|
6
8
|
|
7
9
|
Gem::Specification.new do |s|
|
8
10
|
s.name = "qu"
|
@@ -10,11 +12,11 @@ Gem::Specification.new do |s|
|
|
10
12
|
s.authors = ["Brandon Keepers"]
|
11
13
|
s.email = ["brandon@opensoul.org"]
|
12
14
|
s.homepage = "http://github.com/bkeepers/qu"
|
13
|
-
s.summary = %q{}
|
14
|
-
s.description = %q{}
|
15
|
+
s.summary = %q{a Ruby library for queuing and processing background jobs.}
|
16
|
+
s.description = %q{a Ruby library for queuing and processing background jobs with configurable backends.}
|
15
17
|
|
16
|
-
s.files = `git ls-files
|
17
|
-
s.test_files = `git ls-files -- spec
|
18
|
+
s.files = `git ls-files`.split("\n") - plugin_files
|
19
|
+
s.test_files = `git ls-files -- spec`.split("\n")
|
18
20
|
s.executables = `git ls-files -- bin`.split("\n").map{ |f| File.basename(f) }
|
19
21
|
s.require_paths = ["lib"]
|
20
22
|
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'qu-mongo'
|
3
|
+
|
4
|
+
describe Qu::Backend::Mongo do
|
5
|
+
it_should_behave_like 'a backend'
|
6
|
+
|
7
|
+
before do
|
8
|
+
ENV.delete('MONGOHQ_URL')
|
9
|
+
end
|
10
|
+
|
11
|
+
describe 'connection' do
|
12
|
+
it 'should default the qu database' do
|
13
|
+
subject.connection.should be_instance_of(Mongo::DB)
|
14
|
+
subject.connection.name.should == 'qu'
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'should use MONGOHQ_URL from heroku' do
|
18
|
+
Mongo::Connection.any_instance.stub(:connect)
|
19
|
+
ENV['MONGOHQ_URL'] = 'mongodb://user:pw@host:10060/quspec'
|
20
|
+
subject.connection.name.should == 'quspec'
|
21
|
+
# debugger
|
22
|
+
subject.connection.connection.host_to_try.should == ['host', 10060]
|
23
|
+
subject.connection.connection.auths.should == [{'db_name' => 'quspec', 'username' => 'user', 'password' => 'pw'}]
|
24
|
+
end
|
25
|
+
|
26
|
+
context "Connection Failure" do
|
27
|
+
let(:retries_number) { 3 }
|
28
|
+
let(:retries_frequency) { 5 }
|
29
|
+
|
30
|
+
before do
|
31
|
+
subject.max_retries = retries_number
|
32
|
+
subject.retry_frequency = retries_frequency
|
33
|
+
|
34
|
+
Mongo::DB.any_instance.stub(:[]).and_raise(Mongo::ConnectionFailure)
|
35
|
+
subject.stub(:sleep)
|
36
|
+
end
|
37
|
+
|
38
|
+
it "raise error" do
|
39
|
+
expect { subject.queues }.to raise_error(Mongo::ConnectionFailure)
|
40
|
+
end
|
41
|
+
|
42
|
+
it "trying to reconect" do
|
43
|
+
subject.database.should_receive(:[]).exactly(4).times.and_raise(Mongo::ConnectionFailure)
|
44
|
+
expect { subject.queues }.to raise_error
|
45
|
+
end
|
46
|
+
|
47
|
+
it "sleep between tries" do
|
48
|
+
subject.should_receive(:sleep).with(5).ordered
|
49
|
+
subject.should_receive(:sleep).with(10).ordered
|
50
|
+
subject.should_receive(:sleep).with(15).ordered
|
51
|
+
|
52
|
+
expect { subject.queues }.to raise_error
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe 'reserve' do
|
59
|
+
let(:worker) { Qu::Worker.new }
|
60
|
+
|
61
|
+
describe "on mongo >=2" do
|
62
|
+
it 'should return nil when no jobs exist' do
|
63
|
+
subject.clear
|
64
|
+
Mongo::Collection.any_instance.should_receive(:find_and_modify).and_return(nil)
|
65
|
+
lambda { subject.reserve(worker, :block => false).should be_nil }.should_not raise_error
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
describe 'on mongo <2' do
|
70
|
+
it 'should return nil when no jobs exist' do
|
71
|
+
subject.clear
|
72
|
+
Mongo::Collection.any_instance.should_receive(:find_and_modify).and_raise(Mongo::OperationFailure)
|
73
|
+
lambda { subject.reserve(worker, :block => false).should be_nil }.should_not raise_error
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'qu-redis'
|
3
|
+
|
4
|
+
describe Qu::Backend::Redis do
|
5
|
+
it_should_behave_like 'a backend'
|
6
|
+
|
7
|
+
let(:worker) { Qu::Worker.new('default') }
|
8
|
+
|
9
|
+
before do
|
10
|
+
ENV.delete('REDISTOGO_URL')
|
11
|
+
end
|
12
|
+
|
13
|
+
describe 'completed' do
|
14
|
+
it 'should delete job' do
|
15
|
+
subject.enqueue(Qu::Payload.new(:klass => SimpleJob))
|
16
|
+
job = subject.reserve(worker)
|
17
|
+
subject.redis.exists("job:#{job.id}").should be_true
|
18
|
+
subject.completed(job)
|
19
|
+
subject.redis.exists("job:#{job.id}").should be_false
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe 'clear_workers' do
|
24
|
+
before { subject.register_worker worker }
|
25
|
+
|
26
|
+
it 'should delete worker key' do
|
27
|
+
subject.redis.get("worker:#{worker.id}").should_not be_nil
|
28
|
+
subject.clear_workers
|
29
|
+
subject.redis.get("worker:#{worker.id}").should be_nil
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe 'connection' do
|
34
|
+
it 'should create default connection if one not provided' do
|
35
|
+
subject.connection.client.host.should == '127.0.0.1'
|
36
|
+
subject.connection.client.port.should == 6379
|
37
|
+
subject.connection.namespace.should == :qu
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'should use REDISTOGO_URL from heroku with namespace' do
|
41
|
+
ENV['REDISTOGO_URL'] = 'redis://0.0.0.0:9876'
|
42
|
+
subject.connection.client.host.should == '0.0.0.0'
|
43
|
+
subject.connection.client.port.should == 9876
|
44
|
+
subject.connection.namespace.should == :qu
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'should allow customizing the namespace' do
|
48
|
+
subject.namespace = :foobar
|
49
|
+
subject.connection.namespace.should == :foobar
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe 'clear' do
|
54
|
+
it 'should delete jobs' do
|
55
|
+
job = subject.enqueue(Qu::Payload.new(:klass => SimpleJob))
|
56
|
+
subject.redis.exists("job:#{job.id}").should be_true
|
57
|
+
subject.clear
|
58
|
+
subject.redis.exists("job:#{job.id}").should be_false
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
require 'qu-airbrake'
|
4
|
+
|
5
|
+
describe Qu::Failure::Airbrake do
|
6
|
+
|
7
|
+
let(:job) { Qu::Payload.new(:id => '123', :klass => SimpleJob, :args => ['987']) }
|
8
|
+
|
9
|
+
describe ".extra_stuff" do
|
10
|
+
it 'should return job data' do
|
11
|
+
described_class.extra_stuff(job).should == {
|
12
|
+
:parameters => {
|
13
|
+
:id => '123',
|
14
|
+
:queue => 'default',
|
15
|
+
:args => ['987'],
|
16
|
+
:class => 'SimpleJob'
|
17
|
+
}
|
18
|
+
}
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe '.create' do
|
23
|
+
let(:exception) { Exception.new }
|
24
|
+
|
25
|
+
it 'should send error' do
|
26
|
+
::Airbrake.should_receive(:notify_or_ignore).with(exception, described_class.extra_stuff(job))
|
27
|
+
described_class.create(job, exception)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'qu-exceptional'
|
3
|
+
|
4
|
+
describe Qu::Failure::Exceptional do
|
5
|
+
let(:job) { Qu::Payload.new(:id => '123', :klass => SimpleJob, :args => ['987']) }
|
6
|
+
|
7
|
+
describe Qu::Failure::Exceptional::ExceptionData do
|
8
|
+
subject { Qu::Failure::Exceptional::ExceptionData.new(job, Exception.new) }
|
9
|
+
|
10
|
+
it 'should include job data in the request' do
|
11
|
+
subject.extra_stuff.should == {
|
12
|
+
'request' => {
|
13
|
+
'parameters' => {
|
14
|
+
'id' => '123',
|
15
|
+
'queue' => 'default',
|
16
|
+
'args' => ['987'],
|
17
|
+
'class' => 'SimpleJob'
|
18
|
+
}
|
19
|
+
},
|
20
|
+
'rescue_block' => {
|
21
|
+
'name' => 'SimpleJob'
|
22
|
+
}
|
23
|
+
}
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe 'create' do
|
28
|
+
context 'with exceptional enabled' do
|
29
|
+
before do
|
30
|
+
Exceptional::Config.enabled = true
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'should send error' do
|
34
|
+
Exceptional::Remote.should_receive(:error).with(instance_of(Qu::Failure::Exceptional::ExceptionData))
|
35
|
+
described_class.create(job, Exception.new)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
context 'with exceptional disabled' do
|
40
|
+
before do
|
41
|
+
Exceptional::Config.enabled = false
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'should not send error' do
|
45
|
+
Exceptional::Remote.should_not_receive(:error)
|
46
|
+
described_class.create(job, Exception.new)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: qu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 2
|
9
|
+
- 0
|
10
|
+
version: 0.2.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Brandon Keepers
|
@@ -15,8 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-
|
19
|
-
default_executable:
|
18
|
+
date: 2012-06-13 00:00:00 Z
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
22
21
|
name: multi_json
|
@@ -32,7 +31,7 @@ dependencies:
|
|
32
31
|
version: "0"
|
33
32
|
type: :runtime
|
34
33
|
version_requirements: *id001
|
35
|
-
description:
|
34
|
+
description: a Ruby library for queuing and processing background jobs with configurable backends.
|
36
35
|
email:
|
37
36
|
- brandon@opensoul.org
|
38
37
|
executables: []
|
@@ -56,17 +55,24 @@ files:
|
|
56
55
|
- lib/qu/failure.rb
|
57
56
|
- lib/qu/logger.rb
|
58
57
|
- lib/qu/payload.rb
|
59
|
-
- lib/qu/railtie.rb
|
60
58
|
- lib/qu/tasks.rb
|
61
59
|
- lib/qu/version.rb
|
62
60
|
- lib/qu/worker.rb
|
61
|
+
- qu-airbrake.gemspec
|
62
|
+
- qu-exceptional.gemspec
|
63
|
+
- qu-mongo.gemspec
|
64
|
+
- qu-rails.gemspec
|
65
|
+
- qu-redis.gemspec
|
63
66
|
- qu.gemspec
|
64
67
|
- spec/qu/backend/immediate_spec.rb
|
68
|
+
- spec/qu/backend/mongo_spec.rb
|
69
|
+
- spec/qu/backend/redis_spec.rb
|
70
|
+
- spec/qu/failure/airbrake_spec.rb
|
71
|
+
- spec/qu/failure/exceptional_spec.rb
|
65
72
|
- spec/qu/payload_spec.rb
|
66
73
|
- spec/qu/worker_spec.rb
|
67
74
|
- spec/qu_spec.rb
|
68
75
|
- spec/spec_helper.rb
|
69
|
-
has_rdoc: true
|
70
76
|
homepage: http://github.com/bkeepers/qu
|
71
77
|
licenses: []
|
72
78
|
|
@@ -96,12 +102,16 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
96
102
|
requirements: []
|
97
103
|
|
98
104
|
rubyforge_project:
|
99
|
-
rubygems_version: 1.
|
105
|
+
rubygems_version: 1.8.15
|
100
106
|
signing_key:
|
101
107
|
specification_version: 3
|
102
|
-
summary:
|
108
|
+
summary: a Ruby library for queuing and processing background jobs.
|
103
109
|
test_files:
|
104
110
|
- spec/qu/backend/immediate_spec.rb
|
111
|
+
- spec/qu/backend/mongo_spec.rb
|
112
|
+
- spec/qu/backend/redis_spec.rb
|
113
|
+
- spec/qu/failure/airbrake_spec.rb
|
114
|
+
- spec/qu/failure/exceptional_spec.rb
|
105
115
|
- spec/qu/payload_spec.rb
|
106
116
|
- spec/qu/worker_spec.rb
|
107
117
|
- spec/qu_spec.rb
|