Sha256: fb7e96bcbb036eb0de59179e22abf4558c62fe9edaf1543b9e6948533fad3948
Contents?: true
Size: 1.63 KB
Versions: 12
Compression:
Stored size: 1.63 KB
Contents
module CukeForker class Worker include Observable class << self attr_writer :id def id; @id ||= -1; end end attr_reader :status, :feature, :pid, :format, :out, :id, :data def initialize(feature, format, out, extra_args = []) @feature = feature @format = format @extra_args = extra_args @out = out @status = nil @data = OpenStruct.new @id = self.class.id += 1 end def finished? wait_pid, @status = Process.waitpid2(pid, Process::WNOHANG) !!wait_pid rescue Errno::ECHILD, Errno::ESRCH true end def failed? status.nil? || status.exitstatus != 0 end def start @pid = Process.fork { changed notify_observers :on_worker_forked, self execute_cucumber } end def args args = %W[--format #{format} --out #{output}] args += @extra_args args << feature args end def text "[ #{pid} #{feature} #{status.inspect} #{out} #{data} ]" end def output File.join out, "#{basename}.#{format}" end def stdout File.join out, "#{basename}.stdout" end def stderr File.join out, "#{basename}.stderr" end def basename @basename ||= feature.gsub(/\W/, '_') end private def execute_cucumber FileUtils.mkdir_p(out) unless File.exist? out $stdout.reopen stdout $stderr.reopen stderr failed = Cucumber::Cli::Main.execute args exit failed ? 1 : 0 end end # Worker end # CukeForker
Version data entries
12 entries across 12 versions & 1 rubygems