benry-cmdopt 2.0.2 → 2.2.0
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 +4 -4
- data/CHANGES.md +15 -0
- data/README.md +37 -12
- data/benry-cmdopt.gemspec +1 -1
- data/doc/benry-cmdopt.html +35 -11
- data/lib/benry/cmdopt.rb +43 -12
- data/test/cmdopt_test.rb +80 -10
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 9308d0182f3f4a17d45f3b7a1f212a4f5f2112f4084d725b2de05271a908bb1d
|
|
4
|
+
data.tar.gz: f9b8e9066b9857d2693382f03bcbeacdd040695287d426d8ef8c28cf242f1cd1
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e231075a8a9fdd99a0379390ebc1fae07c812f8229d1689e0b7f04b91d5c0c596122835dde000c3ba609681898c3048fa51d08232cd33d4b9df0bacbc22036c6
|
|
7
|
+
data.tar.gz: bcabe45f475efd7c95e989c9f7f2c9b61c65396b6373cbb0a68427ce10798a942c4af3cfd8ae66a34928c710b2cac24388d8848a6a1271ca40d3e9458a217898
|
data/CHANGES.md
CHANGED
|
@@ -2,6 +2,21 @@ CHANGES
|
|
|
2
2
|
=======
|
|
3
3
|
|
|
4
4
|
|
|
5
|
+
Release 2.2.0 (2023-10-28)
|
|
6
|
+
--------------------------
|
|
7
|
+
|
|
8
|
+
* [enhance] Define `SchemaItem#add_item()` which adds option item into the schema. This is for Benry-CmdApp framework.
|
|
9
|
+
* [change] (EXPERIMENTAL) Make `desc`, `detail`, `hidden`, `important`, `tag` attrubtes of `SchemaItem` object to be writable. This is for Benry-CmdApp framework.
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
Release 2.1.0 (2023-10-15)
|
|
13
|
+
--------------------------
|
|
14
|
+
|
|
15
|
+
* [enhance] Add `hidden: true` keyword argument to `Benry::Schema#add()` and `Benry::Facade#add()`. This keyword argument makes the option as hidden option.
|
|
16
|
+
* [change] Option which name stars with '_' is now not regarded as hidden option. Use `hidden: true` instead.
|
|
17
|
+
* [enhance] Add `important: (true|false)` keyword argument to `Benry::Schema#add()` and `Benry::Facade#add()`. This keyword argument makes help message of the option printed in decorated format.
|
|
18
|
+
|
|
19
|
+
|
|
5
20
|
Release 2.0.2 (2023-10-12)
|
|
6
21
|
--------------------------
|
|
7
22
|
|
data/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Benry-CmdOpt
|
|
2
2
|
|
|
3
|
-
($Release: 2.0
|
|
3
|
+
($Release: 2.2.0 $)
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
|
|
@@ -38,6 +38,7 @@ Benry-CmdOpt requires Ruby >= 2.3.
|
|
|
38
38
|
* [Global Options with Sub-Commands](#global-options-with-sub-commands)
|
|
39
39
|
* [Detailed Description of Option](#detailed-description-of-option)
|
|
40
40
|
* [Option Tag](#option-tag)
|
|
41
|
+
* [Important Options](#important-options)
|
|
41
42
|
* [Not Supported](#not-supported)
|
|
42
43
|
* [Internal Classes](#internal-classes)
|
|
43
44
|
* [License and Copyright](#license-and-copyright)
|
|
@@ -470,22 +471,20 @@ p options #=> {:lib=>["foo", "bar", "baz"]}
|
|
|
470
471
|
|
|
471
472
|
Benry-CmdOpt regards the following options as hidden.
|
|
472
473
|
|
|
473
|
-
*
|
|
474
|
+
* Keyword argument `hidden: true` is passed to `.add()` method.
|
|
474
475
|
* Or description is nil.
|
|
475
476
|
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
These hidden options are not included in help message.
|
|
477
|
+
Hidden options are not included in help message.
|
|
479
478
|
|
|
480
479
|
```ruby
|
|
481
480
|
require 'benry/cmdopt'
|
|
482
481
|
cmdopt = Benry::CmdOpt.new
|
|
483
|
-
cmdopt.add(:help
|
|
484
|
-
cmdopt.add(:
|
|
485
|
-
cmdopt.add(:
|
|
482
|
+
cmdopt.add(:help , '-h', "help message")
|
|
483
|
+
cmdopt.add(:logging, '-L', "logging", hidden: true) # hidden
|
|
484
|
+
cmdopt.add(:debug , '-D', nil) # hidden (desc is nil)
|
|
486
485
|
puts cmdopt.to_s()
|
|
487
486
|
|
|
488
|
-
### output (neither '-
|
|
487
|
+
### output (neither '-L' nor '-D' is shown because hidden options)
|
|
489
488
|
# -h : help message
|
|
490
489
|
```
|
|
491
490
|
|
|
@@ -497,8 +496,8 @@ puts cmdopt.to_s(all: true) # or: cmdopt.to_s(nil, all: true)
|
|
|
497
496
|
|
|
498
497
|
### output
|
|
499
498
|
# -h : help message
|
|
500
|
-
# -D :
|
|
501
499
|
# -L : logging
|
|
500
|
+
# -D :
|
|
502
501
|
```
|
|
503
502
|
|
|
504
503
|
|
|
@@ -613,11 +612,37 @@ end
|
|
|
613
612
|
```
|
|
614
613
|
|
|
615
614
|
|
|
615
|
+
### Important Options
|
|
616
|
+
|
|
617
|
+
You can specify that the option is important or not.
|
|
618
|
+
Pass `important: true` or `important: false` keyword argument to `#add()` method of `Benry::CmdOpt` or `Benry::CmdOpt::Schema` object.
|
|
619
|
+
|
|
620
|
+
The help message of options is decorated according to value of `important:` keyword argument.
|
|
621
|
+
|
|
622
|
+
* Printed in bold font when `important: true` specified to the option.
|
|
623
|
+
* Printed in gray color when `important: false` specified to the option.
|
|
624
|
+
|
|
625
|
+
```ruby
|
|
626
|
+
require 'benry/cmdopt'
|
|
627
|
+
|
|
628
|
+
cmdopt = Benry::CmdOpt.new()
|
|
629
|
+
cmdopt.add(:help , "-h", "help message")
|
|
630
|
+
cmdopt.add(:verbose, "-v", "verbose mode", important: true) # !!!
|
|
631
|
+
cmdopt.add(:debug , "-D", "debug mode" , important: false) # !!!
|
|
632
|
+
puts cmdopt.option_help()
|
|
633
|
+
|
|
634
|
+
## output:
|
|
635
|
+
# -h : help message
|
|
636
|
+
# -v : verbose mode # bold font
|
|
637
|
+
# -D : debug mode # gray color
|
|
638
|
+
```
|
|
639
|
+
|
|
640
|
+
|
|
616
641
|
### Not Supported
|
|
617
642
|
|
|
618
|
-
* default value
|
|
643
|
+
* default value when the option not specified in command-line
|
|
619
644
|
* `--no-xxx` style option
|
|
620
|
-
* bash/zsh completion
|
|
645
|
+
* bash/zsh completion (may be supported in the future)
|
|
621
646
|
* I18N of error message (may be supported in the future)
|
|
622
647
|
|
|
623
648
|
|
data/benry-cmdopt.gemspec
CHANGED
data/doc/benry-cmdopt.html
CHANGED
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
<ul class="nav">
|
|
22
22
|
</ul>
|
|
23
23
|
</nav>
|
|
24
|
-
<p>($Release: 2.0
|
|
24
|
+
<p>($Release: 2.2.0 $)</p>
|
|
25
25
|
<section class="section" id="whats-this">
|
|
26
26
|
<h2>What's This?</h2>
|
|
27
27
|
<p>Benry-CmdOpt is a command option parser library, like <code>optparse.rb</code>
|
|
@@ -53,6 +53,7 @@ and easy to understahnd.</p>
|
|
|
53
53
|
<li><a href="#global-options-with-sub-commands">Global Options with Sub-Commands</a></li>
|
|
54
54
|
<li><a href="#detailed-description-of-option">Detailed Description of Option</a></li>
|
|
55
55
|
<li><a href="#option-tag">Option Tag</a></li>
|
|
56
|
+
<li><a href="#important-options">Important Options</a></li>
|
|
56
57
|
<li><a href="#not-supported">Not Supported</a></li>
|
|
57
58
|
</ul></li>
|
|
58
59
|
<li><a href="#internal-classes">Internal Classes</a></li>
|
|
@@ -462,20 +463,19 @@ p options #=> <strong>{:lib=>["foo", "bar", "baz"]}</strong>
|
|
|
462
463
|
<h3>Hidden Option</h3>
|
|
463
464
|
<p>Benry-CmdOpt regards the following options as hidden.</p>
|
|
464
465
|
<ul>
|
|
465
|
-
<li>
|
|
466
|
+
<li>Keyword argument <code>hidden: true</code> is passed to <code>.add()</code> method.</li>
|
|
466
467
|
<li>Or description is nil.</li>
|
|
467
468
|
</ul>
|
|
468
|
-
<p>
|
|
469
|
-
<p>These hidden options are not included in help message.</p>
|
|
469
|
+
<p>Hidden options are not included in help message.</p>
|
|
470
470
|
<pre class="language-ruby">
|
|
471
471
|
require 'benry/cmdopt'
|
|
472
472
|
cmdopt = Benry::CmdOpt.new
|
|
473
|
-
cmdopt.add(:help
|
|
474
|
-
cmdopt.add(:
|
|
475
|
-
cmdopt.add(
|
|
473
|
+
cmdopt.add(:help , '-h', "help message")
|
|
474
|
+
cmdopt.add(:logging, '-L', "logging", <strong>hidden: true</strong>) # hidden
|
|
475
|
+
cmdopt.add(:debug , '-D', <strong>nil</strong>) # hidden (desc is nil)
|
|
476
476
|
puts cmdopt.to_s()
|
|
477
477
|
|
|
478
|
-
### output (neither '-
|
|
478
|
+
### output (neither '-L' nor '-D' is shown because hidden options)
|
|
479
479
|
# -h : help message
|
|
480
480
|
</pre>
|
|
481
481
|
<p>To show all options including hidden ones, add <code>all: true</code> to <code>cmdopt.to_s()</code>.</p>
|
|
@@ -485,8 +485,8 @@ puts cmdopt.to_s(<strong>all: true</strong>) # or: cmdopt.to_s(nil, all: true)
|
|
|
485
485
|
|
|
486
486
|
### output
|
|
487
487
|
# -h : help message
|
|
488
|
-
# <strong>-D :</strong>
|
|
489
488
|
# <strong>-L : logging</strong>
|
|
489
|
+
# <strong>-D : </strong>
|
|
490
490
|
</pre>
|
|
491
491
|
</section>
|
|
492
492
|
<section class="subsection" id="global-options-with-sub-commands">
|
|
@@ -591,12 +591,36 @@ end
|
|
|
591
591
|
#version: <strong>tag=nil</strong>
|
|
592
592
|
</pre>
|
|
593
593
|
</section>
|
|
594
|
+
<section class="subsection" id="important-options">
|
|
595
|
+
<h3>Important Options</h3>
|
|
596
|
+
<p>You can specify that the option is important or not.
|
|
597
|
+
Pass <code>important: true</code> or <code>important: false</code> keyword argument to <code>#add()</code> method of <code>Benry::CmdOpt</code> or <code>Benry::CmdOpt::Schema</code> object.</p>
|
|
598
|
+
<p>The help message of options is decorated according to value of <code>important:</code> keyword argument.</p>
|
|
599
|
+
<ul>
|
|
600
|
+
<li>Printed in bold font when <code>important: true</code> specified to the option.</li>
|
|
601
|
+
<li>Printed in gray color when <code>important: false</code> specified to the option.</li>
|
|
602
|
+
</ul>
|
|
603
|
+
<pre class="language-ruby">
|
|
604
|
+
require 'benry/cmdopt'
|
|
605
|
+
|
|
606
|
+
cmdopt = Benry::CmdOpt.new()
|
|
607
|
+
cmdopt.add(:help , "-h", "help message")
|
|
608
|
+
cmdopt.add(:verbose, "-v", "verbose mode", <strong>important: true</strong>) # !!!
|
|
609
|
+
cmdopt.add(:debug , "-D", "debug mode" , <strong>important: false</strong>) # !!!
|
|
610
|
+
puts cmdopt.option_help()
|
|
611
|
+
|
|
612
|
+
## output:
|
|
613
|
+
# -h : help message
|
|
614
|
+
# -v : verbose mode # bold font
|
|
615
|
+
# -D : debug mode # gray color
|
|
616
|
+
</pre>
|
|
617
|
+
</section>
|
|
594
618
|
<section class="subsection" id="not-supported">
|
|
595
619
|
<h3>Not Supported</h3>
|
|
596
620
|
<ul>
|
|
597
|
-
<li>default value</li>
|
|
621
|
+
<li>default value when the option not specified in command-line</li>
|
|
598
622
|
<li><code>--no-xxx</code> style option</li>
|
|
599
|
-
<li>bash/zsh completion</li>
|
|
623
|
+
<li>bash/zsh completion (may be supported in the future)</li>
|
|
600
624
|
<li>I18N of error message (may be supported in the future)</li>
|
|
601
625
|
</ul>
|
|
602
626
|
</section>
|
data/lib/benry/cmdopt.rb
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
# frozen_string_literal: true
|
|
3
3
|
|
|
4
4
|
###
|
|
5
|
-
### $Release: 2.0
|
|
5
|
+
### $Release: 2.2.0 $
|
|
6
6
|
### $Copyright: copyright(c) 2021 kwatch@gmail.com $
|
|
7
7
|
### $License: MIT License $
|
|
8
8
|
###
|
|
@@ -23,7 +23,7 @@ end
|
|
|
23
23
|
module Benry::CmdOpt
|
|
24
24
|
|
|
25
25
|
|
|
26
|
-
VERSION = '$Release: 2.0
|
|
26
|
+
VERSION = '$Release: 2.2.0 $'.split()[1]
|
|
27
27
|
|
|
28
28
|
|
|
29
29
|
def self.new()
|
|
@@ -40,11 +40,11 @@ module Benry::CmdOpt
|
|
|
40
40
|
|
|
41
41
|
attr_reader :schema
|
|
42
42
|
|
|
43
|
-
def add(key, optdef, desc, *rest, type: nil, rexp: nil, pattern: nil, enum: nil, range: nil, value: nil, detail: nil, tag: nil, &callback)
|
|
43
|
+
def add(key, optdef, desc, *rest, type: nil, rexp: nil, pattern: nil, enum: nil, range: nil, value: nil, detail: nil, hidden: nil, important: nil, tag: nil, &callback)
|
|
44
44
|
rexp ||= pattern # for backward compatibility
|
|
45
45
|
#; [!vmb3r] defines command option.
|
|
46
46
|
#; [!71cvg] type, rexp, enum, and range are can be passed as positional args as well as keyword args.
|
|
47
|
-
@schema.add(key, optdef, desc, *rest, type: type, rexp: rexp, enum: enum, range: range, value: value, detail: detail, tag: tag, &callback)
|
|
47
|
+
@schema.add(key, optdef, desc, *rest, type: type, rexp: rexp, enum: enum, range: range, value: value, detail: detail, hidden: hidden, important: important, tag: tag, &callback)
|
|
48
48
|
#; [!tu4k3] returns self.
|
|
49
49
|
self
|
|
50
50
|
end
|
|
@@ -103,7 +103,7 @@ module Benry::CmdOpt
|
|
|
103
103
|
self
|
|
104
104
|
end
|
|
105
105
|
|
|
106
|
-
def add(key, optdef, desc, *rest, type: nil, rexp: nil, pattern: nil, enum: nil, range: nil, value: nil, detail: nil, tag: nil, &callback)
|
|
106
|
+
def add(key, optdef, desc, *rest, type: nil, rexp: nil, pattern: nil, enum: nil, range: nil, value: nil, detail: nil, hidden: nil, important: nil, tag: nil, &callback)
|
|
107
107
|
rexp ||= pattern # for backward compatibility
|
|
108
108
|
#; [!kuhf9] type, rexp, enum, and range are can be passed as positional args as well as keyword args.
|
|
109
109
|
rest.each do |x|
|
|
@@ -137,11 +137,17 @@ module Benry::CmdOpt
|
|
|
137
137
|
end
|
|
138
138
|
#; [!yht0v] keeps command option definitions.
|
|
139
139
|
item = SchemaItem.new(key, optdef, desc, short, long, param, required,
|
|
140
|
-
type: type, rexp: rexp, enum: enum, range: range, value: value, detail: detail, tag: tag, &callback)
|
|
140
|
+
type: type, rexp: rexp, enum: enum, range: range, value: value, detail: detail, hidden: hidden, important: important, tag: tag, &callback)
|
|
141
141
|
@items << item
|
|
142
142
|
item
|
|
143
143
|
end
|
|
144
144
|
|
|
145
|
+
def add_item(item)
|
|
146
|
+
#; [!a693h] adds option item into current schema.
|
|
147
|
+
@items << item
|
|
148
|
+
self
|
|
149
|
+
end
|
|
150
|
+
|
|
145
151
|
def option_help(width_or_format=nil, all: false)
|
|
146
152
|
#; [!0aq0i] can take integer as width.
|
|
147
153
|
#; [!pcsah] can take format string.
|
|
@@ -157,10 +163,16 @@ module Benry::CmdOpt
|
|
|
157
163
|
#; [!to1th] includes all option help when `all` is true.
|
|
158
164
|
#; [!a4qe4] option should not be hidden if description is empty string.
|
|
159
165
|
sb = []
|
|
160
|
-
width = nil; indent = nil
|
|
161
|
-
|
|
162
|
-
|
|
166
|
+
width = nil; indent = nil; color_p = $stdout.tty?
|
|
167
|
+
@items.each do |item|
|
|
168
|
+
next if ! all && item.hidden?
|
|
169
|
+
#; [!jrwb6] decorates help message according to `important:` value of option.
|
|
170
|
+
#; [!9nlfb] not decorate help message when stdout is not a tty.
|
|
171
|
+
s = format % [item.optdef, item.desc || ""]
|
|
172
|
+
s = _decorate_str(s, item.important?) if color_p
|
|
173
|
+
sb << s << "\n"
|
|
163
174
|
#; [!848rm] supports multi-lines help message.
|
|
175
|
+
detail = item.detail
|
|
164
176
|
if detail
|
|
165
177
|
width ||= (format % ['', '']).length
|
|
166
178
|
indent ||= ' ' * width
|
|
@@ -276,12 +288,20 @@ module Benry::CmdOpt
|
|
|
276
288
|
return short_p ? 8 : long_p ? 20 : 14
|
|
277
289
|
end
|
|
278
290
|
|
|
291
|
+
def _decorate_str(str, important)
|
|
292
|
+
case important
|
|
293
|
+
when true ; return "\e[1m#{str}\e[0m" # bold
|
|
294
|
+
when false ; return "\e[2m#{str}\e[0m" # gray
|
|
295
|
+
else ; return str
|
|
296
|
+
end
|
|
297
|
+
end
|
|
298
|
+
|
|
279
299
|
end
|
|
280
300
|
|
|
281
301
|
|
|
282
302
|
class SchemaItem # avoid Struct
|
|
283
303
|
|
|
284
|
-
def initialize(key, optdef, desc, short, long, param, required, type: nil, rexp: nil, pattern: nil, enum: nil, range: nil, detail: nil, value: nil, tag: nil, &callback)
|
|
304
|
+
def initialize(key, optdef, desc, short, long, param, required, type: nil, rexp: nil, pattern: nil, enum: nil, range: nil, detail: nil, value: nil, hidden: nil, important: nil, tag: nil, &callback)
|
|
285
305
|
rexp ||= pattern # for backward compatibility
|
|
286
306
|
_init_validation(param, required, type, rexp, enum, range, value)
|
|
287
307
|
@key = key unless nil == key
|
|
@@ -297,6 +317,8 @@ module Benry::CmdOpt
|
|
|
297
317
|
@range = range unless nil == range
|
|
298
318
|
@detail = detail unless nil == detail
|
|
299
319
|
@value = value unless nil == value
|
|
320
|
+
@hidden = hidden unless nil == hidden
|
|
321
|
+
@important = important unless nil == important
|
|
300
322
|
@tag = tag unless nil == tag
|
|
301
323
|
@callback = callback unless nil == callback
|
|
302
324
|
#; [!nn4cp] freezes enum object.
|
|
@@ -304,6 +326,7 @@ module Benry::CmdOpt
|
|
|
304
326
|
end
|
|
305
327
|
|
|
306
328
|
attr_reader :key, :optdef, :desc, :short, :long, :param, :type, :rexp, :enum, :range, :detail, :value, :tag, :callback
|
|
329
|
+
attr_writer :desc, :detail, :hidden, :important, :tag # !!experimental!!
|
|
307
330
|
alias pattern rexp # for backward compatibility
|
|
308
331
|
alias help desc # for backward compatibility
|
|
309
332
|
|
|
@@ -324,10 +347,18 @@ module Benry::CmdOpt
|
|
|
324
347
|
end
|
|
325
348
|
|
|
326
349
|
def hidden?()
|
|
350
|
+
#; [!no6ov] returns true if @hidden is true.
|
|
351
|
+
#; [!ej8ot] returns false if @hidden is false.
|
|
352
|
+
return @hidden if @hidden != nil
|
|
327
353
|
#; [!h0uxs] returns true if desc is nil.
|
|
328
|
-
#; [!su00g] returns true if key starts with '_'.
|
|
329
354
|
#; [!28vzx] returns false if else.
|
|
330
|
-
return @desc == nil
|
|
355
|
+
return @desc == nil
|
|
356
|
+
end
|
|
357
|
+
|
|
358
|
+
def important?()
|
|
359
|
+
#; [!ua8kt] returns true/false if `important:` kwarg passed to constructor.
|
|
360
|
+
#; [!hz9sx] returns nil if `important:` kwarg not passed to constructor.
|
|
361
|
+
return @important
|
|
331
362
|
end
|
|
332
363
|
|
|
333
364
|
def validate_and_convert(val, optdict)
|
data/test/cmdopt_test.rb
CHANGED
|
@@ -256,6 +256,19 @@ Oktest.scope do
|
|
|
256
256
|
end
|
|
257
257
|
|
|
258
258
|
|
|
259
|
+
topic '#add_item()' do
|
|
260
|
+
|
|
261
|
+
spec "[!a693h] adds option item into current schema." do
|
|
262
|
+
item = Benry::CmdOpt::SchemaItem.new(:quiet, "-q", "quiet", "q", nil, nil, false)
|
|
263
|
+
sc = Benry::CmdOpt::Schema.new
|
|
264
|
+
sc.add_item(item)
|
|
265
|
+
ok {sc.to_s} == <<"END"
|
|
266
|
+
-q : quiet
|
|
267
|
+
END
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
end
|
|
271
|
+
|
|
259
272
|
topic '#option_help()' do
|
|
260
273
|
|
|
261
274
|
before do
|
|
@@ -342,13 +355,49 @@ END
|
|
|
342
355
|
spec "[!a4qe4] option should not be hidden if description is empty string." do
|
|
343
356
|
sc = Benry::CmdOpt::Schema.new
|
|
344
357
|
sc.add(:debug , "-D", nil) # hidden
|
|
345
|
-
sc.add(:
|
|
358
|
+
sc.add(:trace, "-T", "trace", hidden: true) # hidden
|
|
346
359
|
sc.add(:what , "-W", "") # NOT hidden!
|
|
347
360
|
ok {sc.option_help()} == <<END
|
|
348
361
|
-W :
|
|
349
362
|
END
|
|
350
363
|
end
|
|
351
364
|
|
|
365
|
+
fixture :schema_with_importance do
|
|
366
|
+
sc = Benry::CmdOpt::Schema.new
|
|
367
|
+
sc.add(:help , "-h, --help" , "help message")
|
|
368
|
+
sc.add(:trace , "-T, --trace", "trace" , important: true)
|
|
369
|
+
sc.add(:debug , "-D, --debug", "debug mode" , important: false)
|
|
370
|
+
sc.add(:quiet , "-q, --quiet", "quiet mode")
|
|
371
|
+
sc
|
|
372
|
+
end
|
|
373
|
+
|
|
374
|
+
spec "[!jrwb6] decorates help message according to `important:` value of option." do
|
|
375
|
+
|schema_with_importance|
|
|
376
|
+
sc = schema_with_importance
|
|
377
|
+
ok {sc.option_help()} == <<END
|
|
378
|
+
-h, --help : help message
|
|
379
|
+
\e[1m -T, --trace : trace\e[0m
|
|
380
|
+
\e[2m -D, --debug : debug mode\e[0m
|
|
381
|
+
-q, --quiet : quiet mode
|
|
382
|
+
END
|
|
383
|
+
end
|
|
384
|
+
|
|
385
|
+
spec "[!9nlfb] not decorate help message when stdout is not a tty." do
|
|
386
|
+
|schema_with_importance|
|
|
387
|
+
sc = schema_with_importance
|
|
388
|
+
output = nil
|
|
389
|
+
capture_sio() {
|
|
390
|
+
ok {$stdout}.NOT.tty?
|
|
391
|
+
output = sc.option_help()
|
|
392
|
+
}
|
|
393
|
+
ok {output} == <<END
|
|
394
|
+
-h, --help : help message
|
|
395
|
+
-T, --trace : trace
|
|
396
|
+
-D, --debug : debug mode
|
|
397
|
+
-q, --quiet : quiet mode
|
|
398
|
+
END
|
|
399
|
+
end
|
|
400
|
+
|
|
352
401
|
end
|
|
353
402
|
|
|
354
403
|
|
|
@@ -445,7 +494,7 @@ END
|
|
|
445
494
|
sc.add(:help, "-h, --help", "show help message")
|
|
446
495
|
sc.add(:version, " --version", "print version")
|
|
447
496
|
sc.add(:debug , "-d, --debug" , nil) # hidden
|
|
448
|
-
sc.add(:
|
|
497
|
+
sc.add(:DEBUG , "-D, --DEBUG" , "debug mode", hidden: true) # hidden
|
|
449
498
|
@schema = sc
|
|
450
499
|
end
|
|
451
500
|
|
|
@@ -532,7 +581,7 @@ END
|
|
|
532
581
|
spec "[!icvm1] ignores hidden items if 'all: false' kwarg specified." do
|
|
533
582
|
schema = Benry::CmdOpt::Schema.new
|
|
534
583
|
schema.add(:debug , "-D", nil)
|
|
535
|
-
schema.add(:
|
|
584
|
+
schema.add(:trace, "-T", "trace", hidden: true)
|
|
536
585
|
ok {schema.empty?()} == false
|
|
537
586
|
ok {schema.empty?(all: true)} == false
|
|
538
587
|
ok {schema.empty?(all: false)} == true
|
|
@@ -898,15 +947,19 @@ END
|
|
|
898
947
|
|
|
899
948
|
topic '#hidden?()' do
|
|
900
949
|
|
|
901
|
-
spec "[!
|
|
902
|
-
|
|
903
|
-
item = Benry::CmdOpt::SchemaItem.new(:debug, "-D", desc, "D", nil, nil, nil)
|
|
950
|
+
spec "[!no6ov] returns true if @hidden is true." do
|
|
951
|
+
item = Benry::CmdOpt::SchemaItem.new(:debug, "-D", "debug mode", "D", nil, nil, nil, hidden: true)
|
|
904
952
|
ok {item.hidden?} == true
|
|
905
953
|
end
|
|
906
954
|
|
|
907
|
-
spec "[!
|
|
908
|
-
|
|
909
|
-
item
|
|
955
|
+
spec "[!ej8ot] returns false if @hidden is false." do
|
|
956
|
+
item = Benry::CmdOpt::SchemaItem.new(:debug, "-D", "debug mode", "D", nil, nil, nil, hidden: false)
|
|
957
|
+
ok {item.hidden?} == false
|
|
958
|
+
end
|
|
959
|
+
|
|
960
|
+
spec "[!h0uxs] returns true if desc is nil." do
|
|
961
|
+
desc = nil
|
|
962
|
+
item = Benry::CmdOpt::SchemaItem.new(:debug, "-D", desc, "D", nil, nil, nil)
|
|
910
963
|
ok {item.hidden?} == true
|
|
911
964
|
end
|
|
912
965
|
|
|
@@ -919,6 +972,23 @@ END
|
|
|
919
972
|
end
|
|
920
973
|
|
|
921
974
|
|
|
975
|
+
topic '#important?()' do
|
|
976
|
+
|
|
977
|
+
spec "[!ua8kt] returns true/false if `important:` kwarg passed to constructor." do
|
|
978
|
+
item1 = Benry::CmdOpt::SchemaItem.new(:debug, "-D", "debug mode", "D", nil, nil, nil, important: true)
|
|
979
|
+
ok {item1.important?} == true
|
|
980
|
+
item2 = Benry::CmdOpt::SchemaItem.new(:debug, "-D", "debug mode", "D", nil, nil, nil, important: false)
|
|
981
|
+
ok {item2.important?} == false
|
|
982
|
+
end
|
|
983
|
+
|
|
984
|
+
spec "[!hz9sx] returns nil if `important:` kwarg not passed to constructor." do
|
|
985
|
+
item3 = Benry::CmdOpt::SchemaItem.new(:debug, "-D", "debug mode", "D", nil, nil, nil)
|
|
986
|
+
ok {item3.important?} == nil
|
|
987
|
+
end
|
|
988
|
+
|
|
989
|
+
end
|
|
990
|
+
|
|
991
|
+
|
|
922
992
|
topic '#validate_and_convert()' do
|
|
923
993
|
|
|
924
994
|
def new_item(key, optstr, desc, short, long, param, required,
|
|
@@ -1520,7 +1590,7 @@ END
|
|
|
1520
1590
|
@cmdopt.add(:help , "-h, --help" , "show help message")
|
|
1521
1591
|
@cmdopt.add(:version, " --version" , "print version")
|
|
1522
1592
|
@cmdopt.add(:debug , "-D" , nil) # hidden option
|
|
1523
|
-
@cmdopt.add(:
|
|
1593
|
+
@cmdopt.add(:trace , "-T" , "trace", hidden: true) # hidden option
|
|
1524
1594
|
end
|
|
1525
1595
|
|
|
1526
1596
|
spec "[!bw9qx] yields each option definition string and help message." do
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: benry-cmdopt
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.0
|
|
4
|
+
version: 2.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- kwatch
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2023-10-
|
|
11
|
+
date: 2023-10-28 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: oktest
|