shellopts 2.0.7 → 2.0.8
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.
- checksums.yaml +4 -4
- data/lib/shellopts/analyzer.rb +5 -2
- data/lib/shellopts/args.rb +10 -3
- data/lib/shellopts/grammar.rb +8 -0
- data/lib/shellopts/interpreter.rb +1 -1
- data/lib/shellopts/lexer.rb +2 -2
- data/lib/shellopts/parser.rb +2 -1
- data/lib/shellopts/version.rb +1 -1
- data/shellopts.gemspec +7 -6
- metadata +6 -8
- data/.gitignore +0 -30
- data/.travis.yml +0 -5
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: e6c52f313fee54283e1d5e704dd8b75a96239db6cff70584eefe747cf56270c1
         | 
| 4 | 
            +
              data.tar.gz: 67b50b7b3a993bf77533246c9634ce7850d765891381244fedf2b1ecf3f6bc76
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 3cf5cd91d92bce24b1d04a3a526d6f43f8fe761f760319bf60191e2e638c3301fdbf9c63aa9f465aa8755cd18aa56293f0ae68e01870d6a877928bc1c0eebf5c
         | 
| 7 | 
            +
              data.tar.gz: 0e1fa649cff6a072d676a33dab6a3cbb038cb6799b59088f7ebff1144e6983843fe16658c80fa75308f057caf24e5b232aea15c92f80290d0969d868e653159e
         | 
    
        data/lib/shellopts/analyzer.rb
    CHANGED
    
    | @@ -28,10 +28,13 @@ module ShellOpts | |
| 28 28 | 
             
                    @options = option_groups.map(&:options).flatten
         | 
| 29 29 | 
             
                  end
         | 
| 30 30 |  | 
| 31 | 
            -
                  # Move options before first command
         | 
| 31 | 
            +
                  # Move options before first command or before explicit COMMAND section
         | 
| 32 32 | 
             
                  def reorder_options
         | 
| 33 33 | 
             
                    if commands.any?
         | 
| 34 | 
            -
                       | 
| 34 | 
            +
                      i = children.find_index { |child| 
         | 
| 35 | 
            +
                        child.is_a?(Command) || child.is_a?(Section) && child.name == "COMMAND"
         | 
| 36 | 
            +
                      }
         | 
| 37 | 
            +
                      if i
         | 
| 35 38 | 
             
                        options, rest = children[i+1..-1].partition { |child| child.is_a?(OptionGroup) }
         | 
| 36 39 | 
             
                        @children = children[0, i] + options + children[i..i] + rest
         | 
| 37 40 | 
             
                      end
         | 
    
        data/lib/shellopts/args.rb
    CHANGED
    
    | @@ -5,6 +5,11 @@ module ShellOpts | |
| 5 5 | 
             
              # methods raise a ShellOpts::Error exception in case of errors
         | 
| 6 6 | 
             
              #
         | 
| 7 7 | 
             
              class Args < Array
         | 
| 8 | 
            +
                def initialize(*args, exception: false)
         | 
| 9 | 
            +
                  super(*args)
         | 
| 10 | 
            +
                  @exception = exception
         | 
| 11 | 
            +
                end
         | 
| 12 | 
            +
             | 
| 8 13 | 
             
                # :call-seq:
         | 
| 9 14 | 
             
                #   extract(count, message = nil)
         | 
| 10 15 | 
             
                #   extract(range, message = nil)
         | 
| @@ -21,7 +26,7 @@ module ShellOpts | |
| 21 26 | 
             
                # #extract raise a ShellOpts::Error exception if there's is not enough
         | 
| 22 27 | 
             
                # elements in the array to satisfy the request
         | 
| 23 28 | 
             
                #
         | 
| 24 | 
            -
                def extract(count_or_range, message = nil) | 
| 29 | 
            +
                def extract(count_or_range, message = nil)
         | 
| 25 30 | 
             
                  case count_or_range
         | 
| 26 31 | 
             
                    when Range
         | 
| 27 32 | 
             
                      range = count_or_range
         | 
| @@ -59,8 +64,10 @@ module ShellOpts | |
| 59 64 | 
             
                end
         | 
| 60 65 |  | 
| 61 66 | 
             
              private
         | 
| 62 | 
            -
                def inoa(message = nil) | 
| 63 | 
            -
                   | 
| 67 | 
            +
                def inoa(message = nil)
         | 
| 68 | 
            +
                  message ||= "Illegal number of arguments"
         | 
| 69 | 
            +
                  raise Error, message if @exception
         | 
| 70 | 
            +
                  ::ShellOpts.error(message)
         | 
| 64 71 | 
             
                end
         | 
| 65 72 | 
             
              end
         | 
