class EY::Serverside::Shell::Formatter

Constants

DEBUG
ERROR
FATAL
IMPORTANT
IMPORTANT_PREFIX
INFO
MINUTES_FORMAT
NL
SECONDS_FORMAT
STATUS_PREFIX
SUBSTATUS_PREFIX
WARN

Public Class Methods

new(stdout, stderr, start_time, verbose) click to toggle source
# File lib/engineyard-serverside/shell/formatter.rb, line 21
def initialize(stdout, stderr, start_time, verbose)
  @stdout, @stderr = stdout, stderr
  @start = start_time.to_i
  @verbose = verbose
end

Public Instance Methods

build_message(severity, stamp, message) click to toggle source
# File lib/engineyard-serverside/shell/formatter.rb, line 33
def build_message(severity, stamp, message)
  if IMPORTANT.include?(severity)
    prepend("#{stamp}#{IMPORTANT_PREFIX}", message)
  elsif INFO == severity
    prepend(stamp, message)
  else
    prepend(stamp, message)
  end
end
call(severity, time, _, message) click to toggle source
# File lib/engineyard-serverside/shell/formatter.rb, line 27
def call(severity, time, _, message)
  msg = build_message(severity, timestamp(time), message)
  put_to_io(severity, msg)
  msg
end
prepend(pre, str) click to toggle source
# File lib/engineyard-serverside/shell/formatter.rb, line 43
def prepend(pre, str)
  str.gsub(/^/, pre).sub(/\n?\z/m,NL)
end
put_to_io(severity, msg) click to toggle source
# File lib/engineyard-serverside/shell/formatter.rb, line 47
def put_to_io(severity, msg)
  case severity
  when DEBUG
    if @verbose
      @stdout << msg
      @stdout.flush
    end
  when INFO
    # Need to differentiate info messages more when we're running in verbose mode
    if @verbose && msg.index(STATUS_PREFIX)
      @stdout.puts
      @stdout << thor_shell.set_color(msg, :white, true)
    else
      @stdout << msg
    end
    @stdout.flush
  when WARN
    @stderr.puts
    @stderr << thor_shell.set_color(msg, :yellow, true)
    @stderr.flush
  when ERROR
    @stderr.puts
    @stderr << thor_shell.set_color(msg, :red, true)
    @stderr.flush
  else
    @stderr << msg
    @stderr.flush
  end
end
thor_shell() click to toggle source
# File lib/engineyard-serverside/shell/formatter.rb, line 88
def thor_shell
  thor_shell ||= Thor::Shell::Color.new
end
timestamp(datetime) click to toggle source
# File lib/engineyard-serverside/shell/formatter.rb, line 77
def timestamp(datetime)
  diff = datetime.to_i - @start
  diff = 0 if diff < 0
  div, mod = diff.divmod(60)
  if div.zero?
    SECONDS_FORMAT % mod
  else
    MINUTES_FORMAT % [div,mod]
  end
end