resque-mongo 1.4.0 → 1.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. data/CONTRIBUTORS +24 -6
  2. data/HISTORY.md +65 -0
  3. data/README.markdown +34 -5
  4. data/Rakefile +1 -1
  5. data/bin/resque +2 -2
  6. data/bin/resque-web +6 -1
  7. data/deps.rip +2 -2
  8. data/docs/HOOKS.md +121 -0
  9. data/docs/PLUGINS.md +93 -0
  10. data/examples/demo/Rakefile +5 -0
  11. data/examples/monit/resque.monit +6 -0
  12. data/lib/resque.rb +94 -7
  13. data/lib/resque/errors.rb +3 -0
  14. data/lib/resque/failure.rb +3 -0
  15. data/lib/resque/failure/base.rb +3 -0
  16. data/lib/resque/failure/hoptoad.rb +29 -19
  17. data/lib/resque/failure/mongo.rb +10 -1
  18. data/lib/resque/helpers.rb +8 -2
  19. data/lib/resque/job.rb +107 -2
  20. data/lib/resque/plugin.rb +46 -0
  21. data/lib/resque/server.rb +30 -11
  22. data/lib/resque/server/public/ranger.js +50 -7
  23. data/lib/resque/server/public/style.css +8 -1
  24. data/lib/resque/server/test_helper.rb +19 -0
  25. data/lib/resque/server/views/failed.erb +17 -3
  26. data/lib/resque/server/views/key_sets.erb +20 -0
  27. data/lib/resque/server/views/{key.erb → key_string.erb} +2 -8
  28. data/lib/resque/server/views/queues.erb +5 -2
  29. data/lib/resque/server/views/stats.erb +2 -2
  30. data/lib/resque/server/views/workers.erb +1 -1
  31. data/lib/resque/server/views/working.erb +2 -0
  32. data/lib/resque/tasks.rb +1 -1
  33. data/lib/resque/version.rb +1 -1
  34. data/lib/resque/worker.rb +54 -15
  35. data/tasks/redis.rake +53 -29
  36. data/test/job_hooks_test.rb +302 -0
  37. data/test/job_plugins_test.rb +209 -0
  38. data/test/plugin_test.rb +116 -0
  39. data/test/resque-mongo_benchmark.rb +62 -0
  40. data/test/resque-web_test.rb +54 -0
  41. data/test/resque_test.rb +34 -0
  42. data/test/test_helper.rb +15 -0
  43. data/test/worker_test.rb +62 -2
  44. metadata +58 -23
@@ -54,6 +54,15 @@ def context(*args, &block)
54
54
  klass.class_eval &block
55
55
  end
56
56
 
57
+ ##
58
+ # Helper to perform job classes
59
+ #
60
+ module PerformJob
61
+ def perform_job(klass, *args)
62
+ resque_job = Resque::Job.new(:testqueue, 'class' => klass, 'args' => args)
63
+ resque_job.perform
64
+ end
65
+ end
57
66
 
58
67
  #
59
68
  # fixture classes
@@ -85,3 +94,9 @@ class GoodJob
85
94
  "Good job, #{name}"
86
95
  end
87
96
  end
97
+
98
+ class BadJobWithSyntaxError
99
+ def self.perform
100
+ raise SyntaxError, "Extra Bad job!"
101
+ end
102
+ end
@@ -4,6 +4,10 @@ context "Resque::Worker" do
4
4
  setup do
5
5
  Resque.drop
6
6
 
7
+ Resque.before_first_fork = nil
8
+ Resque.before_fork = nil
9
+ Resque.after_fork = nil
10
+
7
11
  @worker = Resque::Worker.new(:jobs)
8
12
  Resque::Job.create(:jobs, SomeJob, 20, '/tmp')
9
13
  end
@@ -14,6 +18,20 @@ context "Resque::Worker" do
14
18
  assert_equal 1, Resque::Failure.count
15
19
  end
16
20
 
21
+ test "failed jobs report exception and message" do
22
+ Resque::Job.create(:jobs, BadJobWithSyntaxError)
23
+ @worker.work(0)
24
+ assert_equal('SyntaxError', Resque::Failure.all['exception'])
25
+ assert_equal('Extra Bad job!', Resque::Failure.all['error'])
26
+ end
27
+
28
+ test "fails uncompleted jobs on exit" do
29
+ job = Resque::Job.new(:jobs, [GoodJob, "blah"])
30
+ @worker.working_on(job)
31
+ @worker.unregister_worker
32
+ assert_equal 1, Resque::Failure.count
33
+ end
34
+
17
35
  test "can peek at failed jobs" do
