resque-scheduler 2.5.5 → 3.0.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.

Files changed (77) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +12 -6
  3. data/.rubocop.yml +18 -113
  4. data/.rubocop_todo.yml +29 -0
  5. data/.simplecov +3 -1
  6. data/.travis.yml +12 -4
  7. data/.vagrant-provision-as-vagrant.sh +15 -0
  8. data/.vagrant-provision.sh +23 -0
  9. data/.vagrant-skel/bash_profile +7 -0
  10. data/.vagrant-skel/bashrc +7 -0
  11. data/AUTHORS.md +5 -0
  12. data/Gemfile +1 -2
  13. data/HISTORY.md +18 -0
  14. data/README.md +39 -11
  15. data/ROADMAP.md +0 -6
  16. data/Rakefile +11 -19
  17. data/Vagrantfile +14 -0
  18. data/bin/resque-scheduler +2 -2
  19. data/examples/Rakefile +1 -1
  20. data/examples/config/initializers/resque-web.rb +2 -2
  21. data/examples/dynamic-scheduling/app/jobs/fix_schedules_job.rb +2 -4
  22. data/examples/dynamic-scheduling/app/jobs/send_email_job.rb +1 -1
  23. data/examples/dynamic-scheduling/app/models/user.rb +2 -2
  24. data/examples/dynamic-scheduling/lib/tasks/resque.rake +2 -2
  25. data/lib/resque-scheduler.rb +3 -1
  26. data/lib/resque/scheduler.rb +112 -168
  27. data/lib/resque/scheduler/cli.rb +144 -0
  28. data/lib/resque/scheduler/configuration.rb +73 -0
  29. data/lib/resque/scheduler/delaying_extensions.rb +278 -0
  30. data/lib/resque/scheduler/env.rb +61 -0
  31. data/lib/resque/scheduler/extension.rb +13 -0
  32. data/lib/resque/scheduler/lock.rb +2 -1
  33. data/lib/resque/scheduler/lock/base.rb +6 -2
  34. data/lib/resque/scheduler/lock/basic.rb +4 -5
  35. data/lib/resque/scheduler/lock/resilient.rb +30 -37
  36. data/lib/resque/scheduler/locking.rb +94 -0
  37. data/lib/resque/scheduler/logger_builder.rb +72 -0
  38. data/lib/resque/scheduler/plugin.rb +31 -0
  39. data/lib/resque/scheduler/scheduling_extensions.rb +150 -0
  40. data/lib/resque/scheduler/server.rb +246 -0
  41. data/lib/{resque_scheduler → resque/scheduler}/server/views/delayed.erb +2 -1
  42. data/lib/{resque_scheduler → resque/scheduler}/server/views/delayed_schedules.erb +0 -0
  43. data/lib/{resque_scheduler → resque/scheduler}/server/views/delayed_timestamp.erb +0 -0
  44. data/lib/{resque_scheduler → resque/scheduler}/server/views/requeue-params.erb +0 -0
  45. data/lib/{resque_scheduler → resque/scheduler}/server/views/scheduler.erb +16 -1
  46. data/lib/{resque_scheduler → resque/scheduler}/server/views/search.erb +2 -1
  47. data/lib/{resque_scheduler → resque/scheduler}/server/views/search_form.erb +0 -0
  48. data/lib/resque/scheduler/signal_handling.rb +40 -0
  49. data/lib/{resque_scheduler → resque/scheduler}/tasks.rb +3 -5
  50. data/lib/resque/scheduler/util.rb +41 -0
  51. data/lib/resque/scheduler/version.rb +7 -0
  52. data/resque-scheduler.gemspec +21 -19
  53. data/script/migrate_to_timestamps_set.rb +5 -3
  54. data/tasks/resque_scheduler.rake +1 -1
  55. data/test/cli_test.rb +26 -69
  56. data/test/delayed_queue_test.rb +262 -169
  57. data/test/env_test.rb +41 -0
  58. data/test/resque-web_test.rb +169 -48
  59. data/test/scheduler_args_test.rb +73 -41
  60. data/test/scheduler_hooks_test.rb +9 -8
  61. data/test/scheduler_locking_test.rb +55 -36
  62. data/test/scheduler_setup_test.rb +52 -15
  63. data/test/scheduler_task_test.rb +15 -10
  64. data/test/scheduler_test.rb +215 -114
  65. data/test/support/redis_instance.rb +32 -33
  66. data/test/test_helper.rb +33 -36
  67. data/test/util_test.rb +11 -0
  68. metadata +113 -57
  69. data/lib/resque/scheduler_locking.rb +0 -91
  70. data/lib/resque_scheduler.rb +0 -386
  71. data/lib/resque_scheduler/cli.rb +0 -160
  72. data/lib/resque_scheduler/logger_builder.rb +0 -72
  73. data/lib/resque_scheduler/plugin.rb +0 -28
  74. data/lib/resque_scheduler/server.rb +0 -183
  75. data/lib/resque_scheduler/util.rb +0 -34
  76. data/lib/resque_scheduler/version.rb +0 -5
  77. data/test/redis-test.conf +0 -108
