class LocalCommand

require “open3” @stdout, @stderr, @status = Open3.capture3(stdin)

Attributes

capture_output[R]
output_stream[R]
password[R]
simulate[RW]
suppress_output[R]

Public Class Methods

new(params) click to toggle source
# File lib/script_executor/local_command.rb, line 9
def initialize(params)
  params = sanitize_parameters params

  @password = params[:password]
  @simulate = params[:simulate]
  @suppress_output = params[:suppress_output]
  @capture_output = params[:capture_output]
  @output_stream = params[:output_stream]
end

Public Instance Methods

execute(commands, line_action) click to toggle source
# File lib/script_executor/local_command.rb, line 19
def execute(commands, line_action)
  print_commands commands, $stdout

  unless simulate
    storage = capture_output ? OutputBuffer.new : nil
    output = if output_stream
               output_stream
             else
               suppress_output ? nil : $stdout
             end

    commands = commands + inline_password(password) if password

    IO.popen(commands) do |io|
      io.each_line("\r") do |line|
        if output
          output.write(line)
          output.flush
        end

        if storage
          storage.save(line.chomp)
        end

        line_action.call(line) if line_action
      end
    end

    storage.buffer.join("\n") if storage
  end
end

Private Instance Methods

inline_password(password) click to toggle source
# File lib/script_executor/local_command.rb, line 79
def inline_password(password)
  password ? "<<EOF\n#{password}\nEOF" : ''
end
permitted_params() click to toggle source
# File lib/script_executor/local_command.rb, line 89
def permitted_params
  @permitted_params ||= [:script, :sudo, :remote, :line_action, :password,
                         :suppress_output, :capture_output, :output_stream, :simulate]
end
print_commands(commands, output) click to toggle source
sanitize_parameters(params) click to toggle source
# File lib/script_executor/local_command.rb, line 83
def sanitize_parameters(params)
  params.each do |key, _|
    params.delete(key) unless permitted_params.include? key.to_sym
  end
end