Sha256: 723714e7c910d91e473b394d877df0395382f229544c2fe2a4f0539d31bcf69d

Contents?: true

Size: 915 Bytes

Versions: 6

Compression:

Stored size: 915 Bytes

Contents

require 'shellwords'

module Doc
  class Command
    def self.run(*command)
      new(*command).run
    end

    attr_reader :command, :status
    def initialize(*command)
      @command = command
    end

    def add(*arguments)
      @command.concat(arguments)
    end

    def run
      command_string = command.length == 1 ? command.first : command.map(&:to_s).shelljoin
      output = IO.popen("#{command_string} 2>&1", &:read)
      @status = $?
      status.success? || begin
        $stderr.puts "cd #{Dir.pwd.shellescape}; #{command_string}\n#{output}"
        case
        when status.signaled?
          if status.termsig == 2
            raise Interrupt.new
          else
            raise SignalException.new(status.termsig)
          end
        when status.exited?
          raise SystemExit.new(status.exitstatus)
        else
          raise status.inspect
        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
doc-0.5.0 lib/doc/command.rb
doc-0.4.1 lib/doc/command.rb
doc-0.4.0 lib/doc/command.rb
doc-0.3.0 lib/doc/command.rb
doc-0.2.8 lib/doc/command.rb
doc-0.2.7 lib/doc/command.rb