resque-mongo 1.4.0 → 1.8.1

Sign up to get free protection for your applications and to get access to all the features.
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