我正在尝试使用Ruby的OptionParser来解析命令行参数。我的一个参数是一个预定义的可接受字符串列表,我将其定义为
opts.on('-p', '--project-name PROJECT', PROJECTS, 'The Project name', "{#{PROJECTS.join ', '}}"){|p| options.project = p}
其中PROJECTS
是预定义的字符串列表(我在Ruby 1.8.7上)。如何告诉OptionsParser应该使用POJECTS列表以不区分大小写的方式匹配参数?我看到类OptionParser :: List可能有一些东西,我只是不确定如何使用它。
答案 0 :(得分:2)
您可以传递Regexp
而不是PROJECTS
数组。最后的i
修饰符使其不区分大小写:
/#{Regexp.union(PROJECTS).source}/i
#=> /foo|bar|baz/i
这是一个完整的工作示例:
require 'optparse'
options = Struct.new(:project).new
PROJECTS = %w{foo bar baz}
ALLOWED_PROJECTS = /#{Regexp.union(PROJECTS).source}/i
OptionParser.new do |opts|
opts.on('-p', '--project-name PROJECT', ALLOWED_PROJECTS, 'The Project name', "{#{PROJECTS.join ', '}}") do |p|
options.project = p
end
end.parse!
p options
用法:
$ ruby foo.rb -p foo
#<struct project="foo">
$ ruby foo.rb -p FOO
#<struct project="FOO">
$ ruby foo.rb -p bar
#<struct project="bar">
$ ruby foo.rb -p bAz
#<struct project="baz">
$ ruby foo.rb -p quux
foo.rb:16:in `<main>': invalid argument: -p quux (OptionParser::InvalidArgument)