@@ -0,0 +1,41 @@
1
+ # vim:fileencoding=utf-8
2
+ require_relative 'test_helper'
3
+
4
+ context 'Env' do
5
+ def new_env(options = {})
6
+ Resque::Scheduler::Env.new(options)
7
+ end
8
+
9
+ test 'daemonizes when background is true' do
10
+ Process.expects(:daemon)
11
+ env = new_env(background: true)
12
+ env.setup
13
+ end
14
+
15
+ test 'reconnects redis when background is true' do
16
+ Process.stubs(:daemon)
17
+ mock_redis_client = mock('redis_client')
18
+ mock_redis = mock('redis')
19
+ mock_redis.expects(:client).returns(mock_redis_client)
20
+ mock_redis_client.expects(:reconnect)
21
+ Resque.expects(:redis).returns(mock_redis)
22
+ env = new_env(background: true)
23
+ env.setup
24
+ end
25
+
26
+ test 'aborts when background is given and Process does not support daemon' do
27
+ Process.stubs(:daemon)
28
+ Process.expects(:respond_to?).with('daemon').returns(false)
29
+ env = new_env(background: true)
30
+ env.expects(:abort)
31
+ env.setup
32
+ end
33
+
34
+ test 'writes pid to pidfile when given' do
35
+ mock_pidfile = mock('pidfile')
36
+ mock_pidfile.expects(:puts)
37
+ File.expects(:open).with('derp.pid', 'w').yields(mock_pidfile)
38
+ env = new_env(pidfile: 'derp.pid')
39
+ env.setup
40
+ end
41
+ end
@@ -1,28 +1,28 @@
1
- require File.dirname(__FILE__) + '/test_helper'
1
+ # vim:fileencoding=utf-8
2
+ require_relative 'test_helper'
2
3
 
3
- # Pull in the server test_helper from resque
4
- require 'resque/server/test_helper.rb'
4
+ require 'resque/server/test_helper'
5
5
 
6
- context "on GET to /schedule" do
7
- setup { get "/schedule" }
6
+ context 'on GET to /schedule' do
7
+ setup { get '/schedule' }
8
8
 
9
- should_respond_with_success
9
+ test('is 200') { assert last_response.ok? }
10
10
  end
11
11
 
12
- context "on GET to /schedule with scheduled jobs" do
12
+ context 'on GET to /schedule with scheduled jobs' do
13
13
  setup do
14
14
  Resque::Scheduler.env = 'production'
15
15
  Resque.schedule = {
16
16
  'some_ivar_job' => {
17
- 'cron' => "* * * * *",
17
+ 'cron' => '* * * * *',
18
18
  'class' => 'SomeIvarJob',
19
- 'args' => "/tmp",
19
+ 'args' => '/tmp',
20
20
  'rails_env' => 'production'
21
21
  },
22
22
  'some_other_job' => {
23
- 'every' => ['5m'],
23
+ 'every' => ['1m', ['1h']],
24
24
  'queue' => 'high',
25
- 'class' => 'SomeOtherJob',
25
+ 'custom_job_class' => 'SomeOtherJob',
26
26
  'args' => {
27
27
  'b' => 'blah'
28
28
  }
@@ -33,13 +33,19 @@ context "on GET to /schedule with scheduled jobs" do
33
33
  'class' => 'SomeFancyJob',
34
34
  'args' => 'sparkles',
35
35
  'rails_env' => 'fancy'
36
+ },
37
+ 'shared_env_job' => {
38
+ 'cron' => '* * * * *',
39
+ 'class' => 'SomeSharedEnvJob',
40
+ 'args' => '/tmp',
41
+ 'rails_env' => 'fancy, production'
36
42
  }
37
43
  }
