engineyard 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/engineyard/cli.rb +11 -2
 - data/lib/engineyard/model/environment.rb +36 -3
 - data/lib/engineyard/model/instance.rb +1 -1
 - data/lib/engineyard/thor.rb +50 -68
 - data/lib/engineyard/version.rb +1 -1
 - data/spec/ey/deploy_spec.rb +66 -0
 - metadata +23 -36
 - data/lib/engineyard/vendor/thor.rb +0 -270
 - data/lib/engineyard/vendor/thor/actions.rb +0 -297
 - data/lib/engineyard/vendor/thor/actions/create_file.rb +0 -105
 - data/lib/engineyard/vendor/thor/actions/directory.rb +0 -93
 - data/lib/engineyard/vendor/thor/actions/empty_directory.rb +0 -134
 - data/lib/engineyard/vendor/thor/actions/file_manipulation.rb +0 -229
 - data/lib/engineyard/vendor/thor/actions/inject_into_file.rb +0 -104
 - data/lib/engineyard/vendor/thor/base.rb +0 -540
 - data/lib/engineyard/vendor/thor/core_ext/file_binary_read.rb +0 -9
 - data/lib/engineyard/vendor/thor/core_ext/hash_with_indifferent_access.rb +0 -75
 - data/lib/engineyard/vendor/thor/core_ext/ordered_hash.rb +0 -100
 - data/lib/engineyard/vendor/thor/error.rb +0 -30
 - data/lib/engineyard/vendor/thor/group.rb +0 -271
 - data/lib/engineyard/vendor/thor/invocation.rb +0 -180
 - data/lib/engineyard/vendor/thor/parser.rb +0 -4
 - data/lib/engineyard/vendor/thor/parser/argument.rb +0 -67
 - data/lib/engineyard/vendor/thor/parser/arguments.rb +0 -161
 - data/lib/engineyard/vendor/thor/parser/option.rb +0 -128
 - data/lib/engineyard/vendor/thor/parser/options.rb +0 -164
 - data/lib/engineyard/vendor/thor/rake_compat.rb +0 -66
 - data/lib/engineyard/vendor/thor/runner.rb +0 -314
 - data/lib/engineyard/vendor/thor/shell.rb +0 -83
 - data/lib/engineyard/vendor/thor/shell/basic.rb +0 -268
 - data/lib/engineyard/vendor/thor/shell/color.rb +0 -108
 - data/lib/engineyard/vendor/thor/task.rb +0 -102
 - data/lib/engineyard/vendor/thor/util.rb +0 -229
 - data/lib/engineyard/vendor/thor/version.rb +0 -3
 
| 
         @@ -1,83 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            require 'rbconfig'
         
     | 
| 
       2 
     | 
    
         
            -
            require 'thor/shell/color'
         
     | 
| 
       3 
     | 
    
         
            -
             
     | 
| 
       4 
     | 
    
         
            -
            class Thor
         
     | 
| 
       5 
     | 
    
         
            -
              module Base
         
     | 
| 
       6 
     | 
    
         
            -
                # Returns the shell used in all Thor classes. If you are in a Unix platform
         
     | 
| 
       7 
     | 
    
         
            -
                # it will use a colored log, otherwise it will use a basic one without color.
         
     | 
| 
       8 
     | 
    
         
            -
                #
         
     | 
| 
       9 
     | 
    
         
            -
                def self.shell
         
     | 
| 
       10 
     | 
    
         
            -
                  @shell ||= if Config::CONFIG['host_os'] =~ /mswin|mingw/
         
     | 
| 
       11 
     | 
    
         
            -
                    Thor::Shell::Basic
         
     | 
| 
       12 
     | 
    
         
            -
                  else
         
     | 
| 
       13 
     | 
    
         
            -
                    Thor::Shell::Color
         
     | 
| 
       14 
     | 
    
         
            -
                  end
         
     | 
| 
       15 
     | 
    
         
            -
                end
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
                # Sets the shell used in all Thor classes.
         
     | 
| 
       18 
     | 
    
         
            -
                #
         
     | 
| 
       19 
     | 
    
         
            -
                def self.shell=(klass)
         
     | 
| 
       20 
     | 
    
         
            -
                  @shell = klass
         
     | 
| 
       21 
     | 
    
         
            -
                end
         
     | 
| 
       22 
     | 
    
         
            -
              end
         
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
              module Shell
         
     | 
| 
       25 
     | 
    
         
            -
                SHELL_DELEGATED_METHODS = [:ask, :yes?, :no?, :say, :say_status, :print_table]
         
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
                # Add shell to initialize config values.
         
     | 
| 
       28 
     | 
    
         
            -
                #
         
     | 
| 
       29 
     | 
    
         
            -
                # ==== Configuration
         
     | 
| 
       30 
     | 
    
         
            -
                # shell<Object>:: An instance of the shell to be used.
         
     | 
| 
       31 
     | 
    
         
            -
                #
         
     | 
| 
       32 
     | 
    
         
            -
                # ==== Examples
         
     | 
| 
       33 
     | 
    
         
            -
                #
         
     | 
| 
       34 
     | 
    
         
            -
                #   class MyScript < Thor
         
     | 
| 
       35 
     | 
    
         
            -
                #     argument :first, :type => :numeric
         
     | 
| 
       36 
     | 
    
         
            -
                #   end
         
     | 
| 
       37 
     | 
    
         
            -
                #
         
     | 
| 
       38 
     | 
    
         
            -
                #   MyScript.new [1.0], { :foo => :bar }, :shell => Thor::Shell::Basic.new
         
     | 
| 
       39 
     | 
    
         
            -
                #
         
     | 
| 
       40 
     | 
    
         
            -
                def initialize(args=[], options={}, config={})
         
     | 
| 
       41 
     | 
    
         
            -
                  super
         
     | 
| 
       42 
     | 
    
         
            -
                  self.shell = config[:shell]
         
     | 
| 
       43 
     | 
    
         
            -
                  self.shell.base ||= self if self.shell.respond_to?(:base)
         
     | 
| 
       44 
     | 
    
         
            -
                end
         
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
       46 
     | 
    
         
            -
                # Holds the shell for the given Thor instance. If no shell is given,
         
     | 
| 
       47 
     | 
    
         
            -
                # it gets a default shell from Thor::Base.shell.
         
     | 
| 
       48 
     | 
    
         
            -
                def shell
         
     | 
| 
       49 
     | 
    
         
            -
                  @shell ||= Thor::Base.shell.new
         
     | 
| 
       50 
     | 
    
         
            -
                end
         
     | 
| 
       51 
     | 
    
         
            -
             
     | 
| 
       52 
     | 
    
         
            -
                # Sets the shell for this thor class.
         
     | 
| 
       53 
     | 
    
         
            -
                def shell=(shell)
         
     | 
| 
       54 
     | 
    
         
            -
                  @shell = shell
         
     | 
| 
       55 
     | 
    
         
            -
                end
         
     | 
| 
       56 
     | 
    
         
            -
             
     | 
| 
       57 
     | 
    
         
            -
                # Common methods that are delegated to the shell.
         
     | 
| 
       58 
     | 
    
         
            -
                SHELL_DELEGATED_METHODS.each do |method|
         
     | 
| 
       59 
     | 
    
         
            -
                  module_eval <<-METHOD, __FILE__, __LINE__
         
     | 
| 
       60 
     | 
    
         
            -
                    def #{method}(*args)
         
     | 
| 
       61 
     | 
    
         
            -
                      shell.#{method}(*args)
         
     | 
| 
       62 
     | 
    
         
            -
                    end
         
     | 
| 
       63 
     | 
    
         
            -
                  METHOD
         
     | 
| 
       64 
     | 
    
         
            -
                end
         
     | 
| 
       65 
     | 
    
         
            -
             
     | 
| 
       66 
     | 
    
         
            -
                # Yields the given block with padding.
         
     | 
| 
       67 
     | 
    
         
            -
                def with_padding
         
     | 
| 
       68 
     | 
    
         
            -
                  shell.padding += 1
         
     | 
| 
       69 
     | 
    
         
            -
                  yield
         
     | 
| 
       70 
     | 
    
         
            -
                ensure
         
     | 
| 
       71 
     | 
    
         
            -
                  shell.padding -= 1
         
     | 
| 
       72 
     | 
    
         
            -
                end
         
     | 
| 
       73 
     | 
    
         
            -
             
     | 
| 
       74 
     | 
    
         
            -
                protected
         
     | 
| 
       75 
     | 
    
         
            -
             
     | 
| 
       76 
     | 
    
         
            -
                  # Allow shell to be shared between invocations.
         
     | 
| 
       77 
     | 
    
         
            -
                  #
         
     | 
| 
       78 
     | 
    
         
            -
                  def _shared_configuration #:nodoc:
         
     | 
| 
       79 
     | 
    
         
            -
                    super.merge!(:shell => self.shell)
         
     | 
| 
       80 
     | 
    
         
            -
                  end
         
     | 
| 
       81 
     | 
    
         
            -
             
     | 
| 
       82 
     | 
    
         
            -
              end
         
     | 
| 
       83 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,268 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            require 'tempfile'
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            class Thor
         
     | 
| 
       4 
     | 
    
         
            -
              module Shell
         
     | 
| 
       5 
     | 
    
         
            -
                class Basic
         
     | 
| 
       6 
     | 
    
         
            -
                  attr_accessor :base, :padding
         
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
                  # Initialize base and padding to nil.
         
     | 
| 
       9 
     | 
    
         
            -
                  #
         
     | 
| 
       10 
     | 
    
         
            -
                  def initialize #:nodoc:
         
     | 
| 
       11 
     | 
    
         
            -
                    @base, @padding = nil, 0
         
     | 
| 
       12 
     | 
    
         
            -
                  end
         
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
                  # Sets the output padding, not allowing less than zero values.
         
     | 
| 
       15 
     | 
    
         
            -
                  #
         
     | 
| 
       16 
     | 
    
         
            -
                  def padding=(value)
         
     | 
| 
       17 
     | 
    
         
            -
                    @padding = [0, value].max
         
     | 
| 
       18 
     | 
    
         
            -
                  end
         
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
                  # Ask something to the user and receives a response.
         
     | 
| 
       21 
     | 
    
         
            -
                  #
         
     | 
| 
       22 
     | 
    
         
            -
                  # ==== Example
         
     | 
| 
       23 
     | 
    
         
            -
                  # ask("What is your name?")
         
     | 
