class Thor::Shell::Color


Thor::Shell::Basic to see all available methods.
Inherit from Thor::Shell::Basic and add set_color behavior. Check

def can_display_colors?

def can_display_colors?
  stdout.tty?
end

def diff_lcs_loaded? #:nodoc:

:nodoc:

for diff.
Check if Diff::LCS is loaded. If it is, use it to create pretty output
def diff_lcs_loaded? #:nodoc:
  return true  if defined?(Diff::LCS)
  return @diff_lcs_loaded unless @diff_lcs_loaded.nil?
  @diff_lcs_loaded = begin
    require 'diff/lcs'
    true
  rescue LoadError
    false
  end
end

def output_diff_line(diff) #:nodoc:

:nodoc:
def output_diff_line(diff) #:nodoc:
  case diff.action
  when '-'
    say "- #{diff.old_element.chomp}", :red, true
  when '+'
    say "+ #{diff.new_element.chomp}", :green, true
  when '!'
    say "- #{diff.old_element.chomp}", :red, true
    say "+ #{diff.new_element.chomp}", :green, true
  else
    say "  #{diff.old_element.chomp}", nil, true
  end
end

def set_color(string, *colors)

:on_white
:on_cyan
:on_magenta
:on_blue
:on_yellow
:on_green
:on_red
:on_black
:white
:cyan
:magenta
:blue
:yellow
:green
:red
:black
:bold

The available colors are:

set_color "Hi!", :red, :on_white, :bold

Example:

symbols.
Pass foreground, background and bold options to this method as

of the returned String.
on Highline implementation and it automatically appends CLEAR to the end
option is set to true, it also adds bold to the string. This is based
Set color by using a string or one of the defined constants. If a third
def set_color(string, *colors)
  if colors.compact.empty? || !can_display_colors?
    string
  elsif colors.all? { |color| color.is_a?(Symbol) || color.is_a?(String) }
    ansi_colors = colors.map { |color| lookup_color(color) }
    "#{ansi_colors.join}#{string}#{CLEAR}"
  else
    # The old API was `set_color(color, bold=boolean)`. We
    # continue to support the old API because you should never
    # break old APIs unnecessarily :P
    foreground, bold = colors
    foreground = self.class.const_get(foreground.to_s.upcase) if foreground.is_a?(Symbol)
    bold       = bold ? BOLD : ''
    "#{bold}#{foreground}#{string}#{CLEAR}"
  end
end

def show_diff(destination, content) #:nodoc:

:nodoc:

available.
Overwrite show_diff to show diff with colors if Diff::LCS is
def show_diff(destination, content) #:nodoc:
  if diff_lcs_loaded? && ENV['THOR_DIFF'].nil? && ENV['RAILS_DIFF'].nil?
    actual  = File.binread(destination).to_s.split("\n")
    content = content.to_s.split("\n")
    Diff::LCS.sdiff(actual, content).each do |diff|
      output_diff_line(diff)
    end
  else
    super
  end
end