2013-09-06 9 views
5

Ja próbuje utworzyć zadanie natarcia, która pobiera wymagane pierwszy argument, a następnie dowolną liczbę dodatkowych argumentów, które chcę wrzucać razem do tablicy:zadaniem Rake w/argumentów ikona

rake course["COURSE NAME", 123, 456, 789] 

I Próbowaliśmy następujących rzeczy, ale args[:numbers] to po prostu ciąg w/123 zamiast wszystkich liczb.

task :course, [:name, *:numbers] => :environment do |t, args| 
    puts args # {:name=>"COURSE NAME", :numbers=>"123"} 
end 
+2

Co powiesz na "kurs rake'u [" NAZWA KURSU ", [123, 456, 789]]"? – screenmutt

+0

To daje mi '{: name =>" NAZWA KURSU ",: numbers =>" [123 "}' co jest naprawdę dziwne. –

+0

Nie ma spacji między argumentami dla zadań, spróbuj tego: 'rake course [" NAZWA KURSU ", 123,456,789]' – MrYoshiji

Odpowiedz

12

Począwszy prowizji 10.1.0 można użyć Rake::TaskArguments#extras:

task :environment 

task :course, [:name] => :environment do |t, args| 
    name = args[:name] 
    numbers = args.extras 
    puts "name = #{name}" 
    puts "numbers = #{numbers.join ','}" 
end 

wyjściowa:

$ rake "course[COURSE NAME, 123, 456, 789]" 
name = COURSE NAME 
numbers = 123,456,789 

Dla prowizji < 10.1.0 można stworzyć dużą listę argumentów sufficienty. Ten hack może zadziałać na 26 numerów:

task :course, [:name, *:a..:z] => :environment do |t, args| 
    name = args[:name] 
    numbers = args.values_at(*:a..:z).compact 
    puts "name = #{name}" 
    puts "numbers = #{numbers.join ','}" 
end 
+0

To nie działa. Wypróbowałem 'rake course [" COURSE NAME ", 123,456,789]' jak również 'rake course [" COURSE NAME ", [123,456,789]]' iw obu przypadkach 'args.extras' jest' nil' –

+0

Ja pracuję dla mnie, Rails 3.2.13 i Ruby 1.9.3 – MrYoshiji

+1

Wygląda na to, że [ta funkcja] (https://github.com/jimweirich/rake/pull/150) została wprowadzona w rake 10.1.0, może musisz zaktualizować – Stefan