| 
       24 
     | 
    
         
            -
                  #
         
     | 
| 
       25 
     | 
    
         
            -
                  def ask(statement, color=nil)
         
     | 
| 
       26 
     | 
    
         
            -
                    say("#{statement} ", color)
         
     | 
| 
       27 
     | 
    
         
            -
                    $stdin.gets.strip
         
     | 
| 
       28 
     | 
    
         
            -
                  end
         
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       30 
     | 
    
         
            -
                  # Say (print) something to the user. If the sentence ends with a whitespace
         
     | 
| 
       31 
     | 
    
         
            -
                  # or tab character, a new line is not appended (print + flush). Otherwise
         
     | 
| 
       32 
     | 
    
         
            -
                  # are passed straight to puts (behavior got from Highline).
         
     | 
| 
       33 
     | 
    
         
            -
                  #
         
     | 
| 
       34 
     | 
    
         
            -
                  # ==== Example
         
     | 
| 
       35 
     | 
    
         
            -
                  # say("I know you knew that.")
         
     | 
| 
       36 
     | 
    
         
            -
                  #
         
     | 
| 
       37 
     | 
    
         
            -
                  def say(message="", color=nil, force_new_line=(message.to_s !~ /( |\t)$/))
         
     | 
| 
       38 
     | 
    
         
            -
                    message  = message.to_s
         
     | 
| 
       39 
     | 
    
         
            -
                    message  = set_color(message, color) if color
         
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
     | 
    
         
            -
                    if force_new_line
         
     | 
| 
       42 
     | 
    
         
            -
                      $stdout.puts(message)
         
     | 
| 
       43 
     | 
    
         
            -
                    else
         
     | 
| 
       44 
     | 
    
         
            -
                      $stdout.print(message)
         
     | 
| 
       45 
     | 
    
         
            -
                      $stdout.flush
         
     | 
| 
       46 
     | 
    
         
            -
                    end
         
     | 
| 
       47 
     | 
    
         
            -
                  end
         
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
     | 
    
         
            -
                  # Say a status with the given color and appends the message. Since this
         
     | 
| 
       50 
     | 
    
         
            -
                  # method is used frequently by actions, it allows nil or false to be given
         
     | 
| 
       51 
     | 
    
         
            -
                  # in log_status, avoiding the message from being shown. If a Symbol is
         
     | 
| 
       52 
     | 
    
         
            -
                  # given in log_status, it's used as the color.
         
     | 
| 
       53 
     | 
    
         
            -
                  #
         
     | 
| 
       54 
     | 
    
         
            -
                  def say_status(status, message, log_status=true)
         
     | 
| 
       55 
     | 
    
         
            -
                    return if quiet? || log_status == false
         
     | 
| 
       56 
     | 
    
         
            -
                    spaces = "  " * (padding + 1)
         
     | 
| 
       57 
     | 
    
         
            -
                    color  = log_status.is_a?(Symbol) ? log_status : :green
         
     | 
| 
       58 
     | 
    
         
            -
             
     | 
| 
       59 
     | 
    
         
            -
                    status = status.to_s.rjust(12)
         
     | 
| 
       60 
     | 
    
         
            -
                    status = set_color status, color, true if color
         
     | 
| 
       61 
     | 
    
         
            -
                    say "#{status}#{spaces}#{message}", nil, true
         
     | 
| 
       62 
     | 
    
         
            -
                  end
         
     | 
| 
       63 
     | 
    
         
            -
             
     | 
| 
       64 
     | 
    
         
            -
                  # Make a question the to user and returns true if the user replies "y" or
         
     | 
| 
       65 
     | 
    
         
            -
                  # "yes".
         
     | 
| 
       66 
     | 
    
         
            -
                  #
         
     | 
| 
       67 
     | 
    
         
            -
                  def yes?(statement, color=nil)
         
     | 
| 
       68 
     | 
    
         
            -
                    ask(statement, color) =~ is?(:yes)
         
     | 
| 
       69 
     | 
    
         
            -
                  end
         
     | 
| 
       70 
     | 
    
         
            -
             
     | 
| 
       71 
     | 
    
         
            -
                  # Make a question the to user and returns true if the user replies "n" or
         
     | 
| 
       72 
     | 
    
         
            -
                  # "no".
         
     | 
| 
       73 
     | 
    
         
            -
                  #
         
     | 
| 
       74 
     | 
    
         
            -
                  def no?(statement, color=nil)
         
     | 
| 
       75 
     | 
    
         
            -
                    !yes?(statement, color)
         
     | 
| 
       76 
     | 
    
         
            -
                  end
         
     | 
| 
       77 
     | 
    
         
            -
             
     | 
| 
       78 
     | 
    
         
            -
                  # Prints a table.
         
     | 
| 
       79 
     | 
    
         
            -
                  #
         
     | 
| 
       80 
     | 
    
         
            -
                  # ==== Parameters
         
     | 
| 
       81 
     | 
    
         
            -
                  # Array[Array[String, String, ...]]
         
     | 
| 
       82 
     | 
    
         
            -
                  #
         
     | 
| 
       83 
     | 
    
         
            -
                  # ==== Options
         
     | 
| 
       84 
     | 
    
         
            -
                  # ident<Integer>:: Indent the first column by ident value.
         
     | 
