Y a-t-il un moyen de lancer OptionParser plusieurs fois dans un programme Ruby, chacun avec différents ensembles d'options?Est-ce que OptionParser peut ignorer les options inconnues, qui seront traitées plus tard dans un programme Ruby?
Par exemple:
$ myscript.rb --subsys1opt a --subsys2opt b
Ici, myscript.rb utiliseraient subsys1 et subsys2, déléguer leurs options de traitement pour les logiques, peut-être dans une séquence où 'a' est traitée en premier, suivi par 'b' dans un objet OptionParser séparé; chaque fois choisir des options uniquement pertinentes pour ce contexte. Une dernière phase pourrait vérifier qu'il n'y a plus rien d'inconnu après le traitement de chaque pièce.
Les cas d'utilisation sont:
Dans un programme frontal à couplage lâche, où différents composants ont des arguments différents, je ne veux pas « principale » pour tout savoir, pour déléguer des ensembles de arguments/options pour chaque partie.
Incorporation d'un système plus important comme RSpec dans mon application, et je passerais simplement une ligne de commande à travers leurs options sans que mon wrapper ne les connaisse.
je serais OK avec une option delimiter ainsi, comme --
ou --vmargs
dans certaines applications Java. Il ya beaucoup d'exemples du monde réel pour des choses similaires dans le monde Unix (startx/X, plomberie git et porcelaine), où une couche gère certaines options mais propage le reste vers la couche inférieure. En dehors de la boîte, cela ne semble pas fonctionner. Chaque appel OptionParse.parse!
fera un traitement exhaustif, échouant sur tout ce qu'il ne sait pas. Je suppose que je serais heureux d'ignorer les options inconnues.
Tous les indices, peut-être des approches alternatives sont les bienvenus.
Dans votre exemple ci-dessus, MyScript .rb recevra toutes les options comme ARGV. Si je vous comprends, vous dites que certaines de ces options doivent être passées à des "sous-couches". Est-ce que myscript.rb appelle ces sous-couches? Si oui, votre question devient simplement comment récupérer certains éléments du tableau ARGV, en passant le reste à un autre programme. Si myscript.rb n'appelle pas les sous-couches, que fait-il? – Alkaline
Oui, myscript.rb utilise ces sous-couches (mise à jour de la description pour rendre cela plus clair). Donc votre question reformulée est presque correcte "comment récupérer certains éléments de la matrice ARGV, en passant le reste à un autre programme", sauf qu'un autre programme n'est pas nécessaire (c'est pourquoi j'ai utilisé le terme générique de sous-système/composant) interrogé sur 'optparse'. Par conséquent "Can optparse ignore les options inconnues, à traiter plus tard dans un programme ruby?" – inger