resque 1.25.1 → 1.25.2

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of resque might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c2b216a0c5baaf91a99defcfea743121e95944e6
4
- data.tar.gz: d05a06e12d5fabc2f2dc248bb4b14807a98f9c30
3
+ metadata.gz: f2ad41bcdf6fe0f0dac89963978925b803c42a1c
4
+ data.tar.gz: 7aebfea98597ddfc13f12b408b1df008bfc6b632
5
5
  SHA512:
6
- metadata.gz: dbf20c331547549a10d6088da69923bf6ff1d06a4cd7562a50298131bdff982984ff6ce2732df0e28d6927b35e6cb82e69638bd4b189a9c0b7983121b5ced64e
7
- data.tar.gz: 943655cc279c1d3acd5a154cdc0df8617ef7f82ccc048734f1ff17f1582dd1e2a95b47382f7a0d2d48af327f5c501432cd8297175e99e773e4d19ac5737e20f4
6
+ metadata.gz: 9a20c5ee3d7808a893574e3fd907c96ed88c510414f5db29a44989ebc2379bb35db8d71ad60cee27a962e6e20d898e2d53657ecdbd08699ab5b6fd17a38df0be
7
+ data.tar.gz: 8c841e2a57eee4404d669f469055c165885877d74e7f7b4d326099f9e0e74a66c225073ea88c336ac3b69f2406968310b6e12a2b0df2caa7769ccec4a7a46f5a
data/HISTORY.md CHANGED
@@ -1,3 +1,15 @@
1
+ ## 1.25.2 (TBD)
2
+
3
+ * Respect TERM_CHILD setting when not forking (@ggilder)
4
+ * implementation of backend connection with a hash (Andrea Rossi)
5
+ * require yaml for show_args support (@yaauie)
6
+ * use redis-namespace 1.3 (Andrea Rossi)
7
+ * fix DOCS link in README (@cade)
8
+ * Fix worker prune test to actually run its assertion & cover reality. (@yaauie)
9
+ * Eliminate infinite recursion when Resque::Helpers mixed into Resque (@yaml)
10
+ * use ruby, avoid shelling out. google++ (@hone)
11
+ * Failed Assertions Don't Fail Tests :rage: (@yaauie)
12
+
1
13
  ## 1.25.1 (2013-9-26)
2
14
 
3
15
  * Actually require Forwardable from the standard library.
@@ -8,7 +20,7 @@
8
20
  context (@jonhyman)
9
21
  * Use Redis.pipelined to group batches of redis commands.
10
22
  https://github.com/resque/resque/pull/902 (@jonhyman)
11
- * Fixed uninitialize constant for the module/class that contains the perform
23
+ * Fixed uninitialize constant for the module/class that contains the perform
12
24
  method causing job failures to no be reported, #792 (@sideshowcoder)
13
25
  * Fix Resque::Failure::Base.all to have the correct signature.
14
26
  (@rentalutions)
@@ -210,7 +210,7 @@ loop do
210
210
  if job = reserve
211
211
  job.process
212
212
  else
213
- sleep 5 # Polling frequency = 5
213
+ sleep 5 # Polling frequency = 5
214
214
  end
215
215
  end
216
216
  shutdown
@@ -277,7 +277,7 @@ worker is started.
277
277
 
278
278
  ### Polling frequency
279
279
 
280
- You can pass an INTERVAL option which is a float representing the polling frequency.
280
+ You can pass an INTERVAL option which is a float representing the polling frequency.
281
281
  The default is 5 seconds, but for a semi-active app you may want to use a smaller value.
282
282
 
283
283
  $ INTERVAL=0.1 QUEUE=file_serve rake environment resque:work
@@ -818,7 +818,7 @@ sort it out.
818
818
  Contributing
819
819
  ------------
820
820
 
821
- Read the [Contributing][cb] wiki page first.
821
+ Read the [Contributing][cb] wiki page first.
822
822
 
823
823
  Once you've made your great commits:
824
824
 
@@ -844,7 +844,7 @@ Meta
844
844
 
845
845
  * Code: `git clone git://github.com/resque/resque.git`
846
846
  * Home: <http://github.com/resque/resque>
847
- * Docs: <http://resque.github.com/resque/>
847
+ * Docs: <http://rubydoc.info/gems/resque>
848
848
  * Bugs: <http://github.com/resque/resque/issues>
