Sha256: bad6922f71286262fafc003e02b87f43037d384f0fd07ee101e3be65f3fc2d4f

Contents?: true

Size: 1.37 KB

Versions: 4

Compression:

Stored size: 1.37 KB

Contents

module ETL
  class Engine
  
    class << self
      def process(control_file)
        new().process(control_file)
      end
      
      attr_accessor :logger
      
      def logger
        unless @logger
          @logger = Logger.new('etl.log')
          @logger.level = Logger::DEBUG
        end
        @logger
      end
    end
  
    # Process a control file or object.
    def process(control)
      control = ETL::Control::Control.resolve(control)
      
      pre_process(control)
      
      sources = control.sources
      destinations = control.destinations
      
      sources.each do |source|
        source.each_with_index do |row, index|
          row.each do |name, value|
            # execute transforms
            row[name] = ETL::Transform::Transform.transform(name, value, control.get_transform(name))
          end
          # write the row to the destination
          destinations.each do |destination|
            destination.write(row)
          end
        end
        destinations.each do |destination|
          destination.close
        end
      end
      
      post_process(control)
    end
    
    private
    def pre_process(control)
      control.pre_processors.each do |processor|
        processor.process
      end
    end
    
    def post_process(control)
      control.post_processors.each do |processor|
        processor.process
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
activewarehouse-etl-0.1.0 lib/etl/engine.rb
activewarehouse-etl-0.2.0 lib/etl/engine.rb
activewarehouse-etl-0.3.0 lib/etl/engine.rb
activewarehouse-etl-0.4.0 lib/etl/engine.rb