2010-05-31 6 views
2

J'ai plusieurs tâches de construction de râteau.Éviter la duplication lors de la définition des propriétés de la tâche dans Rake tasks

Ils ont chacun des propriétés d'entrée/sortie uniques, mais la majorité des propriétés que je définis sur les tâches sont les mêmes à chaque fois. Actuellement, je fais ce que par simple répétition comme ceci:

task :buildThisModule => "bin/modules/thisModule.swf" 

mxmlc "bin/modules/thisModule.swf" do |t| 
    t.input = "src/project/modules/ThisModule.as" 
    t.prop1 = value1 
    t.prop2 = value2 ... (And many more property=value sets that are the same in each task) 
end 


task :buildThatModule => "bin/modules/thatModule.swf" 

mxmlc "bin/modules/thatModule.swf" do |t| 
    t.input = "src/project/modules/ThatModule.as" 
    t.prop1 = value1 
    t.prop2 = value2 ... (And many more property=value sets that are the same in each task) 
end 

Dans mon habitude de programmation headspace j'attendre de pouvoir sortir la population des propriétés de tâche récurrente à une fonction réutilisable.

Existe-t-il une analogie de râteau pour cela? D'une certaine manière je peux avoir une seule fonction où les propriétés partagées sont définies sur n'importe quelle tâche? Quelque chose d'équivalent à:

task :buildThisModule => "bin/modules/thisModule.swf" 

mxmlc "bin/modules/thisModule.swf" do |t| 
    addCommonTaskParameters(t) 
    t.input = "src/project/modules/ThisModule.as" 
end 


task :buildThatModule => "bin/modules/thatModule.swf" 

mxmlc "bin/modules/thatModule.swf" do |t| 
    addCommonTaskParameters(t) 
    t.input = "src/project/modules/ThatModule.as" 
end 

Merci.

======

En réponse à SR:

Merci Stephen,

Il me manque évidemment quelque chose - j'ai:

desc 'Compile run the test harness' 
unit :test do |t| 
    populate_test_task(t) 
end 

def populate_test_task(t) 
    t.source_path << "support" 
    t.prepended_args  = '+configname=air -define+=CONFIG::LocalDebug,true' 
end 

I J'ai essayé de définir la fonction immédiatement après la tâche (il n'y a pas d'espace de nommage: dans ce fichier) et juste à la fin du fichier après la dernière tâche, et j'obtiens "la méthode non définie` populate_test_task 'pour m ain: Object "- ce qui me semble ne pas trouver la fonction.

Qu'est-ce qui me manque?

Répondre

2

Vous pouvez appeler des méthodes régulières définies plus bas dans le fichier râteau, par ex.

 
namespace :build do 

    desc 'builds ABC module' 
    task :abc do 
     build_mod('abc') 
    end 

    desc 'builds DEF module' 
    taks :def do 
     build_mod('def') 
    end 
end 

def build_mod(module_name) 
    # stuff to build the module 
end 

puis appelez avec râteau build: abc et râteau construction: def

sr

+0

Merci Stephen, Je suis évidemment manque quelque chose - j'ai: desc 'Compile exécuter le faisceau de test' unité : essai do | t | populate_test_task (t) fin def populate_test_task (t) t.source_path << "support" t.prepended_args = '+ configname = -define air + = :: LocalDebug CONFIG, true' fin J'ai essayé de définir la fonction immédiatement après la tâche (il n'y a pas d'espace de noms: dans ce fichier) et juste à la fin du fichier après la dernière tâche, et je reçois "méthode non définie' populate_test_task 'pour main: Objet "- qui semble moi comme ça ne trouve pas la fonction. Qu'est-ce qui me manque? – Stray

+0

Ug. Le formatage des commentaires est si ennuyeux. Ajouté au bas de mon Q à la place. – Stray

+0

Hi Stray, je ne suis pas familier avec l'unité: test do | t | ligne - d'où est-ce? – stephenr

1

Désolé pour la confusion ....

Ce problème est un effet secondaire de la façon dont Project Sprouts crée des tâches Rake. Étant donné que certains paramètres du bloc doivent modifier les conditions préalables de la tâche, certaines de nos tâches évaluent leur bloc associé au moment où elles sont définies.

C'est pour cette raison que votre fonction de configuration doit être définie avant les tâches qui l'utilisent.

1

Un travail d'équipe impressionnant! Merci à tous les deux, la réponse a été de répartir la population des propriétés de la tâche à une fonction, mais de définir cette fonction au-dessus de le bloc l'utilisant (pour des raisons de germination de projet).

Comme ceci:

def populate_test_task(t) 
    t.source_path << "support" 
    t.prepended_args  = '+configname=air -define+=CONFIG::LocalDebug,true' 
end 

desc 'Compile run the test harness' 
unit :test do |t| 
    populate_test_task(t) 
end 
Questions connexes