class Pasqual::Command

Attributes

file[RW]
host[RW]
name[RW]
output[RW]
password[RW]
port[RW]
program[RW]
status[RW]
username[RW]

Public Class Methods

execute(program, username, password, host, port, name, file = nil) click to toggle source
# File lib/pasqual/command.rb, line 7
def self.execute(program, username, password, host, port, name, file = nil)
  new(program, username, password, host, port, name, file).tap { |c| c.execute }
end
new(program, username, password, host, port, name, file = nil) click to toggle source
# File lib/pasqual/command.rb, line 14
def initialize(program, username, password, host, port, name, file = nil)
  self.program = program
  self.username = username
  self.password = password
  self.host = host
  self.port = port
  self.name = name
  self.file = file
end

Public Instance Methods

execute() click to toggle source
# File lib/pasqual/command.rb, line 24
def execute
  outfile = Tempfile.new("pasqual-#{name}")
  outfile.sync = true

  process = ChildProcess.build program,
    *Arglist.args(program, username, password, host, port, name)

  process.io.stdout = process.io.stderr = outfile

  process.duplex = true if file

  # TODO: find out why piping to stdin doesn't work :(
  ENV['PGPASSWORD'] = password
  process.start

  if file && File.exist?(file)
    File.open file do |f|
      process.io.stdin.puts f.read
      process.io.stdin.flush
    end
    process.io.stdin.close
  elsif file
    process.io.stdin.puts file
    process.io.stdin.flush
    process.io.stdin.close
  end

  process.wait
  ENV['PGPASSWORD'] = nil

  outfile.rewind
  self.output = outfile.read
  self.status = process.exit_code
end
success?() click to toggle source
# File lib/pasqual/command.rb, line 59
def success?
  status == 0
end