Я собираюсь ответить на этот вопрос, порекомендовав посмотреть на новый камень " slop ".Это обертка вокруг getoptlong
.
Вы можете использовать gem install slop
, если вы используете RVM, или sudo gem install slop
в противном случае.
GetOptLong очень мощный, но, хотя я использовал его несколько раз, мне все равно придетсякаждый раз просматривайте документы.
Если вы хотите немного больше мощности, с «более простым в использовании интерфейсом, чем GetOptLong», посмотрите Ruby OptionParser
.Вам нужно будет лучше проработать логику, но это быстрое преобразование кода.Мне пришлось заглушить класс для драгоценного камня CommonLog, потому что я им не пользуюсь.Важный материал следует за строкой, извлекающей журнал из ARGV
:
require 'optparse'
class CommonLog
def initialize(*args); end
def urlReport(); puts "running urlReport()"; end
def ipReport(); puts "running ipReport()"; end
def statReport(arg); puts "running statReport(#{arg})"; end
end
log = CommonLog.new(ARGV[0])
OptionParser.new { |opts|
opts.banner = "Usage: #{File.basename($0)} -u -i -s filename"
opts.on( '-u', '--[no-]url', 'some short text describing URL') do
log.urlReport()
end
opts.on('-i', '--[no-]ip', 'some short text describing IP') do
log.ipReport()
end
opts.on('-s', '--stat FILENAME', 'some short text describing STAT') do |arg|
log.statReport(arg)
end
}.parse!
Кроме того, в качестве быстрой критики вы не пишете идиоматический код Ruby:
when
операторовможно написать: when "-h", "--help"
if ARGV[0] == nil || ARGV.size != 1
извилистый.Изучите, как работают ARGV и массивы.Обычно для ARGV[0]
равным нулю аргументов больше не будет, поэтому ARGV.empty?
, вероятно, будет достаточно.