backburner 1.1.0 → 1.2.0.pre
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/HOOKS.md +16 -5
- data/README.md +8 -6
- data/examples/demo.rb +2 -2
- data/lib/backburner/configuration.rb +1 -1
- data/lib/backburner/connection.rb +104 -10
- data/lib/backburner/hooks.rb +11 -11
- data/lib/backburner/job.rb +6 -1
- data/lib/backburner/version.rb +1 -1
- data/lib/backburner/worker.rb +42 -59
- data/lib/backburner/workers/forking.rb +5 -1
- data/lib/backburner/workers/simple.rb +1 -1
- data/lib/backburner/workers/threads_on_fork.rb +19 -19
- data/test/async_proxy_test.rb +15 -13
- data/test/connection_test.rb +143 -7
- data/test/fixtures/hooked.rb +6 -0
- data/test/fixtures/test_fork_jobs.rb +13 -1
- data/test/helpers/templogger.rb +1 -1
- data/test/hooks_test.rb +7 -0
- data/test/job_test.rb +33 -0
- data/test/test_helper.rb +30 -8
- data/test/worker_test.rb +41 -41
- data/test/workers/forking_worker_test.rb +10 -13
- data/test/workers/simple_worker_test.rb +23 -10
- data/test/workers/threads_on_fork_worker_test.rb +20 -16
- metadata +16 -17
- data/.DS_Store +0 -0
data/test/worker_test.rb
CHANGED
@@ -11,65 +11,72 @@ describe "Backburner::Worker module" do
|
|
11
11
|
describe "for enqueue class method" do
|
12
12
|
it "should support enqueuing plain job" do
|
13
13
|
Backburner::Worker.enqueue TestPlainJob, [7, 9], :ttr => 100, :pri => 2000
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
14
|
+
pop_one_job("test-plain") do |job, body|
|
15
|
+
assert_equal "TestPlainJob", body["class"]
|
16
|
+
assert_equal [7, 9], body["args"]
|
17
|
+
assert_equal 100, job.ttr
|
18
|
+
assert_equal 2000, job.pri
|
19
|
+
end
|
19
20
|
end # plain
|
20
21
|
|
21
22
|
it "should support enqueuing job with class queue priority" do
|
22
23
|
Backburner::Worker.enqueue TestJob, [3, 4], :ttr => 100
|
23
|
-
job, body
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
24
|
+
pop_one_job do |job, body|
|
25
|
+
assert_equal "TestJob", body["class"]
|
26
|
+
assert_equal [3, 4], body["args"]
|
27
|
+
assert_equal 100, job.ttr
|
28
|
+
assert_equal 100, job.pri
|
29
|
+
end
|
28
30
|
end # queue priority
|
29
31
|
|
30
32
|
it "should support enqueuing job with specified named priority" do
|
31
33
|
Backburner::Worker.enqueue TestJob, [3, 4], :ttr => 100, :pri => 'high'
|
32
|
-
job, body
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
34
|
+
pop_one_job do |job, body|
|
35
|
+
assert_equal "TestJob", body["class"]
|
36
|
+
assert_equal [3, 4], body["args"]
|
37
|
+
assert_equal 100, job.ttr
|
38
|
+
assert_equal 0, job.pri
|
39
|
+
end
|
37
40
|
end # queue named priority
|
38
41
|
|
39
42
|
it "should support enqueuing job with class queue respond_timeout" do
|
40
43
|
Backburner::Worker.enqueue TestJob, [3, 4]
|
41
|
-
job, body
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
44
|
+
pop_one_job do |job, body|
|
45
|
+
assert_equal "TestJob", body["class"]
|
46
|
+
assert_equal [3, 4], body["args"]
|
47
|
+
assert_equal 300, job.ttr
|
48
|
+
assert_equal 100, job.pri
|
49
|
+
end
|
46
50
|
end # queue respond_timeout
|
47
51
|
|
48
52
|
it "should support enqueuing job with custom queue" do
|
49
53
|
Backburner::Worker.enqueue TestJob, [6, 7], :queue => "test.bar", :pri => 5000
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
54
|
+
pop_one_job("test.bar") do |job, body|
|
55
|
+
assert_equal "TestJob", body["class"]
|
56
|
+
assert_equal [6, 7], body["args"]
|
57
|
+
assert_equal 0, job.delay
|
58
|
+
assert_equal 5000, job.pri
|
59
|
+
assert_equal 300, job.ttr
|
60
|
+
end
|
56
61
|
end # custom
|
57
62
|
|
58
63
|
it "should support async job" do
|
59
64
|
TestAsyncJob.async(:ttr => 100, :queue => "bar.baz.foo").foo(10, 5)
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
+
pop_one_job("bar.baz.foo") do |job, body|
|
66
|
+
assert_equal "TestAsyncJob", body["class"]
|
67
|
+
assert_equal [nil, "foo", 10, 5], body["args"]
|
68
|
+
assert_equal 100, job.ttr
|
69
|
+
assert_equal Backburner.configuration.default_priority, job.pri
|
70
|
+
end
|
65
71
|
end # async
|
66
72
|
|
67
73
|
it "should support enqueueing job with lambda queue" do
|
68
74
|
expected_queue_name = TestLambdaQueueJob.calculated_queue_name
|
69
75
|
Backburner::Worker.enqueue TestLambdaQueueJob, [6, 7], :queue => lambda { |klass| klass.calculated_queue_name }
|
70
|
-
job, body
|
71
|
-
|
72
|
-
|
76
|
+
pop_one_job(expected_queue_name) do |job, body|
|
77
|
+
assert_equal "TestLambdaQueueJob", body["class"]
|
78
|
+
assert_equal [6, 7], body["args"]
|
79
|
+
end
|
73
80
|
end
|
74
81
|
end # enqueue
|
75
82
|
|
@@ -82,13 +89,6 @@ describe "Backburner::Worker module" do
|
|
82
89
|
end
|
83
90
|
end # start
|
84
91
|
|
85
|
-
describe "for connection class method" do
|
86
|
-
it "should return the beanstalk connection" do
|
87
|
-
assert_equal "beanstalk://localhost", Backburner::Worker.connection.url
|
88
|
-
assert_kind_of Beaneater, Backburner::Worker.connection.beanstalk
|
89
|
-
end
|
90
|
-
end # connection
|
91
|
-
|
92
92
|
describe "for tube_names accessor" do
|
93
93
|
before do
|
94
94
|
Backburner.default_queues << "baz"
|
@@ -19,7 +19,7 @@ describe "Backburner::Workers::Forking module" do
|
|
19
19
|
worker = @worker_class.new(["foo", "bar"])
|
20
20
|
out = capture_stdout { worker.prepare }
|
21
21
|
assert_equal ["demo.test.foo", "demo.test.bar"], worker.tube_names
|
22
|
-
assert_same_elements ["demo.test.foo", "demo.test.bar"],
|
22
|
+
assert_same_elements ["demo.test.foo", "demo.test.bar"], worker.connection.tubes.watched.map(&:name)
|
23
23
|
assert_match(/demo\.test\.foo/, out)
|
24
24
|
end # multiple
|
25
25
|
|
@@ -27,7 +27,7 @@ describe "Backburner::Workers::Forking module" do
|
|
27
27
|
worker = @worker_class.new("foo")
|
28
28
|
out = capture_stdout { worker.prepare }
|
29
29
|
assert_equal ["demo.test.foo"], worker.tube_names
|
30
|
-
assert_same_elements ["demo.test.foo"],
|
30
|
+
assert_same_elements ["demo.test.foo"], worker.connection.tubes.watched.map(&:name)
|
31
31
|
assert_match(/demo\.test\.foo/, out)
|
32
32
|
end # single
|
33
33
|
|
@@ -36,7 +36,7 @@ describe "Backburner::Workers::Forking module" do
|
|
36
36
|
worker = @worker_class.new
|
37
37
|
out = capture_stdout { worker.prepare }
|
38
38
|
assert_equal ["demo.test.foo", "demo.test.bar"], worker.tube_names
|
39
|
-
assert_same_elements ["demo.test.foo", "demo.test.bar"],
|
39
|
+
assert_same_elements ["demo.test.foo", "demo.test.bar"], worker.connection.tubes.watched.map(&:name)
|
40
40
|
assert_match(/demo\.test\.foo/, out)
|
41
41
|
end
|
42
42
|
|
@@ -45,7 +45,7 @@ describe "Backburner::Workers::Forking module" do
|
|
45
45
|
worker = @worker_class.new
|
46
46
|
out = capture_stdout { worker.prepare }
|
47
47
|
assert_equal ["demo.test.bar"], worker.tube_names
|
48
|
-
assert_same_elements ["demo.test.bar"],
|
48
|
+
assert_same_elements ["demo.test.bar"], worker.connection.tubes.watched.map(&:name)
|
49
49
|
assert_match(/demo\.test\.bar/, out)
|
50
50
|
end # all assign
|
51
51
|
|
@@ -53,24 +53,21 @@ describe "Backburner::Workers::Forking module" do
|
|
53
53
|
worker = @worker_class.new
|
54
54
|
out = capture_stdout { worker.prepare }
|
55
55
|
assert_contains worker.tube_names, "demo.test.backburner-jobs"
|
56
|
-
assert_contains
|
57
|
-
assert_match(/demo\.test\.
|
56
|
+
assert_contains worker.connection.tubes.watched.map(&:name), "demo.test.backburner-jobs"
|
57
|
+
assert_match(/demo\.test\.backburner-jobs/, out)
|
58
58
|
end # all read
|
59
59
|
end # prepare
|
60
60
|
|
61
61
|
describe "for fork_one_job method" do
|
62
62
|
|
63
|
-
it "should fork,
|
63
|
+
it "should fork, work job, and exit" do
|
64
64
|
clear_jobs!("bar.foo")
|
65
65
|
@worker_class.enqueue TestJobForking, [1, 2], :queue => "bar.foo"
|
66
66
|
|
67
67
|
fake_pid = 45
|
68
|
-
Process.expects(:fork).returns(fake_pid)
|
69
|
-
|
70
|
-
|
71
|
-
@worker_class.any_instance.expects(:coolest_exit)
|
72
|
-
block.call
|
73
|
-
end
|
68
|
+
Process.expects(:fork).returns(fake_pid).yields
|
69
|
+
@worker_class.any_instance.expects(:work_one_job)
|
70
|
+
@worker_class.any_instance.expects(:coolest_exit)
|
74
71
|
Process.expects(:wait).with(fake_pid)
|
75
72
|
|
76
73
|
silenced(2) do
|
@@ -19,7 +19,7 @@ describe "Backburner::Workers::Basic module" do
|
|
19
19
|
worker = @worker_class.new(["foo", "bar"])
|
20
20
|
out = capture_stdout { worker.prepare }
|
21
21
|
assert_equal ["demo.test.foo", "demo.test.bar"], worker.tube_names
|
22
|
-
assert_same_elements ["demo.test.foo", "demo.test.bar"],
|
22
|
+
assert_same_elements ["demo.test.foo", "demo.test.bar"], worker.connection.tubes.watched.map(&:name)
|
23
23
|
assert_match(/demo\.test\.foo/, out)
|
24
24
|
end # multiple
|
25
25
|
|
@@ -27,7 +27,7 @@ describe "Backburner::Workers::Basic module" do
|
|
27
27
|
worker = @worker_class.new("foo")
|
28
28
|
out = capture_stdout { worker.prepare }
|
29
29
|
assert_equal ["demo.test.foo"], worker.tube_names
|
30
|
-
assert_same_elements ["demo.test.foo"],
|
30
|
+
assert_same_elements ["demo.test.foo"], worker.connection.tubes.watched.map(&:name)
|
31
31
|
assert_match(/demo\.test\.foo/, out)
|
32
32
|
end # single
|
33
33
|
|
@@ -36,7 +36,7 @@ describe "Backburner::Workers::Basic module" do
|
|
36
36
|
worker = @worker_class.new
|
37
37
|
out = capture_stdout { worker.prepare }
|
38
38
|
assert_equal ["demo.test.foo", "demo.test.bar"], worker.tube_names
|
39
|
-
assert_same_elements ["demo.test.foo", "demo.test.bar"],
|
39
|
+
assert_same_elements ["demo.test.foo", "demo.test.bar"], worker.connection.tubes.watched.map(&:name)
|
40
40
|
assert_match(/demo\.test\.foo/, out)
|
41
41
|
end
|
42
42
|
|
@@ -45,7 +45,7 @@ describe "Backburner::Workers::Basic module" do
|
|
45
45
|
worker = @worker_class.new
|
46
46
|
out = capture_stdout { worker.prepare }
|
47
47
|
assert_equal ["demo.test.bar"], worker.tube_names
|
48
|
-
assert_same_elements ["demo.test.bar"],
|
48
|
+
assert_same_elements ["demo.test.bar"], worker.connection.tubes.watched.map(&:name)
|
49
49
|
assert_match(/demo\.test\.bar/, out)
|
50
50
|
end # all assign
|
51
51
|
|
@@ -53,7 +53,7 @@ describe "Backburner::Workers::Basic module" do
|
|
53
53
|
worker = @worker_class.new
|
54
54
|
out = capture_stdout { worker.prepare }
|
55
55
|
assert_contains worker.tube_names, "demo.test.backburner-jobs"
|
56
|
-
assert_contains
|
56
|
+
assert_contains worker.connection.tubes.watched.map(&:name), "demo.test.backburner-jobs"
|
57
57
|
assert_match(/demo\.test\.backburner-jobs/, out)
|
58
58
|
end # all read
|
59
59
|
end # prepare
|
@@ -99,11 +99,16 @@ describe "Backburner::Workers::Basic module" do
|
|
99
99
|
end # fail, argument
|
100
100
|
|
101
101
|
it "should work an enqueued failing job" do
|
102
|
-
|
103
|
-
|
102
|
+
# NB: The #bury expectation below leaves the job in the queue (as reserved!)
|
103
|
+
# since bury is never actually called on the task. Therefore, clear_jobs!()
|
104
|
+
# can't remove it which can break a lot of things depending on the order the
|
105
|
+
# tests are run. So we ensure that it's using a unique queue name. Mocha
|
106
|
+
# lacks expectations with proxies (where we could actually call bury)
|
107
|
+
clear_jobs!('foo.bar.failed')
|
108
|
+
@worker_class.enqueue TestFailJob, [1, 2], :queue => 'foo.bar.failed'
|
104
109
|
Backburner::Job.any_instance.expects(:bury).once
|
105
110
|
out = silenced(2) do
|
106
|
-
worker = @worker_class.new('foo.bar')
|
111
|
+
worker = @worker_class.new('foo.bar.failed')
|
107
112
|
worker.prepare
|
108
113
|
worker.work_one_job
|
109
114
|
end
|
@@ -275,12 +280,13 @@ describe "Backburner::Workers::Basic module" do
|
|
275
280
|
|
276
281
|
it "should support event hooks with stopping enqueue" do
|
277
282
|
$hooked_fail_count = 0
|
283
|
+
worker = @worker_class.new('foo.bar.events.retry2')
|
278
284
|
clear_jobs!('foo.bar.events.retry2')
|
279
285
|
silenced(2) do
|
280
286
|
HookedObjectBeforeEnqueueFail.async(:queue => 'foo.bar.events.retry2').foo(5)
|
281
287
|
end
|
282
288
|
expanded_tube = [Backburner.configuration.tube_namespace, 'foo.bar.events.retry2'].join(".")
|
283
|
-
assert_nil
|
289
|
+
assert_nil worker.connection.tubes[expanded_tube].peek(:ready)
|
284
290
|
end # stopping enqueue
|
285
291
|
|
286
292
|
it "should support event hooks with stopping perform" do
|
@@ -299,11 +305,18 @@ describe "Backburner::Workers::Basic module" do
|
|
299
305
|
refute_match(/HookFailError/, out)
|
300
306
|
end # stopping perform
|
301
307
|
|
308
|
+
it "should use the connection given as an argument" do
|
309
|
+
worker = @worker_class.new('foo.bar')
|
310
|
+
connection = mock('connection')
|
311
|
+
worker.expects(:reserve_job).with(connection).returns(stub_everything('job'))
|
312
|
+
worker.work_one_job(connection)
|
313
|
+
end
|
314
|
+
|
302
315
|
after do
|
303
316
|
Backburner.configure do |config|
|
304
317
|
config.max_job_retries = 0
|
305
318
|
config.retry_delay = 5
|
306
|
-
config.retry_delay_proc = lambda { |min_retry_delay, num_retries| min_retry_delay + (num_retries ** 3) }
|
319
|
+
config.retry_delay_proc = lambda { |min_retry_delay, num_retries| min_retry_delay + (num_retries ** 3) }
|
307
320
|
end
|
308
321
|
end
|
309
322
|
end # work_one_job
|
@@ -176,7 +176,7 @@ describe "Backburner::Workers::ThreadsOnFork module" do
|
|
176
176
|
worker.prepare
|
177
177
|
worker.fork_inner('demo.test.bar')
|
178
178
|
end
|
179
|
-
assert_same_elements %W(demo.test.bar),
|
179
|
+
assert_same_elements %W(demo.test.bar), worker.connection.tubes.watched.map(&:name)
|
180
180
|
end
|
181
181
|
|
182
182
|
it "should not create threads if the number of threads is 1" do
|
@@ -204,7 +204,6 @@ describe "Backburner::Workers::ThreadsOnFork module" do
|
|
204
204
|
worker = @worker_class.new(%(foo))
|
205
205
|
@worker_class.expects(:threads_number).returns(5)
|
206
206
|
worker.expects(:run_while_can).times(5)
|
207
|
-
# TODO
|
208
207
|
def worker.create_thread(*args, &block); block.call(*args) end
|
209
208
|
silenced do
|
210
209
|
worker.prepare
|
@@ -218,17 +217,19 @@ describe "Backburner::Workers::ThreadsOnFork module" do
|
|
218
217
|
|
219
218
|
worker = @worker_class.new(%(foo))
|
220
219
|
@worker_class.expects(:threads_number).returns(num_threads)
|
221
|
-
|
220
|
+
|
221
|
+
invocations = Array(1..num_threads).map do |i|
|
222
222
|
conn = OpenStruct.new(:num => i)
|
223
223
|
conn.expects(:close)
|
224
224
|
conn
|
225
|
-
|
225
|
+
end
|
226
226
|
Backburner::Connection.expects(:new).times(num_threads).returns(*invocations)
|
227
227
|
|
228
228
|
# ensure each invocation of run_while_can is with a different connection
|
229
229
|
num_conns = states('num_conns').starts_as(0)
|
230
230
|
invocations.each do |conn|
|
231
|
-
worker.expects(:
|
231
|
+
worker.expects(:watch_tube).with(name, conn)
|
232
|
+
worker.expects(:run_while_can).with(conn).when(num_conns.is(conn.num-1)).then(num_conns.is(conn.num))
|
232
233
|
end
|
233
234
|
|
234
235
|
def worker.create_thread(*args, &block); block.call(*args) end
|
@@ -236,6 +237,7 @@ describe "Backburner::Workers::ThreadsOnFork module" do
|
|
236
237
|
worker.prepare
|
237
238
|
worker.fork_inner(name)
|
238
239
|
end
|
240
|
+
|
239
241
|
assert_equal(num_threads, num_conns.current_state)
|
240
242
|
end
|
241
243
|
|
@@ -374,20 +376,22 @@ describe "Backburner::Workers::ThreadsOnFork module" do
|
|
374
376
|
$worker_success = false
|
375
377
|
$worker_raise = false
|
376
378
|
clear_jobs!('response')
|
377
|
-
clear_jobs!('foo.bar.1', 'foo.bar.2', 'foo.bar.3', 'foo.bar.4', 'foo.bar.5', 'foo.bar.6')
|
379
|
+
clear_jobs!('foo.bar.1', 'foo.bar.2', 'foo.bar.3', 'foo.bar.4', 'foo.bar.5', 'foo.bar.6', 'foo.bar.7')
|
378
380
|
@worker_class.threads_number = 1
|
379
381
|
@worker_class.garbage_after = 10
|
382
|
+
|
380
383
|
silenced do
|
381
384
|
@response_worker = @worker_class.new('response')
|
382
385
|
@response_worker.watch_tube('demo.test.response')
|
383
386
|
end
|
387
|
+
|
384
388
|
@ignore_forks = true
|
385
389
|
end
|
386
390
|
|
387
391
|
after do
|
388
392
|
@templogger.close
|
389
393
|
clear_jobs!('response')
|
390
|
-
clear_jobs!('foo.bar.1', 'foo.bar.2', 'foo.bar.3', 'foo.bar.4', 'foo.bar.5', 'foo.bar.6')
|
394
|
+
clear_jobs!('foo.bar.1', 'foo.bar.2', 'foo.bar.3', 'foo.bar.4', 'foo.bar.5', 'foo.bar.6', 'foo.bar.7')
|
391
395
|
@worker_class.threads_number = 1
|
392
396
|
@worker_class.shutdown = true
|
393
397
|
silenced do
|
@@ -402,7 +406,8 @@ describe "Backburner::Workers::ThreadsOnFork module" do
|
|
402
406
|
@worker = @worker_class.new('foo.bar.1')
|
403
407
|
@worker.start(false)
|
404
408
|
@worker_class.enqueue TestJobFork, [1, 2], :queue => "foo.bar.1"
|
405
|
-
|
409
|
+
|
410
|
+
silenced do
|
406
411
|
@templogger.wait_for_match(/Completed TestJobFork/m)
|
407
412
|
@response_worker.work_one_job
|
408
413
|
end
|
@@ -458,23 +463,22 @@ describe "Backburner::Workers::ThreadsOnFork module" do
|
|
458
463
|
end # retrying, succeeds
|
459
464
|
|
460
465
|
it "should support a multithreaded worker without deadlocks" do
|
461
|
-
num_threads =
|
466
|
+
num_threads = 15
|
462
467
|
num_jobs = 8
|
463
|
-
num_jobs.times do
|
464
|
-
@worker_class.enqueue
|
468
|
+
num_jobs.times do |i|
|
469
|
+
@worker_class.enqueue TestJobMultithreadFork, [6,2], :queue => 'foo.bar.6'
|
465
470
|
end
|
471
|
+
|
466
472
|
@worker_class.threads_number = num_threads
|
467
473
|
@worker = @worker_class.new('foo.bar.6')
|
468
474
|
@worker.start(false)
|
469
|
-
|
470
|
-
|
475
|
+
|
476
|
+
silenced do
|
477
|
+
@templogger.wait_for_match(/Completed TestJobMultithreadFork/m)
|
471
478
|
num_jobs.times { @response_worker.work_one_job }
|
472
479
|
end
|
473
480
|
assert_equal num_jobs, $worker_test_count
|
474
481
|
end # multithreaded
|
475
|
-
|
476
482
|
end # practical tests
|
477
|
-
|
478
483
|
end # forking and threading
|
479
|
-
|
480
484
|
end # Backburner::Workers::ThreadsOnFork module
|
metadata
CHANGED
@@ -1,55 +1,55 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: backburner
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0.pre
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nathan Esquenazi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-10-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: beaneater
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: dante
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - '>'
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: 0.1.5
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - '>'
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 0.1.5
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - '>='
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - '>='
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
@@ -70,14 +70,14 @@ dependencies:
|
|
70
70
|
name: mocha
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - '>='
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - '>='
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
description: Beanstalk background job processing made easy
|
@@ -88,9 +88,8 @@ executables:
|
|
88
88
|
extensions: []
|
89
89
|
extra_rdoc_files: []
|
90
90
|
files:
|
91
|
-
-
|
92
|
-
-
|
93
|
-
- ".travis.yml"
|
91
|
+
- .gitignore
|
92
|
+
- .travis.yml
|
94
93
|
- CHANGELOG.md
|
95
94
|
- CONTRIBUTING.md
|
96
95
|
- Gemfile
|
@@ -156,17 +155,17 @@ require_paths:
|
|
156
155
|
- lib
|
157
156
|
required_ruby_version: !ruby/object:Gem::Requirement
|
158
157
|
requirements:
|
159
|
-
- -
|
158
|
+
- - '>='
|
160
159
|
- !ruby/object:Gem::Version
|
161
160
|
version: '0'
|
162
161
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
163
162
|
requirements:
|
164
|
-
- -
|
163
|
+
- - '>'
|
165
164
|
- !ruby/object:Gem::Version
|
166
|
-
version:
|
165
|
+
version: 1.3.1
|
167
166
|
requirements: []
|
168
167
|
rubyforge_project:
|
169
|
-
rubygems_version: 2.
|
168
|
+
rubygems_version: 2.4.8
|
170
169
|
signing_key:
|
171
170
|
specification_version: 4
|
172
171
|
summary: Reliable beanstalk background job processing made easy for Ruby and Sinatra
|