OptionParser Ruby

by Gastón Ramos

OptionParser es una forma flexible y extensible para parsear argumentos de línea de comandos.

* Una opción puede tener múltiples nombres cortos (precedidos por un guión simple) y múltiples nombres largos (precedidos por doble guión). Así una opción que muestra la ayuda está disponible como -h, -?, –help y –about. Los usuarios pueden abreviar los nombres de opciones largas por un prefijo corto no ambiguo.

* Una opción puede ser especificada como sin argumentos, con argumento opcional, o requerido. Los argumentos pueden a validarse contra patrones o listas de valores.

* Los argumentos pueden retornarse como objetos de cualquier tipo (no sólo como Strings).

* Los argumentos pueden tener una o más líneas de texto descriptivo, para generar la infromación de uso.

Las opciones se especifican usando los métodos on y def. Estos métodos toman un número variable de argumentos que en conjunto construyen una definición de cada opción. Los argumentos aceptados por estos métodos están el al tabla 1.

require 'optparse'
require 'date'
# Add Dates as a new option type
OptionParser.accept(Date, /(d+)-(d+)-(d+)/) do |d, mon, day, year|
Date.new(year.to_i, mon.to_i, day.to_i)
end
opts = OptionParser.new
opts.on("-x") {|val| puts "-x seen" }
opts.on("-s", "--size VAL", Integer) {|val| puts "-s #{val}" }
opts.on("-a", "--at DATE", Date) {|val| puts "-a #{val}" }
my_argv = [ "--size", "1234", "-x", "-a", "12-25-2003", "fred", "wilma" ]
rest = opts.parse(*my_argv)
puts "Remainder = #{rest.join(', ')}"
puts opts.to_s

produces:
-s 1234
-x seen
-a 2003-12-25
Remainder = fred, wilma
Usage: myprog [options]
-x
-s, –size VAL
-a, –at DATE

Opciones de definición de argumentos.

“x” “-xARG” “-x=ARG” “-x[OPT]” “-x[=OPT]” “-x PLACE”

Opción que tiene el nombre corto x. La primer forma no tiene argumento, las dos segundas tienen un argumento obligatorio, las siguientes dos tienen un argumento opcional, la última especifica la opción seguida del argumento.

“switch” “–switch=ARG” “–switch=[OPT]” “–switch PLACE”

Opción que tiene el nombre largo switch. La primer forma tiene argumento, al siguiente tiene un argumento obligatorio, la siguiente tiene un argumento opcional, y la última especifica el argumento seguido al switch.

“–no-switch”

Define una opción cuyo valor por defecto es false.

“ARG” “=[OPT]”

El argumento para esta opción es obligatorio u opcional. Por ejemplo el código siguiente dice aquí hay una opción conocida por sus alias -x, -y y -z que toma un argumento obligatorio mostrado en el uso como N.

opt.on(“-x”, “-y”, “-z”, “=N”)

“description”

Cualquier string que comience con – o = es usado como descripción para esta opción en el resumen. Puede darse muchas decripciones que serán mostradas en líneas adicionales.

/pattern/

Cualquier argumento debe coincidir con el patron dado.

array

El argumento debe ser algunos de los elementos del array.

“proc or method”

La conversión del tipo de argumento es ejecutada por el proc o el
método dado.(más bien que usando el bloque asociado a la llamada del
método on o def).

ClassName:

Object: Cualquier string. Sin conversion. Este es por defecto.
String: Cualquier string no vacío. Sin conversión.
Integer: Integer Ruby/C con signo opcional (0dddd es octal, 0bddd binario, 0xddd hexadecimal).
Float: Formato de número flotante. Convierte a Float.
Numeric: Formato numérico genérico . Convierte a entero para los enteros, y a flotante para los flotantes.
Array: Argument must be of list of strings separated by a comma.
OptionParser::DecimalInteger: Entero decimal. Converted to Integer.
OptionParser::OctalInteger: Ruby/C-like octal/hexadecimal/binary integer.
OptionParser::DecimalNumeric: Decimal integer/\ufb02oat number. Integers converted to Integer, \ufb02oats to Float.
TrueClass, FalseClass: Boolean switch.