resque-scheduler 2.0.1 → 2.1.0

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

Potentially problematic release.


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

@@ -0,0 +1,14 @@
1
+ require 'redis'
2
+ require 'resque'
3
+
4
+ if ARGV.size != 1
5
+ puts "migrate_to_timestamps_set.rb <redis-host:redis-port>"
6
+ exit
7
+ end
8
+
9
+ Resque.redis = ARGV[0]
10
+ redis = Resque.redis
11
+ Array(redis.keys("delayed:*")).each do |key|
12
+ jobs = redis.lrange(key, 0, -1)
13
+ jobs.each {|job| redis.sadd("timestamps:#{job}", key)}
14
+ end
@@ -8,20 +8,21 @@ context "DelayedQueue" do
8
8
  end
9
9
 
10
10
  test "enqueue_at adds correct list and zset" do
11
- timestamp = Time.now - 1 # 1 second ago (in the past, should come out right away)
11
+ timestamp = Time.now + 1
12
+ encoded_job = Resque.encode({:class => SomeIvarJob.to_s, :args => ["path"], :queue => Resque.queue_from_class(SomeIvarJob)})
12
13
 
13
14
  assert_equal(0, Resque.redis.llen("delayed:#{timestamp.to_i}").to_i, "delayed queue should be empty to start")
15
+ assert_equal(0, Resque.redis.scard("timestamps:#{encoded_job}"), "job timestamps set should be empty to start")
14
16
 
15
17
  Resque.enqueue_at(timestamp, SomeIvarJob, "path")
16
18
 
17
19
  # Confirm the correct keys were added
18
20
  assert_equal(1, Resque.redis.llen("delayed:#{timestamp.to_i}").to_i, "delayed queue should have one entry now")
21
+ assert_equal(1, Resque.redis.scard("timestamps:#{encoded_job}"), "job timestamps should have one entry now")
19
22
  assert_equal(1, Resque.redis.zcard(:delayed_queue_schedule), "The delayed_queue_schedule should have 1 entry now")
20
23
 
21
- read_timestamp = Resque.next_delayed_timestamp
24
+ read_timestamp = timestamp.to_i
22
25
 
23
- # Confirm the timestamp came out correctly
24
- assert_equal(timestamp.to_i, read_timestamp, "The timestamp we pull out of redis should match the one we put in")
25
26
  item = Resque.next_item_for_timestamp(read_timestamp)
26
27
 
27
28
  # Confirm the item came out correctly
@@ -31,23 +32,25 @@ context "DelayedQueue" do
31
32
  # And now confirm the keys are gone
32
33
  assert(!Resque.redis.exists("delayed:#{timestamp.to_i}"))
33
34
  assert_equal(0, Resque.redis.zcard(:delayed_queue_schedule), "delayed queue should be empty")
35
+ assert_equal(0, Resque.redis.scard("timestamps:#{encoded_job}"), "job timestamps set should be empty")
34
36
  end
35
37
 
36
38
  test "enqueue_at with queue adds correct list and zset and queue" do
37
- timestamp = Time.now - 1 # 1 second ago (in the past, should come out right away)
39
+ timestamp = Time.now + 1
40
+ encoded_job = Resque.encode({:class => SomeIvarJob.to_s, :args => ["path"], :queue => 'critical'})
38
41
 
39
42
  assert_equal(0, Resque.redis.llen("delayed:#{timestamp.to_i}").to_i, "delayed queue should be empty to start")
43
+ assert_equal(0, Resque.redis.scard("timestamps:#{encoded_job}"), "job timestamps set should be empty to start")
40
44
 
41
45
  Resque.enqueue_at_with_queue('critical', timestamp, SomeIvarJob, "path")
42
46
 
43
47
  # Confirm the correct keys were added
44
48
  assert_equal(1, Resque.redis.llen("delayed:#{timestamp.to_i}").to_i, "delayed queue should have one entry now")
