Usage 0.0.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.
- 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:
|