我刚刚在ruby中编写了我的第一个终端应用程序。我使用OptionParser
来解析选项及其参数。但是我想创建命令。例如:
git add .
在上面一行中,add
是在应用程序之后不能在其他任何地方发生的命令。我如何创建这些。
如果有人能指出我正确的方向,我将不胜感激。但是,请不要参考指挥官等任何宝石。我已经知道了这些。我想了解它是如何完成的。
答案 0 :(得分:2)
OptionParser的parse!
接受一系列参数。默认情况下,它将占用ARGV
,但您可以像这样覆盖此行为:
def build_option_parser(command)
# depending on `command`, build your parser
OptionParser.new do |opt|
# ...
end
end
args = ARGV
command = args.shift # pick and remove the first option, do some validation...
@options = build_option_parser(command).parse!(args) # parse the rest of it
不是使用大型case语句的build_option_parser
方法,而是考虑OO方法:
class AddCommand
attr_reader :options
def initialize(args)
@options = {}
@parser = OptionParser.new #...
@parser.parse(args)
end
end
class MyOptionParser
def initialize(command, args)
@parser = {
'add' => AddCommand,
'...' => DotsCommand
}[command.to_s].new(args)
end
def options
@parser.options
end
end
当然,存在tons of Rubygems(在该列表中有20个),它将解决您的问题。我想提一下Thor的权力,例如rails
命令行工具。
答案 1 :(得分:0)
您可以在调用Array#shift
之前使用OptionParser
检索命令。