command_mapper 0.3.1 → 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
- 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.
|