2010-08-05 8 views

Antwort

16

Ich habe die Antwort herausgefunden:

 
tasks = Rake.application.tasks 

Dies wird eine Reihe von Rake :: Task-Objekte zurück, die untersucht werden können. Weitere Details unter http://rake.rubyforge.org/

+0

Soweit ich, gibt es keinen Helfer innerhalb eines Bereichs für die Suche nach Dinge gesehen haben, aber ich denke, dass dies einfach genug sein sollte: Rake.application.tasks.reject {| Aufgabe | task.scope! = [: Ihr,: scope]} – phoet

+1

In meinem Fall (Rails) war es auch notwendig, 'AppName :: Application.load_tasks' zu verwenden, um' Rake.application.tasks' zu füllen. – joshfindit

1

können Sie den Befehl grep verwenden wie diese

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 
+0

ist das wirklich das einzige mögliche Lösung, Aufgaben in einem Rahmen zu finden ?! – phoet

+0

Es ist das erste, was mir in den Sinn kam. – garno

+0

ausgezeichnetes Beispiel, danke –

11

Wie Sie schrieben, mit Rake.application.tasks Sie alle Aufgaben bekommen.

Aber innerhalb des Namespace, können Sie nur die Aufgaben des Namensraum (Aufgabe mytest: Taskliste) wählen

Und Sie können die Aufgaben zu einem Namensraum (Task tasklist_mytest) beschränken.

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 
Verwandte Themen