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}