resque_jobs_tree 0.4.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -9,7 +9,7 @@ class ResqueJobsTree::Definitions
9
9
  end
10
10
 
11
11
  def after_perform &block
12
- @before_perform ||= block
12
+ @after_perform ||= block
13
13
  end
14
14
 
15
15
  end
@@ -25,7 +25,7 @@ class ResqueJobsTree::Node
25
25
  end
26
26
 
27
27
  def after_perform
28
- run_callback :after_perform
28
+ run_callback(:after_perform)
29
29
  if root?
30
30
  tree.finish
31
31
  else
@@ -91,6 +91,13 @@ class ResqueJobsTree::Node
91
91
  def run_callback callback
92
92
  callback_block = definition.send callback
93
93
  callback_block.call(*resources) if callback_block.kind_of? Proc
94
+ rescue
95
+ if callback == :after_perform
96
+ puts "[ResqueJobsTree::Tree] after_perform callback of node #{definition.tree.name}##{name} has failed."\
97
+ " Continuing for cleanup."
98
+ else
99
+ raise
100
+ end
94
101
  end
95
102
 
96
103
  end
@@ -23,10 +23,16 @@ class ResqueJobsTree::Tree
23
23
  end
24
24
  end
25
25
 
26
- %w(before_perform after_perform on_failure).each do |callback|
26
+ %w(before_perform after_perform).each do |callback|
27
27
  class_eval %Q{def #{callback} ; run_callback :#{callback} ; end}
28
28
  end
29
29
 
30
+ def on_failure
31
+ run_callback :on_failure
32
+ rescue
33
+ puts "[ResqueJobsTree::Tree] on_failure callback of tree #{name} has failed. Continuing for cleanup."
34
+ end
35
+
30
36
  def root
31
37
  @root ||= ResqueJobsTree::Node.new(definition.root, resources, nil, self)
32
38
  end
@@ -1,3 +1,3 @@
1
1
  module ResqueJobsTree
2
- VERSION = "0.4.0"
2
+ VERSION = "0.4.1"
3
3
  end
data/test/process_test.rb CHANGED
@@ -199,6 +199,39 @@ class ProcessTest < MiniTest::Unit::TestCase
199
199
  Resque.redis.smembers("ResqueJobsTree:Node:[\"tree1\",\"job1\"]:childs")
200
200
  end
201
201
 
202
+ def test_exception_in_on_failure_callback
203
+ Resque.inline = false
204
+ tree_definition = ResqueJobsTree::Factory.create :tree1 do
205
+ on_failure { raise 'an unexpected exception' }
206
+ root :job1 do
207
+ perform { raise ExpectedException, 'an expected exception'}
208
+ end
209
+ end
210
+ tree_definition.spawn([]).launch
211
+ assert_raises ExpectedException do
212
+ silenced_stdout do
213
+ run_resque_workers tree_definition.name
214
+ end
215
+ end
216
+ assert_equal ['queues'], Resque.redis.keys
217
+ end
218
+
219
+ def test_exception_in_after_perform_callback
220
+ Resque.inline = false
221
+ tree_definition = ResqueJobsTree::Factory.create :tree1 do
222
+ root :job1 do
223
+ after_perform { raise 'an unexpected exception' }
224
+ perform {}
225
+ end
226
+ end
227
+ assert tree_definition.find(:job1).after_perform.kind_of?(Proc)
228
+ tree_definition.spawn([]).launch
229
+ silenced_stdout do
230
+ run_resque_workers tree_definition.name
231
+ end
232
+ assert_equal [], Resque.redis.keys
233
+ end
234
+
202
235
  private
203
236
 
204
237
  def assert_redis_empty
@@ -211,4 +244,12 @@ class ProcessTest < MiniTest::Unit::TestCase
211
244
  redis.srem 'queues', queue_name
212
245
  end
213
246
 
247
+ def silenced_stdout
248
+ orig_stdout = $stdout
249
+ $stdout = File.new('/dev/null', 'w')
250
+ yield
251
+ ensure
252
+ $stdout = orig_stdout
253
+ end
254
+
214
255
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: resque_jobs_tree
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-04-15 00:00:00.000000000 Z
12
+ date: 2013-04-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler