¿Hay alguna forma de iniciar OptionParser varias veces en un programa de Ruby, cada uno con diferentes conjuntos de opciones?¿Puede OptionParser omitir las opciones desconocidas para procesarlas más adelante en un programa de Ruby?
Por ejemplo:
$ myscript.rb --subsys1opt a --subsys2opt b
Aquí, myscript.rb usaría subsys1 y subsys2, delegando sus opciones de manejo de la lógica para ellos, posiblemente en una secuencia en la que 'a' es procesado primero, seguido por 'b' en un objeto OptionParser separado; cada vez que seleccionas opciones solo relevantes para ese contexto. Una fase final podría verificar que no quede nada desconocido después de que cada parte haya procesado la suya.
Los casos de uso son:
En un programa anticipado de acoplamiento flexible, donde varios componentes tienen diferentes argumentos, no quiero 'principal' que saber de todo, sólo para delegar conjuntos de argumentos/opciones para cada parte.
Incrustar un sistema más grande como RSpec en mi aplicación, y simplemente pasaría una línea de comandos a través de sus opciones sin que mi envoltorio las conozca.
Estaría bien con alguna opción de delimitación también, como --
o --vmargs
en algunas aplicaciones Java.
Hay muchos ejemplos del mundo real para cosas similares en el mundo de Unix (startx/X, git fontanería y porcelana), donde una capa maneja algunas opciones pero propaga el resto a la capa inferior.
Fuera de la caja, esto no parece funcionar. Cada llamada OptionParse.parse!
hará un procesamiento exhaustivo, fallando en cualquier cosa que desconozca. Supongo que me encantaría omitir las opciones desconocidas.
Cualquier sugerencia, tal vez enfoques alternativos son bienvenidos.
En el ejemplo anterior, miscript .rb recibirá todas las opciones como ARGV. Si te entiendo, dices que algunas de esas opciones deben pasarse a "subcapas". ¿Myscript.rb llama a esas subcapas? En caso afirmativo, su pregunta se convierte simplemente en cómo recuperar algunos elementos de la matriz ARGV, pasando el resto a otro programa. Si myscript.rb no llama a las capas secundarias, ¿qué hace? – Alkaline
Sí, myscript.rb utiliza esas subcapas (actualizó la descripción para que quede más claro). Así que su pregunta reformulada es casi correcta "cómo recuperar algunos elementos de la matriz ARGV, pasando el resto a otro programa", excepto que no es necesario otro programa (es por eso que utilicé el término de subsistema/componente más genérico), y específicamente preguntó sobre 'optparse'. De ahí que "¿puede optparse omitir las opciones desconocidas, para ser procesadas más adelante en un programa ruby?" – inger