clasp-ruby 0.23.0.1 → 0.23.1
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/README.md +63 -52
- data/examples/cr-example.rb +16 -16
- data/examples/flag_and_option_specifications.md +25 -25
- data/examples/flag_and_option_specifications.rb +15 -15
- data/examples/show_usage_and_version.md +5 -5
- data/examples/show_usage_and_version.rb +10 -11
- data/examples/simple_command_line_no_specifications.rb +1 -1
- data/lib/clasp/arguments.rb +543 -543
- data/lib/clasp/clasp.rb +15 -11
- data/lib/clasp/cli.rb +145 -139
- data/lib/clasp/doc_.rb +3 -3
- data/lib/clasp/old_module.rb +9 -9
- data/lib/clasp/specifications.rb +346 -339
- data/lib/clasp/util/exceptions.rb +22 -23
- data/lib/clasp/util/value_parser.rb +101 -103
- data/lib/clasp/version.rb +20 -20
- data/lib/clasp-ruby.rb +9 -7
- data/lib/clasp.rb +9 -7
- data/test/scratch/test_list_command_line.rb +6 -6
- data/test/scratch/test_specifications.rb +14 -14
- data/test/scratch/test_usage.rb +6 -6
- data/test/scratch/test_usage_from_DATA.rb +1 -1
- data/test/scratch/test_usage_with_duplicate_specifications.rb +6 -6
- data/test/unit/tc_ARGV_rewrite.rb +36 -38
- data/test/unit/tc_arguments_1.rb +694 -694
- data/test/unit/tc_arguments_2.rb +52 -53
- data/test/unit/tc_arguments_3.rb +77 -77
- data/test/unit/tc_arguments_inspect.rb +55 -56
- data/test/unit/tc_cli.rb +4 -4
- data/test/unit/tc_default_value.rb +91 -91
- data/test/unit/tc_defaults_1.rb +38 -38
- data/test/unit/tc_examples_Arguments.rb +130 -132
- data/test/unit/tc_extras.rb +24 -26
- data/test/unit/tc_option_required.rb +38 -39
- data/test/unit/tc_option_value_aliases.rb +45 -45
- data/test/unit/tc_specifications.rb +7 -8
- data/test/unit/tc_typed_options.rb +204 -204
- data/test/unit/tc_usage.rb +112 -55
- data/test/unit/tc_with_action.rb +23 -24
- data/test/unit/ts_all.rb +1 -1
- metadata +12 -10
@@ -1,17 +1,17 @@
|
|
1
1
|
|
2
2
|
# ######################################################################## #
|
3
|
-
# File:
|
3
|
+
# File: clasp/util/exceptions.rb
|
4
4
|
#
|
5
|
-
# Purpose:
|
5
|
+
# Purpose: Exception classes
|
6
6
|
#
|
7
|
-
# Created:
|
8
|
-
# Updated:
|
7
|
+
# Created: 20th April 2019
|
8
|
+
# Updated: 6th March 2025
|
9
9
|
#
|
10
|
-
# Home:
|
10
|
+
# Home: http://github.com/synesissoftware/CLASP.Ruby
|
11
11
|
#
|
12
|
-
# Author:
|
12
|
+
# Author: Matthew Wilson
|
13
13
|
#
|
14
|
-
# Copyright (c) 2019, Matthew Wilson and Synesis
|
14
|
+
# Copyright (c) 2019-2025, Matthew Wilson and Synesis Information Systems
|
15
15
|
# All rights reserved.
|
16
16
|
#
|
17
17
|
# Redistribution and use in source and binary forms, with or without
|
@@ -53,30 +53,29 @@ module CLASP # :nodoc:
|
|
53
53
|
# Exceptions
|
54
54
|
module Exceptions
|
55
55
|
|
56
|
-
|
57
|
-
|
56
|
+
# Root exception for CLASP
|
57
|
+
class CLASPException < RuntimeError; end
|
58
58
|
|
59
|
-
|
60
|
-
|
59
|
+
# Root exception for value parsing
|
60
|
+
class ValueParserException < CLASPException; end
|
61
61
|
|
62
|
-
|
63
|
-
|
62
|
+
# No value specified (and no default value) for an option
|
63
|
+
class MissingValueException < ValueParserException; end
|
64
64
|
|
65
|
-
|
66
|
-
|
65
|
+
# Exception class indicating invalid values (as opposed to types)
|
66
|
+
class InvalidValueException < ValueParserException; end
|
67
67
|
|
68
|
-
|
69
|
-
|
68
|
+
# The given value could not be recognised as a (properly-formatted) number
|
69
|
+
class InvalidNumberException < InvalidValueException; end
|
70
70
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
# The value was a valid integer but is out of range
|
75
|
-
class IntegerOutOfRangeException < InvalidValueException; end
|
71
|
+
# The given value could not be recognised as a (properly-formatted) integer
|
72
|
+
class InvalidIntegerException < InvalidNumberException; end
|
76
73
|
|
74
|
+
# The value was a valid integer but is out of range
|
75
|
+
class IntegerOutOfRangeException < InvalidValueException; end
|
77
76
|
end # module Exceptions
|
78
77
|
end # module CLASP
|
79
78
|
|
80
|
-
# ############################## end of file ############################# #
|
81
79
|
|
80
|
+
# ############################## end of file ############################# #
|
82
81
|
|
@@ -1,17 +1,17 @@
|
|
1
1
|
|
2
2
|
# ######################################################################## #
|
3
|
-
# File:
|
3
|
+
# File: clasp/util/value_parser.rb
|
4
4
|
#
|
5
|
-
# Purpose:
|
5
|
+
# Purpose: Utility component for typed values
|
6
6
|
#
|
7
|
-
# Created:
|
8
|
-
# Updated:
|
7
|
+
# Created: 20th April 2019
|
8
|
+
# Updated: 6th March 2025
|
9
9
|
#
|
10
|
-
# Home:
|
10
|
+
# Home: http://github.com/synesissoftware/CLASP.Ruby
|
11
11
|
#
|
12
|
-
# Author:
|
12
|
+
# Author: Matthew Wilson
|
13
13
|
#
|
14
|
-
# Copyright (c) 2019, Matthew Wilson and Synesis Software
|
14
|
+
# Copyright (c) 2019-2025, Matthew Wilson and Synesis Software
|
15
15
|
# All rights reserved.
|
16
16
|
#
|
17
17
|
# Redistribution and use in source and binary forms, with or without
|
@@ -56,167 +56,165 @@ module Util # :nodoc:
|
|
56
56
|
# @!visibility private
|
57
57
|
module ValueParser # :nodoc: all
|
58
58
|
|
59
|
-
|
59
|
+
module Internal_ # :nodoc: all
|
60
60
|
|
61
|
-
|
61
|
+
include Exceptions
|
62
62
|
|
63
|
-
|
63
|
+
def self.is_integer? type
|
64
64
|
|
65
|
-
|
65
|
+
return true if Integer == type
|
66
|
+
return true if :integer == type
|
66
67
|
|
67
|
-
|
68
|
-
|
68
|
+
false
|
69
|
+
end
|
69
70
|
|
70
|
-
|
71
|
-
end
|
71
|
+
def self.obtain_integer value, constraint, argument_spec
|
72
72
|
|
73
|
-
|
73
|
+
# If no value is given, then use the default (and don't do any
|
74
|
+
# range testing)
|
74
75
|
|
75
|
-
|
76
|
-
# range testing)
|
76
|
+
if (value || '').empty?
|
77
77
|
|
78
|
-
|
78
|
+
def_value = argument_spec.default_value
|
79
79
|
|
80
|
-
|
80
|
+
if (def_value || '').to_s.empty?
|
81
81
|
|
82
|
-
|
82
|
+
msg = "no value specified for the option '#{argument_spec.name}', which has no default value either"
|
83
83
|
|
84
|
-
|
84
|
+
warn msg if $DEBUG
|
85
85
|
|
86
|
-
|
86
|
+
raise MissingValueException, msg
|
87
|
+
end
|
87
88
|
|
88
|
-
|
89
|
-
end
|
89
|
+
begin
|
90
90
|
|
91
|
-
|
91
|
+
return Integer(def_value)
|
92
|
+
rescue ArgumentError => _x
|
92
93
|
|
93
|
-
|
94
|
-
rescue ArgumentError => x
|
94
|
+
msg = "default value '#{def_value}' specified for option '#{argument_spec.name}' that requires the value to be an integer"
|
95
95
|
|
96
|
-
|
96
|
+
warn msg if $DEBUG
|
97
97
|
|
98
|
-
|
98
|
+
raise InvalidIntegerException, msg
|
99
|
+
end
|
100
|
+
end
|
99
101
|
|
100
|
-
|
101
|
-
end
|
102
|
-
end
|
102
|
+
# obtain the integer from the value
|
103
103
|
|
104
|
-
|
104
|
+
v = nil
|
105
105
|
|
106
|
-
|
106
|
+
begin
|
107
107
|
|
108
|
-
|
108
|
+
v = Integer(value)
|
109
|
+
rescue ArgumentError => _x
|
109
110
|
|
110
|
-
|
111
|
-
rescue ArgumentError => x
|
111
|
+
msg = "value '#{value}' specified for option '#{argument_spec.name}' that requires the value to be an integer"
|
112
112
|
|
113
|
-
|
113
|
+
warn msg if $DEBUG
|
114
114
|
|
115
|
-
|
115
|
+
raise InvalidIntegerException, msg
|
116
|
+
end
|
116
117
|
|
117
|
-
|
118
|
-
|
118
|
+
# Is there a value constraint?:
|
119
|
+
#
|
120
|
+
# - values (obtained from argument_spec#values)
|
121
|
+
# - range
|
122
|
+
# - minimum & maximum
|
119
123
|
|
120
|
-
|
121
|
-
#
|
122
|
-
# - values (obtained from argument_spec#values)
|
123
|
-
# - range
|
124
|
-
# - minimum & maximum
|
124
|
+
values_range = argument_spec.values_range
|
125
125
|
|
126
|
-
|
126
|
+
unless values_range.empty?
|
127
127
|
|
128
|
-
|
128
|
+
v_s = v.to_s
|
129
129
|
|
130
|
-
|
130
|
+
v_s = '+' + v_s unless '-' == v_s[0]
|
131
131
|
|
132
|
-
|
132
|
+
vr_s = values_range.map { |x| x.to_s }.map { |x| '-' == x[0] ? x : '+' + x }
|
133
133
|
|
134
|
-
|
134
|
+
unless vr_s.include? v_s
|
135
135
|
|
136
|
-
|
136
|
+
msg = "given value '#{value}' specified for option '#{argument_spec.name}' does not fall within the required range"
|
137
137
|
|
138
|
-
|
138
|
+
raise IntegerOutOfRangeException, msg
|
139
|
+
end
|
140
|
+
else
|
139
141
|
|
140
|
-
|
141
|
-
|
142
|
-
else
|
142
|
+
case range = constraint[:range]
|
143
|
+
when :negative
|
143
144
|
|
144
|
-
|
145
|
-
when :negative
|
145
|
+
if v >= 0
|
146
146
|
|
147
|
-
|
147
|
+
msg = "given value '#{value}' specified for option '#{argument_spec.name}' must be a negative integer"
|
148
148
|
|
149
|
-
|
149
|
+
raise IntegerOutOfRangeException, msg
|
150
|
+
end
|
151
|
+
when :positive
|
150
152
|
|
151
|
-
|
152
|
-
end
|
153
|
-
when :positive
|
153
|
+
if v < 1
|
154
154
|
|
155
|
-
|
155
|
+
msg = "given value '#{value}' specified for option '#{argument_spec.name}' must be a positive integer"
|
156
156
|
|
157
|
-
|
157
|
+
raise IntegerOutOfRangeException, msg
|
158
|
+
end
|
159
|
+
when :non_positive
|
158
160
|
|
159
|
-
|
160
|
-
end
|
161
|
-
when :non_positive
|
161
|
+
if v > 0
|
162
162
|
|
163
|
-
|
163
|
+
msg = "given value '#{value}' specified for option '#{argument_spec.name}' must be a non-positive integer"
|
164
164
|
|
165
|
-
|
165
|
+
raise IntegerOutOfRangeException, msg
|
166
|
+
end
|
167
|
+
when :non_negative
|
166
168
|
|
167
|
-
|
168
|
-
end
|
169
|
-
when :non_negative
|
169
|
+
if v < 0
|
170
170
|
|
171
|
-
|
171
|
+
msg = "given value '#{value}' specified for option '#{argument_spec.name}' must be a non-negative integer"
|
172
172
|
|
173
|
-
|
173
|
+
raise IntegerOutOfRangeException, msg
|
174
|
+
end
|
175
|
+
when Range
|
174
176
|
|
175
|
-
|
176
|
-
end
|
177
|
-
when Range
|
177
|
+
unless range.include?
|
178
178
|
|
179
|
-
|
179
|
+
msg = "given value '#{value}' specified for option '#{argument_spec.name}' does not fall within the required range"
|
180
180
|
|
181
|
-
|
181
|
+
raise IntegerOutOfRangeException, msg
|
182
|
+
end
|
183
|
+
else
|
182
184
|
|
183
|
-
|
184
|
-
|
185
|
-
|
185
|
+
;
|
186
|
+
end
|
187
|
+
end
|
186
188
|
|
187
|
-
|
188
|
-
|
189
|
-
|
189
|
+
v
|
190
|
+
end
|
191
|
+
end # module Internal_
|
190
192
|
|
191
|
-
|
192
|
-
end
|
193
|
-
end # module Internal_
|
193
|
+
def value_from_Proc(constraint, value, arg, given_index, given_name, argument_spec, extras)
|
194
194
|
|
195
|
-
|
195
|
+
value
|
196
|
+
end
|
196
197
|
|
197
|
-
|
198
|
-
end
|
198
|
+
def value_from_Hash(constraint, value, arg, given_index, given_name, argument_spec, extras)
|
199
199
|
|
200
|
-
|
200
|
+
# Check if type is specified; if not, String is assumed
|
201
201
|
|
202
|
-
|
202
|
+
type = constraint[:type]
|
203
203
|
|
204
|
-
type = constraint[:type]
|
205
204
|
|
205
|
+
if Internal_.is_integer?(type)
|
206
206
|
|
207
|
-
|
207
|
+
return Internal_.obtain_integer(value, constraint, argument_spec)
|
208
|
+
end
|
208
209
|
|
209
|
-
return Internal_.obtain_integer(value, constraint, argument_spec)
|
210
|
-
end
|
211
210
|
|
212
|
-
|
213
|
-
|
214
|
-
end
|
211
|
+
value
|
212
|
+
end
|
215
213
|
end # module ValueParser
|
216
214
|
|
217
215
|
end # module util
|
218
216
|
end # module CLASP
|
219
217
|
|
220
|
-
# ############################## end of file ############################# #
|
221
218
|
|
219
|
+
# ############################## end of file ############################# #
|
222
220
|
|
data/lib/clasp/version.rb
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
|
2
2
|
# ######################################################################## #
|
3
|
-
# File:
|
3
|
+
# File: clasp/version.rb
|
4
4
|
#
|
5
|
-
# Purpose:
|
5
|
+
# Purpose: Version for CLASP.Ruby library
|
6
6
|
#
|
7
|
-
# Created:
|
8
|
-
# Updated:
|
7
|
+
# Created: 16th November 2014
|
8
|
+
# Updated: 6th March 2025
|
9
9
|
#
|
10
|
-
# Home:
|
10
|
+
# Home: http://github.com/synesissoftware/CLASP.Ruby
|
11
11
|
#
|
12
|
-
# Author:
|
12
|
+
# Author: Matthew Wilson
|
13
13
|
#
|
14
|
-
# Copyright (c) 2019-
|
14
|
+
# Copyright (c) 2019-2025, Matthew Wilson and Synesis Information Systems
|
15
15
|
# Copyright (c) 2014-2019, Matthew Wilson and Synesis Software
|
16
16
|
# All rights reserved.
|
17
17
|
#
|
@@ -51,22 +51,22 @@
|
|
51
51
|
|
52
52
|
module CLASP
|
53
53
|
|
54
|
-
|
55
|
-
|
54
|
+
# Current version of the CLASP.Ruby library
|
55
|
+
VERSION = '0.23.1'
|
56
56
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
57
|
+
private
|
58
|
+
# @!visibility private
|
59
|
+
VERSION_PARTS_ = VERSION.split(/[.]/).collect { |n| n.to_i } # :nodoc:
|
60
|
+
public
|
61
|
+
# Major version of the CLASP.Ruby library
|
62
|
+
VERSION_MAJOR = VERSION_PARTS_[0] # :nodoc:
|
63
|
+
# Minor version of the CLASP.Ruby library
|
64
|
+
VERSION_MINOR = VERSION_PARTS_[1] # :nodoc:
|
65
|
+
# Revision version of the CLASP.Ruby library
|
66
|
+
VERSION_REVISION = VERSION_PARTS_[2] # :nodoc:
|
67
67
|
|
68
68
|
end # module CLASP
|
69
69
|
|
70
|
-
# ############################## end of file ############################# #
|
71
70
|
|
71
|
+
# ############################## end of file ############################# #
|
72
72
|
|
data/lib/clasp-ruby.rb
CHANGED
@@ -1,17 +1,18 @@
|
|
1
1
|
|
2
2
|
# ######################################################################## #
|
3
|
-
# File:
|
3
|
+
# File: clasp-ruby.rb
|
4
4
|
#
|
5
|
-
# Purpose:
|
5
|
+
# Purpose: Top-level source for CLASP.ruby library [alternate]
|
6
6
|
#
|
7
|
-
# Created:
|
8
|
-
# Updated:
|
7
|
+
# Created: 13th October 2014
|
8
|
+
# Updated: 6th March 2025
|
9
9
|
#
|
10
|
-
# Home:
|
10
|
+
# Home: http://github.com/synesissoftware/CLASP.Ruby
|
11
11
|
#
|
12
|
-
# Author:
|
12
|
+
# Author: Matthew Wilson
|
13
13
|
#
|
14
|
-
# Copyright (c)
|
14
|
+
# Copyright (c) 2019-2025, Matthew Wilson and Synesis Information Systems
|
15
|
+
# Copyright (c) 2014-2019, Matthew Wilson and Synesis Software
|
15
16
|
# All rights reserved.
|
16
17
|
#
|
17
18
|
# Redistribution and use in source and binary forms, with or without
|
@@ -47,5 +48,6 @@
|
|
47
48
|
# clasp-ruby.rb -> clasp/clasp.rb
|
48
49
|
require 'clasp/clasp'
|
49
50
|
|
51
|
+
|
50
52
|
# ############################## end of file ############################# #
|
51
53
|
|
data/lib/clasp.rb
CHANGED
@@ -1,17 +1,18 @@
|
|
1
1
|
|
2
2
|
# ######################################################################## #
|
3
|
-
# File:
|
3
|
+
# File: clasp.rb
|
4
4
|
#
|
5
|
-
# Purpose:
|
5
|
+
# Purpose: Top-level source for CLASP.ruby library
|
6
6
|
#
|
7
|
-
# Created:
|
8
|
-
# Updated:
|
7
|
+
# Created: 13th October 2014
|
8
|
+
# Updated: 6th March 2025
|
9
9
|
#
|
10
|
-
# Home:
|
10
|
+
# Home: http://github.com/synesissoftware/CLASP.Ruby
|
11
11
|
#
|
12
|
-
# Author:
|
12
|
+
# Author: Matthew Wilson
|
13
13
|
#
|
14
|
-
# Copyright (c)
|
14
|
+
# Copyright (c) 2019-2025, Matthew Wilson and Synesis Information Systems
|
15
|
+
# Copyright (c) 2014-2019, Matthew Wilson and Synesis Software
|
15
16
|
# All rights reserved.
|
16
17
|
#
|
17
18
|
# Redistribution and use in source and binary forms, with or without
|
@@ -47,5 +48,6 @@
|
|
47
48
|
# clasp.rb -> clasp/clasp.rb
|
48
49
|
require 'clasp/clasp'
|
49
50
|
|
51
|
+
|
50
52
|
# ############################## end of file ############################# #
|
51
53
|
|
@@ -6,10 +6,10 @@ require 'clasp'
|
|
6
6
|
|
7
7
|
Specifications = [
|
8
8
|
|
9
|
-
|
10
|
-
|
9
|
+
CLASP.Flag('--help', help: 'shows this help and quits'),
|
10
|
+
CLASP.Flag('--version', alias: '-v', help: 'shows this version and quits'),
|
11
11
|
|
12
|
-
|
12
|
+
CLASP.Option('--verbosity', aliases: %w{ -V --verbose }),
|
13
13
|
]
|
14
14
|
|
15
15
|
Args = CLASP::Arguments.new(ARGV, Specifications)
|
@@ -18,20 +18,20 @@ puts
|
|
18
18
|
puts "flags #{Args.flags.size}:"
|
19
19
|
Args.flags.each do |flag|
|
20
20
|
|
21
|
-
|
21
|
+
puts "\t#{flag}\t[#{flag.given_index}, #{flag.given_name}, #{flag.argument_specification}, #{flag.given_hyphens}, #{flag.given_label}, #{flag.name}]"
|
22
22
|
end
|
23
23
|
|
24
24
|
puts
|
25
25
|
puts "options #{Args.options.size}:"
|
26
26
|
Args.options.each do |option|
|
27
27
|
|
28
|
-
|
28
|
+
puts "\t#{option}\t[#{option.given_index}, #{option.given_name}, #{option.argument_specification}, #{option.given_hyphens}, #{option.given_label}, #{option.name}, #{option.value}]"
|
29
29
|
end
|
30
30
|
|
31
31
|
puts
|
32
32
|
puts "values #{Args.values.size}:"
|
33
33
|
Args.values.each do |value|
|
34
34
|
|
35
|
-
|
35
|
+
puts "\t#{value}"
|
36
36
|
end
|
37
37
|
|
@@ -6,34 +6,34 @@ require 'clasp'
|
|
6
6
|
|
7
7
|
Specifications = [
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
CLASP.Flag('--help', help: 'shows this help and quits'),
|
10
|
+
CLASP.Flag('--version', alias: '-v', help: 'shows this version and quits'),
|
11
|
+
CLASP.Alias('--version', aliases: [ '-ver', '-V' ]),
|
12
12
|
|
13
|
-
|
14
|
-
|
13
|
+
CLASP.Option('--directory', alias: '-d', help: 'a directory within which to process'),
|
14
|
+
CLASP.Option('--patterns', alias: '-p', help: "one or more patterns against which the entries will be matched, separated by '|' or the platform-specific separator - ':' UNIX, ';' Windows"),
|
15
15
|
|
16
|
-
|
17
|
-
|
16
|
+
CLASP.Option('--case-sensitive', alias: '-c', help: 'determines whether case sensitive', values_range: %W{ yes no true false }, default_value: false),
|
17
|
+
CLASP.Alias('--case-sensitive=false', alias: '-I'),
|
18
18
|
]
|
19
19
|
|
20
|
-
Arguments
|
21
|
-
Flags
|
22
|
-
Options
|
23
|
-
Values
|
20
|
+
Arguments = CLASP::Arguments.new(ARGV, Specifications)
|
21
|
+
Flags = Arguments.flags
|
22
|
+
Options = Arguments.options
|
23
|
+
Values = Arguments.values
|
24
24
|
|
25
25
|
if Flags.include? '--help'
|
26
26
|
|
27
|
-
|
27
|
+
CLASP.show_usage Specifications, exit: 0
|
28
28
|
end
|
29
29
|
|
30
30
|
Flags.each do |f|
|
31
31
|
|
32
|
-
|
32
|
+
puts f.inspect
|
33
33
|
end
|
34
34
|
|
35
35
|
Options.each do |o|
|
36
36
|
|
37
|
-
|
37
|
+
puts o.inspect
|
38
38
|
end
|
39
39
|
|
data/test/scratch/test_usage.rb
CHANGED
@@ -6,15 +6,15 @@ require 'clasp'
|
|
6
6
|
|
7
7
|
Specifications = [
|
8
8
|
|
9
|
-
|
9
|
+
CLASP.Flag('--version', alias: '-v', help: 'shows the program version and quits'),
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
11
|
+
CLASP.Option('--verbosity', help: 'the verbosity', values: [ 'silent', 'quiet', 'succinct', 'chatty', 'verbose' ]),
|
12
|
+
CLASP.Option('--length', alias: '-l', help: 'specifies the length'),
|
13
|
+
CLASP.Flag('--verbosity=succinct', aliases: [ '--succinct', '-s' ]),
|
14
|
+
CLASP.Flag('--verbosity=verbose', alias: '--verbose'),
|
15
15
|
]
|
16
16
|
|
17
|
-
Arguments
|
17
|
+
Arguments = CLASP::Arguments.new(ARGV, Specifications)
|
18
18
|
|
19
19
|
puts
|
20
20
|
puts '*' * 40
|
@@ -6,15 +6,15 @@ require 'clasp'
|
|
6
6
|
|
7
7
|
Specifications = [
|
8
8
|
|
9
|
-
|
9
|
+
CLASP.Flag('--version', alias: '-v', help: 'shows the program version and quits'),
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
11
|
+
CLASP.Option('--verbosity', help: 'the verbosity', values: [ 'silent', 'quiet', 'succinct', 'chatty', 'verbose' ]),
|
12
|
+
CLASP.Option('--length', alias: '-l', help: 'specifies the length'),
|
13
|
+
CLASP.Flag('--verbosity=succinct', aliases: [ '--succinct', '-s' ]),
|
14
|
+
CLASP.Flag('--verbosity=verbose', aliases: [ '--verbose', '-v' ]),
|
15
15
|
]
|
16
16
|
|
17
|
-
Arguments
|
17
|
+
Arguments = CLASP::Arguments.new(ARGV, Specifications)
|
18
18
|
|
19
19
|
puts
|
20
20
|
puts '*' * 40
|