849
849
  * List: <resque@librelist.com>
850
850
  * Chat: <irc://irc.freenode.net/resque>
@@ -70,6 +70,7 @@ module Resque
70
70
  # 4. A Redis URL String 'redis://host:port'
71
71
  # 5. An instance of `Redis`, `Redis::Client`, `Redis::DistRedis`,
72
72
  # or `Redis::Namespace`.
73
+ # 6. An Hash of a redis connection {:host => 'localhost', :port => 6379, :db => 0}
73
74
  def redis=(server)
74
75
  case server
75
76
  when String
@@ -86,6 +87,8 @@ module Resque
86
87
  @redis = Redis::Namespace.new(namespace, :redis => redis)
87
88
  when Redis::Namespace
88
89
  @redis = server
90
+ when Hash
91
+ @redis = Redis::Namespace.new(:resque, :redis => Redis.new(server))
89
92
  else
90
93
  @redis = Redis::Namespace.new(:resque, :redis => server)
91
94
  end
@@ -359,7 +362,7 @@ module Resque
359
362
  Plugin.after_dequeue_hooks(klass).each do |hook|
360
363
  klass.send(hook, *args)
361
364
  end
362
-
365
+
363
366
  destroyed
364
367
  end
365
368
 
@@ -23,6 +23,12 @@ module Resque
23
23
 
24
24
  # Direct access to the Redis instance.
25
25
  def redis
26
+ # No infinite recursions, please.
27
+ # Some external libraries depend on Resque::Helpers being mixed into
28
+ # Resque, but this method causes recursions. If we have a super method,
29
+ # assume it is canonical. (see #1150)
30
+ return super if defined?(super)
31
+
26
32
  Resque.redis
27
33
  end
28
34
 
@@ -3,6 +3,7 @@ require 'erb'
3
3
  require 'resque'
4
4
  require 'resque/version'
5
5
  require 'time'
6
+ require 'yaml'
6
7
 
7
8
  if defined? Encoding
8
9
  Encoding.default_external = Encoding::UTF_8
@@ -1,3 +1,3 @@
1
1
  module Resque
2
- Version = VERSION = '1.25.1'
2
+ Version = VERSION = '1.25.2'
3
3
  end
@@ -410,10 +410,19 @@ module Resque
410
410
  end
411
411
 
412
412
  # Kill the child and shutdown immediately.
413
+ # If not forking, abort this process.
413
414
  def shutdown!
414
415
  shutdown
415
416
  if term_child
416
- new_kill_child
417
+ if fork_per_job?
418
+ new_kill_child
419
+ else
420
+ # Raise TermException in the same process
421
+ trap('TERM') do
422
+ # ignore subsequent terms
423
+ end
424
+ raise TermException.new("SIGTERM")
425
+ end
417
426
  else
418
427
  kill_child
419
428
  end
@@ -620,7 +629,11 @@ module Resque
620
629
  end
621
630
 
622
631
  def will_fork?
623
- !@cant_fork && !$TESTING && (ENV["FORK_PER_JOB"] != 'false')
632
+ !@cant_fork && !$TESTING && fork_per_job?
633
+ end
634
+
635
+ def fork_per_job?
636
+ ENV["FORK_PER_JOB"] != 'false'
624
637
  end
625
638
 
626
639
  # Returns a symbol representing the current worker state,
@@ -647,7 +660,7 @@ module Resque
647
660
 
648
661
  # chomp'd hostname of this machine
649
662
  def hostname
650
- @hostname ||= `hostname`.chomp
663
+ Socket.gethostname
651
664
  end
652
665
 
653
666
  # Returns Integer PID of running worker
@@ -283,6 +283,7 @@ context "Resque::Job before_enqueue" do
283
283
  end
284
284
 
285
285
  test "a before enqueue hook that returns false should prevent the job from getting queued" do
286
+ Resque.remove_queue(:jobs)
286
287
  history = []
287
288
  @worker = Resque::Worker.new(:jobs)
288
289
  assert_nil Resque.enqueue(BeforeEnqueueJobAbort, history)
@@ -89,6 +89,36 @@ module PerformJob
89
89
  end
90
90
  end
91
91
 
