pigeon 0.4.10 → 0.5.0

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.10
1
+ 0.5.0
@@ -311,12 +311,18 @@ class Pigeon::Engine
311
311
  end
312
312
 
313
313
  # Used to defer a block of work for near-immediate execution. Is a
314
- # wrapper around EventMachine#defer and does not perform as well as using
314
+ # wrapper around EventMachine.defer and does not perform as well as using
315
315
  # the alternate dispatch method.
316
316
  def defer(&block)
317
317
  EventMachine.defer(&block)
318
318
  end
319
319
 
320
+ # Schedules a block for execution on the main EventMachine thread. This is
321
+ # a wrapper around the EventMachine.schedule method.
322
+ def schedule(&block)
323
+ EventMachine.schedule(&block)
324
+ end
325
+
320
326
  # Shuts down the engine. Will also trigger the before_stop and after_stop
321
327
  # events.
322
328
  def terminate
@@ -113,14 +113,7 @@ protected
113
113
  end
114
114
 
115
115
  rescue Object => e
116
- @exception = e
117
-
118
- handle_exception(e) rescue nil
119
-
120
- transition_to_state(:failed) unless (self.failed?)
121
-
122
- self.after_failed
123
- self.after_terminated
116
+ exeption_received(e)
124
117
  ensure
125
118
  after_state(state)
126
119
 
@@ -158,6 +151,19 @@ protected
158
151
  end
159
152
  end
160
153
 
154
+ # This allows a block to be executed in the main event thread where it is
155
+ # strictly required. Any exceptions generated by the block will be captured
156
+ # and will cause the task to transition to the failed state.
157
+ def execute_in_main_thread
158
+ @engine.schedule do
159
+ begin
160
+ yield
161
+ rescue Object => e
162
+ exeption_received(e)
163
+ end
164
+ end
165
+ end
166
+
161
167
  # Called just after the task is initialized.
162
168
  def after_initialized
163
169
  end
@@ -194,4 +200,18 @@ protected
194
200
  def state_initialized!
195
201
  transition_to_state(:finished)
196
202
  end
203
+
204
+ # This method is used to handle an exception and run through the proper
205
+ # failure handling mechanism. The handle_exception method is provided for
206
+ # subclasses to customize.
207
+ def exception_received(e)
208
+ @exception = e
209
+
210
+ handle_exception(e) rescue nil
211
+
212
+ transition_to_state(:failed) unless (self.failed?)
213
+
214
+ self.after_failed
215
+ self.after_terminated
216
+ end
197
217
  end
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{pigeon}
8
- s.version = "0.4.10"
8
+ s.version = "0.5.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["tadman"]
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: pigeon
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.4.10
5
+ version: 0.5.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - tadman