master/lib/guard/ui.rb

159 lines
4.4 KiB
Ruby
Raw Normal View History

2010-10-03 21:00:33 +00:00
module Guard
2011-09-20 10:54:36 +00:00
# The UI class helps to format messages for the user.
#
2010-10-03 21:00:33 +00:00
module UI
2011-06-20 12:26:44 +00:00
2011-06-20 12:33:08 +00:00
ANSI_ESCAPE_BRIGHT = "1"
2011-09-20 10:54:36 +00:00
ANSI_ESCAPE_BLACK = "30"
ANSI_ESCAPE_RED = "31"
ANSI_ESCAPE_GREEN = "32"
ANSI_ESCAPE_YELLOW = "33"
ANSI_ESCAPE_BLUE = "34"
2011-06-20 12:26:44 +00:00
ANSI_ESCAPE_MAGENTA = "35"
2011-09-20 10:54:36 +00:00
ANSI_ESCAPE_CYAN = "36"
ANSI_ESCAPE_WHITE = "37"
ANSI_ESCAPE_BGBLACK = "40"
ANSI_ESCAPE_BGRED = "41"
ANSI_ESCAPE_BGGREEN = "42"
ANSI_ESCAPE_BGYELLOW = "43"
ANSI_ESCAPE_BGBLUE = "44"
2011-06-20 12:26:44 +00:00
ANSI_ESCAPE_BGMAGENTA = "45"
2011-09-20 10:54:36 +00:00
ANSI_ESCAPE_BGCYAN = "46"
ANSI_ESCAPE_BGWHITE = "47"
2011-06-20 12:26:44 +00:00
2010-10-03 21:00:33 +00:00
class << self
color_enabled = nil
2011-09-20 10:54:36 +00:00
# Show an info message.
#
# @param [String] message the message to show
# @param [Hash] options the options
# @option options [Boolean] reset whether to clean the output before
#
2010-10-03 21:00:33 +00:00
def info(message, options = {})
unless ENV["GUARD_ENV"] == "test"
reset_line if options[:reset]
2011-06-20 12:26:44 +00:00
puts color(message) if message != ''
2010-10-03 21:00:33 +00:00
end
end
2011-09-20 10:54:36 +00:00
# Show a red error message that is prefixed with ERROR.
#
# @param [String] message the message to show
# @param [Hash] options the options
# @option options [Boolean] reset whether to clean the output before
#
def error(message, options = {})
unless ENV["GUARD_ENV"] == "test"
reset_line if options[:reset]
puts color('ERROR: ', :red) + message
end
2010-10-03 21:00:33 +00:00
end
2011-09-20 10:54:36 +00:00
# Show a red deprecation message that is prefixed with DEPRECATION.
#
# @param [String] message the message to show
# @param [Hash] options the options
# @option options [Boolean] reset whether to clean the output before
#
def deprecation(message, options = {})
unless ENV["GUARD_ENV"] == "test"
reset_line if options[:reset]
puts color('DEPRECATION: ', :red) + message
end
2010-10-03 21:00:33 +00:00
end
2011-09-20 10:54:36 +00:00
# Show a debug message that is prefixed with DEBUG and a timestampe.
#
# @param [String] message the message to show
# @param [Hash] options the options
# @option options [Boolean] reset whether to clean the output before
#
def debug(message, options={ })
2010-10-10 10:38:25 +00:00
unless ENV["GUARD_ENV"] == "test"
2010-11-11 10:02:29 +00:00
reset_line if options[:reset]
puts color("DEBUG (#{Time.now.strftime('%T')}): ", :yellow) + message if ::Guard.options && ::Guard.options[:debug]
2010-10-10 10:38:25 +00:00
end
end
2011-09-20 10:54:36 +00:00
# Reset a line.
#
2010-10-03 21:00:33 +00:00
def reset_line
print(color_enabled? ? "\r\e[0m" : "\r\n")
2010-10-03 21:00:33 +00:00
end
2011-09-20 10:54:36 +00:00
# Clear the output.
#
2010-10-03 21:00:33 +00:00
def clear
system("clear;")
end
2011-09-20 10:54:36 +00:00
private
2011-09-20 10:54:36 +00:00
# Reset a color sequence.
#
2011-06-20 12:26:44 +00:00
# @deprecated
2011-09-20 10:54:36 +00:00
# @param [String] text the text
#
2010-10-03 21:00:33 +00:00
def reset_color(text)
deprecation('UI.reset_color(text) is deprecated, please use color(text, "") instead.')
color(text, "")
2010-10-03 21:00:33 +00:00
end
2011-09-20 10:54:36 +00:00
# Colorizes a text message.
#
# @example
# color("Hello World", :red, :bright)
#
# @param [String] the text to colorize
# @param [Array] color_options
#
2011-06-20 12:26:44 +00:00
def color(text, *color_options)
color_code = ""
color_options.each do |color_option|
color_option = color_option.to_s
if color_option != ""
if !(color_option =~ /\d+/)
2011-09-20 10:54:36 +00:00
color_option = const_get("ANSI_ESCAPE_#{ color_option.upcase }")
2011-06-20 12:26:44 +00:00
end
color_code += ";" + color_option
end
end
2011-09-20 10:54:36 +00:00
color_enabled? ? "\e[0#{ color_code }m#{ text }\e[0m" : text
2010-10-03 21:00:33 +00:00
end
2011-09-20 10:54:36 +00:00
# Checks if color output can be enabled.
#
# @return [Boolean] whether color is enabled or not
#
def color_enabled?
if @color_enabled.nil?
if RbConfig::CONFIG['target_os'] =~ /mswin|mingw/i
if ENV['ANSICON']
@color_enabled = true
else
begin
require 'rubygems' unless ENV['NO_RUBYGEMS']
require 'Win32/Console/ANSI'
@color_enabled = true
rescue LoadError
@color_enabled = false
info "You must 'gem install win32console' to use color on Windows"
end
end
else
@color_enabled = true
end
end
2011-09-20 10:54:36 +00:00
@color_enabled
2010-10-03 21:00:33 +00:00
end
2010-10-03 21:00:33 +00:00
end
end
end