Подтвердить что ты не робот

Можно ли получить список всех доступных задач рейка в пространстве имен?

Возможно ли из задачи грабли получить список задач в пространстве имен? Какой-то программный "rake -T db"?

4b9b3361

Ответ 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