18
36
  10.times { Resque::Job.create(:jobs, BadJob) }
19
37
  @worker.work(0)
@@ -119,7 +137,7 @@ context "Resque::Worker" do
119
137
  worker_id = Resque.workers[0].to_s
120
138
  Resque.remove_worker(worker_id)
121
139
  assert_equal [], Resque.workers
122
- end
140
+ end
123
141
  end
124
142
 
125
143
  test "records what it is working on" do
@@ -197,7 +215,8 @@ context "Resque::Worker" do
197
215
 
198
216
  test "sets $0 while working" do
199
217
  @worker.work(0) do
200
- assert_equal "resque: Processing jobs since #{Time.now.to_i}", $0
218
+ ver = Resque::Version
219
+ assert_equal "resque-#{ver}: Processing jobs since #{Time.now.to_i}", $0
201
220
  end
202
221
  end
203
222
 
@@ -239,4 +258,45 @@ context "Resque::Worker" do
239
258
  @worker.work(0)
240
259
  assert_equal 1, Resque.info[:processed]
241
260
  end
261
+
262
+ test "Will call a before_first_fork hook only once" do
263
+ Resque.drop
264
+ $BEFORE_FORK_CALLED = 0
265
+ Resque.before_first_fork = Proc.new { $BEFORE_FORK_CALLED += 1 }
266
+ workerA = Resque::Worker.new(:jobs)
267
+ Resque::Job.create(:jobs, SomeJob, 20, '/tmp')
268
+
269
+ assert_equal 0, $BEFORE_FORK_CALLED
270
+
271
+ workerA.work(0)
272
+ assert_equal 1, $BEFORE_FORK_CALLED
273
+
274
+ # TODO: Verify it's only run once. Not easy.
275
+ # workerA.work(0)
276
+ # assert_equal 1, $BEFORE_FORK_CALLED
277
+ end
278
+
279
+ test "Will call a before_fork hook before forking" do
280
+ Resque.drop
281
+ $BEFORE_FORK_CALLED = false
282
+ Resque.before_fork = Proc.new { $BEFORE_FORK_CALLED = true }
283
+ workerA = Resque::Worker.new(:jobs)
284
+
285
+ assert !$BEFORE_FORK_CALLED
286
+ Resque::Job.create(:jobs, SomeJob, 20, '/tmp')
287
+ workerA.work(0)
288
+ assert $BEFORE_FORK_CALLED
289
+ end
290
+
291
+ test "Will call an after_fork hook after forking" do
292
+ Resque.drop
293
+ $AFTER_FORK_CALLED = false
294
+ Resque.after_fork = Proc.new { $AFTER_FORK_CALLED = true }
295
+ workerA = Resque::Worker.new(:jobs)
296
+
297
+ assert !$AFTER_FORK_CALLED
298
+ Resque::Job.create(:jobs, SomeJob, 20, '/tmp')
299
+ workerA.work(0)
300
+ assert $AFTER_FORK_CALLED
301
+ end
242
302
  end
metadata CHANGED
@@ -1,7 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: resque-mongo
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.0
4
+ prerelease: false
5
+ segments:
6
+ - 1
7
+ - 8
8
+ - 1
9
+ version: 1.8.1
5
10
  platform: ruby
6
11
  authors:
7
12
  - Christos Trochalakis
@@ -9,49 +14,62 @@ autorequire:
9
14
  bindir: bin
10
15
  cert_chain: []
11
16
 
12
- date: 2010-02-12 00:00:00 +02:00
17
+ date: 2010-04-08 00:00:00 +03:00
13
18
  default_executable:
14
19
  dependencies:
15
20
  - !ruby/object:Gem::Dependency
16
21
  name: mongo
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
20
24
  requirements:
21
25
  - - ">="
22
26
  - !ruby/object:Gem::Version
23
- version: "0"
24
- version:
27
+ segments:
28
+ - 0
29
+ - 20
30
+ version: "0.20"
31
+ type: :runtime
32
+ version_requirements: *id001
25
33
  - !ruby/object:Gem::Dependency
26
34
  name: vegas
27
- type: :runtime
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
35
+ prerelease: false
36
+ requirement: &id002 !ruby/object:Gem::Requirement
30
37
  requirements:
31
38
  - - ">="
32
39
  - !ruby/object:Gem::Version
40
+ segments:
41
+ - 0
42
+ - 1
43
+ - 2
33
44
  version: 0.1.2
34
- version:
45
+ type: :runtime
46
+ version_requirements: *id002
35
47
  - !ruby/object:Gem::Dependency
36
48
  name: sinatra