92
+ ##
93
+ # Helper to make Minitest::Assertion exceptions work properly
94
+ # in the block given to Resque::Worker#work.
95
+ #
96
+ module AssertInWorkBlock
97
+ # if a block is given, ensure that it is run, and that any assertion
98
+ # failures that occur inside it propagate up to the test.
99
+ def work(*args, &block)
100
+ return super unless block_given?
101
+
102
+ ex = catch(:exception_in_block) do
103
+ block_called = nil
104
+ retval = super(*args) do |*bargs|
105
+ begin
106
+ block_called = true
107
+ block.call(*bargs)
108
+ rescue MiniTest::Assertion => ex
109
+ throw :exception_in_block, ex
110
+ end
111
+ end
112
+
113
+ raise "assertion block not called!" unless block_called
114
+
115
+ return retval
116
+ end
117
+
118
+ ex && raise(ex)
119
+ end
120
+ end
121
+
92
122
  #
93
123
  # fixture classes
94
124
  #
@@ -331,13 +331,13 @@ context "Resque::Worker" do
331
331
  end
332
332
 
333
333
  test "inserts itself into the 'workers' list on startup" do
334
- @worker.work(0) do
334
+ @worker.extend(AssertInWorkBlock).work(0) do
335
335
  assert_equal @worker, Resque.workers[0]
336
336
  end
337
337
  end
338
338
 
339
339
  test "removes itself from the 'workers' list on shutdown" do
340
- @worker.work(0) do
340
+ @worker.extend(AssertInWorkBlock).work(0) do
341
341
  assert_equal @worker, Resque.workers[0]
342
342
  end
343
343
 
@@ -345,7 +345,7 @@ context "Resque::Worker" do
345
345
  end
346
346
 
347
347
  test "removes worker with stringified id" do
348
- @worker.work(0) do
348
+ @worker.extend(AssertInWorkBlock).work(0) do
349
349
  worker_id = Resque.workers[0].to_s
350
350
  Resque.remove_worker(worker_id)
351
351
  assert_equal [], Resque.workers
@@ -353,7 +353,7 @@ context "Resque::Worker" do
353
353
  end
354
354
 
355
355
  test "records what it is working on" do
356
- @worker.work(0) do
356
+ @worker.extend(AssertInWorkBlock).work(0) do
357
357
  task = @worker.job
358
358
  assert_equal({"args"=>[20, "/tmp"], "class"=>"SomeJob"}, task['payload'])
359
359
  assert task['run_at']
@@ -367,7 +367,7 @@ context "Resque::Worker" do
367
367
  end
368
368
 
369
369
  test "knows when it is working" do
370
- @worker.work(0) do
370
+ @worker.extend(AssertInWorkBlock).work(0) do
371
371
  assert @worker.working?
372
372
  end
373
373
  end
@@ -378,7 +378,7 @@ context "Resque::Worker" do
378
378
  end
379
379
 
380
380
  test "knows who is working" do
381
- @worker.work(0) do
381
+ @worker.extend(AssertInWorkBlock).work(0) do
382
382
  assert_equal [@worker], Resque.working
383
383
  end
384
384
  end
@@ -413,27 +413,27 @@ context "Resque::Worker" do
413
413
 
414
414
  test "knows when it started" do
415
415
  time = Time.now
416
- @worker.work(0) do
416
+ @worker.extend(AssertInWorkBlock).work(0) do
417
417
  assert Time.parse(@worker.started) - time < 0.1
418
418
  end
419
419
  end
420
420
 
421
421
  test "knows whether it exists or not" do
422
- @worker.work(0) do
422
+ @worker.extend(AssertInWorkBlock).work(0) do
423
423
  assert Resque::Worker.exists?(@worker)
424
424
  assert !Resque::Worker.exists?('blah-blah')
425
425
  end
426
426
  end
427
427
 
428
428
  test "sets $0 while working" do
429
- @worker.work(0) do
429
+ @worker.extend(AssertInWorkBlock).work(0) do
430
430
  ver = Resque::Version
431
- assert_equal "resque-#{ver}: Processing jobs since #{Time.now.to_i}", $0
431
+ assert_equal "resque-#{ver}: Processing jobs since #{Time.now.to_i} [SomeJob]", $0
432
432
  end
433
433
  end
434
434
 
435
435
  test "can be found" do
