Pregunta ¿Es posible obtener una lista de todas las tareas de rake disponibles en un espacio de nombres?


Es posible desde dentro de una tarea de rake para obtener una lista de tareas en un espacio de nombres? Una especie de 'rake-db' programático?


18
2017-08-05 13:33


origen


Respuestas:


He encontrado la respuesta:

tasks = Rake.application.tasks

Esto devolverá una matriz de objetos Rake :: Task que se pueden examinar. Más detalles en http://rake.rubyforge.org/


16
2017-08-06 09:02



Cuando escribiste, con Rake.application.tasks obtienes todas las tareas.

Pero dentro del espacio de nombres, puede seleccionar solo las tareas del espacio de nombres (task mytest: tasklist)

Y puede restringir las tareas a un espacio de nombre (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

11
2018-05-23 14:41



Puede usar el comando grep como este

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

1
2017-08-13 02:21