これを行う別の方法は、register を使用することです。
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 の 2 番目のパラメーターです。これを 1 回実行して、他のサブコマンド thor クラスに SubTask を継承させることもできます。これで次のようになります。
$ foo sub
Tasks:
foo sub help [COMMAND] # Describe subcommands or one specific subcommand
foo sub bar #
それが役立つことを願っています。