Eric J. Roode
12/28/2005 11:01:00 PM
"Robert Klemme" <bob.news@gmx.net> wrote in
news:41fiouF1e6diiU1@individual.net:
> I used to use GetopLong in the beginning but switched to OptionParser.
> Agreee, the documentation could be better but if you look carefully at
> the example given in RDoc you get pretty much everything you need.
> I'm not sure about a standard parser but my impression was that
> OptionParser is more widely used. But I may be wrong here.
I disagree about the example being all you need.
Here's the first option in the example:
# Mandatory argument.
opts.on("-r", "--require LIBRARY",
"Require the LIBRARY before executing your script") do |lib|
options.library << lib
end
I am new to ruby, so I don't know what "options.library << lib" means. I
thought that that introduced a here-doc string.
The second example:
# Optional argument; multi-line description.
opts.on("-i", "--inplace [EXTENSION]",
"Edit ARGV files in place",
" (make backup if EXTENSION supplied)") do |ext|
...
It took me a lot of staring at the code before it dawned on me that it
was the *brackets* that made it an optional argument.
The final example:
# Another typical switch to print the version.
opts.on_tail("--version", "Show version") do
puts OptionParser::Version.join('.')
exit
end
I can't figure out how the on_tail method differs from the on method or
the on_head method. Reading the source isn't helping. The example
sucks.
The previous example has this comment:
# No argument, shows at tail. This will print an options summary.
"Shows at tail"??
At the end of the parse() method (and why is it self.parse, not just
parse?), there is this:
opts.parse!(args)
I can't tell what function that performs for the class.
I can't tell how to make an option mandatory, how to configure it so that
some options require certain others or conflict with certain others.
It looks like a fine, powerful module. But its lack of documentation
makes it pretty much useless for anyone who doesn't already know how to
use it.
I come from the Perl world. You simply do not release a module to Perl's
CPAN unless it is thoroughly documented. The vast majority of CPAN
modules have quite good documentation -- or at least, thorough
documentation. I'm quite surprised to find that the situation is so
different in the ruby world.
--
Eric
`$=`;$_=\%!;($_)=/(.)/;$==++$|;($.,$/,$,,$\,$",$;,$^,$#,$~,$*,$:,@%)=(
$!=~/(.)(.).(.)(.)(.)(.)..(.)(.)(.)..(.)......(.)/,$"),$=++;$.++;$.++;
$_++;$_++;($_,$\,$,)=($~.$"."$;$/$%[$?]$_$\$,$:$%[$?]",$"&$~,$#,);$,++
;$,++;$^|=$";`$_$\$,$/$:$;$~$*$%[$?]$.$~$*${#}$%[$?]$;$\$"$^$~$*.>&$=`