[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

optparse and required switches

Roger Nordqvist

10/8/2007 2:18:00 PM

Hi ...

Im lost with optparse.

Got a couple of questions if its OK.

1. I've been reading the documentation but I cant get it into my thick
head how I tell an option that it is required or optional? I guess all
opts are optional initially, but how do I say that an option is
required.

2. How do I gracefully tell the user that an option they provided is
non-existent. I dont want ruby to crash with a big bang and a lot of
error output.

At at last I would like to appologies if this are noobish questions. Im
new to ruby and Im struggling to get a hang of it. But I dont read ruby
code flawlessly and I dont always get the examples that the gems provide
me.

/Roger
--
Posted via http://www.ruby-....

5 Answers

Jesús Gabriel y Galán

10/8/2007 4:07:00 PM

0

On 10/8/07, Felix Windt <fwmailinglists@gmail.com> wrote:
> > [mailto:list-bounce@example.com] On Behalf Of Roger Nordqvist

> > Im lost with optparse.
> >
> > Got a couple of questions if its OK.
> >
> > 1. I've been reading the documentation but I cant get it into my thick
> > head how I tell an option that it is required or optional? I guess all
> > opts are optional initially, but how do I say that an option is
> > required.
> >
>
> I don't think support for that is built into optparse - you'll have to set
> flags from the options parsed and then throw an error if a certain flag
> isn't set.

For this it might be worth to look into CodeForPeople's main gem (gem
install main). I've been using it in a couple of things lately and am
quite happy. You can specify if an option is required or not, and if
it has arguments which are required or not, etc. in a very simple
syntax.

require 'main'

main {
option("verbose", "v") {
required
}
}

Hope this helps,

Jesus.

7stud 7stud

10/8/2007 4:46:00 PM

0

Roger Nordqvist wrote:
> Hi ...
>
> Im lost with optparse.
>
> Got a couple of questions if its OK.
>
> 1. I've been reading the documentation but I cant get it into my thick
> head how I tell an option that it is required or optional? I guess all
> opts are optional initially, but how do I say that an option is
> required.
>
> 2. How do I gracefully tell the user that an option they provided is
> non-existent. I dont want ruby to crash with a big bang and a lot of
> error output.
>
> At at last I would like to appologies if this are noobish questions. Im
> new to ruby and Im struggling to get a hang of it. But I dont read ruby
> code flawlessly and I dont always get the examples that the gems provide
> me.
>


Try something like this:

require 'optparse'

opts = OptionParser.new do |opts|

#value for option is required:
opts.on("-t=ARG") do |val|
puts "-t option entered with value=#{val}"
end

#value for option is optional:
opts.on("-y [=RANDOM_CHARS]") do |val|
puts "-y option entered with value=#{val}"
end

end

begin
#option -t is required:
#----------------------
found_opt_t = false

ARGV.each do |word|
if word[0, 2] == '-t'
found_opt_t = true
end
end

if not found_opt_t
puts "Option -t is required. Exiting..."
exit
end
#----------------------

opts.parse!(ARGV)

rescue OptionParser::MissingArgument => e
puts e.to_str.capitalize.gsub("argument:", "value for:")
puts "That option requires a value. Please try again."
puts "Exiting.."
exit
end


Test run:

$ ruby r8test.rb -t 10 -y 15
-t option entered with value=10
-y option entered with value=15

$ ruby r8test.rb -t10
-t option entered with value=10

$ ruby r8test.rb -t
Missing value for: -t
That option requires a value. Please try again.
Exiting..

$ ruby r8test.rb
Option -t is required.
Exiting...

$

--
Posted via http://www.ruby-....

Roger Nordqvist

10/8/2007 4:52:00 PM

0

Thanx a lot people for all the helpful answers. I will check this out
asap at work tomorrow.

What Ive seen so far the greatest strength of Ruby is not it's clean
syntax, its nice OOP features or even the gem repository. Nope, for me
as a newbie its the wonderful community surounding Ruby thats make it
all worth trying to learn it.
--
Posted via http://www.ruby-....

7stud 7stud

10/8/2007 5:06:00 PM

0

A little change here:

ARGV.each do |word|
if word[0, 2] == '-t'
found_opt_t = true
break #<---if found option, no reason to continue loop
end
end
--
Posted via http://www.ruby-....

Roger Nordqvist

10/9/2007 9:53:00 AM

0

This is what I came up with for required options. Is this the "ruby way"
of doing it or?

require 'optparse'

options = {}

OptionParser.new do |o|
o.banner = "Usage: #$0 [options]"

o.on("-s", "--server s", "Get servername to connect to") do |s|
options[:server] = s
end

o.on("-u", "--username u", "Get username to connect as") do |u|
options[:username] = u
end

o.on("-p", "--password p", "Get password for user username") do |p|
options[:password] = p
end

o.on("-f", "--filename f", "Remote path and filename to tail") do |f|
options[:filename] = f
end

o.on("-F", "--follow", "Use -f/--follow with remote tail command") do
|follow|
options[:follow] = follow
end
end.parse!

# Check to see if we got the required arguments needed?
required_opts = [:server, :username, :password, :filename]

required_opts.each do |opt|
if options.has_key?(opt)
next
else
puts "Required option --#{opt} missing."
end
end
--
Posted via http://www.ruby-....