| 
       85 
     | 
    
         
            -
                  # colwidth<Integer>:: Force the first column to colwidth spaces wide.
         
     | 
| 
       86 
     | 
    
         
            -
                  #
         
     | 
| 
       87 
     | 
    
         
            -
                  def print_table(table, options={})
         
     | 
| 
       88 
     | 
    
         
            -
                    return if table.empty?
         
     | 
| 
       89 
     | 
    
         
            -
             
     | 
| 
       90 
     | 
    
         
            -
                    formats, ident, colwidth = [], options[:ident].to_i, options[:colwidth].to_i
         
     | 
| 
       91 
     | 
    
         
            -
                    options[:truncate] = terminal_width if options[:truncate] == true
         
     | 
| 
       92 
     | 
    
         
            -
             
     | 
| 
       93 
     | 
    
         
            -
                    0.upto(table.first.length - 2) do |i|
         
     | 
| 
       94 
     | 
    
         
            -
                      colwidth ||= table.max{ |a,b| a[i].size <=> b[i].size }[i].size
         
     | 
| 
       95 
     | 
    
         
            -
                      formats << "%-#{colwidth + 2}s"
         
     | 
| 
       96 
     | 
    
         
            -
                    end
         
     | 
| 
       97 
     | 
    
         
            -
             
     | 
| 
       98 
     | 
    
         
            -
                    formats[0] = formats[0].insert(0, " " * ident)
         
     | 
| 
       99 
     | 
    
         
            -
                    formats << "%s"
         
     | 
| 
       100 
     | 
    
         
            -
             
     | 
| 
       101 
     | 
    
         
            -
                    table.each do |row|
         
     | 
| 
       102 
     | 
    
         
            -
                      sentence = ""
         
     | 
| 
       103 
     | 
    
         
            -
             
     | 
| 
       104 
     | 
    
         
            -
                      row.each_with_index do |column, i|
         
     | 
| 
       105 
     | 
    
         
            -
                        sentence << formats[i] % column.to_s
         
     | 
| 
       106 
     | 
    
         
            -
                      end
         
     | 
| 
       107 
     | 
    
         
            -
             
     | 
| 
       108 
     | 
    
         
            -
                      sentence = truncate(sentence, options[:truncate]) if options[:truncate]
         
     | 
| 
       109 
     | 
    
         
            -
                      $stdout.puts sentence
         
     | 
| 
       110 
     | 
    
         
            -
                    end
         
     | 
| 
       111 
     | 
    
         
            -
                  end
         
     | 
| 
       112 
     | 
    
         
            -
             
     | 
| 
       113 
     | 
    
         
            -
                  # Prints a long string, word-wrapping the text to the current width of the
         
     | 
| 
       114 
     | 
    
         
            -
                  # terminal display. Ideal for printing heredocs.
         
     | 
| 
       115 
     | 
    
         
            -
                  #
         
     | 
| 
       116 
     | 
    
         
            -
                  # ==== Parameters
         
     | 
| 
       117 
     | 
    
         
            -
                  # String
         
     | 
| 
       118 
     | 
    
         
            -
                  #
         
     | 
| 
       119 
     | 
    
         
            -
                  # ==== Options
         
     | 
| 
       120 
     | 
    
         
            -
                  # ident<Integer>:: Indent each line of the printed paragraph by ident value.
         
     | 
| 
       121 
     | 
    
         
            -
                  #
         
     | 
| 
       122 
     | 
    
         
            -
                  def print_wrapped(message, options={})
         
     | 
| 
       123 
     | 
    
         
            -
                    ident = options[:ident] || 0
         
     | 
| 
       124 
     | 
    
         
            -
                    width = terminal_width - ident
         
     | 
| 
       125 
     | 
    
         
            -
                    paras = message.split("\n\n")
         
     | 
| 
       126 
     | 
    
         
            -
             
     | 
| 
       127 
     | 
    
         
            -
                    paras.map! do |unwrapped|
         
     | 
| 
       128 
     | 
    
         
            -
                      unwrapped.strip.gsub(/\n/, " ").squeeze(" ").
         
     | 
