Sha256: 06df02d23d4c637be291d51865f5032bcce5183993303f029eb63a4c2249548a

Contents?: true

Size: 1.72 KB

Versions: 1

Compression:

Stored size: 1.72 KB

Contents

module Specjour
  class Worker
    include Protocol
    include SocketHelpers
    attr_accessor :printer_uri
    attr_reader :project_path, :specs_to_run, :number, :batch_size

    def initialize(project_path, printer_uri, number, batch_size)
      @project_path = project_path
      @specs_to_run = specs_to_run
      @number = number.to_i
      @batch_size = batch_size.to_i
      self.printer_uri = printer_uri
      GC.copy_on_write_friendly = true if GC.respond_to?(:copy_on_write_friendly=)
      DistributedFormatter.batch_size = batch_size
      set_env_variables
    end

    def printer_uri=(val)
      @printer_uri = URI.parse(val)
    end

    def run
      printer.send_message(:ready)
      run_time = 0
      Dir.chdir(project_path)
      while !printer.closed? && data = printer.gets(TERMINATOR)
        spec = load_object(data)
        if spec
          run_time += Benchmark.realtime do
            run_spec spec
          end
          printer.send_message(:ready)
        else
          printer.send_message(:done)
          printer.send_message(:worker_summary=, {:duration => sprintf("%6f", run_time)})
          printer.close
        end
      end
    end

    protected

    def printer
      @printer ||= printer_connection
    end

    def printer_connection
      Connection.new printer_uri
    end

    def run_spec(spec)
      puts "Running #{spec}"
      options = Spec::Runner::OptionParser.parse(
        ['--format=Specjour::DistributedFormatter', spec],
        $stderr,
        printer_connection
      )
      Spec::Runner.use options
      options.run_examples
    end

    def set_env_variables
      ENV['PREPARE_DB'] = 'true'
      ENV['RSPEC_COLOR'] = 'true'
      ENV['TEST_ENV_NUMBER'] = number.to_s
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
specjour-0.1.18 lib/specjour/worker.rb