49
+ assert_equal(1, Resque.redis.scard("timestamps:#{encoded_job}"), "job timestamps should have one entry now")
45
50
  assert_equal(1, Resque.redis.zcard(:delayed_queue_schedule), "The delayed_queue_schedule should have 1 entry now")
46
51
 
47
- read_timestamp = Resque.next_delayed_timestamp
52
+ read_timestamp = timestamp.to_i
48
53
 
49
- # Confirm the timestamp came out correctly
50
- assert_equal(timestamp.to_i, read_timestamp, "The timestamp we pull out of redis should match the one we put in")
51
54
  item = Resque.next_item_for_timestamp(read_timestamp)
52
55
 
53
56
  # Confirm the item came out correctly
@@ -58,17 +61,21 @@ context "DelayedQueue" do
58
61
  # And now confirm the keys are gone
59
62
  assert(!Resque.redis.exists("delayed:#{timestamp.to_i}"))
60
63
  assert_equal(0, Resque.redis.zcard(:delayed_queue_schedule), "delayed queue should be empty")
64
+ assert_equal(0, Resque.redis.scard("timestamps:#{encoded_job}"), "job timestamps set should be empty")
61
65
  end
62
66
 
63
67
  test "a job in the future doesn't come out" do
64
68
  timestamp = Time.now + 600 # 10 minutes from now (in the future, shouldn't come out)
69
+ encoded_job = Resque.encode({:class => SomeIvarJob.to_s, :args => ["path"], :queue => Resque.queue_from_class(SomeIvarJob)})
65
70
 
66
71
  assert_equal(0, Resque.redis.llen("delayed:#{timestamp.to_i}").to_i, "delayed queue should be empty to start")
72
+ assert_equal(0, Resque.redis.scard("timestamps:#{encoded_job}"), "job timestamps set should be empty to start")
67
73
 
68
74
  Resque.enqueue_at(timestamp, SomeIvarJob, "path")
69
75
 
70
76
  # Confirm the correct keys were added
71
77
  assert_equal(1, Resque.redis.llen("delayed:#{timestamp.to_i}").to_i, "delayed queue should have one entry now")
78
+ assert_equal(1, Resque.redis.scard("timestamps:#{encoded_job}"), "job timestamps should have one entry now")
72
79
  assert_equal(1, Resque.redis.zcard(:delayed_queue_schedule), "The delayed_queue_schedule should have 1 entry now")
73
80
 
74
81
  read_timestamp = Resque.next_delayed_timestamp
@@ -88,19 +95,21 @@ context "DelayedQueue" do
88
95
 
89
96
  test "enqueue_at and enqueue_in are equivelent" do
90
97
  timestamp = Time.now + 60
98
+ encoded_job = Resque.encode({:class => SomeIvarJob.to_s, :args => ["path"], :queue => Resque.queue_from_class(SomeIvarJob)})
91
99
 
92
100
  Resque.enqueue_at(timestamp, SomeIvarJob, "path")
93
101
  Resque.enqueue_in(timestamp - Time.now, SomeIvarJob, "path")
94
102
 
95
103
  assert_equal(1, Resque.redis.zcard(:delayed_queue_schedule), "should have one timestamp in the delayed queue")
96
104
  assert_equal(2, Resque.redis.llen("delayed:#{timestamp.to_i}"), "should have 2 items in the timestamp queue")
105
+ assert_equal(1, Resque.redis.scard("timestamps:#{encoded_job}"), "job timestamps should have one entry now")
97
106
  end
98
107
 
99
108
  test "empty delayed_queue_peek returns empty array" do
100
109
  assert_equal([], Resque.delayed_queue_peek(0,20))
101
110
  end
102
111
 
103
- test "delqyed_queue_peek returns stuff" do
112
+ test "delayed_queue_peek returns stuff" do
104
113
  t = Time.now
105
114
  expected_timestamps = (1..5).to_a.map do |i|
106
115
  (t + 60 + i).to_i
