Thor を使用したネストされたサブコマンドの作成
概要
次のような形式のコマンドを含む CLI ツールを作成したいと考えています。
clitool ジョブは some-job –arg1 value –arg2 another_value を実行します
Thor 内にサブコマンドのサブコマンドを含めることはできますか?また、clitool ジョブの実行サブコマンドのクラスで定義した class_options を、実行中の他のサブコマンド用に保存したいと考えています。
解決策
小さなバグがありますが、サブコマンドのサブコマンドを正常に使用できました。サブコマンドの class_options を保存しようとしたことがないので、それに対する答えがありません。
ネストされたサブコマンドの場合、次のように機能します。
class Execute < Thor
desc 'some_job', 'Execute something'
option :arg1, type: :string, desc: 'First option'
option :arg2, type: :string, desc: 'Second option'
def some_job
puts "Executing some_job:"
puts " --arg1 = #{options[:arg1]}"
puts " --arg2 = #{options[:arg2]}"
end
end # class Execute
class Jobs < Thor
# Other task definitions
desc 'execute', 'Execute jobs'
subcommand 'execute', Execute
end # class Jobs
class CliTool < Thor
# Other task definitions
desc 'jobs', 'Do stuff with jobs'
subcommand 'jobs', Jobs
end
CliTool.start
これはあなたが望むことを行うようです:
$ clitool jobs execute some-job --arg1 value --arg2 another_value
Executing some_job:
--arg1 = value
--arg2 = another_value
$
バグがあるようです。サブコマンドのサブコマンドのヘルプ テキストが正しく機能しません。
$ clitool help
Commands:
clitool help [COMMAND] # Describe subcommands or one specific subcommand
clitool jobs # Do stuff with jobs
$ clitool jobs help
Commands:
clitool jobs execute # Execute jobs
clitool jobs help [COMMAND] # Describe subcommands or one specific subcommand
$ clitool jobs help execute
Commands:
clitool execute help [COMMAND] # Describe subcommands or one specific subcommand
clitool execute some_job # Execute something
$
最後のヘルプ テキストには「clitool jobs run some_job…」と表示されるはずですが、プレフィックスのjobsは省略されます。もしかしたら、それを修正する方法を教えてくれる専門家がいるかもしれません。