Class: EY::Serverside::Shell::Formatter

Inherits:
Object
  • Object
show all
Defined in:
lib/engineyard-serverside/shell/formatter.rb

Instance Method Summary collapse

Constructor Details

#initialize(stdout, stderr, start_time, verbose) ⇒ Formatter

Returns a new instance of Formatter.



5
6
7
8
9
# File 'lib/engineyard-serverside/shell/formatter.rb', line 5

def initialize(stdout, stderr, start_time, verbose)
  @stdout, @stderr = stdout, stderr
  @start = start_time.to_i
  @verbose = verbose
end

Instance Method Details

#build_message(severity, stamp, message) ⇒ Object



17
18
19
20
21
22
23
24
25
# File 'lib/engineyard-serverside/shell/formatter.rb', line 17

def build_message(severity, stamp, message)
  if %w[WARN ERROR FATAL].include?(severity)
    prepend("#{stamp}!> ", "#{message}")
  elsif severity == "INFO"
    prepend(stamp, message)
  else
    prepend(' ' * stamp.size, message)
  end
end

#call(severity, time, _, message) ⇒ Object



11
12
13
14
15
# File 'lib/engineyard-serverside/shell/formatter.rb', line 11

def call(severity, time, _, message)
  msg = build_message(severity, timestamp(time), message)
  put_to_io(severity, msg)
  msg
end

#prepend(pre, str) ⇒ Object



27
28
29
# File 'lib/engineyard-serverside/shell/formatter.rb', line 27

def prepend(pre, str)
  str.gsub(/^/, pre).sub(/\n?\z/m,"\n")
end

#put_to_io(severity, msg) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/engineyard-serverside/shell/formatter.rb', line 31

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
    @stdout << (@verbose && msg.index('~>') ? "\n#{thor_shell.set_color(msg, :white, true)}" : msg)
    @stdout.flush
  when "WARN"
    @stderr << "\n" << thor_shell.set_color(msg, :yellow, true)
    @stderr.flush
  when "ERROR"
    @stderr << "\n" << thor_shell.set_color(msg, :red, true)
    @stderr.flush
  else
    @stderr << msg
    @stderr.flush
  end
end

#thor_shellObject



65
66
67
# File 'lib/engineyard-serverside/shell/formatter.rb', line 65

def thor_shell
  thor_shell ||= Thor::Shell::Color.new
end

#timestamp(datetime) ⇒ Object



54
55
56
57
58
59
60
61
62
63
# File 'lib/engineyard-serverside/shell/formatter.rb', line 54

def timestamp(datetime)
  diff = datetime.to_i - @start
  diff = 0 if diff < 0
  div, mod = diff.divmod(60)
  if div.zero?
    "+    %02ds  " % mod
  else
    "+%2dm %02ds  " % [div,mod]
  end
end