436
- @worker.work(0) do
436
+ @worker.extend(AssertInWorkBlock).work(0) do
437
437
  found = Resque::Worker.find(@worker.to_s)
438
438
  assert_equal @worker.to_s, found.to_s
439
439
  assert found.working?
@@ -442,28 +442,50 @@ context "Resque::Worker" do
442
442
  end
443
443
 
444
444
  test "doesn't find fakes" do
445
- @worker.work(0) do
445
+ @worker.extend(AssertInWorkBlock).work(0) do
446
446
  found = Resque::Worker.find('blah-blah')
447
447
  assert_equal nil, found
448
448
  end
449
449
  end
450
450
 
451
451
  test "cleans up dead worker info on start (crash recovery)" do
452
- # first we fake out two dead workers
452
+ # first we fake out several dead workers
453
+ # 1: matches queue and hostname; gets pruned.
453
454
  workerA = Resque::Worker.new(:jobs)
454
455
  workerA.instance_variable_set(:@to_s, "#{`hostname`.chomp}:1:jobs")
455
456
  workerA.register_worker
456
457
 
457
- workerB = Resque::Worker.new(:high, :low)
458
- workerB.instance_variable_set(:@to_s, "#{`hostname`.chomp}:2:high,low")
458
+ # 2. matches queue but not hostname; no prune.
459
+ workerB = Resque::Worker.new(:jobs)
460
+ workerB.instance_variable_set(:@to_s, "#{`hostname`.chomp}-foo:2:jobs")
459
461
  workerB.register_worker
460
462
 
461
- assert_equal 2, Resque.workers.size
463
+ # 3. matches hostname but not queue; no prune.
464
+ workerB = Resque::Worker.new(:high)
465
+ workerB.instance_variable_set(:@to_s, "#{`hostname`.chomp}:3:high")
466
+ workerB.register_worker
467
+
468
+ # 4. matches neither hostname nor queue; no prune.
469
+ workerB = Resque::Worker.new(:high)
470
+ workerB.instance_variable_set(:@to_s, "#{`hostname`.chomp}-foo:4:high")
471
+ workerB.register_worker
472
+
473
+ assert_equal 4, Resque.workers.size
462
474
 
463
475
  # then we prune them
464
- @worker.work(0) do
465
- assert_equal 1, Resque.workers.size
466
- end
476
+ @worker.work(0)
477
+
478
+ worker_strings = Resque::Worker.all.map(&:to_s)
479
+
480
+ assert_equal 3, Resque.workers.size
481
+
482
+ # pruned
483
+ assert !worker_strings.include?("#{`hostname`.chomp}:1:jobs")
484
+
485
+ # not pruned
486
+ assert worker_strings.include?("#{`hostname`.chomp}-foo:2:jobs")
487
+ assert worker_strings.include?("#{`hostname`.chomp}:3:high")
488
+ assert worker_strings.include?("#{`hostname`.chomp}-foo:4:high")
467
489
  end
468
490
 
469
491
  test "worker_pids returns pids" do
@@ -899,6 +921,71 @@ context "Resque::Worker" do
899
921
  end
900
922
  end
901
923
 