38
44
  Resque::Scheduler.load_schedule!
39
- get "/schedule"
45
+ get '/schedule'
40
46
  end
41
47
 
42
- should_respond_with_success
48
+ test('is 200') { assert last_response.ok? }
43
49
 
44
50
  test 'see the scheduled job' do
45
51
  assert last_response.body.include?('SomeIvarJob')
@@ -48,22 +54,43 @@ context "on GET to /schedule with scheduled jobs" do
48
54
  test 'excludes jobs for other envs' do
49
55
  assert !last_response.body.include?('SomeFancyJob')
50
56
  end
57
+
58
+ test 'includes job used in multiple environments' do
59
+ assert last_response.body.include?('SomeSharedEnvJob')
60
+ end
61
+
62
+ test 'allows delete when dynamic' do
63
+ Resque::Scheduler.stubs(:dynamic).returns(true)
64
+ get '/schedule'
65
+
66
+ assert last_response.body.include?('Delete')
67
+ end
68
+
69
+ test "doesn't allow delete when static" do
70
+ Resque::Scheduler.stubs(:dynamic).returns(false)
71
+ get '/schedule'
72
+
73
+ assert !last_response.body.include?('Delete')
74
+ end
51
75
  end
52
76
 
53
- context "on GET to /delayed" do
54
- setup { get "/delayed" }
77
+ context 'on GET to /delayed' do
78
+ setup { get '/delayed' }
55
79
 
56
- should_respond_with_success
80
+ test('is 200') { assert last_response.ok? }
57
81
  end
58
82
 
59
- context "on GET to /delayed/jobs/:klass" do
83
+ context 'on GET to /delayed/jobs/:klass'do
60
84
  setup do
61
85
  @t = Time.now + 3600
62
86
  Resque.enqueue_at(@t, SomeIvarJob, 'foo', 'bar')
63
- get URI("/delayed/jobs/SomeIvarJob?args=" + URI.encode(%w{foo bar}.to_json)).to_s
87
+ get(
88
+ URI('/delayed/jobs/SomeIvarJob?args=' <<
89
+ URI.encode(%w(foo bar).to_json)).to_s
90
+ )
64
91
  end
65
92
 
66
- should_respond_with_success
93
+ test('is 200') { assert last_response.ok? }
67
94
 
68
95
  test 'see the scheduled job' do
69
96
  assert last_response.body.include?(@t.to_s)
@@ -80,10 +107,13 @@ context "on GET to /delayed/jobs/:klass" do
80
107
  end
81
108
  end
82
109
  Resque.enqueue_at(@t, Foo::Bar, 'foo', 'bar')
83
- get URI("/delayed/jobs/Foo::Bar?args=" + URI.encode(%w{foo bar}.to_json)).to_s
110
+ get(
111
+ URI('/delayed/jobs/Foo::Bar?args=' <<
112
+ URI.encode(%w(foo bar).to_json)).to_s
113
+ )
84
114
  end
85
115
 
86
- should_respond_with_success
116
+ test('is 200') { assert last_response.ok? }
87
117
 
88
118
  test 'see the scheduled job' do
89
119
  assert last_response.body.include?(@t.to_s)
@@ -91,17 +121,18 @@ context "on GET to /delayed/jobs/:klass" do
91
121
  end
92
122
  end
93
123
 
