resque 1.26.pre.0 → 1.26.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 might be problematic. Click here for more details.

Files changed (42) hide show
  1. checksums.yaml +7 -0
  2. data/HISTORY.md +29 -16
  3. data/README.markdown +60 -6
  4. data/Rakefile +4 -17
  5. data/bin/resque-web +4 -0
  6. data/lib/resque.rb +116 -16
  7. data/lib/resque/errors.rb +1 -0
  8. data/lib/resque/failure.rb +11 -5
  9. data/lib/resque/failure/multiple.rb +6 -1
  10. data/lib/resque/failure/redis.rb +13 -4
  11. data/lib/resque/failure/redis_multi_queue.rb +14 -6
  12. data/lib/resque/helpers.rb +5 -64
  13. data/lib/resque/job.rb +25 -79
  14. data/lib/resque/logging.rb +1 -1
  15. data/lib/resque/plugin.rb +22 -10
  16. data/lib/resque/server.rb +35 -7
  17. data/lib/resque/server/helpers.rb +1 -1
  18. data/lib/resque/server/views/failed.erb +1 -1
  19. data/lib/resque/server/views/failed_job.erb +3 -3
  20. data/lib/resque/server/views/failed_queues_overview.erb +3 -3
  21. data/lib/resque/server/views/workers.erb +2 -0
  22. data/lib/resque/server/views/working.erb +4 -5
  23. data/lib/resque/tasks.rb +7 -25
  24. data/lib/resque/vendor/utf8_util/utf8_util_19.rb +1 -0
  25. data/lib/resque/version.rb +1 -1
  26. data/lib/resque/worker.rb +225 -116
  27. metadata +68 -90
  28. data/test/airbrake_test.rb +0 -27
  29. data/test/dump.rdb +0 -0
  30. data/test/failure_base_test.rb +0 -15
  31. data/test/job_hooks_test.rb +0 -464
  32. data/test/job_plugins_test.rb +0 -230
  33. data/test/logging_test.rb +0 -24
  34. data/test/plugin_test.rb +0 -116
  35. data/test/redis-test-cluster.conf +0 -115
  36. data/test/redis-test.conf +0 -115
  37. data/test/resque-web_test.rb +0 -59
  38. data/test/resque_failure_redis_test.rb +0 -19
  39. data/test/resque_hook_test.rb +0 -165
  40. data/test/resque_test.rb +0 -278
  41. data/test/test_helper.rb +0 -198
  42. data/test/worker_test.rb +0 -1015
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: resque
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.26.pre.0
5
- prerelease: 5
4
+ version: 1.26.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Chris Wanstrath
@@ -11,28 +10,25 @@ authors:
11
10
  autorequire:
12
11
  bindir: bin
13
12
  cert_chain: []
14
- date: 2013-12-06 00:00:00.000000000 Z
13
+ date: 2016-03-11 00:00:00.000000000 Z
15
14
  dependencies:
16
15
  - !ruby/object:Gem::Dependency
17
16
  name: redis-namespace
18
17
  requirement: !ruby/object:Gem::Requirement
19
- none: false
20
18
  requirements:
21
19
  - - ~>
22
20
  - !ruby/object:Gem::Version
23
- version: '1.2'
21
+ version: '1.3'
24
22
  type: :runtime
25
23
  prerelease: false
26
24
  version_requirements: !ruby/object:Gem::Requirement
27
- none: false
28
25
  requirements:
29
26
  - - ~>
30
27
  - !ruby/object:Gem::Version
31
- version: '1.2'
28
+ version: '1.3'
32
29
  - !ruby/object:Gem::Dependency
33
30
  name: vegas
34
31
  requirement: !ruby/object:Gem::Requirement
35
- none: false
36
32
  requirements:
37
33
  - - ~>
38
34
  - !ruby/object:Gem::Version
@@ -40,7 +36,6 @@ dependencies:
40
36
  type: :runtime
41
37
  prerelease: false
42
38
  version_requirements: !ruby/object:Gem::Requirement
43
- none: false
44
39
  requirements:
45
40
  - - ~>
46
41
  - !ruby/object:Gem::Version
@@ -48,23 +43,20 @@ dependencies:
48
43
  - !ruby/object:Gem::Dependency
