optparse2 0.7.3 → 0.7.5

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: 231baf4fb3c4a278ea945a8bcff14e90decf66d13b37c25659cfc364ae9c0599
4
- data.tar.gz: ede27c9be0e8bd48f9efe7358d716015d555a4f26544823354da0f005cb871ae
3
+ metadata.gz: 5b075c92a3cfbcdaf6d194a8c10b5a6bc1adb503cce26dc9e54d1ce98e01e234
4
+ data.tar.gz: aa78b0efbaaff344675ee564c43db64b0da6118505b9bd66820925e146b8a40a
5
5
  SHA512:
6
- metadata.gz: 7365315d5bf866353e233f5771057eb709871ad75d320ac979b860d5d6625cdcbb315cdc073eb6a79a0542c33025e320f77bbacde1101f9c641cf4b41dbafb30
7
- data.tar.gz: 619232fed57b4670346be829b7d4afac06748f117b415eeaabe71be96f57a5870b0d32a8b3b5d222b70b8c432abfeed6b5acf6d701d38c0ca00dc395c221200e
6
+ metadata.gz: 7b22ee332ef698a1f87daba95815adc0bb7a174e7d2985cd69f6e21fa0d038e85926a7d6a103202e2d7f26519acecdb554f75f1ba621a89e235384d0f12c8bfd
7
+ data.tar.gz: 396f15d23ddd21d3a5a76b243d99fc8cd591244b3c20b1610589af661e4d8ba30c3e7aab804c6b6fdd50138f70abccd372e938be7c4c17c7377f16cb875f2e27
@@ -136,10 +136,25 @@ class OptParse2
136
136
  self.switch_name = val
137
137
  end
138
138
 
139
+ # Required arguments must be supplied by the user. They conflict with `default` options, and
140
+ # cause an error if both required and default are specified
141
+ def set_required(required)
142
+ if default?
143
+ raise ArgumentError, 'cannot require an argument with a default value'
144
+ end
145
+ @required = required
146
+ end
147
+
148
+ def required? = @required
149
+
139
150
  # Default values of switches are used when the switch is never passed in.
140
151
  # If the `value` that's provided doesn't respond to `.call`, it's converted to a proc.
141
152
  # If `bypass` is truthy, then the default value is never passed to the block's proc (if any)
142
153
  def set_default(value, description, bypass)
154
+ if required?
155
+ raise ArgumentError, 'cannot supply a default value for a required argument'
156
+ end
157
+
143
158
  if @arg.nil? && value != true && !bypass
144
159
  raise ArgumentError, "Cannot supply a non-true default value to a flag which takes no arguments", caller(4)
145
160
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class OptParse2
4
- VERSION = "0.7.3"
4
+ VERSION = "0.7.5"
5
5
  end
data/lib/optparse2.rb CHANGED
@@ -18,7 +18,6 @@ class OptParse2
18
18
  def initialize(...)
19
19
  @defaults = Set[]
20
20
  @positional = []
21
- @required = Set[]
22
21
  @rest = nil
23
22
  @group = nil
24
23
  self.pos_set_banner = OptParse2.pos_set_banner
@@ -55,12 +54,7 @@ class OptParse2
55
54
  not_style.set_hidden if hidden
56
55
  end
57
56
 
58
- if required
59
- unless nodefault
60
- raise ArgumentError, "cannot supply both a default with required: true"
61
- end
62
- @required << sw.switch_name
63
- end
57
+ sw.set_required true if required
64
58
 
65
59
  if nodefault && default_description != nil
66
60
  raise ArgumentError, "default: not supplied, but default_description: given"
@@ -137,18 +131,23 @@ class OptParse2
137
131
  visit :each_option do |sw|
138
132
  next if !sw.default? || context.key?(key = sw.switch_name.to_sym)
139
133
 
134
+ =begin TODO: figure out how to re-parse variables (so it goes thru the whole validation scheme for defaults?)
140
135
  if sw.default_bypass?
141
136
  context[key] = sw.default
142
137
  else
143
138
  flag = sw.short.first || sw.long.first || raise("<INTERNAL ERROR: CAN THIS EVER HAPPEN?>")
144
139
  _super_order! [flag, sw.default], into: context
145
140
  end
141
+ =end
142
+ context[key] = sw.default
146
143
  end
147
144
  end
148
145
 
149
146
  private def ensure_all_required_arguments_were_supplied!(context)
150
- @required.each do |key|
151
- raise ParseError, "required option '#{key}' not provided" unless context.key? key.to_sym
147
+ visit :each_option do |sw|
148
+ next unless sw.required?
149
+ key = sw.switch_name.to_sym
150
+ raise ParseError, "required option '#{key}' not provided" unless context.key? key
152
151
  end
153
152
  end
154
153
 
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.7.3
4
+ version: 0.7.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - SamW