Sha256: 95e4d1c04f131c473d87e27b91e78a5f272687034ca6957cb25f85f54f8bda13

Contents?: true

Size: 1.11 KB

Versions: 5

Compression:

Stored size: 1.11 KB

Contents

require 'delegate'

module Pronto
  module Formatter
    class TextMessageDecorator < SimpleDelegator
      include Colorizable

      LOCATION_COLOR = :cyan

      LEVEL_COLORS = {
        info: :yellow,
        warning: :magenta,
        error: :red,
        fatal: :red
      }.freeze

      def to_h
        original = __getobj__.to_h
        original[:line] = __getobj__.line.new_lineno if __getobj__.line
        original[:color_level] = format_level(__getobj__)
        original[:color_location] = format_location(__getobj__)
        original
      end

      private

      def format_location(message)
        line = message.line
        lineno = line.new_lineno if line
        path = message.path
        commit_sha = message.commit_sha

        if path || lineno
          path = colorize(path, LOCATION_COLOR) if path
          "#{path}:#{lineno}"
        elsif commit_sha
          colorize(commit_sha[0..6], LOCATION_COLOR)
        end
      end

      def format_level(message)
        level = message.level
        color = LEVEL_COLORS.fetch(level)

        colorize(level[0].upcase, color)
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
pronto-0.11.3 lib/pronto/formatter/text_message_decorator.rb
pronto-0.11.2 lib/pronto/formatter/text_message_decorator.rb
pronto-0.11.1 lib/pronto/formatter/text_message_decorator.rb
pronto-0.11.0 lib/pronto/formatter/text_message_decorator.rb
pronto-0.10.0 lib/pronto/formatter/text_message_decorator.rb