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.
@@ -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
- job, body = pop_one_job("test-plain")
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
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 = pop_one_job
24
- assert_equal "TestJob", body["class"]
25
- assert_equal [3, 4], body["args"]
26
- assert_equal 100, job.ttr
27
- assert_equal 100, job.pri
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 = pop_one_job
33
- assert_equal "TestJob", body["class"]
34
- assert_equal [3, 4], body["args"]
35
- assert_equal 100, job.ttr
36
- assert_equal 0, job.pri
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 = pop_one_job
42
- assert_equal "TestJob", body["class"]
43
- assert_equal [3, 4], body["args"]
44
- assert_equal 300, job.ttr
45
- assert_equal 100, job.pri
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
- job, body = pop_one_job("test.bar")
51
- assert_equal "TestJob", body["class"]
52
- assert_equal [6, 7], body["args"]
53
- assert_equal 0, job.delay
54
- assert_equal 5000, job.pri
55
- assert_equal 300, job.ttr
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
- job, body = pop_one_job("bar.baz.foo")
61
- assert_equal "TestAsyncJob", body["class"]
62
- assert_equal [nil, "foo", 10, 5], body["args"]
63
- assert_equal 100, job.ttr
64
- assert_equal Backburner.configuration.default_priority, job.pri
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 = pop_one_job(expected_queue_name)
71
- assert_equal "TestLambdaQueueJob", body["class"]
72
- assert_equal [6, 7], body["args"]
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"], @worker_class.connection.tubes.watched.map(&:name)
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"], @worker_class.connection.tubes.watched.map(&:name)
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"], @worker_class.connection.tubes.watched.map(&:name)
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"], @worker_class.connection.tubes.watched.map(&:name)
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 @worker_class.connection.tubes.watched.map(&:name), "demo.test.backburner-jobs"
57
- assert_match(/demo\.test\.test-job/, out)
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, reconnect, work job, and exit" do
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) do |&block|
69
- Connection.expects(:new).with(Backburner.configuration.beanstalk_url)
70
- @worker_class.any_instance.expects(:work_one_job)
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"], @worker_class.connection.tubes.watched.map(&:name)
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"], @worker_class.connection.tubes.watched.map(&:name)
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"], @worker_class.connection.tubes.watched.map(&:name)
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"], @worker_class.connection.tubes.watched.map(&:name)
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 @worker_class.connection.tubes.watched.map(&:name), "demo.test.backburner-jobs"
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
- clear_jobs!("foo.bar")
103
- @worker_class.enqueue TestFailJob, [1, 2], :queue => "foo.bar"
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 @worker_class.connection.tubes[expanded_tube].peek(:ready)
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), @worker_class.connection.tubes.watched.map(&:name)
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
- invocations = Array(1..num_threads).map { |i|
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(:run_while_can).with(name, conn).when(num_conns.is(conn.num-1)).then(num_conns.is(conn.num))
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
- silenced(2) do
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 = 5
466
+ num_threads = 15
462
467
  num_jobs = 8
463
- num_jobs.times do
464
- @worker_class.enqueue TestJobFork, [6,2], :queue => 'foo.bar.6'
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
- silenced(2) do
470
- @templogger.wait_for_match(/Completed TestJobFork/m)
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.1.0
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-09-14 00:00:00.000000000 Z
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
- - ".DS_Store"
92
- - ".gitignore"
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: '0'
165
+ version: 1.3.1
167
166
  requirements: []
168
167
  rubyforge_project:
169
- rubygems_version: 2.2.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