Печать списка только некоторых опций с использованием Ruby OptionParser - PullRequest
2 голосов
/ 18 сентября 2011

В моей программе много параметров командной строки. Но я не хочу перегружать пользователя, когда он печатает --help. Вместо того, чтобы распечатывать все опции, я хотел бы перечислить только самые важные, печатая остальные, когда наберете --help=full.

Но OptionParser поддерживает только печать всего списка определенных опций. Я хотел бы написать свой собственный код, который перебирает определенные параметры и печатает их по-своему, но OptionParser, похоже, не предоставляет никаких способов доступа к определениям параметров, которые он содержит.

Есть ли способ получить доступ к параметрам в OptionParser, которые я мог пропустить? Или есть хорошая альтернатива OptionParser? Или какой-то другой подход к этой проблеме?

1 Ответ

3 голосов
/ 19 сентября 2011

Вы можете переопределить параметр --help для своих нужд.

require 'optparse'

#create parsers
opts = OptionParser.new()
opts.banner = "Usage: example.rb [options]"
opts.separator("test optparse with --help[=full]")
opts.on("-v", "--[no-]verbose", "Run verbosely") { |v|
  puts "->Verbose ist #{v.inspect}"
}
opts.on("-r", "--repeat REPEAT", "Repeat REPEAT times") { |v|
  puts "->Repeat ist #{v.inspect}"
}

#Define your own --help
opts.on("-h", "--help [HELP]", "Help") { |v|
  case v
    when 'full' #write original help
      puts opts.help
    when nil, '' #write script specific help
      puts opts.banner 
      opts.summarize([], opts.summary_width ) { |helpline| 
        #make your own decision on each helpline
        #~ puts helpline #puts each line
        puts helpline unless helpline =~ /-v/ #ignore -v
      }
    else
      puts opts.banner 
      puts <<helpmessage
Undefined --help option. Please use 'full' or no option
  #{File.basename(__FILE__)} --help
  #{File.basename(__FILE__)} --help=full
helpmessage
  end
}

opts.parse!

В этой версии --help показывает все параметры, но не -v.Вы можете сделать свой собственный выбор - или написать совершенно другую помощь.

...