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.
- checksums.yaml +7 -0
- data/HISTORY.md +29 -16
- data/README.markdown +60 -6
- data/Rakefile +4 -17
- data/bin/resque-web +4 -0
- data/lib/resque.rb +116 -16
- data/lib/resque/errors.rb +1 -0
- data/lib/resque/failure.rb +11 -5
- data/lib/resque/failure/multiple.rb +6 -1
- data/lib/resque/failure/redis.rb +13 -4
- data/lib/resque/failure/redis_multi_queue.rb +14 -6
- data/lib/resque/helpers.rb +5 -64
- data/lib/resque/job.rb +25 -79
- data/lib/resque/logging.rb +1 -1
- data/lib/resque/plugin.rb +22 -10
- data/lib/resque/server.rb +35 -7
- data/lib/resque/server/helpers.rb +1 -1
- data/lib/resque/server/views/failed.erb +1 -1
- data/lib/resque/server/views/failed_job.erb +3 -3
- data/lib/resque/server/views/failed_queues_overview.erb +3 -3
- data/lib/resque/server/views/workers.erb +2 -0
- data/lib/resque/server/views/working.erb +4 -5
- data/lib/resque/tasks.rb +7 -25
- data/lib/resque/vendor/utf8_util/utf8_util_19.rb +1 -0
- data/lib/resque/version.rb +1 -1
- data/lib/resque/worker.rb +225 -116
- metadata +68 -90
- data/test/airbrake_test.rb +0 -27
- data/test/dump.rdb +0 -0
- data/test/failure_base_test.rb +0 -15
- data/test/job_hooks_test.rb +0 -464
- data/test/job_plugins_test.rb +0 -230
- data/test/logging_test.rb +0 -24
- data/test/plugin_test.rb +0 -116
- data/test/redis-test-cluster.conf +0 -115
- data/test/redis-test.conf +0 -115
- data/test/resque-web_test.rb +0 -59
- data/test/resque_failure_redis_test.rb +0 -19
- data/test/resque_hook_test.rb +0 -165
- data/test/resque_test.rb +0 -278
- data/test/test_helper.rb +0 -198
- 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.
|
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:
|
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.
|
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.
|
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:
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
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/
|
119
|
-
- lib/resque
|
120
|
-
- lib/resque
|
121
|
-
- lib/resque/
|
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/
|
133
|
-
- lib/resque/
|
134
|
-
- lib/resque/server/
|
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/
|
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/
|
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/
|
155
|
-
- lib/resque/server/
|
156
|
-
- lib/resque/server.
|
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/
|
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/
|
166
|
-
- lib/
|
167
|
-
-
|
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
|
-
-
|
170
|
-
|
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:
|
181
|
+
version: '0'
|
203
182
|
requirements: []
|
204
183
|
rubyforge_project:
|
205
|
-
rubygems_version:
|
184
|
+
rubygems_version: 2.0.14.1
|
206
185
|
signing_key:
|
207
|
-
specification_version:
|
186
|
+
specification_version: 4
|
208
187
|
summary: Resque is a Redis-backed queueing system.
|
209
188
|
test_files: []
|
210
|
-
has_rdoc:
|
data/test/airbrake_test.rb
DELETED
@@ -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
|
data/test/dump.rdb
DELETED
Binary file
|
data/test/failure_base_test.rb
DELETED
@@ -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
|
data/test/job_hooks_test.rb
DELETED
@@ -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
|