backburner 1.1.0 → 1.2.0.pre
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.
- 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
|