49
44
  name: sinatra
50
45
  requirement: !ruby/object:Gem::Requirement
51
- none: false
52
46
  requirements:
53
- - - ! '>='
47
+ - - '>='
54
48
  - !ruby/object:Gem::Version
55
49
  version: 0.9.2
56
50
  type: :runtime
57
51
  prerelease: false
58
52
  version_requirements: !ruby/object:Gem::Requirement
59
- none: false
60
53
  requirements:
61
- - - ! '>='
54
+ - - '>='
62
55
  - !ruby/object:Gem::Version
63
56
  version: 0.9.2
64
57
  - !ruby/object:Gem::Dependency
65
58
  name: multi_json
66
59
  requirement: !ruby/object:Gem::Requirement
67
- none: false
68
60
  requirements:
69
61
  - - ~>
70
62
  - !ruby/object:Gem::Version
@@ -72,7 +64,6 @@ dependencies:
72
64
  type: :runtime
73
65
  prerelease: false
74
66
  version_requirements: !ruby/object:Gem::Requirement
75
- none: false
76
67
  requirements:
77
68
  - - ~>
78
69
  - !ruby/object:Gem::Version
@@ -80,7 +71,6 @@ dependencies:
80
71
  - !ruby/object:Gem::Dependency
81
72
  name: mono_logger
82
73
  requirement: !ruby/object:Gem::Requirement
83
- none: false
84
74
  requirements:
85
75
  - - ~>
86
76
  - !ruby/object:Gem::Version
@@ -88,21 +78,26 @@ dependencies:
88
78
  type: :runtime
89
79
  prerelease: false
90
80
  version_requirements: !ruby/object:Gem::Requirement
91
- none: false
92
81
  requirements:
93
82
  - - ~>
94
83
  - !ruby/object:Gem::Version
95
84
  version: '1.0'
96
- description: ! " Resque is a Redis-backed Ruby library for creating background
97
- jobs,\n placing those jobs on multiple queues, and processing them later.\n\n
98
- \ Background jobs can be any Ruby class or module that responds to\n perform.
99
- Your existing classes can easily be converted to background\n jobs or you can
100
- create new classes specifically to do work. Or, you\n can do both.\n\n Resque
101
- is heavily inspired by DelayedJob (which rocks) and is\n comprised of three parts:\n\n
102
- \ * A Ruby library for creating, querying, and processing jobs\n * A Rake task
103
- for starting a worker which processes jobs\n * A Sinatra app for monitoring queues,
104
- jobs, and workers.\n"
105
- email: chris@ozmm.org
85
+ description: |2
86
+ Resque is a Redis-backed Ruby library for creating background jobs,
87
+ placing those jobs on multiple queues, and processing them later.
88
+
89
+ Background jobs can be any Ruby class or module that responds to
90
+ perform. Your existing classes can easily be converted to background
91
+ jobs or you can create new classes specifically to do work. Or, you
92
+ can do both.
93
+
94
+ Resque is heavily inspired by DelayedJob (which rocks) and is
95
+ comprised of three parts:
96
+
97
+ * A Ruby library for creating, querying, and processing jobs
98
+ * A Rake task for starting a worker which processes jobs
99
+ * A Sinatra app for monitoring queues, jobs, and workers.
100
+ email: steve@steveklabnik.com
106
101
  executables:
107
102
  - resque
108
103
  - resque-web
@@ -115,96 +110,79 @@ files:
115
110
  - Rakefile
116
111
  - LICENSE
117
112
  - HISTORY.md
118
- - lib/resque/errors.rb
119
- - lib/resque/failure/airbrake.rb
120
- - lib/resque/failure/base.rb
121
- - lib/resque/failure/multiple.rb
122
- - lib/resque/failure/redis.rb
123
- - lib/resque/failure/redis_multi_queue.rb
124
- - lib/resque/failure.rb
125
- - lib/resque/helpers.rb
126
- - lib/resque/job.rb
127
- - lib/resque/log_formatters/quiet_formatter.rb
128
- - lib/resque/log_formatters/verbose_formatter.rb
129
- - lib/resque/log_formatters/very_verbose_formatter.rb
113
+ - lib/tasks/redis.rake
114
+ - lib/tasks/resque.rake
115
+ - lib/resque.rb
116
+ - lib/resque/server.rb
130
117
  - lib/resque/logging.rb