94
- def resque_schedule
95
- {
124
+ module Test
125
+ RESQUE_SCHEDULE = {
96
126
  'job_without_params' => {
97
127
  'cron' => '* * * * *',
98
128
  'class' => 'JobWithoutParams',
99
129
  'args' => {
100
130
  'host' => 'localhost'
101
131
  },
102
- 'rails_env' => 'production'},
132
+ 'rails_env' => 'production'
133
+ },
103
134
  'job_with_params' => {
104
- 'cron' => '* * * * *',
135
+ 'every' => '1m',
105
136
  'class' => 'JobWithParams',
106
137
  'args' => {
107
138
  'host' => 'localhost'
@@ -116,20 +147,21 @@ def resque_schedule
116
147
  }
117
148
  end
118
149
 
119
- context "POST /schedule/requeue" do
150
+ context 'POST /schedule/requeue' do
120
151
  setup do
121
- Resque.schedule = resque_schedule
152
+ Resque.schedule = Test::RESQUE_SCHEDULE
122
153
  Resque::Scheduler.load_schedule!
123
154
  end
124
155
 
125
156
  test 'job without params' do
126
157
  # Regular jobs without params should redirect to /overview
127
158
  job_name = 'job_without_params'
128
- Resque::Scheduler.stubs(:enqueue_from_config).once.with(Resque.schedule[job_name])
159
+ Resque::Scheduler.stubs(:enqueue_from_config)
160
+ .once.with(Resque.schedule[job_name])
129
161
 
130
- post '/schedule/requeue', {'job_name' => job_name}
162
+ post '/schedule/requeue', 'job_name' => job_name
131
163
  follow_redirect!
132
- assert_equal "http://example.org/overview", last_request.url
164
+ assert_equal 'http://example.org/overview', last_request.url
133
165
  assert last_response.ok?
134
166
  end
135
167
 
@@ -137,24 +169,30 @@ context "POST /schedule/requeue" do
137
169
  # If a job has params defined,
138
170
  # it should render the template with a form for the job params
139
171
  job_name = 'job_with_params'
140
- post '/schedule/requeue', {'job_name' => job_name}
172
+ post '/schedule/requeue', 'job_name' => job_name
141
173
 
142
174
  assert last_response.ok?, last_response.errors
143
- assert last_response.body.include?("This job requires parameters")
144
- assert last_response.body.include?("<input type=\"hidden\" name=\"job_name\" value=\"#{job_name}\">")
175
+ assert last_response.body.include?('This job requires parameters')
176
+ assert last_response.body.include?(
177
+ %Q(<input type="hidden" name="job_name" value="#{job_name}">)
178
+ )
145
179
 
146
- Resque.schedule[job_name]['parameters'].each do |param_name, param_config|
180
+ Resque.schedule[job_name]['parameters'].each do |_param_name, param_config|
147
181
  assert last_response.body.include?(
148
- "<span style=\"border-bottom:1px dotted;\" title=\"#{param_config['description']}\">(?)</span>")
182
+ '<span style="border-bottom:1px dotted;" ' <<
183
+ %Q[title="#{param_config['description']}">(?)</span>]
184
+ )
149
185
  assert last_response.body.include?(
150
- "<input type=\"text\" name=\"log_level\" value=\"#{param_config['default']}\">")
186
+ '<input type="text" name="log_level" ' <<
187
+ %Q(value="#{param_config['default']}">)
188
+ )
151
189
  end
152
190
  end
153
191
  end
154
192
 
155
- context "POST /schedule/requeue_with_params" do
193
+ context 'POST /schedule/requeue_with_params' do
156
194
  setup do
157
- Resque.schedule = resque_schedule
195
+ Resque.schedule = Test::RESQUE_SCHEDULE
158
196
  Resque::Scheduler.load_schedule!
159
197
  end
160
198
 
@@ -168,18 +206,18 @@ context "POST /schedule/requeue_with_params" do
168
206
 
169
207
  Resque::Scheduler.stubs(:enqueue_from_config).once.with(job_config)
170
208
 
171
- post '/schedule/requeue_with_params', {
172
- 'job_name' => job_name,
173
- 'log_level' => log_level
174
- }
209
+ post '/schedule/requeue_with_params',
210
+ 'job_name' => job_name,
211
+ 'log_level' => log_level
212
+
175
213
  follow_redirect!
176
- assert_equal "http://example.org/overview", last_request.url
214
+ assert_equal 'http://example.org/overview', last_request.url
177
215
 
178
216
  assert last_response.ok?, last_response.errors
179
217
  end
180
218
  end
181
219
 
182
- context "on POST to /delayed/search" do
220
+ context 'on POST to /delayed/search' do
183
221
  setup do
184
222
  t = Time.now + 60
185
223
  Resque.enqueue_at(t, SomeIvarJob)
@@ -187,24 +225,107 @@ context "on POST to /delayed/search" do
187
225
  end
188
226
 
189
227
  test 'should find matching scheduled job' do
190
- post "/delayed/search" , 'search' => 'ivar'
228
+ post '/delayed/search' , 'search' => 'ivar'
191
229
  assert last_response.status == 200
192
230
  assert last_response.body.include?('SomeIvarJob')
193
231
  end
194
232
 
195
233
  test 'should find matching queued job' do
