Ответ 1
Другой способ сделать это - использовать регистр:
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 - это единственное отличие от первоначальной реализации баннера. Вы также можете сделать это один раз и наследовать другие субкоманды наследования из SubTask. Теперь вы получаете:
$ foo sub
Tasks:
foo sub help [COMMAND] # Describe subcommands or one specific subcommand
foo sub bar #
Надеюсь, что это поможет.