En OptionParser puedo hacer que una opción sea obligatoria, pero si dejo fuera ese valor, tomará el nombre de cualquier opción siguiente como valor, arruinando el resto del análisis de línea de comando. Aquí es un caso de prueba que se hace eco de los valores de las opciones:¿Cómo manejo un argumento obligatorio que falta en Ruby OptionParser?
$ ./test_case.rb --input foo --output bar
output bar
input foo
Ahora dejar de lado el valor de la primera opción:
$ ./test_case.rb --input --output bar
input --output
¿Hay alguna manera de evitar que tomar otro nombre de la opción como ¿un valor? Gracias!
Aquí es el código de caso de prueba:
#!/usr/bin/env ruby
require 'optparse'
files = Hash.new
option_parser = OptionParser.new do |opts|
opts.on('-i', '--input FILENAME', 'Input filename - required') do |filename|
files[:input] = filename
end
opts.on('-o', '--output FILENAME', 'Output filename - required') do |filename|
files[:output] = filename
end
end
begin
option_parser.parse!(ARGV)
rescue OptionParser::ParseError
$stderr.print "Error: " + $! + "\n"
exit
end
files.keys.each do |key|
print "#{key} #{files[key]}\n"
end
Sí ... que resuelve el caso de prueba, pero realmente espero que pueda hacer esto dentro del bloque OptionParser.new donde pertenece. Se supone que puede incluir un/patrón/en una llamada a() que cualquier argumento debe coincidir, pero todavía no estoy trabajando. Gracias! –