Sha256: 4d0a9931abd2011b49151d556b66ae3fcff86936cd6123fdf20a57ce3e6eb06b

Contents?: true

Size: 969 Bytes

Versions: 15

Compression:

Stored size: 969 Bytes

Contents

module Phobos
  module CLI
    class Runner

      SIGNALS = %i( INT TERM QUIT ).freeze

      def initialize
        @signal_queue = []
        @reader, @writer = IO.pipe
        @executor = Phobos::Executor.new
      end

      def run!
        setup_signals
        executor.start

        loop do
          case signal_queue.pop
          when *SIGNALS
            executor.stop
            break
          else
            ready = IO.select([reader, writer])

            # drain the self-pipe so it won't be returned again next time
            reader.read_nonblock(1) if ready[0].include?(reader)
          end
        end
      end

      private

      attr_reader :reader, :writer, :signal_queue, :executor

      def setup_signals
        SIGNALS.each do |signal|
          Signal.trap(signal) { unblock(signal) }
        end
      end

      def unblock(signal)
        writer.write_nonblock('.')
        signal_queue << signal
      end

    end
  end
end

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
phobos-1.8.0 lib/phobos/cli/runner.rb
phobos-1.7.2 lib/phobos/cli/runner.rb
phobos-1.7.1 lib/phobos/cli/runner.rb
phobos-1.7.0 lib/phobos/cli/runner.rb
phobos-1.6.1 lib/phobos/cli/runner.rb
phobos-1.6.0 lib/phobos/cli/runner.rb
phobos-1.5.0 lib/phobos/cli/runner.rb
phobos-1.4.2 lib/phobos/cli/runner.rb
phobos-1.4.1 lib/phobos/cli/runner.rb
phobos-1.4.0 lib/phobos/cli/runner.rb
phobos-1.3.0 lib/phobos/cli/runner.rb
phobos-1.2.1 lib/phobos/cli/runner.rb
phobos-1.2.0 lib/phobos/cli/runner.rb
phobos-1.1.0 lib/phobos/cli/runner.rb
phobos-1.0.0 lib/phobos/cli/runner.rb