thor 0.15.4 → 0.16.0
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.
Potentially problematic release.
This version of thor might be problematic. Click here for more details.
- data/CHANGELOG.rdoc +3 -0
- data/lib/thor.rb +2 -2
- data/lib/thor/base.rb +1 -0
- data/lib/thor/parser/argument.rb +7 -2
- data/lib/thor/parser/arguments.rb +7 -1
- data/lib/thor/version.rb +1 -1
- data/spec/base_spec.rb +5 -0
- data/spec/fixtures/enum.thor +10 -0
- data/spec/parser/argument_spec.rb +6 -0
- data/spec/spec_helper.rb +1 -0
- data/thor.gemspec +1 -1
- metadata +55 -18
    
        data/CHANGELOG.rdoc
    CHANGED
    
    
    
        data/lib/thor.rb
    CHANGED
    
    | @@ -321,7 +321,7 @@ class Thor | |
| 321 321 |  | 
| 322 322 | 
             
                  # receives a (possibly nil) task name and returns a name that is in
         | 
| 323 323 | 
             
                  # the tasks hash. In addition to normalizing aliases, this logic
         | 
| 324 | 
            -
                  # will determine if a shortened command is an unambiguous  | 
| 324 | 
            +
                  # will determine if a shortened command is an unambiguous substring of
         | 
| 325 325 | 
             
                  # a task or alias.
         | 
| 326 326 | 
             
                  #
         | 
| 327 327 | 
             
                  # +normalize_task_name+ also converts names like +animal-prison+
         | 
| @@ -344,7 +344,7 @@ class Thor | |
| 344 344 | 
             
                  end
         | 
| 345 345 |  | 
| 346 346 | 
             
                  # this is the logic that takes the task name passed in by the user
         | 
| 347 | 
            -
                  # and determines whether it is an unambiguous  | 
| 347 | 
            +
                  # and determines whether it is an unambiguous substrings of a task or
         | 
| 348 348 | 
             
                  # alias name.
         | 
| 349 349 | 
             
                  def find_task_possibilities(meth)
         | 
| 350 350 | 
             
                    len = meth.to_s.length
         | 
    
        data/lib/thor/base.rb
    CHANGED
    
    
    
        data/lib/thor/parser/argument.rb
    CHANGED
    
    | @@ -2,7 +2,7 @@ class Thor | |
| 2 2 | 
             
              class Argument #:nodoc:
         | 
| 3 3 | 
             
                VALID_TYPES = [ :numeric, :hash, :array, :string ]
         | 
| 4 4 |  | 
| 5 | 
            -
                attr_reader :name, :description, :required, :type, :default, :banner
         | 
| 5 | 
            +
                attr_reader :name, :description, :enum, :required, :type, :default, :banner
         | 
| 6 6 | 
             
                alias :human_name :name
         | 
| 7 7 |  | 
| 8 8 | 
             
                def initialize(name, options={})
         | 
| @@ -19,6 +19,7 @@ class Thor | |
| 19 19 | 
             
                  @type        = (type || :string).to_sym
         | 
| 20 20 | 
             
                  @default     = options[:default]
         | 
| 21 21 | 
             
                  @banner      = options[:banner] || default_banner
         | 
| 22 | 
            +
                  @enum        = options[:enum]
         | 
| 22 23 |  | 
| 23 24 | 
             
                  validate! # Trigger specific validations
         | 
| 24 25 | 
             
                end
         | 
| @@ -43,7 +44,11 @@ class Thor | |
| 43 44 | 
             
                protected
         | 
| 44 45 |  | 
| 45 46 | 
             
                  def validate!
         | 
| 46 | 
            -
                     | 
| 47 | 
            +
                    if required? && !default.nil?
         | 
| 48 | 
            +
                      raise ArgumentError, "An argument cannot be required and have default value."
         | 
| 49 | 
            +
                    elsif @enum && !@enum.is_a?(Array)
         | 
| 50 | 
            +
                      raise ArgumentError, "An argument cannot have an enum other than an array."
         | 
| 51 | 
            +
                    end
         | 
| 47 52 | 
             
                  end
         | 
| 48 53 |  | 
| 49 54 | 
             
                  def valid_type?(type)
         | 
| @@ -144,7 +144,13 @@ class Thor | |
| 144 144 | 
             
                    if no_or_skip?(name)
         | 
