optparse2 0.7.5 → 0.7.7

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: 5b075c92a3cfbcdaf6d194a8c10b5a6bc1adb503cce26dc9e54d1ce98e01e234
4
- data.tar.gz: aa78b0efbaaff344675ee564c43db64b0da6118505b9bd66820925e146b8a40a
3
+ metadata.gz: 3dcc11ed7e12ad87b21d8ebe019134d532b939cae79c8ed28ad7a7306995bfc2
4
+ data.tar.gz: 492b927a81e1df4d1e0cfb7aa7f91fb8e456c31be7a04052e2f870ff8862871d
5
5
  SHA512:
6
- metadata.gz: 7b22ee332ef698a1f87daba95815adc0bb7a174e7d2985cd69f6e21fa0d038e85926a7d6a103202e2d7f26519acecdb554f75f1ba621a89e235384d0f12c8bfd
7
- data.tar.gz: 396f15d23ddd21d3a5a76b243d99fc8cd591244b3c20b1610589af661e4d8ba30c3e7aab804c6b6fdd50138f70abccd372e938be7c4c17c7377f16cb875f2e27
6
+ metadata.gz: 420612dd7c3d50fff1ddff3fdfa9c87bfd05bb58f01036450a348d7ee7109cd8cf320c39382566d1d7f341b0402f09c9439dde39e20a7f732bc013c2fe60cf40
7
+ data.tar.gz: a5e696e36c4206f75531d11157743462edc0ca1500b7100ac7f85fcf4a87b791b5a9758794d1181380e4da048ad8ef633aabf955803e3c3e745c63c7532a9f9c
@@ -0,0 +1,48 @@
1
+ class OptParse2
2
+ def switch(*pos, &block)
3
+ Builder.new(pos, block, self)
4
+ end
5
+
6
+ class Builder
7
+ def initialize(positional, block, optparse2)
8
+ @positional, @block, @optparse2 = positional, block, optparse2
9
+ @args = {}
10
+ end
11
+
12
+ def build!
13
+ @optparse2.on(*@positional, **@args, &@block)
14
+ end
15
+
16
+ def block(&block)
17
+ raise LocalJumpError unless defined? yield
18
+ @block = block
19
+ self
20
+ end
21
+
22
+ def hidden(hidden = true)
23
+ @args[:hidden] = hidden
24
+ self
25
+ end
26
+
27
+ def default(value = novalue=true, description: nodescription=true, &block)
28
+ if novalue.nil? != block.nil?
29
+ raise ArgumentError, "Exactly one of a positional argument or a block can be given"
30
+ end
31
+
32
+ @args[:default] = (novalue ? block : proc { value })
33
+ @args[:default_description] = description unless nodescription
34
+ self
35
+ end
36
+
37
+ def key(key)
38
+ @args[:key] = key
39
+ self
40
+ end
41
+
42
+ def required(required = true)
43
+ @args[:required] = required
44
+ self
45
+ end
46
+ end
47
+ end
48
+
@@ -172,15 +172,30 @@ class OptParse2
172
172
  # Calls the default proc to figure out what the default value is for this switch
173
173
  def default_bypass? = @default_bypass
174
174
  def default? = defined?(@default_proc)
175
- def default = @default_proc&.call(switch_name)
175
+ def default
176
+ return unless default?
177
+ if defined? @__default_value_after_calling_proc__
178
+ @__default_value_after_calling_proc__
179
+ else
180
+ @__default_value_after_calling_proc__ = @default_proc&.call(switch_name)
181
+ end
182
+ end
176
183
 
177
- def default_description = @default_description || default.inspect
178
184
  def desc
179
- return super unless defined? @default_proc
180
- x = super
181
- x << '' if x.empty?
182
- x[-1] += " [default: #{default_description}]"
183
- x
185
+ super_desc = super
186
+ return super_desc unless defined? @default_proc
187
+
188
+ if !@default_description
189
+ return super_desc
190
+ end
191
+
192
+ super_desc << '' if super_desc.empty?
193
+ super_desc[-1] += " [default"
194
+ if @default_description != true
195
+ super_desc.last.concat ": #{@default_description == :__TODO_DEFAULT__ ? default : @default_description}"
196
+ end
197
+ super_desc.last.concat ']'
198
+ super_desc
184
199
  end
185
200
  end
186
201
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class OptParse2
4
- VERSION = "0.7.5"
4
+ VERSION = "0.7.7"
5
5
  end
data/lib/optparse2.rb CHANGED
@@ -8,6 +8,7 @@ require_relative "optparse2/version"
8
8
  require_relative "optparse2/fixes"
9
9
  require_relative "optparse2/switch-helpers"
10
10
  require_relative "optparse2/context"
11
+ require_relative "optparse2/builder"
11
12
 
12
13
  class OptParse2
13
14
  class << self
@@ -35,7 +36,7 @@ class OptParse2
35
36
  key: @group,
36
37
  default: nodefault=true,
37
38
  default_bypass: false,
38
- default_description: nil,
39
+ default_description: :__TODO_DEFAULT__,
39
40
  required: false,
40
41
  multiple: nil
41
42
  )
@@ -56,7 +57,7 @@ class OptParse2
56
57
 
57
58
  sw.set_required true if required
58
59
 
59
- if nodefault && default_description != nil
60
+ if nodefault && default_description != :__TODO_DEFAULT__
60
61
  raise ArgumentError, "default: not supplied, but default_description: given"
61
62
  elsif nodefault && default_bypass
62
63
  raise ArgumentError, "default: not supplied, but default_bypass: given"
@@ -270,6 +271,23 @@ class OptParse2
270
271
  end
271
272
  end
272
273
 
274
+ __END__
275
+
276
+ OptParse2.new do |op|
277
+ op.switch('-f', '--foo=BAR', 'does it')
278
+ .default { p $x += 1 }
279
+ .build!
280
+ op.parse! into: opts={}
281
+ p opts
282
+ p $x
283
+ end
284
+
285
+ __END__
286
+ OptParse2.new do |op|
287
+ op.on '-f', '--foo=BAR', 'does it', default: 10, default_description: nil
288
+ puts op.help
289
+ end
290
+
273
291
  __END__
274
292
  OptParse2.new do |op|
275
293
  op.on '--foo=FOO', multiple: :first! do puts "FOO: #{it}"; it 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.7.5
4
+ version: 0.7.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - SamW
@@ -19,6 +19,7 @@ files:
19
19
  - README.md
20
20
  - Rakefile
21
21
  - lib/optparse2.rb
22
+ - lib/optparse2/builder.rb
22
23
  - lib/optparse2/context.rb
23
24
  - lib/optparse2/fixes.rb
24
25
  - lib/optparse2/pathname.rb