sidekiq 4.2.6 → 4.2.7

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

Potentially problematic release.


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

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2dca1b4492db20ca793becbe891322c358858157
4
- data.tar.gz: 89782986b48def18330d996488e4b823946d5963
3
+ metadata.gz: 4a0c3d337d5c12118df6a841022364a29a0d0f32
4
+ data.tar.gz: b28df88c08bed2192a2a6a529928120887ca595a
5
5
  SHA512:
6
- metadata.gz: f4ff8bfb9436c9508bfbf4d72d66156f940fa4372ae5237124442fc80ef21dd51237b44c3fc8aafab6f798f2b1576f09522ce60ade66748566df5c7c392fc7eb
7
- data.tar.gz: 0e21ba4873492e74370b62b4cec47a38383115cc85f9a25b4b695ec54e392fea6f771580e315c8037eb78a0d1309651a08849aea4ea5ec378811650a55237377
6
+ metadata.gz: f397a4ca48db4a830b4b7c41a95b2df0b594bf41ad0777f1c79acb821649ff7c87d9790810730aa353ba40e1af5d050f229e23bac1cc2055681d51b3bf11efe6
7
+ data.tar.gz: 5b83dea7315ee15bc8d0020873774f6896c41f1ec821292bedaf1e4595a30a966f7ebd91504a7933e57efbf900a5e1b0bc2fb2183f49333d77990535b37119ec
data/Changes.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # Sidekiq Changes
2
2
 