| 145 145 | 
             
                      nil
         | 
| 146 146 | 
             
                    else
         | 
| 147 | 
            -
                      shift
         | 
| 147 | 
            +
                      value = shift
         | 
| 148 | 
            +
                      if @switches.is_a?(Hash) && switch = @switches[name]
         | 
| 149 | 
            +
                        if switch.enum && !switch.enum.include?(value)
         | 
| 150 | 
            +
                          raise MalformattedArgumentError, "Expected '#{name}' to be one of #{switch.enum.join(', ')}; got #{value}"
         | 
| 151 | 
            +
                        end
         | 
| 152 | 
            +
                      end
         | 
| 153 | 
            +
                      value
         | 
| 148 154 | 
             
                    end
         | 
| 149 155 | 
             
                  end
         | 
| 150 156 |  | 
    
        data/lib/thor/version.rb
    CHANGED
    
    
    
        data/spec/base_spec.rb
    CHANGED
    
    | @@ -138,6 +138,11 @@ describe Thor::Base do | |
| 138 138 | 
             
                  content.should =~ /Foo options\:/
         | 
| 139 139 | 
             
                  content.should =~ /--last-name=LAST_NAME/
         | 
| 140 140 | 
             
                end
         | 
| 141 | 
            +
             | 
| 142 | 
            +
                it "displays choices for enums" do
         | 
| 143 | 
            +
                  content = capture(:stdout) { Enum.help(Thor::Base.shell.new) }
         | 
| 144 | 
            +
                  content.should =~ /Possible values\: apple, banana/
         | 
| 145 | 
            +
                end
         | 
| 141 146 | 
             
              end
         | 
| 142 147 |  | 
| 143 148 | 
             
              describe "#namespace" do
         | 
| @@ -25,6 +25,12 @@ describe Thor::Argument do | |
| 25 25 | 
             
                    argument(:task, :type => :string, :default => "bar", :required => true)
         | 
| 26 26 | 
             
                  }.should raise_error(ArgumentError, "An argument cannot be required and have default value.")
         | 
| 27 27 | 
             
                end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                it "raises an error if enum isn't an array" do
         | 
| 30 | 
            +
                  lambda {
         | 
| 31 | 
            +
                    argument(:task, :type => :string, :enum => "bar")
         | 
| 32 | 
            +
                  }.should raise_error(ArgumentError, "An argument cannot have an enum other than an array.")
         | 
| 33 | 
            +
                end
         | 
| 28 34 | 
             
              end
         | 
| 29 35 |  | 
| 30 36 | 
             
              describe "#usage" do
         | 
    
        data/spec/spec_helper.rb
    CHANGED
    
    | @@ -27,6 +27,7 @@ load File.join(File.dirname(__FILE__), "fixtures", "task.thor") | |
| 27 27 | 
             
            load File.join(File.dirname(__FILE__), "fixtures", "group.thor")
         | 
| 28 28 | 
             
            load File.join(File.dirname(__FILE__), "fixtures", "script.thor")
         | 
| 29 29 | 
             
            load File.join(File.dirname(__FILE__), "fixtures", "invoke.thor")
         | 
| 30 | 
            +
            load File.join(File.dirname(__FILE__), "fixtures", "enum.thor")
         | 
| 30 31 |  | 
| 31 32 | 
             
            RSpec.configure do |config|
         | 
| 32 33 | 
             
              config.before do
         | 
    
        data/thor.gemspec
    CHANGED
    
    | @@ -15,7 +15,7 @@ Gem::Specification.new do |s| | |
| 15 15 | 
             
              s.executables = `git ls-files -- bin/*`.split("\n").map{|f| File.basename(f)}
         | 
| 16 16 | 
             
              s.extra_rdoc_files = ['CHANGELOG.rdoc', 'LICENSE.md', 'README.md', 'Thorfile']
         | 
| 17 17 | 
             
              s.files = `git ls-files`.split("\n")
         | 
| 18 | 
            -
              s.homepage = 'http:// | 
| 18 | 
            +
              s.homepage = 'http://whatisthor.com/'
         | 
| 19 19 | 
             
              s.name = 'thor'
         | 
| 20 20 | 
             
              s.rdoc_options = ['--charset=UTF-8']
         | 
| 21 21 | 
             
              s.require_paths = ['lib']
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: thor
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.16.0
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| @@ -10,11 +10,11 @@ authors: | |
| 10 10 | 
             
            autorequire: 
         | 
