Sha256: 6f4e7c7782fa39334a85a35103aee4656e7eb56efeb75c119035b19f2e2bd54e

Contents?: true

Size: 1.02 KB

Versions: 4

Compression:

Stored size: 1.02 KB

Contents

# coding: UTF-8

module Cocaine
  class CommandLine
    class PosixRunner
      def self.available?
        return @available unless @available.nil?

        @available = posix_spawn_gem_available?
      end

      def self.supported?
        available? && !OS.java?
      end

      def supported?
        self.class.supported?
      end

      def call(command, env = {}, options = {})
        input, output = IO.pipe
        options[:out] = output
        pid = spawn(env, command, options)
        output.close
        result = ""
        while partial_result = input.read(8192)
          result << partial_result
        end
        waitpid(pid)
        input.close
        result
      end

      private

      def spawn(*args)
        POSIX::Spawn.spawn(*args)
      end

      def waitpid(pid)
        Process.waitpid(pid)
      end

      def self.posix_spawn_gem_available?
        require 'posix/spawn'
        true
      rescue LoadError
        false
      end

      private_class_method :posix_spawn_gem_available?
    end
  end
end

Version data entries

4 entries across 4 versions & 2 rubygems

Version Path
solidus_backend-1.0.0.pre3 vendor/bundle/gems/cocaine-0.5.7/lib/cocaine/command_line/runners/posix_runner.rb
solidus_backend-1.0.0.pre2 vendor/bundle/gems/cocaine-0.5.7/lib/cocaine/command_line/runners/posix_runner.rb
solidus_backend-1.0.0.pre vendor/bundle/gems/cocaine-0.5.7/lib/cocaine/command_line/runners/posix_runner.rb
cocaine-0.5.7 lib/cocaine/command_line/runners/posix_runner.rb