131
118
  - lib/resque/plugin.rb
132
- - lib/resque/server/helpers.rb
133
- - lib/resque/server/public/favicon.ico
134
- - lib/resque/server/public/idle.png
135
- - lib/resque/server/public/jquery-1.3.2.min.js
136
- - lib/resque/server/public/jquery.relatize_date.js
137
- - lib/resque/server/public/poll.png
138
- - lib/resque/server/public/ranger.js
139
- - lib/resque/server/public/reset.css
140
- - lib/resque/server/public/style.css
141
- - lib/resque/server/public/working.png
142
- - lib/resque/server/test_helper.rb
143
- - lib/resque/server/views/error.erb
144
- - lib/resque/server/views/failed.erb
119
+ - lib/resque/version.rb
120
+ - lib/resque/tasks.rb
121
+ - lib/resque/server/views/layout.erb
145
122
  - lib/resque/server/views/failed_job.erb
146
- - lib/resque/server/views/failed_queues_overview.erb
123
+ - lib/resque/server/views/failed.erb
124
+ - lib/resque/server/views/workers.erb
147
125
  - lib/resque/server/views/key_sets.erb
148
- - lib/resque/server/views/key_string.erb
149
- - lib/resque/server/views/layout.erb
150
126
  - lib/resque/server/views/next_more.erb
151
- - lib/resque/server/views/overview.erb
127
+ - lib/resque/server/views/working.erb
128
+ - lib/resque/server/views/error.erb
129
+ - lib/resque/server/views/failed_queues_overview.erb
152
130
  - lib/resque/server/views/queues.erb
131
+ - lib/resque/server/views/key_string.erb
153
132
  - lib/resque/server/views/stats.erb
154
- - lib/resque/server/views/workers.erb
155
- - lib/resque/server/views/working.erb
156
- - lib/resque/server.rb
133
+ - lib/resque/server/views/overview.erb
134
+ - lib/resque/server/test_helper.rb
135
+ - lib/resque/server/public/style.css
136
+ - lib/resque/server/public/working.png
137
+ - lib/resque/server/public/jquery-1.3.2.min.js
138
+ - lib/resque/server/public/idle.png
139
+ - lib/resque/server/public/favicon.ico
140
+ - lib/resque/server/public/reset.css
141
+ - lib/resque/server/public/ranger.js
142
+ - lib/resque/server/public/poll.png
143
+ - lib/resque/server/public/jquery.relatize_date.js
144
+ - lib/resque/server/helpers.rb
145
+ - lib/resque/job.rb
146
+ - lib/resque/failure/redis_multi_queue.rb
147
+ - lib/resque/failure/redis.rb
148
+ - lib/resque/failure/base.rb
149
+ - lib/resque/failure/airbrake.rb
150
+ - lib/resque/failure/multiple.rb
157
151
  - lib/resque/stat.rb
158
- - lib/resque/tasks.rb
152
+ - lib/resque/helpers.rb
153
+ - lib/resque/vendor/utf8_util.rb
159
154
  - lib/resque/vendor/utf8_util/utf8_util_18.rb
160
155
  - lib/resque/vendor/utf8_util/utf8_util_19.rb
161
- - lib/resque/vendor/utf8_util.rb
162
- - lib/resque/version.rb
163
156
  - lib/resque/worker.rb
164
- - lib/resque.rb
165
- - lib/tasks/redis.rake
166
- - lib/tasks/resque.rake
167
- - bin/resque
157
+ - lib/resque/log_formatters/very_verbose_formatter.rb
158
+ - lib/resque/log_formatters/verbose_formatter.rb
159
+ - lib/resque/log_formatters/quiet_formatter.rb
160
+ - lib/resque/failure.rb
161
+ - lib/resque/errors.rb
168
162
  - bin/resque-web
