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