class Cabin::NiceOutput

Constants

CODEMAP
DIM_CODEMAP
LEVELMAP

Attributes

io[R]

Public Class Methods

new(io) click to toggle source
# File lib/cabin/nice_output.rb, line 32
def initialize(io)
  @io = io
end

Public Instance Methods

<<(event) click to toggle source
# File lib/cabin/nice_output.rb, line 36
def <<(event)
  data = event.clone
  if data[:exception].respond_to? :data
    ed = data[:exception].data
    if ed.kind_of? Hash
      data = ed.merge( data )
    else
      data[:exception_data] = ed.inspect
    end
  end
  data.delete(:line)
  data.delete(:file)
  level = data.delete(:level) || :normal
  data.delete(:message)
  ts = data.delete(:timestamp)

  color = data.delete(:color)
  # :bold is expected to be truthy
  bold = data.delete(:bold) ? :bold : nil

  backtrace = data.delete(:backtrace)
  if !backtrace && data[:exception].respond_to?(:backtrace)
    backtrace = data[:exception].backtrace
  end

  # Make 'error' and other log levels have color
  if color.nil?
    color = LEVELMAP[level]
  end

  message = [event[:level] ? '====> ' : '      ',event[:message]]
  message.unshift(CODEMAP[color.to_sym]) if !color.nil?
  message << DIM_CODEMAP[color] if !color.nil?
  if documentation = data.delete(:documentation)
    message << "\n\tRead more on this topic here: #{documentation}"
  end
  if data.any?
    message << "\n" <<  pp(data)
  end
  if backtrace
    message << "\n\t--backtrace---------------\n\t" << backtrace.join("\n\t")
  end
  message << CODEMAP[:normal]  if !color.nil?
  @io.puts(message.join(""))
  @io.flush
end

Private Instance Methods

pp(hash) click to toggle source
# File lib/cabin/nice_output.rb, line 85
def pp(hash)
  hash.map{|k,v| '      '+k.to_s + ": " + pp_value(v) }.join("\n")
end
pp_value(value) click to toggle source
# File lib/cabin/nice_output.rb, line 89
def pp_value(value)
  case(value)
  when String
    if value.include? "\n"
      return "\n\t" + value.gsub("\n","\n\t")
    else
      return value
    end
  else
    return value.inspect
  end
end