Ruby est équipé d'un outil puissant et flexible pour analyser les options de ligne de commande, OptionParser. Une fois que vous aurez appris à l'utiliser, vous ne reviendrez jamais à la recherche manuelle dans ARGV. OptionParser possède un certain nombre de fonctionnalités qui le rendent très attrayant pour les programmeurs Ruby. Si vous avez déjà analysé des options à la main en Ruby ou C, ou avec le getoptlong Fonction C, vous verrez à quel point certains de ces changements sont les bienvenus.
Voici donc un exemple simple d'utilisation OptionParser. Il n'utilise aucune des fonctionnalités avancées, juste les bases. Il existe trois options et l'une d'elles prend un paramètre. Toutes les options sont obligatoires. Il y a le -v / - verbeux et -q / - rapide options, ainsi que les -l / - fichier journal option. De plus, le script prend une liste de fichiers indépendamment des options.
#! / usr / bin / env rubis
# Un script qui fera semblant de redimensionner un certain nombre d'images
exiger 'optparse'
# Ce hachage contiendra toutes les options
# analysé depuis la ligne de commande par
# OptionParser.
options =
optparse = OptionParser.new do | opts |
# Définissez une bannière, affichée en haut
# de l'écran d'aide.
opts.banner = "Utilisation: optparse1.rb [options] file1 file2…"
# Définissez les options et ce qu'elles font
options [: verbose] = false
opts.on ('-v', '--verbose', 'Output more information') do
options [: verbose] = true
fin
options [: rapide] = faux
opts.on ('-q', '--quick', 'Effectuer la tâche rapidement') do
options [: quick] = true
fin
options [: logfile] = nil
opts.on ('-l', '--logfile FILE', 'Write log to FILE') do | file |
options [: logfile] = fichier
fin
# Ceci affiche l'écran d'aide, tous les programmes sont
# supposé avoir cette option.
opts.on ('-h', '--help', 'Afficher cet écran') do
met opts
sortie
fin
fin
# Analyser la ligne de commande. N'oubliez pas qu'il existe deux formes
# de la méthode d'analyse. La méthode 'parse' analyse simplement
# ARGV, tandis que le 'parse!' la méthode analyse ARGV et supprime
# toutes les options qui s'y trouvent, ainsi que tous les paramètres pour
# les options. Ce qui reste est la liste des fichiers à redimensionner.
optparse.parse!
met "étant verbeux" si les options [: verbose]
met "Être rapide" si les options [: rapide]
met "Journalisation dans le fichier # options [: logfile]" si les options [: logfile]
ARGV.chaque do | f |
met "Redimensionner l'image # f…"
dormir 0,5
fin
Pour commencer, le optparse bibliothèque est requise. Rappelez-vous, ce n'est pas un joyau. Il est livré avec Ruby, donc il n'est pas nécessaire d'installer une gemme ou de demander rubygems avant optparse.
Il y a deux objets intéressants dans ce script. Le premier est les options, déclarée au niveau le plus élevé. C'est un simple hachage vide. Lorsque les options sont définies, elles écrivent leurs valeurs par défaut dans ce hachage. Par exemple, le comportement par défaut est que ce script ne pas être verbeux, alors options [: verbose] est défini sur false. Lorsque des options sont rencontrées sur la ligne de commande, elles modifient les valeurs dans les options pour refléter leur effet. Par exemple, lorsque -v / - verbeux est rencontré, il affectera true à options [: verbose].
Le deuxième objet intéressant est optparse. C'est le OptionParser objet lui-même. Lorsque vous construisez cet objet, vous lui passez un bloc. Ce bloc est exécuté pendant la construction et va créer une liste d'options dans les structures de données internes, et se prépare à tout analyser. C'est dans ce bloc que toute la magie opère. Vous définissez ici toutes les options.
Chaque option suit le même schéma. Vous écrivez d'abord la valeur par défaut dans le hachage. Cela se produira dès que le OptionParser est construit. Ensuite, vous appelez le sur , qui définit l'option elle-même. Il existe plusieurs formes de cette méthode, mais une seule est utilisée ici. Les autres formulaires vous permettent de définir des conversions de types automatiques et des ensembles de valeurs auxquels une option est limitée. Les trois arguments utilisés ici sont la forme courte, la forme longue et la description de l'option.
le sur La méthode déduira un certain nombre de choses du formulaire long. Une chose à en déduire est la présence de tout paramètre. Si des paramètres sont présents sur l'option, elle les transmettra en tant que paramètres au bloc.
Si l'option est rencontrée sur la ligne de commande, le bloc transmis à la sur est exécutée. Ici, les blocs ne font pas grand-chose, ils définissent simplement des valeurs dans le hachage des options. Plus pourrait être fait, comme vérifier qu'un fichier auquel il est fait référence existe, etc. S'il y a des erreurs, des exceptions peuvent être levées de ces blocs.
Enfin, la ligne de commande est analysée. Cela se produit en appelant le analyser! méthode sur un OptionParser objet. Il existe en fait deux formes de cette méthode, analyser et analyser!. Comme la version avec le point d'exclamation l'indique, elle est destructrice. Non seulement il analyse la ligne de commande, mais il supprimera toutes les options trouvées dans ARGV. Ceci est important, il ne restera que la liste des fichiers fournis après les options de ARGV.