另一種方法是使用寄存器:
class CLI < Thor
register(SubTask, 'sub', 'sub <command>', 'Description.')
end
class SubTask < Thor
desc "bar", "..."
def bar()
# ...
end
end
CLI.start
現在 - 假設你的可執行文件名爲foo - 您可以撥打:
$ foo sub bar
在當前版本的雷神(0.15.0.rc2)有雖然是錯誤,這會導致幫助文本跳過的命名空間子命令:
$ foo sub
Tasks:
foo help [COMMAND] # Describe subcommands or one specific subcommand
foo bar #
您可以通過覆蓋self.banner並顯式設置命名空間來修復該問題。
class SubTask < Thor
namespace :sub
def bar ...
def self.banner(task, namespace = true, subcommand = false)
"#{basename} #{task.formatted_usage(self, true, subcommand)}"
end
end
formatted_usage的第二個參數是與原始橫幅實現的唯一區別。您也可以這樣做一次,並讓其他子命令thor類從SubTask繼承。現在你得到:
$ foo sub
Tasks:
foo sub help [COMMAND] # Describe subcommands or one specific subcommand
foo sub bar #
希望有所幫助。
聖潔的廢話!你以前8個小時在哪裏?感謝您的優雅解決方案。 – elmt 2011-12-23 08:16:29
這並不適用於我(0.18.1版),但在https://github.com/wycats/thor/issues/261#issuecomment-16880836上所描述的類似工作確實奏效 – 2013-05-09 18:44:53