Sha256: 7ccbdec9cb183a7a7bb142848e52e6e4482cc9914600afe57eefa193274a9aec

Contents?: true

Size: 822 Bytes

Versions: 2

Compression:

Stored size: 822 Bytes

Contents

# frozen_string_literal: true

require 'open3'

module Mnogootex
  module Job
    class Runner
      attr_reader :hid, :log_lines

      def initialize(cl:, chdir:)
        @log_lines = []
        _, @stream, @thread = Open3.popen2e(*cl, chdir: chdir)
        @poller = start_poller
      end

      def alive?
        @poller.alive?
      end

      def successful?
        @poller.value.exitstatus.zero?
      end

      def count_lines
        return log_lines.size unless alive?
        @ticks = [@ticks || -1, log_lines.size - 1].min + 1
      end

      private

      def start_poller
        Thread.new do
          until (line = @stream.gets).nil?
            log_lines << line
          end
          # NOTE: waits on @thread and returns its value
          @thread.value
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
mnogootex-1.0.1 lib/mnogootex/job/runner.rb
mnogootex-1.0.0 lib/mnogootex/job/runner.rb