Hi all,
Anyone have a short and easy GetoptLong example in Ruby? It's not
object oriented in Perl or C, so I'm in unfamiliar territory.
Thanks
SteveT
Steve Litt
http://www.troubleshooters.com
slitt@troubleshooters.com
Hi all,
Anyone have a short and easy GetoptLong example in Ruby? It's not
object oriented in Perl or C, so I'm in unfamiliar territory.
Thanks
SteveT
Steve Litt
http://www.troubleshooters.com
slitt@troubleshooters.com
Hi all,
I cruised the net, found an example, and turned it into a small
program that works. So if anyone wants to use GetoptLong, here it
is:
#!/usr/bin/ruby
require "getoptlong"
getoptlong = GetoptLong.new(
[ '--help', '-h', GetoptLong::NO_ARGUMENT ],
[ '--short', '-s', GetoptLong::OPTIONAL_ARGUMENT ],
[ '--offset', '-o', GetoptLong::REQUIRED_ARGUMENT ]
)
def usage()
puts "Usage:"
puts "myprog [--help] [--short optional_arg] [--offset
required_arg]"
end
short_arg = nil # declare local var to store arg
offset_arg = nil # declare local var to store arg
begin
getoptlong.each do |opt, arg|
case opt
when "--help"
puts "dia help"
when "--short"
print "Short option. Arg is=>"
print arg
short_arg = arg
print "<\n"
when "--offset"
print "Offset option. Arg is=>"
print arg
offset_arg = arg
print "<\n"
end
end
rescue StandardError=>my_error_message
puts
puts my_error_message
usage()
puts
exit
end
unless short_arg == ""
puts
print "Short arg is=>"
print short_arg
puts "<"
end
print "Offset arg is=>"
print offset_arg
puts "<"
Steve Litt
slitt@troubleshooters.com
On Wednesday 14 December 2005 07:38 pm, Steve Litt wrote:
Hi all,
Anyone have a short and easy GetoptLong example in Ruby? It's not
object oriented in Perl or C, so I'm in unfamiliar territory.Thanks
SteveT
Steve Litt
http://www.troubleshooters.com
slitt@troubleshooters.com
Funny I was just in the same position yesterday. A google of "ruby
getoptlong" gave this as the second link, which is how I got on with
it:
Cheers,
/Nick
On 12/14/05, Steve Litt <slitt@earthlink.net> wrote:
Hi all,
Anyone have a short and easy GetoptLong example in Ruby? It's not
object oriented in Perl or C, so I'm in unfamiliar territory.
Have you tried OptionParser? It is fully OO and integrated with Application.
Yes, that was the sound of my own horn.
I know CommandLine cannot solve everyones needs, but I would be interested
to hear about it if it doesn't meet your needs. Maybe there is something
I can change or add to the library.
My nefarious global take over plans are to see CommandLine - which
has a Ruby flavor - be put in the stdlib and surplant the existing optparse
and getoptlong parsers which use aging methodologies.
On 12/14/05, Nick Sieger <nicksieger@gmail.com> wrote:
On 12/14/05, Steve Litt <slitt@earthlink.net> wrote:
> Hi all,
>
> Anyone have a short and easy GetoptLong example in Ruby? It's not
> object oriented in Perl or C, so I'm in unfamiliar territory.
--
Jim Freeze
Here is the above code re-writen using CommandLine as
requested by Steve. It is a fully working example.
require 'rubygems'
require 'commandline'
class App < CommandLine::Application
def initialize
synopsis "[-d] [-s [opt_arg]] [-o req_arg]"
short_description "A sample program"
option :names => %w(-short -s),
:arity => [0,1],
:arg_description => "opt_arg"
:opt_found => get_arg,
:opt_not_found => nil
option :names => %w(--offset -o),
:arg_description => "req_arg",
:opt_found => get_args
option :help
end
def main
puts "Short arg is=>#{opt["--short"]}<" unless opt["--short"].nil?
puts "Offset arg is=>#{opt["--offset"]}<"
end
end#class App
On 12/14/05, Steve Litt <slitt@earthlink.net> wrote:
I cruised the net, found an example, and turned it into a small
program that works. So if anyone wants to use GetoptLong, here it
is:#!/usr/bin/ruby
require "getoptlong"getoptlong = GetoptLong.new(
[ '--help', '-h', GetoptLong::NO_ARGUMENT ],
[ '--short', '-s', GetoptLong::OPTIONAL_ARGUMENT ],
[ '--offset', '-o', GetoptLong::REQUIRED_ARGUMENT ]
)def usage()
puts "Usage:"
puts "myprog [--help] [--short optional_arg] [--offset
required_arg]"
endshort_arg = nil # declare local var to store arg
offset_arg = nil # declare local var to store argbegin
getoptlong.each do |opt, arg|
case opt
when "--help"
puts "dia help"
when "--short"
print "Short option. Arg is=>"
print arg
short_arg = arg
print "<\n"
when "--offset"
print "Offset option. Arg is=>"
print arg
offset_arg = arg
print "<\n"
end
end
rescue StandardError=>my_error_message
puts
puts my_error_message
usage()
puts
exit
endunless short_arg == ""
puts
print "Short arg is=>"
print short_arg
puts "<"
endprint "Offset arg is=>"
print offset_arg
puts "<"
--
Jim Freeze
Steve Litt wrote:
def usage()
puts "Usage:"
puts "myprog [--help] [--short optional_arg] [--offset required_arg]"
end
Handy hint: use RDoc::usage
e.g.
#!/usr/bin/ruby
# == Synopsis
#
# What the program does
#
# == Usage
#
# progname [ -h | --help ] [ --arg1 val1 | -a val1 ] [ --flag ] arg
#
# arg:
# The thing to do stuff to.
#
# val1:
# An optional value.
#
# --flag makes the program do something else.
#
# == Author
# Your Name Here (mailto:you@example.com)
#
# == Copyright
# Copyright (c) 2005 Your Name. Licensed under the same terms as Ruby.
require 'getoptlong'
require 'rdoc/usage'
opts = GetoptLong.new(
[ '--help', '-h', GetoptLong::NO_ARGUMENT ],
[ '--flag', '-f', GetoptLong::NO_ARGUMENT ],
[ '--arg1', '-a', GetoptLong::REQUIRED_ARGUMENT ]
)
@flag = false
@arg1 = nil
opts.each do |opt, arg|
case opt
when '--help'
RDoc::usage
when '--flag'
@flag = true
when '--val1'
@arg1 = arg
else
puts "Unrecognized option #{opt} (try --help)"
exit 0
end
end
mathew
--
<URL:http://www.pobox.com/~meta/>
My parents went to the lost kingdom of Hyrule
and all I got was this lousy triforce.
Hi Jim,
I came across OptionParser. I tried reading the documentation, but I
saw no simple proof of concept to get me started. I therefore opted
for GetoptLong. At least it's not a total stranger, I've used it in
C and Perl.
Perhaps I just came across the wrong documentation.
I'd like to have the OptionParser documentation contain a proof of
concept, and a couple more examples that follow logically, without
skipping steps.
Thanks
SteveT
Steve Litt
http://www.troubleshooters.com
slitt@troubleshooters.com
On Thursday 15 December 2005 07:32 am, Jim Freeze wrote:
On 12/14/05, Nick Sieger <nicksieger@gmail.com> wrote:
> On 12/14/05, Steve Litt <slitt@earthlink.net> wrote:
> > Hi all,
> >
> > Anyone have a short and easy GetoptLong example in Ruby? It's
> > not object oriented in Perl or C, so I'm in unfamiliar
> > territory.Have you tried OptionParser? It is fully OO and integrated with
Application.Yes, that was the sound of my own horn.
I know CommandLine cannot solve everyones needs, but I would be
interested to hear about it if it doesn't meet your needs. Maybe
there is something I can change or add to the library.My nefarious global take over plans are to see CommandLine -
which has a Ruby flavor - be put in the stdlib and surplant the
existing optparse and getoptlong parsers which use aging
methodologies.
The preceding has a couple typos that keep it from running. The
following cures the typos, and also adds an argument called
"--myflag" that is a flag that can go on or off, but errors out if
you try to give it an argument:
#!/usr/bin/env ruby
require 'rubygems'
require 'commandline'
class App < CommandLine::Application
def initialize
synopsis "[-d] [-s [opt_arg]] [-o req_arg]"
short_description "A sample program"
option :names => %w(--short -s),
:arity => [0,1],
:arg_description => "opt_arg",
:opt_found => get_arg,
:opt_not_found => nil
option :names => %w(--offset -o),
:arg_description => "req_arg",
:opt_found => get_args
option :help
option :names => %w(--myflag -m),
:arity => [0,0],
:arg_description => "flag",
:opt_found => get_arg
end
def main
puts "Short arg is=>#{opt["--short"]}<" unless opt["--short"].nil?
puts "Offset arg is=>#{opt["--offset"]}<"
puts "Myarg arg is=>#{opt["--myflag"]}<"
end
end#class App
On Thursday 15 December 2005 05:50 pm, Jim Freeze wrote:
Here is the above code re-writen using CommandLine as
requested by Steve. It is a fully working example.require 'rubygems'
require 'commandline'class App < CommandLine::Application
def initialize
synopsis "[-d] [-s [opt_arg]] [-o req_arg]"
short_description "A sample program"
option :names => %w(-short -s),:arity => [0,1],
:arg_description => "opt_arg"
:opt_found => get_arg,
:opt_not_found => niloption :names => %w(--offset -o),
:arg_description => "req_arg",
:opt_found => get_argsoption :help
enddef main
puts "Short arg is=>#{opt["--short"]}<" unless
opt["--short"].nil? puts "Offset arg is=>#{opt["--offset"]}<"
endend#class App
> I cruised the net, found an example, and turned it into a small
[clip]
Here is the above code re-writen using CommandLine as
requested by Steve. It is a fully working example.
NOW I think I understand CommandLine::Application. It's like a
GetoptLong that also gives you a usage() subroutine for free, and
if you change your arguments, usage() automatically changes in
sync. Very nice!
SteveT
Steve Litt
http://www.troubleshooters.com
slitt@troubleshooters.com
On Thursday 15 December 2005 05:50 pm, Jim Freeze wrote:
On 12/14/05, Steve Litt <slitt@earthlink.net> wrote:
http://www.ruby-doc.org/stdlib/libdoc/optparse/rdoc/classes/OptionParser.html
is good, although I don't like the use of ostruct. For a cleaner, yet
extensive, construction see http://www.servalys.nl/scripts/mk with its
rdoc at http://www.servalys.nl/scripts/doc/files/mk.html
On Thu, 15 Dec 2005, Steve Litt wrote:
I came across OptionParser. I tried reading the documentation, but I
saw no simple proof of concept to get me started. I therefore opted
for GetoptLong. At least it's not a total stranger, I've used it in
C and Perl.Perhaps I just came across the wrong documentation.
I'd like to have the OptionParser documentation contain a proof of
concept, and a couple more examples that follow logically, without
skipping steps.
--
Wybo
Hi Steve
On 12/15/05, Steve Litt <slitt@earthlink.net> wrote:
I came across OptionParser. I tried reading the documentation, but I
saw no simple proof of concept to get me started. I therefore opted
for GetoptLong. At least it's not a total stranger, I've used it in
C and Perl.Perhaps I just came across the wrong documentation.
I'd like to have the OptionParser documentation contain a proof of
concept, and a couple more examples that follow logically, without
skipping steps.
Is this the documentation that you are referring to that needs improvement:
http://rubyforge.org/docman/view.php/632/233/posted-docs.index.html
Please help me out and post some comments on what you like and don't
like. I am still making improvements in the docs.
--
Jim Freeze
The preceding has a couple typos that keep it from running. The
following cures the typos, and also adds an argument called
"--myflag" that is a flag that can go on or off, but errors out if
you try to give it an argument:
Thanks for fixing the errors. I should have mentioned that it
was untested. And thanks for adding the shebang. Forgot
that too.
#!/usr/bin/env ruby
require 'rubygems'
require 'commandline'class App < CommandLine::Application
def initialize
synopsis "[-d] [-s [opt_arg]] [-o req_arg]"
short_description "A sample program"
option :names => %w(--short -s),
:arity => [0,1],
:arg_description => "opt_arg",
:opt_found => get_arg,
:opt_not_found => niloption :names => %w(--offset -o),
:arg_description => "req_arg",
:opt_found => get_argsoption :help
option :names => %w(--myflag -m),
:arity => [0,0],
:arg_description => "flag",
:opt_found => get_arg
A flag option can be written as:
option :flag, :names => %w(--myflag -m),
The get_arg won't do anything since there is no argment for this option.
On 12/15/05, Steve Litt <slitt@earthlink.net> wrote:
On Thursday 15 December 2005 05:50 pm, Jim Freeze wrote:
end
def main
puts "Short arg is=>#{opt["--short"]}<" unless opt["--short"].nil?
puts "Offset arg is=>#{opt["--offset"]}<"
puts "Myarg arg is=>#{opt["--myflag"]}<"
endend#class App
--
Jim Freeze
Uh huh. An notice that you never actually have to type App.new
or App.run
On 12/15/05, Steve Litt <slitt@earthlink.net> wrote:
NOW I think I understand CommandLine::Application. It's like a
GetoptLong that also gives you a usage() subroutine for free, and
if you change your arguments, usage() automatically changes in
sync. Very nice!
--
Jim Freeze
Hi Jim,
I'm pretty sure those are the docs I couldn't fathom. IMHO what you
need is a quickstart -- all code, no theory. Start with the
simplest possible program that the user can paste into his editor
and then give him the command line to run, and show the expected
output.
I think the idea is to get the user to say "hey, I can do this".
Once he's hooked, he has incentive to dig into the incredibly rich
array of tools you offer.
Personally, when I write documentation on Troubleshooters.Com, I
always start with a "Hello World" and then, one feature at a time,
I move from the known to the unknown (my wife's a teacher :-).
Another thing. I usually show full programs (in blue background) so
the user can paste them into his editor and run them immediately,
and then the expected results in yellow background so the user can
compare his results to the expected results. Once the user sees
both the code and the results, he can then figure out why it works
like it does, and he can also experiment with the code to learn
even more.
For an example of how I write my documentation, see this:
Please keep in mind that I'm displaying this as an example of my
documentation methods, not as an example of particularly good Ruby
documentation. I wrote most of this material with less than a
week's Ruby experience, and before I signed up with this mailing
list. In fact, a companion document called "Ruby the Right Way" was
my reason for my "They say I write Ruby like Perl" post.
If any of you have the book "Samba Unleashed", the chapters with my
name on them are another good example of my documentation methods.
In summary -- IMHO a quickstart would be the catalyst to greater
acceptance of OptionParser. Use whole but tiny programs, without
error checking and the like, to make your points. That way the user
can cut and paste right onto his box and follow your examples on
his own. Within 10 minutes the user understands the power of
OptionParser and is ready to learn more.
Thanks
SteveT
Steve Litt
slitt@troubleshooters.com
On Thursday 15 December 2005 10:06 am, Jim Freeze wrote:
Hi Steve
On 12/15/05, Steve Litt <slitt@earthlink.net> wrote:
> I came across OptionParser. I tried reading the documentation,
> but I saw no simple proof of concept to get me started. I
> therefore opted for GetoptLong. At least it's not a total
> stranger, I've used it in C and Perl.
>
> Perhaps I just came across the wrong documentation.
>
> I'd like to have the OptionParser documentation contain a proof
> of concept, and a couple more examples that follow logically,
> without skipping steps.Is this the documentation that you are referring to that needs
improvement:http://rubyforge.org/docman/view.php/632/233/posted-docs.index.ht
mlPlease help me out and post some comments on what you like and
don't like. I am still making improvements in the docs.