module Luffa

Constants

VERSION

Public Class Methods

log_fail(msg) click to toggle source
# File lib/luffa/logging.rb, line 14
def self.log_fail(msg)
  puts "\033[31mFAIL: #{msg}\033[0m" if msg
end
log_info(msg) click to toggle source
# File lib/luffa/logging.rb, line 18
def self.log_info(msg)
  puts "\033[35mINFO: #{msg}\033[0m" if msg
end
log_pass(msg) click to toggle source
# File lib/luffa/logging.rb, line 6
def self.log_pass(msg)
  puts "\033[32mPASS: #{msg}\033[0m" if msg
end
log_unix_cmd(msg) click to toggle source
# File lib/luffa/logging.rb, line 2
def self.log_unix_cmd(msg)
  puts "\033[36mEXEC: #{msg}\033[0m" if msg
end
log_warn(msg) click to toggle source
# File lib/luffa/logging.rb, line 10
def self.log_warn(msg)
  puts "\033[34mWARN: #{msg}\033[0m"
end
unix_command(cmd, opts={}) click to toggle source
# File lib/luffa/unix_command.rb, line 2
def self.unix_command(cmd, opts={})
  default_opts = {:pass_msg => nil,
                  :fail_msg => nil,
                  :exit_on_nonzero_status => true,
                  :env_vars => {},
                  :log_cmd => true,
                  :obscure_fields => [],
                  :split_cmd => false}
  merged_opts = default_opts.merge(opts)

  obscure_fields = merged_opts[:obscure_fields]

  if not obscure_fields.empty? and merged_opts[:log_cmd]
    obscured = cmd.split(' ').map do |token|
      if obscure_fields.include? token
        "#{token[0,1]}***#{token[token.length-1,1]}"
      else
        token
      end
    end
    Luffa.log_unix_cmd obscured.join(' ')
  elsif merged_opts[:log_cmd]
    Luffa.log_unix_cmd cmd
  end

  exit_on_err = merged_opts[:exit_on_nonzero_status]
  unless exit_on_err
    system 'set +e'
  end

  env_vars = merged_opts[:env_vars]

  if merged_opts[:split_cmd]
    ['|', '>', '&'].each do |character|
      if cmd.include?(character)
        raise "Cannot split command '#{cmd}' because it contains character '#{character}'"
      end
    end

    tokens = cmd.split(' ')
    res = system(env_vars, tokens.shift, *tokens)
  else
    res = system(env_vars, cmd)
  end

  exit_code = $?.exitstatus

  if res
    Luffa.log_pass merged_opts[:pass_msg]
  else
    Luffa.log_fail merged_opts[:fail_msg]
    exit exit_code if exit_on_err
  end
  system 'set -e'
  exit_code
end