924
+ test "exits with Resque::TermException when using TERM_CHILD and not forking" do
925
+ begin
926
+ class LongRunningJob
927
+ @queue = :long_running_job
928
+
929
+ def self.perform(run_time)
930
+ Resque.redis.client.reconnect # get its own connection
931
+ Resque.redis.rpush('term-exception-test:start', Process.pid)
932
+ sleep run_time
933
+ Resque.redis.rpush('term-exception-test:result', 'Finished Normally')
934
+ rescue Resque::TermException => e
935
+ Resque.redis.rpush('term-exception-test:result', %Q(Caught TermException: #{e.inspect}))
936
+ ensure
937
+ Resque.redis.rpush('term-exception-test:final', 'exiting.')
938
+ end
939
+ end
940
+
941
+ Resque.enqueue(LongRunningJob, 5)
942
+
943
+ worker_pid = Kernel.fork do
944
+ # reconnect to redis
945
+ Resque.redis.client.reconnect
946
+
947
+ # ensure we don't fork (in worker)
948
+ $TESTING = false
949
+ ENV['FORK_PER_JOB'] = 'false'
950
+
951
+ worker = Resque::Worker.new(:long_running_job)
952
+ worker.term_timeout = 1
953
+ worker.term_child = 1
954
+
955
+ worker.work(0)
956
+ exit!
957
+ end
958
+
959
+ # ensure the worker is started
960
+ start_status = Resque.redis.blpop('term-exception-test:start', 5)
961
+ assert_not_nil start_status
962
+ child_pid = start_status[1].to_i
963
+ assert_operator child_pid, :>, 0
964
+
965
+ # send signal to abort the worker
966
+ Process.kill('TERM', worker_pid)
967
+ Process.waitpid(worker_pid)
968
+
969
+ # wait to see how it all came down
970
+ result = Resque.redis.blpop('term-exception-test:result', 5)
971
+ assert_not_nil result
972
+ assert !result[1].start_with?('Finished Normally'), 'Job finished normally. Sleep not long enough?'
973
+ assert result[1].start_with?('Caught TermException'), 'TermException not raised in child.'
974
+
975
+ # ensure that the child pid is no longer running
976
+ child_still_running = !(`ps -p #{child_pid.to_s} -o pid=`).empty?
977
+ assert !child_still_running
978
+
979
+ # see if post-cleanup occurred.
980
+ post_cleanup_occurred = Resque.redis.lpop( 'term-exception-test:final' )
981
+ assert post_cleanup_occurred, 'post cleanup did not occur. SIGKILL sent too early?'
982
+
983
+ ensure
984
+ remaining_keys = Resque.redis.keys('term-exception-test:*') || []
985
+ Resque.redis.del(*remaining_keys) unless remaining_keys.empty?
986
+ end
987
+ end
988
+
902
989
  test "displays warning when not using term_child" do
903
990
  begin
904
991
  $TESTING = false
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: resque
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.25.1
4
+ version: 1.25.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Wanstrath
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-09-26 00:00:00.000000000 Z
13
+ date: 2014-03-04 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: redis-namespace
@@ -18,14 +18,14 @@ dependencies:
18
18
  requirements:
19
19
  - - ~>
20
20
  - !ruby/object:Gem::Version
21
- version: '1.2'
21
+ version: '1.3'
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
26
  - - ~>
27
27
  - !ruby/object:Gem::Version
28
- version: '1.2'
28
+ version: '1.3'
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: vegas
31
31
  requirement: !ruby/object:Gem::Requirement
@@ -111,70 +111,70 @@ files:
111
111
  - LICENSE
112
112
  - HISTORY.md
113
113
  - lib/resque.rb
114
- - lib/tasks/redis.rake
115
114
  - lib/tasks/resque.rake
115
+ - lib/tasks/redis.rake
116
+ - lib/resque/failure.rb
117
+ - lib/resque/tasks.rb
116
118
  - lib/resque/logging.rb
119
+ - lib/resque/failure/airbrake.rb
120
+ - lib/resque/failure/redis.rb
121
+ - lib/resque/failure/redis_multi_queue.rb
122
+ - lib/resque/failure/multiple.rb
123
+ - lib/resque/failure/base.rb
124
+ - lib/resque/helpers.rb
125
+ - lib/resque/log_formatters/quiet_formatter.rb
126
+ - lib/resque/log_formatters/very_verbose_formatter.rb
127
+ - lib/resque/log_formatters/verbose_formatter.rb
128
+ - lib/resque/worker.rb
129
+ - lib/resque/stat.rb
130
+ - lib/resque/vendor/utf8_util/utf8_util_18.rb
131
+ - lib/resque/vendor/utf8_util/utf8_util_19.rb
132
+ - lib/resque/vendor/utf8_util.rb
133
+ - lib/resque/plugin.rb
134
+ - lib/resque/version.rb
135
+ - lib/resque/job.rb
136
+ - lib/resque/server.rb
117
137
  - lib/resque/server/test_helper.rb
118
- - lib/resque/server/public/working.png
119
- - lib/resque/server/public/jquery.relatize_date.js
120
- - lib/resque/server/public/ranger.js
121
- - lib/resque/server/public/reset.css
122
- - lib/resque/server/public/favicon.ico
123
- - lib/resque/server/public/poll.png
124
- - lib/resque/server/public/jquery-1.3.2.min.js
125
- - lib/resque/server/public/style.css
126
- - lib/resque/server/public/idle.png
127
138
  - lib/resque/server/helpers.rb
128
- - lib/resque/server/views/next_more.erb
139
+ - lib/resque/server/views/failed_job.erb
140
+ - lib/resque/server/views/overview.erb
141
+ - lib/resque/server/views/error.erb
142
+ - lib/resque/server/views/layout.erb
143
+ - lib/resque/server/views/working.erb
129
144
  - lib/resque/server/views/stats.erb
145
+ - lib/resque/server/views/failed_queues_overview.erb
146
+ - lib/resque/server/views/key_string.erb
130
147
  - lib/resque/server/views/workers.erb
131
- - lib/resque/server/views/key_sets.erb
132
- - lib/resque/server/views/error.erb
133
148
  - lib/resque/server/views/failed.erb
149
+ - lib/resque/server/views/key_sets.erb
134
150
  - lib/resque/server/views/queues.erb
135
- - lib/resque/server/views/failed_queues_overview.erb
136
- - lib/resque/server/views/key_string.erb
137
- - lib/resque/server/views/failed_job.erb
138
- - lib/resque/server/views/layout.erb
139
- - lib/resque/server/views/overview.erb
140
- - lib/resque/server/views/working.erb
141
- - lib/resque/stat.rb
142
- - lib/resque/server.rb
151
+ - lib/resque/server/views/next_more.erb
152
+ - lib/resque/server/public/ranger.js
153
+ - lib/resque/server/public/jquery.relatize_date.js
154
+ - lib/resque/server/public/jquery-1.3.2.min.js
155
+ - lib/resque/server/public/favicon.ico
156
+ - lib/resque/server/public/idle.png
157
+ - lib/resque/server/public/working.png
158
+ - lib/resque/server/public/poll.png
159
+ - lib/resque/server/public/style.css
160
+ - lib/resque/server/public/reset.css
143
161
  - lib/resque/errors.rb
144
- - lib/resque/version.rb
145
- - lib/resque/vendor/utf8_util/utf8_util_19.rb
146
- - lib/resque/vendor/utf8_util/utf8_util_18.rb
147
- - lib/resque/vendor/utf8_util.rb
148
- - lib/resque/failure/multiple.rb
149
- - lib/resque/failure/redis_multi_queue.rb
150
- - lib/resque/failure/base.rb
151
- - lib/resque/failure/airbrake.rb
152
- - lib/resque/failure/redis.rb
153
- - lib/resque/helpers.rb
154
- - lib/resque/worker.rb
155
- - lib/resque/job.rb
156
- - lib/resque/tasks.rb
157
- - lib/resque/log_formatters/verbose_formatter.rb
158
- - lib/resque/log_formatters/very_verbose_formatter.rb
159
- - lib/resque/log_formatters/quiet_formatter.rb
160
- - lib/resque/failure.rb
161
- - lib/resque/plugin.rb
162
162
  - bin/resque-web
163
163
  - bin/resque
164
- - test/resque_failure_redis_test.rb
165
- - test/job_plugins_test.rb
166
- - test/test_helper.rb
167
- - test/redis-test.conf
164
+ - test/airbrake_test.rb
168
165
  - test/plugin_test.rb
166
+ - test/resque_failure_redis_test.rb
169
167
  - test/resque_test.rb
170
- - test/redis-test-cluster.conf
168
+ - test/test_helper.rb
171
169
  - test/failure_base_test.rb
172
- - test/worker_test.rb
173
- - test/job_hooks_test.rb
170
+ - test/job_plugins_test.rb
171
+ - test/logging_test.rb
172
+ - test/redis-test.conf
174
173
  - test/resque-web_test.rb
174
+ - test/job_hooks_test.rb
175
+ - test/worker_test.rb
176
+ - test/redis-test-cluster.conf
175
177
  - test/resque_hook_test.rb
176
- - test/logging_test.rb
177
- - test/airbrake_test.rb
178
178
  homepage: http://github.com/defunkt/resque
179
179
  licenses: []
180
180
  metadata: {}
@@ -195,8 +195,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
195
195
  version: '0'
196
196
  requirements: []
197
197
  rubyforge_project:
198
- rubygems_version: 2.0.2
198
+ rubygems_version: 2.0.14
199
199
  signing_key:
200
200
  specification_version: 4
201
201
  summary: Resque is a Redis-backed queueing system.
202
202
  test_files: []
203
+ has_rdoc: