2013-05-23 1 views
11

Der folgende Code funktioniert, aber ich sammele manuell Argument Fehler für die erforderlichen Argumente mit fetch, wenn ich die erforderlichen Argumente in die native OptionParser sytax für erforderlichen Parameter aufbauen wollen:Wie generieren OptionParser erfordern Argumente

# 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 

Antwort

8

Es gibt eine ähnliche Frage mit einer Antwort, die Ihnen helfen kann: „How do you specify a required switch (not argument) with Ruby OptionParser?

kurz gesagt: Es gibt keine Möglichkeit zu sein scheint eine Option machen erforderlich (sie werden schließlich genannt Optionen).

Es gibt eine OptionParser::MissingArgument Ausnahme, die Sie anstelle der ArgumentError Ausnahme, die Sie derzeit werfen, erhöhen können.

+0

Ich habe mich auf die Verwendung eines Rubin Juwel namens https://github.com/JEG2/highline entschieden dies hat eine CLI-Menü-DSL und erforderlichen params. – lukemh

+1

Gute Arbeit. Ein Kollege von mir schrieb auch ein Juwel namens Escort, das die erforderlichen Parameter für CLI-Apps festlegen kann: https://github.com/skorks/escort#required-arguments –