196
- post "/delayed/search" , 'search' => 'quick'
234
+ post '/delayed/search' , 'search' => 'quick'
197
235
  assert last_response.status == 200
198
236
  assert last_response.body.include?('SomeQuickJob')
199
237
  end
200
238
  end
201
239
 
202
- context "on POST to /delayed/cancel_now" do
203
- setup { post "/delayed/cancel_now" }
240
+ context 'on POST to /delayed/cancel_now' do
241
+ setup { post '/delayed/cancel_now' }
204
242
 
205
243
  test 'redirects to overview' do
206
244
  assert last_response.status == 302
207
245
  assert last_response.header['Location'].include? '/delayed'
208
246
  end
247
+ end
248
+
249
+ context 'on POST to /delayed/clear' do
250
+ setup { post '/delayed/clear' }
251
+
252
+ test 'redirects to delayed' do
253
+ assert last_response.status == 302
254
+ assert last_response.header['Location'].include? '/delayed'
255
+ end
256
+ end
257
+
258
+ context 'on POST to /delayed/queue_now' do
259
+ setup { post '/delayed/queue_now' }
260
+
261
+ test 'redirects to overview' do
262
+ assert last_response.status == 302
263
+ assert last_response.header['Location'].include? '/overview'
264
+ end
265
+ end
266
+
267
+ context 'on GET to /delayed/:timestamp' do
268
+ setup { get '/delayed/1234567890' }
269
+
270
+ test 'shows delayed_timestamp view' do
271
+ assert last_response.status == 200
272
+ end
273
+ end
274
+
275
+ context 'DELETE /schedule when dynamic' do
276
+ setup do
277
+ Resque.schedule = Test::RESQUE_SCHEDULE
278
+ Resque::Scheduler.load_schedule!
279
+ Resque::Scheduler.stubs(:dynamic).returns(true)
280
+ end
281
+
282
+ test 'redirects to schedule page' do
283
+ delete '/schedule'
284
+
285
+ status = last_response.status
286
+ redirect_location = last_response.original_headers['Location']
287
+ response_status_msg = "Expected response to be a 302, but was a #{status}."
288
+ redirect_msg = "Redirect to #{redirect_location} instead of /schedule."
289
+
290
+ assert status == 302, response_status_msg
291
+ assert_match %r{/schedule/?$}, redirect_location, redirect_msg
292
+ end
293
+
294
+ test 'does not show the deleted job' do
295
+ delete '/schedule', job_name: 'job_with_params'
296
+ follow_redirect!
297
+
298
+ msg = 'The job should not have been shown on the /schedule page.'
299
+ assert !last_response.body.include?('job_with_params'), msg
300
+ end
209
301
 
302
+ test 'removes job from redis' do
303
+ delete '/schedule', job_name: 'job_with_params'
304
+
305
+ msg = 'The job was not deleted from redis.'
306
+ assert_nil Resque.fetch_schedule('job_with_params'), msg
307
+ end
308
+ end
309
+
310
+ context 'DELETE /schedule when static' do
311
+ setup do
312
+ Resque.schedule = Test::RESQUE_SCHEDULE
313
+ Resque::Scheduler.load_schedule!
314
+ Resque::Scheduler.stubs(:dynamic).returns(false)
315
+ end
316
+
317
+ test 'does not remove the job from the UI' do
318
+ delete '/schedule', job_name: 'job_with_params'
319
+ follow_redirect!
320
+
321
+ msg = 'The job should not have been removed from the /schedule page.'
322
+ assert last_response.body.include?('job_with_params'), msg
323
+ end
324
+
325
+ test 'does not remove job from redis' do
326
+ delete '/schedule', job_name: 'job_with_params'
327
+
328
+ msg = 'The job should not have been deleted from redis.'
329
+ assert Resque.fetch_schedule('job_with_params'), msg
330
+ end
210
331
  end
@@ -1,31 +1,58 @@
1
- require_relative 'test_helper'
1
+ # vim:fileencoding=utf-8
2
2
 
3
- context "scheduling jobs with arguments" do
3
+ require_relative 'test_helper'
4
4
 
5
+ context 'scheduling jobs with arguments' do
5
6
  setup do
6
7
  Resque::Scheduler.clear_schedule!
