resque-scheduler 4.4.0 → 4.5.0
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.
Potentially problematic release.
This version of resque-scheduler might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/.github/dependabot.yml +12 -0
- data/.github/workflows/rubocop.yml +27 -0
- data/.github/workflows/ruby.yml +48 -0
- data/AUTHORS.md +4 -0
- data/CHANGELOG.md +20 -1
- data/README.md +2 -4
- data/Rakefile +1 -5
- data/lib/resque/scheduler/delaying_extensions.rb +32 -6
- data/lib/resque/scheduler/scheduling_extensions.rb +4 -3
- data/lib/resque/scheduler/server/views/delayed.erb +1 -1
- data/lib/resque/scheduler/server/views/search_form.erb +1 -1
- data/lib/resque/scheduler/server.rb +1 -1
- data/lib/resque/scheduler/version.rb +1 -1
- data/lib/resque/scheduler.rb +1 -0
- data/resque-scheduler.gemspec +7 -3
- metadata +33 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2c97d0ecaec5a456e20e91d98779f7792fafd99e09f1bfd85452234a01ba47c0
|
4
|
+
data.tar.gz: f3947f2446b6ddac4d5555d467a302a3032a08d3dd77bdc039253674f70a85e1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cbfefeb510538682d188284280ca56af1641de3dde1a63ad8b79b5a09dcc916dc902839782a9ad988421c77b84146a05b4077291aa754e24d07dc75440786c2e
|
7
|
+
data.tar.gz: 955193ba760e37bd6f58f94a4ba67edab755329a68e4deefa0466c822d3fbd3d057cf357a410bedf23fd145b687255b3fe783d44890d7d4dfd0307773c1baeb5
|
@@ -0,0 +1,27 @@
|
|
1
|
+
name: Rubocop
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches: [master]
|
6
|
+
pull_request:
|
7
|
+
branches: [master]
|
8
|
+
|
9
|
+
jobs:
|
10
|
+
rubocop:
|
11
|
+
name: Rubocop
|
12
|
+
runs-on: ${{ matrix.os }}
|
13
|
+
strategy:
|
14
|
+
matrix:
|
15
|
+
os: [ubuntu-latest]
|
16
|
+
ruby: [
|
17
|
+
2.4
|
18
|
+
]
|
19
|
+
|
20
|
+
steps:
|
21
|
+
- uses: actions/checkout@v2
|
22
|
+
- uses: ruby/setup-ruby@v1
|
23
|
+
with:
|
24
|
+
ruby-version: ${{ matrix.ruby }}
|
25
|
+
bundler-cache: true
|
26
|
+
- name: Ruby linter
|
27
|
+
run: bundle exec rubocop
|
@@ -0,0 +1,48 @@
|
|
1
|
+
name: CI
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches: [master]
|
6
|
+
pull_request:
|
7
|
+
branches: [master]
|
8
|
+
|
9
|
+
jobs:
|
10
|
+
test:
|
11
|
+
runs-on: ubuntu-latest
|
12
|
+
services:
|
13
|
+
redis:
|
14
|
+
image: redis
|
15
|
+
ports:
|
16
|
+
- 6379:6379
|
17
|
+
strategy:
|
18
|
+
fail-fast: false
|
19
|
+
matrix:
|
20
|
+
ruby-version:
|
21
|
+
- 2.3
|
22
|
+
- 2.4
|
23
|
+
- 2.5
|
24
|
+
- 2.6
|
25
|
+
- 2.7
|
26
|
+
- "3.0"
|
27
|
+
- head
|
28
|
+
- jruby-9.1.17.0
|
29
|
+
- jruby-9.2.9.0
|
30
|
+
- jruby-9.2.19.0
|
31
|
+
resque-version:
|
32
|
+
- "master"
|
33
|
+
- "~> 2.0.0"
|
34
|
+
- "~> 1.27"
|
35
|
+
env:
|
36
|
+
RESQUE: "${{ matrix.resque-version }}"
|
37
|
+
COVERAGE: 1
|
38
|
+
JRUBY_OPTS: ""
|
39
|
+
RUBYOPT: "-W0"
|
40
|
+
|
41
|
+
steps:
|
42
|
+
- uses: actions/checkout@v2
|
43
|
+
- uses: ruby/setup-ruby@v1
|
44
|
+
with:
|
45
|
+
ruby-version: "${{ matrix.ruby-version }}"
|
46
|
+
bundler-cache: true
|
47
|
+
- run: bundle exec rake
|
48
|
+
- run: bin/bundle_console_test.sh
|
data/AUTHORS.md
CHANGED
@@ -30,6 +30,7 @@ Resque Scheduler authors
|
|
30
30
|
- Ian Davies
|
31
31
|
- James Le Cuirot
|
32
32
|
- Jarkko Mönkkönen
|
33
|
+
- Jimmy Chao
|
33
34
|
- John Crepezzi
|
34
35
|
- John Griffin
|
35
36
|
- Jon Larkowski and Les Hill
|
@@ -62,11 +63,13 @@ Resque Scheduler authors
|
|
62
63
|
- Scott Francis
|
63
64
|
- Sean Stephens
|
64
65
|
- Sebastian Kippe
|
66
|
+
- Sharang Dashputre
|
65
67
|
- Spring MC
|
66
68
|
- tbprojects
|
67
69
|
- Tim Liner
|
68
70
|
- Tony Lewis
|
69
71
|
- Tom Crayford
|
72
|
+
- Tsu-Shiuan Lin
|
70
73
|
- Vincent Zhu
|
71
74
|
- Vladislav Shub
|
72
75
|
- V Sreekanth
|
@@ -82,3 +85,4 @@ Resque Scheduler authors
|
|
82
85
|
- malomalo
|
83
86
|
- sawanoboly
|
84
87
|
- serek
|
88
|
+
- iloveitaly
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,25 @@
|
|
2
2
|
|
3
3
|
**ATTN**: This project uses [semantic versioning](http://semver.org/).
|
4
4
|
|
5
|
+
## Unreleased
|
6
|
+
|
7
|
+
## [4.5.0]
|
8
|
+
### Added
|
9
|
+
- Support Ruby 3
|
10
|
+
- Add optional argument to `remove_schedule` to control reloading of the schedule
|
11
|
+
|
12
|
+
### Fixed
|
13
|
+
- Fix XSS vulnerability on the `/delayed/search` page
|
14
|
+
- Ensure that jobs are directly created for jobs enqueued at `Time.now`
|
15
|
+
- Fix queuing to custom job queues in `enqueue_delayed_selection`
|
16
|
+
- Ensure `before_enqueue` and `after_enqueue` callbacks are called in all cases of queuing a job
|
17
|
+
- Fix redis error when running resque-scheduler without Redis
|
18
|
+
|
19
|
+
### Changed
|
20
|
+
- Change CI from Travis to GitHub Actions
|
21
|
+
- Only allow rufus-scheduler versions lower than 3.7
|
22
|
+
- Update vagrant configuration
|
23
|
+
|
5
24
|
## [4.4.0] - 2019-04-11
|
6
25
|
### Added
|
7
26
|
- Support Resque 2
|
@@ -14,7 +33,7 @@
|
|
14
33
|
- Fix setting the `poll_sleep_amount` option
|
15
34
|
- Escape class names in resque-web /delayed URLs
|
16
35
|
|
17
|
-
|
36
|
+
### Changed
|
18
37
|
- Addressed redis-namespace deprecation warnings
|
19
38
|
- Ensure `enqueue_in` args are Numeric, catching a common issue passing `ActiveSupport::Duration`
|
20
39
|
|
data/README.md
CHANGED
@@ -2,10 +2,8 @@ resque-scheduler
|
|
2
2
|
================
|
3
3
|
|
4
4
|
|
5
|
-
[](https://gemnasium.com/github.com/resque/resque-scheduler)
|
6
5
|
[](https://badge.fury.io/rb/resque-scheduler)
|
7
|
-
[](https://ci.appveyor.com/project/resque/resque-scheduler/branch/master)
|
6
|
+
[](https://github.com/resque/resque-scheduler/actions)
|
9
7
|
[](https://codeclimate.com/github/resque/resque-scheduler)
|
10
8
|
|
11
9
|
### Description
|
@@ -641,7 +639,7 @@ that happens on Travis CI and Appveyor:
|
|
641
639
|
bundle install
|
642
640
|
|
643
641
|
# Make sure tests are green before you change stuff
|
644
|
-
bundle exec rake
|
642
|
+
bundle exec rubocop && bundle exec rake
|
645
643
|
# Change stuff
|
646
644
|
# Repeat
|
647
645
|
```
|
data/Rakefile
CHANGED
@@ -1,13 +1,9 @@
|
|
1
1
|
# vim:fileencoding=utf-8
|
2
2
|
require 'bundler/gem_tasks'
|
3
3
|
require 'rake/testtask'
|
4
|
-
require 'rubocop/rake_task'
|
5
4
|
require 'yard'
|
6
5
|
|
7
|
-
task default:
|
8
|
-
task default: [:test] if RUBY_PLATFORM =~ /java/
|
9
|
-
|
10
|
-
RuboCop::RakeTask.new
|
6
|
+
task default: :test
|
11
7
|
|
12
8
|
Rake::TestTask.new do |t|
|
13
9
|
t.libs << 'test'
|
@@ -24,7 +24,7 @@ module Resque
|
|
24
24
|
def enqueue_at_with_queue(queue, timestamp, klass, *args)
|
25
25
|
return false unless plugin.run_before_schedule_hooks(klass, *args)
|
26
26
|
|
27
|
-
if Resque.inline? || timestamp.to_i
|
27
|
+
if Resque.inline? || timestamp.to_i <= Time.now.to_i
|
28
28
|
# Just create the job and let resque perform it right away with
|
29
29
|
# inline. If the class is a custom job class, call self#scheduled
|
30
30
|
# on it. This allows you to do things like
|
@@ -33,7 +33,7 @@ module Resque
|
|
33
33
|
if klass.respond_to?(:scheduled)
|
34
34
|
klass.scheduled(queue, klass.to_s, *args)
|
35
35
|
else
|
36
|
-
Resque
|
36
|
+
Resque.enqueue_to(queue, klass, *args)
|
37
37
|
end
|
38
38
|
else
|
39
39
|
delayed_push(timestamp, job_to_hash_with_queue(queue, klass, args))
|
@@ -64,9 +64,9 @@ module Resque
|
|
64
64
|
end
|
65
65
|
|
66
66
|
# Used internally to stuff the item into the schedule sorted list.
|
67
|
-
# +timestamp+ can be either in seconds or a datetime object
|
68
|
-
#
|
69
|
-
# that time, else false
|
67
|
+
# +timestamp+ can be either in seconds or a datetime object. The
|
68
|
+
# insertion time complexity is O(log(n)). Returns true if it's
|
69
|
+
# the first job to be scheduled at that time, else false.
|
70
70
|
def delayed_push(timestamp, item)
|
71
71
|
# First add this item to the list for this timestamp
|
72
72
|
redis.rpush("delayed:#{timestamp.to_i}", encode(item))
|
@@ -88,6 +88,7 @@ module Resque
|
|
88
88
|
end
|
89
89
|
|
90
90
|
# Returns the size of the delayed queue schedule
|
91
|
+
# this does not represent the number of items in the queue to be scheduled
|
91
92
|
def delayed_queue_schedule_size
|
92
93
|
redis.zcard :delayed_queue_schedule
|
93
94
|
end
|
@@ -149,6 +150,11 @@ module Resque
|
|
149
150
|
remove_delayed_job(search)
|
150
151
|
end
|
151
152
|
|
153
|
+
def remove_delayed_in_queue(klass, queue, *args)
|
154
|
+
search = encode(job_to_hash_with_queue(queue, klass, args))
|
155
|
+
remove_delayed_job(search)
|
156
|
+
end
|
157
|
+
|
152
158
|
# Given an encoded item, enqueue it now
|
153
159
|
def enqueue_delayed(klass, *args)
|
154
160
|
hash = job_to_hash(klass, args)
|
@@ -157,6 +163,13 @@ module Resque
|
|
157
163
|
end
|
158
164
|
end
|
159
165
|
|
166
|
+
def enqueue_delayed_with_queue(klass, queue, *args)
|
167
|
+
hash = job_to_hash_with_queue(queue, klass, args)
|
168
|
+
remove_delayed_in_queue(klass, queue, *args).times do
|
169
|
+
Resque::Scheduler.enqueue_from_config(hash)
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
160
173
|
# Given a block, remove jobs that return true from a block
|
161
174
|
#
|
162
175
|
# This allows for removal of delayed jobs that have arguments matching
|
@@ -181,7 +194,15 @@ module Resque
|
|
181
194
|
found_jobs.reduce(0) do |sum, encoded_job|
|
182
195
|
decoded_job = decode(encoded_job)
|
183
196
|
klass = Util.constantize(decoded_job['class'])
|
184
|
-
|
197
|
+
queue = decoded_job['queue']
|
198
|
+
|
199
|
+
if queue
|
200
|
+
jobs_queued = enqueue_delayed_with_queue(klass, queue, *decoded_job['args'])
|
201
|
+
else
|
202
|
+
jobs_queued = enqueue_delayed(klass, *decoded_job['args'])
|
203
|
+
end
|
204
|
+
|
205
|
+
jobs_queued + sum
|
185
206
|
end
|
186
207
|
end
|
187
208
|
|
@@ -271,6 +292,8 @@ module Resque
|
|
271
292
|
{ class: klass.to_s, args: args, queue: queue }
|
272
293
|
end
|
273
294
|
|
295
|
+
# Removes a job from the queue, but not modify the timestamp schedule. This method
|
296
|
+
# will not effect the output of `delayed_queue_schedule_size`
|
274
297
|
def remove_delayed_job(encoded_job)
|
275
298
|
return 0 if Resque.inline?
|
276
299
|
|
@@ -283,6 +306,9 @@ module Resque
|
|
283
306
|
end
|
284
307
|
end
|
285
308
|
|
309
|
+
# timestamp key is not removed from the schedule, this is done later
|
310
|
+
# by the scheduler loop
|
311
|
+
|
286
312
|
return 0 if replies.nil? || replies.empty?
|
287
313
|
replies.each_slice(2).map(&:first).inject(:+)
|
288
314
|
end
|
@@ -36,7 +36,7 @@ module Resque
|
|
36
36
|
# :args can be any yaml which will be converted to a ruby literal and
|
37
37
|
# passed in a params. (optional)
|
38
38
|
#
|
39
|
-
# :
|
39
|
+
# :rails_env is the list of envs where the job gets loaded. Envs are
|
40
40
|
# comma separated (optional)
|
41
41
|
#
|
42
42
|
# :description is just that, a description of the job (optional). If
|
@@ -101,12 +101,13 @@ module Resque
|
|
101
101
|
end
|
102
102
|
|
103
103
|
# remove a given schedule by name
|
104
|
-
|
104
|
+
# Preventing a reload is optional and available to batch operations
|
105
|
+
def remove_schedule(name, reload = true)
|
105
106
|
non_persistent_schedules.delete(name)
|
106
107
|
redis.hdel(:persistent_schedules, name)
|
107
108
|
redis.sadd(:schedules_changed, name)
|
108
109
|
|
109
|
-
reload_schedule!
|
110
|
+
reload_schedule! if reload
|
110
111
|
end
|
111
112
|
|
112
113
|
private
|
@@ -46,7 +46,7 @@
|
|
46
46
|
<td><%= h(show_job_arguments(job['args'])) if job && delayed_timestamp_size == 1 %></td>
|
47
47
|
<td>
|
48
48
|
<% if job %>
|
49
|
-
<a href="<%=u URI("/delayed/jobs/#{
|
49
|
+
<a href="<%=u URI("/delayed/jobs/#{CGI.escape(job['class'])}?args=" + CGI.escape(job['args'].to_json)) %>">All schedules</a>
|
50
50
|
<% end %>
|
51
51
|
</td>
|
52
52
|
</tr>
|
@@ -87,7 +87,7 @@ module Resque
|
|
87
87
|
def delayed_jobs_klass
|
88
88
|
begin
|
89
89
|
klass = Resque::Scheduler::Util.constantize(params[:klass])
|
90
|
-
@args = JSON.load(
|
90
|
+
@args = JSON.load(CGI.unescape(params[:args]))
|
91
91
|
@timestamps = Resque.scheduled_at(klass, *@args)
|
92
92
|
rescue
|
93
93
|
@timestamps = []
|
data/lib/resque/scheduler.rb
CHANGED
data/resque-scheduler.gemspec
CHANGED
@@ -11,12 +11,14 @@ Gem::Specification.new do |spec|
|
|
11
11
|
Simon Eskildsen
|
12
12
|
Ryan Biesemeyer
|
13
13
|
Dan Buch
|
14
|
+
Michael Bianco
|
14
15
|
EOF
|
15
16
|
spec.email = %w(
|
16
17
|
bvandenbos@gmail.com
|
17
18
|
sirup@sirupsen.com
|
18
19
|
ryan@yaauie.com
|
19
20
|
dan@meatballhat.com
|
21
|
+
mike@mikebian.co
|
20
22
|
)
|
21
23
|
spec.summary = 'Light weight job scheduling on top of Resque'
|
22
24
|
spec.description = <<-DESCRIPTION
|
@@ -29,7 +31,7 @@ Gem::Specification.new do |spec|
|
|
29
31
|
|
30
32
|
spec.files = `git ls-files -z`.split("\0").reject do |f|
|
31
33
|
f.match(%r{^(test|spec|features|examples|bin|tasks)/}) ||
|
32
|
-
f.match(/^(Vagrantfile|Gemfile\.lock
|
34
|
+
f.match(/^(Vagrantfile|Gemfile\.lock)/) ||
|
33
35
|
f.match(/^\.(rubocop|simplecov|travis|vagrant|gitignore)/)
|
34
36
|
end
|
35
37
|
spec.bindir = 'exe'
|
@@ -48,6 +50,7 @@ Gem::Specification.new do |spec|
|
|
48
50
|
spec.add_development_dependency 'test-unit'
|
49
51
|
spec.add_development_dependency 'yard'
|
50
52
|
spec.add_development_dependency 'tzinfo-data'
|
53
|
+
spec.add_development_dependency 'timecop'
|
51
54
|
|
52
55
|
# We pin rubocop because new cops have a tendency to result in false-y
|
53
56
|
# positives for new contributors, which is not a nice experience.
|
@@ -55,6 +58,7 @@ Gem::Specification.new do |spec|
|
|
55
58
|
|
56
59
|
spec.add_runtime_dependency 'mono_logger', '~> 1.0'
|
57
60
|
spec.add_runtime_dependency 'redis', '>= 3.3'
|
58
|
-
spec.add_runtime_dependency 'resque', '>= 1.
|
59
|
-
|
61
|
+
spec.add_runtime_dependency 'resque', '>= 1.27'
|
62
|
+
# rufus-scheduler v3.7 causes a failure in test/multi_process_test.rb
|
63
|
+
spec.add_runtime_dependency 'rufus-scheduler', '~> 3.2', '< 3.7'
|
60
64
|
end
|
metadata
CHANGED
@@ -1,17 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: resque-scheduler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben VandenBos
|
8
8
|
- Simon Eskildsen
|
9
9
|
- Ryan Biesemeyer
|
10
10
|
- Dan Buch
|
11
|
-
|
11
|
+
- Michael Bianco
|
12
|
+
autorequire:
|
12
13
|
bindir: exe
|
13
14
|
cert_chain: []
|
14
|
-
date:
|
15
|
+
date: 2021-09-28 00:00:00.000000000 Z
|
15
16
|
dependencies:
|
16
17
|
- !ruby/object:Gem::Dependency
|
17
18
|
name: bundler
|
@@ -181,6 +182,20 @@ dependencies:
|
|
181
182
|
- - ">="
|
182
183
|
- !ruby/object:Gem::Version
|
183
184
|
version: '0'
|
185
|
+
- !ruby/object:Gem::Dependency
|
186
|
+
name: timecop
|
187
|
+
requirement: !ruby/object:Gem::Requirement
|
188
|
+
requirements:
|
189
|
+
- - ">="
|
190
|
+
- !ruby/object:Gem::Version
|
191
|
+
version: '0'
|
192
|
+
type: :development
|
193
|
+
prerelease: false
|
194
|
+
version_requirements: !ruby/object:Gem::Requirement
|
195
|
+
requirements:
|
196
|
+
- - ">="
|
197
|
+
- !ruby/object:Gem::Version
|
198
|
+
version: '0'
|
184
199
|
- !ruby/object:Gem::Dependency
|
185
200
|
name: rubocop
|
186
201
|
requirement: !ruby/object:Gem::Requirement
|
@@ -229,14 +244,14 @@ dependencies:
|
|
229
244
|
requirements:
|
230
245
|
- - ">="
|
231
246
|
- !ruby/object:Gem::Version
|
232
|
-
version: '1.
|
247
|
+
version: '1.27'
|
233
248
|
type: :runtime
|
234
249
|
prerelease: false
|
235
250
|
version_requirements: !ruby/object:Gem::Requirement
|
236
251
|
requirements:
|
237
252
|
- - ">="
|
238
253
|
- !ruby/object:Gem::Version
|
239
|
-
version: '1.
|
254
|
+
version: '1.27'
|
240
255
|
- !ruby/object:Gem::Dependency
|
241
256
|
name: rufus-scheduler
|
242
257
|
requirement: !ruby/object:Gem::Requirement
|
@@ -244,6 +259,9 @@ dependencies:
|
|
244
259
|
- - "~>"
|
245
260
|
- !ruby/object:Gem::Version
|
246
261
|
version: '3.2'
|
262
|
+
- - "<"
|
263
|
+
- !ruby/object:Gem::Version
|
264
|
+
version: '3.7'
|
247
265
|
type: :runtime
|
248
266
|
prerelease: false
|
249
267
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -251,6 +269,9 @@ dependencies:
|
|
251
269
|
- - "~>"
|
252
270
|
- !ruby/object:Gem::Version
|
253
271
|
version: '3.2'
|
272
|
+
- - "<"
|
273
|
+
- !ruby/object:Gem::Version
|
274
|
+
version: '3.7'
|
254
275
|
description: |2
|
255
276
|
Light weight job scheduling on top of Resque.
|
256
277
|
Adds methods enqueue_at/enqueue_in to schedule jobs in the future.
|
@@ -260,11 +281,15 @@ email:
|
|
260
281
|
- sirup@sirupsen.com
|
261
282
|
- ryan@yaauie.com
|
262
283
|
- dan@meatballhat.com
|
284
|
+
- mike@mikebian.co
|
263
285
|
executables:
|
264
286
|
- resque-scheduler
|
265
287
|
extensions: []
|
266
288
|
extra_rdoc_files: []
|
267
289
|
files:
|
290
|
+
- ".github/dependabot.yml"
|
291
|
+
- ".github/workflows/rubocop.yml"
|
292
|
+
- ".github/workflows/ruby.yml"
|
268
293
|
- AUTHORS.md
|
269
294
|
- CHANGELOG.md
|
270
295
|
- CODE_OF_CONDUCT.md
|
@@ -307,7 +332,7 @@ homepage: http://github.com/resque/resque-scheduler
|
|
307
332
|
licenses:
|
308
333
|
- MIT
|
309
334
|
metadata: {}
|
310
|
-
post_install_message:
|
335
|
+
post_install_message:
|
311
336
|
rdoc_options: []
|
312
337
|
require_paths:
|
313
338
|
- lib
|
@@ -322,8 +347,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
322
347
|
- !ruby/object:Gem::Version
|
323
348
|
version: '0'
|
324
349
|
requirements: []
|
325
|
-
rubygems_version: 3.
|
326
|
-
signing_key:
|
350
|
+
rubygems_version: 3.1.6
|
351
|
+
signing_key:
|
327
352
|
specification_version: 4
|
328
353
|
summary: Light weight job scheduling on top of Resque
|
329
354
|
test_files: []
|