class Thor::Shell::HTML
Thor::Shell::Basic to see all available methods.
Inherit from Thor::Shell::Basic and add set_color behavior. Check
def ask(statement, color = nil)
ask("What is your name?")
==== Example
Ask something to the user and receives a response.
def ask(statement, color = nil) raise NotImplementedError, "Implement #ask for Thor::Shell::HTML" end
def can_display_colors?
def can_display_colors? true end
def diff_lcs_loaded? #: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:
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)
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.all? { |color| color.is_a?(Symbol) || color.is_a?(String) } html_colors = colors.map { |color| lookup_color(color) } "<span style=\"#{html_colors.join('; ')};\">#{string}</span>" else color, bold = colors html_color = self.class.const_get(color.to_s.upcase) if color.is_a?(Symbol) styles = [html_color] styles << BOLD if bold "<span style=\"#{styles.join('; ')};\">#{string}</span>" end end
def show_diff(destination, content) #: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