Usage 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +1 -0
- data/README +137 -0
- data/TODO +6 -0
- data/lib/Usage.rb +858 -0
- data/samples/Sample1.rb +9 -0
- data/samples/Sample2.rb +9 -0
- data/samples/Sample3.rb +14 -0
- data/samples/Sample4.rb +21 -0
- data/samples/Sample5.rb +13 -0
- data/samples/Sample6.rb +11 -0
- data/samples/Sample7.rb +8 -0
- data/tests/TC_Usage.rb +303 -0
- metadata +60 -0
data/samples/Sample1.rb
ADDED
data/samples/Sample2.rb
ADDED
data/samples/Sample3.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#
|
2
|
+
# This illustrates the use of optional arguments. This program can
|
3
|
+
# handle 1 or 2 arguments. If there is one, then #optional_arg returns
|
4
|
+
# nil and #required_arg returns the argument. If there is two then
|
5
|
+
# #optional_arg returns the first argument and #required_arg returns the
|
6
|
+
# second.
|
7
|
+
#
|
8
|
+
require "Usage"
|
9
|
+
|
10
|
+
usage = Usage.new "required_arg [optional_arg] "
|
11
|
+
|
12
|
+
puts "required arg = #{usage.required_arg.inspect}"
|
13
|
+
puts "optional arg = #{usage.optional_arg.inspect}"
|
14
|
+
|
data/samples/Sample4.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
#
|
2
|
+
# This demonstrates both optional and required options. The ones surrounded by
|
3
|
+
# square brackets are optional and their arguments are included with them. The
|
4
|
+
# ones surrounded with parenthesis are required options and the arguments that
|
5
|
+
# are in there are included with them.
|
6
|
+
#
|
7
|
+
# When the usage is reported to the user, the parenthesis are not included.
|
8
|
+
#
|
9
|
+
|
10
|
+
require "Usage"
|
11
|
+
|
12
|
+
usage = Usage.new "[-y] [-x excluded_tags] (-z ztag) (-w warning_arg) files..."
|
13
|
+
|
14
|
+
puts "dash_y = #{usage.dash_y.inspect}"
|
15
|
+
puts "dash_x = #{usage.dash_x.inspect}"
|
16
|
+
puts "excluded_tags = #{usage.excluded_tags.inspect}"
|
17
|
+
puts "dash_z = #{usage.dash_y.inspect}"
|
18
|
+
puts "ztag = #{usage.ztag.inspect}"
|
19
|
+
puts "dash_w = #{usage.dash_w.inspect}"
|
20
|
+
puts "warning = #{usage.warning.inspect}"
|
21
|
+
puts "files = #{usage.files.inspect}"
|
data/samples/Sample5.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
#
|
2
|
+
# This illustrates how to use long options (ie. --option)
|
3
|
+
#
|
4
|
+
require "Usage"
|
5
|
+
|
6
|
+
usage = Usage.new "-x files...", <<EOT
|
7
|
+
-x,--exclusive specifies exclusive access to the files
|
8
|
+
EOT
|
9
|
+
|
10
|
+
puts "dash_x = #{usage.dash_x.inspect}"
|
11
|
+
puts "exclusive = #{usage.exclusive.inspect}"
|
12
|
+
puts "files = #{usage.files.inspect}"
|
13
|
+
|
data/samples/Sample6.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
#
|
2
|
+
# This sample illustrates typed arguments. The argument that
|
3
|
+
# starts with % indicates and Integer and a @ indicates a
|
4
|
+
# date/time (a Time object is produced).
|
5
|
+
#
|
6
|
+
require "Usage"
|
7
|
+
|
8
|
+
usage = Usage.new "%num_times @on_date"
|
9
|
+
|
10
|
+
puts "usage.num_times = #{usage.num_times.inspect}"
|
11
|
+
puts "on_date = #{usage.on_date.inspect}"
|
data/samples/Sample7.rb
ADDED
data/tests/TC_Usage.rb
ADDED
@@ -0,0 +1,303 @@
|
|
1
|
+
require "test/unit"
|
2
|
+
require "rubygems"
|
3
|
+
require_gem "SimpleTrace", "<= 0.1.0"
|
4
|
+
require "Usage"
|
5
|
+
|
6
|
+
class TC_Usage < Test::Unit::TestCase
|
7
|
+
def testTooFewArgs
|
8
|
+
# ------ Check for too few arguments -----------------
|
9
|
+
assert_raises(UsageMod::TooFewArgError) do
|
10
|
+
usage = UsageMod::Base.new("filename", "", []).parse_args
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def testTooManyArgs
|
15
|
+
# ------ Check for too many arguments ----------------
|
16
|
+
#$TRACE.set_level 9
|
17
|
+
assert_raises(UsageMod::ExtraArgError) do
|
18
|
+
usage = UsageMod::Base.new("filename", "", ["arg1", "arg2"]).parse_args
|
19
|
+
end
|
20
|
+
|
21
|
+
assert_raises(UsageMod::ExtraArgError) do
|
22
|
+
usage = UsageMod::Base.new("", "", ["arg1"]).parse_args
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def testRequiredArgs
|
27
|
+
# ------ Check for argument values ---------------------
|
28
|
+
usage = UsageMod::Base.new("filename", "", ["arg"]).parse_args
|
29
|
+
assert_equal("arg", usage.filename)
|
30
|
+
|
31
|
+
usage = UsageMod::Base.new("filename num_lines", "", ["arg1", "arg2"]).parse_args
|
32
|
+
assert_equal("arg1", usage.filename)
|
33
|
+
assert_equal("arg2", usage.num_lines)
|
34
|
+
end
|
35
|
+
|
36
|
+
def testInifiniteArgs
|
37
|
+
# ------ Check for infinite argument values ---------------------
|
38
|
+
usage = UsageMod::Base.new("num_lines files... ", "", ["1", "file1", "file2", "file3"]).parse_args
|
39
|
+
assert_equal("1", usage.num_lines)
|
40
|
+
assert_equal(["file1", "file2", "file3"], usage.files)
|
41
|
+
end
|
42
|
+
|
43
|
+
def testOptionalAndRequiredArgs1Arg
|
44
|
+
# ------ Check for argument values ---------------------
|
45
|
+
#$TRACE.set_level 9 do
|
46
|
+
usage = UsageMod::Base.new("arg1 [arg2]", "", ["arg"]).parse_args
|
47
|
+
assert_equal("arg", usage.arg1)
|
48
|
+
assert_equal(nil, usage.arg2)
|
49
|
+
#end
|
50
|
+
end
|
51
|
+
|
52
|
+
def testOptionalAndRequiredArgs2Args
|
53
|
+
# ------ Check for argument values ---------------------
|
54
|
+
#$TRACE.set_level 9 do
|
55
|
+
usage = UsageMod::Base.new("arg1 [arg2]", "", ["arga", "argb"]).parse_args
|
56
|
+
assert_equal("arga", usage.arg1)
|
57
|
+
assert_equal("argb", usage.arg2)
|
58
|
+
#end
|
59
|
+
end
|
60
|
+
|
61
|
+
def testOneOption
|
62
|
+
usage = UsageMod::Base.new("-m", "", ["-m"]).parse_args
|
63
|
+
assert_equal(true, usage.dash_m)
|
64
|
+
end
|
65
|
+
|
66
|
+
def testOneOptionAndOneArg
|
67
|
+
usage = UsageMod::Base.new("-m filename", "", ["-m", "test1.txt"]).parse_args
|
68
|
+
assert_equal(true, usage.dash_m)
|
69
|
+
assert_equal("test1.txt", usage.filename)
|
70
|
+
end
|
71
|
+
|
72
|
+
def testOptionWithDescription
|
73
|
+
usage = UsageMod::Base.new("-m", "-m,--merge-file\tMerge the files together", ["-m"]).parse_args
|
74
|
+
assert_equal(true, usage.merge_file)
|
75
|
+
assert_equal(true, usage.dash_m)
|
76
|
+
end
|
77
|
+
|
78
|
+
def testOptionWithDescriptionUsingLongOptionName
|
79
|
+
#$TRACE.set_level 9 do
|
80
|
+
usage = UsageMod::Base.new("-m", "-m,--merge-file\tMerge the files together", ["--merge-file"]).parse_args
|
81
|
+
assert_equal(true, usage.merge_file)
|
82
|
+
assert_equal(true, usage.dash_m)
|
83
|
+
#end
|
84
|
+
end
|
85
|
+
|
86
|
+
def testIntegerArg
|
87
|
+
#$TRACE.set_level 9 do
|
88
|
+
usage = UsageMod::Base.new("%value", "", ["12"]).parse_args
|
89
|
+
assert_equal(Fixnum, usage.value.class)
|
90
|
+
assert_equal(12, usage.value)
|
91
|
+
#end
|
92
|
+
end
|
93
|
+
|
94
|
+
def testBadIntegerArg
|
95
|
+
#$TRACE.set_level 9 do
|
96
|
+
assert_raises(UsageMod::InvalidIntegerError) do
|
97
|
+
usage = UsageMod::Base.new("%value", "", ["a"]).parse_args
|
98
|
+
end
|
99
|
+
#end
|
100
|
+
end
|
101
|
+
|
102
|
+
def testGoodTimeArg
|
103
|
+
#$TRACE.set_level 9 do
|
104
|
+
usage = UsageMod::Base.new("@value", "", ["3/10/2004-10:25"]).parse_args
|
105
|
+
assert_equal(Time, usage.value.class)
|
106
|
+
assert_equal(Time.local(2004,3,10,10,25), usage.value)
|
107
|
+
#end
|
108
|
+
end
|
109
|
+
|
110
|
+
def testBadTimeArg
|
111
|
+
#$TRACE.set_level 9 do
|
112
|
+
assert_raises(UsageMod::InvalidTimeError) do
|
113
|
+
usage = UsageMod::Base.new("@value", "", ["Barf"]).parse_args
|
114
|
+
end
|
115
|
+
#end
|
116
|
+
end
|
117
|
+
|
118
|
+
def testIntegerOptionArg
|
119
|
+
#$TRACE.set_level 9 do
|
120
|
+
usage = UsageMod::Base.new("(-w %value)", "", ["-w", "12"]).parse_args
|
121
|
+
assert_equal(Fixnum, usage.value.class)
|
122
|
+
assert_equal(12, usage.value)
|
123
|
+
#end
|
124
|
+
end
|
125
|
+
|
126
|
+
def testMissingOption
|
127
|
+
assert_raises(UsageMod::MissingOptionsError) do
|
128
|
+
usage = UsageMod::Base.new("-m", "", []).parse_args
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
def testMissingOptionAndOneArg
|
133
|
+
assert_raises(UsageMod::MissingOptionsError) do
|
134
|
+
usage = UsageMod::Base.new("-m", "", ["test1.txt"]).parse_args
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
def testUnknownOption
|
139
|
+
assert_raises(UsageMod::UnknownOptionError) do
|
140
|
+
usage = UsageMod::Base.new("-m", "", ["-q"]).parse_args
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
def testOptionWithArg
|
145
|
+
#$TRACE.set_level(9) do
|
146
|
+
usage = UsageMod::Base.new("(-m marg)", "", ["-m", "test1.txt"]).parse_args
|
147
|
+
assert_equal(true, usage.dash_m)
|
148
|
+
assert_equal("test1.txt", usage.marg)
|
149
|
+
#end
|
150
|
+
end
|
151
|
+
|
152
|
+
def testChoicesOnRegularArg
|
153
|
+
assert_raises(UsageMod::ChoicesNotOnOptionError) do
|
154
|
+
usage = UsageMod::Base.new("a|b|c", "", []).parse_args
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
def testChoicesWithTypeIndicator
|
159
|
+
assert_raises(UsageMod::ChoiceNoTypeError) do
|
160
|
+
#$TRACE.set_level(9) do
|
161
|
+
usage = UsageMod::Base.new("(-m %a|b|c)", "", []).parse_args
|
162
|
+
#end
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
def testOptionWithChoicesArg
|
167
|
+
#$TRACE.set_level(9) do
|
168
|
+
usage = UsageMod::Base.new("(-m a|b|c)", "", ["-m", "a"]).parse_args
|
169
|
+
assert_equal("a", usage.dash_m)
|
170
|
+
#end
|
171
|
+
end
|
172
|
+
|
173
|
+
def testOptionWithBadChoice
|
174
|
+
assert_raises(UsageMod::InvalidChoiceError) do
|
175
|
+
usage = UsageMod::Base.new("(-m a|b|c)", "", ["-m", "d"]).parse_args
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
|
180
|
+
def testOptionsWithoutArg
|
181
|
+
assert_raises(UsageMod::MissingOptionArgumentError) do
|
182
|
+
usage = UsageMod::Base.new("(-m marg)", "", ["-m"]).parse_args
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
def testOptionNestingUnderflowError
|
187
|
+
assert_raises(UsageMod::NestingUnderflow) do
|
188
|
+
usage = UsageMod::Base.new("-m marg)", "", ["-m"]).parse_args
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
def testOptionNestingOverflowError
|
193
|
+
assert_raises(UsageMod::NestingOverflow) do
|
194
|
+
usage = UsageMod::Base.new("(-m marg", "", ["-m"]).parse_args
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
def testOptionalOptionMissing
|
199
|
+
#$TRACE.set_level 9 do
|
200
|
+
usage = UsageMod::Base.new("[-m]", "", []).parse_args
|
201
|
+
assert_equal(nil, usage.dash_m)
|
202
|
+
#end
|
203
|
+
end
|
204
|
+
|
205
|
+
def testOptionalOption
|
206
|
+
#$TRACE.set_level 9 do
|
207
|
+
usage = UsageMod::Base.new("[-m]", "", ["-m"]).parse_args
|
208
|
+
assert_equal(true, usage.dash_m)
|
209
|
+
#end
|
210
|
+
end
|
211
|
+
|
212
|
+
def testOptionalOptionWithMissingArg
|
213
|
+
assert_raises(UsageMod::MissingOptionArgumentError) do
|
214
|
+
#$TRACE.set_level 9 do
|
215
|
+
usage = UsageMod::Base.new("[-m filename]", "", ["-m"]).parse_args
|
216
|
+
#end
|
217
|
+
end
|
218
|
+
end
|
219
|
+
|
220
|
+
def testOptionalOptionWithArgButWholeOptionMissing
|
221
|
+
#$TRACE.set_level 9 do
|
222
|
+
usage = UsageMod::Base.new("[-m filename]", "", []).parse_args
|
223
|
+
assert_equal(nil, usage.dash_m)
|
224
|
+
#end
|
225
|
+
end
|
226
|
+
|
227
|
+
def testOptionalOptionAndRegularArgMissing
|
228
|
+
#$TRACE.set_level 9 do
|
229
|
+
assert_raises(UsageMod::TooFewArgError) do
|
230
|
+
usage = UsageMod::Base.new("[-m filename] logfile", "", []).parse_args
|
231
|
+
end
|
232
|
+
#end
|
233
|
+
end
|
234
|
+
|
235
|
+
def testOptionalOptionAndRegularArgWithArgOnly
|
236
|
+
usage = UsageMod::Base.new("[-m filename] logfile", "", ["log1.txt"]).parse_args
|
237
|
+
assert_equal("log1.txt", usage.logfile)
|
238
|
+
assert_equal(nil, usage.dash_m)
|
239
|
+
end
|
240
|
+
|
241
|
+
def testOptionalOptionAndRegularArgWithBoth
|
242
|
+
usage = UsageMod::Base.new("[-m filename] logfile", "", ["-m", "file1.txt", "log1.txt"]).parse_args
|
243
|
+
assert_equal("log1.txt", usage.logfile)
|
244
|
+
assert_equal(true, usage.dash_m)
|
245
|
+
assert_equal("file1.txt", usage.filename)
|
246
|
+
end
|
247
|
+
|
248
|
+
def testRequiredOptionOptionalOptionAndRegularArgWithAll
|
249
|
+
usage = UsageMod::Base.new("-t [-m filename] logfile", "", ["-t", "-m", "file1.txt", "log1.txt"]).parse_args
|
250
|
+
assert_equal("log1.txt", usage.logfile)
|
251
|
+
assert_equal(true, usage.dash_t)
|
252
|
+
assert_equal(true, usage.dash_m)
|
253
|
+
assert_equal("file1.txt", usage.filename)
|
254
|
+
end
|
255
|
+
|
256
|
+
def testRequiredOptionOptionalOptionAndRegularArgWithRequired
|
257
|
+
usage = UsageMod::Base.new("-t [-m filename] logfile", "", ["-t", "log1.txt"]).parse_args
|
258
|
+
assert_equal("log1.txt", usage.logfile)
|
259
|
+
assert_equal(true, usage.dash_t)
|
260
|
+
assert_equal(nil, usage.dash_m)
|
261
|
+
end
|
262
|
+
|
263
|
+
def testRequiredOptionWithTwoOptionalChoiceOptionsAndTwoRegularArgs
|
264
|
+
usage = UsageMod::Base.new("(-w width) [-i r|R|m] [-o r|R|m] infile outfile", "",
|
265
|
+
["-w", "33", "-i", "R", "-o", "r", "infile.txt", "outfile.txt"]).parse_args
|
266
|
+
assert_equal("33", usage.width)
|
267
|
+
assert_equal("R", usage.dash_i)
|
268
|
+
assert_equal("r", usage.dash_o)
|
269
|
+
assert_equal("infile.txt", usage.infile)
|
270
|
+
assert_equal("outfile.txt", usage.outfile)
|
271
|
+
end
|
272
|
+
|
273
|
+
def testOptionalArgumentWithTypeNotPresent
|
274
|
+
#$TRACE.set_level 9 do
|
275
|
+
usage = UsageMod::Base.new("arg1 [%arg2]", "", ["arg1"]).parse_args
|
276
|
+
assert_equal("arg1", usage.arg1)
|
277
|
+
assert_equal(nil, usage.arg2)
|
278
|
+
#end
|
279
|
+
end
|
280
|
+
|
281
|
+
def testOptionalArgumentWithTypePresent
|
282
|
+
usage = UsageMod::Base.new("arg1 [%arg2]", "", ["arg1", "5"]).parse_args
|
283
|
+
assert_equal("arg1", usage.arg1)
|
284
|
+
assert_equal(5, usage.arg2)
|
285
|
+
end
|
286
|
+
|
287
|
+
def testOptionalArgumentNotPresent
|
288
|
+
#$TRACE.set_level 9 do
|
289
|
+
usage = UsageMod::Base.new("arg1 [arg2]", "", ["arg1"]).parse_args
|
290
|
+
assert_equal("arg1", usage.arg1)
|
291
|
+
assert_equal(nil, usage.arg2)
|
292
|
+
#end
|
293
|
+
end
|
294
|
+
|
295
|
+
def testOptionalArgumentPresent
|
296
|
+
usage = UsageMod::Base.new("arg1 [arg2]", "", ["arg1", "arg2"]).parse_args
|
297
|
+
assert_equal("arg1", usage.arg1)
|
298
|
+
assert_equal("arg2", usage.arg2)
|
299
|
+
end
|
300
|
+
end
|
301
|
+
|
302
|
+
|
303
|
+
|
metadata
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
rubygems_version: 0.8.3
|
3
|
+
specification_version: 1
|
4
|
+
name: Usage
|
5
|
+
version: !ruby/object:Gem::Version
|
6
|
+
version: 0.0.1
|
7
|
+
date: 2005-09-20
|
8
|
+
summary: This module implements a simple no thought command line option parser
|
9
|
+
require_paths:
|
10
|
+
- lib
|
11
|
+
email:
|
12
|
+
homepage:
|
13
|
+
rubyforge_project:
|
14
|
+
description:
|
15
|
+
autorequire: Usage
|
16
|
+
default_executable:
|
17
|
+
bindir: bin
|
18
|
+
has_rdoc: false
|
19
|
+
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
+
requirements:
|
21
|
+
-
|
22
|
+
- ">"
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: 0.0.0
|
25
|
+
version:
|
26
|
+
platform: ruby
|
27
|
+
authors: []
|
28
|
+
files:
|
29
|
+
- "./LICENSE"
|
30
|
+
- "./README"
|
31
|
+
- "./TODO"
|
32
|
+
- lib/Usage.rb
|
33
|
+
- tests/TC_Usage.rb
|
34
|
+
- samples/Sample1.rb
|
35
|
+
- samples/Sample2.rb
|
36
|
+
- samples/Sample3.rb
|
37
|
+
- samples/Sample4.rb
|
38
|
+
- samples/Sample5.rb
|
39
|
+
- samples/Sample6.rb
|
40
|
+
- samples/Sample7.rb
|
41
|
+
- README
|
42
|
+
test_files:
|
43
|
+
- tests/TC_Usage.rb
|
44
|
+
rdoc_options: []
|
45
|
+
extra_rdoc_files:
|
46
|
+
- README
|
47
|
+
executables: []
|
48
|
+
extensions: []
|
49
|
+
requirements: []
|
50
|
+
dependencies:
|
51
|
+
- !ruby/object:Gem::Dependency
|
52
|
+
name: SimpleTrace
|
53
|
+
version_requirement:
|
54
|
+
version_requirements: !ruby/object:Gem::Version::Requirement
|
55
|
+
requirements:
|
56
|
+
-
|
57
|
+
- "<="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: 0.1.0
|
60
|
+
version:
|