beanstalker 0.4.14 → 0.4.15

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.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.14
1
+ 0.4.15
data/beanstalker.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{beanstalker}
8
- s.version = "0.4.14"
8
+ s.version = "0.4.15"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Gleb Pomykalov"]
12
- s.date = %q{2010-09-01}
12
+ s.date = %q{2010-12-27}
13
13
  s.description = %q{Beanstalker is a tool for executing long tasks in background in our rails application.}
14
14
  s.email = %q{glebpom@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -48,6 +48,14 @@ module Beanstalker::Extensions
48
48
  @class_methods_async_options.merge!(method.to_sym => options)
49
49
  end
50
50
  end
51
+
52
+ def async_rescue(&block)
53
+ @async_rescue = block
54
+ end
55
+
56
+ def async_error_handler
57
+ @async_rescue
58
+ end
51
59
  end
52
60
 
53
61
  def interpolate_async_options(options, object, *args)
@@ -49,7 +49,7 @@ class Beanstalker::Worker
49
49
  before_reserves.each {|b| b.call}
50
50
  end
51
51
  end
52
-
52
+
53
53
  def initialize(top_binding, options = {})
54
54
  @top_binding = top_binding
55
55
  @stop = false
@@ -96,7 +96,7 @@ class Beanstalker::Worker
96
96
  def q_hint
97
97
  @q_hint || Beanstalker::Queue.queue
98
98
  end
99
-
99
+
100
100
  def logger
101
101
  Daemonizer.logger or RAILS_DEFAULT_LOGGER
102
102
  end
@@ -162,11 +162,49 @@ class Beanstalker::Worker
162
162
  end
163
163
  end
164
164
 
165
+ def class_error_handler(klass)
166
+ if klass.respond_to?(:async_error_handler) and
167
+ async_error_handler = klass.async_error_handler and
168
+ async_error_handler.is_a?(Proc)
169
+ then
170
+ async_error_handler
171
+ else
172
+ false
173
+ end
174
+ end
175
+
165
176
  def handle_error(job, ex)
166
- if self.class.custom_error_handler
167
- self.class.custom_error_handler.call(job, ex)
177
+ custom_error_handler_ok = false
178
+ Daemonizer.logger.warn "Handling exception: #{ex.inspect}, job = #{job.id}"
179
+
180
+ if job[:class]
181
+ klass = Object.const_get(job[:class])
182
+ error_handler = class_error_handler(klass)
183
+ if error_handler.is_a?(Proc)
184
+ Daemonizer.logger.info "Running custom error handler for class #{job[:class]}, job = #{job.id}"
185
+ error_handler.call(job, ex)
186
+ job_reserved = begin
187
+ job.stats['state'] == 'reserved'
188
+ rescue Beanstalk::NotFoundError
189
+ false
190
+ end
191
+ if job_reserved
192
+ Daemonizer.logger.info "Custom error handler for class #{job[:class]} didn't release job. job = #{job.id}"
193
+ else
194
+ Daemonizer.logger.info "Custom error handler for class #{job[:class]} released job. job = #{job.id}"
195
+ custom_error_handler_ok = true
196
+ end
197
+ end
198
+ end
199
+
200
+ unless custom_error_handler_ok
201
+ Daemonizer.logger.info "Running common handler. job = #{job.id}"
202
+ if self.class.custom_error_handler
203
+ self.class.custom_error_handler.call(job, ex)
204
+ else
205
+ self.class.default_handle_error(job, ex)
206
+ end
168
207
  else
169
- self.class.default_handle_error(job, ex)
170
208
  end
171
209
  end
172
210
 
@@ -199,11 +237,11 @@ class Beanstalker::Worker
199
237
  f = self.class.before_filter
200
238
  statistics = job.stats.dup
201
239
  code = job[:code]
202
- can_run = f ? f.call(job) : true
240
+ can_run = f ? f.call(job) : true
203
241
  if can_run
204
242
  run_code(job)
205
243
  job.delete
206
- logger.info "Finished. Job id=#{statistics['id']}. Code '#{code}'. Time taken: #{(Time.now - t1).to_f} sec"
244
+ logger.info "Finished. Job id=#{statistics['id']}. Code '#{code}'. Time taken: #{(Time.now - t1).to_f} sec"
207
245
  else
208
246
  logger.info "Not runnind due to :before_filter restriction. Job id=#{statistics['id']}. Code '#{code}'."
209
247
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: beanstalker
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
4
+ hash: 17
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 4
9
- - 14
10
- version: 0.4.14
9
+ - 15
10
+ version: 0.4.15
11
11
  platform: ruby
12
12
  authors:
13
13
  - Gleb Pomykalov
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-09-01 00:00:00 +04:00
18
+ date: 2010-12-27 00:00:00 +03:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency