Можно ли получить список всех доступных задач рейка в пространстве имен? - PullRequest
18 голосов
/ 05 августа 2010

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

Ответы [ 3 ]

17 голосов
/ 06 августа 2010

Я нашел ответ:

tasks = Rake.application.tasks

Это вернет массив объектов Rake :: Task, которые можно проверить.Более подробная информация на http://rake.rubyforge.org/

12 голосов
/ 23 мая 2011

Как вы писали, с помощью 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
1 голос
/ 13 августа 2010

Вы можете использовать команду 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...