Thor:当我定义一个参数时,如何让我的Thor任务显示帮助?

时间:2012-06-14 19:55:34

标签: ruby thor

我正在将一个小项目转换为使用Thor,而且他是一个心不在焉的人,我想使用内置帮助来记录可用的任务。 但是,如果我使用参数定义任务,则任务级帮助将恢复为该类的帮助 - 这意味着不会显示任务描述或预期参数的详细信息。

我希望能够拥有一个可以使用参数而不是参数调用的方法,因此可以像这样使用

$ thor broke:foo hello
in a.thor broke:foo arg1=hello

我把问题归结为以下的thorfile,除了破坏的帮助输出之外,它可以正常工作。我已经删除了任何其他参数,因为它们对问题没有任何影响。 第一个任务ok:foo会正常显示帮助,第二个任务破坏了:foo没什么帮助:

class Ok < Thor
    desc "foo", "ok test2"
    def foo
        puts "in a.thor ok:foo\n"
    end
end
class Broke < Thor
    argument :arg1, :type=>:string, :desc => "arg1"
    desc "foo", "broke test1"
    def foo
        puts "in a.thor broke:foo arg1=#{self.arg1}\n"
    end
end

请求ok:foo任务方法的帮助:

$ thor help ok:foo
    Usage:
      thor ok:foo

    ok test

请求帮助破解:foo任务没那么有用:

$ thor help broke:foo
    Tasks:
      thor broke:foo ARG1          # broke test1
      thor broke:help ARG1 [TASK]  # Describe available tasks or one specific task

如何定义参数并显示正确的任务帮助?

1 个答案:

答案 0 :(得分:0)

你的胸部有一点小错误。

您有参数而不是 method_option

这是正确的版本:

class Ok < Thor
    desc "foo", "ok test2"
    def foo
        puts "in a.thor ok:foo\n"
    end
end
class Broke < Thor
    method_option :arg1, :type=>:string, :desc => "arg1"
    desc "foo", "broke test1"
    def foo
        puts "in a.thor broke:foo arg1=#{self.arg1}\n"
    end
end

Wiki about method_option on github.com