Как избежать дублирования при настройке свойств задачи в задачах Rake - PullRequest
2 голосов
/ 31 мая 2010

У меня есть куча задач по рейку.

Каждый из них обладает уникальными свойствами ввода / вывода, но большинство свойств, которые я задаю для задач, каждый раз одинаковы. В настоящее время я делаю это с помощью простого повторения, как это:

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

В моем обычном свободном пространстве программирования я ожидал, что смогу разбить набор повторяющихся свойств задачи на функцию многократного использования.

Есть ли для этого аналогия с граблями? Каким-то образом у меня может быть одна функция, в которой общие свойства устанавливаются для любой задачи? Нечто эквивалентное:

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:

Спасибо, Стивен,

Я явно что-то упускаю - у меня есть:

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

Я попытался определить функцию сразу после задачи (в этом файле нет пространства имен: и в конце файла после последней задачи), и я получаю "неопределенный метод" populate_test_task "для main: «Объект» - мне кажется, что он не находит функцию.

Чего мне не хватает?

Ответы [ 3 ]

2 голосов
/ 31 мая 2010

Вы можете вызвать обычные методы, определенные ниже в файле 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 голос
/ 01 июня 2010

Отличная командная работа!

Благодаря обоим, ответ состоял в том, чтобы разбить совокупность свойств задачи на функцию, но определить эту функцию над блоком, использующим ее (по причинам роста проекта).

Как это:

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  
1 голос
/ 31 мая 2010

Извините за путаницу здесь ...

Эта проблема является побочным эффектом того, как Project Sprouts создает задачи Rake. Поскольку некоторые параметры в блоке должны изменить предварительные условия задачи, некоторые из наших задач оценивают связанный с ними блок по мере их определения.

По этой причине ваша функция конфигурации должна быть определена перед задачами, которые ее используют.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...