2010-08-18 4 views
1

Je travaille actuellement sur une application CLI en Ruby, j'utilise Trollop (http://trollop.rubyforge.org/) pour faire face aux arguments de cli.Ruby CLI gestion de la configuration de l'application/argument

Je voudrais également implémenter la possibilité de stocker les options requises dans ~/.mycfg ainsi que cwd/.mycfg, ce dernier ayant la priorité.

Le comportement que je suis en train de mettre en œuvre est:

Si .mycfg existe dans le répertoire de travail en cours, les options par défaut de charge à partir de là, sinon, si elle existe dans le répertoire personnel de l'utilisateur, les options de charge à partir de là.

Je vais donc passer outre ces options si elles sont également passés comme arguments.

La question est, quel format le fichier de configuration doit être? J'ai pensé à YAML, mais ensuite comment je fusionne le tableau que Trollop génère pour les paramètres avec le YAML, ou l'inverse.

Répondre

2

Une chose facile, vous pouvez essayer de modifier ARGV avant Trollop traite. Tout d'abord, lisez votre fichier de configuration et convertissez les données stockées dans un tableau d'options de ligne de commande équivalentes. Maintenant, précédez ce tableau à ARGV et puis mis Trollop lâche. De cette façon, Trollop analysera tous vos arguments (qu'ils proviennent du fichier de configuration ou de la CLI). Étant donné que vos paramètres de fichier de configuration sont maintenant listés avant les paramètres de l'interface de ligne de commande, toute option CLI remplacera une option de fichier de configuration correspondante (puisque les options ultérieures remplacent les options précédentes).

Votre fichier de configuration peut être dans un format que vous voulez utiliser, mais parfois la forme la plus simple peut être le plus facile. Essayez un format de texte brut où le contenu du fichier de configuration est simplement les paramètres exacts que vous voulez transmettre à votre script. C'est-à-dire que le contenu du fichier est écrit de telle sorte que l'appel:

your_script.rb `cat optionsfile` -more -CLI -options 

fonctionnerait comme prévu. Stocker les options dans ce format les rend faciles à éditer et à traiter. Il suffit de lire dans le fichier (devrait être une seule ligne) et appelez String.split(' ') pour diviser les options dans un tableau, tout comme ils apparaîtraient en venant de ARGV. Une variante consiste à avoir un fichier de configuration multi-ligne avec un paramètre CLI par ligne. Dans ce cas, vous construisez votre tableau d'options une ligne à la fois en utilisant quelque chose comme File.each_line(configfile) {|x| options_array << x}.

+0

Parfait. Je n'ai pas pensé à modifier ARGV, une solution aussi simple. Merci! –

Questions connexes