@@ -166,12 +175,11 @@ context "DelayedQueue" do
166
175
 
167
176
  test "handle_delayed_item with items" do
168
177
  t = Time.now - 60 # in the past
169
- Resque.enqueue_at(t, SomeIvarJob)
170
- Resque.enqueue_at(t, SomeIvarJob)
171
178
 
172
179
  # 2 SomeIvarJob jobs should be created in the "ivar" queue
173
- Resque::Job.expects(:create).twice.with('ivar', SomeIvarJob, nil)
174
- Resque::Scheduler.handle_delayed_items
180
+ Resque::Job.expects(:create).twice.with(:ivar, SomeIvarJob)
181
+ Resque.enqueue_at(t, SomeIvarJob)
182
+ Resque.enqueue_at(t, SomeIvarJob)
175
183
  end
176
184
 
177
185
  test "handle_delayed_items with items in the future" do
@@ -186,9 +194,8 @@ context "DelayedQueue" do
186
194
 
187
195
  test "calls klass#scheduled when enqueuing jobs if it exists" do
188
196
  t = Time.now - 60
197
+ FakeCustomJobClassEnqueueAt.expects(:scheduled).once.with(:test, FakeCustomJobClassEnqueueAt.to_s, {:foo => "bar"})
189
198
  Resque.enqueue_at(t, FakeCustomJobClassEnqueueAt, :foo => "bar")
190
- FakeCustomJobClassEnqueueAt.expects(:scheduled).once.with('test', FakeCustomJobClassEnqueueAt.to_s, {"foo" => "bar"})
191
- Resque::Scheduler.handle_delayed_items
192
199
  end
193
200
 
194
201
  test "when Resque.inline = true, calls klass#scheduled when enqueuing jobs if it exists" do
@@ -218,6 +225,24 @@ context "DelayedQueue" do
218
225
  assert_equal(0, Resque.delayed_timestamp_peek(t, 0, 3).length)
219
226
  end
220
227
 
228
+ test "enqueue_delayed creates jobs and empties the delayed queue" do
229
+ t = Time.now + 60
230
+
231
+ Resque.enqueue_at(t, SomeIvarJob, "foo")
232
+ Resque.enqueue_at(t, SomeIvarJob, "bar")
233
+ Resque.enqueue_at(t, SomeIvarJob, "bar")
234
+
235
+ # 3 SomeIvarJob jobs should be created in the "ivar" queue
236
+ Resque::Job.expects(:create).never.with(:ivar, SomeIvarJob, "foo")
237
+ Resque::Job.expects(:create).twice.with(:ivar, SomeIvarJob, "bar")
238
+
239
+ # 2 SomeIvarJob jobs should be enqueued
240
+ assert_equal(2, Resque.enqueue_delayed(SomeIvarJob, "bar"))
241
+
242
+ # delayed queue for timestamp should have one remaining
243
+ assert_equal(1, Resque.delayed_timestamp_peek(t, 0, 3).length)
244
+ end
245
+
221
246
  test "handle_delayed_items works with out specifying queue (upgrade case)" do
222
247
  t = Time.now - 60
223
248
  Resque.delayed_push(t, :class => 'SomeIvarJob')
@@ -237,13 +262,23 @@ context "DelayedQueue" do
237
262
 
238
263
  Resque.reset_delayed_queue
239
264
  assert_equal(0, Resque.delayed_queue_schedule_size)
265
+ assert_equal(0, Resque.redis.keys("timestamps:*").size)
240
266
  end
241
267
 
242
268
  test "remove_delayed removes job and returns the count" do
243
269
  t = Time.now + 120
270
+ encoded_job = Resque.encode({:class => SomeIvarJob.to_s, :args => [], :queue => Resque.queue_from_class(SomeIvarJob)})
244
271
  Resque.enqueue_at(t, SomeIvarJob)
245
272
 
246
273
  assert_equal(1, Resque.remove_delayed(SomeIvarJob))
