Sha256: e39ae2966e6fda65a52c10ec7e101ef49335a66556db16f3cebdbb585b306d29

Contents?: true

Size: 1.75 KB

Versions: 2

Compression:

Stored size: 1.75 KB

Contents

require 'colorize'

module Capybara
  module Chromedriver
    module Logger
      class Message
        attr_reader :level, :message, :file, :location, :timestamp

        def initialize(log)
          @message = log.message.strip.gsub(/%c/, '')
          @level = log.level
          @file = nil
          @location = nil

          extract_file_and_location!
        end

        def to_s
          first_line = [
            "\u{1F4DC} ",
            log_level,
            file_and_location
          ].compact.join(' ')

          second_line = formatted_message

          [first_line, second_line].join("\n")
        end

        def error?
          level == 'SEVERE'
        end

        private

        COLORS = {
          'SEVERE' => :light_red,
          'INFO' => :light_green,
          'WARNING' => :light_cyan,
          'DEBUG' => :light_blue
        }.freeze

        LEADING_SPACES = ' ' * 5

        def formatted_message
          message
            .gsub('\n', "\n")
            .gsub('\u003C', "\u003C")
            .split("\n")
            .map { |line| "#{LEADING_SPACES}#{line}" }
            .join("\n")
        end

        def level_color
          COLORS[level] || :light_blue
        end

        def log_level
          " #{level.downcase} ".colorize(color: :white, background: level_color).bold
        end

        def file_and_location
          return unless file && location

          "#{file} #{location}".colorize(color: :white, background: :light_magenta)
        end

        def extract_file_and_location!
          match = message.match(/^(.+)\s+?(\d+:\d+)\s+?(.+)$/)

          return unless match

          _, @file, @location, message = match.to_a
          @message = message.gsub(/^"(.+?)"$/, '\1')
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
capybara-chromedriver-logger-0.3.0 lib/capybara/chromedriver/logger/message.rb
capybara-chromedriver-logger-0.2.1 lib/capybara/chromedriver/logger/message.rb