7
- Resque::Scheduler.dynamic = false
8
- Resque::Scheduler.mute = true
9
- end
10
-
11
- test "enqueue_from_config puts stuff in resque without class loaded" do
12
- Resque::Job.stubs(:create).once.returns(true).with('joes_queue', 'UndefinedJob', '/tmp')
13
- Resque::Scheduler.enqueue_from_config('cron' => "* * * * *", 'class' => 'UndefinedJob', 'args' => "/tmp", 'queue' => 'joes_queue')
14
- end
15
-
16
- test "enqueue_from_config with_every_syntax" do
17
- Resque::Job.stubs(:create).once.returns(true).with('james_queue', 'JamesJob', '/tmp')
18
- Resque::Scheduler.enqueue_from_config('every' => '1m', 'class' => 'JamesJob', 'args' => '/tmp', 'queue' => 'james_queue')
19
- end
20
-
21
- test "enqueue_from_config puts jobs in the resque queue" do
22
- Resque::Job.stubs(:create).once.returns(true).with(:ivar, SomeIvarJob, '/tmp')
23
- Resque::Scheduler.enqueue_from_config('cron' => "* * * * *", 'class' => 'SomeIvarJob', 'args' => "/tmp")
24
- end
25
-
26
- test "enqueue_from_config with custom_class_job in resque" do
27
- FakeCustomJobClass.stubs(:scheduled).once.returns(true).with(:ivar, 'SomeIvarJob', '/tmp')
28
- Resque::Scheduler.enqueue_from_config('cron' => "* * * * *", 'class' => 'SomeIvarJob', 'custom_job_class' => 'FakeCustomJobClass', 'args' => "/tmp")
8
+ Resque::Scheduler.configure do |c|
9
+ c.dynamic = false
10
+ c.quiet = true
11
+ c.poll_sleep_amount = nil
12
+ end
13
+ end
14
+
15
+ test 'enqueue_from_config puts stuff in resque without class loaded' do
16
+ Resque::Job.stubs(:create).once.returns(true)
17
+ .with('joes_queue', 'UndefinedJob', '/tmp')
18
+ Resque::Scheduler.enqueue_from_config(
19
+ 'cron' => '* * * * *',
20
+ 'class' => 'UndefinedJob',
21
+ 'args' => '/tmp',
22
+ 'queue' => 'joes_queue'
23
+ )
24
+ end
25
+
26
+ test 'enqueue_from_config with_every_syntax' do
27
+ Resque::Job.stubs(:create).once.returns(true)
28
+ .with('james_queue', 'JamesJob', '/tmp')
29
+ Resque::Scheduler.enqueue_from_config(
30
+ 'every' => '1m',
31
+ 'class' => 'JamesJob',
32
+ 'args' => '/tmp',
33
+ 'queue' => 'james_queue'
34
+ )
35
+ end
36
+
37
+ test 'enqueue_from_config puts jobs in the resque queue' do
38
+ Resque::Job.stubs(:create).once.returns(true)
39
+ .with(:ivar, SomeIvarJob, '/tmp')
40
+ Resque::Scheduler.enqueue_from_config(
41
+ 'cron' => '* * * * *',
42
+ 'class' => 'SomeIvarJob',
43
+ 'args' => '/tmp'
44
+ )
45
+ end
46
+
47
+ test 'enqueue_from_config with custom_class_job in resque' do
48
+ FakeCustomJobClass.stubs(:scheduled).once.returns(true)
49
+ .with(:ivar, 'SomeIvarJob', '/tmp')
50
+ Resque::Scheduler.enqueue_from_config(
51
+ 'cron' => '* * * * *',
52
+ 'class' => 'SomeIvarJob',
53
+ 'custom_job_class' => 'FakeCustomJobClass',
54
+ 'args' => '/tmp'
55
+ )
29
56
  end
30
57
 
31
58
  test 'enqueue_from_config puts stuff in resque when env matches' do
@@ -100,24 +127,26 @@ context "scheduling jobs with arguments" do
100
127
  assert_equal(1, Resque::Scheduler.rufus_scheduler.all_jobs.size)
101
128
  end
102
129
 
103
- test "calls the worker without arguments when 'args' is missing from the config" do
130
+ test "calls the worker without arguments when 'args' is missing " \
131
+ 'from the config' do
104
132
  Resque::Scheduler.enqueue_from_config(YAML.load(<<-YAML))
105
133
  class: SomeIvarJob
106
134
  YAML
