class Spud::Shell::Command

Constants

Handle

Attributes

result[R]

Public Class Methods

call(command, driver: nil, silent: false, handle: STDOUT) click to toggle source
# File lib/spud/shell/command.rb, line 18
def self.call(command, driver: nil, silent: false, handle: STDOUT)
  cmd = new(command, driver: driver, silent: silent, handle: handle)
  cmd.issue!
  cmd.result
end
commander(driver) click to toggle source
# File lib/spud/shell/command.rb, line 25
def self.commander(driver)
  Commander.new(driver)
end
new(command, driver: nil, silent: false, handle: STDOUT) click to toggle source
# File lib/spud/shell/command.rb, line 30
def initialize(command, driver: nil, silent: false, handle: STDOUT)
  @command = command
  @driver = driver
  @silent = silent
  @handle = handle

  @result = T.let(nil, T.nilable(Result))
end

Public Instance Methods

issue!() click to toggle source
# File lib/spud/shell/command.rb, line 40
def issue!
  capturer = StringIO.new

  Open3.popen2e(@command) do |_, out, thread|
    @driver&.register_subprocess(thread.pid)

    loop do
      line = out.gets
      break unless line

      @handle.write line unless @silent
      capturer.puts line
    end

    @result = Result.new(capturer.string, T.cast(thread.value, Process::Status))
  end

  @driver&.register_subprocess(nil)
end