class Lapidarist::Shell

Public Instance Methods

run(*commands, label: nil, &block) click to toggle source
# File lib/lapidarist/shell.rb, line 3
def run(*commands, label: nil, &block)
  if commands.one?
    run_single_command(commands.first, label, &block)
  else
    pipe_multiple_commands(*commands, &block)
  end
end

Private Instance Methods

pipe_multiple_commands(*commands) { |std_out| ... } click to toggle source
# File lib/lapidarist/shell.rb, line 39
def pipe_multiple_commands(*commands)
  if block_given?
    Open3.pipeline_r(*commands, chdir: Lapidarist.config.directory) do |std_out, ts|
      Lapidarist.threads << ts
      yield(std_out)
    end
  else
    output = ''
    Open3.pipeline_r(*commands, chdir: Lapidarist.config.directory) do |std_out, ts|
      Lapidarist.threads << ts
      output = std_out.read
    end
    output
  end
end
run_single_command(command, label) { |std_out_err| ... } click to toggle source
# File lib/lapidarist/shell.rb, line 13
def run_single_command(command, label)
  Lapidarist.logger.info "COMMAND > `#{command}`", 1

  if block_given?
    Open3.popen2e(command, chdir: Lapidarist.config.directory) do |_std_in, std_out_err, wait_thr|
      Lapidarist.threads << wait_thr
      yield(std_out_err)
    end
  else
    out_err = []

    status = Open3.popen2e(command, chdir: Lapidarist.config.directory) do |_std_in, std_out_err, wait_thr|
      Lapidarist.threads << wait_thr
      while line = std_out_err.gets
        Lapidarist.logger.std_out_err(line, label || command)
        out_err << line
      end
      wait_thr.value
    end

    Lapidarist.logger.info "STATUS > #{status}", 2

    [out_err.join("\n"), status]
  end
end