class Pakyow::Error::CLIFormatter
@api private
Constants
- HIGHLIGHT_REGEX
@api private
Public Class Methods
new(error)
click to toggle source
# File lib/pakyow/error.rb, line 191 def initialize(error) @error = error end
Private Class Methods
format(message)
click to toggle source
@api private
# File lib/pakyow/error.rb, line 263 def format(message) message.dup.tap do |message_to_format| message.scan(HIGHLIGHT_REGEX).each do |match| message_to_format.gsub!("`#{match[0]}'", Support::CLI.style.italic.blue(match[0])) end end end
indent(message)
click to toggle source
@api private
# File lib/pakyow/error.rb, line 253 def indent(message) message.split("\n").map { |line| " #{line}" }.join("\n") end
Public Instance Methods
backtrace()
click to toggle source
# File lib/pakyow/error.rb, line 245 def backtrace @error.condensed_backtrace.map(&:to_s).join("\n") end
details()
click to toggle source
# File lib/pakyow/error.rb, line 241 def details Support::CLI.style.bright_black(self.class.indent(self.class.format(@error.details))) end
header()
click to toggle source
# File lib/pakyow/error.rb, line 209 def header start = " #{@error.name.upcase} " finish = if @error.project? File.basename(@error.path) else "" end "#{start}#{" " * (80 - (start.length + finish.length + 2))} #{finish} " end
message()
click to toggle source
# File lib/pakyow/error.rb, line 221 def message message = Support::CLI.style.white.on_red.bold(header) message_lines = @error.message.split("\n") if message_lines.any? message << "\n\n#{self.class.indent(Support::CLI.style.red("›") + Support::CLI.style.bright_black(" #{self.class.format(message_lines.shift)}"))}\n" message_lines.each do |line| message << Support::CLI.style.bright_black("\n#{line}") end end if @error.respond_to?(:contextual_message) message = <<~MESSAGE #{message} #{Support::CLI.style.bright_black(self.class.indent(self.class.format(@error.contextual_message)))} MESSAGE end message.rstrip end
to_s()
click to toggle source
# File lib/pakyow/error.rb, line 195 def to_s <<~MESSAGE #{message} #{Support::CLI.style.black.on_white.bold(" DETAILS ")} #{details} #{Support::CLI.style.black.on_white.bold(" BACKTRACE ")} #{backtrace} MESSAGE end