benry-cmdopt 2.0.1 → 2.1.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 +4 -5
- data/doc/benry-cmdopt.html +35 -11
- data/lib/benry/cmdopt.rb +37 -13
- data/test/cmdopt_test.rb +84 -10
- metadata +2 -7
- data/Rakefile.rb +0 -11
- data/task/common-task.rb +0 -139
- data/task/package-task.rb +0 -72
- data/task/readme-task.rb +0 -125
- data/task/test-task.rb +0 -81
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5e37b3eb5a8294bfae3627f384720f843e2c6ae9c79ec0cc704b732368d46437
|
4
|
+
data.tar.gz: 3a3b34226485ae5c0aaa3f3b90d6ba281b34f7843d5e03179235784af0fc2467
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f1aae8384f952ddbc0ba5408e39e5b289d09c9b9e768a4cee237c723d7f0bef459b2ab7c8e3639705e8495790fb02bb6fced99bf9a3676e772d4b0c2d622961d
|
7
|
+
data.tar.gz: 737074f681fa450d2e0fc9b82b85aedba8088db313b522c32b1c01cae6a68ed091da08ca437f58e543b0a6d896618c42a078ded25bba9fba971c3e3ec90bc82f
|
data/CHANGES.md
CHANGED
@@ -2,6 +2,21 @@ CHANGES
|
|
2
2
|
=======
|
3
3
|
|
4
4
|
|
5
|
+
Release 2.1.0 (2023-10-15)
|
6
|
+
--------------------------
|
7
|
+
|
8
|
+
* [enhance] Add `hidden: true` keyword argument to `Benry::Schema#add()` and `Benry::Facade#add()`. This keyword argument makes the option as hidden option.
|
9
|
+
* [change] Option which name stars with '_' is now not regarded as hidden option. Use `hidden: true` instead.
|
10
|
+
* [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.
|
11
|
+
|
12
|
+
|
13
|
+
Release 2.0.2 (2023-10-12)
|
14
|
+
--------------------------
|
15
|
+
|
16
|
+
* [change] remove unnecessary files from gem.
|
17
|
+
* [bugfix] fix to add missing test cases.
|
18
|
+
|
19
|
+
|
5
20
|
Release 2.0.1 (2023-10-11)
|
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.1.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
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |spec|
|
4
4
|
spec.name = "benry-cmdopt"
|
5
|
-
spec.version = "$Release: 2.0
|
5
|
+
spec.version = "$Release: 2.1.0 $".split()[1]
|
6
6
|
spec.author = "kwatch"
|
7
7
|
spec.email = "kwatch@gmail.com"
|
8
8
|
spec.platform = Gem::Platform::RUBY
|
@@ -16,10 +16,9 @@ END
|
|
16
16
|
spec.license = "MIT"
|
17
17
|
spec.files = Dir[
|
18
18
|
"README.md", "MIT-LICENSE", "CHANGES.md",
|
19
|
-
"
|
20
|
-
"lib/**/*.rb", "test/**/*.rb", "
|
21
|
-
|
22
|
-
"doc/*.html", "doc/css/*",
|
19
|
+
"#{spec.name}.gemspec",
|
20
|
+
"lib/**/*.rb", "test/**/*.rb", #"bin/*", "examples/**/*",
|
21
|
+
"doc/*.html", "doc/css/*.css",
|
23
22
|
]
|
24
23
|
#spec.executables = []
|
25
24
|
spec.bindir = "bin"
|
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.1.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.1.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.1.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|
|
@@ -120,7 +120,7 @@ module Benry::CmdOpt
|
|
120
120
|
#; [!rhhji] raises SchemaError when key is not a Symbol.
|
121
121
|
key.nil? || key.is_a?(Symbol) or
|
122
122
|
raise _error("add(#{key.inspect}, #{optdef.inspect}): The first arg should be a Symbol as an option key.")
|
123
|
-
#; [!vq6eq] raises SchemaError when help message is missing.
|
123
|
+
#; [!vq6eq] raises SchemaError when help message is missing.
|
124
124
|
desc.nil? || desc.is_a?(String) or
|
125
125
|
raise _error("add(#{key.inspect}, #{optdef.inspect}): Help message required as 3rd argument.")
|
126
126
|
#; [!7hi2d] takes command option definition string.
|
@@ -137,7 +137,7 @@ 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
|
@@ -157,10 +157,16 @@ module Benry::CmdOpt
|
|
157
157
|
#; [!to1th] includes all option help when `all` is true.
|
158
158
|
#; [!a4qe4] option should not be hidden if description is empty string.
|
159
159
|
sb = []
|
160
|
-
width = nil; indent = nil
|
161
|
-
|
162
|
-
|
160
|
+
width = nil; indent = nil; color_p = $stdout.tty?
|
161
|
+
@items.each do |item|
|
162
|
+
next if ! all && item.hidden?
|
163
|
+
#; [!jrwb6] decorates help message according to `important:` value of option.
|
164
|
+
#; [!9nlfb] not decorate help message when stdout is not a tty.
|
165
|
+
s = format % [item.optdef, item.desc || ""]
|
166
|
+
s = _decorate_str(s, item.important?) if color_p
|
167
|
+
sb << s << "\n"
|
163
168
|
#; [!848rm] supports multi-lines help message.
|
169
|
+
detail = item.detail
|
164
170
|
if detail
|
165
171
|
width ||= (format % ['', '']).length
|
166
172
|
indent ||= ' ' * width
|
@@ -276,12 +282,20 @@ module Benry::CmdOpt
|
|
276
282
|
return short_p ? 8 : long_p ? 20 : 14
|
277
283
|
end
|
278
284
|
|
285
|
+
def _decorate_str(str, important)
|
286
|
+
case important
|
287
|
+
when true ; return "\e[1m#{str}\e[0m" # bold
|
288
|
+
when false ; return "\e[2m#{str}\e[0m" # gray
|
289
|
+
else ; return str
|
290
|
+
end
|
291
|
+
end
|
292
|
+
|
279
293
|
end
|
280
294
|
|
281
295
|
|
282
296
|
class SchemaItem # avoid Struct
|
283
297
|
|
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)
|
298
|
+
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
299
|
rexp ||= pattern # for backward compatibility
|
286
300
|
_init_validation(param, required, type, rexp, enum, range, value)
|
287
301
|
@key = key unless nil == key
|
@@ -297,6 +311,8 @@ module Benry::CmdOpt
|
|
297
311
|
@range = range unless nil == range
|
298
312
|
@detail = detail unless nil == detail
|
299
313
|
@value = value unless nil == value
|
314
|
+
@hidden = hidden unless nil == hidden
|
315
|
+
@important = important unless nil == important
|
300
316
|
@tag = tag unless nil == tag
|
301
317
|
@callback = callback unless nil == callback
|
302
318
|
#; [!nn4cp] freezes enum object.
|
@@ -324,10 +340,18 @@ module Benry::CmdOpt
|
|
324
340
|
end
|
325
341
|
|
326
342
|
def hidden?()
|
343
|
+
#; [!no6ov] returns true if @hidden is true.
|
344
|
+
#; [!ej8ot] returns false if @hidden is false.
|
345
|
+
return @hidden if @hidden != nil
|
327
346
|
#; [!h0uxs] returns true if desc is nil.
|
328
|
-
#; [!su00g] returns true if key starts with '_'.
|
329
347
|
#; [!28vzx] returns false if else.
|
330
|
-
return @desc == nil
|
348
|
+
return @desc == nil
|
349
|
+
end
|
350
|
+
|
351
|
+
def important?()
|
352
|
+
#; [!ua8kt] returns true/false if `important:` kwarg passed to constructor.
|
353
|
+
#; [!hz9sx] returns nil if `important:` kwarg not passed to constructor.
|
354
|
+
return @important
|
331
355
|
end
|
332
356
|
|
333
357
|
def validate_and_convert(val, optdict)
|
data/test/cmdopt_test.rb
CHANGED
@@ -342,13 +342,49 @@ END
|
|
342
342
|
spec "[!a4qe4] option should not be hidden if description is empty string." do
|
343
343
|
sc = Benry::CmdOpt::Schema.new
|
344
344
|
sc.add(:debug , "-D", nil) # hidden
|
345
|
-
sc.add(:
|
345
|
+
sc.add(:trace, "-T", "trace", hidden: true) # hidden
|
346
346
|
sc.add(:what , "-W", "") # NOT hidden!
|
347
347
|
ok {sc.option_help()} == <<END
|
348
348
|
-W :
|
349
349
|
END
|
350
350
|
end
|
351
351
|
|
352
|
+
fixture :schema_with_importance do
|
353
|
+
sc = Benry::CmdOpt::Schema.new
|
354
|
+
sc.add(:help , "-h, --help" , "help message")
|
355
|
+
sc.add(:trace , "-T, --trace", "trace" , important: true)
|
356
|
+
sc.add(:debug , "-D, --debug", "debug mode" , important: false)
|
357
|
+
sc.add(:quiet , "-q, --quiet", "quiet mode")
|
358
|
+
sc
|
359
|
+
end
|
360
|
+
|
361
|
+
spec "[!jrwb6] decorates help message according to `important:` value of option." do
|
362
|
+
|schema_with_importance|
|
363
|
+
sc = schema_with_importance
|
364
|
+
ok {sc.option_help()} == <<END
|
365
|
+
-h, --help : help message
|
366
|
+
\e[1m -T, --trace : trace\e[0m
|
367
|
+
\e[2m -D, --debug : debug mode\e[0m
|
368
|
+
-q, --quiet : quiet mode
|
369
|
+
END
|
370
|
+
end
|
371
|
+
|
372
|
+
spec "[!9nlfb] not decorate help message when stdout is not a tty." do
|
373
|
+
|schema_with_importance|
|
374
|
+
sc = schema_with_importance
|
375
|
+
output = nil
|
376
|
+
capture_sio() {
|
377
|
+
ok {$stdout}.NOT.tty?
|
378
|
+
output = sc.option_help()
|
379
|
+
}
|
380
|
+
ok {output} == <<END
|
381
|
+
-h, --help : help message
|
382
|
+
-T, --trace : trace
|
383
|
+
-D, --debug : debug mode
|
384
|
+
-q, --quiet : quiet mode
|
385
|
+
END
|
386
|
+
end
|
387
|
+
|
352
388
|
end
|
353
389
|
|
354
390
|
|
@@ -445,7 +481,7 @@ END
|
|
445
481
|
sc.add(:help, "-h, --help", "show help message")
|
446
482
|
sc.add(:version, " --version", "print version")
|
447
483
|
sc.add(:debug , "-d, --debug" , nil) # hidden
|
448
|
-
sc.add(:
|
484
|
+
sc.add(:DEBUG , "-D, --DEBUG" , "debug mode", hidden: true) # hidden
|
449
485
|
@schema = sc
|
450
486
|
end
|
451
487
|
|
@@ -532,7 +568,7 @@ END
|
|
532
568
|
spec "[!icvm1] ignores hidden items if 'all: false' kwarg specified." do
|
533
569
|
schema = Benry::CmdOpt::Schema.new
|
534
570
|
schema.add(:debug , "-D", nil)
|
535
|
-
schema.add(:
|
571
|
+
schema.add(:trace, "-T", "trace", hidden: true)
|
536
572
|
ok {schema.empty?()} == false
|
537
573
|
ok {schema.empty?(all: true)} == false
|
538
574
|
ok {schema.empty?(all: false)} == true
|
@@ -898,15 +934,19 @@ END
|
|
898
934
|
|
899
935
|
topic '#hidden?()' do
|
900
936
|
|
901
|
-
spec "[!
|
902
|
-
|
903
|
-
item = Benry::CmdOpt::SchemaItem.new(:debug, "-D", desc, "D", nil, nil, nil)
|
937
|
+
spec "[!no6ov] returns true if @hidden is true." do
|
938
|
+
item = Benry::CmdOpt::SchemaItem.new(:debug, "-D", "debug mode", "D", nil, nil, nil, hidden: true)
|
904
939
|
ok {item.hidden?} == true
|
905
940
|
end
|
906
941
|
|
907
|
-
spec "[!
|
908
|
-
|
909
|
-
item
|
942
|
+
spec "[!ej8ot] returns false if @hidden is false." do
|
943
|
+
item = Benry::CmdOpt::SchemaItem.new(:debug, "-D", "debug mode", "D", nil, nil, nil, hidden: false)
|
944
|
+
ok {item.hidden?} == false
|
945
|
+
end
|
946
|
+
|
947
|
+
spec "[!h0uxs] returns true if desc is nil." do
|
948
|
+
desc = nil
|
949
|
+
item = Benry::CmdOpt::SchemaItem.new(:debug, "-D", desc, "D", nil, nil, nil)
|
910
950
|
ok {item.hidden?} == true
|
911
951
|
end
|
912
952
|
|
@@ -919,6 +959,23 @@ END
|
|
919
959
|
end
|
920
960
|
|
921
961
|
|
962
|
+
topic '#important?()' do
|
963
|
+
|
964
|
+
spec "[!ua8kt] returns true/false if `important:` kwarg passed to constructor." do
|
965
|
+
item1 = Benry::CmdOpt::SchemaItem.new(:debug, "-D", "debug mode", "D", nil, nil, nil, important: true)
|
966
|
+
ok {item1.important?} == true
|
967
|
+
item2 = Benry::CmdOpt::SchemaItem.new(:debug, "-D", "debug mode", "D", nil, nil, nil, important: false)
|
968
|
+
ok {item2.important?} == false
|
969
|
+
end
|
970
|
+
|
971
|
+
spec "[!hz9sx] returns nil if `important:` kwarg not passed to constructor." do
|
972
|
+
item3 = Benry::CmdOpt::SchemaItem.new(:debug, "-D", "debug mode", "D", nil, nil, nil)
|
973
|
+
ok {item3.important?} == nil
|
974
|
+
end
|
975
|
+
|
976
|
+
end
|
977
|
+
|
978
|
+
|
922
979
|
topic '#validate_and_convert()' do
|
923
980
|
|
924
981
|
def new_item(key, optstr, desc, short, long, param, required,
|
@@ -1471,6 +1528,12 @@ END
|
|
1471
1528
|
ok {item.value} == 4
|
1472
1529
|
end
|
1473
1530
|
|
1531
|
+
spec "[!tu4k3] returns self." do
|
1532
|
+
cmdopt = Benry::CmdOpt.new()
|
1533
|
+
x = cmdopt.add(:version, "-v, --version", "version")
|
1534
|
+
ok {x}.same?(cmdopt)
|
1535
|
+
end
|
1536
|
+
|
1474
1537
|
end
|
1475
1538
|
|
1476
1539
|
|
@@ -1514,7 +1577,7 @@ END
|
|
1514
1577
|
@cmdopt.add(:help , "-h, --help" , "show help message")
|
1515
1578
|
@cmdopt.add(:version, " --version" , "print version")
|
1516
1579
|
@cmdopt.add(:debug , "-D" , nil) # hidden option
|
1517
|
-
@cmdopt.add(:
|
1580
|
+
@cmdopt.add(:trace , "-T" , "trace", hidden: true) # hidden option
|
1518
1581
|
end
|
1519
1582
|
|
1520
1583
|
spec "[!bw9qx] yields each option definition string and help message." do
|
@@ -1569,6 +1632,17 @@ END
|
|
1569
1632
|
@cmdopt.add(:debug, "-d, --debug[=<LEVEL>]", "debug", type: Integer)
|
1570
1633
|
end
|
1571
1634
|
|
1635
|
+
spec "[!7gc2m] parses command options." do
|
1636
|
+
args = ["-d", "x", "y"]
|
1637
|
+
@cmdopt.parse(args)
|
1638
|
+
ok {args} == ["x", "y"]
|
1639
|
+
end
|
1640
|
+
|
1641
|
+
spec "[!no4xu] returns option values as dict." do
|
1642
|
+
args = ["-d", "x"]
|
1643
|
+
ok {@cmdopt.parse(args)} == {:debug=>true}
|
1644
|
+
end
|
1645
|
+
|
1572
1646
|
spec "[!areof] handles only OptionError when block given." do
|
1573
1647
|
errmsg = nil
|
1574
1648
|
errcls = nil
|
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.1.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-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: oktest
|
@@ -36,15 +36,10 @@ files:
|
|
36
36
|
- CHANGES.md
|
37
37
|
- MIT-LICENSE
|
38
38
|
- README.md
|
39
|
-
- Rakefile.rb
|
40
39
|
- benry-cmdopt.gemspec
|
41
40
|
- doc/benry-cmdopt.html
|
42
41
|
- doc/css/style.css
|
43
42
|
- lib/benry/cmdopt.rb
|
44
|
-
- task/common-task.rb
|
45
|
-
- task/package-task.rb
|
46
|
-
- task/readme-task.rb
|
47
|
-
- task/test-task.rb
|
48
43
|
- test/cmdopt_test.rb
|
49
44
|
homepage: https://kwatch.github.io/benry-ruby/benry-cmdopt.html
|
50
45
|
licenses:
|
data/Rakefile.rb
DELETED
@@ -1,11 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
|
-
|
4
|
-
PROJECT = "benry-cmdopt"
|
5
|
-
RELEASE = ENV['RELEASE'] || "0.0.0"
|
6
|
-
COPYRIGHT = "copyright(c) 2021 kwatch@gmail.com"
|
7
|
-
LICENSE = "MIT License"
|
8
|
-
|
9
|
-
#RUBY_VERSIONS = ["3.2", "3.1", "3.0", "2.7", "2.6", "2.5", "2.4", "2.3"]
|
10
|
-
|
11
|
-
Dir.glob('./task/*-task.rb').sort.each {|x| require x }
|
data/task/common-task.rb
DELETED
@@ -1,139 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
|
-
|
4
|
-
defined? PROJECT or abort "PROJECT required."
|
5
|
-
defined? RELEASE or abort "RELEASE required."
|
6
|
-
defined? COPYRIGHT or abort "COPYRIGHT required."
|
7
|
-
defined? LICENSE or abort "LICENSE required."
|
8
|
-
|
9
|
-
RELEASE =~ /\A\d+\.\d+\.\d+/ or abort "RELEASE=#{RELEASE}: invalid release number."
|
10
|
-
|
11
|
-
|
12
|
-
require 'rake/clean'
|
13
|
-
CLEAN << "build"
|
14
|
-
CLEAN.concat Dir.glob("#{PROJECT}-*.gem").collect {|x| x.sub(/\.gem$/, '') }
|
15
|
-
CLOBBER.concat Dir.glob("#{PROJECT}-*.gem")
|
16
|
-
|
17
|
-
|
18
|
-
task :default do
|
19
|
-
sh "rake -T", verbose: false
|
20
|
-
end unless Rake::Task.task_defined?(:default)
|
21
|
-
|
22
|
-
|
23
|
-
desc "show release guide"
|
24
|
-
task :guide do
|
25
|
-
do_guide()
|
26
|
-
end
|
27
|
-
|
28
|
-
def do_guide()
|
29
|
-
RELEASE != '0.0.0' or abort "** ERROR: 'RELEASE=X.X.X' required."
|
30
|
-
puts guide_message(PROJECT, RELEASE)
|
31
|
-
end
|
32
|
-
|
33
|
-
def guide_message(project, release)
|
34
|
-
target = "#{project}-#{release}"
|
35
|
-
tag = "#{project}-#{release}"
|
36
|
-
puts <<END
|
37
|
-
How to release:
|
38
|
-
|
39
|
-
$ git diff .
|
40
|
-
$ git status .
|
41
|
-
$ which ruby
|
42
|
-
$ rake test
|
43
|
-
$ rake test:all
|
44
|
-
$ rake readme:execute # optional
|
45
|
-
$ rake readme:toc # optional
|
46
|
-
$ rake package RELEASE=#{release}
|
47
|
-
$ rake package:extract # confirm files in gem file
|
48
|
-
$ (cd #{target}/data; find . -type f)
|
49
|
-
$ gem install #{target}.gem # confirm gem package
|
50
|
-
$ gem uninstall #{project}
|
51
|
-
$ gem push #{target}.gem # publish gem to rubygems.org
|
52
|
-
$ git tag #{tag} # or: git tag ruby-#{tag}
|
53
|
-
$ git push
|
54
|
-
$ git push --tags
|
55
|
-
$ rake clean
|
56
|
-
$ mv #{target}.gem archive/
|
57
|
-
END
|
58
|
-
end
|
59
|
-
|
60
|
-
|
61
|
-
desc "create 'README.md' and 'doc/*.html'"
|
62
|
-
task :doc do
|
63
|
-
x = PROJECT
|
64
|
-
cd "doc" do
|
65
|
-
sh "../../docs/md2 --md #{x}.mdx > ../README.md"
|
66
|
-
sh "../../docs/md2 #{x}.mdx > #{x}.html"
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
desc "copy 'doc/*.html' to '../docs/'"
|
71
|
-
task 'doc:export' do
|
72
|
-
RELEASE != '0.0.0' or abort "** ERROR: 'RELEASE=X.X.X' required."
|
73
|
-
x = PROJECT
|
74
|
-
cp "doc/#{x}.html", "../docs/"
|
75
|
-
edit_file!("../docs/#{x}.html")
|
76
|
-
end
|
77
|
-
|
78
|
-
|
79
|
-
desc "edit metadata in files"
|
80
|
-
task :edit do
|
81
|
-
do_edit()
|
82
|
-
end
|
83
|
-
|
84
|
-
def do_edit()
|
85
|
-
target_files().each do |fname|
|
86
|
-
edit_file!(fname)
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
def target_files()
|
91
|
-
$_target_files ||= begin
|
92
|
-
spec_src = File.read("#{PROJECT}.gemspec", encoding: 'utf-8')
|
93
|
-
spec = eval spec_src
|
94
|
-
spec.name == PROJECT or
|
95
|
-
abort "** ERROR: '#{PROJECT}' != '#{spec.name}' (project name in gemspec file)"
|
96
|
-
spec.files + Dir.glob("doc/*.mdx")
|
97
|
-
end
|
98
|
-
return $_target_files
|
99
|
-
end
|
100
|
-
|
101
|
-
def edit_file!(filename, verbose: true)
|
102
|
-
changed = edit_file(filename) do |s|
|
103
|
-
s = s.gsub(/\$Release[:].*?\$/, "$"+"Release: #{RELEASE} $")
|
104
|
-
s = s.gsub(/\$Copyright[:].*?\$/, "$"+"Copyright: #{COPYRIGHT} $")
|
105
|
-
s = s.gsub(/\$License[:].*?\$/, "$"+"License: #{LICENSE} $")
|
106
|
-
s
|
107
|
-
end
|
108
|
-
if verbose
|
109
|
-
puts "[C] #{filename}" if changed
|
110
|
-
puts "[U] #{filename}" unless changed
|
111
|
-
end
|
112
|
-
return changed
|
113
|
-
end
|
114
|
-
|
115
|
-
def edit_file(filename)
|
116
|
-
File.open(filename, 'rb+') do |f|
|
117
|
-
s1 = f.read()
|
118
|
-
s2 = yield s1
|
119
|
-
if s1 != s2
|
120
|
-
f.rewind()
|
121
|
-
f.truncate(0)
|
122
|
-
f.write(s2)
|
123
|
-
true
|
124
|
-
else
|
125
|
-
false
|
126
|
-
end
|
127
|
-
end
|
128
|
-
end
|
129
|
-
|
130
|
-
|
131
|
-
desc nil
|
132
|
-
task :'relink' do
|
133
|
-
Dir.glob("task/*.rb").each do |x|
|
134
|
-
src = "../" + x
|
135
|
-
next if File.identical?(src, x)
|
136
|
-
rm x
|
137
|
-
ln src, x
|
138
|
-
end
|
139
|
-
end
|
data/task/package-task.rb
DELETED
@@ -1,72 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
|
-
|
4
|
-
desc "create package (*.gem)"
|
5
|
-
task :package do
|
6
|
-
do_package()
|
7
|
-
end
|
8
|
-
|
9
|
-
def do_package()
|
10
|
-
RELEASE != '0.0.0' or abort "** ERROR: 'RELEASE=X.X.X' required."
|
11
|
-
## copy
|
12
|
-
dir = "build"
|
13
|
-
rm_rf dir if File.exist?(dir)
|
14
|
-
mkdir dir
|
15
|
-
target_files().each do |file|
|
16
|
-
dest = File.join(dir, File.dirname(file))
|
17
|
-
mkdir_p dest, :verbose=>false unless File.exist?(dest)
|
18
|
-
cp file, "#{dir}/#{file}"
|
19
|
-
end
|
20
|
-
## edit
|
21
|
-
Dir.glob("#{dir}/**/*").each do |file|
|
22
|
-
next unless File.file?(file)
|
23
|
-
edit_file!(file, verbose: false)
|
24
|
-
end
|
25
|
-
## build
|
26
|
-
chdir dir do
|
27
|
-
sh "gem build #{PROJECT}.gemspec"
|
28
|
-
end
|
29
|
-
mv "#{dir}/#{PROJECT}-#{RELEASE}.gem", "."
|
30
|
-
rm_rf dir
|
31
|
-
end
|
32
|
-
|
33
|
-
|
34
|
-
desc "extract latest gem file"
|
35
|
-
task :'package:extract' do
|
36
|
-
do_package_extract()
|
37
|
-
end
|
38
|
-
|
39
|
-
def do_package_extract()
|
40
|
-
gemfile = Dir.glob("#{PROJECT}-*.gem").sort_by {|x| File.mtime(x) }.last
|
41
|
-
dir = gemfile.sub(/\.gem$/, '')
|
42
|
-
rm_rf dir if File.exist?(dir)
|
43
|
-
mkdir dir
|
44
|
-
mkdir "#{dir}/data"
|
45
|
-
cd dir do
|
46
|
-
sh "tar xvf ../#{gemfile}"
|
47
|
-
sh "gunzip *.gz"
|
48
|
-
cd "data" do
|
49
|
-
sh "tar xvf ../data.tar"
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
|
55
|
-
desc "upload gem file to rubygems.org"
|
56
|
-
task :publish do
|
57
|
-
do_publish()
|
58
|
-
end
|
59
|
-
|
60
|
-
def do_publish()
|
61
|
-
RELEASE != '0.0.0' or abort "** ERROR: 'RELEASE=X.X.X' required."
|
62
|
-
gemfile = "#{PROJECT}-#{RELEASE}.gem"
|
63
|
-
print "** Are you sure to publish #{gemfile}? [y/N]: "
|
64
|
-
answer = $stdin.gets().strip()
|
65
|
-
if answer.downcase == "y"
|
66
|
-
sh "gem push #{gemfile}"
|
67
|
-
#sh "git tag ruby-#{PROJECT}-#{RELEASE}"
|
68
|
-
sh "git tag #{PROJECT}-#{RELEASE}"
|
69
|
-
sh "#git push"
|
70
|
-
sh "#git push --tags"
|
71
|
-
end
|
72
|
-
end
|
data/task/readme-task.rb
DELETED
@@ -1,125 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
|
-
README_FILE = "README.md" unless defined? README_FILE
|
4
|
-
README_EXTRACT = /^[Ff]ile: +(\S+)/ unless defined? README_EXTRACT
|
5
|
-
README_CODESTART = /^```\w+$/ unless defined? README_CODESTART
|
6
|
-
README_CODEEND = /^```$/ unless defined? README_CODEEND
|
7
|
-
README_DESTDIR = "tmp/readme" unless defined? README_DESTDIR
|
8
|
-
|
9
|
-
require 'rake/clean'
|
10
|
-
CLEAN << "README.html"
|
11
|
-
|
12
|
-
|
13
|
-
def readme_extract_callback(filename, str)
|
14
|
-
return str
|
15
|
-
end
|
16
|
-
|
17
|
-
|
18
|
-
namespace :readme do
|
19
|
-
|
20
|
-
|
21
|
-
desc "retrieve scripts from #{README_FILE}"
|
22
|
-
task :retrieve do
|
23
|
-
do_readme_retrieve()
|
24
|
-
end
|
25
|
-
|
26
|
-
def do_readme_retrieve()
|
27
|
-
dir = README_DESTDIR
|
28
|
-
rm_rf dir if File.exist?(dir)
|
29
|
-
mkdir_p dir
|
30
|
-
s = File.read(README_FILE, encoding: 'utf-8')
|
31
|
-
filename = nil
|
32
|
-
buf = nil
|
33
|
-
s.each_line do |line|
|
34
|
-
case line
|
35
|
-
when README_EXTRACT
|
36
|
-
filename = $1
|
37
|
-
next
|
38
|
-
when README_CODESTART
|
39
|
-
if filename
|
40
|
-
buf = []
|
41
|
-
end
|
42
|
-
next
|
43
|
-
when README_CODEEND
|
44
|
-
if filename && buf
|
45
|
-
newfile = "#{dir}/#{filename}"
|
46
|
-
unless File.exist?(File.dirname(newfile))
|
47
|
-
mkdir_p File.dirname(newfile)
|
48
|
-
end
|
49
|
-
str = readme_extract_callback(filename, buf.join())
|
50
|
-
File.write(newfile, str, encoding: 'utf-8')
|
51
|
-
puts "[retrieve] #{newfile}"
|
52
|
-
end
|
53
|
-
filename = nil
|
54
|
-
buf = nil
|
55
|
-
next
|
56
|
-
end
|
57
|
-
#
|
58
|
-
if buf
|
59
|
-
buf << line
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
|
65
|
-
desc "execute code in readme file"
|
66
|
-
task :execute => :retrieve do
|
67
|
-
do_readme_execute()
|
68
|
-
end
|
69
|
-
|
70
|
-
def do_readme_execute()
|
71
|
-
Dir.glob(README_DESTDIR+'/**/*.rb').sort.each do |fpath|
|
72
|
-
puts "========================================"
|
73
|
-
sh "ruby -I lib #{fpath}" do end
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
|
78
|
-
desc "builds table of contents"
|
79
|
-
task :toc do
|
80
|
-
do_readme_toc()
|
81
|
-
end
|
82
|
-
|
83
|
-
def do_readme_toc()
|
84
|
-
url = ENV['README_URL'] or abort "$README_URL required."
|
85
|
-
mkdir "tmp" unless Dir.exist?("tmp")
|
86
|
-
htmlfile = "tmp/README.html"
|
87
|
-
sh "curl -s -o #{htmlfile} #{url}"
|
88
|
-
#rexp = /<h(\d) dir="auto"><a id="(.*?)" class="anchor".*><\/a>(.*)<\/h\1>/
|
89
|
-
rexp = /<h(\d) id="user-content-.*?" dir="auto"><a class="heading-link" href="#(.*?)">(.*)<svg/
|
90
|
-
html_str = File.read(htmlfile, encoding: 'utf-8')
|
91
|
-
buf = []
|
92
|
-
html_str.scan(rexp) do
|
93
|
-
level = $1.to_i
|
94
|
-
id = $2
|
95
|
-
title = $3
|
96
|
-
next if title =~ /Table of Contents/
|
97
|
-
title = title.gsub(/<\/?code>/, '`')
|
98
|
-
anchor = id.sub(/^user-content-/, '')
|
99
|
-
indent = " " * (level - 1)
|
100
|
-
buf << "#{indent}* <a href=\"##{anchor}\">#{title}</a>\n"
|
101
|
-
end
|
102
|
-
buf.shift() if buf[0] && buf[0] =~ /^\* /
|
103
|
-
toc_str = buf.join()
|
104
|
-
#
|
105
|
-
mdfile = README_FILE
|
106
|
-
changed = File.open(mdfile, "r+", encoding: 'utf-8') do |f|
|
107
|
-
s1 = f.read()
|
108
|
-
s2 = s1.sub(/(<!-- TOC -->\n).*(<!-- \/TOC -->\n)/m) {
|
109
|
-
[$1, toc_str, $2].join("\n")
|
110
|
-
}
|
111
|
-
if s1 != s2
|
112
|
-
f.rewind()
|
113
|
-
f.truncate(0)
|
114
|
-
f.write(s2)
|
115
|
-
true
|
116
|
-
else
|
117
|
-
false
|
118
|
-
end
|
119
|
-
end
|
120
|
-
puts "[changed] #{mdfile}" if changed
|
121
|
-
puts "[not changed] #{mdfile}" unless changed
|
122
|
-
end
|
123
|
-
|
124
|
-
|
125
|
-
end
|
data/task/test-task.rb
DELETED
@@ -1,81 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
|
-
|
4
|
-
unless defined?(RUBY_VERSIONS)
|
5
|
-
RUBY_VERSIONS = (
|
6
|
-
if ENV['RUBY_VERSIONS']
|
7
|
-
ENV['RUBY_VERSIONS'].split()
|
8
|
-
else
|
9
|
-
["3.2", "3.1", "3.0", "2.7", "2.6", "2.5", "2.4", "2.3"]
|
10
|
-
end
|
11
|
-
)
|
12
|
-
end
|
13
|
-
|
14
|
-
|
15
|
-
desc "run test"
|
16
|
-
task :test do
|
17
|
-
do_test()
|
18
|
-
end
|
19
|
-
|
20
|
-
def do_test()
|
21
|
-
run_test()
|
22
|
-
end
|
23
|
-
|
24
|
-
def run_test(ruby=nil, &b)
|
25
|
-
run_oktest(ruby, &b)
|
26
|
-
end
|
27
|
-
|
28
|
-
def run_minitest(ruby=nil, &b)
|
29
|
-
files = File.exist?("test/run_all.rb") \
|
30
|
-
? ["test/run_all.rb"] \
|
31
|
-
: Dir.glob("test/**/*_test.rb")
|
32
|
-
if ruby
|
33
|
-
sh(ruby, *files, &b)
|
34
|
-
else
|
35
|
-
ruby(*files, &b)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def run_oktest(ruby=nil, &b)
|
40
|
-
argstr = "-r oktest -e Oktest.main -- test -sp"
|
41
|
-
if ruby
|
42
|
-
sh("#{ruby} #{argstr}", &b)
|
43
|
-
else
|
44
|
-
ruby(argstr, &b)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
|
49
|
-
desc "run test in different ruby versions"
|
50
|
-
task :'test:all' do
|
51
|
-
do_test_all()
|
52
|
-
end
|
53
|
-
|
54
|
-
def do_test_all()
|
55
|
-
ENV['VS_HOME'] or
|
56
|
-
abort "[ERROR] rake test:all: '$VS_HOME' environment var required."
|
57
|
-
vs_home = ENV['VS_HOME'].split(/[:;]/).first
|
58
|
-
ruby_versions = RUBY_VERSIONS
|
59
|
-
test_all(vs_home, ruby_versions)
|
60
|
-
end
|
61
|
-
|
62
|
-
def test_all(vs_home, ruby_versions)
|
63
|
-
header = proc {|s| "\033[0;36m=============== #{s} ===============\033[0m" }
|
64
|
-
error = proc {|s| "\033[0;31m** #{s}\033[0m" }
|
65
|
-
comp = proc {|x, y| x.to_s.split('.').map(&:to_i) <=> y.to_s.split('.').map(&:to_i) }
|
66
|
-
ruby_versions.each do |ver|
|
67
|
-
dir = Dir.glob("#{vs_home}/ruby/#{ver}.*/").sort_by(&comp).last
|
68
|
-
puts ""
|
69
|
-
if dir
|
70
|
-
puts header.("#{ver} (#{dir})")
|
71
|
-
run_test("#{dir}/bin/ruby") do |ok, res|
|
72
|
-
$stderr.puts error.("test failed") unless ok
|
73
|
-
end
|
74
|
-
sleep 0.2
|
75
|
-
else
|
76
|
-
puts header.(ver)
|
77
|
-
$stderr.puts error.("ruby #{ver} not found")
|
78
|
-
sleep 1.0
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|