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