class String

Colorize String class extension.

Borrowed directly from the colorize gem. It hasn't changed in 4 years and I didn't want to add a gem dependency.

Constants

COLORS

Colors Hash

MODES

Modes Hash

Public Class Methods

color_matrix(txt = "[X]") click to toggle source

Display color matrix with color names.

# File lib/colorize.rb, line 180
def color_matrix(txt = "[X]")
  size = String.colors.length
  String.colors.each do |color|
    String.colors.each do |back|
      print txt.colorize(color: color, background: back)
    end
    puts " < #{color}"
  end
  String.colors.reverse.each_with_index do |back, index|
    puts "#{"|".rjust(txt.length) * (size - index)} < #{back}"
  end
  ""
end
colors() click to toggle source

Return array of available colors used by colorize method

# File lib/colorize.rb, line 169
def colors
  keys = []
  COLORS.each_key do |key|
    keys << key
  end
  keys
end
modes() click to toggle source

Return array of available modes used by colorize method

# File lib/colorize.rb, line 158
def modes
  keys = []
  MODES.each_key do |key|
    keys << key
  end
  keys
end

Public Instance Methods

colorize(params) click to toggle source

Change color of string

Examples:

puts "This is blue".colorize( :blue )
puts "This is light blue".colorize( :light_blue )
puts "This is also blue".colorize( :color => :blue )
puts "This is light blue with red background".colorize( :color => :light_blue, :background => :red )
puts "This is light blue with red background".colorize( :light_blue ).colorize( :background => :red )
puts "This is blue text on red".blue.on_red
puts "This is red on blue".colorize( :red ).on_blue
puts "This is red on blue and underline".colorize( :red ).on_blue.underline
puts "This is blue text on red".blue.on_red.blink
puts "This is uncolorized".blue.on_red.uncolorize

rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity

# File lib/colorize.rb, line 78
def colorize(params)
  return self unless STDOUT.isatty

  begin
    require "Win32/Console/ANSI" if RUBY_PLATFORM.match?(/win32/)
  rescue LoadError
    raise "You must gem install win32console to use colorize on Windows"
  end

  color_parameters = {}

  if params.instance_of?(Hash)
    color_parameters[:color] = COLORS[params[:color]]
    color_parameters[:background] = COLORS[params[:background]]
    color_parameters[:mode] = MODES[params[:mode]]
  elsif params.instance_of?(Symbol)
    color_parameters[:color] = COLORS[params]
  end

  color_parameters[:color] ||= @color ||= COLORS[:default]
  color_parameters[:background] ||= @background ||= COLORS[:default]
  color_parameters[:mode] ||= @mode ||= MODES[:default]

  color_parameters[:uncolorized] ||= @uncolorized ||= dup

  # calculate bright mode
  color_parameters[:color] += 50 if color_parameters[:color] > 10

  color_parameters[:background] += 50 if color_parameters[:background] > 10

  "\033[#{color_parameters[:mode]};#{color_parameters[:color] + 30};"\
  "#{color_parameters[:background] + 40}m#{color_parameters[:uncolorized]}\033[0m"\
    .color_parameters(color_parameters)
end
colorized?() click to toggle source

Return true if sting is colorized

# File lib/colorize.rb, line 124
def colorized?
  !defined?(@uncolorized).nil?
end
uncolorize() click to toggle source

Return uncolorized string

# File lib/colorize.rb, line 117
def uncolorize
  @uncolorized || self
end

Protected Instance Methods

color_parameters(params) click to toggle source

Set color values in new string intance

# File lib/colorize.rb, line 49
def color_parameters(params)
  return unless params.instance_of?(Hash)

  @color = params[:color]
  @background = params[:background]
  @mode = params[:mode]
  @uncolorized = params[:uncolorized]
  self
end