37
- type: :runtime
38
- version_requirement:
39
- version_requirements: !ruby/object:Gem::Requirement
49
+ prerelease: false
50
+ requirement: &id003 !ruby/object:Gem::Requirement
40
51
  requirements:
41
52
  - - ">="
42
53
  - !ruby/object:Gem::Version
54
+ segments:
55
+ - 0
56
+ - 9
57
+ - 2
43
58
  version: 0.9.2
44
- version:
59
+ type: :runtime
60
+ version_requirements: *id003
45
61
  - !ruby/object:Gem::Dependency
46
62
  name: jeweler
47
- type: :development
48
- version_requirement:
49
- version_requirements: !ruby/object:Gem::Requirement
63
+ prerelease: false
64
+ requirement: &id004 !ruby/object:Gem::Requirement
50
65
  requirements:
51
66
  - - ">="
52
67
  - !ruby/object:Gem::Version
68
+ segments:
69
+ - 0
53
70
  version: "0"
54
- version:
71
+ type: :development
72
+ version_requirements: *id004
55
73
  description: ""
56
74
  email: yatiohi@ideopolis.gr
57
75
  executables:
@@ -74,6 +92,8 @@ files:
74
92
  - bin/resque-web
75
93
  - config.ru
76
94
  - deps.rip
95
+ - docs/HOOKS.md
96
+ - docs/PLUGINS.md
77
97
  - examples/async_helper.rb
78
98
  - examples/demo/README.markdown
79
99
  - examples/demo/Rakefile
@@ -83,6 +103,7 @@ files:
83
103
  - examples/god/resque.god
84
104
  - examples/god/stale.god
85
105
  - examples/instance.rb
106
+ - examples/monit/resque.monit
86
107
  - examples/simple.rb
87
108
  - init.rb
88
109
  - lib/resque.rb
@@ -94,6 +115,7 @@ files:
94
115
  - lib/resque/failure/multiple.rb
95
116
  - lib/resque/helpers.rb
96
117
  - lib/resque/job.rb
118
+ - lib/resque/plugin.rb
97
119
  - lib/resque/server.rb
98
120
  - lib/resque/server/public/idle.png
99
121
  - lib/resque/server/public/jquery-1.3.2.min.js
@@ -103,9 +125,11 @@ files:
103
125
  - lib/resque/server/public/reset.css
104
126
  - lib/resque/server/public/style.css
105
127
  - lib/resque/server/public/working.png
128
+ - lib/resque/server/test_helper.rb
106
129
  - lib/resque/server/views/error.erb
107
130
  - lib/resque/server/views/failed.erb
108
- - lib/resque/server/views/key.erb
131
+ - lib/resque/server/views/key_sets.erb
132
+ - lib/resque/server/views/key_string.erb
109
133
  - lib/resque/server/views/layout.erb
110
134
  - lib/resque/server/views/next_more.erb
111
135
  - lib/resque/server/views/overview.erb
@@ -120,7 +144,11 @@ files:
120
144
  - tasks/redis.rake
121
145
  - tasks/resque.rake
122
146
  - test/dump.rdb
147
+ - test/job_hooks_test.rb
148
+ - test/job_plugins_test.rb
149
+ - test/plugin_test.rb
123
150
  - test/redis-test.conf
151
+ - test/resque-web_test.rb
124
152
  - test/resque_test.rb
125
153
  - test/test_helper.rb
126
154
  - test/worker_test.rb
@@ -137,23 +165,30 @@ required_ruby_version: !ruby/object:Gem::Requirement
137
165
  requirements:
138
166
  - - ">="
139
167
  - !ruby/object:Gem::Version
168
+ segments:
169
+ - 0
140
170
  version: "0"
141
- version:
142
171
  required_rubygems_version: !ruby/object:Gem::Requirement
143
172
  requirements:
144
173
  - - ">="
145
174
  - !ruby/object:Gem::Version
175
+ segments:
176
+ - 0
146
177
  version: "0"
147
- version:
148
178
  requirements: []
149
179
 
150
180
  rubyforge_project:
151
- rubygems_version: 1.3.5
181
+ rubygems_version: 1.3.6
152
182
  signing_key:
153
183
  specification_version: 3
154
184
  summary: ""
155
185
  test_files:
156
186
  - test/test_helper.rb
187
+ - test/job_plugins_test.rb
188
+ - test/resque-web_test.rb
189
+ - test/job_hooks_test.rb
190
+ - test/plugin_test.rb
191
+ - test/resque-mongo_benchmark.rb
157
192
  - test/worker_test.rb
158
193
  - test/resque_test.rb
159
194
  - examples/demo/app.rb