避免在Rake任务中设置任务属性的重复

时间:2010-05-31 17:38:32

标签: ruby rake

我有一堆佣金建设任务。

它们各自具有唯一的输入/输出属性,但我在任务上设置的大多数属性每次都是相同的。目前我正在通过简单的重复这样做:

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

在我通常的编程顶空中,我希望能够将重复任务属性的数量分解为可重用的函数。

这是否有一个rake类比?某种方式,我可以有一个功能,在任何任务上设置共享属性?相当于:

的东西
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

感谢。

======

回复SR:

谢谢Stephen,

我显然错过了一些东西 - 我有:

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

我已经尝试在任务之后立即定义函数(没有命名空间:在这个文件中),并且在最后一个任务之后的文件末尾,我得到了main的“未定义方法`populate_test_task”:对象“ - 在我看来,它似乎没有找到功能。

我错过了什么?

3 个答案:

答案 0 :(得分:2)

您可以调用rake文件下方定义的常规方法,例如

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

然后用rake build调用它:abc和rake build:def

SR

答案 1 :(得分:1)

对这里的困惑感到抱歉....

此问题是Project Sprouts如何创建Rake任务的副作用。由于块中的某些参数需要修改任务的先决条件,因此我们的一些任务会在定义相关块时对其进行评估。

出于这个原因,你的配置功能必须在之前定义使用它的任务。

答案 2 :(得分:1)

很棒的团队合作!

多亏了两者,回答是将任务属性的数量分解为一个函数,但是使用它来定义上面的 块(出于项目萌芽的原因)。

像这样:

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