Hi Edward

You could give the commandline gem a try (I wrote it)

  % gem install -r commandline -v 0.7.1

  % cat myapp.rb
  require 'rubygems'
  require 'commandline'

  class MyApp < CommandLine::Application
    def initialize
      option :names => %w(--size -s)
      option :verbose
      option :flag, :names => %w(--query -q)
      option :flag, :names => %w(--check --valid -c)
    end
  end

  % ruby myapp.rb -not -a -real -option
  ERROR: Unknown option '-not'.


* edward.og / gmail.com <edward.og / gmail.com> [2005-07-15 01:00:52 +0900]:

> I took the synopsis that comes in the GetoptLong documentation, and
> turned on
> the quiet flag.
> 
> ################################################################################
> 
> require 'getoptlong'
> 
> 
> # specify the options we accept and initialize
> # the option parser
> 
> opts.quiet = true
> 
> opts = GetoptLong.new(
>   [ "--size",    "-s",            GetoptLong::REQUIRED_ARGUMENT ],
>   [ "--verbose", "-v",            GetoptLong::NO_ARGUMENT ],
>   [ "--query",   "-q",            GetoptLong::NO_ARGUMENT ],
>   [ "--check",   "--valid", "-c", GetoptLong::NO_ARGUMENT ]
> )
> 
> 
> # process the parsed options
> 
> 
> opts.each do |opt, arg|
>   puts "Option: #{opt}, arg #{arg.inspect}"
> end
> 
> 
> puts "Remaining args: #{ARGV.join(', ')}"
> ################################################################################
> 
> The documentation says that the quiet flag makes the opt.each (in this
> case)
> stop when it reaches an invalid flag because GetoptLong#.get will have
> passed
> nil to the opts.each loop on reaching an invalid flag.
> 
> I tried this:
> $ ruby getoptslongExample.rb -not -a -real -option
> getoptslongExample.rb: invalid option -- n
> /usr/lib/ruby/1.8/getoptlong.rb:265:in `set_error': invalid option -- n
> (GetoptLong::InvalidOption)        from
> /usr/lib/ruby/1.8/getoptlong.rb:434:in `get_option'
>         from /usr/lib/ruby/1.8/getoptlong.rb:458:in `each'
>         from /usr/lib/ruby/1.8/getoptlong.rb:457:in `loop'
>         from /usr/lib/ruby/1.8/getoptlong.rb:457:in `each'
>         from getoptslongExample.rb:25
> 
> This doesn't look very quiet.
> 
> I've caught the raised error with the following code:
> 
> ################################################################################
> 
> #snip#
> 
> # process the parsed options
> 
> begin
> 	opts.each do |opt, arg|
> 		puts "Option: #{opt}, arg #{arg.inspect}"
> 	end
> rescue
>   	print "Chill, it's ok.\n"
>   	exit
> end
> 
> ################################################################################
> 
> This works nicely, but I think I'd rather have the quiet version that I
> expected.  Actually, what I really like to have is a version that could
> tell
> the user that *badOption* is invalid.
> 
> How would I implement this, and why is the quiet option not doing
> anything?
> 

-- 
Jim Freeze