Skip to content

Instantly share code, notes, and snippets.

@majedbojan
Last active February 10, 2021 14:01
Show Gist options
  • Save majedbojan/e7d382a87d91c0a9fc3dbb30324c3688 to your computer and use it in GitHub Desktop.
Save majedbojan/e7d382a87d91c0a9fc3dbb30324c3688 to your computer and use it in GitHub Desktop.
# config/initializers/string.rb
class String
##---------------bg Color-----------------##
def black; "\e[30m#{self}\e[0m" end
def red; "\e[31m#{self}\e[0m" end
def green; "\e[32m#{self}\e[0m" end
def brown; "\e[33m#{self}\e[0m" end
def blue; "\e[34m#{self}\e[0m" end
def magenta; "\e[35m#{self}\e[0m" end
def cyan; "\e[36m#{self}\e[0m" end
def gray; "\e[37m#{self}\e[0m" end
##---------------bg Color-----------------##
def bg_black; "\e[40m#{self}\e[0m" end
def bg_red; "\e[41m#{self}\e[0m" end
def bg_green; "\e[42m#{self}\e[0m" end
def bg_brown; "\e[43m#{self}\e[0m" end
def bg_blue; "\e[44m#{self}\e[0m" end
def bg_magenta; "\e[45m#{self}\e[0m" end
def bg_cyan; "\e[46m#{self}\e[0m" end
def bg_gray; "\e[47m#{self}\e[0m" end
##---------------Fonts--------------------##
def bold; "\e[1m#{self}\e[22m" end
def italic; "\e[3m#{self}\e[23m" end
def underline; "\e[4m#{self}\e[24m" end
def blink; "\e[5m#{self}\e[25m" end
def reverse_color; "\e[7m#{self}\e[27m" end
end
# Usage
puts "I'm back green".bg_green
puts "I'm red and back cyan".red.bg_cyan
puts "I'm bold and green and backround red".bold.green.bg_red
# -------------------------------------- Other way to do same ----------------------------------------------- #
class Colorizator
FONTS = { bold: '1', dim: '2', italic: '3', underline: '4', reverse: '7', hidden: '8' }.freeze
COLORS = {
red: '31',
blue: '34',
cyan: '36',
gray: '37',
brown: '33',
green: '32',
white: '1;37',
black: '30',
purple: '35',
yellow: '1;33',
default: '38',
dark_gray: '1;30',
light_red: '1;31',
light_blue: '1;34',
light_cyan: '1;36',
light_green: '1;32',
light_purple: '1;35'
}.freeze
BG_COLORS = {
red: '41',
cyan: '46',
gray: '47',
blue: '44',
black: '40',
green: '42',
brown: '43',
white: '107',
purple: '45',
yellow: '103',
default: '0',
light_red: '101',
dark_gray: '100',
light_blue: '104',
light_cyan: '106',
light_green: '102',
light_purple: '105'
}.freeze
attr_reader :text,
:color,
:bg_color,
:font_options
def initialize(text, color, bg_color = :default, **options)
@text = text
@color = color
@bg_color = bg_color
@font_options = options.select { |k, v| v && FONTS.key?(k) }.keys
end
def self.colorize(text, color, bg_color, **options)
new(text, color, bg_color, **options).colorize
end
def colorize
"\e[#{bg_color_code};#{font};#{color_code}m#{text}\e[0m".squeeze(';')
end
private
def font
font_options.map { |e| FONTS[e] }.join(';').squeeze
end
def color_code
COLORS[color] || :default
end
def bg_color_code
BG_COLORS[bg_color] || :default
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment