clasp-ruby 0.23.0.2 → 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/examples/cr-example.rb +16 -16
- data/examples/flag_and_option_specifications.rb +15 -15
- data/examples/show_usage_and_version.rb +10 -11
- data/lib/clasp/arguments.rb +86 -87
- data/lib/clasp/clasp.rb +15 -11
- data/lib/clasp/cli.rb +135 -134
- data/lib/clasp/old_module.rb +8 -8
- data/lib/clasp/specifications.rb +325 -322
- data/lib/clasp/util/exceptions.rb +21 -22
- data/lib/clasp/util/value_parser.rb +99 -101
- data/lib/clasp/version.rb +12 -12
- data/lib/clasp-ruby.rb +8 -7
- data/lib/clasp.rb +8 -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 +5 -5
- data/test/scratch/test_usage_with_duplicate_specifications.rb +5 -5
- data/test/unit/tc_ARGV_rewrite.rb +36 -36
- data/test/unit/tc_arguments_1.rb +708 -708
- data/test/unit/tc_arguments_2.rb +43 -43
- data/test/unit/tc_arguments_3.rb +77 -77
- data/test/unit/tc_arguments_inspect.rb +55 -55
- 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 -130
- data/test/unit/tc_extras.rb +24 -24
- data/test/unit/tc_option_required.rb +38 -38
- data/test/unit/tc_option_value_aliases.rb +44 -44
- data/test/unit/tc_specifications.rb +7 -7
- data/test/unit/tc_typed_options.rb +200 -200
- data/test/unit/tc_usage.rb +69 -69
- data/test/unit/tc_with_action.rb +23 -23
- metadata +9 -8
@@ -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-
|
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,27 +53,26 @@ 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
|
|
@@ -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-
|
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,162 +56,160 @@ 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
|
-
|
69
|
-
|
70
|
-
false
|
71
|
-
end
|
72
|
-
|
73
|
-
def self.obtain_integer value, constraint, argument_spec
|
68
|
+
false
|
69
|
+
end
|
74
70
|
|
75
|
-
|
76
|
-
# range testing)
|
71
|
+
def self.obtain_integer value, constraint, argument_spec
|
77
72
|
|
78
|
-
|
73
|
+
# If no value is given, then use the default (and don't do any
|
74
|
+
# range testing)
|
79
75
|
|
80
|
-
|
76
|
+
if (value || '').empty?
|
81
77
|
|
82
|
-
|
78
|
+
def_value = argument_spec.default_value
|
83
79
|
|
84
|
-
|
80
|
+
if (def_value || '').to_s.empty?
|
85
81
|
|
86
|
-
|
82
|
+
msg = "no value specified for the option '#{argument_spec.name}', which has no default value either"
|
87
83
|
|
88
|
-
|
89
|
-
end
|
84
|
+
warn msg if $DEBUG
|
90
85
|
|
91
|
-
|
86
|
+
raise MissingValueException, msg
|
87
|
+
end
|
92
88
|
|
93
|
-
|
94
|
-
rescue ArgumentError => x
|
89
|
+
begin
|
95
90
|
|
96
|
-
|
91
|
+
return Integer(def_value)
|
92
|
+
rescue ArgumentError => _x
|
97
93
|
|
98
|
-
|
94
|
+
msg = "default value '#{def_value}' specified for option '#{argument_spec.name}' that requires the value to be an integer"
|
99
95
|
|
100
|
-
|
101
|
-
end
|
102
|
-
end
|
96
|
+
warn msg if $DEBUG
|
103
97
|
|
104
|
-
|
98
|
+
raise InvalidIntegerException, msg
|
99
|
+
end
|
100
|
+
end
|
105
101
|
|
106
|
-
|
102
|
+
# obtain the integer from the value
|
107
103
|
|
108
|
-
|
104
|
+
v = nil
|
109
105
|
|
110
|
-
|
111
|
-
rescue ArgumentError => x
|
106
|
+
begin
|
112
107
|
|
113
|
-
|
108
|
+
v = Integer(value)
|
109
|
+
rescue ArgumentError => _x
|
114
110
|
|
115
|
-
|
111
|
+
msg = "value '#{value}' specified for option '#{argument_spec.name}' that requires the value to be an integer"
|
116
112
|
|
117
|
-
|
118
|
-
end
|
113
|
+
warn msg if $DEBUG
|
119
114
|
|
120
|
-
|
121
|
-
|
122
|
-
# - values (obtained from argument_spec#values)
|
123
|
-
# - range
|
124
|
-
# - minimum & maximum
|
115
|
+
raise InvalidIntegerException, msg
|
116
|
+
end
|
125
117
|
|
126
|
-
|
118
|
+
# Is there a value constraint?:
|
119
|
+
#
|
120
|
+
# - values (obtained from argument_spec#values)
|
121
|
+
# - range
|
122
|
+
# - minimum & maximum
|
127
123
|
|
128
|
-
|
124
|
+
values_range = argument_spec.values_range
|
129
125
|
|
130
|
-
|
126
|
+
unless values_range.empty?
|
131
127
|
|
132
|
-
|
128
|
+
v_s = v.to_s
|
133
129
|
|
134
|
-
|
130
|
+
v_s = '+' + v_s unless '-' == v_s[0]
|
135
131
|
|
136
|
-
|
132
|
+
vr_s = values_range.map { |x| x.to_s }.map { |x| '-' == x[0] ? x : '+' + x }
|
137
133
|
|
138
|
-
|
134
|
+
unless vr_s.include? v_s
|
139
135
|
|
140
|
-
|
141
|
-
end
|
142
|
-
else
|
136
|
+
msg = "given value '#{value}' specified for option '#{argument_spec.name}' does not fall within the required range"
|
143
137
|
|
144
|
-
|
145
|
-
|
138
|
+
raise IntegerOutOfRangeException, msg
|
139
|
+
end
|
140
|
+
else
|
146
141
|
|
147
|
-
|
142
|
+
case range = constraint[:range]
|
143
|
+
when :negative
|
148
144
|
|
149
|
-
|
145
|
+
if v >= 0
|
150
146
|
|
151
|
-
|
152
|
-
end
|
153
|
-
when :positive
|
147
|
+
msg = "given value '#{value}' specified for option '#{argument_spec.name}' must be a negative integer"
|
154
148
|
|
155
|
-
|
149
|
+
raise IntegerOutOfRangeException, msg
|
150
|
+
end
|
151
|
+
when :positive
|
156
152
|
|
157
|
-
|
153
|
+
if v < 1
|
158
154
|
|
159
|
-
|
160
|
-
end
|
161
|
-
when :non_positive
|
155
|
+
msg = "given value '#{value}' specified for option '#{argument_spec.name}' must be a positive integer"
|
162
156
|
|
163
|
-
|
157
|
+
raise IntegerOutOfRangeException, msg
|
158
|
+
end
|
159
|
+
when :non_positive
|
164
160
|
|
165
|
-
|
161
|
+
if v > 0
|
166
162
|
|
167
|
-
|
168
|
-
end
|
169
|
-
when :non_negative
|
163
|
+
msg = "given value '#{value}' specified for option '#{argument_spec.name}' must be a non-positive integer"
|
170
164
|
|
171
|
-
|
165
|
+
raise IntegerOutOfRangeException, msg
|
166
|
+
end
|
167
|
+
when :non_negative
|
172
168
|
|
173
|
-
|
169
|
+
if v < 0
|
174
170
|
|
175
|
-
|
176
|
-
end
|
177
|
-
when Range
|
171
|
+
msg = "given value '#{value}' specified for option '#{argument_spec.name}' must be a non-negative integer"
|
178
172
|
|
179
|
-
|
173
|
+
raise IntegerOutOfRangeException, msg
|
174
|
+
end
|
175
|
+
when Range
|
180
176
|
|
181
|
-
|
177
|
+
unless range.include?
|
182
178
|
|
183
|
-
|
184
|
-
end
|
185
|
-
else
|
179
|
+
msg = "given value '#{value}' specified for option '#{argument_spec.name}' does not fall within the required range"
|
186
180
|
|
187
|
-
|
188
|
-
|
189
|
-
|
181
|
+
raise IntegerOutOfRangeException, msg
|
182
|
+
end
|
183
|
+
else
|
190
184
|
|
191
|
-
|
185
|
+
;
|
192
186
|
end
|
193
|
-
|
194
|
-
|
195
|
-
def value_from_Proc(constraint, value, arg, given_index, given_name, argument_spec, extras)
|
187
|
+
end
|
196
188
|
|
197
|
-
|
189
|
+
v
|
198
190
|
end
|
191
|
+
end # module Internal_
|
199
192
|
|
200
|
-
|
193
|
+
def value_from_Proc(constraint, value, arg, given_index, given_name, argument_spec, extras)
|
201
194
|
|
202
|
-
|
195
|
+
value
|
196
|
+
end
|
203
197
|
|
204
|
-
|
198
|
+
def value_from_Hash(constraint, value, arg, given_index, given_name, argument_spec, extras)
|
205
199
|
|
200
|
+
# Check if type is specified; if not, String is assumed
|
206
201
|
|
207
|
-
|
202
|
+
type = constraint[:type]
|
208
203
|
|
209
|
-
return Internal_.obtain_integer(value, constraint, argument_spec)
|
210
|
-
end
|
211
204
|
|
205
|
+
if Internal_.is_integer?(type)
|
212
206
|
|
213
|
-
|
207
|
+
return Internal_.obtain_integer(value, constraint, argument_spec)
|
214
208
|
end
|
209
|
+
|
210
|
+
|
211
|
+
value
|
212
|
+
end
|
215
213
|
end # module ValueParser
|
216
214
|
|
217
215
|
end # module util
|
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
|
#
|
@@ -52,18 +52,18 @@
|
|
52
52
|
module CLASP
|
53
53
|
|
54
54
|
# Current version of the CLASP.Ruby library
|
55
|
-
VERSION
|
55
|
+
VERSION = '0.23.1'
|
56
56
|
|
57
57
|
private
|
58
58
|
# @!visibility private
|
59
|
-
VERSION_PARTS_
|
59
|
+
VERSION_PARTS_ = VERSION.split(/[.]/).collect { |n| n.to_i } # :nodoc:
|
60
60
|
public
|
61
61
|
# Major version of the CLASP.Ruby library
|
62
|
-
VERSION_MAJOR
|
62
|
+
VERSION_MAJOR = VERSION_PARTS_[0] # :nodoc:
|
63
63
|
# Minor version of the CLASP.Ruby library
|
64
|
-
VERSION_MINOR
|
64
|
+
VERSION_MINOR = VERSION_PARTS_[1] # :nodoc:
|
65
65
|
# Revision version of the CLASP.Ruby library
|
66
|
-
VERSION_REVISION
|
66
|
+
VERSION_REVISION = VERSION_PARTS_[2] # :nodoc:
|
67
67
|
|
68
68
|
end # module CLASP
|
69
69
|
|
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
|
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
|
@@ -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,12 +6,12 @@ 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
17
|
Arguments = CLASP::Arguments.new(ARGV, Specifications)
|
@@ -6,12 +6,12 @@ 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
17
|
Arguments = CLASP::Arguments.new(ARGV, Specifications)
|