| 11 11 | 
             
            bindir: bin
         | 
| 12 12 | 
             
            cert_chain: []
         | 
| 13 | 
            -
            date: 2012- | 
| 13 | 
            +
            date: 2012-08-14 00:00:00.000000000 Z
         | 
| 14 14 | 
             
            dependencies:
         | 
| 15 15 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 16 16 | 
             
              name: bundler
         | 
| 17 | 
            -
              requirement:  | 
| 17 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 18 18 | 
             
                none: false
         | 
| 19 19 | 
             
                requirements:
         | 
| 20 20 | 
             
                - - ~>
         | 
| @@ -22,10 +22,15 @@ dependencies: | |
| 22 22 | 
             
                    version: '1.0'
         | 
| 23 23 | 
             
              type: :development
         | 
| 24 24 | 
             
              prerelease: false
         | 
| 25 | 
            -
              version_requirements:  | 
| 25 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 26 | 
            +
                none: false
         | 
| 27 | 
            +
                requirements:
         | 
| 28 | 
            +
                - - ~>
         | 
| 29 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 30 | 
            +
                    version: '1.0'
         | 
| 26 31 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 27 32 | 
             
              name: fakeweb
         | 
| 28 | 
            -
              requirement:  | 
| 33 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 29 34 | 
             
                none: false
         | 
| 30 35 | 
             
                requirements:
         | 
| 31 36 | 
             
                - - ~>
         | 
| @@ -33,10 +38,15 @@ dependencies: | |
| 33 38 | 
             
                    version: '1.3'
         | 
| 34 39 | 
             
              type: :development
         | 
| 35 40 | 
             
              prerelease: false
         | 
| 36 | 
            -
              version_requirements:  | 
| 41 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 42 | 
            +
                none: false
         | 
| 43 | 
            +
                requirements:
         | 
| 44 | 
            +
                - - ~>
         | 
| 45 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 46 | 
            +
                    version: '1.3'
         | 
| 37 47 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 38 48 | 
             
              name: rake
         | 
| 39 | 
            -
              requirement:  | 
| 49 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 40 50 | 
             
                none: false
         | 
| 41 51 | 
             
                requirements:
         | 
| 42 52 | 
             
                - - ~>
         | 
| @@ -44,10 +54,15 @@ dependencies: | |
| 44 54 | 
             
                    version: '0.9'
         | 
| 45 55 | 
             
              type: :development
         | 
| 46 56 | 
             
              prerelease: false
         | 
| 47 | 
            -
              version_requirements:  | 
| 57 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 58 | 
            +
                none: false
         | 
| 59 | 
            +
                requirements:
         | 
| 60 | 
            +
                - - ~>
         | 
| 61 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 62 | 
            +
                    version: '0.9'
         | 
| 48 63 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 49 64 | 
             
              name: rdoc
         | 
| 50 | 
            -
              requirement:  | 
| 65 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 51 66 | 
             
                none: false
         | 
| 52 67 | 
             
                requirements:
         | 
| 53 68 | 
             
                - - ~>
         | 
| @@ -55,10 +70,15 @@ dependencies: | |
| 55 70 | 
             
                    version: '3.9'
         | 
| 56 71 | 
             
              type: :development
         | 
| 57 72 | 
             
              prerelease: false
         | 
| 58 | 
            -
              version_requirements:  | 
| 73 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 74 | 
            +
                none: false
         | 
| 75 | 
            +
                requirements:
         | 
| 76 | 
            +
                - - ~>
         | 
| 77 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 78 | 
            +
                    version: '3.9'
         | 
| 59 79 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 60 80 | 
             
              name: rspec
         | 
| 61 | 
            -
              requirement:  | 
| 81 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 62 82 | 
             
                none: false
         | 
| 63 83 | 
             
                requirements:
         | 
| 64 84 | 
             
                - - ~>
         | 
| @@ -66,10 +86,15 @@ dependencies: | |
| 66 86 | 
             
                    version: '2.3'
         | 
| 67 87 | 
             
              type: :development
         | 
| 68 88 | 
             
              prerelease: false
         | 
| 69 | 
            -
              version_requirements:  | 
| 89 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 90 | 
            +
                none: false
         | 
| 91 | 
            +
                requirements:
         | 
| 92 | 
            +
                - - ~>
         | 
