shellopts 2.0.12 → 2.0.15
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/TODO +20 -0
- data/lib/shellopts/program.rb +64 -20
- data/lib/shellopts/version.rb +1 -1
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 253954c7f2de836c89e511dffabf3217719e778d47f74740a51c3b1099dcd07f
         | 
| 4 | 
            +
              data.tar.gz: 4a5579e3c56674d09ba380d392e600028e6c353728994e8b2445629b772cb450
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: d0f0f0418361c69037a944c1e99021c32d578ed41dc239e7f9dc9f1ce94e578a137efdea3a9b96848fc0fb0b9aa1a8114153485b6ce21ceea7a3f34ceacdd197
         | 
| 7 | 
            +
              data.tar.gz: f70644b23103d244fe06164a337839c042d6e65e1aa3dba59fa6b028cf7b0032fd694121c582142f2f3cdfbdaa12cba17464b74114bc5caf5b2aa489cde94f9a
         | 
    
        data/TODO
    CHANGED
    
    | @@ -1,4 +1,24 @@ | |
| 1 | 
            +
            o --option can't be escaped if on the start of a block line?
         | 
| 2 | 
            +
            o Use require_relative
         | 
| 3 | 
            +
            o In the following list is a command with a mandatory sub-command
         | 
| 1 4 |  | 
| 5 | 
            +
              list.tables!
         | 
| 6 | 
            +
              list.uuids!
         | 
| 7 | 
            +
             | 
| 8 | 
            +
              It should be rendered as
         | 
| 9 | 
            +
                list tables|uuids
         | 
| 10 | 
            +
             | 
| 11 | 
            +
              and not as
         | 
| 12 | 
            +
                list tables
         | 
| 13 | 
            +
                list uuids
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              and not as 
         | 
| 16 | 
            +
                list [tables|uuids]
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            o Replace -h with -? when -h is specified by the user (eg. as a shorthand for --host)
         | 
| 19 | 
            +
            o Limit text width to -10 chars of what it is today (same as stackexchange width in characters)
         | 
| 20 | 
            +
            o Fix formatting error in long arguments (see ms2pg)
         | 
| 21 | 
            +
            o Macro that can be used in the SPEC for the program name (eg. <PROGRAM>)
         | 
