123456789_123456789_123456789_123456789_123456789_

Class: Bundler::Thor::Shell::Color

Relationships & Source Files
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
self, Basic
Instance Chain:
self, Basic
Inherits: Bundler::Thor::Shell::Basic
Defined in: lib/bundler/vendor/thor/lib/thor/shell/color.rb

Overview

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

Constant Summary

Basic - Inherited

DEFAULT_TERMINAL_WIDTH

Class Method Summary

Basic - Inherited

.new

Initialize base, mute and padding to nil.

Instance Attribute Summary

Basic - Inherited

#base,
#mute

Mute everything that’s inside given block.

#mute?

Check if base is muted.

#padding,
#padding=

Sets the output padding, not allowing less than zero values.

#can_display_colors?, #unix?, #quiet?

Instance Method Summary

Basic - Inherited

#ask

Asks something to the user and receives a response.

#error

Called if something goes wrong during the execution.

#file_collision

Deals with file collision and returns true if the file should be overwritten and false otherwise.

#indent

Sets the output padding while executing a block and resets it.

#no?

Make a question the to user and returns true if the user replies “n” or “no”.

#print_in_columns

Prints values in columns.

#print_table

Prints a table.

#print_wrapped

Prints a long string, word-wrapping the text to the current width of the terminal display.

#say

Say (print) something to the user.

#say_status

Say a status with the given color and appends the message.

#terminal_width

This code was copied from Rake, available under MIT-LICENSE Copyright © 2003, 2004 Jim Weirich.

#yes?

Make a question the to user and returns true if the user replies “y” or “yes”.

#answer_match,
#as_unicode

See additional method definition at line 425.

#ask_filtered, #ask_simply,
#dynamic_width

Calculate the dynamic width of the terminal.

#dynamic_width_stty, #dynamic_width_tput, #lookup_color, #prepare_message, #stderr, #stdout, #truncate,
#set_color

Apply color to the given string with optional bold.

#file_collision_help, #git_merge_tool, #is?, #merge, #merge_tool, #show_diff

Constructor Details

This class inherits a constructor from Bundler::Thor::Shell::Basic

Instance Attribute Details

#are_colors_disabled?Boolean (readonly, protected)

[ GitHub ]

  
# File 'lib/bundler/vendor/thor/lib/thor/shell/color.rb', line 107

def are_colors_disabled?
  !ENV['NO_COLOR'].nil?
end

#are_colors_supported?Boolean (readonly, protected)

[ GitHub ]

  
# File 'lib/bundler/vendor/thor/lib/thor/shell/color.rb', line 103

def are_colors_supported?
  stdout.tty? && ENV["TERM"] != "dumb"
end

#can_display_colors?Boolean (readonly, protected)

[ GitHub ]

  
# File 'lib/bundler/vendor/thor/lib/thor/shell/color.rb', line 99

def can_display_colors?
  are_colors_supported? && !are_colors_disabled?
end

#diff_lcs_loaded?Boolean (readonly, protected)

This method is for internal use only.

Check if Diff::LCS is loaded. If it is, use it to create pretty output for diff.

[ GitHub ]

  
# File 'lib/bundler/vendor/thor/lib/thor/shell/color.rb', line 144

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

Instance Method Details

#output_diff_line(diff) (protected)

This method is for internal use only.
[ GitHub ]

  
# File 'lib/bundler/vendor/thor/lib/thor/shell/color.rb', line 127

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

#set_color(string, *colors)

Set color by using a string or one of the defined constants. If a third option is set to true, it also adds bold to the string. This is based on Highline implementation and it automatically appends CLEAR to the end of the returned String.

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

Example:

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

The available colors are:

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

  
# File 'lib/bundler/vendor/thor/lib/thor/shell/color.rb', line 79

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

#show_diff(destination, content) (protected)

This method is for internal use only.

Overwrite show_diff to show diff with colors if Diff::LCS is available.

[ GitHub ]

  
# File 'lib/bundler/vendor/thor/lib/thor/shell/color.rb', line 114

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