Скажем, у меня есть цель, кто должен скомпилировать некоторые файлы. Та цель имеет другую цель как предпосылку, та, которая получает файлы. Скажем, это:
task :obtain do
# obtain files from somewhere
end
task :compile => :obtain do
# do compilation
end
Скажем, то, что :obtain
цель делает не, всегда помещает файлы в ту же папку. Как я передал бы :compile
путь это :obtain
найденный? Переменные среды?
Использование ENV['something'], на мой взгляд, предпочтительнее, потому что если вы сделаете это таким образом (в отличие от переменных $global или @instance), вы можете рассматривать их как аргументы задачи, и легко использовать подзадачу из командной строки.
С другой стороны, если вы храните свой код в отдельных классах / модулях / методах, вам даже не придется иметь дело с такого рода хаками + ваш код будет более тестируемым.
Один из способов - хранить его в глобальной переменной:
task :obtain do
$obtained_dir = "/tmp/obtained"
end
task :compile => :obtain do
puts "compiling files in #{$obtained_dir}"
end
Переменные экземпляра (например, @obtained_dir
) также должны работать.
Другим способом было бы вытащить код "get" в метод, как показано ниже:
task :obtain do
obtain_files
end
task :compile do
obtained_dir = obtain_files
puts "compiling files in #{obtained_dir}"
end
def obtain_files
#obtain files from somewhere
"/tmp/obtained_files"
end