| 2 22 | 
             
            o Ignore all text after ' # ' (doesn't conflict with option flag)
         | 
| 3 23 | 
             
            o Command aliases
         | 
| 4 24 | 
             
            o Add user-defined setions
         | 
    
        data/lib/shellopts/program.rb
    CHANGED
    
    | @@ -45,12 +45,12 @@ module ShellOpts | |
| 45 45 |  | 
| 46 46 | 
             
                # These names can't be used as option or command names
         | 
| 47 47 | 
             
                RESERVED_OPTION_NAMES = %w(
         | 
| 48 | 
            -
                    is_a instance_eval instance_exec method_missing singleton_method_added
         | 
| 48 | 
            +
                    is_a to_h instance_eval instance_exec method_missing singleton_method_added
         | 
| 49 49 | 
             
                    singleton_method_removed singleton_method_undefined
         | 
| 50 50 | 
             
                )
         | 
| 51 51 |  | 
| 52 | 
            -
                # These methods can be overridden by an option or a command ( | 
| 53 | 
            -
                #  | 
| 52 | 
            +
                # These methods can be overridden by an option or a command (this constant
         | 
| 53 | 
            +
                # is not used - it is just for informational purposes)
         | 
| 54 54 | 
             
                OVERRIDEABLE_METHOD_NAMES = %w(
         | 
| 55 55 | 
             
                    subcommand subcommand! supercommand!
         | 
| 56 56 | 
             
                )
         | 
| @@ -96,6 +96,19 @@ module ShellOpts | |
| 96 96 | 
             
                  end
         | 
| 97 97 | 
             
                end
         | 
| 98 98 |  | 
| 99 | 
            +
                # Returns a hash of the given options if defined. Returns all options if no
         | 
| 100 | 
            +
                # options are given
         | 
| 101 | 
            +
                def to_h(*keys)
         | 
| 102 | 
            +
                  keys = ::Kernel::Array(keys).flatten
         | 
| 103 | 
            +
                  if keys.empty?
         | 
| 104 | 
            +
                    @__option_values__
         | 
| 105 | 
            +
                  else
         | 
| 106 | 
            +
                    keys.map { |key|
         | 
| 107 | 
            +
                      @__option_values__.key?(key) ? [key, @__option_values__[key]] : nil
         | 
| 108 | 
            +
                    }.compact.to_h
         | 
| 109 | 
            +
                  end
         | 
| 110 | 
            +
                end
         | 
| 111 | 
            +
             | 
| 99 112 | 
             
                # Subcommand identifier or nil if not present. #subcommand is often used in
         | 
| 100 113 | 
             
                # case statement to branch out to code that handles the given subcommand:
         | 
| 101 114 | 
             
                #
         | 
| @@ -140,10 +153,10 @@ module ShellOpts | |
| 140 153 | 
             
                # Grammar object
         | 
| 141 154 | 
             
                attr_reader :__grammar__
         | 
| 142 155 |  | 
| 143 | 
            -
                # Hash from identifier to value. Can be Integer, Float, or String
         | 
| 144 | 
            -
                #  | 
| 145 | 
            -
                #  | 
| 146 | 
            -
                # the  | 
| 156 | 
            +
                # Hash from identifier to value. Can be Integer, Float, or String depending
         | 
| 157 | 
            +
                # on the option's type. Repeated options options without arguments have the
         | 
| 158 | 
            +
                # number of occurences as value and with arguments the value is an array of
         | 
| 159 | 
            +
                # the given values
         | 
| 147 160 | 
             
                attr_reader :__option_values__
         | 
| 148 161 |  | 
| 149 162 | 
             
                # List of Option objects for the subcommand in the same order as
         | 
| @@ -181,10 +194,23 @@ module ShellOpts | |
| 181 194 |  | 
| 182 195 | 
             
                def __define_option_methods__
         | 
| 183 196 | 
             
                  @__grammar__.options.each { |opt|
         | 
| 184 | 
            -
                    if opt. | 
| 185 | 
            -
                       | 
| 197 | 
            +
                    if !opt.repeatable?
         | 
| 198 | 
            +
                      self.instance_eval %(
         | 
| 199 | 
            +
                        def #{opt.attr}?() 
         | 
| 200 | 
            +
                          @__option_values__.key?(:#{opt.attr}) 
         | 
| 201 | 
            +
                        end
         | 
| 202 | 
            +
                      )
         | 
| 203 | 
            +
                    end
         | 
| 204 | 
            +
                    
         | 
| 205 | 
            +
                    if opt.repeatable?
         | 
| 206 | 
            +
                      if opt.argument?
         | 
| 186 207 | 
             
                        self.instance_eval %(
         | 
| 187 | 
            -
                          def #{opt.attr}( | 
| 208 | 
            +
                          def #{opt.attr}?() 
         | 
| 209 | 
            +
                            (@__option_values__[:#{opt.attr}]&.size || 0) > 0 
         | 
| 210 | 
            +
                          end
         | 
| 211 | 
            +
                        )
         | 
| 212 | 
            +
                        self.instance_eval %(
         | 
| 213 | 
            +
                          def #{opt.attr}(default = [])
         | 
| 188 214 | 
             
                            if @__option_values__.key?(:#{opt.attr}) 
         | 
| 189 215 | 
             
                              @__option_values__[:#{opt.attr}]
         | 
| 190 216 | 
             
                            else
         | 
| @@ -192,23 +218,41 @@ module ShellOpts | |
| 192 218 | 
             
                            end
         | 
| 193 219 | 
             
                          end
         | 
| 194 220 | 
             
                        )
         | 
| 195 | 
            -
                       | 
| 221 | 
            +
                      else
         | 
| 196 222 | 
             
                        self.instance_eval %(
         | 
| 197 | 
            -
                          def #{opt.attr}( | 
| 198 | 
            -
                             | 
| 199 | 
            -
             | 
| 200 | 
            -
             | 
| 223 | 
            +
                          def #{opt.attr}?() 
         | 
| 224 | 
            +
                            (@__option_values__[:#{opt.attr}] || 0) > 0 
         | 
| 225 | 
            +
                          end
         | 
| 226 | 
            +
                        )
         | 
| 227 | 
            +
                        self.instance_eval %(
         | 
| 228 | 
            +
                          def #{opt.attr}(default = 0) 
         | 
| 229 | 
            +
                            if default > 0 && (@__option_values__[:#{opt.attr}] || 0) == 0
         | 
| 201 230 | 
             
                              default
         | 
| 231 | 
            +
                            else
         | 
| 232 | 
            +
                              @__option_values__[:#{opt.attr}] || 0
         | 
| 202 233 | 
             
                            end
         | 
| 203 234 | 
             
                          end
         | 
| 204 235 | 
             
                        )
         | 
| 205 | 
            -
                      else
         | 
| 206 | 
            -
                        self.instance_eval("def #{opt.attr}() @__option_values__[:#{opt.attr}] end")
         | 
| 207 236 | 
             
                      end
         | 
| 208 | 
            -
             | 
| 209 | 
            -
             | 
| 237 | 
            +
             | 
| 238 | 
            +
                    elsif opt.argument?
         | 
| 239 | 
            +
                      self.instance_eval %(
         | 
| 240 | 
            +
                        def #{opt.attr}(default = nil)
         | 
| 241 | 
            +
                          if @__option_values__.key?(:#{opt.attr}) 
         | 
| 242 | 
            +
                            @__option_values__[:#{opt.attr}]
         | 
| 243 | 
            +
                          else
         | 
| 244 | 
            +
                            default
         | 
| 245 | 
            +
                          end
         | 
| 246 | 
            +
                        end
         | 
| 247 | 
            +
                      )
         | 
| 248 | 
            +
             | 
| 249 | 
            +
                    else
         | 
| 250 | 
            +
                      self.instance_eval %(
         | 
| 251 | 
            +
                        def #{opt.attr}() 
         | 
| 252 | 
            +
                          @__option_values__.key?(:#{opt.attr}) 
         | 
| 253 | 
            +
                        end
         | 
| 254 | 
            +
                      )
         | 
| 210 255 | 
             
                    end
         | 
| 211 | 
            -
                    self.instance_eval("def #{opt.attr}?() @__option_values__.key?(:#{opt.attr}) end")
         | 
| 212 256 | 
             
                  }
         | 
| 213 257 |  | 
| 214 258 | 
             
                  @__grammar__.commands.each { |cmd|
         | 
    
        data/lib/shellopts/version.rb
    CHANGED
    
    
    
        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.15
         | 
| 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- | 
| 11 | 
            +
            date: 2022-04-11 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: forward_to
         |