lib/git-runner/text.rb
module GitRunner
module Text
extend self
COLOR_START = "\033["
COLOR_END = "m"
COLOR_RESET = "#{COLOR_START}0#{COLOR_END}"
COLORS = {
:black => 30,
:red => 31,
:green => 32,
:yellow => 33,
:blue => 34,
:purple => 35,
:cyan => 36,
:white => 37
}
STYLES = {
:normal => 0,
:bold => 1,
:underline => 4
}
def begin
STDOUT.sync = true
print("\e[1G \e[1G")
end
def finish
print("\n")
end
def out(str, style=nil)
# Ensure that new lines overwrite the default 'remote: ' text
str = str.gsub("\n", "\n\e[1G#{padding(nil)}")
print "\n\e[1G#{padding(style).ljust(7 + (@indentation || 0))}#{str}"
end
def new_line
out('')
end
def indent(spaces=2)
@indentation ||= 0
@indentation += spaces
yield
@indentation -= spaces
Text.new_line
end
# Color methods
COLORS.each do |color, code|
class_eval <<-EOF
def #{color}(str, style=:normal)
"#{COLOR_START}\#{STYLES[style]};#{code}#{COLOR_END}\#{str}#{COLOR_RESET}"
end
EOF
end
private
def padding(style)
case style
when :heading
'----->'
else
''
end
end
end
end