169
- - test/airbrake_test.rb
170
- - test/dump.rdb
171
- - test/failure_base_test.rb
172
- - test/job_hooks_test.rb
173
- - test/job_plugins_test.rb
174
- - test/logging_test.rb
175
- - test/plugin_test.rb
176
- - test/redis-test-cluster.conf
177
- - test/redis-test.conf
178
- - test/resque-web_test.rb
179
- - test/resque_failure_redis_test.rb
180
- - test/resque_hook_test.rb
181
- - test/resque_test.rb
182
- - test/test_helper.rb
183
- - test/worker_test.rb
184
- homepage: http://github.com/defunkt/resque
163
+ - bin/resque
164
+ homepage: http://resque.github.io/
185
165
  licenses: []
166
+ metadata: {}
186
167
  post_install_message:
187
168
  rdoc_options:
188
169
  - --charset=UTF-8
189
170
  require_paths:
190
171
  - lib
191
172
  required_ruby_version: !ruby/object:Gem::Requirement
192
- none: false
193
173
  requirements:
194
- - - ! '>='
174
+ - - '>='
195
175
  - !ruby/object:Gem::Version
196
176
  version: '0'
197
177
  required_rubygems_version: !ruby/object:Gem::Requirement
198
- none: false
199
178
  requirements:
200
- - - ! '>'
179
+ - - '>='
201
180
  - !ruby/object:Gem::Version
202
- version: 1.3.1
181
+ version: '0'
203
182
  requirements: []
204
183
  rubyforge_project:
205
- rubygems_version: 1.8.24
184
+ rubygems_version: 2.0.14.1
206
185
  signing_key:
207
- specification_version: 3
186
+ specification_version: 4
208
187
  summary: Resque is a Redis-backed queueing system.
209
188
  test_files: []
210
- has_rdoc:
@@ -1,27 +0,0 @@
1
-
2
- require 'test_helper'
3
-
4
- begin
5
- require 'airbrake'
6
- rescue LoadError
7
- warn "Install airbrake gem to run Airbrake tests."
8
- end
9
-
10
- if defined? Airbrake
11
- require 'resque/failure/airbrake'
12
- context "Airbrake" do
13
- test "should be notified of an error" do
14
- exception = StandardError.new("BOOM")
15
- worker = Resque::Worker.new(:test)
16
- queue = "test"
17
- payload = {'class' => Object, 'args' => 66}
18
-
19
- Airbrake.expects(:notify_or_ignore).with(
20
- exception,
21
- :parameters => {:payload_class => 'Object', :payload_args => '66'})
22
-
23
- backend = Resque::Failure::Airbrake.new(exception, worker, queue, payload)
24
- backend.save
25
- end
26
- end
27
- end
Binary file
@@ -1,15 +0,0 @@
1
- require 'test_helper'
2
- require 'minitest/mock'
3
-
4
- require 'resque/failure/base'
5
-
6
- class TestFailure < Resque::Failure::Base
7
- end
8
-
9
- describe "Base failure class" do
10
- it "allows calling all without throwing" do
11
- with_failure_backend TestFailure do
12
- assert_empty Resque::Failure.all
13
- end
14
- end
15
- end
@@ -1,464 +0,0 @@
1
- require 'test_helper'
2
-
3
- context "Resque::Job before_perform" do
4
- include PerformJob
5
-
6
- class ::BeforePerformJob
7
- def self.before_perform_record_history(history)
8
- history << :before_perform
9
- end
10
-
11
- def self.perform(history)
12
- history << :perform
13
- end
14
- end
15
-
16
- test "it runs before_perform before perform" do
17
- result = perform_job(BeforePerformJob, history=[])
18
- assert_equal true, result, "perform returned true"
19
- assert_equal history, [:before_perform, :perform]
20
- end
21
-
22
- class ::BeforePerformJobFails
23
- def self.before_perform_fail_job(history)
24
- history << :before_perform
25
- raise StandardError
26
- end
27
- def self.perform(history)
28
- history << :perform
29
- end
30
- end
31
-
32
- test "raises an error and does not perform if before_perform fails" do
33
- history = []
34
- assert_raises StandardError do
35
- perform_job(BeforePerformJobFails, history)
36
- end
37
- assert_equal history, [:before_perform], "Only before_perform was run"
38
- end
39
-
40
- class ::BeforePerformJobAborts
41
- def self.before_perform_abort(history)
42
- history << :before_perform
43
- raise Resque::Job::DontPerform
44
- end
45
- def self.perform(history)
46
- history << :perform
47
- end
48
- end
49
-
50
- test "does not perform if before_perform raises Resque::Job::DontPerform" do
51
- result = perform_job(BeforePerformJobAborts, history=[])
52
- assert_equal false, result, "perform returned false"
53
- assert_equal history, [:before_perform], "Only before_perform was run"
54
- end
55
- end
56
-
57
- context "Resque::Job after_perform" do
58
- include PerformJob
59
-
60
- class ::AfterPerformJob
61
- def self.perform(history)
62
- history << :perform
63
- end
64
- def self.after_perform_record_history(history)
65
- history << :after_perform
66
- end
67
- end
68
-
69
- test "it runs after_perform after perform" do
70
- result = perform_job(AfterPerformJob, history=[])
71
- assert_equal true, result, "perform returned true"
72
- assert_equal history, [:perform, :after_perform]
73
- end
74
-
75
- class ::AfterPerformJobFails
76
- def self.perform(history)
77
- history << :perform
78
- end
79
- def self.after_perform_fail_job(history)
80
- history << :after_perform
81
- raise StandardError
82
- end
83
- end
84
-
85
- test "raises an error but has already performed if after_perform fails" do
86
- history = []
87
- assert_raises StandardError do
88
- perform_job(AfterPerformJobFails, history)
89
- end
90
- assert_equal history, [:perform, :after_perform], "Only after_perform was run"
91
- end
92
- end
93
-
94
- context "Resque::Job around_perform" do
95
- include PerformJob
96
-
97
- class ::AroundPerformJob
98
- def self.perform(history)
99
- history << :perform
100
- end
101
- def self.around_perform_record_history(history)
102
- history << :start_around_perform
103
- yield
104
- history << :finish_around_perform
105
- end
106
- end
107
-
108
- test "it runs around_perform then yields in order to perform" do
109
- result = perform_job(AroundPerformJob, history=[])
110
- assert_equal true, result, "perform returned true"
111
- assert_equal history, [:start_around_perform, :perform, :finish_around_perform]
112
- end
113
-
114
- class ::AroundPerformJobFailsBeforePerforming
115
- def self.perform(history)
116
- history << :perform
117
- end
118
- def self.around_perform_fail(history)
119
- history << :start_around_perform
120
- raise StandardError
121
- yield
122
- history << :finish_around_perform
123
- end
124
- end
125
-
126
- test "raises an error and does not perform if around_perform fails before yielding" do
127
- history = []
128
- assert_raises StandardError do
129
- perform_job(AroundPerformJobFailsBeforePerforming, history)
130
- end
131
- assert_equal history, [:start_around_perform], "Only part of around_perform was run"
132
- end
133
-
134
- class ::AroundPerformJobFailsWhilePerforming
135
- def self.perform(history)
136
- history << :perform
137
- raise StandardError
138
- end
139
- def self.around_perform_fail_in_yield(history)
140
- history << :start_around_perform
141
- begin
142
- yield
143
- ensure
144
- history << :ensure_around_perform
145
- end
146
- history << :finish_around_perform
147
- end
148
- end
149
-
150
- test "raises an error but may handle exceptions if perform fails" do
151
- history = []
152
- assert_raises StandardError do
153
- perform_job(AroundPerformJobFailsWhilePerforming, history)
154
- end
155
- assert_equal history, [:start_around_perform, :perform, :ensure_around_perform], "Only part of around_perform was run"
156
- end
157
-
158
- class ::AroundPerformJobDoesNotHaveToYield
159
- def self.perform(history)
160
- history << :perform
161
- end
162
- def self.around_perform_dont_yield(history)
163
- history << :start_around_perform
164
- history << :finish_around_perform
165
- end
166
- end
167
-
168
- test "around_perform is not required to yield" do
169
- history = []
170
- result = perform_job(AroundPerformJobDoesNotHaveToYield, history)
171
- assert_equal false, result, "perform returns false"
172
- assert_equal history, [:start_around_perform, :finish_around_perform], "perform was not run"
173
- end
174
- end
175
-
176
- context "Resque::Job on_failure" do
177
- include PerformJob
178
-
179
- class ::FailureJobThatDoesNotFail
180
- def self.perform(history)
181
- history << :perform
182
- end
183
- def self.on_failure_record_failure(exception, history)
184
- history << exception.message
185
- end
186
- end
187
-
188
- test "it does not call on_failure if no failures occur" do
189
- result = perform_job(FailureJobThatDoesNotFail, history=[])
190
- assert_equal true, result, "perform returned true"
191
- assert_equal history, [:perform]
192
- end
193
-
194
- class ::FailureJobThatFails
195
- def self.perform(history)
196
- history << :perform
197
- raise StandardError, "oh no"
198
- end
199
- def self.on_failure_record_failure(exception, history)
200
- history << exception.message
201
- end
202
- end
203
-
204
- test "it calls on_failure with the exception and then re-raises the exception" do
205
- history = []
206
- assert_raises StandardError do
207
- perform_job(FailureJobThatFails, history)
208
- end
209
- assert_equal history, [:perform, "oh no"]
210
- end
211
-
212
- class ::FailureJobThatFailsBadly
213
- def self.perform(history)
214
- history << :perform
215
- raise SyntaxError, "oh no"
216
- end
217
- def self.on_failure_record_failure(exception, history)
218
- history << exception.message
219
- end
220
- end
221
-
222
- test "it calls on_failure even with bad exceptions" do
223
- history = []
224
- assert_raises SyntaxError do
225
- perform_job(FailureJobThatFailsBadly, history)
226
- end
227
- assert_equal history, [:perform, "oh no"]
228
- end
229
- end
230
-
231
- context "Resque::Job after_enqueue" do
232
- include PerformJob
233
-
234
- class ::AfterEnqueueJob
235
- @queue = :jobs
236
- def self.after_enqueue_record_history(history)
237
- history << :after_enqueue
238
- end
239
-
240
- def self.perform(history)
241
- end
242
- end
243
-
244
- test "the after enqueue hook should run" do
245
- history = []
246
- @worker = Resque::Worker.new(:jobs)
247
- Resque.enqueue(AfterEnqueueJob, history)
248
- @worker.work(0)
249
- assert_equal history, [:after_enqueue], "after_enqueue was not run"
250
- end
251
- end
252
-
253
-
254
- context "Resque::Job before_enqueue" do
255
- include PerformJob
256
-
257
- class ::BeforeEnqueueJob
258
- @queue = :jobs
259
- def self.before_enqueue_record_history(history)
260
- history << :before_enqueue
261
- end
262
-
263
- def self.perform(history)
264
- end
265
- end
266
-
267
- class ::BeforeEnqueueJobAbort
268
- @queue = :jobs
269
- def self.before_enqueue_abort(history)
270
- false
271
- end
272
-
273
- def self.perform(history)
274
- end
275
- end
276
-
277
- test "the before enqueue hook should run" do
278
- history = []
279
- @worker = Resque::Worker.new(:jobs)
280
- assert Resque.enqueue(BeforeEnqueueJob, history)
281
- @worker.work(0)
282
- assert_equal history, [:before_enqueue], "before_enqueue was not run"
283
- end
284
-
285
- test "a before enqueue hook that returns false should prevent the job from getting queued" do
286
- history = []
287
- @worker = Resque::Worker.new(:jobs)
288
- assert_nil Resque.enqueue(BeforeEnqueueJobAbort, history)
289
- assert_equal 0, Resque.size(:jobs)
290
- end
291
- end
292
-
293
- context "Resque::Job after_dequeue" do
294
- include PerformJob
295
-
296
- class ::AfterDequeueJob
297
- @queue = :jobs
298
- def self.after_dequeue_record_history(history)
299
- history << :after_dequeue
300
- end
301
-
302
- def self.perform(history)
303
- end
304
- end
305
-
306
- test "the after dequeue hook should run" do
307
- history = []
308
- @worker = Resque::Worker.new(:jobs)
309
- Resque.dequeue(AfterDequeueJob, history)
310
- @worker.work(0)
311
- assert_equal history, [:after_dequeue], "after_dequeue was not run"
312
- end
313
- end
314
-
315
-
316
- context "Resque::Job before_dequeue" do
317
- include PerformJob
318
-
319
- class ::BeforeDequeueJob
320
- @queue = :jobs
321
- def self.before_dequeue_record_history(history)
322
- history << :before_dequeue
323
- end
324
-
325
- def self.perform(history)
326
- end
327
- end
328
-
329
- class ::BeforeDequeueJobAbort
330
- @queue = :jobs
331
- def self.before_dequeue_abort(history)
332
- false
333
- end
334
-
335
- def self.perform(history)
336
- end
337
- end
338
-
339
- test "the before dequeue hook should run" do
340
- history = []
341
- @worker = Resque::Worker.new(:jobs)
342
- Resque.dequeue(BeforeDequeueJob, history)
343
- @worker.work(0)
344
- assert_equal history, [:before_dequeue], "before_dequeue was not run"
345
- end
346
-
347
- test "a before dequeue hook that returns false should prevent the job from getting dequeued" do
348
- history = []
349
- assert_equal nil, Resque.dequeue(BeforeDequeueJobAbort, history)
350
- end
351
- end
352
-
353
- context "Resque::Job all hooks" do
354
- include PerformJob
355
-
356
- class ::VeryHookyJob
357
- def self.before_perform_record_history(history)
358
- history << :before_perform
359
- end
360
- def self.around_perform_record_history(history)
361
- history << :start_around_perform
362
- yield
363
- history << :finish_around_perform
364
- end
365
- def self.perform(history)
366
- history << :perform
367
- end
368
- def self.after_perform_record_history(history)
369
- history << :after_perform
370
- end
371
- def self.on_failure_record_history(exception, history)
372
- history << exception.message
373
- end
374
- end
375
-
376
- test "the complete hook order" do
377
- result = perform_job(VeryHookyJob, history=[])
378
- assert_equal true, result, "perform returned true"
379
- assert_equal history, [
380
- :before_perform,
381
- :start_around_perform,
382
- :perform,
383
- :finish_around_perform,
384
- :after_perform
385
- ]
386
- end
387
-
388
- class ::VeryHookyJobThatFails
389
- def self.before_perform_record_history(history)
390
- history << :before_perform
391
- end
392
- def self.around_perform_record_history(history)
393
- history << :start_around_perform
394
- yield
395
- history << :finish_around_perform
396
- end
397
- def self.perform(history)
398
- history << :perform
399
- end
400
- def self.after_perform_record_history(history)
401
- history << :after_perform
402
- raise StandardError, "oh no"
403
- end
404
- def self.on_failure_record_history(exception, history)
405
- history << exception.message
406
- end
407
- end
408
-
409
- test "the complete hook order with a failure at the last minute" do
410
- history = []
411
- assert_raises StandardError do
412
- perform_job(VeryHookyJobThatFails, history)
413
- end
414
- assert_equal history, [
415
- :before_perform,
416
- :start_around_perform,
417
- :perform,
418
- :finish_around_perform,
419
- :after_perform,
420
- "oh no"
421
- ]
422
- end
423
-
424
- class ::CallbacksInline
425
- @queue = :callbacks_inline
426
-
427
- def self.before_perform_record_history(history, count)
428
- history << :before_perform
429
- count['count'] += 1
430
- end
431
-
432
- def self.after_perform_record_history(history, count)
433
- history << :after_perform
434
- count['count'] += 1
435
- end
436
-
437
- def self.around_perform_record_history(history, count)
438
- history << :start_around_perform
439
- count['count'] += 1
440
- yield
441
- history << :finish_around_perform
442
- count['count'] += 1
443
- end
444
-
445
- def self.perform(history, count)
446
- history << :perform
447
- $history = history
448
- $count = count
449
- end
450
- end
451
-
452
- test "it runs callbacks when inline is true" do
453
- begin
454
- Resque.inline = true
455
- # Sending down two parameters that can be passed and updated by reference
456
- result = Resque.enqueue(CallbacksInline, [], {'count' => 0})
457
- assert_equal true, result, "perform returned true"
458
- assert_equal $history, [:before_perform, :start_around_perform, :perform, :finish_around_perform, :after_perform]
459
- assert_equal 4, $count['count']
460
- ensure
461
- Resque.inline = false
462
- end
463
- end
464
- end