| 93 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 94 | 
            +
                    version: '2.3'
         | 
| 70 95 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 71 96 | 
             
              name: simplecov
         | 
| 72 | 
            -
              requirement:  | 
| 97 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 73 98 | 
             
                none: false
         | 
| 74 99 | 
             
                requirements:
         | 
| 75 100 | 
             
                - - ~>
         | 
| @@ -77,10 +102,15 @@ dependencies: | |
| 77 102 | 
             
                    version: '0.4'
         | 
| 78 103 | 
             
              type: :development
         | 
| 79 104 | 
             
              prerelease: false
         | 
| 80 | 
            -
              version_requirements:  | 
| 105 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 106 | 
            +
                none: false
         | 
| 107 | 
            +
                requirements:
         | 
| 108 | 
            +
                - - ~>
         | 
| 109 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 110 | 
            +
                    version: '0.4'
         | 
| 81 111 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 82 112 | 
             
              name: childlabor
         | 
| 83 | 
            -
              requirement:  | 
| 113 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 84 114 | 
             
                none: false
         | 
| 85 115 | 
             
                requirements:
         | 
| 86 116 | 
             
                - - ! '>='
         | 
| @@ -88,7 +118,12 @@ dependencies: | |
| 88 118 | 
             
                    version: '0'
         | 
| 89 119 | 
             
              type: :development
         | 
| 90 120 | 
             
              prerelease: false
         | 
| 91 | 
            -
              version_requirements:  | 
| 121 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 122 | 
            +
                none: false
         | 
| 123 | 
            +
                requirements:
         | 
| 124 | 
            +
                - - ! '>='
         | 
| 125 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 126 | 
            +
                    version: '0'
         | 
| 92 127 | 
             
            description: A scripting framework that replaces rake, sake and rubigen
         | 
| 93 128 | 
             
            email: ruby-thor@googlegroups.com
         | 
| 94 129 | 
             
            executables:
         | 
| @@ -164,6 +199,7 @@ files: | |
| 164 199 | 
             
            - spec/fixtures/doc/components/.empty_directory
         | 
| 165 200 | 
             
            - spec/fixtures/doc/config.rb
         | 
| 166 201 | 
             
            - spec/fixtures/doc/config.yaml.tt
         | 
| 202 | 
            +
            - spec/fixtures/enum.thor
         | 
| 167 203 | 
             
            - spec/fixtures/group.thor
         | 
| 168 204 | 
             
            - spec/fixtures/invoke.thor
         | 
| 169 205 | 
             
            - spec/fixtures/path with spaces
         | 
| @@ -187,7 +223,7 @@ files: | |
| 187 223 | 
             
            - spec/thor_spec.rb
         | 
| 188 224 | 
             
            - spec/util_spec.rb
         | 
| 189 225 | 
             
            - thor.gemspec
         | 
| 190 | 
            -
            homepage: http:// | 
| 226 | 
            +
            homepage: http://whatisthor.com/
         | 
| 191 227 | 
             
            licenses: []
         | 
| 192 228 | 
             
            post_install_message: 
         | 
| 193 229 | 
             
            rdoc_options:
         | 
| @@ -208,7 +244,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 208 244 | 
             
                  version: 1.3.6
         | 
| 209 245 | 
             
            requirements: []
         | 
| 210 246 | 
             
            rubyforge_project: 
         | 
| 211 | 
            -
            rubygems_version: 1.8. | 
| 247 | 
            +
            rubygems_version: 1.8.23
         | 
| 212 248 | 
             
            signing_key: 
         | 
| 213 249 | 
             
            specification_version: 3
         | 
| 214 250 | 
             
            summary: A scripting framework that replaces rake, sake and rubigen
         | 
| @@ -235,6 +271,7 @@ test_files: | |
| 235 271 | 
             
            - spec/fixtures/doc/components/.empty_directory
         | 
| 236 272 | 
             
            - spec/fixtures/doc/config.rb
         | 
| 237 273 | 
             
            - spec/fixtures/doc/config.yaml.tt
         | 
| 274 | 
            +
            - spec/fixtures/enum.thor
         | 
| 238 275 | 
             
            - spec/fixtures/group.thor
         | 
| 239 276 | 
             
            - spec/fixtures/invoke.thor
         | 
| 240 277 | 
             
            - spec/fixtures/path with spaces
         |