Ruby:配置文件解析器与OptionParser结合使用

时间:2010-12-07 10:18:13

标签: ruby parsing configuration

我有一个使用OptionParser的脚本,我想为程序添加配置文件,该文件将具有option = value格式和# comments。有没有办法让OptionParser解析文件或某些类能够使用OptionParser规则和开关来配置文件?

谢谢。

2 个答案:

答案 0 :(得分:2)

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}

答案 1 :(得分:2)

仍熟悉ruby,但我不得不调整options.merge(使用options.merge!):

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

让这个对我有用,这是很棒的东西,绝对欣赏答案。