274
+ assert_equal(0, Resque.redis.scard("timestamps:#{encoded_job}"))
275
+ end
276
+
277
+ test "scheduled_at returns an array containing job schedule time" do
278
+ t = Time.now + 120
279
+ Resque.enqueue_at(t, SomeIvarJob)
280
+
281
+ assert_equal([t.to_i], Resque.scheduled_at(SomeIvarJob))
247
282
  end
248
283
 
249
284
  test "remove_delayed doesn't remove things it shouldn't" do
@@ -10,10 +10,10 @@ context "on GET to /schedule" do
10
10
  end
11
11
 
12
12
  context "on GET to /schedule with scheduled jobs" do
13
- setup do
13
+ setup do
14
14
  ENV['rails_env'] = 'production'
15
- Resque.schedule = {:some_ivar_job => {'cron' => "* * * * *", 'class' => 'SomeIvarJob', 'args' => "/tmp", 'rails_env' => 'production'},
16
- :some_other_job => {'queue' => 'high', 'class' => 'SomeOtherJob', 'args' => {:b => 'blah'}}}
15
+ Resque.schedule = {'some_ivar_job' => {'cron' => "* * * * *", 'class' => 'SomeIvarJob', 'args' => "/tmp", 'rails_env' => 'production'},
16
+ 'some_other_job' => {'every' => ['5m'], 'queue' => 'high', 'class' => 'SomeOtherJob', 'args' => {'b' => 'blah'}}}
17
17
  Resque::Scheduler.load_schedule!
18
18
  get "/schedule"
19
19
  end
@@ -77,7 +77,7 @@ context "scheduling jobs with arguments" do
77
77
  test "calls the worker without arguments when 'args' is blank in the config" do
78
78
  Resque::Scheduler.enqueue_from_config(YAML.load(<<-YAML))
79
79
  class: SomeIvarJob
80
- args:
80
+ args:
81
81
  YAML
82
82
  SomeIvarJob.expects(:perform).once.with()
83
83
  Resque.reserve('ivar').perform
@@ -0,0 +1,59 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+
3
+ context "Resque::Scheduler" do
4
+
5
+ setup do
6
+ Resque::Scheduler.dynamic = false
7
+ Resque.redis.flushall
8
+ Resque::Scheduler.clear_schedule!
9
+ end
10
+
11
+ test 'set custom logger' do
12
+ custom_logger = Logger.new('/dev/null')
13
+ Resque::Scheduler.logger = custom_logger
14
+ assert_equal(custom_logger, Resque::Scheduler.logger)
15
+ end
16
+
17
+ context 'logger default settings' do
18
+ setup do
19
+ nullify_logger
20
+ end
21
+
22
+ test 'uses STDOUT' do
23
+ assert_equal(Resque::Scheduler.logger.instance_variable_get(:@logdev).dev, STDOUT)
24
+ end
25
+ test 'not verbose' do
26
+ assert Resque::Scheduler.logger.level > Logger::DEBUG
27
+ end
28
+ test 'not muted' do
29
+ assert Resque::Scheduler.logger.level < Logger::FATAL
30
+ end
31
+
32
+ teardown do
33
+ nullify_logger
34
+ end
35
+ end
36
+
37
+ context 'logger custom settings' do
38
+ setup do
39
+ nullify_logger
40
+ end
41
+
42
+ test 'uses logfile' do
43
+ Resque::Scheduler.logfile = '/dev/null'
44
+ assert_equal(Resque::Scheduler.logger.instance_variable_get(:@logdev).filename, '/dev/null')
45
+ end
46
+ test 'set verbosity' do
47
+ Resque::Scheduler.verbose = true
48
+ assert Resque::Scheduler.logger.level == Logger::DEBUG
49
+ end
50
+ test 'mute logger' do
51
+ Resque::Scheduler.mute = true
52
+ assert Resque::Scheduler.logger.level == Logger::FATAL
53
+ end
54
+
55
+ teardown do
56
+ nullify_logger
57
+ end
58
+ end
59
+ end
@@ -191,6 +191,17 @@ context "Resque::Scheduler" do
191
191
  assert_equal({'cron' => "* * * * *", 'class' => 'SomeIvarJob', 'args' => "/tmp/75"},
192
192
  Resque.decode(Resque.redis.hget(:schedules, "my_ivar_job")))