| 
       129 
     | 
    
         
            -
                      gsub(/.{1,#{width}}(?:\s|\Z)/){($& + 5.chr).
         
     | 
| 
       130 
     | 
    
         
            -
                      gsub(/\n\005/,"\n").gsub(/\005/,"\n")}
         
     | 
| 
       131 
     | 
    
         
            -
                    end
         
     | 
| 
       132 
     | 
    
         
            -
             
     | 
| 
       133 
     | 
    
         
            -
                    paras.each do |para|
         
     | 
| 
       134 
     | 
    
         
            -
                      para.split("\n").each do |line|
         
     | 
| 
       135 
     | 
    
         
            -
                        $stdout.puts line.insert(0, " " * ident)
         
     | 
| 
       136 
     | 
    
         
            -
                      end
         
     | 
| 
       137 
     | 
    
         
            -
                      $stdout.puts unless para == paras.last
         
     | 
| 
       138 
     | 
    
         
            -
                    end
         
     | 
| 
       139 
     | 
    
         
            -
                  end
         
     | 
| 
       140 
     | 
    
         
            -
             
     | 
| 
       141 
     | 
    
         
            -
                  # Deals with file collision and returns true if the file should be
         
     | 
| 
       142 
     | 
    
         
            -
                  # overwriten and false otherwise. If a block is given, it uses the block
         
     | 
| 
       143 
     | 
    
         
            -
                  # response as the content for the diff.
         
     | 
| 
       144 
     | 
    
         
            -
                  #
         
     | 
| 
       145 
     | 
    
         
            -
                  # ==== Parameters
         
     | 
| 
       146 
     | 
    
         
            -
                  # destination<String>:: the destination file to solve conflicts
         
     | 
| 
       147 
     | 
    
         
            -
                  # block<Proc>:: an optional block that returns the value to be used in diff
         
     | 
| 
       148 
     | 
    
         
            -
                  #
         
     | 
| 
       149 
     | 
    
         
            -
                  def file_collision(destination)
         
     | 
| 
       150 
     | 
    
         
            -
                    return true if @always_force
         
     | 
| 
       151 
     | 
    
         
            -
                    options = block_given? ? "[Ynaqdh]" : "[Ynaqh]"
         
     | 
| 
       152 
     | 
    
         
            -
             
     | 
| 
       153 
     | 
    
         
            -
                    while true
         
     | 
| 
       154 
     | 
    
         
            -
                      answer = ask %[Overwrite #{destination}? (enter "h" for help) #{options}]
         
     | 
| 
       155 
     | 
    
         
            -
             
     | 
| 
       156 
     | 
    
         
            -
                      case answer
         
     | 
| 
       157 
     | 
    
         
            -
                        when is?(:yes), is?(:force), ""
         
     | 
| 
       158 
     | 
    
         
            -
                          return true
         
     | 
| 
       159 
     | 
    
         
            -
                        when is?(:no), is?(:skip)
         
     | 
| 
       160 
     | 
    
         
            -
                          return false
         
     | 
| 
       161 
     | 
    
         
            -
                        when is?(:always)
         
     | 
| 
       162 
     | 
    
         
            -
                          return @always_force = true
         
     | 
| 
       163 
     | 
    
         
            -
                        when is?(:quit)
         
     | 
| 
       164 
     | 
    
         
            -
                          say 'Aborting...'
         
     | 
| 
       165 
     | 
    
         
            -
                          raise SystemExit
         
     | 
| 
       166 
     | 
    
         
            -
                        when is?(:diff)
         
     | 
| 
       167 
     | 
    
         
            -
                          show_diff(destination, yield) if block_given?
         
     | 
| 
       168 
     | 
    
         
            -
                          say 'Retrying...'
         
     | 
| 
       169 
     | 
    
         
            -
                        else
         
     | 
| 
       170 
     | 
    
         
            -
                          say file_collision_help
         
     | 
| 
       171 
     | 
    
         
            -
                      end
         
     | 
| 
       172 
     | 
    
         
            -
                    end
         
     | 
| 
       173 
     | 
    
         
            -
                  end
         
     | 
| 
       174 
     | 
    
         
            -
             
     | 
| 
       175 
     | 
    
         
            -
                  # Called if something goes wrong during the execution. This is used by Thor
         
     | 
| 
       176 
     | 
    
         
            -
                  # internally and should not be used inside your scripts. If someone went
         
     | 
| 
       177 
     | 
    
         
            -
                  # wrong, you can always raise an exception. If you raise a Thor::Error, it
         
     | 
| 
       178 
     | 
    
         
            -
                  # will be rescued and wrapped in the method below.
         
     | 
| 
       179 
     | 
    
         
            -
                  #
         
     | 
| 
       180 
     | 
    
         
            -
                  def error(statement)
         
     | 
| 
       181 
     | 
    
         
            -
                    $stderr.puts statement
         
     | 
| 
       182 
     | 
    
         
            -
                  end
         
     | 
| 
       183 
     | 
    
         
            -
             
     | 
| 
       184 
     | 
    
         
            -
                  # Apply color to the given string with optional bold. Disabled in the
         
     | 
| 
       185 
     | 
    
         
            -
                  # Thor::Shell::Basic class.
         
     | 
| 
       186 
     | 
    
         
            -
                  #
         
     | 
| 
       187 
     | 
    
         
            -
                  def set_color(string, color, bold=false) #:nodoc:
         
     | 
| 
       188 
     | 
    
         
            -
                    string
         
     | 
| 
       189 
     | 
    
         
            -
                  end
         
     | 
| 
       190 
     | 
    
         
            -
             
     | 
| 
       191 
     | 
    
         
            -
                  protected
         
     | 
| 
       192 
     | 
    
         
            -
             
     | 
| 
       193 
     | 
    
         
            -
                    def is?(value) #:nodoc:
         
     | 
| 
       194 
     | 
    
         
            -
                      value = value.to_s
         
     | 
| 
       195 
     | 
    
         
            -
             
     | 
| 
       196 
     | 
    
         
            -
                      if value.size == 1
         
     | 
| 
       197 
     | 
    
         
            -
                        /\A#{value}\z/i
         
     | 
| 
       198 
     | 
    
         
            -
                      else
         
     | 
| 
       199 
     | 
    
         
            -
                        /\A(#{value}|#{value[0,1]})\z/i
         
     | 
| 
       200 
     | 
    
         
            -
                      end
         
     | 
| 
       201 
     | 
    
         
            -
                    end
         
     | 
| 
       202 
     | 
    
         
            -
             
     | 
| 
       203 
     | 
    
         
            -
                    def file_collision_help #:nodoc:
         
     | 
| 
       204 
     | 
    
         
            -
            <<HELP
         
     | 
| 
       205 
     | 
    
         
            -
            Y - yes, overwrite
         
     | 
| 
       206 
     | 
    
         
            -
            n - no, do not overwrite
         
     | 
| 
       207 
     | 
    
         
            -
            a - all, overwrite this and all others
         
     | 
| 
       208 
     | 
    
         
            -
            q - quit, abort
         
     | 
| 
       209 
     | 
    
         
            -
            d - diff, show the differences between the old and the new
         
     | 
| 
       210 
     | 
    
         
            -
            h - help, show this help
         
     | 
| 
       211 
     | 
    
         
            -
            HELP
         
     | 
| 
       212 
     | 
    
         
            -
                    end
         
     | 
| 
       213 
     | 
    
         
            -
             
     | 
| 
       214 
     | 
    
         
            -
                    def show_diff(destination, content) #:nodoc:
         
     | 
| 
       215 
     | 
    
         
            -
                      diff_cmd = ENV['THOR_DIFF'] || ENV['RAILS_DIFF'] || 'diff -u'
         
     | 
| 
       216 
     | 
    
         
            -
             
     | 
| 
       217 
     | 
    
         
            -
                      Tempfile.open(File.basename(destination), File.dirname(destination)) do |temp|
         
     | 
| 
       218 
     | 
    
         
            -
                        temp.write content
         
     | 
| 
       219 
     | 
    
         
            -
                        temp.rewind
         
     | 
| 
       220 
     | 
    
         
            -
                        system %(#{diff_cmd} "#{destination}" "#{temp.path}")
         
     | 
| 
       221 
     | 
    
         
            -
                      end
         
     | 
| 
       222 
     | 
    
         
            -
                    end
         
     | 
| 
       223 
     | 
    
         
            -
             
     | 
| 
       224 
     | 
    
         
            -
                    def quiet? #:nodoc:
         
     | 
| 
       225 
     | 
    
         
            -
                      base && base.options[:quiet]
         
     | 
| 
       226 
     | 
    
         
            -
                    end
         
     | 
| 
       227 
     | 
    
         
            -
             
     | 
| 
       228 
     | 
    
         
            -
                    # This code was copied from Rake, available under MIT-LICENSE
         
     | 
| 
       229 
     | 
    
         
            -
                    # Copyright (c) 2003, 2004 Jim Weirich
         
     | 
| 
       230 
     | 
    
         
            -
                    def terminal_width
         
     | 
| 
       231 
     | 
    
         
            -
                      if ENV['THOR_COLUMNS']
         
     | 
| 
       232 
     | 
    
         
            -
                        result = ENV['THOR_COLUMNS'].to_i
         
     | 
| 
       233 
     | 
    
         
            -
                      else
         
     | 
| 
       234 
     | 
    
         
            -
                        result = unix? ? dynamic_width : 80
         
     | 
| 
       235 
     | 
    
         
            -
                      end
         
     | 
| 
       236 
     | 
    
         
            -
                      (result < 10) ? 80 : result
         
     | 
| 
       237 
     | 
    
         
            -
                    rescue
         
     | 
| 
       238 
     | 
    
         
            -
                      80
         
     | 
| 
       239 
     | 
    
         
            -
                    end
         
     | 
| 
       240 
     | 
    
         
            -
             
     | 
| 
       241 
     | 
    
         
            -
                    # Calculate the dynamic width of the terminal
         
     | 
| 
       242 
     | 
    
         
            -
                    def dynamic_width
         
     | 
| 
       243 
     | 
    
         
            -
                      @dynamic_width ||= (dynamic_width_stty.nonzero? || dynamic_width_tput)
         
     | 
| 
       244 
     | 
    
         
            -
                    end
         
     | 
| 
       245 
     | 
    
         
            -
             
     | 
| 
       246 
     | 
    
         
            -
                    def dynamic_width_stty
         
     | 
| 
       247 
     | 
    
         
            -
                      %x{stty size 2>/dev/null}.split[1].to_i
         
     | 
| 
       248 
     | 
    
         
            -
                    end
         
     | 
| 
       249 
     | 
    
         
            -
             
     | 
| 
       250 
     | 
    
         
            -
                    def dynamic_width_tput
         
     | 
| 
       251 
     | 
    
         
            -
                      %x{tput cols 2>/dev/null}.to_i
         
     | 
| 
       252 
     | 
    
         
            -
                    end
         
     | 
| 
       253 
     | 
    
         
            -
             
     | 
| 
       254 
     | 
    
         
            -
                    def unix?
         
     | 
| 
       255 
     | 
    
         
            -
                      RUBY_PLATFORM =~ /(aix|darwin|linux|(net|free|open)bsd|cygwin|solaris|irix|hpux)/i
         
     | 
| 
       256 
     | 
    
         
            -
                    end
         
     | 
| 
       257 
     | 
    
         
            -
             
     | 
| 
       258 
     | 
    
         
            -
                    def truncate(string, width)
         
     | 
| 
       259 
     | 
    
         
            -
                      if string.length <= width
         
     | 
| 
       260 
     | 
    
         
            -
                        string
         
     | 
| 
       261 
     | 
    
         
            -
                      else
         
     | 
| 
       262 
     | 
    
         
            -
                        ( string[0, width-3] || "" ) + "..."
         
     | 
| 
       263 
     | 
    
         
            -
                      end
         
     | 
| 
       264 
     | 
    
         
            -
                    end
         
     | 
| 
       265 
     | 
    
         
            -
             
     | 
| 
       266 
     | 
    
         
            -
                end
         
     | 
| 
       267 
     | 
    
         
            -
              end
         
     | 
| 
       268 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,108 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            require 'thor/shell/basic'
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            class Thor
         
     | 
| 
       4 
     | 
    
         
            -
              module Shell
         
     | 
| 
       5 
     | 
    
         
            -
                # Inherit from Thor::Shell::Basic and add set_color behavior. Check
         
     | 
| 
       6 
     | 
    
         
            -
                # Thor::Shell::Basic to see all available methods.
         
     | 
| 
       7 
     | 
    
         
            -
                #
         
     | 
| 
       8 
     | 
    
         
            -
                class Color < Basic
         
     | 
| 
       9 
     | 
    
         
            -
                  # Embed in a String to clear all previous ANSI sequences.
         
     | 
| 
       10 
     | 
    
         
            -
                  CLEAR      = "\e[0m"
         
     | 
| 
       11 
     | 
    
         
            -
                  # The start of an ANSI bold sequence.
         
     | 
| 
       12 
     | 
    
         
            -
                  BOLD       = "\e[1m"
         
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
                  # Set the terminal's foreground ANSI color to black.
         
     | 
| 
       15 
     | 
    
         
            -
                  BLACK      = "\e[30m"
         
     | 
| 
       16 
     | 
    
         
            -
                  # Set the terminal's foreground ANSI color to red.
         
     | 
| 
       17 
     | 
    
         
            -
                  RED        = "\e[31m"
         
     | 
| 
       18 
     | 
    
         
            -
                  # Set the terminal's foreground ANSI color to green.
         
     | 
| 
       19 
     | 
    
         
            -
                  GREEN      = "\e[32m"
         
     | 
| 
       20 
     | 
    
         
            -
                  # Set the terminal's foreground ANSI color to yellow.
         
     | 
| 
       21 
     | 
    
         
            -
                  YELLOW     = "\e[33m"
         
     | 
| 
       22 
     | 
    
         
            -
                  # Set the terminal's foreground ANSI color to blue.
         
     | 
| 
       23 
     | 
    
         
            -
                  BLUE       = "\e[34m"
         
     | 
| 
       24 
     | 
    
         
            -
                  # Set the terminal's foreground ANSI color to magenta.
         
     | 
| 
       25 
     | 
    
         
            -
                  MAGENTA    = "\e[35m"
         
     | 
| 
       26 
     | 
    
         
            -
                  # Set the terminal's foreground ANSI color to cyan.
         
     | 
| 
       27 
     | 
    
         
            -
                  CYAN       = "\e[36m"
         
     | 
| 
       28 
     | 
    
         
            -
                  # Set the terminal's foreground ANSI color to white.
         
     | 
| 
       29 
     | 
    
         
            -
                  WHITE      = "\e[37m"
         
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
       31 
     | 
    
         
            -
                  # Set the terminal's background ANSI color to black.
         
     | 
| 
       32 
     | 
    
         
            -
                  ON_BLACK   = "\e[40m"
         
     | 
| 
       33 
     | 
    
         
            -
                  # Set the terminal's background ANSI color to red.
         
     | 
| 
       34 
     | 
    
         
            -
                  ON_RED     = "\e[41m"
         
     | 
| 
       35 
     | 
    
         
            -
                  # Set the terminal's background ANSI color to green.
         
     | 
| 
       36 
     | 
    
         
            -
                  ON_GREEN   = "\e[42m"
         
     | 
| 
       37 
     | 
    
         
            -
                  # Set the terminal's background ANSI color to yellow.
         
     | 
| 
       38 
     | 
    
         
            -
                  ON_YELLOW  = "\e[43m"
         
     | 
| 
       39 
     | 
    
         
            -
                  # Set the terminal's background ANSI color to blue.
         
     | 
| 
       40 
     | 
    
         
            -
                  ON_BLUE    = "\e[44m"
         
     | 
| 
       41 
     | 
    
         
            -
                  # Set the terminal's background ANSI color to magenta.
         
     | 
| 
       42 
     | 
    
         
            -
                  ON_MAGENTA = "\e[45m"
         
     | 
| 
       43 
     | 
    
         
            -
                  # Set the terminal's background ANSI color to cyan.
         
     | 
| 
       44 
     | 
    
         
            -
                  ON_CYAN    = "\e[46m"
         
     | 
| 
       45 
     | 
    
         
            -
                  # Set the terminal's background ANSI color to white.
         
     | 
| 
       46 
     | 
    
         
            -
                  ON_WHITE   = "\e[47m"
         
     | 
| 
       47 
     | 
    
         
            -
             
     | 
| 
       48 
     | 
    
         
            -
                  # Set color by using a string or one of the defined constants. If a third
         
     | 
| 
       49 
     | 
    
         
            -
                  # option is set to true, it also adds bold to the string. This is based
         
     | 
| 
       50 
     | 
    
         
            -
                  # on Highline implementation and it automatically appends CLEAR to the end
         
     | 
| 
       51 
     | 
    
         
            -
                  # of the returned String.
         
     | 
| 
       52 
     | 
    
         
            -
                  #
         
     | 
| 
       53 
     | 
    
         
            -
                  def set_color(string, color, bold=false)
         
     | 
| 
       54 
     | 
    
         
            -
                    color = self.class.const_get(color.to_s.upcase) if color.is_a?(Symbol)
         
     | 
| 
       55 
     | 
    
         
            -
                    bold  = bold ? BOLD : ""
         
     | 
| 
       56 
     | 
    
         
            -
                    "#{bold}#{color}#{string}#{CLEAR}"
         
     | 
| 
       57 
     | 
    
         
            -
                  end
         
     | 
| 
       58 
     | 
    
         
            -
             
     | 
| 
       59 
     | 
    
         
            -
                  protected
         
     | 
| 
       60 
     | 
    
         
            -
             
     | 
| 
       61 
     | 
    
         
            -
                    # Overwrite show_diff to show diff with colors if Diff::LCS is
         
     | 
| 
       62 
     | 
    
         
            -
                    # available.
         
     | 
| 
       63 
     | 
    
         
            -
                    #
         
     | 
| 
       64 
     | 
    
         
            -
                    def show_diff(destination, content) #:nodoc:
         
     | 
| 
       65 
     | 
    
         
            -
                      if diff_lcs_loaded? && ENV['THOR_DIFF'].nil? && ENV['RAILS_DIFF'].nil?
         
     | 
| 
       66 
     | 
    
         
            -
                        actual  = File.binread(destination).to_s.split("\n")
         
     | 
| 
       67 
     | 
    
         
            -
                        content = content.to_s.split("\n")
         
     | 
| 
       68 
     | 
    
         
            -
             
     | 
| 
       69 
     | 
    
         
            -
                        Diff::LCS.sdiff(actual, content).each do |diff|
         
     | 
| 
       70 
     | 
    
         
            -
                          output_diff_line(diff)
         
     | 
| 
       71 
     | 
    
         
            -
                        end
         
     | 
| 
       72 
     | 
    
         
            -
                      else
         
     | 
| 
       73 
     | 
    
         
            -
                        super
         
     | 
| 
       74 
     | 
    
         
            -
                      end
         
     | 
| 
       75 
     | 
    
         
            -
                    end
         
     | 
| 
       76 
     | 
    
         
            -
             
     | 
| 
       77 
     | 
    
         
            -
                    def output_diff_line(diff) #:nodoc:
         
     | 
| 
       78 
     | 
    
         
            -
                      case diff.action
         
     | 
| 
       79 
     | 
    
         
            -
                        when '-'
         
     | 
| 
       80 
     | 
    
         
            -
                          say "- #{diff.old_element.chomp}", :red, true
         
     | 
| 
       81 
     | 
    
         
            -
                        when '+'
         
     | 
| 
       82 
     | 
    
         
            -
                          say "+ #{diff.new_element.chomp}", :green, true
         
     | 
| 
       83 
     | 
    
         
            -
                        when '!'
         
     | 
| 
       84 
     | 
    
         
            -
                          say "- #{diff.old_element.chomp}", :red, true
         
     | 
| 
       85 
     | 
    
         
            -
                          say "+ #{diff.new_element.chomp}", :green, true
         
     | 
| 
       86 
     | 
    
         
            -
                        else
         
     | 
| 
       87 
     | 
    
         
            -
                          say "  #{diff.old_element.chomp}", nil, true
         
     | 
| 
       88 
     | 
    
         
            -
                      end
         
     | 
| 
       89 
     | 
    
         
            -
                    end
         
     | 
| 
       90 
     | 
    
         
            -
             
     | 
| 
       91 
     | 
    
         
            -
                    # Check if Diff::LCS is loaded. If it is, use it to create pretty output
         
     | 
| 
       92 
     | 
    
         
            -
                    # for diff.
         
     | 
| 
       93 
     | 
    
         
            -
                    #
         
     | 
| 
       94 
     | 
    
         
            -
                    def diff_lcs_loaded? #:nodoc:
         
     | 
| 
       95 
     | 
    
         
            -
                      return true  if defined?(Diff::LCS)
         
     | 
| 
       96 
     | 
    
         
            -
                      return @diff_lcs_loaded unless @diff_lcs_loaded.nil?
         
     | 
| 
       97 
     | 
    
         
            -
             
     | 
| 
       98 
     | 
    
         
            -
                      @diff_lcs_loaded = begin
         
     | 
| 
       99 
     | 
    
         
            -
                        require 'diff/lcs'
         
     | 
| 
       100 
     | 
    
         
            -
                        true
         
     | 
| 
       101 
     | 
    
         
            -
                      rescue LoadError
         
     | 
| 
       102 
     | 
    
         
            -
                        false
         
     | 
| 
       103 
     | 
    
         
            -
                      end
         
     | 
| 
       104 
     | 
    
         
            -
                    end
         
     | 
| 
       105 
     | 
    
         
            -
             
     | 
| 
       106 
     | 
    
         
            -
                end
         
     | 
| 
       107 
     | 
    
         
            -
              end
         
     | 
| 
       108 
     | 
    
         
            -
            end
         
     |