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.
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
/opt/jruby-1.1.2/lib/ruby/gems/1.8/gems/main-2.8.0/lib/main/base.rb:
factories.rb:16:in `Main’
it should be able to do - might take some hacking to deal with
different handling of stdout/stderr/stdin. patches welcome!
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
I’ll consider writing the patches after you write the specs.
And by “specs” I mean actual specs, not a load of numbered tests. I
was disappointed there was no test_420, btw.
heh - well i’ve got about 51 projects on rubyforge attm, nearly all of
them pre-dating bacon and co. if anyone wants to help migrate the
tests… i’ve got some old perl code that needs ported to ruby too.
and a stack of svn projects which need moved to github…