Pablo 0.0.1 → 0.0.2
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/lib/pablo.rb +70 -7
- data/tests/help.rb +65 -1
- metadata +2 -2
data/lib/pablo.rb
CHANGED
@@ -11,7 +11,10 @@
|
|
11
11
|
# For further information regarding this license, you can go to
|
12
12
|
# http://creativecommons.org/licenses/by/3.0/de/
|
13
13
|
# Homepage:: http://pablo.rubyforge.org/
|
14
|
-
# Git repo:: http://
|
14
|
+
# Git repo:: http://rubyforge.org/scm/?group_id=7334
|
15
|
+
#
|
16
|
+
# More information can be found in the documentation of the parser (_Pablo::parse_) and
|
17
|
+
# the classes (_Pablo::Token_, _Pablo::Option_ and _Pablo::Command_).
|
15
18
|
#
|
16
19
|
|
17
20
|
module Pablo
|
@@ -25,8 +28,14 @@ module Pablo
|
|
25
28
|
# Either of the two can be omitted.
|
26
29
|
# If no arguments Array is found, +ARGV+ is parsed.
|
27
30
|
# If no options Hash is found, the defaults are used.
|
31
|
+
#
|
32
|
+
# The options Hash can have the following arguments:
|
33
|
+
# - +:program+ - The name of the program
|
34
|
+
# - +:version+ - The program version
|
35
|
+
# - +:usage+ - How this program is to be used via the command-line, e.g.
|
36
|
+
# "[help] [--verbose [level]] delete [number]"
|
28
37
|
#
|
29
|
-
# See _Pablo::
|
38
|
+
# See _Pablo::Token_,_Pablo::Command_ and _Pablo::Option_ for more details.
|
30
39
|
#
|
31
40
|
def self.parse *argsopts, &block
|
32
41
|
# parse arguments and options apart
|
@@ -39,6 +48,8 @@ module Pablo
|
|
39
48
|
args = ARGV if args.nil?
|
40
49
|
# do under NO circumstances modify the real args
|
41
50
|
args = args.dup
|
51
|
+
|
52
|
+
opts[:version] = opts[:version].join '.' if opts[:version].is_a? Array
|
42
53
|
|
43
54
|
# create tokens
|
44
55
|
p = Pablo::TopLevel.new opts
|
@@ -46,6 +57,8 @@ module Pablo
|
|
46
57
|
|
47
58
|
# test on a present help command
|
48
59
|
return if p.help? args
|
60
|
+
# test on a present version command
|
61
|
+
return if opts[:version] and p.version?(args)
|
49
62
|
|
50
63
|
# prepare arguments for marking
|
51
64
|
args.collect! { |a| [ [], a ] }
|
@@ -244,6 +257,8 @@ module Pablo
|
|
244
257
|
##
|
245
258
|
# Keeps and parses an option.
|
246
259
|
# Simple, easy, no children.
|
260
|
+
#
|
261
|
+
# See also: +Pablo::Token+.
|
247
262
|
#
|
248
263
|
class Option < Pablo::Token
|
249
264
|
##
|
@@ -280,6 +295,8 @@ module Pablo
|
|
280
295
|
##
|
281
296
|
# Keeps and parses a command.
|
282
297
|
# More sophisticated than an option, can have children.
|
298
|
+
#
|
299
|
+
# See also: +Pablo::Token+.
|
283
300
|
#
|
284
301
|
class Command < Pablo::Token
|
285
302
|
##
|
@@ -330,6 +347,7 @@ module Pablo
|
|
330
347
|
@everyone = []
|
331
348
|
@options = options
|
332
349
|
@help = false
|
350
|
+
@version = false
|
333
351
|
super self # set toplevel
|
334
352
|
end
|
335
353
|
|
@@ -337,7 +355,7 @@ module Pablo
|
|
337
355
|
|
338
356
|
##
|
339
357
|
# Will run the default token's run block, if there is one or will try to show
|
340
|
-
# the help otherwise.
|
358
|
+
# the help or version otherwise.
|
341
359
|
#
|
342
360
|
def do_defaults
|
343
361
|
done = false
|
@@ -348,9 +366,27 @@ module Pablo
|
|
348
366
|
end
|
349
367
|
}
|
350
368
|
|
351
|
-
help? [] unless done
|
369
|
+
version? [] unless help? [] unless done
|
352
370
|
end
|
353
371
|
|
372
|
+
##
|
373
|
+
# Tests whether a version command is present in +args+ and +version!+ has been called
|
374
|
+
# and if so:
|
375
|
+
# - executes +Pablo::version+
|
376
|
+
# - and returns true
|
377
|
+
# otherwise only returns false.
|
378
|
+
#
|
379
|
+
def version? args
|
380
|
+
return false unless @version
|
381
|
+
found = args.index { |a|
|
382
|
+
@version_aliases.any? { |v| v == a }
|
383
|
+
}
|
384
|
+
found = 0 if args.empty?
|
385
|
+
return false unless found
|
386
|
+
Pablo::version @options
|
387
|
+
return true
|
388
|
+
end
|
389
|
+
|
354
390
|
##
|
355
391
|
# Tests whether a help command is present in +args+ and +help!+ has been called
|
356
392
|
# and if so:
|
@@ -365,7 +401,8 @@ module Pablo
|
|
365
401
|
}
|
366
402
|
found = 0 if args.empty?
|
367
403
|
return false unless found
|
368
|
-
|
404
|
+
a = args[found+1..-1] || []
|
405
|
+
Pablo::help a, @everyone, @options
|
369
406
|
return true
|
370
407
|
end
|
371
408
|
|
@@ -380,9 +417,22 @@ module Pablo
|
|
380
417
|
@help = true
|
381
418
|
@help_aliases = alis
|
382
419
|
end
|
420
|
+
|
421
|
+
##TODO: usage!, each token gives it's usage -> [alias1|alias2 usage]
|
422
|
+
|
423
|
+
##
|
424
|
+
# Instructs Pablo to display a version message generated from the +:version+ argument
|
425
|
+
# given to the +parse+ function.
|
426
|
+
#
|
427
|
+
# +alis+ are the aliases the version command should respond to.
|
428
|
+
# By default these are _version_, _--version_ and _-v_.
|
429
|
+
#
|
430
|
+
def version! alis = ['version', '--version', '-v']
|
431
|
+
@version = true
|
432
|
+
@version_aliases = alis
|
433
|
+
end
|
383
434
|
end
|
384
435
|
|
385
|
-
##TODO: Version command and version in help command
|
386
436
|
##TODO: caseless aliases!
|
387
437
|
|
388
438
|
##
|
@@ -406,7 +456,7 @@ module Pablo
|
|
406
456
|
found = found[1] if found
|
407
457
|
|
408
458
|
# program name and version
|
409
|
-
puts "#{options[:program]} v#{options[:version]
|
459
|
+
puts "#{options[:program]} v#{options[:version]}" if
|
410
460
|
options[:program] and options[:version]
|
411
461
|
|
412
462
|
# usage
|
@@ -436,6 +486,7 @@ module Pablo
|
|
436
486
|
puts strs.join " "
|
437
487
|
else # do short_descs
|
438
488
|
# print short_descs
|
489
|
+
puts
|
439
490
|
puts '::Available commands and options'
|
440
491
|
puts
|
441
492
|
|
@@ -454,5 +505,17 @@ module Pablo
|
|
454
505
|
end
|
455
506
|
end
|
456
507
|
|
508
|
+
##
|
509
|
+
# Displays a version message generated from the +:version+ parameter passed to
|
510
|
+
# the +parse+ function.
|
511
|
+
#
|
512
|
+
# +options+ must be a hash of options that will be used to generate the
|
513
|
+
# output, namely +:version+, +:program+.
|
514
|
+
#
|
515
|
+
def self.version options
|
516
|
+
puts "#{options[:program]} v#{options[:version]}" if
|
517
|
+
options[:program] and options[:version]
|
518
|
+
end
|
519
|
+
|
457
520
|
end
|
458
521
|
|
data/tests/help.rb
CHANGED
@@ -16,6 +16,13 @@ def message msg
|
|
16
16
|
end
|
17
17
|
|
18
18
|
class Help < Test::Unit::TestCase
|
19
|
+
|
20
|
+
def assert_output
|
21
|
+
puts
|
22
|
+
print 'Does the output match? [yn] '
|
23
|
+
assert_match /^(y|Y|yes|Yes)?\n$/, gets, "Bad output."
|
24
|
+
end
|
25
|
+
|
19
26
|
def testHelp
|
20
27
|
args = ['help']
|
21
28
|
|
@@ -46,6 +53,7 @@ class Help < Test::Unit::TestCase
|
|
46
53
|
|
47
54
|
message '-----------------------------------------'
|
48
55
|
message 'End of expected output'
|
56
|
+
assert_output
|
49
57
|
end
|
50
58
|
|
51
59
|
def testCommandHelp
|
@@ -83,7 +91,7 @@ class Help < Test::Unit::TestCase
|
|
83
91
|
|
84
92
|
message '-----------------------------------------'
|
85
93
|
message 'End of expected output'
|
86
|
-
|
94
|
+
assert_output
|
87
95
|
end
|
88
96
|
|
89
97
|
def testHelpAliases
|
@@ -116,6 +124,7 @@ class Help < Test::Unit::TestCase
|
|
116
124
|
|
117
125
|
message '-----------------------------------------'
|
118
126
|
message 'End of expected output'
|
127
|
+
assert_output
|
119
128
|
end
|
120
129
|
|
121
130
|
def testHelpDefault
|
@@ -130,6 +139,61 @@ class Help < Test::Unit::TestCase
|
|
130
139
|
|
131
140
|
message '-----------------------------------------'
|
132
141
|
message 'End of expected output'
|
142
|
+
assert_output
|
143
|
+
end
|
144
|
+
|
145
|
+
def testVersion
|
146
|
+
|
147
|
+
puts
|
148
|
+
message 'Expected output: a version message'
|
149
|
+
message "-----------------------------------------"
|
150
|
+
|
151
|
+
Pablo::parse ['version'], :program => 'bacon',
|
152
|
+
:version => [0,0,1,'alpha'] do
|
153
|
+
version!
|
154
|
+
end
|
155
|
+
|
156
|
+
message '-----------------------------------------'
|
157
|
+
message 'End of expected output'
|
158
|
+
assert_output
|
159
|
+
end
|
160
|
+
|
161
|
+
def testVersion
|
162
|
+
|
163
|
+
puts
|
164
|
+
message 'Expected output: a version message'
|
165
|
+
message "-----------------------------------------"
|
166
|
+
|
167
|
+
Pablo::parse ['version'], :program => 'bacon',
|
168
|
+
:version => [0,0,1,'alpha'] do
|
169
|
+
version!
|
170
|
+
end
|
171
|
+
|
172
|
+
message '-----------------------------------------'
|
173
|
+
message 'End of expected output'
|
174
|
+
assert_output
|
175
|
+
end
|
176
|
+
|
177
|
+
def testVersionHelpDefault
|
178
|
+
|
179
|
+
puts
|
180
|
+
message 'Expected output: a help message'
|
181
|
+
message "-----------------------------------------"
|
182
|
+
|
183
|
+
Pablo::parse [], :program => 'bacon',
|
184
|
+
:version => [0,0,1,'alpha'] do
|
185
|
+
version!
|
186
|
+
help!
|
187
|
+
|
188
|
+
command do
|
189
|
+
name 'stupid'
|
190
|
+
short_desc 'foo'
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
194
|
+
message '-----------------------------------------'
|
195
|
+
message 'End of expected output'
|
196
|
+
assert_output
|
133
197
|
end
|
134
198
|
end
|
135
199
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: Pablo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Fabian Streitel
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-12-
|
12
|
+
date: 2008-12-26 00:00:00 -08:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|