| 66 73 | 
             
            end
         | 
    
        data/lib/shellopts/grammar.rb
    CHANGED
    
    | @@ -151,6 +151,10 @@ module ShellOpts | |
| 151 151 | 
             
                class OptionGroup < Node
         | 
| 152 152 | 
             
                  alias_method :command, :parent
         | 
| 153 153 |  | 
| 154 | 
            +
                  # Duck typing for compatibility with IdrNode (TODO: maybe just make
         | 
| 155 | 
            +
                  # OptionGroup an IdrNode and be over with it)
         | 
| 156 | 
            +
                  def name() options.first&.name end
         | 
| 157 | 
            +
             | 
| 154 158 | 
             
                  # Array of options in declaration order
         | 
| 155 159 | 
             
                  attr_reader :options
         | 
| 156 160 |  | 
| @@ -352,6 +356,10 @@ module ShellOpts | |
| 352 356 | 
             
                end
         | 
| 353 357 |  | 
| 354 358 | 
             
                class Section < Node
         | 
| 359 | 
            +
                  def initialize(parent, token)
         | 
| 360 | 
            +
                    constrain token.source, *%w(DESCRIPTION OPTION COMMAND)
         | 
| 361 | 
            +
                    super
         | 
| 362 | 
            +
                  end
         | 
| 355 363 | 
             
                  def name() token.source end
         | 
| 356 364 | 
             
                end
         | 
| 357 365 |  | 
    
        data/lib/shellopts/lexer.rb
    CHANGED
    
    | @@ -45,7 +45,7 @@ module ShellOpts | |
| 45 45 | 
             
                # Match ArgDescr words (should be at least two characters long)
         | 
| 46 46 | 
             
                DESCR_RE = /^[^a-z]{2,}$/
         | 
| 47 47 |  | 
| 48 | 
            -
                SECTIONS = %w(DESCRIPTION OPTIONS COMMANDS)
         | 
| 48 | 
            +
                SECTIONS = %w(DESCRIPTION OPTION OPTIONS COMMAND COMMANDS)
         | 
| 49 49 |  | 
| 50 50 | 
             
                using Ext::Array::ShiftWhile
         | 
| 51 51 |  | 
| @@ -109,7 +109,7 @@ module ShellOpts | |
| 109 109 |  | 
| 110 110 | 
             
                    # Sections
         | 
| 111 111 | 
             
                    elsif SECTIONS.include?(line.text)
         | 
| 112 | 
            -
                      @tokens << Token.new(:section, line.lineno, line.charno, line.text)
         | 
| 112 | 
            +
                      @tokens << Token.new(:section, line.lineno, line.charno, line.text.sub(/S$/, ""))
         | 
| 113 113 |  | 
| 114 114 | 
             
                    # Options, commands, usage, arguments, and briefs
         | 
| 115 115 | 
             
                    elsif line =~ DECL_RE
         | 
    
        data/lib/shellopts/parser.rb
    CHANGED
    
    | @@ -132,7 +132,8 @@ module ShellOpts | |
| 132 132 |  | 
| 133 133 | 
             
                    option_token = Token.new(:option, 1, 1, "-h,help")
         | 
| 134 134 | 
             
                    brief_token = Token.new(:brief, 1, 1, "Write help text and exit")
         | 
| 135 | 
            -
                    paragraph_token = Token.new(:text, 1, 1,  | 
| 135 | 
            +
                    paragraph_token = Token.new(:text, 1, 1, 
         | 
| 136 | 
            +
                        "-h prints a brief help text, --help prints a longer man-style description of the command")
         | 
| 136 137 | 
             
                    group = OptionGroup.new(self, option_token)
         | 
| 137 138 | 
             
                    option = Option.parse(group, option_token)
         | 
| 138 139 | 
             
                    brief = Brief.parse(group, brief_token)
         | 
    
        data/lib/shellopts/version.rb
    CHANGED
    
    
    
        data/shellopts.gemspec
    CHANGED
    
    | @@ -1,7 +1,5 @@ | |
| 1 1 |  | 
| 2 | 
            -
             | 
| 3 | 
            -
            $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
         | 
| 4 | 
            -
            require "shellopts/version"
         | 
| 2 | 
            +
            require_relative "lib/shellopts/version"
         | 
| 5 3 |  | 
| 6 4 | 
             
            Gem::Specification.new do |spec|
         | 
| 7 5 | 
             
              spec.name          = "shellopts"
         | 
| @@ -15,15 +13,18 @@ Gem::Specification.new do |spec| | |
| 15 13 | 
             
                                      and has built-in help and error messages}
         | 
| 16 14 | 
             
              spec.homepage      = "http://github.com/clrgit/shellopts"
         | 
| 17 15 |  | 
| 18 | 
            -
              spec.files | 
| 19 | 
            -
                 | 
| 16 | 
            +
              spec.files = Dir.chdir(File.expand_path(__dir__)) do
         | 
| 17 | 
            +
                `git ls-files -z`.split("\x0").reject do |f|
         | 
| 18 | 
            +
                  (f == __FILE__) || f.match(%r{\A(?:(?:test|spec|features)/|\.(?:git|travis|circleci)|appveyor)})
         | 
| 19 | 
            +
                end
         | 
| 20 20 | 
             
              end
         | 
| 21 | 
            +
             | 
| 21 22 | 
             
              spec.bindir        = "exe"
         | 
| 22 23 | 
             
              spec.executables   = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
         | 
| 23 24 | 
             
              spec.require_paths = ["lib"]
         | 
| 24 25 |  | 
| 25 26 | 
             
              spec.add_dependency "forward_to"
         | 
| 26 | 
            -
              spec.add_dependency "constrain"
         | 
| 27 | 
            +
              spec.add_dependency "constrain", "~> 0.5.1"
         | 
| 27 28 | 
             
              spec.add_dependency "ruby-terminfo"
         | 
| 28 29 | 
             
              spec.add_dependency "indented_io"
         | 
| 29 30 |  | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: shellopts
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 2.0. | 
| 4 | 
            +
              version: 2.0.8
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Claus Rasmussen
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2022-03- | 
| 11 | 
            +
            date: 2022-03-06 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: forward_to
         | 
| @@ -28,16 +28,16 @@ dependencies: | |
| 28 28 | 
             
              name: constrain
         | 
| 29 29 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 30 30 | 
             
                requirements:
         | 
| 31 | 
            -
                - - " | 
| 31 | 
            +
                - - "~>"
         | 
| 32 32 | 
             
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            -
                    version:  | 
| 33 | 
            +
                    version: 0.5.1
         | 
| 34 34 | 
             
              type: :runtime
         | 
| 35 35 | 
             
              prerelease: false
         | 
| 36 36 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 37 37 | 
             
                requirements:
         | 
| 38 | 
            -
                - - " | 
| 38 | 
            +
                - - "~>"
         | 
| 39 39 | 
             
                  - !ruby/object:Gem::Version
         | 
| 40 | 
            -
                    version:  | 
| 40 | 
            +
                    version: 0.5.1
         | 
| 41 41 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 42 42 | 
             
              name: ruby-terminfo
         | 
| 43 43 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -132,10 +132,8 @@ executables: [] | |
| 132 132 | 
             
            extensions: []
         | 
| 133 133 | 
             
            extra_rdoc_files: []
         | 
| 134 134 | 
             
            files:
         | 
| 135 | 
            -
            - ".gitignore"
         | 
| 136 135 | 
             
            - ".rspec"
         | 
| 137 136 | 
             
            - ".ruby-version"
         | 
| 138 | 
            -
            - ".travis.yml"
         | 
| 139 137 | 
             
            - Gemfile
         | 
| 140 138 | 
             
            - README.md
         | 
| 141 139 | 
             
            - Rakefile
         | 
    
        data/.gitignore
    DELETED
    
    | @@ -1,30 +0,0 @@ | |
| 1 | 
            -
            /.bundle/
         | 
| 2 | 
            -
            /.yardoc
         | 
| 3 | 
            -
            /_yardoc/
         | 
| 4 | 
            -
            /rdoc/
         | 
| 5 | 
            -
            /pkg/
         | 
| 6 | 
            -
            /spec/reports/
         | 
| 7 | 
            -
            /tmp/
         | 
| 8 | 
            -
             | 
| 9 | 
            -
            # rspec failure tracking
         | 
| 10 | 
            -
            .rspec_status
         | 
| 11 | 
            -
             | 
| 12 | 
            -
            # simplecov
         | 
| 13 | 
            -
            /coverage/
         | 
| 14 | 
            -
             | 
| 15 | 
            -
            # Ignore Gemfile.lock. See https://stackoverflow.com/questions/4151495/should-gemfile-lock-be-included-in-gitignore
         | 
| 16 | 
            -
            /Gemfile.lock
         | 
| 17 | 
            -
             | 
| 18 | 
            -
            # Ignore vim files
         | 
| 19 | 
            -
            .*.swp
         | 
| 20 | 
            -
             | 
| 21 | 
            -
            # Ignore t.* files
         | 
| 22 | 
            -
            t
         | 
| 23 | 
            -
            t.*
         | 
| 24 | 
            -
            tt
         | 
| 25 | 
            -
            tt.*
         | 
| 26 | 
            -
            s
         | 
| 27 | 
            -
            s.*
         | 
| 28 | 
            -
             | 
| 29 | 
            -
            # Ignore temporary directory
         | 
| 30 | 
            -
            /spec/tmpdir/
         |