193
193
  end
194
+
195
+ test "schedule= removes schedules not present in the given schedule argument" do
196
+ Resque::Scheduler.dynamic = true
197
+
198
+ Resque.schedule = {"old_job" => {'cron' => "* * * * *", 'class' => 'OldJob'}}
199
+ assert_equal({"old_job" => {'cron' => "* * * * *", 'class' => 'OldJob'}}, Resque.schedule)
200
+
201
+ Resque.schedule = {"new_job" => {'cron' => "* * * * *", 'class' => 'NewJob'}}
202
+ Resque.reload_schedule!
203
+ assert_equal({"new_job" => {'cron' => "* * * * *", 'class' => 'NewJob'}}, Resque.schedule)
204
+ end
194
205
 
195
206
  test "schedule= uses job name as 'class' argument if it's missing" do
196
207
  Resque::Scheduler.dynamic = true
@@ -6,7 +6,7 @@ dir = File.dirname(File.expand_path(__FILE__))
6
6
 
7
7
  require 'rubygems'
8
8
  require 'test/unit'
9
- require 'mocha'
9
+ require 'mocha/setup'
10
10
  require 'resque'
11
11
  $LOAD_PATH.unshift File.dirname(File.expand_path(__FILE__)) + '/../lib'
12
12
  require 'resque_scheduler'
@@ -57,7 +57,7 @@ def context(*args, &block)
57
57
  def self.teardown(&block) define_method(:teardown, &block) end
58
58
  end
59
59
  (class << klass; self end).send(:define_method, :name) { name.gsub(/\W/,'_') }
60
- klass.class_eval &block
60
+ klass.class_eval(&block)
61
61
  end
62
62
 
63
63
  class FakeCustomJobClass
@@ -83,3 +83,10 @@ class SomeRealClass
83
83
  :some_real_queue
84
84
  end
85
85
  end
86
+
87
+ def nullify_logger
88
+ Resque::Scheduler.mute = nil
89
+ Resque::Scheduler.verbose = nil
90
+ Resque::Scheduler.logfile = nil
91
+ Resque::Scheduler.logger = nil
92
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: resque-scheduler
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.1
4
+ version: 2.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,16 +9,64 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-03-21 00:00:00.000000000 Z
12
+ date: 2013-09-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '1.3'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '1.3'
30
+ - !ruby/object:Gem::Dependency
31
+ name: mocha
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rack-test
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: rake
16
64
  requirement: !ruby/object:Gem::Requirement
17
65
  none: false
18
66
  requirements:
19
67
  - - ! '>='
20
68
  - !ruby/object:Gem::Version
21
- version: 1.0.0
69
+ version: '0'
22
70
  type: :development
23
71
  prerelease: false
24
72
  version_requirements: !ruby/object:Gem::Requirement
@@ -26,7 +74,23 @@ dependencies:
26
74
  requirements:
27
75
  - - ! '>='
28
76
  - !ruby/object:Gem::Version
29
- version: 1.0.0
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: rubocop
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
30
94
  - !ruby/object:Gem::Dependency
31
95
  name: redis
32
96
  requirement: !ruby/object:Gem::Requirement
@@ -51,6 +115,9 @@ dependencies:
51
115
  - - ! '>='
52
116
  - !ruby/object:Gem::Version
53
117
  version: 1.20.0
118
+ - - <
119
+ - !ruby/object:Gem::Version
120
+ version: '1.25'
54
121
  type: :runtime
55
122
  prerelease: false
56
123
  version_requirements: !ruby/object:Gem::Requirement
