2012-11-02 1 views
6

Ich sehe, dass es möglich ist, Argument zu einer Harke Aufgabe zu übergeben:Ist es möglich, Argumente an `Rake Gurke` zu ​​senden, ohne Umgebungsvariablen zu verwenden?

task :task_name, :arg_name do |t, args| 

Was würde ich ist Argument in eine Aufgabe Gurke Harke passieren zu tun:

Cucumber::Rake::Task.new({:tags => 'db:test:prepare'}) do |t, args| 
    t.cucumber_opts = ['--tags', #args?] 
end 

Ist diese Art von Ding möglich? So könnte ich folgendes machen:

rake cucumber:tags['tag1', 'tag2', ...] 

Und es haben nur diese Tags laufen. Die meisten Quellen sagen, eine Umgebungsvariable zu verwenden, die ich gemacht habe, aber ich würde es vorziehen, die Argumente nur "richtig" zu liefern.

+1

dies ist ein Duplikat: http://stackoverflow.com/questions/825748/how-do-i-pass-command- line-arguments-to-a-rake-task –

+2

Nein, ist es nicht. Diese Frage ist spezifisch für Gurke, Sie können keine Argumente für Gurken-Rake-Aufgaben hinzufügen, wie Sie in der Antwort auf diese Frage finden können. –

+0

Verstanden. Wäre es möglich, eigene Rechenaufgaben zu schreiben, die die Gurken verpacken? –

Antwort

0

Eine Möglichkeit, dies zu tun, wäre durch Umgebungsvariablen wie folgt: rake cucumber:tags TAGS=tag1,tag2 und dann in Ihrer Rake-Aufgabe nur parsen ARGV.

tags = ARGV[1].gsub(/.+=/, '') 

Cucumber::Rake::Task.new({:tags => 'db:test:prepare'}) do |t, args| 
    t.cucumber_opts = ['--tags', tags] 
end 

Sie können auch flexibler machen es wie diese

tags_index = ARGV.index {|a| a.start_with?('TAGS') } 
tags = ARGV[tags_index].gsub(/.+=/, '') 

aber wahrscheinlich würden Sie besser sein, mit so etwas wie OptionParser.

5

Sie können es mit etwas zu tun, wie diese an die Arbeit:

task :task_name, :arg1 do |t, args| 
    Cucumber::Rake::Task.new(:run) do |t| 
    t.cucumber_opts = "--format pretty --tags @#{args[:arg1]}" 
    end 
    Rake::Task[:run].invoke() 
end