Ruby: парсер конфигурационных файлов в сочетании с OptionParser - PullRequest
2 голосов
/ 07 декабря 2010

У меня есть скрипт, использующий OptionParser, и я хочу добавить файл конфигурации для программы, который будет иметь формат option = value и # comments. Есть ли способ заставить файлы разбора OptionParser или какой-либо класс использовать правила и ключи OptionParser для файлов конфигурации?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 28 января 2011

Все еще знакомлюсь с ruby, но мне пришлось настроить options.merge (чтобы использовать options.merge!):

options.merge!(Hash[YAML::load(open(path)).map { |k, v| [k.to_sym, v] }])

чтобы это сработало для меня, это отличный материал, определенно ценю ответы.

2 голосов
/ 07 декабря 2010

AFAIK нет встроенной поддержки того, что вы просите, но это понятно, потому что было бы так много способов сделать это. Я бы использовал хэш default_options + файл конфигурации YAML:

default_options = {
  :name => nil,
  :verbose => false,
}

options = default_options
OptionParser.new do |opts|
  opts.banner = "Usage: example.rb [options]"
  opts.on("-v", "--verbose", "Run verbosely") do
    options[:verbose] = true
  end
  opts.on("-n", "--name NAME", "Set name") do |name|
    options[:name] = name
  end
  opts.on("-f", "--configfile PATH", String, "Set config file") do |path|
    options.merge!(Hash[YAML::load(open(path)).map { |k, v| [k.to_sym, v] }])
  end
end.parse!
p options

Пример конфигурации YAML:

# config.yml
verbose: true
name: name_fromconf

И это результат (пример с переопределением):

$ ruby example.rb -f config.yml -n "hello"
{:name=>"hello", :verbose=>true}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...