@@ -59,6 +126,9 @@ dependencies:
59
126
  - - ! '>='
60
127
  - !ruby/object:Gem::Version
61
128
  version: 1.20.0
129
+ - - <
130
+ - !ruby/object:Gem::Version
131
+ version: '1.25'
62
132
  - !ruby/object:Gem::Dependency
63
133
  name: rufus-scheduler
64
134
  requirement: !ruby/object:Gem::Requirement
@@ -85,10 +155,14 @@ extensions: []
85
155
  extra_rdoc_files: []
86
156
  files:
87
157
  - .gitignore
158
+ - .rubocop.yml
159
+ - .travis.yml
160
+ - AUTHORS.md
161
+ - CONTRIBUTING.md
88
162
  - Gemfile
89
163
  - HISTORY.md
90
164
  - LICENSE
91
- - README.markdown
165
+ - README.md
92
166
  - Rakefile
93
167
  - lib/resque/scheduler.rb
94
168
  - lib/resque/scheduler/lock.rb
@@ -97,6 +171,7 @@ files:
97
171
  - lib/resque/scheduler/lock/resilient.rb
98
172
  - lib/resque/scheduler_locking.rb
99
173
  - lib/resque_scheduler.rb
174
+ - lib/resque_scheduler/logger_builder.rb
100
175
  - lib/resque_scheduler/plugin.rb
101
176
  - lib/resque_scheduler/server.rb
102
177
  - lib/resque_scheduler/server/views/delayed.erb
@@ -105,6 +180,7 @@ files:
105
180
  - lib/resque_scheduler/tasks.rb
106
181
  - lib/resque_scheduler/version.rb
107
182
  - resque-scheduler.gemspec
183
+ - script/migrate_to_timestamps_set.rb
108
184
  - tasks/resque_scheduler.rake
109
185
  - test/delayed_queue_test.rb
110
186
  - test/redis-test.conf
@@ -112,31 +188,48 @@ files:
112
188
  - test/scheduler_args_test.rb
113
189
  - test/scheduler_hooks_test.rb
114
190
  - test/scheduler_locking_test.rb
191
+ - test/scheduler_setup_test.rb
115
192
  - test/scheduler_test.rb
116
193
  - test/support/redis_instance.rb
117
194
  - test/test_helper.rb
118
- homepage: http://github.com/bvandenbos/resque-scheduler
195
+ homepage: http://github.com/resque/resque-scheduler
119
196
  licenses: []
120
197
  post_install_message:
121
198
  rdoc_options: []
122
199
  require_paths:
123
- - lib
200
+ - - lib
124
201
  required_ruby_version: !ruby/object:Gem::Requirement
125
202
  none: false
126
203
  requirements:
127
204
  - - ! '>='
128
205
  - !ruby/object:Gem::Version
129
206
  version: '0'
207
+ segments:
208
+ - 0
209
+ hash: 2224918234097590124
130
210
  required_rubygems_version: !ruby/object:Gem::Requirement
131
211
  none: false
132
212
  requirements:
133
213
  - - ! '>='
134
214
  - !ruby/object:Gem::Version
135
- version: 1.3.6
215
+ version: '0'
216
+ segments:
217
+ - 0
218
+ hash: 2224918234097590124
136
219
  requirements: []
137
220
  rubyforge_project:
138
221
  rubygems_version: 1.8.23
139
222
  signing_key:
140
223
  specification_version: 3
141
224
  summary: Light weight job scheduling on top of Resque
142
- test_files: []
225
+ test_files:
226
+ - test/delayed_queue_test.rb
227
+ - test/redis-test.conf
228
+ - test/resque-web_test.rb
229
+ - test/scheduler_args_test.rb
230
+ - test/scheduler_hooks_test.rb
231
+ - test/scheduler_locking_test.rb
232
+ - test/scheduler_setup_test.rb
233
+ - test/scheduler_test.rb
234
+ - test/support/redis_instance.rb
235
+ - test/test_helper.rb