Условная задача rake - обработка зависимостей - PullRequest
0 голосов
/ 25 сентября 2018

Я бы хотел, чтобы rake выбирал между двумя задачами, в зависимости от аргумента командной строки.

Файл rakefile "characters.rake" будет выглядеть примерно так:

#usage: rake -f characters.rake characters=letters_or_numbers --trace

ENV["characters"] ? @characters = ENV["characters"] : nil
LETTERS=["A", "B", "C"]
NUMBERS=["1", "2", "3"]

directory "characters"

desc "Create letter or number files"
task :create_character_files => ["characters"] do

    my_ch="#{@characters}"
    case my_ch

    when "letters"  
        LETTERS.each do |letter|
            file "#{letter}.txt" do
                sh "echo #{letter} > characters/#{letter}.txt"
            end
        end

    when "numbers"
        NUMBERS.each do |number|
            file "#{number}.txt" do
                sh "echo #{number} > characters/#{number}.txt"
            end
        end

    else
        puts "Neither letters nor numbers"

    end
end

desc "default"
task :default => :create_character_files

Идея заключалась бы в том, что если бы я назвал его с помощью: rake -f characters.rake characters=numbers --trace

, я бы получил три файла, созданные в каталоге с именами "символов" и именованными 1.txt, 2.txt и 3.txt соответственно.

characters/1.txt
1

characters/2.txt
2

characters/3.txt
3

Точно так же, если бы я запустил rake -f characters.rake characters=letters --trace, я бы получил три файла:

characters/A.txt
A

characters/B.txt
B

characters/C.txt
C

Обычно, когда у меня есть отдельные задачи, они бы выглядели так:

ENV["characters"] ? @characters = ENV["characters"] : nil
LETTERS=["A", "B", "C"]

directory "characters"

LETTERS.each do |letter|
    file "#{letter}.txt => ["characters"] do
        sh "echo #{letter} > characters/#{letter}.txt"
    end
end

desc "Create letter files"
task :create_character_files => LETTERS.map{|x| "characters/" + x + ".txt"} do
    puts "letter files created"
end

desc "default"
task :default => :create_character_files

Это будет работать.

Однако в моем более сложном «случае» мой сценарий либо не работает, либо ничего не делает, независимо от того, куда я добавляю зависимости самих файлов.

Любая помощь приветствуется.

...