У меня была такая же проблема, и я почти сдался, но потом у меня появилась идея:
Если вы записываете свои задачи в Thorfile
с, а не в рубиновые классы, тогда вы можете просто require
в Ruby-файлах, которые содержат подклассы Thor, и они появятся в списке доступных задач при запуске thor -T
.
. Все это управляется классом Thor::Runner
.Если вы посмотрите на это, вы увидите метод #thorfiles
, который отвечает за поиск файлов с именем Thorfile
в текущем рабочем каталоге.
Все, что мне нужно было сделать, чтобы а) разбить мои задачи Thor на несколько файлов, в то время как б) не иметь единственного Thorfile
, это создать локальный подкласс Thor::Runner
, переписать его #thorfile
методс одним, который возвратил мой список приложений для файлов задач Thor, а затем вызвал его метод #start
, и все это заработало:
class MyApp::Runner < ::Thor::Runner
private
def thorfiles(*args)
Dir['thortasks/**/*.rb']
end
end
MyApp::Runner.start
Так что я могу иметь любое количество классов Ruby, определяющих задачи Thor, в thortasks
например,
class MyApp::MyThorNamespace < ::Thor
namespace :mynamespace
# Unless you include the namespace in the task name the -T task list
# will list everything under the top-level namespace
# (which I think is a bug in Thor)
desc "#{namespace}:task", "Does something"
def task
# do something
end
end
Я почти отказался от Тора, пока не понял этого, но не так много библиотек, которые занимаются созданием генераторов, а также созданием задач с пространством имен, поэтому я рад, что нашелрешение.