2013-05-23 12 views
11

poniższy kod działa, ale ja ręcznie podniesienie błędy argumentem dla wymaganych argumentów używając fetch, kiedy chcę zbudować wymagane argumenty do rodzimej OptionParser sytax o wymaganych parametrach:Jak wygenerować OptionParser wymagają argumentów

# ocra script.rb -- --type=value 
options = {} 
OptionParser.new do |opts| 
    opts.banner = "Usage: example.rb [options]" 

    opts.on("--type [TYPE]",String, [:gl, :time], "Select Exception file type (gl, time)") do |t| 
    options["type"] = t 
    end 

    opts.on("--company [TYPE]",String, [:jaxon, :doric], "Select Company (jaxon, doric)") do |t| 
    options["company"] = t 
    end 

end.parse! 

opts = {} 
opts['type'] = options.fetch('type') do 
    raise ArgumentError,"no 'type' option specified as a parameter (gl or time)" 
end 

opts['company'] = options.fetch('company') do 
    raise ArgumentError,"no 'company' option specified as a parameter (doric or jaxon)" 
end 

Odpowiedz

8

jest podobne pytanie z odpowiedzią, które mogą pomóc: „How do you specify a required switch (not argument) with Ruby OptionParser?

W skrócie: nie wydaje się być sposobem na opcję wymaganą (nazywane są opcje po wszystkich).

Istnieje wyjątek, który można podnieść, a nie ArgumentError, który obecnie rzucasz.

+0

Osiedliłem się przy użyciu klejnotu ruby ​​o nazwie https://github.com/JEG2/highline to ma menu cli dsl i wymagane parametry. – lukemh

+1

Dobra robota. Mój kolega napisał także klejnot o nazwie eskorta, który może ustawić wymagane parametry dla aplikacji CLI: https://github.com/skorks/escort#required-arguments –