From: Greg Willits on
I'm having a real problem understanding OptionParser -- the docs in
pickaxe are rather cryptic, Ruby Way doesn't even talk about it, and all
the Q&A I can find on the web doesn't clear it up for me.

I've gotten this far:

# test.rb ---------
require 'optparse'

commands = OptionParser.new
commands.on("-h", "--help") # more or less, I get the .on stuff
commands.on("-e=RUN_ENV")

commands.parse(ARGV)

puts commands

# ---------

That will dump a display of the commands, but for the life of me, I
can't figure out how to determine which options were actually submitted.
And if the -e param was supplied, what's its value is.

I have seen:

commands.parse(ARGV)
commands.parse!(ARGV)
options = commands.parse(ARGV)

So, confused by that to start with, then really confused by where the
parsed commands are, and what format they're in.

-- gw
--
Posted via http://www.ruby-forum.com/.

From: dusty on
Here is a quick example program. Hope this gets you started.

#!/usr/bin/env ruby
require 'optparse'

options = {}
opts = OptionParser.new
opts.on("-W", "--weekday", "Print out the weekday") do |v|
options[:weekday] = true
end
opts.on("-H", "--hour TYPE", "Print out the hour in 24 or 12 hour
clock") do |v|
options[:hour] = v
end

opts.parse!

unless options[:weekday] || options[:hour]
puts opts
exit
end

if options[:weekday]
puts Time.now.strftime("%A")
exit
end

case options[:hour]
when "12"
puts Time.now.strftime("%I")
when "24"
puts Time.now.strftime("%H")
else
puts "You must send 12 or 24 as an argument to --hour"
end
From: Greg Willits on
dusty wrote:
> Here is a quick example program. Hope this gets you started.

Yes! That turned out to be the Rosetta Stone to help me interpret and
fill the gaps in the other examples I've found.

Many thanks.

-- gw


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

From: ara.t.howard on

On Jul 2, 2008, at 6:54 PM, Greg Willits wrote:

> I'm having a real problem understanding OptionParser -- the docs in
> pickaxe are rather cryptic, Ruby Way doesn't even talk about it, and
> all
> the Q&A I can find on the web doesn't clear it up for me.
>
> I've gotten this far:
>
> # test.rb ---------
> require 'optparse'
>
> commands = OptionParser.new
> commands.on("-h", "--help") # more or less, I get the .on stuff
> commands.on("-e=RUN_ENV")
>
> commands.parse(ARGV)
>
> puts commands
>
> # ---------
>
> That will dump a display of the commands, but for the life of me, I
> can't figure out how to determine which options were actually
> submitted.
> And if the -e param was supplied, what's its value is.
>
> I have seen:
>
> commands.parse(ARGV)
> commands.parse!(ARGV)
> options = commands.parse(ARGV)
>
> So, confused by that to start with, then really confused by where the
> parsed commands are, and what format they're in.
>
> -- gw
> --
> Posted via http://www.ruby-forum.com/.
>



cfp:~ > cat a.rb
require 'yaml'
require 'rubygems' ### gem install rubygems
require 'main'

Main {
option('environment', 'e'){
synopsis 'specify run time environment'
default 'development'
argument :required
validate{|arg| %w[ production development test ].include? arg}
}

def run
environment = params['environment']

y :given => environment.given?,
:value => environment.value
end
}



cfp:~ > ruby a.rb
---
:value: development
:given:


cfp:~ > ruby a.rb --environment=foobar
invalid: option(--environment)="foobar"

cfp:~ > ruby a.rb --environment=test
---
:value: test
:given: true



cfp:~ > ruby a.rb --help
NAME
a.rb

SYNOPSIS
a.rb [options]+

DESCRIPTION
main.rb takes the pain of argument parsing away

PARAMETERS
specify run time environment
--help, -h



the packages ships with a tons of examples.

a @ http://codeforpeople.com/
--
we can deny everything, except that we have the possibility of being
better. simply reflect on that.
h.h. the 14th dalai lama




From: Jim Morris on
I love Main, but it does not seem to work under JRuby, any ideas?

This is the error I always get...

F, [2008-07-03T10:24:48.827600 #9761] FATAL -- : could not reopen: null (IOError)
/opt/jruby-1.1.2/lib/ruby/gems/1.8/gems/main-2.8.0/lib/main/base.rb:318:in `setup_io_restoration'
/opt/jruby-1.1.2/lib/ruby/gems/1.8/gems/main-2.8.0/lib/main/base.rb:318:in `call'
/opt/jruby-1.1.2/lib/ruby/gems/1.8/gems/main-2.8.0/lib/main/base.rb:318:in `finalize'
/opt/jruby-1.1.2/lib/ruby/gems/1.8/gems/main-2.8.0/lib/main/base.rb:29:in `run'
/opt/jruby-1.1.2/lib/ruby/gems/1.8/gems/main-2.8.0/lib/main/base.rb:12:in `catch'
/opt/jruby-1.1.2/lib/ruby/gems/1.8/gems/main-2.8.0/lib/main/base.rb:12:in `run'
/opt/jruby-1.1.2/lib/ruby/gems/1.8/gems/main-2.8.0/lib/main/factories.rb:11:in `run'
/opt/jruby-1.1.2/lib/ruby/gems/1.8/gems/main-2.8.0/lib/main/factories.rb:16:in `Main'


ara.t.howard wrote:

>
> cfp:~ > cat a.rb
> require 'yaml'
> require 'rubygems' ### gem install rubygems
> require 'main'
>
> Main {
> option('environment', 'e'){
> synopsis 'specify run time environment'
> default 'development'
> argument :required
> validate{|arg| %w[ production development test ].include? arg}
> }
>
> def run
> environment = params['environment']
>
> y :given => environment.given?,
> :value => environment.value
> end
> }
>
>
>
> cfp:~ > ruby a.rb
> ---
> :value: development
> :given:
>
>
> cfp:~ > ruby a.rb --environment=foobar
> invalid: option(--environment)="foobar"
>
> cfp:~ > ruby a.rb --environment=test
> ---
> :value: test
> :given: true
>
>
>
> cfp:~ > ruby a.rb --help
> NAME
> a.rb
>
> SYNOPSIS
> a.rb [options]+
>
> DESCRIPTION
> main.rb takes the pain of argument parsing away
>
> PARAMETERS
> specify run time environment
> --help, -h
>
>
>
> the packages ships with a tons of examples.
>
> a @ http://codeforpeople.com/
> --
> we can deny everything, except that we have the possibility of being
> better. simply reflect on that.
> h.h. the 14th dalai lama
>
>
>
>
>


--
Jim Morris, http://blog.wolfman.com