107
- SomeIvarJob.expects(:perform).once.with()
135
+ SomeIvarJob.expects(:perform).once.with
108
136
  Resque.reserve('ivar').perform
109
137
  end
110
138
 
111
- test "calls the worker without arguments when 'args' is blank in the config" do
139
+ test "calls the worker without arguments when 'args' is blank " \
140
+ 'in the config' do
112
141
  Resque::Scheduler.enqueue_from_config(YAML.load(<<-YAML))
113
142
  class: SomeIvarJob
114
143
  args:
115
144
  YAML
116
- SomeIvarJob.expects(:perform).once.with()
145
+ SomeIvarJob.expects(:perform).once.with
117
146
  Resque.reserve('ivar').perform
118
147
  end
119
148
 
120
- test "calls the worker with a string when the config lists a string" do
149
+ test 'calls the worker with a string when the config lists a string' do
121
150
  Resque::Scheduler.enqueue_from_config(YAML.load(<<-YAML))
122
151
  class: SomeIvarJob
123
152
  args: string
@@ -126,7 +155,7 @@ context "scheduling jobs with arguments" do
126
155
  Resque.reserve('ivar').perform
127
156
  end
128
157
 
129
- test "calls the worker with a Fixnum when the config lists an integer" do
158
+ test 'calls the worker with a Fixnum when the config lists an integer' do
130
159
  Resque::Scheduler.enqueue_from_config(YAML.load(<<-YAML))
131
160
  class: SomeIvarJob
132
161
  args: 1
@@ -135,7 +164,8 @@ context "scheduling jobs with arguments" do
135
164
  Resque.reserve('ivar').perform
136
165
  end
137
166
 
138
- test "calls the worker with multiple arguments when the config lists an array" do
167
+ test 'calls the worker with multiple arguments when the config ' \
168
+ 'lists an array' do
139
169
  Resque::Scheduler.enqueue_from_config(YAML.load(<<-YAML))
140
170
  class: SomeIvarJob
141
171
  args:
@@ -146,7 +176,8 @@ context "scheduling jobs with arguments" do
146
176
  Resque.reserve('ivar').perform
147
177
  end
148
178
 
149
- test "calls the worker with an array when the config lists a nested array" do
179
+ test 'calls the worker with an array when the config lists ' \
180
+ 'a nested array' do
150
181
  Resque::Scheduler.enqueue_from_config(YAML.load(<<-YAML))
151
182
  class: SomeIvarJob
152
183
  args:
@@ -157,7 +188,7 @@ context "scheduling jobs with arguments" do
157
188
  Resque.reserve('ivar').perform
158
189
  end
159
190
 
160
- test "calls the worker with a hash when the config lists a hash" do
191
+ test 'calls the worker with a hash when the config lists a hash' do
161
192
  Resque::Scheduler.enqueue_from_config(YAML.load(<<-YAML))
162
193
  class: SomeIvarJob
163
194
  args:
@@ -167,24 +198,25 @@ context "scheduling jobs with arguments" do
167
198
  Resque.reserve('ivar').perform
168
199
  end
169
200
 
170
- test "calls the worker with a nested hash when the config lists a nested hash" do
201
+ test 'calls the worker with a nested hash when the config lists ' \
202
+ 'a nested hash' do
171
203
  Resque::Scheduler.enqueue_from_config(YAML.load(<<-YAML))
172
204
  class: SomeIvarJob
173
205
  args:
174
206
  first_key:
175
207
  second_key: value
176
208
  YAML
177
- SomeIvarJob.expects(:perform).once.with('first_key' => {'second_key' => 'value'})
209
+ SomeIvarJob.expects(:perform).once
210
+ .with('first_key' => { 'second_key' => 'value' })
178
211
  Resque.reserve('ivar').perform
179
212
  end
180
-
181
- test "poll_sleep_amount defaults to 5" do
213
+
214
+ test 'poll_sleep_amount defaults to 5' do
182
215
  assert_equal 5, Resque::Scheduler.poll_sleep_amount
183
216
  end
184
-
185
- test "poll_sleep_amount is settable" do
217
+
218
+ test 'poll_sleep_amount is settable' do
186
219
  Resque::Scheduler.poll_sleep_amount = 1
187
- assert_equal 1, Resque::Scheduler.poll_sleep_amount
220
+ assert_equal 1, Resque::Scheduler.poll_sleep_amount
188
221
  end
189
-
190
222
  end