Настройка приложения Ruby CLI / управление аргументами - PullRequest
1 голос
/ 19 августа 2010

Я сейчас работаю над CLI-приложением в Ruby, я использую Trollop (http://trollop.rubyforge.org/) для работы с аргументами cli.

Я также хотел бы реализовать возможность хранения необходимых параметров в ~ / .mycfg, а также в cwd / .mycfg, последний имеет приоритет.

Я пытаюсь реализовать поведение:

Если .mycfg существует в текущем рабочем каталоге, загрузите параметры по умолчанию оттуда, в противном случае, если он существует в домашнем каталоге пользователя, загрузите параметры оттуда.

Затем я переопределю эти опции, если они также передаются в качестве аргументов.

Вопрос в том, в каком формате должен быть файл конфигурации? Я думал о YAML, но как мне объединить массив, который Trollop генерирует для параметров с YAML, или наоборот?

1 Ответ

2 голосов
/ 19 августа 2010

Одна простая вещь, которую вы можете попробовать, это изменить ARGV до того, как Trollop обработает его. Сначала прочитайте ваш конфигурационный файл и преобразуйте хранящиеся там данные в массив эквивалентных параметров командной строки. Теперь добавьте к этому массиву ARGV и , затем освободите Trollop. Таким образом, Trollop проанализирует все ваши аргументы (независимо от того, пришли они из файла конфигурации или из CLI). Поскольку параметры вашего конфигурационного файла теперь перечислены перед параметрами CLI, любая опция CLI переопределяет соответствующую опцию конфигурационного файла (поскольку более поздние опции переопределяют более ранние опции).

Ваш файл конфигурации может быть в любом формате, который вы хотите использовать, но иногда самая простая форма может быть самой простой. Попробуйте использовать простой текстовый формат, в котором содержимое файла конфигурации - это просто точные параметры, которые вы хотите передать в свой скрипт. То есть содержимое файла написано так, что вызывается:

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

будет работать как положено. Хранение параметров в этом формате позволяет легко их редактировать и обрабатывать. Просто прочитайте в файле (должна быть одна строка) и вызовите String.split(' '), чтобы разделить параметры в массив, точно так же, как они будут отображаться при поступлении из ARGV. Вариант состоит в том, чтобы иметь многострочный конфигурационный файл с одним параметром CLI на строку. В этом случае вы должны создать свой массив опций по одной строке за раз, используя что-то вроде File.each_line(configfile) {|x| options_array << x}.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...