ruby终端应用程序中的命令

时间:2013-05-18 15:56:59

标签: ruby

我刚刚在ruby中编写了我的第一个终端应用程序。我使用OptionParser来解析选项及其参数。但是我想创建命令。例如:

git add .

在上面一行中,add是在应用程序之后不能在其他任何地方发生的命令。我如何创建这些。

如果有人能指出我正确的方向,我将不胜感激。但是,请不要参考指挥官等任何宝石。我已经知道了这些。我想了解它是如何完成的。

2 个答案:

答案 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检索命令。