module Mentor::Colorize

Public Instance Methods

colorize(line) click to toggle source
# File lib/helpers/colorize.rb, line 7
def colorize(line)

  if line_of_padded_code?(line)
    line = color_padded_code(line)
  elsif backtrace?(line)
    return rainbow(line, :backtrace_line)
  end

  apply_colors(line)
end
colorize_section() click to toggle source
# File lib/helpers/colorize.rb, line 18
def colorize_section
  @lines.map! { |line| colorize(line) }
end

Private Instance Methods

apply_colors(line) click to toggle source
# File lib/helpers/colorize.rb, line 41
def apply_colors(line)
  line = apply_literal_for_method(line) if did_you_mean_with_literal_error?
  line = apply_pattern_colors(line)
  line = apply_output_colors(line)
  line = apply_nil_colors(line)
  line = apply_common_classes_colors(line)
end
apply_common_classes_colors(line) click to toggle source
# File lib/helpers/colorize.rb, line 73
def apply_common_classes_colors(line)
  %w(String Integer Float Array Hash [] {}).reduce(line) do |new_line, klass|
    new_line = TextToColor.new(new_line, pluralize(klass), :common_class).colored
    new_line = TextToColor.new(new_line, klass.to_s, :common_class).colored
  end
end
apply_literal_for_method(line) click to toggle source
# File lib/helpers/colorize.rb, line 49
def apply_literal_for_method(line)
  line = TextToColor.new(line, literal_for_method, :literal_for_method, "#{literal_for_method} is a").color_pattern
  line = TextToColor.new(line, literal_for_method, :literal_for_method, "for #{literal_for_method}:").color_pattern
  line = TextToColor.new(line, literal_for_method, :literal_for_method, %Q{"#{literal_for_method}"}).color_pattern
  line = TextToColor.new(line, literal_for_method, :literal_for_method, "'#{literal_for_method}'").color_pattern
end
apply_nil_colors(line) click to toggle source
# File lib/helpers/colorize.rb, line 68
def apply_nil_colors(line)
  line = TextToColor.new(line, ' nil', :nil_text).colored
  line = TextToColor.new(line, 'NilClass', :nil_text).colored
end
apply_output_colors(line) click to toggle source
# File lib/helpers/colorize.rb, line 62
def apply_output_colors(line)
  output_types.reduce(line) do |new_line, output_type|
    TextToColor.new(new_line, send(output_type), output_type).colored
  end
end
apply_pattern_colors(line) click to toggle source
# File lib/helpers/colorize.rb, line 56
def apply_pattern_colors(line)
  line = TextToColor.new(line, error_lineno,       :error_lineno,       "#{file_name}:#{error_lineno}").color_pattern
  line = TextToColor.new(line, ruby_error_class,   :ruby_error_class,   "(#{ruby_error_class})").color_pattern
  line = TextToColor.new(line, ruby_error_class,   :ruby_error_class,   " #{ruby_error_class} ").color_pattern
end
backtrace?(line) click to toggle source
# File lib/helpers/colorize.rb, line 24
def backtrace?(line)
  line['from ']
end
color_code(code) click to toggle source
# File lib/helpers/colorize.rb, line 86
def color_code(code)
  if did_you_mean_with_literal_error?
    TextToColor.new(code, literal_for_method, :literal_for_method).colored
  else
    formatter = Rouge::Formatters::Terminal256.new
    lexer     = Rouge::Lexers::Ruby.new
    formatter.format(lexer.lex(code))
  end
end
color_padded_code(line) click to toggle source
# File lib/helpers/colorize.rb, line 80
def color_padded_code(line)
  padded_lineno = line[padded_lineno_with_colon_regex]
  code          = line[padded_lineno.size..-1]
  color_padded_lineno(padded_lineno) + color_code(code)
end
color_padded_lineno(padded_lineno) click to toggle source
# File lib/helpers/colorize.rb, line 96
def color_padded_lineno(padded_lineno)
  text_to_color_text = padded_lineno[padded_lineno_regex]
  color              = text_to_color_text['=>'] ? :error_lineno : :subtle
  TextToColor.new(padded_lineno, text_to_color_text, color).colored
end
colors() click to toggle source
# File lib/helpers/colorize.rb, line 120
def colors
  error        = :tomato
  error_lineno = :gold
  method_name  = :deepskyblue
  subtle       = :olive
  very_subtle  = :dimgray
  nil_text     = :orange
  literal      = :mediumpurple

  {
    app_dir:                   subtle,
    backtrace_line:            very_subtle,
    absolute_base_dir:         subtle,
    relative_base_dir:         subtle,
    calling_method:            :green,
    common_class:              :cornflower,
    did_you_mean_text:         :royalblue,
    did_you_mean_word:         method_name,
    error_lineno:              error_lineno,
    error_lineno_padded:       error_lineno,
    file_name:                 :greenyellow,
    horizontal_line:           :red,
    lineno_subtle_padded:      subtle,
    message:                   error,
    method_class:              :mediumpurple,
    method_name:               method_name,
    nil_text:                  nil_text,
    other_class_or_module:     :darksalmon,
    prominent:                 :ivory,
    ruby_error_class:          :orangered,
    literal_for_method:        literal,
    quoted_literal_for_method: literal,
    ruby_error_text:           error,
    subtle:                    subtle,
    suggestion:                :lightgreen,
    var_for_method:            :palevioletred
  }
end
did_you_mean_with_literal_error?() click to toggle source
# File lib/helpers/colorize.rb, line 114
def did_you_mean_with_literal_error?
  Mentor.tp.raised_exception.respond_to?(:corrections) &&
  Mentor.tp.raised_exception.corrections.any? &&
  [String, Integer, Float].include?(Mentor.tp.raised_exception.receiver.class)
end
line_of_padded_code?(line) click to toggle source
# File lib/helpers/colorize.rb, line 28
def line_of_padded_code?(line)
  line[padded_lineno_with_colon_regex]
end
output_types() click to toggle source
# File lib/helpers/colorize.rb, line 32
def output_types
  %i[
    did_you_mean_text   did_you_mean_word
    message             horizontal_line            ruby_error_text
    calling_method      method_name                var_for_method
    absolute_base_dir   relative_base_dir          app_dir  file_name
  ]
end
padded_lineno_regex() click to toggle source
# File lib/helpers/colorize.rb, line 102
def padded_lineno_regex
  /^\s+(=>)?\s\d+/
end
padded_lineno_with_colon_regex() click to toggle source
# File lib/helpers/colorize.rb, line 106
def padded_lineno_with_colon_regex
  /^\s+(=>)?\s\d+:/
end
rainbow(str, output_type) click to toggle source
# File lib/helpers/colorize.rb, line 110
def rainbow(str, output_type)
  Rainbow(str).color(colors[output_type])
end