command_mapper 0.3.1 → 0.3.2
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/.github/workflows/ruby.yml +2 -3
- data/.yardopts +1 -1
- data/ChangeLog.md +8 -0
- data/LICENSE.txt +1 -1
- data/README.md +51 -0
- data/command_mapper.gemspec +1 -4
- data/gemspec.yml +1 -1
- data/lib/command_mapper/arg.rb +2 -2
- data/lib/command_mapper/argument.rb +2 -2
- data/lib/command_mapper/command.rb +201 -20
- data/lib/command_mapper/option.rb +2 -2
- data/lib/command_mapper/option_value.rb +1 -1
- data/lib/command_mapper/sudo.rb +8 -8
- data/lib/command_mapper/types/dec.rb +1 -1
- data/lib/command_mapper/types/enum.rb +1 -1
- data/lib/command_mapper/types/hex.rb +1 -1
- data/lib/command_mapper/types/input_dir.rb +1 -1
- data/lib/command_mapper/types/input_file.rb +1 -1
- data/lib/command_mapper/types/input_path.rb +1 -1
- data/lib/command_mapper/types/key_value.rb +2 -5
- data/lib/command_mapper/types/key_value_list.rb +2 -2
- data/lib/command_mapper/types/list.rb +8 -6
- data/lib/command_mapper/types/map.rb +1 -1
- data/lib/command_mapper/types/num.rb +1 -1
- data/lib/command_mapper/types/str.rb +1 -1
- data/lib/command_mapper/types/type.rb +1 -1
- data/lib/command_mapper/types.rb +13 -13
- data/lib/command_mapper/version.rb +1 -1
- data/lib/command_mapper.rb +2 -2
- data/spec/commnad_spec.rb +38 -1
- metadata +4 -4
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 64e0cd16f2f829aa5175d24e251b13b0324459f9afedc5949177a877ac73bfee
         | 
| 4 | 
            +
              data.tar.gz: 41f4d3aa749a5844797e6e7745eef6fda781ff4cc301b561913b48d3b3dfd25e
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: f218287281e48ae82fb3feb4120279d5a7c28455213c160adde7d7aefd67874c542227cfd3584d60150711652679f7cc8b49d6b9b3d1fc4ab7630a6486cc8432
         | 
| 7 | 
            +
              data.tar.gz: ec718ea345aede03c9720afc88aa9fbdec4c348a6771e60de2ae41e48a4f3780fa290f93886f7091416d60cfa35b74946111bc780552de4c69f3cf6ceca0b864
         | 
    
        data/.github/workflows/ruby.yml
    CHANGED
    
    | @@ -9,16 +9,15 @@ jobs: | |
| 9 9 | 
             
                  fail-fast: false
         | 
| 10 10 | 
             
                  matrix:
         | 
| 11 11 | 
             
                    ruby:
         | 
| 12 | 
            -
                      - '2.6'
         | 
| 13 | 
            -
                      - '2.7'
         | 
| 14 12 | 
             
                      - '3.0'
         | 
| 15 13 | 
             
                      - '3.1'
         | 
| 16 14 | 
             
                      - '3.2'
         | 
| 15 | 
            +
                      - '3.3'
         | 
| 17 16 | 
             
                      - jruby
         | 
| 18 17 | 
             
                      - truffleruby
         | 
| 19 18 | 
             
                name: Ruby ${{ matrix.ruby }}
         | 
| 20 19 | 
             
                steps:
         | 
| 21 | 
            -
                  - uses: actions/checkout@ | 
| 20 | 
            +
                  - uses: actions/checkout@v4
         | 
| 22 21 | 
             
                  - name: Set up Ruby
         | 
| 23 22 | 
             
                    uses: ruby/setup-ruby@v1
         | 
| 24 23 | 
             
                    with:
         | 
    
        data/.yardopts
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            --markup markdown --title "CommandMapper Documentation" --protected | 
| 1 | 
            +
            --markup markdown --title "CommandMapper Documentation" --protected
         | 
    
        data/ChangeLog.md
    CHANGED
    
    | @@ -1,3 +1,11 @@ | |
| 1 | 
            +
            ### 0.3.2 / 2024-01-23
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            * Switch to use `require_relative` to improve load-times.
         | 
| 4 | 
            +
            * Allow passing `sudo` specific keyword arguments in
         | 
| 5 | 
            +
              {CommandMapper::Command#sudo_command} to {CommandMapper::Sudo.run}.
         | 
| 6 | 
            +
            * Allow {CommandMapper::Sudo}'s `preserve_env` attribute to accept an optional
         | 
| 7 | 
            +
              value.
         | 
| 8 | 
            +
             | 
| 1 9 | 
             
            ### 0.3.1 / 2022-12-25
         | 
| 2 10 |  | 
| 3 11 | 
             
            * Use `File.exist?` in {CommandMapper::Types::InputPath#validate} for Ruby
         | 
    
        data/LICENSE.txt
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | @@ -353,6 +353,41 @@ Grep.sudo(patterns: "Error", file: "/var/log/syslog") | |
| 353 353 | 
             
            # ...
         | 
| 354 354 | 
             
            ```
         | 
| 355 355 |  | 
| 356 | 
            +
            ### Defining sub-commands
         | 
| 357 | 
            +
             | 
| 358 | 
            +
            ```ruby
         | 
| 359 | 
            +
            module Git
         | 
| 360 | 
            +
              class Command < CommandMapper::Command
         | 
| 361 | 
            +
             | 
| 362 | 
            +
                command 'git' do
         | 
| 363 | 
            +
                  option "--version"
         | 
| 364 | 
            +
                  option "--help"
         | 
| 365 | 
            +
                  option "-C", name: :dir, value: {type: InputDir.new}
         | 
| 366 | 
            +
                  # ...
         | 
| 367 | 
            +
             | 
| 368 | 
            +
                  subcommand :clone do
         | 
| 369 | 
            +
                    option "--bare"
         | 
| 370 | 
            +
                    option "--mirror"
         | 
| 371 | 
            +
                    option "--depth", value: {type: Num.new}
         | 
| 372 | 
            +
                    # ...
         | 
| 373 | 
            +
             | 
| 374 | 
            +
                    argument :repository
         | 
| 375 | 
            +
                    argument :directory, required: false
         | 
| 376 | 
            +
                  end
         | 
| 377 | 
            +
             | 
| 378 | 
            +
                  # ...
         | 
| 379 | 
            +
                end
         | 
| 380 | 
            +
             | 
| 381 | 
            +
              end
         | 
| 382 | 
            +
            end
         | 
| 383 | 
            +
            ```
         | 
| 384 | 
            +
             | 
| 385 | 
            +
            ### Invoking sub-commands
         | 
| 386 | 
            +
             | 
| 387 | 
            +
            ```ruby
         | 
| 388 | 
            +
            Git::Command.run(clone: {repository: 'https://github.com/user/repo.git'})
         | 
| 389 | 
            +
            ```
         | 
| 390 | 
            +
             | 
| 356 391 | 
             
            ### Code Gen
         | 
| 357 392 |  | 
| 358 393 | 
             
            [command_mapper-gen] can automatically generate command classes from a command's
         | 
| @@ -390,6 +425,18 @@ class Cat < CommandMapper::Command | |
| 390 425 | 
             
            end
         | 
| 391 426 | 
             
            ```
         | 
| 392 427 |  | 
| 428 | 
            +
            ### Real-World Examples
         | 
| 429 | 
            +
             | 
| 430 | 
            +
            * [ruby-nmap](https://github.com/postmodern/ruby-nmap#readme)
         | 
| 431 | 
            +
            * [ruby-masscan](https://github.com/postmodern/ruby-masscan#readme)
         | 
| 432 | 
            +
            * [ruby-amass](https://github.com/postmodern/ruby-amass#readme)
         | 
| 433 | 
            +
            * [ruby-yasm](https://github.com/postmodern/ruby-yasm#readme)
         | 
| 434 | 
            +
            * [ruby-ncrack](https://github.com/postmodern/ruby-ncrack#readme)
         | 
| 435 | 
            +
            * [ruby-nikto](https://github.com/postmodern/ruby-nikto#readme)
         | 
| 436 | 
            +
            * [ruby-gobuster](https://github.com/postmodern/ruby-gobuster#readme)
         | 
| 437 | 
            +
            * [ruby-feroxbuster](https://github.com/postmodern/ruby-feroxbuster#readme)
         | 
| 438 | 
            +
            * [ruby-rustscan](https://github.com/postmodern/ruby-rustscan#readme)
         | 
| 439 | 
            +
             | 
| 393 440 | 
             
            ## Requirements
         | 
| 394 441 |  | 
| 395 442 | 
             
            * [ruby] >= 2.0.0
         | 
| @@ -412,6 +459,10 @@ gem 'command_mapper', '~> 0.2' | |
| 412 459 | 
             
            gemspec.add_dependency 'command_mapper', '~> 0.2'
         | 
| 413 460 | 
             
            ```
         | 
| 414 461 |  | 
| 462 | 
            +
            ## Alternatives
         | 
| 463 | 
            +
             | 
| 464 | 
            +
            * [terrapin](https://github.com/thoughtbot/terrapin#readme)
         | 
| 465 | 
            +
             | 
| 415 466 | 
             
            ## License
         | 
| 416 467 |  | 
| 417 468 | 
             
            Copyright (c) 2021-2022 Hal Brodigan
         | 
    
        data/command_mapper.gemspec
    CHANGED
    
    | @@ -7,10 +7,7 @@ Gem::Specification.new do |gem| | |
| 7 7 |  | 
| 8 8 | 
             
              gem.name    = gemspec.fetch('name')
         | 
| 9 9 | 
             
              gem.version = gemspec.fetch('version') do
         | 
| 10 | 
            -
                               | 
| 11 | 
            -
                              $LOAD_PATH << lib_dir unless $LOAD_PATH.include?(lib_dir)
         | 
| 12 | 
            -
             | 
| 13 | 
            -
                              require 'command_mapper/version'
         | 
| 10 | 
            +
                              require_relative 'lib/command_mapper/version'
         | 
| 14 11 | 
             
                              CommandMapper::VERSION
         | 
| 15 12 | 
             
                            end
         | 
| 16 13 |  | 
    
        data/gemspec.yml
    CHANGED
    
    | @@ -14,7 +14,7 @@ metadata: | |
| 14 14 | 
             
              documentation_uri: https://rubydoc.info/gems/command_mapper
         | 
| 15 15 | 
             
              source_code_uri:   https://github.com/postmodern/command_mapper.rb
         | 
| 16 16 | 
             
              bug_tracker_uri:   https://github.com/postmodern/command_mapper.rb/issues
         | 
| 17 | 
            -
              changelog_uri:     https://github.com/postmodern/command_mapper.rb/blob/ | 
| 17 | 
            +
              changelog_uri:     https://github.com/postmodern/command_mapper.rb/blob/main/ChangeLog.md
         | 
| 18 18 | 
             
              rubygems_mfa_required: 'true'
         | 
| 19 19 |  | 
| 20 20 | 
             
            required_ruby_version: ">= 2.0.0"
         | 
    
        data/lib/command_mapper/arg.rb
    CHANGED
    
    
| @@ -1,6 +1,6 @@ | |
| 1 | 
            -
             | 
| 2 | 
            -
             | 
| 3 | 
            -
             | 
| 1 | 
            +
            require_relative 'types'
         | 
| 2 | 
            +
            require_relative 'argument'
         | 
| 3 | 
            +
            require_relative 'option'
         | 
| 4 4 |  | 
| 5 5 | 
             
            require 'shellwords'
         | 
| 6 6 |  | 
| @@ -50,8 +50,8 @@ module CommandMapper | |
| 50 50 | 
             
                #   Custom environment variables to pass to the command.
         | 
| 51 51 | 
             
                #
         | 
| 52 52 | 
             
                # @param [Hash{Symbol => Object}] kwargs
         | 
| 53 | 
            -
                #   Additional keywords arguments. These will be used to populate
         | 
| 54 | 
            -
                #    | 
| 53 | 
            +
                #   Additional keywords arguments. These will be used to populate the
         | 
| 54 | 
            +
                #   command's `params`.
         | 
| 55 55 | 
             
                #
         | 
| 56 56 | 
             
                # @yield [self]
         | 
| 57 57 | 
             
                #   The newly initialized command.
         | 
| @@ -92,8 +92,8 @@ module CommandMapper | |
| 92 92 | 
             
                #   The option and argument values.
         | 
| 93 93 | 
             
                #
         | 
| 94 94 | 
             
                # @param [Hash{Symbol => Object}] kwargs
         | 
| 95 | 
            -
                #   Additional keywords arguments. These will be used to populate
         | 
| 96 | 
            -
                #    | 
| 95 | 
            +
                #   Additional keywords arguments. These will be used to populate the
         | 
| 96 | 
            +
                #   command's `params`.
         | 
| 97 97 | 
             
                #
         | 
| 98 98 | 
             
                # @yield [command]
         | 
| 99 99 | 
             
                #   The newly initialized command.
         | 
| @@ -115,8 +115,8 @@ module CommandMapper | |
| 115 115 | 
             
                #   The option and argument values.
         | 
| 116 116 | 
             
                #
         | 
| 117 117 | 
             
                # @param [Hash{Symbol => Object}] kwargs
         | 
| 118 | 
            -
                #   Additional keywords arguments. These will be used to populate
         | 
| 119 | 
            -
                #    | 
| 118 | 
            +
                #   Additional keywords arguments. These will be used to populate the
         | 
| 119 | 
            +
                #   command's `params`.
         | 
| 120 120 | 
             
                #
         | 
| 121 121 | 
             
                # @yield [command]
         | 
| 122 122 | 
             
                #   The newly initialized command.
         | 
| @@ -144,8 +144,8 @@ module CommandMapper | |
| 144 144 | 
             
                #   The option and argument values.
         | 
| 145 145 | 
             
                #
         | 
| 146 146 | 
             
                # @param [Hash{Symbol => Object}] kwargs
         | 
| 147 | 
            -
                #   Additional keywords arguments. These will be used to populate
         | 
| 148 | 
            -
                #    | 
| 147 | 
            +
                #   Additional keywords arguments. These will be used to populate the
         | 
| 148 | 
            +
                #   command's `params`.
         | 
| 149 149 | 
             
                #
         | 
| 150 150 | 
             
                # @yield [command]
         | 
| 151 151 | 
             
                #   The newly initialized command.
         | 
| @@ -170,8 +170,8 @@ module CommandMapper | |
| 170 170 | 
             
                #   The IO "mode" to open the IO pipe in.
         | 
| 171 171 | 
             
                #
         | 
| 172 172 | 
             
                # @param [Hash{Symbol => Object}] kwargs
         | 
| 173 | 
            -
                #   Additional keywords arguments. These will be used to populate
         | 
| 174 | 
            -
                #    | 
| 173 | 
            +
                #   Additional keywords arguments. These will be used to populate the
         | 
| 174 | 
            +
                #   command's `params`.
         | 
| 175 175 | 
             
                #
         | 
| 176 176 | 
             
                # @yield [command]
         | 
| 177 177 | 
             
                #   The newly initialized command.
         | 
| @@ -191,6 +191,78 @@ module CommandMapper | |
| 191 191 | 
             
                # @param [Hash{Symbol => Object}] params
         | 
| 192 192 | 
             
                #   The option and argument values.
         | 
| 193 193 | 
             
                #
         | 
| 194 | 
            +
                # @param [Hash{Symbol => Object}] sudo
         | 
| 195 | 
            +
                #   Additional `sudo` options.
         | 
| 196 | 
            +
                #
         | 
| 197 | 
            +
                # @option sudo [Boolean] :askpass
         | 
| 198 | 
            +
                #   Enables the `--askpass` `sudo` option.
         | 
| 199 | 
            +
                #
         | 
| 200 | 
            +
                # @option sudo [Boolean] :background
         | 
| 201 | 
            +
                #   Enables the `--background` `sudo` option
         | 
| 202 | 
            +
                #
         | 
| 203 | 
            +
                # @option sudo [Boolean] :bell
         | 
| 204 | 
            +
                #   Enables the `--bell` `sudo` option
         | 
| 205 | 
            +
                #
         | 
| 206 | 
            +
                # @option sudo [Integer] :close_from
         | 
| 207 | 
            +
                #   Enables the `--close-from=...` `sudo` option
         | 
| 208 | 
            +
                #
         | 
| 209 | 
            +
                # @option sudo [String] :chdir
         | 
| 210 | 
            +
                #   Enables the `--chdir=...` `sudo` option
         | 
| 211 | 
            +
                #
         | 
| 212 | 
            +
                # @option sudo [String] :preserve_env
         | 
| 213 | 
            +
                #   Enables the `--preseve-env=...` `sudo` option
         | 
| 214 | 
            +
                #
         | 
| 215 | 
            +
                # @option sudo [String, Boolean] :group
         | 
| 216 | 
            +
                #   Enables the `--preseve-env=...` `sudo` option
         | 
| 217 | 
            +
                #
         | 
| 218 | 
            +
                # @option sudo [Boolean] :set_home
         | 
| 219 | 
            +
                #   Enables the `--set-home` `sudo` option
         | 
| 220 | 
            +
                #
         | 
| 221 | 
            +
                # @option sudo [String] :host
         | 
| 222 | 
            +
                #   Enables the `--host=...` `sudo` option
         | 
| 223 | 
            +
                #
         | 
| 224 | 
            +
                # @option sudo [Boolean] :login
         | 
| 225 | 
            +
                #   Enables the `--login` `sudo` option
         | 
| 226 | 
            +
                #
         | 
| 227 | 
            +
                # @option sudo [Boolean] :remove_timestamp
         | 
| 228 | 
            +
                #   Enables the `--remove-timestamp` `sudo` option
         | 
| 229 | 
            +
                #
         | 
| 230 | 
            +
                # @option sudo [Boolean] :reset_timestamp
         | 
| 231 | 
            +
                #   Enables the `--reset-timestamp` `sudo` option
         | 
| 232 | 
            +
                #
         | 
| 233 | 
            +
                # @option sudo [Boolean] :non_interactive
         | 
| 234 | 
            +
                #   Enables the `--non-interactive` `sudo` option
         | 
| 235 | 
            +
                #
         | 
| 236 | 
            +
                # @option sudo [Boolean] :preserve_groups
         | 
| 237 | 
            +
                #   Enables the `--preserve-groups` `sudo` option
         | 
| 238 | 
            +
                #
         | 
| 239 | 
            +
                # @option sudo [String] :prompt
         | 
| 240 | 
            +
                #   Enables the `--prompt=...` `sudo` option
         | 
| 241 | 
            +
                #
         | 
| 242 | 
            +
                # @option sudo [String] :chroot
         | 
| 243 | 
            +
                #   Enables the `--chroot=...` `sudo` option
         | 
| 244 | 
            +
                #
         | 
| 245 | 
            +
                # @option sudo [String] :role
         | 
| 246 | 
            +
                #   Enables the `--role=...` `sudo` option
         | 
| 247 | 
            +
                #
         | 
| 248 | 
            +
                # @option sudo [Boolean] :stdin
         | 
| 249 | 
            +
                #   Enables the `--stdin` `sudo` option
         | 
| 250 | 
            +
                #
         | 
| 251 | 
            +
                # @option sudo [Boolean] :shell
         | 
| 252 | 
            +
                #   Enables the `--shell` `sudo` option
         | 
| 253 | 
            +
                #
         | 
| 254 | 
            +
                # @option sudo [String] :type
         | 
| 255 | 
            +
                #   Enables the `--type=...` `sudo` option
         | 
| 256 | 
            +
                #
         | 
| 257 | 
            +
                # @option sudo [Integer] :command_timeout
         | 
| 258 | 
            +
                #   Enables the `--command-timeout=...` `sudo` option
         | 
| 259 | 
            +
                #
         | 
| 260 | 
            +
                # @option sudo [String] :other_user
         | 
| 261 | 
            +
                #   Enables the `--other-user=...` `sudo` option
         | 
| 262 | 
            +
                #
         | 
| 263 | 
            +
                # @option sudo [String] :user
         | 
| 264 | 
            +
                #   Enables the `--user=...` `sudo` option
         | 
| 265 | 
            +
                #
         | 
| 194 266 | 
             
                # @param [Hash{Symbol => Object}] kwargs
         | 
| 195 267 | 
             
                #   Additional keyword arguments for {#initialize}.
         | 
| 196 268 | 
             
                #
         | 
| @@ -209,9 +281,6 @@ module CommandMapper | |
| 209 281 | 
             
                #
         | 
| 210 282 | 
             
                # Gets or sets the command name.
         | 
| 211 283 | 
             
                #
         | 
| 212 | 
            -
                # @param [#to_s] new_name
         | 
| 213 | 
            -
                #   The optional new command name.
         | 
| 214 | 
            -
                #
         | 
| 215 284 | 
             
                # @return [String]
         | 
| 216 285 | 
             
                #   The command name.
         | 
| 217 286 | 
             
                #
         | 
| @@ -711,15 +780,127 @@ module CommandMapper | |
| 711 780 | 
             
                #
         | 
| 712 781 | 
             
                # Runs the command through `sudo`.
         | 
| 713 782 | 
             
                #
         | 
| 714 | 
            -
                # @param [ | 
| 715 | 
            -
                #    | 
| 783 | 
            +
                # @param [Boolean] askpass
         | 
| 784 | 
            +
                #   Enables the `--askpass` `sudo` option.
         | 
| 785 | 
            +
                #
         | 
| 786 | 
            +
                # @param [Boolean] background
         | 
| 787 | 
            +
                #   Enables the `--background` `sudo` option
         | 
| 788 | 
            +
                #
         | 
| 789 | 
            +
                # @param [Boolean] bell
         | 
| 790 | 
            +
                #   Enables the `--bell` `sudo` option
         | 
| 791 | 
            +
                #
         | 
| 792 | 
            +
                # @param [Integer] close_from
         | 
| 793 | 
            +
                #   Enables the `--close-from=...` `sudo` option
         | 
| 794 | 
            +
                #
         | 
| 795 | 
            +
                # @param [String] chdir
         | 
| 796 | 
            +
                #   Enables the `--chdir=...` `sudo` option
         | 
| 797 | 
            +
                #
         | 
| 798 | 
            +
                # @param [String] preserve_env
         | 
| 799 | 
            +
                #   Enables the `--preseve-env=...` `sudo` option
         | 
| 800 | 
            +
                #
         | 
| 801 | 
            +
                # @param [String, Boolean] group
         | 
| 802 | 
            +
                #   Enables the `--preseve-env=...` `sudo` option
         | 
| 803 | 
            +
                #
         | 
| 804 | 
            +
                # @param [Boolean] set_home
         | 
| 805 | 
            +
                #   Enables the `--set-home` `sudo` option
         | 
| 806 | 
            +
                #
         | 
| 807 | 
            +
                # @param [String] host
         | 
| 808 | 
            +
                #   Enables the `--host=...` `sudo` option
         | 
| 809 | 
            +
                #
         | 
| 810 | 
            +
                # @param [Boolean] login
         | 
| 811 | 
            +
                #   Enables the `--login` `sudo` option
         | 
| 812 | 
            +
                #
         | 
| 813 | 
            +
                # @param [Boolean] remove_timestamp
         | 
| 814 | 
            +
                #   Enables the `--remove-timestamp` `sudo` option
         | 
| 815 | 
            +
                #
         | 
| 816 | 
            +
                # @param [Boolean] reset_timestamp
         | 
| 817 | 
            +
                #   Enables the `--reset-timestamp` `sudo` option
         | 
| 818 | 
            +
                #
         | 
| 819 | 
            +
                # @param [Boolean] non_interactive
         | 
| 820 | 
            +
                #   Enables the `--non-interactive` `sudo` option
         | 
| 821 | 
            +
                #
         | 
| 822 | 
            +
                # @param [Boolean] preserve_groups
         | 
| 823 | 
            +
                #   Enables the `--preserve-groups` `sudo` option
         | 
| 824 | 
            +
                #
         | 
| 825 | 
            +
                # @param [String] prompt
         | 
| 826 | 
            +
                #   Enables the `--prompt=...` `sudo` option
         | 
| 827 | 
            +
                #
         | 
| 828 | 
            +
                # @param [String] chroot
         | 
| 829 | 
            +
                #   Enables the `--chroot=...` `sudo` option
         | 
| 830 | 
            +
                #
         | 
| 831 | 
            +
                # @param [String] role
         | 
| 832 | 
            +
                #   Enables the `--role=...` `sudo` option
         | 
| 833 | 
            +
                #
         | 
| 834 | 
            +
                # @param [Boolean] stdin
         | 
| 835 | 
            +
                #   Enables the `--stdin` `sudo` option
         | 
| 836 | 
            +
                #
         | 
| 837 | 
            +
                # @param [Boolean] shell
         | 
| 838 | 
            +
                #   Enables the `--shell` `sudo` option
         | 
| 839 | 
            +
                #
         | 
| 840 | 
            +
                # @param [String] type
         | 
| 841 | 
            +
                #   Enables the `--type=...` `sudo` option
         | 
| 842 | 
            +
                #
         | 
| 843 | 
            +
                # @param [Integer] command_timeout
         | 
| 844 | 
            +
                #   Enables the `--command-timeout=...` `sudo` option
         | 
| 845 | 
            +
                #
         | 
| 846 | 
            +
                # @param [String] other_user
         | 
| 847 | 
            +
                #   Enables the `--other-user=...` `sudo` option
         | 
| 848 | 
            +
                #
         | 
| 849 | 
            +
                # @param [String] user
         | 
| 850 | 
            +
                #   Enables the `--user=...` `sudo` option
         | 
| 716 851 | 
             
                #
         | 
| 717 852 | 
             
                # @return [Boolean, nil]
         | 
| 718 853 | 
             
                #   Indicates whether the command exited successfully or not.
         | 
| 719 854 | 
             
                #   `nil` indicates the command could not be found.
         | 
| 720 855 | 
             
                #
         | 
| 721 | 
            -
                def sudo_command( | 
| 722 | 
            -
             | 
| 856 | 
            +
                def sudo_command(askpass: nil,
         | 
| 857 | 
            +
                                 background: nil,
         | 
| 858 | 
            +
                                 bell: nil,
         | 
| 859 | 
            +
                                 close_from: nil,
         | 
| 860 | 
            +
                                 chdir: nil,
         | 
| 861 | 
            +
                                 preserve_env: nil,
         | 
| 862 | 
            +
                                 group: nil,
         | 
| 863 | 
            +
                                 set_home: nil,
         | 
| 864 | 
            +
                                 host: nil,
         | 
| 865 | 
            +
                                 login: nil,
         | 
| 866 | 
            +
                                 remove_timestamp: nil,
         | 
| 867 | 
            +
                                 reset_timestamp: nil,
         | 
| 868 | 
            +
                                 non_interactive: nil,
         | 
| 869 | 
            +
                                 preserve_groups: nil,
         | 
| 870 | 
            +
                                 prompt: nil,
         | 
| 871 | 
            +
                                 chroot: nil,
         | 
| 872 | 
            +
                                 role: nil,
         | 
| 873 | 
            +
                                 stdin: nil,
         | 
| 874 | 
            +
                                 shell: nil,
         | 
| 875 | 
            +
                                 type: nil,
         | 
| 876 | 
            +
                                 command_timeout: nil,
         | 
| 877 | 
            +
                                 other_user: nil,
         | 
| 878 | 
            +
                                 user: nil, &block)
         | 
| 879 | 
            +
                  sudo_params = {command: command_argv}
         | 
| 880 | 
            +
             | 
| 881 | 
            +
                  sudo_params[:askpass]          = askpass          unless askpass.nil?
         | 
| 882 | 
            +
                  sudo_params[:background]       = background       unless background.nil?
         | 
| 883 | 
            +
                  sudo_params[:bell]             = bell             unless bell.nil?
         | 
| 884 | 
            +
                  sudo_params[:close_from]       = close_from       unless close_from.nil?
         | 
| 885 | 
            +
                  sudo_params[:chdir]            = chdir            unless chdir.nil?
         | 
| 886 | 
            +
                  sudo_params[:preserve_env]     = preserve_env     unless preserve_env.nil?
         | 
| 887 | 
            +
                  sudo_params[:group]            = group            unless group.nil?
         | 
| 888 | 
            +
                  sudo_params[:set_home]         = set_home         unless set_home.nil?
         | 
| 889 | 
            +
                  sudo_params[:host]             = host             unless host.nil?
         | 
| 890 | 
            +
                  sudo_params[:login]            = login            unless login.nil?
         | 
| 891 | 
            +
                  sudo_params[:remove_timestamp] = remove_timestamp unless remove_timestamp.nil?
         | 
| 892 | 
            +
                  sudo_params[:reset_timestamp]  = reset_timestamp  unless reset_timestamp.nil?
         | 
| 893 | 
            +
                  sudo_params[:non_interactive]  = non_interactive  unless non_interactive.nil?
         | 
| 894 | 
            +
                  sudo_params[:preserve_groups]  = preserve_groups  unless preserve_groups.nil?
         | 
| 895 | 
            +
                  sudo_params[:prompt]           = prompt           unless prompt.nil?
         | 
| 896 | 
            +
                  sudo_params[:chroot]           = chroot           unless chroot.nil?
         | 
| 897 | 
            +
                  sudo_params[:role]             = role             unless role.nil?
         | 
| 898 | 
            +
                  sudo_params[:stdin]            = stdin            unless stdin.nil?
         | 
| 899 | 
            +
                  sudo_params[:shell]            = shell            unless shell.nil?
         | 
| 900 | 
            +
                  sudo_params[:type]             = type             unless type.nil?
         | 
| 901 | 
            +
                  sudo_params[:command_timeout]  = command_timeout  unless command_timeout.nil?
         | 
| 902 | 
            +
                  sudo_params[:other_user]       = other_user       unless other_user.nil?
         | 
| 903 | 
            +
                  sudo_params[:user]             = user             unless user.nil?
         | 
| 723 904 |  | 
| 724 905 | 
             
                  Sudo.run(sudo_params, command_env: @command_env, &block)
         | 
| 725 906 | 
             
                end
         | 
    
        data/lib/command_mapper/sudo.rb
    CHANGED
    
    | @@ -1,5 +1,5 @@ | |
| 1 | 
            -
             | 
| 2 | 
            -
             | 
| 1 | 
            +
            require_relative 'command'
         | 
| 2 | 
            +
            require_relative 'types/key_value_list'
         | 
| 3 3 |  | 
| 4 4 | 
             
            module CommandMapper
         | 
| 5 5 | 
             
              #
         | 
| @@ -7,7 +7,7 @@ module CommandMapper | |
| 7 7 | 
             
              #
         | 
| 8 8 | 
             
              # ## Sudo options:
         | 
| 9 9 | 
             
              #
         | 
| 10 | 
            -
              # * `-A` - `sudo. | 
| 10 | 
            +
              # * `-A` - `sudo.askpass`
         | 
| 11 11 | 
             
              # * `-b` - `sudo.background`
         | 
| 12 12 | 
             
              # * `-C` - `sudo.close_from`
         | 
| 13 13 | 
             
              # * `-E` - `sudo.preserve_env`
         | 
| @@ -40,9 +40,9 @@ module CommandMapper | |
| 40 40 | 
             
                  option "--askpass"
         | 
| 41 41 | 
             
                  option "--background"
         | 
| 42 42 | 
             
                  option "--bell"
         | 
| 43 | 
            -
                  option "--close-from", equals: true, value:  | 
| 44 | 
            -
                  option "--chdir", equals: true, value:  | 
| 45 | 
            -
                  option "--preserve-env", equals: true, value:  | 
| 43 | 
            +
                  option "--close-from", equals: true, value: {type: Num.new}
         | 
| 44 | 
            +
                  option "--chdir", equals: true, value: {type: InputDir.new}
         | 
| 45 | 
            +
                  option "--preserve-env", equals: true, value: {type: List.new, required: false}
         | 
| 46 46 | 
             
                  option "--edit"
         | 
| 47 47 | 
             
                  option "--group", equals: true, value: true
         | 
| 48 48 | 
             
                  option "--set-home"
         | 
| @@ -55,12 +55,12 @@ module CommandMapper | |
| 55 55 | 
             
                  option "--non-interactive"
         | 
| 56 56 | 
             
                  option "--preserve-groups"
         | 
| 57 57 | 
             
                  option "--prompt", equals: true, value: true
         | 
| 58 | 
            -
                  option "--chroot", equals: true, value:  | 
| 58 | 
            +
                  option "--chroot", equals: true, value: {type: InputDir.new}
         | 
| 59 59 | 
             
                  option "--role", equals: true, value: true
         | 
| 60 60 | 
             
                  option "--stdin"
         | 
| 61 61 | 
             
                  option "--shell"
         | 
| 62 62 | 
             
                  option "--type", equals: true, value: true
         | 
| 63 | 
            -
                  option "--command-timeout", equals: true, value:  | 
| 63 | 
            +
                  option "--command-timeout", equals: true, value: {type: Num.new}
         | 
| 64 64 | 
             
                  option "--other-user", equals: true, value: true
         | 
| 65 65 | 
             
                  option "--user", equals: true, value: true
         | 
| 66 66 | 
             
                  option "--version"
         | 
| @@ -1,5 +1,5 @@ | |
| 1 | 
            -
             | 
| 2 | 
            -
             | 
| 1 | 
            +
            require_relative 'type'
         | 
| 2 | 
            +
            require_relative 'str'
         | 
| 3 3 |  | 
| 4 4 | 
             
            module CommandMapper
         | 
| 5 5 | 
             
              module Types
         | 
| @@ -41,9 +41,6 @@ module CommandMapper | |
| 41 41 | 
             
                  # @param [Type, Hash] value
         | 
| 42 42 | 
             
                  #   The value's value type.
         | 
| 43 43 | 
             
                  #
         | 
| 44 | 
            -
                  # @param [Hash{Symbol => Object}]
         | 
| 45 | 
            -
                  #   Additional keyword arguments for {Type#initialize}.
         | 
| 46 | 
            -
                  #
         | 
| 47 44 | 
             
                  def initialize(separator: '=', key: Str.new, value: Str.new)
         | 
| 48 45 | 
             
                    @separator = separator
         | 
| 49 46 |  | 
| @@ -1,5 +1,5 @@ | |
| 1 | 
            -
             | 
| 2 | 
            -
             | 
| 1 | 
            +
            require_relative 'type'
         | 
| 2 | 
            +
            require_relative 'str'
         | 
| 3 3 |  | 
| 4 4 | 
             
            module CommandMapper
         | 
| 5 5 | 
             
              module Types
         | 
| @@ -28,17 +28,19 @@ module CommandMapper | |
| 28 28 | 
             
                  # @param [String] separator
         | 
| 29 29 | 
             
                  #   The list separator character.
         | 
| 30 30 | 
             
                  #
         | 
| 31 | 
            -
                  # @param [Type, Hash]  | 
| 31 | 
            +
                  # @param [Type, Hash] type 
         | 
| 32 32 | 
             
                  #   The list's value type.
         | 
| 33 33 | 
             
                  #
         | 
| 34 | 
            +
                  # @param [Boolean] allow_empty
         | 
| 35 | 
            +
                  #   Specifies whether the list type will accept empty values.
         | 
| 36 | 
            +
                  #
         | 
| 34 37 | 
             
                  def initialize(separator: ',', type: Str.new, allow_empty: false)
         | 
| 35 38 | 
             
                    if type.nil?
         | 
| 36 39 | 
             
                      raise(ArgumentError,"type: keyword cannot be nil")
         | 
| 37 40 | 
             
                    end
         | 
| 38 41 |  | 
| 39 | 
            -
                    @separator | 
| 40 | 
            -
                    @type | 
| 41 | 
            -
             | 
| 42 | 
            +
                    @separator   = separator
         | 
| 43 | 
            +
                    @type        = Types::Type(type)
         | 
| 42 44 | 
             
                    @allow_empty = allow_empty
         | 
| 43 45 | 
             
                  end
         | 
| 44 46 |  | 
    
        data/lib/command_mapper/types.rb
    CHANGED
    
    | @@ -1,13 +1,13 @@ | |
| 1 | 
            -
             | 
| 2 | 
            -
             | 
| 3 | 
            -
             | 
| 4 | 
            -
             | 
| 5 | 
            -
             | 
| 6 | 
            -
             | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 1 | 
            +
            require_relative 'types/type'
         | 
| 2 | 
            +
            require_relative 'types/str'
         | 
| 3 | 
            +
            require_relative 'types/num'
         | 
| 4 | 
            +
            require_relative 'types/dec'
         | 
| 5 | 
            +
            require_relative 'types/hex'
         | 
| 6 | 
            +
            require_relative 'types/map'
         | 
| 7 | 
            +
            require_relative 'types/enum'
         | 
| 8 | 
            +
            require_relative 'types/list'
         | 
| 9 | 
            +
            require_relative 'types/key_value'
         | 
| 10 | 
            +
            require_relative 'types/key_value_list'
         | 
| 11 | 
            +
            require_relative 'types/input_path'
         | 
| 12 | 
            +
            require_relative 'types/input_file'
         | 
| 13 | 
            +
            require_relative 'types/input_dir'
         | 
    
        data/lib/command_mapper.rb
    CHANGED
    
    | @@ -1,2 +1,2 @@ | |
| 1 | 
            -
             | 
| 2 | 
            -
             | 
| 1 | 
            +
            require_relative 'command_mapper/command'
         | 
| 2 | 
            +
            require_relative 'command_mapper/version'
         | 
    
        data/spec/commnad_spec.rb
    CHANGED
    
    | @@ -1416,7 +1416,7 @@ describe CommandMapper::Command do | |
| 1416 1416 | 
             
                end
         | 
| 1417 1417 | 
             
              end
         | 
| 1418 1418 |  | 
| 1419 | 
            -
              describe "# | 
| 1419 | 
            +
              describe "#sudo_command" do
         | 
| 1420 1420 | 
             
                subject { command_class.new({opt1: opt1, arg1: arg1}, command_env: env) }
         | 
| 1421 1421 |  | 
| 1422 1422 | 
             
                let(:expected_argv) { [command_class.command, "--opt1", opt1, arg1] }
         | 
| @@ -1426,6 +1426,43 @@ describe CommandMapper::Command do | |
| 1426 1426 |  | 
| 1427 1427 | 
             
                  subject.sudo_command
         | 
| 1428 1428 | 
             
                end
         | 
| 1429 | 
            +
             | 
| 1430 | 
            +
                [
         | 
| 1431 | 
            +
                  :askpass,
         | 
| 1432 | 
            +
                  :background,
         | 
| 1433 | 
            +
                  :bell,
         | 
| 1434 | 
            +
                  :close_from,
         | 
| 1435 | 
            +
                  :chdir,
         | 
| 1436 | 
            +
                  :preserve_env,
         | 
| 1437 | 
            +
                  :group,
         | 
| 1438 | 
            +
                  :set_home,
         | 
| 1439 | 
            +
                  :host,
         | 
| 1440 | 
            +
                  :login,
         | 
| 1441 | 
            +
                  :remove_timestamp,
         | 
| 1442 | 
            +
                  :reset_timestamp,
         | 
| 1443 | 
            +
                  :non_interactive,
         | 
| 1444 | 
            +
                  :preserve_groups,
         | 
| 1445 | 
            +
                  :prompt,
         | 
| 1446 | 
            +
                  :chroot,
         | 
| 1447 | 
            +
                  :role,
         | 
| 1448 | 
            +
                  :stdin,
         | 
| 1449 | 
            +
                  :shell,
         | 
| 1450 | 
            +
                  :type,
         | 
| 1451 | 
            +
                  :command_timeout,
         | 
| 1452 | 
            +
                  :other_user,
         | 
| 1453 | 
            +
                  :user,
         | 
| 1454 | 
            +
                ].each do |option|
         | 
| 1455 | 
            +
                  context "when given the #{option}: keyword argument" do
         | 
| 1456 | 
            +
                    let(:option) { option }
         | 
| 1457 | 
            +
                    let(:value)  { true   }
         | 
| 1458 | 
            +
             | 
| 1459 | 
            +
                    it "must pass the #{option}: keyword argument to CommandMapper::Sudo" do
         | 
| 1460 | 
            +
                      expect(Sudo).to receive(:run).with({option => value, :command => subject.command_argv}, :command_env => env)
         | 
| 1461 | 
            +
             | 
| 1462 | 
            +
                      subject.sudo_command(option => value)
         | 
| 1463 | 
            +
                    end
         | 
| 1464 | 
            +
                  end
         | 
| 1465 | 
            +
                end
         | 
| 1429 1466 | 
             
              end
         | 
| 1430 1467 |  | 
| 1431 1468 | 
             
              describe "#to_s" do
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: command_mapper
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.3. | 
| 4 | 
            +
              version: 0.3.2
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Postmodern
         | 
| 8 8 | 
             
            autorequire:
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2024-01-24 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: bundler
         | 
| @@ -99,7 +99,7 @@ metadata: | |
| 99 99 | 
             
              documentation_uri: https://rubydoc.info/gems/command_mapper
         | 
| 100 100 | 
             
              source_code_uri: https://github.com/postmodern/command_mapper.rb
         | 
| 101 101 | 
             
              bug_tracker_uri: https://github.com/postmodern/command_mapper.rb/issues
         | 
| 102 | 
            -
              changelog_uri: https://github.com/postmodern/command_mapper.rb/blob/ | 
| 102 | 
            +
              changelog_uri: https://github.com/postmodern/command_mapper.rb/blob/main/ChangeLog.md
         | 
| 103 103 | 
             
              rubygems_mfa_required: 'true'
         | 
| 104 104 | 
             
            post_install_message:
         | 
| 105 105 | 
             
            rdoc_options: []
         | 
| @@ -116,7 +116,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 116 116 | 
             
                - !ruby/object:Gem::Version
         | 
| 117 117 | 
             
                  version: '0'
         | 
| 118 118 | 
             
            requirements: []
         | 
| 119 | 
            -
            rubygems_version: 3. | 
| 119 | 
            +
            rubygems_version: 3.4.10
         | 
| 120 120 | 
             
            signing_key:
         | 
| 121 121 | 
             
            specification_version: 4
         | 
| 122 122 | 
             
            summary: Safe and secure execution of commands.
         |