quebert 0.0.6 → 0.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile +2 -2
- data/README.rdoc +2 -0
- data/Rakefile +0 -2
- data/VERSION +1 -1
- data/lib/quebert/async_sender/active_record.rb +2 -2
- data/lib/quebert/async_sender/instance.rb +2 -2
- data/lib/quebert/async_sender/object.rb +2 -2
- data/lib/quebert/backend/beanstalk.rb +2 -2
- data/lib/quebert/backend/in_process.rb +1 -1
- data/lib/quebert/backend/sync.rb +1 -1
- data/lib/quebert/controller/beanstalk.rb +14 -2
- data/lib/quebert/job.rb +23 -1
- data/lib/quebert/serializer.rb +10 -3
- data/lib/quebert/worker.rb +2 -1
- data/quebert.gemspec +64 -60
- data/spec/async_sender_spec.rb +6 -0
- data/spec/consumer_spec.rb +9 -0
- data/spec/job_spec.rb +31 -2
- data/spec/serializer_spec.rb +8 -1
- data/spec/support/active_record.rb +4 -0
- metadata +45 -18
- data/.gitignore +0 -22
data/Gemfile
CHANGED
data/README.rdoc
CHANGED
@@ -2,6 +2,8 @@
|
|
2
2
|
|
3
3
|
async_observer is great, but is dated and doesn't really support running jobs outside of the async_send idiom. Quebert is an attempt to mix how jobs are run in other popular worker queue frameworks, like resque and dj, with async_observer so that you can have it both ways.
|
4
4
|
|
5
|
+
Quebert is a serious project. Its used in a production environment at Poll Everywhere to handle everything from SMS message processing to account downgrades.
|
6
|
+
|
5
7
|
A worker queue framework designed around Beanstalk. Features include:
|
6
8
|
|
7
9
|
= Features
|
data/Rakefile
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.8
|
@@ -4,7 +4,7 @@ module Quebert
|
|
4
4
|
# I'm not sure if I want to do this or build serializers per type of object...
|
5
5
|
module ActiveRecord
|
6
6
|
class RecordJob < Job
|
7
|
-
def perform(record, meth, args)
|
7
|
+
def perform(record, meth, *args)
|
8
8
|
record.send(meth, *args)
|
9
9
|
end
|
10
10
|
end
|
@@ -17,7 +17,7 @@ module Quebert
|
|
17
17
|
module InstanceMethods
|
18
18
|
# The meat of dealing with ActiveRecord instances.
|
19
19
|
def async_send(meth, *args)
|
20
|
-
RecordJob.new(self, meth, args).enqueue
|
20
|
+
RecordJob.new(self, meth, *args).enqueue
|
21
21
|
end
|
22
22
|
end
|
23
23
|
end
|
@@ -3,7 +3,7 @@ module Quebert
|
|
3
3
|
# Perform jobs on instances of classes
|
4
4
|
module Instance
|
5
5
|
class InstanceJob < Job
|
6
|
-
def perform(klass, init_args, meth, args)
|
6
|
+
def perform(klass, init_args, meth, *args)
|
7
7
|
Support.constantize(klass).new(init_args).send(meth, *args)
|
8
8
|
end
|
9
9
|
end
|
@@ -44,7 +44,7 @@ module Quebert
|
|
44
44
|
end
|
45
45
|
|
46
46
|
def async_send(meth, *args)
|
47
|
-
InstanceJob.new(self.class.name, @_init_args, meth, args).enqueue
|
47
|
+
InstanceJob.new(self.class.name, @_init_args, meth, *args).enqueue
|
48
48
|
end
|
49
49
|
end
|
50
50
|
end
|
@@ -3,7 +3,7 @@ module Quebert
|
|
3
3
|
# Perform jobs on Object methods (not instances)
|
4
4
|
module Object
|
5
5
|
class ObjectJob < Job
|
6
|
-
def perform(const, meth, args)
|
6
|
+
def perform(const, meth, *args)
|
7
7
|
Support.constantize(const).send(meth, *args)
|
8
8
|
end
|
9
9
|
end
|
@@ -14,7 +14,7 @@ module Quebert
|
|
14
14
|
|
15
15
|
module ClassMethods
|
16
16
|
def async_send(meth, *args)
|
17
|
-
ObjectJob.new(self.name, meth, args).enqueue
|
17
|
+
ObjectJob.new(self.name, meth, *args).enqueue
|
18
18
|
end
|
19
19
|
end
|
20
20
|
end
|
data/lib/quebert/backend/sync.rb
CHANGED
@@ -6,7 +6,19 @@ module Quebert
|
|
6
6
|
|
7
7
|
def initialize(beanstalk_job, queue)
|
8
8
|
@beanstalk_job, @queue = beanstalk_job, queue
|
9
|
-
|
9
|
+
|
10
|
+
begin
|
11
|
+
@job = Job.from_json(beanstalk_job.body)
|
12
|
+
rescue Job::Delete
|
13
|
+
beanstalk_job.delete
|
14
|
+
rescue Job::Release
|
15
|
+
beanstalk_job.release nil, @job.delay
|
16
|
+
rescue Job::Bury
|
17
|
+
beanstalk_job.bury
|
18
|
+
rescue Exception => e
|
19
|
+
beanstalk_job.bury
|
20
|
+
raise e
|
21
|
+
end
|
10
22
|
end
|
11
23
|
|
12
24
|
def perform
|
@@ -17,7 +29,7 @@ module Quebert
|
|
17
29
|
rescue Job::Delete
|
18
30
|
beanstalk_job.delete
|
19
31
|
rescue Job::Release
|
20
|
-
beanstalk_job.release
|
32
|
+
beanstalk_job.release nil, @job.delay
|
21
33
|
rescue Job::Bury
|
22
34
|
beanstalk_job.bury
|
23
35
|
rescue Exception => e
|
data/lib/quebert/job.rb
CHANGED
@@ -3,7 +3,12 @@ require 'json'
|
|
3
3
|
module Quebert
|
4
4
|
class Job
|
5
5
|
attr_reader :args
|
6
|
+
attr_accessor :priority, :delay, :ttr
|
6
7
|
|
8
|
+
DEFAULT_JOB_PRIORITY = 65536
|
9
|
+
DEFAULT_JOB_DELAY = 0
|
10
|
+
DEFAULT_JOB_TTR = 120
|
11
|
+
|
7
12
|
NotImplemented = Class.new(StandardError)
|
8
13
|
|
9
14
|
Action = Class.new(Exception)
|
@@ -13,6 +18,23 @@ module Quebert
|
|
13
18
|
Release = Class.new(Action)
|
14
19
|
|
15
20
|
def initialize(*args)
|
21
|
+
opts = args.last.is_a?(::Hash) ? args.pop : nil
|
22
|
+
|
23
|
+
@priority = DEFAULT_JOB_PRIORITY
|
24
|
+
@delay = DEFAULT_JOB_DELAY
|
25
|
+
@ttr = DEFAULT_JOB_TTR
|
26
|
+
|
27
|
+
if opts
|
28
|
+
beanstalk_opts = opts.delete(:beanstalk)
|
29
|
+
args << opts unless opts.empty?
|
30
|
+
|
31
|
+
if beanstalk_opts
|
32
|
+
@priority = beanstalk_opts[:priority] if beanstalk_opts[:priority]
|
33
|
+
@delay = beanstalk_opts[:delay] if beanstalk_opts[:delay]
|
34
|
+
@ttr = beanstalk_opts[:ttr] if beanstalk_opts[:ttr]
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
16
38
|
@args = args.dup.freeze
|
17
39
|
end
|
18
40
|
|
@@ -26,7 +48,7 @@ module Quebert
|
|
26
48
|
end
|
27
49
|
|
28
50
|
def enqueue
|
29
|
-
self.class.backend.put self
|
51
|
+
self.class.backend.put self, @priority, @delay, @ttr
|
30
52
|
end
|
31
53
|
|
32
54
|
def to_json
|
data/lib/quebert/serializer.rb
CHANGED
@@ -6,13 +6,20 @@ module Quebert
|
|
6
6
|
def self.serialize(job)
|
7
7
|
{
|
8
8
|
'job' => job.class.name,
|
9
|
-
'args' => serialize_args(job.args)
|
9
|
+
'args' => serialize_args(job.args),
|
10
|
+
'priority' => job.priority,
|
11
|
+
'delay' => job.delay,
|
12
|
+
'ttr' => job.ttr
|
10
13
|
}
|
11
14
|
end
|
12
15
|
|
13
16
|
def self.deserialize(hash)
|
14
17
|
hash = Support.stringify_keys(hash)
|
15
|
-
Support.constantize(hash['job']).new(*deserialize_args(hash['args']))
|
18
|
+
job = Support.constantize(hash['job']).new(*deserialize_args(hash['args']))
|
19
|
+
job.priority = hash['priority']
|
20
|
+
job.delay = hash['delay']
|
21
|
+
job.ttr = hash['ttr']
|
22
|
+
job
|
16
23
|
end
|
17
24
|
|
18
25
|
private
|
@@ -58,7 +65,7 @@ module Quebert
|
|
58
65
|
hash = Support.stringify_keys(hash)
|
59
66
|
model = Support.constantize(hash.delete('model'))
|
60
67
|
if attrs = Support.stringify_keys(hash.delete('attributes'))
|
61
|
-
if id =
|
68
|
+
if id = attrs.delete('id')
|
62
69
|
# This has been persisited, so just find it from the db
|
63
70
|
model.find(id)
|
64
71
|
else
|
data/lib/quebert/worker.rb
CHANGED
@@ -15,7 +15,8 @@ module Quebert
|
|
15
15
|
logger.info "Worker pid##{Process.pid} started with #{backend.class.name} backend"
|
16
16
|
while controller = backend.reserve do
|
17
17
|
begin
|
18
|
-
log controller.job, "performing with args #{controller.job.args.inspect}"
|
18
|
+
log controller.job, "performing with args #{controller.job.args.inspect}."
|
19
|
+
log controller.job, "Priority: #{controller.beanstalk_job.pri}, Delay: #{controller.beanstalk_job.delay}, TTR: #{controller.beanstalk_job.ttr}" if controller.respond_to?(:beanstalk_job)
|
19
20
|
controller.perform
|
20
21
|
log controller.job, "complete"
|
21
22
|
rescue Exception => e
|
data/quebert.gemspec
CHANGED
@@ -1,88 +1,86 @@
|
|
1
1
|
# Generated by jeweler
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{quebert}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.8"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Brad Gessler"]
|
12
|
-
s.date = %q{
|
12
|
+
s.date = %q{2011-09-16}
|
13
13
|
s.default_executable = %q{quebert}
|
14
14
|
s.description = %q{A worker queue framework built around beanstalkd}
|
15
15
|
s.email = %q{brad@bradgessler.com}
|
16
16
|
s.executables = ["quebert"]
|
17
17
|
s.extra_rdoc_files = [
|
18
18
|
"LICENSE",
|
19
|
-
|
19
|
+
"README.rdoc"
|
20
20
|
]
|
21
21
|
s.files = [
|
22
22
|
".document",
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
"spec/worker_spec.rb"
|
23
|
+
"Gemfile",
|
24
|
+
"LICENSE",
|
25
|
+
"README.rdoc",
|
26
|
+
"Rakefile",
|
27
|
+
"VERSION",
|
28
|
+
"bin/quebert",
|
29
|
+
"lib/quebert.rb",
|
30
|
+
"lib/quebert/async_sender.rb",
|
31
|
+
"lib/quebert/async_sender/active_record.rb",
|
32
|
+
"lib/quebert/async_sender/class.rb",
|
33
|
+
"lib/quebert/async_sender/instance.rb",
|
34
|
+
"lib/quebert/async_sender/object.rb",
|
35
|
+
"lib/quebert/backend.rb",
|
36
|
+
"lib/quebert/backend/beanstalk.rb",
|
37
|
+
"lib/quebert/backend/in_process.rb",
|
38
|
+
"lib/quebert/backend/sync.rb",
|
39
|
+
"lib/quebert/command_line_runner.rb",
|
40
|
+
"lib/quebert/configuration.rb",
|
41
|
+
"lib/quebert/controller.rb",
|
42
|
+
"lib/quebert/controller/base.rb",
|
43
|
+
"lib/quebert/controller/beanstalk.rb",
|
44
|
+
"lib/quebert/job.rb",
|
45
|
+
"lib/quebert/serializer.rb",
|
46
|
+
"lib/quebert/support.rb",
|
47
|
+
"lib/quebert/support/pid_file.rb",
|
48
|
+
"lib/quebert/support/registry.rb",
|
49
|
+
"lib/quebert/worker.rb",
|
50
|
+
"quebert.gemspec",
|
51
|
+
"spec/async_sender_spec.rb",
|
52
|
+
"spec/backend_spec.rb",
|
53
|
+
"spec/command_line_runner_spec.rb",
|
54
|
+
"spec/configuration_spec.rb",
|
55
|
+
"spec/consumer_spec.rb",
|
56
|
+
"spec/job_spec.rb",
|
57
|
+
"spec/quebert_spec.rb",
|
58
|
+
"spec/serializer_spec.rb",
|
59
|
+
"spec/spec.opts",
|
60
|
+
"spec/spec_helper.rb",
|
61
|
+
"spec/support/active_record.rb",
|
62
|
+
"spec/support/jobs.rb",
|
63
|
+
"spec/support_spec.rb",
|
64
|
+
"spec/worker_spec.rb"
|
66
65
|
]
|
67
66
|
s.homepage = %q{http://github.com/bradgessler/quebert}
|
68
|
-
s.rdoc_options = ["--charset=UTF-8"]
|
69
67
|
s.require_paths = ["lib"]
|
70
68
|
s.rubygems_version = %q{1.3.7}
|
71
69
|
s.summary = %q{A worker queue framework built around beanstalkd}
|
72
70
|
s.test_files = [
|
73
71
|
"spec/async_sender_spec.rb",
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
72
|
+
"spec/backend_spec.rb",
|
73
|
+
"spec/command_line_runner_spec.rb",
|
74
|
+
"spec/configuration_spec.rb",
|
75
|
+
"spec/consumer_spec.rb",
|
76
|
+
"spec/job_spec.rb",
|
77
|
+
"spec/quebert_spec.rb",
|
78
|
+
"spec/serializer_spec.rb",
|
79
|
+
"spec/spec_helper.rb",
|
80
|
+
"spec/support/active_record.rb",
|
81
|
+
"spec/support/jobs.rb",
|
82
|
+
"spec/support_spec.rb",
|
83
|
+
"spec/worker_spec.rb"
|
86
84
|
]
|
87
85
|
|
88
86
|
if s.respond_to? :specification_version then
|
@@ -90,15 +88,21 @@ Gem::Specification.new do |s|
|
|
90
88
|
s.specification_version = 3
|
91
89
|
|
92
90
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
91
|
+
s.add_runtime_dependency(%q<json>, [">= 0"])
|
92
|
+
s.add_runtime_dependency(%q<beanstalk-client>, [">= 0"])
|
93
93
|
s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
|
94
94
|
s.add_runtime_dependency(%q<json>, [">= 0"])
|
95
95
|
s.add_runtime_dependency(%q<beanstalk-client>, [">= 0"])
|
96
96
|
else
|
97
|
+
s.add_dependency(%q<json>, [">= 0"])
|
98
|
+
s.add_dependency(%q<beanstalk-client>, [">= 0"])
|
97
99
|
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
98
100
|
s.add_dependency(%q<json>, [">= 0"])
|
99
101
|
s.add_dependency(%q<beanstalk-client>, [">= 0"])
|
100
102
|
end
|
101
103
|
else
|
104
|
+
s.add_dependency(%q<json>, [">= 0"])
|
105
|
+
s.add_dependency(%q<beanstalk-client>, [">= 0"])
|
102
106
|
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
103
107
|
s.add_dependency(%q<json>, [">= 0"])
|
104
108
|
s.add_dependency(%q<beanstalk-client>, [">= 0"])
|
data/spec/async_sender_spec.rb
CHANGED
@@ -79,4 +79,10 @@ describe AsyncSender::ActiveRecord do
|
|
79
79
|
@q.reserve.perform.should eql(email)
|
80
80
|
end
|
81
81
|
|
82
|
+
it "should async_send and successfully serialize param object" do
|
83
|
+
user = User.new(:first_name => 'Brad')
|
84
|
+
user2 = User.new(:first_name => 'Steel')
|
85
|
+
user.async_send(:email, user2)
|
86
|
+
@q.reserve.perform.first_name.should eql('Steel')
|
87
|
+
end
|
82
88
|
end
|
data/spec/consumer_spec.rb
CHANGED
@@ -38,6 +38,15 @@ describe Controller::Beanstalk do
|
|
38
38
|
@q.peek_buried.should_not be_nil
|
39
39
|
end
|
40
40
|
|
41
|
+
it "should bury an AR job if an exception occurs deserializing it" do
|
42
|
+
@user = User.new(:first_name => "John", :last_name => "Doe", :email => "jdoe@gmail.com")
|
43
|
+
@user.id = 1
|
44
|
+
@q.put Serializer::ActiveRecord.serialize(@user)
|
45
|
+
@q.peek_ready.should_not be_nil
|
46
|
+
lambda{ @q.reserve.perform }.should raise_exception
|
47
|
+
@q.peek_buried.should_not be_nil
|
48
|
+
end
|
49
|
+
|
41
50
|
context "job actions" do
|
42
51
|
it "should delete job" do
|
43
52
|
@q.put DeleteJob.new
|
data/spec/job_spec.rb
CHANGED
@@ -55,6 +55,35 @@ describe Quebert::Job do
|
|
55
55
|
Adder.new(1,2,3).enqueue
|
56
56
|
}.should change(@q, :size).by(1)
|
57
57
|
end
|
58
|
-
|
59
|
-
|
58
|
+
|
59
|
+
context "beanstalk backend" do
|
60
|
+
before(:all) do
|
61
|
+
Quebert.serializers.register 'ActiveRecord::Base', Serializer::ActiveRecord
|
62
|
+
|
63
|
+
@q = Backend::Beanstalk.new('localhost:11300','quebert-test')
|
64
|
+
|
65
|
+
Quebert::AsyncSender::ActiveRecord::RecordJob.backend = @q
|
66
|
+
Quebert::AsyncSender::Object::ObjectJob.backend = @q
|
67
|
+
|
68
|
+
@q.drain!
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should enqueue and honor beanstalk options" do
|
72
|
+
user = User.new(:first_name => "Steel")
|
73
|
+
user.async_send(:email, "somebody", nil, nil, :beanstalk => {:priority => 1, :delay => 2, :ttr => 300})
|
74
|
+
job = @q.reserve
|
75
|
+
job.beanstalk_job.pri.should eql(1)
|
76
|
+
job.beanstalk_job.delay.should eql(2)
|
77
|
+
job.beanstalk_job.ttr.should eql(300)
|
78
|
+
end
|
79
|
+
|
80
|
+
it "should enqueue and honor beanstalk options" do
|
81
|
+
User.async_send(:emailizer, "somebody", nil, nil, :beanstalk => {:priority => 1, :delay => 2, :ttr => 300})
|
82
|
+
job = @q.reserve
|
83
|
+
job.beanstalk_job.pri.should eql(1)
|
84
|
+
job.beanstalk_job.delay.should eql(2)
|
85
|
+
job.beanstalk_job.ttr.should eql(300)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
60
89
|
end
|
data/spec/serializer_spec.rb
CHANGED
@@ -16,6 +16,7 @@ describe Serializer::ActiveRecord do
|
|
16
16
|
it "should deserialize" do
|
17
17
|
u = Serializer::ActiveRecord.deserialize(Serializer::ActiveRecord.serialize(@user))
|
18
18
|
u.first_name.should eql('Tom')
|
19
|
+
u.id.should eql(@user.id)
|
19
20
|
end
|
20
21
|
end
|
21
22
|
|
@@ -40,7 +41,7 @@ end
|
|
40
41
|
|
41
42
|
describe Serializer::Job do
|
42
43
|
before(:all) do
|
43
|
-
@args = [100, User.new(:first_name => 'Brad')]
|
44
|
+
@args = [100, User.new(:first_name => 'Brad'), {:beanstalk => {:priority => 1, :delay => 2, :ttr => 300}}]
|
44
45
|
@job = Job.new(*@args)
|
45
46
|
end
|
46
47
|
|
@@ -50,11 +51,17 @@ describe Serializer::Job do
|
|
50
51
|
h['args'][0]['payload'].should eql(100)
|
51
52
|
h['args'][1]['payload'].should eql(Serializer::ActiveRecord.serialize(@args[1]))
|
52
53
|
h['args'][1]['serializer'].should eql('Quebert::Serializer::ActiveRecord')
|
54
|
+
h['priority'].should eql(1)
|
55
|
+
h['delay'].should eql(2)
|
56
|
+
h['ttr'].should eql(300)
|
53
57
|
end
|
54
58
|
|
55
59
|
it "should deserialize job" do
|
56
60
|
job = Serializer::Job.deserialize(Serializer::Job.serialize(@job))
|
57
61
|
job.args[0].should eql(100)
|
58
62
|
job.args[1].first_name.should eql('Brad')
|
63
|
+
job.delay.should eql(2)
|
64
|
+
job.priority.should eql(1)
|
65
|
+
job.ttr.should eql(300)
|
59
66
|
end
|
60
67
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: quebert
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 15
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 8
|
10
|
+
version: 0.0.8
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Brad Gessler
|
@@ -15,13 +15,39 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
18
|
+
date: 2011-09-16 00:00:00 -07:00
|
19
19
|
default_executable: quebert
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
|
-
name: rspec
|
23
|
-
prerelease: false
|
24
22
|
requirement: &id001 !ruby/object:Gem::Requirement
|
23
|
+
none: false
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
hash: 3
|
28
|
+
segments:
|
29
|
+
- 0
|
30
|
+
version: "0"
|
31
|
+
type: :runtime
|
32
|
+
name: json
|
33
|
+
prerelease: false
|
34
|
+
version_requirements: *id001
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
37
|
+
none: false
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
hash: 3
|
42
|
+
segments:
|
43
|
+
- 0
|
44
|
+
version: "0"
|
45
|
+
type: :runtime
|
46
|
+
name: beanstalk-client
|
47
|
+
prerelease: false
|
48
|
+
version_requirements: *id002
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
25
51
|
none: false
|
26
52
|
requirements:
|
27
53
|
- - ">="
|
@@ -33,11 +59,11 @@ dependencies:
|
|
33
59
|
- 9
|
34
60
|
version: 1.2.9
|
35
61
|
type: :development
|
36
|
-
|
37
|
-
- !ruby/object:Gem::Dependency
|
38
|
-
name: json
|
62
|
+
name: rspec
|
39
63
|
prerelease: false
|
40
|
-
|
64
|
+
version_requirements: *id003
|
65
|
+
- !ruby/object:Gem::Dependency
|
66
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
41
67
|
none: false
|
42
68
|
requirements:
|
43
69
|
- - ">="
|
@@ -47,11 +73,11 @@ dependencies:
|
|
47
73
|
- 0
|
48
74
|
version: "0"
|
49
75
|
type: :runtime
|
50
|
-
|
51
|
-
- !ruby/object:Gem::Dependency
|
52
|
-
name: beanstalk-client
|
76
|
+
name: json
|
53
77
|
prerelease: false
|
54
|
-
|
78
|
+
version_requirements: *id004
|
79
|
+
- !ruby/object:Gem::Dependency
|
80
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
55
81
|
none: false
|
56
82
|
requirements:
|
57
83
|
- - ">="
|
@@ -61,7 +87,9 @@ dependencies:
|
|
61
87
|
- 0
|
62
88
|
version: "0"
|
63
89
|
type: :runtime
|
64
|
-
|
90
|
+
name: beanstalk-client
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: *id005
|
65
93
|
description: A worker queue framework built around beanstalkd
|
66
94
|
email: brad@bradgessler.com
|
67
95
|
executables:
|
@@ -73,7 +101,6 @@ extra_rdoc_files:
|
|
73
101
|
- README.rdoc
|
74
102
|
files:
|
75
103
|
- .document
|
76
|
-
- .gitignore
|
77
104
|
- Gemfile
|
78
105
|
- LICENSE
|
79
106
|
- README.rdoc
|
@@ -121,8 +148,8 @@ homepage: http://github.com/bradgessler/quebert
|
|
121
148
|
licenses: []
|
122
149
|
|
123
150
|
post_install_message:
|
124
|
-
rdoc_options:
|
125
|
-
|
151
|
+
rdoc_options: []
|
152
|
+
|
126
153
|
require_paths:
|
127
154
|
- lib
|
128
155
|
required_ruby_version: !ruby/object:Gem::Requirement
|