Class: Console::Terminal::Formatter::Failure
- Inherits:
-
Object
- Object
- Console::Terminal::Formatter::Failure
- Defined in:
- lib/console/terminal/formatter/failure.rb
Overview
Format a failure event, including the exception message and backtrace.
Constant Summary collapse
- KEY =
The key used to identify this formatter.
:failure
Instance Method Summary collapse
-
#format(event, stream, prefix: nil, verbose: false, **options) ⇒ Object
Format the given event.
-
#initialize(terminal) ⇒ Failure
constructor
Create a new failure formatter.
Constructor Details
#initialize(terminal) ⇒ Failure
Create a new failure formatter.
17 18 19 20 21 22 23 24 25 |
# File 'lib/console/terminal/formatter/failure.rb', line 17 def initialize(terminal) @terminal = terminal @terminal[:exception_title] ||= @terminal.style(:red, nil, :bold) @terminal[:exception_detail] ||= @terminal.style(:yellow) @terminal[:exception_backtrace] ||= @terminal.style(:red) @terminal[:exception_backtrace_other] ||= @terminal.style(:red, nil, :faint) @terminal[:exception_message] ||= @terminal.style(:default) end |
Instance Method Details
#format(event, stream, prefix: nil, verbose: false, **options) ⇒ Object
Format the given event.
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/console/terminal/formatter/failure.rb', line 34 def format(event, stream, prefix: nil, verbose: false, **) title = event[:class] = event[:message] backtrace = event[:backtrace] root = event[:root] lines = .lines.map(&:chomp) stream.puts " #{prefix}#{@terminal[:exception_title]}#{title}#{@terminal.reset}: #{lines.shift}" lines.each do |line| stream.puts " #{@terminal[:exception_detail]}#{line}#{@terminal.reset}" end root_pattern = /^#{root}\// if root backtrace&.each_with_index do |line, index| path, offset, = line.split(":", 3) style = :exception_backtrace # Make the path a bit more readable: if root_pattern and path.sub!(root_pattern, "").nil? style = :exception_backtrace_other end stream.puts " #{index == 0 ? "→" : " "} #{@terminal[style]}#{path}:#{offset}#{@terminal[:exception_message]} #{}#{@terminal.reset}" end if cause = event[:cause] format(cause, stream, prefix: "Caused by ", verbose: verbose, **) end end |