- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
对于雷神,可以使用 method_option
为特定任务设置选项。要为一类中的所有任务设置选项,可以使用 class_option
。但是,如果想要一个类的一些任务而不是全部任务来共享选项呢?
在下面的 task1
和 task2
中共享选项,但它们不共享所有选项,并且它们不与 task3
共享任何选项。
require 'thor'
class Cli < Thor
desc 'task1', 'Task 1'
method_option :type, :type => :string, :required => true, :default => 'foo'
def task1
end
desc 'task2', 'Task 2'
method_option :type, :type => :string, :required => true, :default => 'foo'
method_option :value, :type => :numeric
def task2
end
desc 'task3', 'Task 3'
method_option :verbose, :type => :boolean, :aliases => '-v'
def task3
end
end
Cli.start(ARGV)
对于 task1
和 task2
就是违反了the DRY principle .有没有一种惯用的方法来处理这个问题?
最佳答案
method_option
在 thor.rb 中定义根据文档,它采用以下参数:
name<Symbol>::
参数的名称。options<Hash>::
如下所述。了解这一点后,您可以将参数存储到 method_option
在数组中和 expand that array into separate parameters作为method_option
被称为。
require 'thor'
class Cli < Thor
shared_options = [:type, {:type => :string, :required => true, :default => 'foo'}]
desc 'task1', 'Task 1'
method_option *shared_options
def task1
end
desc 'task2', 'Task 2'
method_option *shared_options
method_option :value, :type => :numeric
def task2
end
desc 'task3', 'Task 3'
method_option :verbose, :type => :boolean, :aliases => '-v'
def task3
end
end
Cli.start(ARGV)
我不知道这是否符合习惯,而且我认为它不是那么优雅。不过,这总比违反 DRY 原则要好。
关于ruby - 如何让两个雷神任务共享选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14346285/
我正在研究应该用作 CLI 的 Ruby gem效用。 我决定使用 Thor ,它由 rails 命令使用并且似乎非常灵活(关于与 rake 的区别:link)。 问题是我找不到如何处理输入错误。例如
我正在制作一个生成新 Rails 应用程序的自定义生成器,我是这样做的 require 'thor' require 'rails/generators/rails/app/app_generator
thor在打印其帮助输出时,gem 似乎总是按字母顺序对定义的命令进行排序。示例: #!/usr/bin/env ruby require "thor" class MyCLI 方法,我决定更改 he
我正在将一个小项目转换为使用 Thor,但由于心不在焉,我想使用内置帮助记录可用的任务。但是,如果我使用参数定义任务,任务级帮助将恢复为类的帮助 - 这意味着不会显示任务描述或预期参数的详细信息。 我
我是一名优秀的程序员,十分优秀!