libclimate-ruby 0.11.0 → 0.12.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +12 -5
- data/examples/flag_and_option_specifications.md +181 -0
- data/examples/flag_and_option_specifications.rb +53 -0
- data/examples/show_usage_and_version.md +117 -0
- data/examples/show_usage_and_version.rb +30 -0
- data/lib/libclimate/climate.rb +48 -46
- data/lib/libclimate/version.rb +2 -2
- data/test/scratch/{aliases.rb → specifications.rb} +15 -7
- data/test/unit/tc_minimal.rb +4 -4
- data/test/unit/tc_minimal_CLASP.rb +4 -4
- data/test/unit/{tc_test_aliases.rb → tc_test_specifications.rb} +5 -5
- data/test/unit/tc_with_blocks_CLASP.rb +2 -2
- metadata +21 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 60fb29259bdb557a306c02a204cf7b801695aea7
|
4
|
+
data.tar.gz: 599e221a43e094f0a88ddea9d99a4a87812c78db
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b537e1f71fb463e8f60197e0e3174607fdcaa49afcd9f4beb1cd7c86f04ff6b72e61cea87e27725bc3dce9803906872345a293aea2ac704348195dfcc4b2b6b6
|
7
|
+
data.tar.gz: a62dbfe4a7bc2fef06ab0dee37c6351c04118170432e2109a828d3515ada0e19910b88e8f2d9b93d38e18867685b34e8e8e80f3cdb901ade0f9089456e325ad7
|
data/README.md
CHANGED
@@ -17,7 +17,8 @@ libCLImate, for Ruby
|
|
17
17
|
1. [Introduction](#introduction)
|
18
18
|
2. [Installation](#installation)
|
19
19
|
3. [Components](#components)
|
20
|
-
4. [
|
20
|
+
4. [Examples](#examples)
|
21
|
+
5. [Project Information](#project-information)
|
21
22
|
|
22
23
|
## Installation
|
23
24
|
|
@@ -29,16 +30,22 @@ Install via **gem** as in:
|
|
29
30
|
|
30
31
|
or add it to your `Gemfile`.
|
31
32
|
|
32
|
-
Use via **require
|
33
|
+
Use via **require**, as in:
|
33
34
|
|
34
35
|
```Ruby
|
35
|
-
require 'libclimate
|
36
|
+
require 'libclimate'
|
36
37
|
```
|
37
38
|
|
38
39
|
## Components
|
39
40
|
|
40
41
|
T.B.C.
|
41
42
|
|
43
|
+
## Examples
|
44
|
+
|
45
|
+
Examples are provided in the ```examples``` directory, along with a markdown description for each. A detailed list TOC of them is provided in [EXAMPLES.md](./EXAMPLES.md).
|
46
|
+
|
47
|
+
It is instructive to see how much more succinct they are than those (offering precisely the same functionality) presented in [**CLASP.Ruby**](https://github.com/synesissoftware/CLASP.Ruby).
|
48
|
+
|
42
49
|
## Project Information
|
43
50
|
|
44
51
|
### Where to get help
|
@@ -58,12 +65,12 @@ Defect reports, feature requests, and pull requests are welcome on https://githu
|
|
58
65
|
|
59
66
|
### Related projects
|
60
67
|
|
61
|
-
* [**libCLImate C/C++](https://github.com/synesissoftware/libCLImate.Ruby)
|
62
68
|
* [**CLASP**](https://github.com/synesissoftware/CLASP/)
|
63
69
|
* [**CLASP.Go**](https://github.com/synesissoftware/CLASP.Go/)
|
64
70
|
* [**CLASP.js**](https://github.com/synesissoftware/CLASP.js/)
|
65
71
|
* [**CLASP.Ruby**](https://github.com/synesissoftware/CLASP.Ruby/)
|
66
|
-
* [
|
72
|
+
* [**libCLImate** (C/C++)](https://github.com/synesissoftware/libCLImate.Ruby)
|
73
|
+
* [**xqsr3**](https://github.com/synesissoftware.com/libCLImate.Ruby-xml/)
|
67
74
|
|
68
75
|
### License
|
69
76
|
|
@@ -0,0 +1,181 @@
|
|
1
|
+
# libCLImate.Ruby Example - **show_usage_and_version**
|
2
|
+
|
3
|
+
## Summary
|
4
|
+
|
5
|
+
Example illustrating various kinds of *flag* and *option* specifications, including the combination of short-names.
|
6
|
+
|
7
|
+
## Source
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
#!/usr/bin/env ruby
|
11
|
+
|
12
|
+
# examples/flag_and_option_specifications.rb
|
13
|
+
|
14
|
+
# requires
|
15
|
+
|
16
|
+
require 'libclimate'
|
17
|
+
|
18
|
+
# Specify specifications, parse, and checking standard flags
|
19
|
+
|
20
|
+
options = {}
|
21
|
+
climate = LibCLImate::Climate.new do |cl|
|
22
|
+
|
23
|
+
cl.add_flag('--debug', alias: '-d', help: 'runs in Debug mode') do
|
24
|
+
|
25
|
+
options[:debug] = true
|
26
|
+
end
|
27
|
+
cl.add_option('--verbosity', alias: '-v', help: 'specifies the verbosity', values: [ 'terse', 'quiet', 'silent', 'chatty' ]) do |o, a|
|
28
|
+
|
29
|
+
options[:verbosity] = o.value
|
30
|
+
end
|
31
|
+
cl.add_alias('--verbosity=chatty', '-c')
|
32
|
+
|
33
|
+
cl.version = [ 0, 0, 1 ]
|
34
|
+
|
35
|
+
cl.info_lines = [
|
36
|
+
|
37
|
+
'libCLImate.Ruby examples',
|
38
|
+
:version,
|
39
|
+
"Illustrates use of libCLImate.Ruby's specification of flags, options, and specifications",
|
40
|
+
'',
|
41
|
+
]
|
42
|
+
end
|
43
|
+
|
44
|
+
r = climate.run ARGV
|
45
|
+
|
46
|
+
|
47
|
+
|
48
|
+
# Program-specific processing of flags/options
|
49
|
+
|
50
|
+
if options[:verbosity]
|
51
|
+
|
52
|
+
$stdout.puts "verbosity is specified as: #{options[:verbosity]}"
|
53
|
+
end
|
54
|
+
|
55
|
+
if options[:debug]
|
56
|
+
|
57
|
+
$stdout.puts 'Debug mode is specified'
|
58
|
+
end
|
59
|
+
```
|
60
|
+
|
61
|
+
## Usage
|
62
|
+
|
63
|
+
### No arguments
|
64
|
+
|
65
|
+
If executed with no arguments
|
66
|
+
|
67
|
+
```
|
68
|
+
ruby examples/flag_and_option_specifications.rb
|
69
|
+
```
|
70
|
+
|
71
|
+
or (in a Unix shell):
|
72
|
+
|
73
|
+
```
|
74
|
+
./examples/flag_and_option_specifications.rb
|
75
|
+
```
|
76
|
+
|
77
|
+
it gives the output:
|
78
|
+
|
79
|
+
```
|
80
|
+
```
|
81
|
+
|
82
|
+
### Show usage
|
83
|
+
|
84
|
+
If executed with the arguments
|
85
|
+
|
86
|
+
```
|
87
|
+
ruby examples/flag_and_option_specifications.rb --help
|
88
|
+
```
|
89
|
+
|
90
|
+
it gives the output:
|
91
|
+
|
92
|
+
```
|
93
|
+
libCLImate.Ruby examples
|
94
|
+
flag_and_option_specifications.rb 0.0.1
|
95
|
+
Illustrates use of libCLImate.Ruby's specification of flags, options, and specifications
|
96
|
+
|
97
|
+
USAGE: flag_and_option_specifications.rb [ ... flags and options ... ]
|
98
|
+
|
99
|
+
flags/options:
|
100
|
+
|
101
|
+
-d
|
102
|
+
--debug
|
103
|
+
runs in Debug mode
|
104
|
+
|
105
|
+
-c --verbosity=chatty
|
106
|
+
-v <value>
|
107
|
+
--verbosity=<value>
|
108
|
+
specifies the verbosity
|
109
|
+
where <value> one of:
|
110
|
+
terse
|
111
|
+
quiet
|
112
|
+
silent
|
113
|
+
chatty
|
114
|
+
|
115
|
+
--help
|
116
|
+
Shows usage and terminates
|
117
|
+
|
118
|
+
--version
|
119
|
+
Shows version and terminates
|
120
|
+
```
|
121
|
+
|
122
|
+
### Specify flags and options in long-form
|
123
|
+
|
124
|
+
If executed with the arguments
|
125
|
+
|
126
|
+
```
|
127
|
+
ruby examples/flag_and_option_specifications.rb --debug --verbosity=silent
|
128
|
+
```
|
129
|
+
|
130
|
+
it gives the output:
|
131
|
+
|
132
|
+
```
|
133
|
+
verbosity is specified as: silent
|
134
|
+
Debug mode is specified
|
135
|
+
```
|
136
|
+
|
137
|
+
### Specify flags and options in short-form
|
138
|
+
|
139
|
+
If executed with the arguments
|
140
|
+
|
141
|
+
```
|
142
|
+
ruby examples/flag_and_option_specifications.rb -v silent -d
|
143
|
+
```
|
144
|
+
|
145
|
+
it gives the (same) output:
|
146
|
+
|
147
|
+
```
|
148
|
+
verbosity is specified as: silent
|
149
|
+
Debug mode is specified
|
150
|
+
```
|
151
|
+
|
152
|
+
### Specify flags and options in short-form, including an alias for an option-with-value
|
153
|
+
|
154
|
+
If executed with the arguments
|
155
|
+
|
156
|
+
```
|
157
|
+
ruby examples/flag_and_option_specifications.rb -c -d
|
158
|
+
```
|
159
|
+
|
160
|
+
it gives the output:
|
161
|
+
|
162
|
+
```
|
163
|
+
verbosity is specified as: chatty
|
164
|
+
Debug mode is specified
|
165
|
+
```
|
166
|
+
|
167
|
+
### Specify flags and options with combined short-form
|
168
|
+
|
169
|
+
If executed with the arguments
|
170
|
+
|
171
|
+
```
|
172
|
+
ruby examples/flag_and_option_specifications.rb -dc
|
173
|
+
```
|
174
|
+
|
175
|
+
it gives the (same) output:
|
176
|
+
|
177
|
+
```
|
178
|
+
verbosity is specified as: chatty
|
179
|
+
Debug mode is specified
|
180
|
+
```
|
181
|
+
|
@@ -0,0 +1,53 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# examples/flag_and_option_specifications.rb
|
4
|
+
|
5
|
+
# requires
|
6
|
+
|
7
|
+
require 'libclimate'
|
8
|
+
|
9
|
+
# Specify specifications, parse, and checking standard flags
|
10
|
+
|
11
|
+
options = {}
|
12
|
+
climate = LibCLImate::Climate.new do |cl|
|
13
|
+
|
14
|
+
cl.add_flag('--debug', alias: '-d', help: 'runs in Debug mode') do
|
15
|
+
|
16
|
+
options[:debug] = true
|
17
|
+
end
|
18
|
+
cl.add_option('--verbosity', alias: '-v', help: 'specifies the verbosity', values: [ 'terse', 'quiet', 'silent', 'chatty' ]) do |o, a|
|
19
|
+
|
20
|
+
options[:verbosity] = o.value
|
21
|
+
end
|
22
|
+
cl.add_alias('--verbosity=chatty', '-c')
|
23
|
+
|
24
|
+
cl.version = [ 0, 0, 1 ]
|
25
|
+
|
26
|
+
cl.info_lines = [
|
27
|
+
|
28
|
+
'libCLImate.Ruby examples',
|
29
|
+
:version,
|
30
|
+
"Illustrates use of libCLImate.Ruby's specification of flags, options, and specifications",
|
31
|
+
'',
|
32
|
+
]
|
33
|
+
end
|
34
|
+
|
35
|
+
r = climate.run ARGV
|
36
|
+
|
37
|
+
|
38
|
+
|
39
|
+
# Program-specific processing of flags/options
|
40
|
+
|
41
|
+
if options[:verbosity]
|
42
|
+
|
43
|
+
$stdout.puts "verbosity is specified as: #{options[:verbosity]}"
|
44
|
+
end
|
45
|
+
|
46
|
+
if options[:debug]
|
47
|
+
|
48
|
+
$stdout.puts 'Debug mode is specified'
|
49
|
+
end
|
50
|
+
|
51
|
+
|
52
|
+
|
53
|
+
|
@@ -0,0 +1,117 @@
|
|
1
|
+
# libCLImate.Ruby Example - **show_usage_and_version**
|
2
|
+
|
3
|
+
## Summary
|
4
|
+
|
5
|
+
Simple example supporting ```--help``` and ```--version```.
|
6
|
+
|
7
|
+
## Source
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
#!/usr/bin/env ruby
|
11
|
+
|
12
|
+
# examples/show_usage_and_version.rb
|
13
|
+
|
14
|
+
# requires
|
15
|
+
|
16
|
+
require 'libclimate'
|
17
|
+
|
18
|
+
# Specify specifications, parse, and checking standard flags
|
19
|
+
|
20
|
+
climate = LibCLImate::Climate.new do |cl|
|
21
|
+
|
22
|
+
cl.version = [ 0, 0, 1 ]
|
23
|
+
|
24
|
+
cl.info_lines = [
|
25
|
+
|
26
|
+
'libCLImate.Ruby examples',
|
27
|
+
:version,
|
28
|
+
"Illustrates use of libCLImate.Ruby's automatic support for '--help' and '--version'",
|
29
|
+
'',
|
30
|
+
]
|
31
|
+
end
|
32
|
+
|
33
|
+
climate.run ARGV
|
34
|
+
|
35
|
+
|
36
|
+
|
37
|
+
$stdout.puts 'no flags specified'
|
38
|
+
```
|
39
|
+
|
40
|
+
## Usage
|
41
|
+
|
42
|
+
### No arguments
|
43
|
+
|
44
|
+
If executed with no arguments
|
45
|
+
|
46
|
+
```
|
47
|
+
ruby examples/show_usage_and_version.rb
|
48
|
+
```
|
49
|
+
|
50
|
+
or (in a Unix shell):
|
51
|
+
|
52
|
+
```
|
53
|
+
./examples/show_usage_and_version.rb
|
54
|
+
```
|
55
|
+
|
56
|
+
it gives the output:
|
57
|
+
|
58
|
+
```
|
59
|
+
no flags specified
|
60
|
+
```
|
61
|
+
|
62
|
+
### Show usage
|
63
|
+
|
64
|
+
If executed with the arguments
|
65
|
+
|
66
|
+
```
|
67
|
+
ruby examples/show_usage_and_version.rb --help
|
68
|
+
```
|
69
|
+
|
70
|
+
it gives the output:
|
71
|
+
|
72
|
+
```
|
73
|
+
libCLImate.Ruby examples
|
74
|
+
show_usage_and_version.rb 0.0.1
|
75
|
+
Illustrates use of libCLImate.Ruby's automatic support for '--help' and '--version'
|
76
|
+
|
77
|
+
USAGE: show_usage_and_version.rb [ ... flags and options ... ]
|
78
|
+
|
79
|
+
flags/options:
|
80
|
+
|
81
|
+
--help
|
82
|
+
shows this help and terminates
|
83
|
+
|
84
|
+
--version
|
85
|
+
shows version and terminates
|
86
|
+
```
|
87
|
+
|
88
|
+
### Show version
|
89
|
+
|
90
|
+
If executed with the arguments
|
91
|
+
|
92
|
+
```
|
93
|
+
ruby examples/show_usage_and_version.rb --version
|
94
|
+
```
|
95
|
+
|
96
|
+
it gives the output:
|
97
|
+
|
98
|
+
```
|
99
|
+
show_usage_and_version.rb 0.0.1
|
100
|
+
```
|
101
|
+
|
102
|
+
### Unknown option
|
103
|
+
|
104
|
+
If executed with the arguments
|
105
|
+
|
106
|
+
```
|
107
|
+
ruby examples/show_usage_and_version.rb --unknown=value
|
108
|
+
```
|
109
|
+
|
110
|
+
it gives the output (on the standard error stream):
|
111
|
+
|
112
|
+
```
|
113
|
+
show_usage_and_version.rb: unrecognised flag/option: --unknown=value
|
114
|
+
```
|
115
|
+
|
116
|
+
with an exit code of 1
|
117
|
+
|
@@ -0,0 +1,30 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# examples/show_usage_and_version.rb
|
4
|
+
|
5
|
+
# requires
|
6
|
+
|
7
|
+
require 'libclimate'
|
8
|
+
|
9
|
+
# Specify specifications, parse, and checking standard flags
|
10
|
+
|
11
|
+
climate = LibCLImate::Climate.new do |cl|
|
12
|
+
|
13
|
+
cl.version = [ 0, 0, 1 ]
|
14
|
+
|
15
|
+
cl.info_lines = [
|
16
|
+
|
17
|
+
'libCLImate.Ruby examples',
|
18
|
+
:version,
|
19
|
+
"Illustrates use of libCLImate.Ruby's automatic support for '--help' and '--version'",
|
20
|
+
'',
|
21
|
+
]
|
22
|
+
end
|
23
|
+
|
24
|
+
climate.run ARGV
|
25
|
+
|
26
|
+
|
27
|
+
|
28
|
+
$stdout.puts 'no flags specified'
|
29
|
+
|
30
|
+
|
data/lib/libclimate/climate.rb
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
# Purpose: Definition of the ::LibCLImate::Climate class
|
6
6
|
#
|
7
7
|
# Created: 13th July 2015
|
8
|
-
# Updated:
|
8
|
+
# Updated: 10th April 2019
|
9
9
|
#
|
10
10
|
# Home: http://github.com/synesissoftware/libCLImate.Ruby
|
11
11
|
#
|
@@ -171,12 +171,12 @@ class Climate
|
|
171
171
|
options[:values] = usage_values if usage_values
|
172
172
|
options[:flags_and_options] = flags_and_options if flags_and_options
|
173
173
|
|
174
|
-
CLASP.show_usage
|
174
|
+
CLASP.show_usage specifications, options
|
175
175
|
end
|
176
176
|
|
177
177
|
def show_version_
|
178
178
|
|
179
|
-
CLASP.show_version
|
179
|
+
CLASP.show_version specifications, stream: stdout, program_name: program_name, version: version, exit: exit_on_usage ? 0 : nil
|
180
180
|
end
|
181
181
|
|
182
182
|
def infer_version_ ctxt
|
@@ -272,9 +272,9 @@ class Climate
|
|
272
272
|
#
|
273
273
|
# * *Options*:
|
274
274
|
# - +:no_help_flag+:: (boolean) Prevents the use of the
|
275
|
-
# +CLASP::Flag.Help+ flag-
|
275
|
+
# +CLASP::Flag.Help+ flag-specification
|
276
276
|
# - +:no_version_flag+:: (boolean) Prevents the use of the
|
277
|
-
# +CLASP::Flag.Version+ flag-
|
277
|
+
# +CLASP::Flag.Version+ flag-specification
|
278
278
|
# - +:program_name+:: (::String) An explicit program-name, which is
|
279
279
|
# inferred from +$0+ if this is +nil+
|
280
280
|
# - +:version+:: A version specification. If not specified, this is
|
@@ -301,7 +301,7 @@ class Climate
|
|
301
301
|
pr_name = (pr_name =~ /\.(?:bat|cmd|rb|sh)$/) ? "#$`(#$&)" : pr_name
|
302
302
|
end
|
303
303
|
|
304
|
-
@
|
304
|
+
@specifications = []
|
305
305
|
@ignore_unknown = false
|
306
306
|
@exit_on_unknown = true
|
307
307
|
@exit_on_missing = true
|
@@ -317,8 +317,8 @@ class Climate
|
|
317
317
|
version_context = options[:version_context]
|
318
318
|
@version = options[:version] || infer_version_(version_context)
|
319
319
|
|
320
|
-
@
|
321
|
-
@
|
320
|
+
@specifications << CLASP::Flag.Help(handle: proc { show_usage_ }) unless options[:no_help_flag]
|
321
|
+
@specifications << CLASP::Flag.Version(handle: proc { show_version_ }) unless options[:no_version_flag]
|
322
322
|
|
323
323
|
yield self if block_given?
|
324
324
|
end
|
@@ -332,9 +332,11 @@ class Climate
|
|
332
332
|
@program_name = name
|
333
333
|
end
|
334
334
|
|
335
|
-
# An array of
|
336
|
-
# @return (::Array) The
|
337
|
-
attr_reader :
|
335
|
+
# An array of specifications attached to the climate instance, whose contents should be modified by adding (or removing) CLASP specifications
|
336
|
+
# @return (::Array) The specifications
|
337
|
+
attr_reader :specifications
|
338
|
+
# [DEPRECATED] Instead, use +specifications+
|
339
|
+
def aliases; specifications; end
|
338
340
|
# Indicates whether exit will be called (with non-zero exit code) when a
|
339
341
|
# required command-line option is missing
|
340
342
|
# @return (boolean)
|
@@ -400,7 +402,7 @@ class Climate
|
|
400
402
|
|
401
403
|
raise ArgumentError, "argv may not be nil" if argv.nil?
|
402
404
|
|
403
|
-
arguments = CLASP::Arguments.new argv,
|
405
|
+
arguments = CLASP::Arguments.new argv, specifications
|
404
406
|
flags = arguments.flags
|
405
407
|
options = arguments.options
|
406
408
|
values = arguments.values.to_a
|
@@ -430,7 +432,7 @@ class Climate
|
|
430
432
|
|
431
433
|
flags.each do |f|
|
432
434
|
|
433
|
-
al =
|
435
|
+
al = specifications.detect do |a|
|
434
436
|
|
435
437
|
a.kind_of?(::CLASP::Flag) && f.name == a.name
|
436
438
|
end
|
@@ -492,7 +494,7 @@ class Climate
|
|
492
494
|
|
493
495
|
options.each do |o|
|
494
496
|
|
495
|
-
al =
|
497
|
+
al = specifications.detect do |a|
|
496
498
|
|
497
499
|
a.kind_of?(::CLASP::Option) && o.name == a.name
|
498
500
|
end
|
@@ -555,16 +557,16 @@ class Climate
|
|
555
557
|
|
556
558
|
# now police any required options
|
557
559
|
|
558
|
-
|
560
|
+
required_specifications = specifications.select do |a|
|
559
561
|
|
560
562
|
a.kind_of?(::CLASP::Option) && a.required?
|
561
563
|
end
|
562
564
|
|
563
|
-
|
565
|
+
required_specifications = Hash[required_specifications.map { |a| [ a.name, a ] }]
|
564
566
|
|
565
567
|
given_options = Hash[results[:options][:given].map { |o| [ o.name, o ]}]
|
566
568
|
|
567
|
-
|
569
|
+
required_specifications.each do |k, a|
|
568
570
|
|
569
571
|
unless given_options.has_key? k
|
570
572
|
|
@@ -720,7 +722,7 @@ class Climate
|
|
720
722
|
msg
|
721
723
|
end
|
722
724
|
|
723
|
-
# Adds a flag to +
|
725
|
+
# Adds a flag to +specifications+
|
724
726
|
#
|
725
727
|
# === Signature
|
726
728
|
#
|
@@ -729,24 +731,24 @@ class Climate
|
|
729
731
|
# - +options+:: An options hash, containing any of the following options.
|
730
732
|
#
|
731
733
|
# * *Options*
|
732
|
-
# - +:help+::
|
733
|
-
# - +:alias+::
|
734
|
-
# - +:
|
735
|
-
# - +:extras+::
|
734
|
+
# - +:help+::
|
735
|
+
# - +:alias+::
|
736
|
+
# - +:specifications+::
|
737
|
+
# - +:extras+::
|
736
738
|
def add_flag(name_or_flag, options={}, &block)
|
737
739
|
|
738
740
|
check_parameter name_or_flag, 'name_or_flag', allow_nil: false, types: [ ::String, ::Symbol, ::CLASP::Flag ]
|
739
741
|
|
740
742
|
if ::CLASP::Flag === name_or_flag
|
741
743
|
|
742
|
-
|
744
|
+
specifications << name_or_flag
|
743
745
|
else
|
744
746
|
|
745
|
-
|
747
|
+
specifications << CLASP.Flag(name_or_flag, **options, &block)
|
746
748
|
end
|
747
749
|
end
|
748
750
|
|
749
|
-
# Adds an option to +
|
751
|
+
# Adds an option to +specifications+
|
750
752
|
#
|
751
753
|
# === Signature
|
752
754
|
#
|
@@ -755,42 +757,42 @@ class Climate
|
|
755
757
|
# - +options+:: An options hash, containing any of the following options.
|
756
758
|
#
|
757
759
|
# * *Options*
|
758
|
-
# - +:alias+::
|
759
|
-
# - +:
|
760
|
-
# - +:help+::
|
761
|
-
# - +:values_range+::
|
762
|
-
# - +:default_value+::
|
763
|
-
# - +:extras+::
|
760
|
+
# - +:alias+::
|
761
|
+
# - +:specifications+::
|
762
|
+
# - +:help+::
|
763
|
+
# - +:values_range+::
|
764
|
+
# - +:default_value+::
|
765
|
+
# - +:extras+::
|
764
766
|
def add_option(name_or_option, options={}, &block)
|
765
767
|
|
766
768
|
check_parameter name_or_option, 'name_or_option', allow_nil: false, types: [ ::String, ::Symbol, ::CLASP::Option ]
|
767
769
|
|
768
770
|
if ::CLASP::Option === name_or_option
|
769
771
|
|
770
|
-
|
772
|
+
specifications << name_or_option
|
771
773
|
else
|
772
774
|
|
773
|
-
|
775
|
+
specifications << CLASP.Option(name_or_option, **options, &block)
|
774
776
|
end
|
775
777
|
end
|
776
778
|
|
777
|
-
# Adds an alias to +
|
779
|
+
# Adds an alias to +specifications+
|
778
780
|
#
|
779
781
|
# === Signature
|
780
782
|
#
|
781
783
|
# * *Parameters*
|
782
|
-
# - +
|
784
|
+
# - +name_or_specification+:: The flag/option name or the valued option
|
783
785
|
# - +aliases+:: One or more aliases
|
784
786
|
#
|
785
787
|
# === Examples
|
786
788
|
#
|
787
|
-
# ====
|
789
|
+
# ==== Specification(s) of a flag (single statement)
|
788
790
|
#
|
789
791
|
# +climate.add_flag('--mark-missing', alias: '-x')+
|
790
792
|
#
|
791
793
|
# +climate.add_flag('--absolute-path', aliases: [ '-abs', '-p' ])+
|
792
794
|
#
|
793
|
-
# ====
|
795
|
+
# ==== Specification(s) of a flag (multiple statements)
|
794
796
|
#
|
795
797
|
# +climate.add_flag('--mark-missing')+
|
796
798
|
# +climate.add_alias('--mark-missing', '-x')+
|
@@ -798,35 +800,35 @@ class Climate
|
|
798
800
|
# +climate.add_flag('--absolute-path')+
|
799
801
|
# +climate.add_alias('--absolute-path', '-abs', '-p')+
|
800
802
|
#
|
801
|
-
# ====
|
803
|
+
# ==== Specification(s) of an option (single statement)
|
802
804
|
#
|
803
805
|
# +climate.add_option('--add-patterns', alias: '-p')+
|
804
806
|
#
|
805
|
-
# ====
|
807
|
+
# ==== Specification(s) of an option (multiple statements)
|
806
808
|
#
|
807
809
|
# +climate.add_option('--add-patterns')+
|
808
810
|
# +climate.add_alias('--add-patterns', '-p')+
|
809
811
|
#
|
810
|
-
# ====
|
812
|
+
# ==== Specification of a valued option (which has to be multiple statements)
|
811
813
|
#
|
812
814
|
# +climate.add_option('--verbosity')+
|
813
815
|
# +climate.add_alias('--verbosity=succinct', '-s')+
|
814
816
|
# +climate.add_alias('--verbosity=verbose', '-v')+
|
815
|
-
def add_alias(
|
817
|
+
def add_alias(name_or_specification, *aliases)
|
816
818
|
|
817
|
-
check_parameter
|
819
|
+
check_parameter name_or_specification, 'name_or_specification', allow_nil: false, types: [ ::String, ::Symbol, ::CLASP::Flag, ::CLASP::Option ]
|
818
820
|
raise ArgumentError, "must supply at least one alias" if aliases.empty?
|
819
821
|
|
820
|
-
case
|
822
|
+
case name_or_specification
|
821
823
|
when ::CLASP::Flag
|
822
824
|
|
823
|
-
self.
|
825
|
+
self.specifications << name_or_specification
|
824
826
|
when ::CLASP::Option
|
825
827
|
|
826
|
-
self.
|
828
|
+
self.specifications << name_or_specification
|
827
829
|
else
|
828
830
|
|
829
|
-
self.
|
831
|
+
self.specifications << CLASP.Alias(name_or_specification, aliases: aliases)
|
830
832
|
end
|
831
833
|
end
|
832
834
|
end # class Climate
|
data/lib/libclimate/version.rb
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
# Purpose: Version for libclimate.Ruby library
|
5
5
|
#
|
6
6
|
# Created: 13th July 2015
|
7
|
-
# Updated: 12th
|
7
|
+
# Updated: 12th April 2019
|
8
8
|
#
|
9
9
|
# Home: http://github.com/synesissoftware/libCLImate.Ruby
|
10
10
|
#
|
@@ -43,7 +43,7 @@
|
|
43
43
|
module LibCLImate
|
44
44
|
|
45
45
|
# Current version of the libCLImate.Ruby library
|
46
|
-
VERSION = '0.
|
46
|
+
VERSION = '0.12.0'
|
47
47
|
|
48
48
|
private
|
49
49
|
VERSION_PARTS_ = VERSION.split(/[.]/).collect { |n| n.to_i } # :nodoc:
|
@@ -1,9 +1,9 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
#############################################################################
|
4
|
-
# File: test/scratch/
|
4
|
+
# File: test/scratch/specifications.rb
|
5
5
|
#
|
6
|
-
# Purpose: Demonstrates use of
|
6
|
+
# Purpose: Demonstrates use of specifications in options and flags
|
7
7
|
#
|
8
8
|
# Created: 7th February 2018
|
9
9
|
# Updated: 7th February 2018
|
@@ -22,10 +22,10 @@ require 'libclimate'
|
|
22
22
|
# ##########################################################
|
23
23
|
# constants
|
24
24
|
|
25
|
-
PROGRAM_VER_MAJOR
|
26
|
-
PROGRAM_VER_MINOR
|
27
|
-
|
28
|
-
PROGRAM_VER_BUILD
|
25
|
+
PROGRAM_VER_MAJOR = 0
|
26
|
+
PROGRAM_VER_MINOR = 1
|
27
|
+
PROGRAM_VER_PATCH = 2
|
28
|
+
PROGRAM_VER_BUILD = 1
|
29
29
|
|
30
30
|
# ##########################################################
|
31
31
|
# command-line parsing
|
@@ -43,7 +43,15 @@ r = LibCLImate::Climate.new do |cl|
|
|
43
43
|
cl.info_lines = [
|
44
44
|
|
45
45
|
:version,
|
46
|
-
'demonstrates use of
|
46
|
+
'demonstrates use of specifications',
|
47
|
+
]
|
48
|
+
|
49
|
+
cl.version = [
|
50
|
+
|
51
|
+
PROGRAM_VER_MAJOR,
|
52
|
+
PROGRAM_VER_MINOR,
|
53
|
+
PROGRAM_VER_PATCH,
|
54
|
+
PROGRAM_VER_BUILD,
|
47
55
|
]
|
48
56
|
end.run
|
49
57
|
|
data/test/unit/tc_minimal.rb
CHANGED
@@ -371,7 +371,7 @@ class Test_Climate_minimal < Test::Unit::TestCase
|
|
371
371
|
climate.add_option('--verbosity', alias: '-v', help: 'determines level of verbose operation', required: true)
|
372
372
|
end
|
373
373
|
|
374
|
-
assert climate.
|
374
|
+
assert climate.specifications[2].required?
|
375
375
|
|
376
376
|
r = climate.run %w{ -v 2 }
|
377
377
|
|
@@ -418,7 +418,7 @@ class Test_Climate_minimal < Test::Unit::TestCase
|
|
418
418
|
|
419
419
|
r = climate.run %w{ }
|
420
420
|
|
421
|
-
assert climate.
|
421
|
+
assert climate.specifications[2].required?
|
422
422
|
|
423
423
|
assert_not_nil r
|
424
424
|
assert_kind_of ::Hash, r
|
@@ -468,7 +468,7 @@ class Test_Climate_minimal < Test::Unit::TestCase
|
|
468
468
|
|
469
469
|
r = climate.run %w{ }
|
470
470
|
|
471
|
-
assert climate.
|
471
|
+
assert climate.specifications[2].required?
|
472
472
|
|
473
473
|
assert_not_nil r
|
474
474
|
assert_kind_of ::Hash, r
|
@@ -518,7 +518,7 @@ class Test_Climate_minimal < Test::Unit::TestCase
|
|
518
518
|
|
519
519
|
r = climate.run %w{ }
|
520
520
|
|
521
|
-
assert climate.
|
521
|
+
assert climate.specifications[2].required?
|
522
522
|
|
523
523
|
assert_not_nil r
|
524
524
|
assert_kind_of ::Hash, r
|
@@ -223,8 +223,8 @@ class Test_Climate_minimal_CLASP < Test::Unit::TestCase
|
|
223
223
|
|
224
224
|
bl = false#proc { is_verbose = true }
|
225
225
|
|
226
|
-
climate.
|
227
|
-
climate.
|
226
|
+
climate.add_flag('--succinct', alias: '-s', help: 'operates succinctly')
|
227
|
+
climate.add_flag('--verbose', alias: '-v', help: 'operates verbosely', extras: { :handle => proc { is_verbose = true }})
|
228
228
|
end
|
229
229
|
|
230
230
|
argv = %w{ --help --verbose --succinct }
|
@@ -281,7 +281,7 @@ class Test_Climate_minimal_CLASP < Test::Unit::TestCase
|
|
281
281
|
climate.stdout = str
|
282
282
|
climate.exit_on_usage = false
|
283
283
|
|
284
|
-
climate.
|
284
|
+
climate.add_flag('--verbose', alias: '-v', help: 'operates verbosely', extras: { handle: proc { is_verbose = true }})
|
285
285
|
end
|
286
286
|
|
287
287
|
argv = %w{ --verbose }
|
@@ -325,7 +325,7 @@ class Test_Climate_minimal_CLASP < Test::Unit::TestCase
|
|
325
325
|
climate.stdout = str
|
326
326
|
climate.exit_on_usage = false
|
327
327
|
|
328
|
-
climate.
|
328
|
+
climate.add_option('--verbosity', alias: '-v', help: 'determines level of verbose operation', extras: { handle: proc { |o| verbosity = o.value }})
|
329
329
|
end
|
330
330
|
|
331
331
|
argv = %w{ -v 2 }
|
@@ -1,6 +1,6 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
#
|
3
|
-
# test
|
3
|
+
# test specifications
|
4
4
|
|
5
5
|
$:.unshift File.join(File.dirname(__FILE__), '../..', 'lib')
|
6
6
|
|
@@ -15,7 +15,7 @@ require 'stringio'
|
|
15
15
|
|
16
16
|
class Test_Climate_minimal < Test::Unit::TestCase
|
17
17
|
|
18
|
-
def
|
18
|
+
def test_option_with_flag_specifications
|
19
19
|
|
20
20
|
options = {}
|
21
21
|
|
@@ -44,7 +44,7 @@ class Test_Climate_minimal < Test::Unit::TestCase
|
|
44
44
|
assert_equal 'action1', options[:action]
|
45
45
|
end
|
46
46
|
|
47
|
-
# invoke via option
|
47
|
+
# invoke via option specification
|
48
48
|
begin
|
49
49
|
options = {}
|
50
50
|
|
@@ -57,7 +57,7 @@ class Test_Climate_minimal < Test::Unit::TestCase
|
|
57
57
|
assert_equal 'action2', options[:action]
|
58
58
|
end
|
59
59
|
|
60
|
-
# invoke via flag
|
60
|
+
# invoke via flag specification
|
61
61
|
begin
|
62
62
|
options = {}
|
63
63
|
|
@@ -70,7 +70,7 @@ class Test_Climate_minimal < Test::Unit::TestCase
|
|
70
70
|
assert_equal 'change', options[:action]
|
71
71
|
end
|
72
72
|
|
73
|
-
# invoke via flag
|
73
|
+
# invoke via flag specification
|
74
74
|
begin
|
75
75
|
options = {}
|
76
76
|
|
@@ -21,7 +21,7 @@ class Test_Climate_with_blocks_CLASP < Test::Unit::TestCase
|
|
21
21
|
|
22
22
|
climate = LibCLImate::Climate.new do |climate|
|
23
23
|
|
24
|
-
climate.
|
24
|
+
climate.add_flag('--verbose') { is_verbose = true }
|
25
25
|
end
|
26
26
|
|
27
27
|
argv = %w{ --verbose }
|
@@ -37,7 +37,7 @@ class Test_Climate_with_blocks_CLASP < Test::Unit::TestCase
|
|
37
37
|
|
38
38
|
climate = LibCLImate::Climate.new do |climate|
|
39
39
|
|
40
|
-
climate.
|
40
|
+
climate.add_option('--flavour') { |o| flavour = o.value }
|
41
41
|
end
|
42
42
|
|
43
43
|
argv = %w{ --flavour=blueberry }
|
metadata
CHANGED
@@ -1,41 +1,41 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: libclimate-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.12.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Wilson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-04-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: clasp-ruby
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '0.
|
19
|
+
version: '0.18'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '0.
|
26
|
+
version: '0.18'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: xqsr3
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - ~>
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0.31'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - ~>
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0.31'
|
41
41
|
description: |2+
|
@@ -45,26 +45,30 @@ executables: []
|
|
45
45
|
extensions: []
|
46
46
|
extra_rdoc_files: []
|
47
47
|
files:
|
48
|
+
- LICENSE
|
49
|
+
- README.md
|
50
|
+
- examples/flag_and_option_specifications.md
|
51
|
+
- examples/flag_and_option_specifications.rb
|
52
|
+
- examples/show_usage_and_version.md
|
53
|
+
- examples/show_usage_and_version.rb
|
54
|
+
- lib/libclimate.rb
|
48
55
|
- lib/libclimate/climate.rb
|
49
56
|
- lib/libclimate/libclimate.rb
|
50
57
|
- lib/libclimate/version.rb
|
51
|
-
- lib/libclimate.rb
|
52
|
-
- test/scratch/aliases.rb
|
53
58
|
- test/scratch/blankzeroes.rb
|
59
|
+
- test/scratch/specifications.rb
|
54
60
|
- test/unit/tc_abort.rb
|
55
61
|
- test/unit/tc_infer_version.rb
|
56
62
|
- test/unit/tc_minimal.rb
|
57
63
|
- test/unit/tc_minimal_CLASP.rb
|
58
|
-
- test/unit/
|
64
|
+
- test/unit/tc_test_specifications.rb
|
59
65
|
- test/unit/tc_values.rb
|
60
66
|
- test/unit/tc_with_blocks.rb
|
61
67
|
- test/unit/tc_with_blocks_CLASP.rb
|
62
68
|
- test/unit/ts_all.rb
|
63
|
-
- README.md
|
64
|
-
- LICENSE
|
65
69
|
homepage: http://www.libclimate.org/
|
66
70
|
licenses:
|
67
|
-
-
|
71
|
+
- BSD-3-Clause
|
68
72
|
metadata: {}
|
69
73
|
post_install_message:
|
70
74
|
rdoc_options: []
|
@@ -72,17 +76,17 @@ require_paths:
|
|
72
76
|
- lib
|
73
77
|
required_ruby_version: !ruby/object:Gem::Requirement
|
74
78
|
requirements:
|
75
|
-
- - ~>
|
79
|
+
- - "~>"
|
76
80
|
- !ruby/object:Gem::Version
|
77
81
|
version: '2.0'
|
78
82
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
79
83
|
requirements:
|
80
|
-
- -
|
84
|
+
- - ">="
|
81
85
|
- !ruby/object:Gem::Version
|
82
86
|
version: '0'
|
83
87
|
requirements: []
|
84
88
|
rubyforge_project:
|
85
|
-
rubygems_version: 2.
|
89
|
+
rubygems_version: 2.2.5
|
86
90
|
signing_key:
|
87
91
|
specification_version: 4
|
88
92
|
summary: libCLImate.Ruby
|