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