jeremywrowe/buildem

View on GitHub
lib/buildem/runner.rb

Summary

Maintainability
A
35 mins
Test Coverage
require "buildem"
require 'buildem/base'
require 'buildem/configuration'
require 'buildem/executor'
require 'process_pool'
require 'buildem/logger'

module Kernel
  def unordered
    puts "Started unordered sequence"
    yield
    $pool = ProcessPool.new($configuration.workers)
    puts $configuration.workers
    $jobs.each do |command|
      $pool.schedule(command,command.argz)
    end
    $pool.start
    $pool.shutdown
    puts "Finished #{$jobs.size} unordered jobs"
  end
  
  def queued_run(command, optz = {})
    $jobs << BuildEm::Executor.new([command,optz])
  end
  
  def run(command, optz = {})
    BuildEm::Executor.new([command,optz]).run
  end
end

class BuildEm::Runner
  
  $jobs = []
  
  def initialize(kernel = Kernel, argv = ARGV)
    @kernel = kernel
    @argv   = argv
  end
  
  def process_standard_in
    if @argv.empty?
      output = []
      while input = @kernel.gets and not input == "start\n"
        output << input
      end 
      unless output.empty?
        output = output.join("\n")
        @kernel.eval(output)
      end
    end
  end
  
  def start
    if ARGV.size == 1
      begin
        puts "running #{ARGV[0]}"
        $configuration = BuildEm::Configuration.new
        load ARGV[0]
      ensure
        puts "finished #{ARGV[0]}"
      end
    else
      puts usage
    end
  end
  
  private
  
    def usage
<<-USAGE

-----------------------------------------------------------------
                            BUILD'EM
-----------------------------------------------------------------

  usage: buildem filename.buildem

-----------------------------------------------------------------
USAGE
    end
  
end