como 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.
Files changed (6) hide show
  1. data/LICENSE +20 -0
  2. data/README.rdoc +15 -0
  3. data/Rakefile +24 -0
  4. data/lib/como.rb +1041 -0
  5. data/test/test_como.rb +344 -0
  6. metadata +56 -0
data/test/test_como.rb ADDED
@@ -0,0 +1,344 @@
1
+ require 'test/unit'
2
+ require 'como'
3
+ include Como
4
+ require 'stringio'
5
+
6
+
7
+ class ComoTest < Test::Unit::TestCase
8
+
9
+ def reset_state( args )
10
+ Spec.setArgv( args )
11
+ Opt.each do |i|
12
+ i.given = false
13
+ end
14
+ Spec.check
15
+ end
16
+
17
+ def test_sanity
18
+
19
+ Opt.reset
20
+ Spec.setArgv( %w{ -f file } )
21
+
22
+ Spec.defineCheckHelp( "cmd_opt_test", "Programmer", "2013",
23
+ [
24
+ [ :silent, "help", "-h", "Display usage info." ],
25
+ [ :single, "file", "-f", "File argument." ],
26
+ ] )
27
+
28
+ assert_equal( 'file', Opt['file'].value )
29
+ end
30
+
31
+
32
+ def test_values
33
+
34
+ Opt.reset
35
+ Spec.setArgv( %w{ -f file -d --o1 -o4 1 2 3 -o5 -o2 o2 rest } )
36
+
37
+ Spec.defineCheckHelp( "como_fulltest", "Programmer", "2013",
38
+ [
39
+ [ :silent, "help", "-h", "Display usage info." ],
40
+ [ :single, "file", "-f", "File argument." ],
41
+ [ :switch, "o1", "-o1", "o1" ],
42
+ [ :opt_single, "o2", "-o2", "o2" ],
43
+ [ :opt_single, "o3", "-o3", "o3" ],
44
+ [ :opt_multi, "o4", "-o4", "o4" ],
45
+ [ :opt_any, "o5", "-o5", "o5" ],
46
+ [ :switch, "debug", "-d", "Enable debugging." ],
47
+ [ :default, "rest", nil, "Default options." ],
48
+ ] )
49
+
50
+ assert_equal( 'file', Opt['file'].value )
51
+ assert_equal( true, Opt['debug'].given )
52
+ assert_equal( true, Opt['o1'].given )
53
+ assert_equal( true, Opt['o2'].given )
54
+ assert_equal( 'o2', Opt['o2'].value )
55
+ assert_equal( false, Opt['o3'].given )
56
+ assert_equal( true, Opt['o4'].given )
57
+ assert_equal( %w{1 2 3}, Opt['o4'].value )
58
+ assert_equal( true, Opt['o5'].given )
59
+ assert_equal( 1, Opt[nil].value.length )
60
+ assert_equal( 'rest', Opt[nil].value[0] )
61
+ end
62
+
63
+
64
+ def test_rules
65
+ Opt.reset
66
+ Spec.setArgv( %w{ -o1 } )
67
+
68
+ Spec.defineCheckHelp( "como_fulltest", "Programmer", "2013",
69
+ [
70
+ [ :silent, "help", "-h", "Display usage info." ],
71
+ [ :switch, "o1", "-o1", "o1" ],
72
+ [ :switch, "o2", "-o2", "o2" ],
73
+ [ :switch, "o3", "-o3", "o3" ],
74
+ [ :switch, "o4", "-o4", "o4" ],
75
+ ] )
76
+
77
+ # all
78
+ reset_state( %w{ -o1 -o2 -o3} )
79
+ ret = Opt.checkRule do
80
+ all( 'o1', 'o2', 'o3' )
81
+ end
82
+ assert_equal( true, ret )
83
+
84
+ reset_state( %w{ -o1 -o2 } )
85
+ ret = Opt.checkRule do
86
+ all( 'o1', 'o3' )
87
+ end
88
+ assert_equal( false, ret )
89
+
90
+ # one
91
+ reset_state( %w{ -o1 } )
92
+ ret = Opt.checkRule do
93
+ one( 'o1', 'o2' )
94
+ end
95
+ assert_equal( true, ret )
96
+
97
+ reset_state( %w{ -o1 -o2 } )
98
+ ret = Opt.checkRule do
99
+ one( 'o1', 'o2' )
100
+ end
101
+ assert_equal( false, ret )
102
+
103
+ # any
104
+ reset_state( %w{ --o2 } )
105
+ ret = Opt.checkRule do
106
+ any( 'o1', 'o2' )
107
+ end
108
+ assert_equal( true, ret )
109
+
110
+ reset_state( %w{ -o3 } )
111
+ ret = Opt.checkRule do
112
+ one( 'o1', 'o2' )
113
+ end
114
+ assert_equal( false, ret )
115
+
116
+ # none
117
+ reset_state( %w{ } )
118
+ ret = Opt.checkRule do
119
+ none
120
+ end
121
+ assert_equal( true, ret )
122
+
123
+ reset_state( %w{ -o3 } )
124
+ ret = Opt.checkRule do
125
+ none
126
+ end
127
+ assert_equal( false, ret )
128
+
129
+ # incr
130
+ reset_state( %w{ -o1 -o2 -o3} )
131
+ ret = Opt.checkRule do
132
+ incr( 'o1', 'o2', 'o3' )
133
+ end
134
+ assert_equal( true, ret )
135
+
136
+ reset_state( %w{ -o1 -o2} )
137
+ ret = Opt.checkRule do
138
+ incr( 'o1', 'o2', 'o3' )
139
+ end
140
+ assert_equal( true, ret )
141
+
142
+ reset_state( %w{ -o1 -o3} )
143
+ ret = Opt.checkRule do
144
+ incr( 'o1', 'o2', 'o3' )
145
+ end
146
+ assert_equal( false, ret )
147
+
148
+ # follow
149
+ reset_state( %w{ -o1 -o2 -o3} )
150
+ ret = Opt.checkRule do
151
+ follow( 'o1', 'o2', 'o3' )
152
+ end
153
+ assert_equal( true, ret )
154
+
155
+ reset_state( %w{ -o1 -o3 -o2} )
156
+ ret = Opt.checkRule do
157
+ follow( 'o1', 'o2', 'o3' )
158
+ end
159
+ assert_equal( true, ret )
160
+
161
+ reset_state( %w{ -o2 -o3} )
162
+ ret = Opt.checkRule do
163
+ follow( 'o1', 'o2', 'o3' )
164
+ end
165
+ assert_equal( false, ret )
166
+
167
+ reset_state( %w{-o1 -o3} )
168
+ ret = Opt.checkRule do
169
+ follow( 'o1', 'o2', 'o3' )
170
+ end
171
+ assert_equal( false, ret )
172
+
173
+ # in combination
174
+ reset_state( %w{-o2} )
175
+ ret = Opt.checkRule do
176
+ one(
177
+ one( 'o1', 'o2' ),
178
+ none
179
+ )
180
+ end
181
+ assert_equal( true, ret )
182
+
183
+ reset_state( %w{-o2 -o3} )
184
+ ret = Opt.checkRule do
185
+ all(
186
+ one( 'o1', 'o2' ),
187
+ 'o3'
188
+ )
189
+ end
190
+ assert_equal( true, ret )
191
+
192
+
193
+ reset_state( %w{-o2 -o3 -o4} )
194
+ ret = Opt.checkRule do
195
+ all(
196
+ one( 'o1', 'o2' ),
197
+ 'o3',
198
+ incr( 'o3', 'o4' )
199
+ )
200
+ end
201
+ assert_equal( true, ret )
202
+
203
+
204
+ reset_state( %w{-o3 -o4} )
205
+ ret = Opt.checkRule do
206
+ all(
207
+ one( 'o1', 'o2' ),
208
+ 'o3',
209
+ incr( 'o3', 'o4' )
210
+ )
211
+ end
212
+ assert_equal( false, ret )
213
+
214
+
215
+ end
216
+
217
+
218
+ def test_external
219
+ Opt.reset
220
+ Spec.setArgv( %w{ -f file -- other_program -f other_file } )
221
+
222
+ Spec.defineCheckHelp( "cmd_opt_test", "Programmer", "2013",
223
+ [
224
+ [ :silent, "help", "-h", "Display usage info." ],
225
+ [ :single, "file", "-f", "File argument." ],
226
+ ] )
227
+
228
+ assert_equal( 'file', Opt['file'].value )
229
+ assert_equal( %w{other_program -f other_file}, Opt.external )
230
+ end
231
+
232
+
233
+ def test_help
234
+
235
+ Opt.reset
236
+ Spec.setArgv( %w{ -h } )
237
+ Opt.setIo( StringIO.new )
238
+
239
+ Spec.defineCheckHelp( "cmd_opt_test", "Programmer", "2013",
240
+ [
241
+ [ :silent, "help", "-h", "Display usage info." ],
242
+ [ :single, "file", "-f", "File argument." ],
243
+ [ :opt_any, "list", "-l", "List argument." ],
244
+ ], { :help_exit => false } )
245
+
246
+ help = "
247
+
248
+ Usage:
249
+ cmd_opt_test -f <file> [-l <list>*]
250
+
251
+ -f File argument.
252
+ -l List argument.
253
+
254
+
255
+ Copyright (c) 2013 by Programmer
256
+
257
+ "
258
+
259
+ assert_equal( help, Opt.getIo.string )
260
+ end
261
+
262
+
263
+ def test_missing
264
+
265
+ Opt.reset
266
+ Spec.setArgv( %w{ -l some args } )
267
+ Opt.setIo( StringIO.new )
268
+
269
+ Spec.defineCheckHelp( "cmd_opt_test", "Programmer", "2013",
270
+ [
271
+ [ :silent, "help", "-h", "Display usage info." ],
272
+ [ :single, "file", "-f", "File argument." ],
273
+ [ :opt_any, "list", "-l", "List argument." ],
274
+ ], { :error_exit => false } )
275
+
276
+ help = "
277
+ cmd_opt_test error: Option \"-f\" missing...
278
+
279
+
280
+ Usage:
281
+ cmd_opt_test -f <file> [-l <list>*]
282
+
283
+ -f File argument.
284
+ -l List argument.
285
+
286
+
287
+ Copyright (c) 2013 by Programmer
288
+
289
+ "
290
+
291
+ assert_equal( help, Opt.getIo.string )
292
+
293
+ end
294
+
295
+
296
+ def test_invalid_rule
297
+
298
+ Opt.reset
299
+ Spec.setArgv( %w{ -o1 } )
300
+ Opt.setIo( StringIO.new )
301
+
302
+ Spec.defineCheckHelp( "como_fulltest", "Programmer", "2013",
303
+ [
304
+ [ :silent, "help", "-h", "Display usage info." ],
305
+ [ :switch, "o1", "-o1", "o1" ],
306
+ [ :switch, "o2", "-o2", "o2" ],
307
+ [ :switch, "o3", "-o3", "o3" ],
308
+ [ :switch, "o4", "-o4", "o4" ],
309
+ ], { :error_exit => false } )
310
+
311
+ # all
312
+ reset_state( %w{ -o1 -o2 } )
313
+ ret = Spec.checkRule do
314
+ all( 'o1', 'o2', 'o3' )
315
+ end
316
+
317
+ help = "
318
+ como_fulltest error: Option combination mismatch!
319
+
320
+ Option combination rules:
321
+
322
+ |--# All of:
323
+ | |--<o1>
324
+ | |--<o2>
325
+ | |--<o3>
326
+
327
+
328
+ Usage:
329
+ como_fulltest [-o1] [-o2] [-o3] [-o4]
330
+
331
+ -o1 o1
332
+ -o2 o2
333
+ -o3 o3
334
+ -o4 o4
335
+
336
+
337
+ Copyright (c) 2013 by Programmer
338
+
339
+ "
340
+
341
+ assert_equal( help, Opt.getIo.string )
342
+
343
+ end
344
+ end
metadata ADDED
@@ -0,0 +1,56 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: como
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Tero Isannainen
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-10-13 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: Como provides low manifest command line option parsing and deployment.
15
+ The command line options are described in compact table format and option values
16
+ are stored to conveniently named properties. Como provides the command usage information
17
+ based on the option table (plus program info) automatically. Como supports also
18
+ checking for option combinations using a simple DSL.
19
+ email: tero.isannainen@gmail.com
20
+ executables: []
21
+ extensions: []
22
+ extra_rdoc_files:
23
+ - README.rdoc
24
+ files:
25
+ - README.rdoc
26
+ - LICENSE
27
+ - Rakefile
28
+ - lib/como.rb
29
+ - test/test_como.rb
30
+ homepage:
31
+ licenses:
32
+ - Ruby
33
+ post_install_message: Check README...
34
+ rdoc_options: []
35
+ require_paths:
36
+ - lib
37
+ required_ruby_version: !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - ! '>='
41
+ - !ruby/object:Gem::Version
42
+ version: 1.9.3
43
+ required_rubygems_version: !ruby/object:Gem::Requirement
44
+ none: false
45
+ requirements:
46
+ - - ! '>='
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ requirements: []
50
+ rubyforge_project:
51
+ rubygems_version: 1.8.23
52
+ signing_key:
53
+ specification_version: 3
54
+ summary: Compact command line option parser utility.
55
+ test_files: []
56
+ has_rdoc: