lib/rodimus/transformation.rb in rodimus-0.1.2 vs lib/rodimus/transformation.rb in rodimus-1.0.0
- old
+ new
@@ -1,22 +1,28 @@
require 'drb'
module Rodimus
class Transformation
+ include Observable
+ include Observing # Transformations observe themselves for run hooks
+ include RuntimeLogging
+
attr_reader :drb_server, :pids, :steps
# User-data accessible across all running steps.
attr_reader :shared_data
def initialize
@steps = []
@pids = []
@shared_data = {} # TODO: This needs to be thread safe
+ observers << self
end
def run
+ notify(self, :before_run)
@drb_server = DRb.start_service(nil, shared_data)
pids.clear
prepare
steps.each do |step|
@@ -28,19 +34,19 @@
step.close_descriptors
end
ensure
Process.waitall
drb_server.stop_service
+ notify(self, :after_run)
end
def to_s
"#{self.class} with #{steps.length} steps"
end
private
def prepare
- Rodimus.logger.info "Preparing #{self}..."
# [1, 2, 3, 4] => [1, 2], [2, 3], [3, 4]
steps.inject do |first, second|
read, write = IO.pipe
first.outgoing = write
second.incoming = read