2013-09-06 6 views
5

Ich versuche eine Rake Aufgabe zu schaffen, die ein erforderliches erstes Argument nimmt, und dann ein beliebige Anzahl von zusätzlichen Argumenten, die ich zusammen in einen Array Klumpen werden soll:Rake Aufgabe w/Splat Argumente

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

I habe folgendes versucht aber args[:numbers] ist einfach eine string w/123 statt aller nummern.

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

Wie wäre es 'Rake Kurs [" KURSNAME ", [123, 456, 789]]'? – screenmutt

+0

Das gibt mir '{: name =>" KURSNAME ",: numbers =>" [123 "]' was wirklich bizarr ist. –

+0

Zwischen den Argumenten für die Aufgaben sind keine Leerzeichen zulässig. Versuchen Sie Folgendes: 'rake course [" KURSNAME ", 123,456,789]' – MrYoshiji

Antwort

12

Beginnend mit Rechen 10.1.0 Sie Rake::TaskArguments#extras verwenden können:

task :environment 

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

Ausgang:

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

Für Rake < 10.1.0 Sie eine sufficienty große Argumentliste erstellen konnte. Dieser Hack würde für bis zu 26 Nummern funktionieren:

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

Dies funktioniert nicht. Ich habe 'Rake-Kurs [" KURSNAME ", 123,456,789]' sowie 'Rake-Kurs [" KURSNAME ", [123,456,789]]' versucht und in beiden Fällen ist "args.extras" "Null" –

+0

Ich arbeite für mich, Rails 3.2.13 & Ruby 1.9.3 – MrYoshiji

+1

Scheint wie [dieses Feature] (https://github.com/jimweirich/rake/pull/150) in Rake 10.1.0 eingeführt wurde, vielleicht müssen Sie – Stefan