2013-05-23 14 views
11

il codice qui sotto lavori, ma sto sollevando manualmente gli errori di argomento per gli argomenti richiesti utilizzando fetch, quando voglio costruire gli argomenti richiesti nel sytax OptionParser nativo per i parametri richiesti:Come generare OptionParser richiede argomenti

# 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 

risposta

8

c'è una domanda simile con una risposta che può aiutare: "How do you specify a required switch (not argument) with Ruby OptionParser?"

In breve: non sembra essere un modo per fare un opzione desiderata (si chiamano opzioni dopo tutto).

Esiste un'eccezione OptionParser::MissingArgument che è possibile aumentare anziché lo ArgumentError attualmente in fase di lancio.

+0

Ho optato per l'utilizzo di un gioiello rubino chiamato https://github.com/JEG2/highline questo ha un menu cli dsl e parametri richiesti. – lukemh

+1

Bel lavoro. Un mio collega ha anche scritto una gemma chiamata escort che può impostare i parametri richiesti per le app CLI: https://github.com/skorks/escort#required-arguments –

Problemi correlati