Возможно ли из задачи грабли получить список задач в пространстве имен? Какой-то программный "rake -T db"?
Можно ли получить список всех доступных задач рейка в пространстве имен?
Ответ 1
Я выяснил ответ:
tasks = Rake.application.tasks
Это вернет массив объектов Rake:: Task, которые можно проверить. Более подробная информация на http://rake.rubyforge.org/
Ответ 2
Как вы писали, с помощью Rake.application.tasks вы получаете все задачи.
Но внутри пространства имен вы можете выбрать только задачи пространства имен (task mytest: tasklist)
И вы можете ограничить задачи пространством имен (task tasklist_mytest).
require 'rake'
namespace :mytest do |ns|
task :foo do |t|
puts "You called task #{t}"
end
task :bar do |t|
puts "You called task #{t}"
end
desc 'Get tasks inside actual namespace'
task :tasklist do
puts 'All tasks of "mytest":'
puts ns.tasks #ns is defined as block-argument
end
end
desc 'Get all tasks'
task :tasklist do
puts 'All tasks:'
puts Rake.application.tasks
end
desc 'Get tasks outside the namespace'
task :tasklist_mytest do
puts 'All tasks of "mytest":'
Rake.application.in_namespace(:mytest){|x|
puts x.tasks
}
end
if $0 == __FILE__
Rake.application['tasklist'].invoke() #all tasks
Rake.application['mytest:tasklist'].invoke() #tasks of mytest
Rake.application['tasklist_mytest'].invoke() #tasks of mytest
end
Ответ 3
Вы можете использовать команду grep, подобную этой
desc 'Test'
task :test do
# You can change db: by any other namespaces
result = %x[rake -T | sed -n '/db:/{/grep/!p;}' | awk '{print$2}']
result.each_line do |t|
puts t # Where t is your task name
end
end