nub 0.0.41 → 0.0.42

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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/nub/commander.rb +39 -3
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 252475d41897431fae67e7f7c9b613db0ce9fc59c7bbf83dd67cec52b5f9611b
4
- data.tar.gz: 382e539ad717e3a0830f4070112085ff568ebb1db18e32b3f06f0eeaa3165439
3
+ metadata.gz: 289eea77b83026e03f76830c0ef68782f44fdb34237b4077e4a747e44a18e11b
4
+ data.tar.gz: f3605f50a0555a2cd8f5f452739a863fd421c07ecffa8bcfedd8548975eaaad6
5
5
  SHA512:
6
- metadata.gz: 22f5da62845e4cd9a2aac1dc726c6c5c30ee854dd20999b177ad9db412bd7343bafc09de0ccf309fbf1548a75d557a68a39510be3de030e479db080ec53ffbee
7
- data.tar.gz: 668f01238e0e8501965b45b5ea1beac2fbac9981e0dbae79233ca43af08036d39b8f4832d413de499890334adae07695e2da9eb1f8c818bb119cade426b82ad7
6
+ metadata.gz: 0d003170c0aa05f00626d9587b666c0b66923ff4ad20401db1d39d18f7dc0f143bfbd438433f71890485e8b44ccabe3bb497cfcdd74d383fa6cb6853cc842b87
7
+ data.tar.gz: 41a27d08399b97a8af5da53acfd63f1b62f7137d143c46cdd783a2947126dbc37d48060ff01b5a4aade8b97c82b3d72b9534b58bd68123fff4134f60ed6cb6e3
data/lib/nub/commander.rb CHANGED
@@ -194,14 +194,50 @@ class Commander
194
194
  @cmds[ARGV.shift.to_sym] = {}
195
195
  cmd_names.reject!{|x| x == cmd.name}
196
196
 
197
- # Collect command options
198
- opts = ARGV.take_while{|x| !cmd_names.include?(x) }
199
- ARGV.shift(opts.size)
197
+ # Command options as defined in configuration
200
198
  cmd_pos_opts = cmd.opts.select{|x| x.key.nil? }
201
199
  cmd_named_opts = cmd.opts.select{|x| !x.key.nil? }
200
+
201
+ # Collect command options from args to compare against
202
+ opts = ARGV.take_while{|x| !cmd_names.include?(x) }
203
+ ARGV.shift(opts.size)
204
+
205
+ # All positional options are required. If they are not given then check for the 'chained
206
+ # command expression' case for positional options in the next command that satisfy the
207
+ # previous command's requirements and so on and so forth.
208
+ if opts.size == 0 && (cmd_pos_opts.any? || cmd_named_opts.any?{|x| x.required})
209
+ i = 0
210
+ while (i += 1) < ARGV.size do
211
+ opts = ARGV[i..-1].take_while{|x| !cmd_names.include?(x) }
212
+ break if opts.any?
213
+ end
214
+
215
+ # Check that the chained command options at least match types and size
216
+ if opts.any?
217
+ cmd_required = cmd.opts.select{|x| x.key.nil? || x.required}
218
+ other = @config.find{|x| x.name == ARGV[i-1]}
219
+ other_required = other.opts.select{|x| x.key.nil? || x.required}
220
+
221
+ !puts("Error: chained commands must have equal numbers of required optiosn".colorize(:red)) && !puts(cmd.help) and
222
+ exit if cmd_required.size != other_required.size
223
+ cmd_required.each_with_index{|x,i|
224
+ !puts("Error: chained command options are not type consistent".colorize(:red)) && !puts(cmd.help) and
225
+ exit if x.type != other_required[i].type || x.key != other_required[i].key
226
+ }
227
+ end
228
+ end
229
+
230
+ # Check that all positional options were given
202
231
  !puts("Error: positional option required".colorize(:red)) && !puts(cmd.help) and
203
232
  exit if opts.size < cmd_pos_opts.size
204
233
 
234
+ # Check that all required named options where given
235
+ named_opts = opts.select{|x| x.start_with?('-')}
236
+ cmd_named_opts.select{|x| x.required}.each{|x|
237
+ !puts("Error: required option #{x.key} not given".colorize(:red)) && !puts(cmd.help) and
238
+ exit if !named_opts.find{|y| y.start_with?(x.short) || y.start_with?(x.long)}
239
+ }
240
+
205
241
  # Process command options
206
242
  pos = -1
207
243
  loop {
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nub
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.41
4
+ version: 0.0.42
5
5
  platform: ruby
6
6
  authors:
7
7
  - Patrick Crummett
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-04-02 00:00:00.000000000 Z
11
+ date: 2018-04-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colorize