3
+ 4.2.7
4
+ -----------
5
+
6
+ - Add new integration testing to verify code loading and job execution
7
+ in development and production modes with Rails 4 and 5 [#3241]
8
+ - Fix delayed extensions in development mode [#3227, DarthSim]
9
+ - Use Worker's `retry` default if job payload does not have a retry
10
+ attribute [#3234, mlarraz]
11
+
3
12
  4.2.6
4
13
  -----------
5
14
 
@@ -3,6 +3,12 @@ Sidekiq Enterprise Changelog
3
3
 
4
4
  Please see [http://sidekiq.org/](http://sidekiq.org/) for more details and how to buy.
5
5
 
6
+ HEAD
7
+ -------------
8
+
9
+ - Add new web authorization API [#3251]
10
+ - Update all sidekiqswarm env vars to use SIDEKIQ\_ prefix [#3218]
11
+
6
12
  1.4.0
7
13
  -------------
8
14
 
@@ -3,6 +3,11 @@ Sidekiq Pro Changelog
3
3
 
4
4
  Please see [http://sidekiq.org/](http://sidekiq.org/) for more details and how to buy.
5
5
 
6
+ HEAD
7
+ ---------
8
+
9
+ - Don't display "Delete/Retry All" buttons when filtering in Web UI, #3243
10
+
6
11
  3.4.0
7
12
  ---------
8
13
 
data/Rakefile CHANGED
@@ -1,9 +1,12 @@
1
1
  require 'bundler/gem_tasks'
2
2
  require 'rake/testtask'
3
3
  Rake::TestTask.new(:test) do |test|
4
- #SO MUCH NOISE
5
- #test.warning = true
4
+ test.warning = true
6
5
  test.pattern = 'test/**/test_*.rb'
7
6
  end
8
7
 
9
8
  task :default => :test
9
+
10
+ task :appraise do
11
+ exec("cd myapp && rake appraise")
12
+ end
@@ -1,5 +1,5 @@
1
- # frozen_string_literal: true
2
1
  # encoding: utf-8
2
+ # frozen_string_literal: true
3
3
  require 'sidekiq/version'
4
4
  fail "Sidekiq #{Sidekiq::VERSION} does not support Ruby versions below 2.0.0." if RUBY_PLATFORM != 'java' && RUBY_VERSION < '2.0.0'
5
5
 
@@ -1,5 +1,5 @@
1
- # frozen_string_literal: true
2
1
  # encoding: utf-8
2
+ # frozen_string_literal: true
3
3
  require 'sidekiq'
4
4
 
5
5
  module Sidekiq
@@ -1,5 +1,5 @@
1
- # frozen_string_literal: true
2
1
  # encoding: utf-8
2
+ # frozen_string_literal: true
3
3
  $stdout.sync = true
4
4
 
5
5
  require 'yaml'
@@ -229,7 +229,7 @@ module Sidekiq
229
229
  require 'sidekiq/rails'
230
230
  require File.expand_path("#{options[:require]}/config/environment.rb")
231
231
  ::Rails.application.eager_load!
232
- elsif ::Rails::VERSION::MAJOR >= 4 && environment != 'development'
232
+ elsif ::Rails::VERSION::MAJOR == 4
233
233
  # Painful contortions, see 1791 for discussion
234
234
  # No autoloading, we want to force eager load for everything.
235
235
  require File.expand_path("#{options[:require]}/config/application.rb")
@@ -104,3 +104,16 @@ rescue LoadError
104
104
  end
105
105
 
106
106
 
107
+ begin
108
+ require 'active_support/core_ext/kernel/reporting'
109
+ rescue LoadError
110
+ module Kernel
111
+ module_function
112
+ def silence_warnings
113
+ old_verbose, $VERBOSE = $VERBOSE, nil
114
+ yield
115
+ ensure
116
+ $VERBOSE = old_verbose
117
+ end
118
+ end
119
+ end
@@ -1,5 +1,5 @@
1
- # frozen_string_literal: true
2
1
  # encoding: utf-8
2
+ # frozen_string_literal: true
3
3
  require 'sidekiq/manager'
4
4
  require 'sidekiq/fetch'
5
5
  require 'sidekiq/scheduled'
@@ -63,15 +63,16 @@ module Sidekiq
63
63
 
64
64
  JVM_RESERVED_SIGNALS = ['USR1', 'USR2'] # Don't Process#kill if we get these signals via the API
65
65
 
66
- def heartbeat(k, data, json)
67
- results = Sidekiq::CLI::PROCTITLES.map {|x| x.(self, data) }
66
+ def heartbeat
67
+ results = Sidekiq::CLI::PROCTITLES.map {|x| x.(self, to_data) }
68
68
  results.compact!
69
69
  $0 = results.join(' ')
70
70
 
71
- (k, json)
71
+
72
72
  end
73
73
 
74
- def ❤(key, json)
74
+ def ❤
75
+ key = identity
75
76
  fails = procd = 0
76
77
  begin
77
78
  Processor::FAILURE.update {|curr| fails = curr; 0 }
@@ -98,7 +99,7 @@ module Sidekiq
98
99
  conn.multi do
99
100
  conn.sadd('processes', key)
100
101
  conn.exists(key)
101
- conn.hmset(key, 'info', json, 'busy', Processor::WORKER_STATE.size, 'beat', Time.now.to_f, 'quiet', @done)
102
+ conn.hmset(key, 'info', to_json, 'busy', Processor::WORKER_STATE.size, 'beat', Time.now.to_f, 'quiet', @done)
102
103
  conn.expire(key, 60)
103
104
  conn.rpop("#{key}-signals")
104
105
  end
@@ -124,28 +125,36 @@ module Sidekiq
124
125
  end
125
126
 
126
127
  def start_heartbeat
127
- k = identity
128
- data = {
129
- 'hostname' => hostname,
130
- 'started_at' => Time.now.to_f,
131
- 'pid' => $$,
132
- 'tag' => @options[:tag] || '',
133
- 'concurrency' => @options[:concurrency],
134
- 'queues' => @options[:queues].uniq,
135
- 'labels' => @options[:labels],
136
- 'identity' => k,
137
- }
138
- # this data doesn't change so dump it to a string
139
- # now so we don't need to dump it every heartbeat.
140
- json = Sidekiq.dump_json(data)
141
-
142
128
  while true
143
- heartbeat(k, data, json)
129
+ heartbeat
144
130
  sleep 5
145
131
  end
146
132
  Sidekiq.logger.info("Heartbeat stopping...")
147
133
  end
148
134
 
135
+ def to_data
136
+ @data ||= begin
137
+ {
138
+ 'hostname' => hostname,
139
+ 'started_at' => Time.now.to_f,
140
+ 'pid' => $$,
141
+ 'tag' => @options[:tag] || '',
142
+ 'concurrency' => @options[:concurrency],
143
+ 'queues' => @options[:queues].uniq,
144
+ 'labels' => @options[:labels],
145
+ 'identity' => identity,
146
+ }
147
+ end
148
+ end
149
+
150
+ def to_json
151
+ @json ||= begin
152
+ # this data changes infrequently so dump it to a string
153
+ # now so we don't need to dump it every heartbeat.
154
+ Sidekiq.dump_json(to_data)
155
+ end
156
+ end
157
+
149
158
  def clear_heartbeat
150
159
  # Remove record from Redis since we are shutting down.
151
160
  # Note we don't stop the heartbeat thread; if the process
@@ -1,5 +1,5 @@
1
- # frozen_string_literal: true
2
1
  # encoding: utf-8
2
+ # frozen_string_literal: true
3
3
  require 'sidekiq/util'
4
4
  require 'sidekiq/processor'
5
5
  require 'sidekiq/fetch'
@@ -71,6 +71,7 @@ module Sidekiq
71
71
  else
72
72
  Sidekiq.logger.debug { "Enabling Rails 5+ live code reloading, so hot!" }
73
73
  Sidekiq.options[:reloader] = Sidekiq::Rails::Reloader.new
74
+ Psych::Visitors::ToRuby.prepend(Sidekiq::Rails::PsychAutoload)
74
75
  end
75
76
  end
76
77
  end
@@ -106,5 +107,13 @@ module Sidekiq
106
107
  "#<Sidekiq::Rails::Reloader @app=#{@app.class.name}>"
107
108
  end
108
109
  end
110
+
111
+ module PsychAutoload
112
+ def resolve_class(klass_name)
113
+ klass_name && klass_name.constantize
114
+ rescue NameError
115
+ super
116
+ end
117
+ end
109
118
  end if defined?(::Rails)
110
119
  end
@@ -69,7 +69,9 @@ module Sidekiq
69
69
  def raw_push(payloads)
70
70
  if Sidekiq::Testing.fake?
71
71
  payloads.each do |job|
72
- Queues.push(job['queue'], job['class'], Sidekiq.load_json(Sidekiq.dump_json(job)))
72
+ job = Sidekiq.load_json(Sidekiq.dump_json(job))
73
+ job.merge!('enqueued_at' => Time.now.to_f) unless job['at']
74
+ Queues.push(job['queue'], job['class'], job)
73
75
  end
74
76
  true
75
77
  elsif Sidekiq::Testing.inline?
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Sidekiq
3
- VERSION = "4.2.6"
3
+ VERSION = "4.2.7"
4
4
  end
@@ -81,6 +81,11 @@ module Sidekiq
81
81
  end
82
82
  end
83
83
 
84
+ # mperham/sidekiq#3243
85
+ def unfiltered?
86
+ yield unless env['PATH_INFO'].start_with?("/filter/")
87
+ end
88
+
84
89
  def get_locale
85
90
  strings(locale)
86
91
  end
@@ -112,10 +117,6 @@ module Sidekiq
112
117
  end.map { |msg| Sidekiq.load_json(msg) }
113
118
  end
114
119
 
115
- def location
116
- Sidekiq.redis { |conn| conn.client.location }
117
- end
118
-
119
120
  def redis_connection
120
121
  Sidekiq.redis { |conn| conn.client.id }
121
122
  end
@@ -174,15 +174,15 @@ class TestApi < Sidekiq::Test
174
174
  before do
175
175
  ActiveJob::Base.queue_adapter = :sidekiq
176
176
  ActiveJob::Base.logger = nil
177
+ end
177
178
 
178
- class ApiMailer < ActionMailer::Base
179
- def test_email(*)
180
- end
179
+ class ApiMailer < ActionMailer::Base
180
+ def test_email(*)
181
181
  end
182
+ end
182
183
 
183
- class ApiJob < ActiveJob::Base
184
- def perform(*)
185
- end
184
+ class ApiJob < ActiveJob::Base
185
+ def perform(*)
186
186
  end
187
187
  end
188
188
 
@@ -117,10 +117,12 @@ class TestExtensions < Sidekiq::Test
117
117
 
118
118
  Sidekiq.instance_eval { remove_instance_variable :@delay_removed }
119
119
  # Reload modified modules
120
- load 'sidekiq/extensions/action_mailer.rb'
121
- load 'sidekiq/extensions/active_record.rb'
122
- load 'sidekiq/extensions/generic_proxy.rb'
123
- load 'sidekiq/extensions/class_methods.rb'
120
+ silence_warnings do
121
+ load 'sidekiq/extensions/action_mailer.rb'
122
+ load 'sidekiq/extensions/active_record.rb'
123
+ load 'sidekiq/extensions/generic_proxy.rb'
124
+ load 'sidekiq/extensions/class_methods.rb'
125
+ end
124
126
  end
125
127
  end
126
128
 
@@ -18,6 +18,7 @@ class TestLauncher < Sidekiq::Test
18
18
  @mgr = new_manager(options)
19
19
  @launcher = Sidekiq::Launcher.new(options)
20
20
  @launcher.manager = @mgr
21
+ @id = @launcher.identity
21
22
 
22
23
  Sidekiq::Processor::WORKER_STATE['a'] = {'b' => 1}
23
24
 
@@ -35,16 +36,16 @@ class TestLauncher < Sidekiq::Test
35
36
  i += 1
36
37
  end
37
38
  assert_equal 0, i
38
- @launcher.heartbeat('identity', heartbeat_data, Sidekiq.dump_json(heartbeat_data))
39
+ @launcher.heartbeat
39
40
  assert_equal 1, i
40
- @launcher.heartbeat('identity', heartbeat_data, Sidekiq.dump_json(heartbeat_data))
41
+ @launcher.heartbeat
41
42
  assert_equal 1, i
42
43
  end
43
44
 
44
45
  describe 'when manager is active' do
45
46
  before do
46
47
  Sidekiq::CLI::PROCTITLES << proc { "xyz" }
47
- @launcher.heartbeat('identity', heartbeat_data, Sidekiq.dump_json(heartbeat_data))
48
+ @launcher.heartbeat
48
49
  Sidekiq::CLI::PROCTITLES.pop
49
50
  end
50
51
 
@@ -53,9 +54,9 @@ class TestLauncher < Sidekiq::Test
53
54
  end
54
55
 
55
56
  it 'stores process info in redis' do
56
- info = Sidekiq.redis { |c| c.hmget('identity', 'busy') }
57
+ info = Sidekiq.redis { |c| c.hmget(@id, 'busy') }
57
58
  assert_equal ["1"], info
58
- expires = Sidekiq.redis { |c| c.pttl('identity') }
59
+ expires = Sidekiq.redis { |c| c.pttl(@id) }
59
60
  assert_in_delta 60000, expires, 500
60
61
  end
61
62
  end
@@ -63,7 +64,7 @@ class TestLauncher < Sidekiq::Test
63
64
  describe 'when manager is stopped' do
64
65
  before do
65
66
  @launcher.quiet
66
- @launcher.heartbeat('identity', heartbeat_data, Sidekiq.dump_json(heartbeat_data))
67
+ @launcher.heartbeat
67
68
  end
68
69
 
69
70
  #after do
@@ -75,21 +76,17 @@ class TestLauncher < Sidekiq::Test
75
76
  end
76
77
 
77
78
  it 'stores process info in redis' do
78
- info = Sidekiq.redis { |c| c.hmget('identity', 'busy') }
79
+ info = Sidekiq.redis { |c| c.hmget(@id, 'busy') }
79
80
  assert_equal ["1"], info
80
- expires = Sidekiq.redis { |c| c.pttl('identity') }
81
+ expires = Sidekiq.redis { |c| c.pttl(@id) }
81
82
  assert_in_delta 60000, expires, 50
82
83
  end
83
84
  end
84
85
  end
85
86
 
86
87
  def options
87
- { :concurrency => 3, :queues => ['default'] }
88
+ { :concurrency => 3, :queues => ['default'], :tag => 'myapp' }
88
89
  end
89
90
 
90
- def heartbeat_data
91
- { 'concurrency' => 3, 'tag' => 'myapp' }
92
- end
93
91
  end
94
-
95
92
  end
@@ -1,5 +1,5 @@
1
- # frozen_string_literal: true
2
1
  # encoding: utf-8
2
+ # frozen_string_literal: true
3
3
  require_relative 'helper'
4
4
  require 'sidekiq/scheduled'
5
5
  require 'sidekiq/middleware/server/retry_jobs'
@@ -1,5 +1,5 @@
1
- # frozen_string_literal: true
2
1
  # encoding: utf-8
2
+ # frozen_string_literal: true
3
3
  require_relative 'helper'
4
4
 
5
5
  class TestSidekiq < Sidekiq::Test
@@ -61,8 +61,10 @@ class TestTesting < Sidekiq::Test
61
61
  it 'stubs the async call' do
62
62
  assert_equal 0, DirectWorker.jobs.size
63
63
  assert DirectWorker.perform_async(1, 2)
64
+ assert_in_delta Time.now.to_f, DirectWorker.jobs.last['enqueued_at'], 0.01
64
65
  assert_equal 1, DirectWorker.jobs.size
65
66
  assert DirectWorker.perform_in(10, 1, 2)
67
+ refute DirectWorker.jobs.last['enqueued_at']
66
68
  assert_equal 2, DirectWorker.jobs.size
67
69
  assert DirectWorker.perform_at(10, 1, 2)
68
70
  assert_equal 3, DirectWorker.jobs.size
@@ -1,5 +1,5 @@
1
- # frozen_string_literal: true
2
1
  # encoding: utf-8
2
+ # frozen_string_literal: true
3
3
  require_relative 'helper'
4
4
  require 'sidekiq/web'
5
5
  require 'rack/test'
@@ -414,73 +414,26 @@ class TestWeb < Sidekiq::Test
414
414
  2.times { add_retry }
415
415
  3.times { add_scheduled }
416
416
  4.times { add_worker }
417
+ end
417
418
 
419
+ it 'works' do
418
420
  get '/stats'
419
421
  @response = Sidekiq.load_json(last_response.body)
420
- end
421
-
422
- it 'can refresh dashboard stats' do
423
422
  assert_equal 200, last_response.status
424
- end
425
-
426
- describe "for sidekiq" do
427
- it 'are namespaced' do
428
- assert_includes @response.keys, "sidekiq"
429
- end
430
-
431
- it 'reports processed' do
432
- assert_equal 5, @response["sidekiq"]["processed"]
433
- end
434
-
435
- it 'reports failed' do
436
- assert_equal 2, @response["sidekiq"]["failed"]
437
- end
438
-
439
- it 'reports busy' do
440
- assert_equal 4, @response["sidekiq"]["busy"]
441
- end
442
-
443
- it 'reports processes' do
444
- assert_equal 1, @response["sidekiq"]["processes"]
445
- end
446
-
447
- it 'reports retries' do
448
- assert_equal 2, @response["sidekiq"]["retries"]
449
- end
450
-
451
- it 'reports scheduled' do
452
- assert_equal 3, @response["sidekiq"]["scheduled"]
453
- end
454
-
455
- it 'reports latency' do
456
- assert_equal 0, @response["sidekiq"]["default_latency"]
457
- end
458
- end
459
-
460
- describe "for redis" do
461
- it 'are namespaced' do
462
- assert_includes @response.keys, "redis"
463
- end
464
-
465
- it 'reports version' do
466
- assert_includes @response["redis"].keys, "redis_version"
467
- end
468
-
469
- it 'reports uptime' do
470
- assert_includes @response["redis"].keys, "uptime_in_days"
471
- end
472
-
473
- it 'reports connected clients' do
474
- assert_includes @response["redis"].keys, "connected_clients"
475
- end
476
-
477
- it 'reports user memory' do
478
- assert_includes @response["redis"].keys, "used_memory_human"
479
- end
480
-
481
- it 'reports memory peak' do
482
- assert_includes @response["redis"].keys, "used_memory_peak_human"
483
- end
423
+ assert_includes @response.keys, "sidekiq"
424
+ assert_equal 5, @response["sidekiq"]["processed"]
425
+ assert_equal 2, @response["sidekiq"]["failed"]
426
+ assert_equal 4, @response["sidekiq"]["busy"]
427
+ assert_equal 1, @response["sidekiq"]["processes"]
428
+ assert_equal 2, @response["sidekiq"]["retries"]
429
+ assert_equal 3, @response["sidekiq"]["scheduled"]
430
+ assert_equal 0, @response["sidekiq"]["default_latency"]
431
+ assert_includes @response.keys, "redis"
432
+ assert_includes @response["redis"].keys, "redis_version"
433
+ assert_includes @response["redis"].keys, "uptime_in_days"
434
+ assert_includes @response["redis"].keys, "connected_clients"
435
+ assert_includes @response["redis"].keys, "used_memory_human"
436
+ assert_includes @response["redis"].keys, "used_memory_peak_human"
484
437
  end
485
438
  end
486
439
 
@@ -57,14 +57,16 @@
57
57
  <input class="btn btn-danger btn-xs pull-left" type="submit" name="delete" value="<%= t('Delete') %>" />
58
58
  </form>
59
59
 
60
- <form action="<%= root_path %>morgue/all/delete" method="post">
61
- <%= csrf_tag %>
62
- <input class="btn btn-danger btn-xs pull-right" type="submit" name="delete" value="<%= t('DeleteAll') %>" data-confirm="<%= t('AreYouSure') %>" />
63
- </form>
64
- <form action="<%= root_path %>morgue/all/retry" method="post">
65
- <%= csrf_tag %>
66
- <input class="btn btn-danger btn-xs pull-right" type="submit" name="retry" value="<%= t('RetryAll') %>" data-confirm="<%= t('AreYouSure') %>" />
67
- </form>
60
+ <% unfiltered? do %>
61
+ <form action="<%= root_path %>morgue/all/delete" method="post">
62
+ <%= csrf_tag %>
63
+ <input class="btn btn-danger btn-xs pull-right" type="submit" name="delete" value="<%= t('DeleteAll') %>" data-confirm="<%= t('AreYouSure') %>" />
64
+ </form>
65
+ <form action="<%= root_path %>morgue/all/retry" method="post">
66
+ <%= csrf_tag %>
67
+ <input class="btn btn-danger btn-xs pull-right" type="submit" name="retry" value="<%= t('RetryAll') %>" data-confirm="<%= t('AreYouSure') %>" />
68
+ </form>
69
+ <% end %>
68
70
 
69
71
  <% else %>
70
72
  <div class="alert alert-success"><%= t('NoDeadJobsFound') %></div>
@@ -60,14 +60,16 @@
60
60
  <input class="btn btn-danger btn-xs pull-left" type="submit" name="kill" value="<%= t('Kill') %>" />
61
61
  </form>
62
62
 
63
- <form action="<%= root_path %>retries/all/delete" method="post">
64
- <%= csrf_tag %>
65
- <input class="btn btn-danger btn-xs pull-right" type="submit" name="delete" value="<%= t('DeleteAll') %>" data-confirm="<%= t('AreYouSure') %>" />
66
- </form>
67
- <form action="<%= root_path %>retries/all/retry" method="post">
68
- <%= csrf_tag %>
69
- <input class="btn btn-danger btn-xs pull-right" type="submit" name="retry" value="<%= t('RetryAll') %>" data-confirm="<%= t('AreYouSure') %>" />
70
- </form>
63
+ <% unfiltered? do %>
64
+ <form action="<%= root_path %>retries/all/delete" method="post">
65
+ <%= csrf_tag %>
66
+ <input class="btn btn-danger btn-xs pull-right" type="submit" name="delete" value="<%= t('DeleteAll') %>" data-confirm="<%= t('AreYouSure') %>" />
67
+ </form>
68
+ <form action="<%= root_path %>retries/all/retry" method="post">
69
+ <%= csrf_tag %>
70
+ <input class="btn btn-danger btn-xs pull-right" type="submit" name="retry" value="<%= t('RetryAll') %>" data-confirm="<%= t('AreYouSure') %>" />
71
+ </form>
72
+ <% end %>
71
73
 
72
74
  <% else %>
73
75
  <div class="alert alert-success"><%= t('NoRetriesFound') %></div>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sidekiq
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.2.6
4
+ version: 4.2.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Perham
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-11-14 00:00:00.000000000 Z
11
+ date: 2016-11-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redis
@@ -311,7 +311,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
311
311
  version: '0'
312
312
  requirements: []
313
313
  rubyforge_project:
314
- rubygems_version: 2.5.1
314
+ rubygems_version: 2.5.2
315
315
  signing_key:
316
316
  specification_version: 4
317
317
  summary: Simple, efficient background processing for Ruby
@@ -346,4 +346,3 @@ test_files:
346
346
  - test/test_util.rb
347
347
  - test/test_web.rb
348
348
  - test/test_web_helpers.rb
349
- has_rdoc: