optparse2 0.4.3 → 0.4.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9f775081d3be69908f6e5e5de5527bb9d6d148042887564b6a3be8f1c7247908
4
- data.tar.gz: 8d0d63cdf8e26268b612cf095b5f0a2ca16c9be13cab969bb1fe40c04ac9e551
3
+ metadata.gz: 12ed6158390436ca25a3f47b01614d16ffd0cf4bca06b2f1cae376e38a947ce9
4
+ data.tar.gz: 8fc0ae12b3a01f0c2f12b46bd09169d248ed48cdafab694c026a63d69bfae712
5
5
  SHA512:
6
- metadata.gz: 40f97ca2942ca5b28547d89367b1e64d0e59d58db2cbf28dc6e0325a94e2c3dfdeec3c2d396f124721dd76690e52c864540fa4d27925f12cfd1d808b504cd842
7
- data.tar.gz: 2ccc34c7bf5b55dec6bc3f197d76b5d8d244bc30d7bd9283203bb13f048a8eb41f1296b6a7a1b9b29011ed745c99e1f8ed435980f12fa0e34ce593953672b39a
6
+ metadata.gz: 55041cdb12c60bfa3bdfcf1849db88eb5ca8c68f778f175084ee66dc98b838c580726039d0e2dab25a79afd4d552cb8923900c71ed95fb558b1748ef1fc26cd7
7
+ data.tar.gz: 2d92f8714d75f5f166c4a09ca0c2ec4447a6a0deed83ea8fc4e18d9696754cdc5409466c645d66f43492eeb1d9187c07db1adbe734bdc34d7bc51f237e600a1e
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class OptParse2
4
- VERSION = "0.4.3"
4
+ VERSION = "0.4.4"
5
5
  end
data/lib/optparse2.rb CHANGED
@@ -136,6 +136,10 @@ class OptParse2
136
136
  argv2 = argv2.each_slice(2).map { _2 }
137
137
 
138
138
  if @rest
139
+ if argv2.length < @rest.fetch(:required, 0)
140
+ raise ParseError, "at least #{@rest[:required]} trailing arguments required (only got #{argv2.length})", caller(1)
141
+ end
142
+
139
143
  argv2 = @rest[:block].call(argv2)
140
144
  into[@rest[:key]] = argv2 if @rest[:key]
141
145
  elsif !argv2.empty? && self.raise_unknown && !@positional.empty?
@@ -221,8 +225,17 @@ class OptParse2
221
225
  @positional.append sw
222
226
  end
223
227
 
224
- def rest(name, description, &block)
225
- @rest = { key: name.to_sym, block: }
228
+ def rest(name, *description, key: name, required: 0, &block)
229
+ title = "#{'[' if required.zero?}#{name} ...#{']' if required.zero?}"
230
+ banner.concat " #{title}" if pos_set_banner
231
+ title += " (#{required} arg minimum)" if required > 0
232
+
233
+ on sprintf "%s%-*s %s", summary_indent, summary_width, title, description.first
234
+ description[1..].each do |descr|
235
+ on sprintf "%s%-*s %s", summary_indent, summary_width, '', descr
236
+ end
237
+
238
+ @rest = { name:, key:, required: required || 0, block: }
226
239
  end
227
240
  end
228
241
 
@@ -232,7 +245,7 @@ require_relative 'optparse2/pathname'
232
245
 
233
246
  # $* << '-tFOO' << '--no-cache' << '-x'
234
247
  # $*.replace %w[123 lol what -t10 is up here]
235
- $*.replace %w[1 -t3 b c ]
248
+ $*.replace %w[1 -t3 b -h ]
236
249
 
237
250
  OPTS={}
238
251
  OptParse2.new do |op|
@@ -241,7 +254,7 @@ OptParse2.new do |op|
241
254
  op.pos 'file', Integer, 'sets the file name', 'is also pretty cool', 1..1000, required: true do it * 2 end
242
255
  op.pos '[start[-end]]', 'things to do', key: 'line', default: 123
243
256
 
244
- # op.rest 'message', 'Message to submit' do it.join ' ' end
257
+ op.rest 'message', 'Message to submit', 'pretty coo', required: 1 do it.join ' ' end
245
258
  op.parse! into: OPTS
246
259
  p ["finish: ", OPTS, $*]
247
260
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: optparse2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.3
4
+ version: 0.4.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - SamW