rails generators generate example ruby rake rake-task

generators - scaffold ruby on rails



¿Cómo declaras una tarea de Rake que depende de una tarea parametrizada? (2)

Args se pasa a través de la pila de llamadas. Solo debe asegurarse de que su tarea de nivel superior capture todos los argumentos que requieren todas las dependencias. En su caso, querrá poner first_name y last_name en la tarea send_letter .

Este es un ejemplo que muestra los argumentos con nombre definidos en otros lugares que fluyen hacia la dependencia (incluso si no están definidos en la dependencia), pero el argumento que no coincide con el nombre del argumento de la tarea de nivel superior es nulo.

desc ''Bar'' task :bar, :nom do |task, args| puts "BAR NOM: #{args[:nom]}" puts "BAR NAME: #{args[:name]}" end desc ''Foo'' task :foo, [:name] => :bar do |task, args| puts "FOO NAME: #{args[:name]}" end

Rastrillo rake foo[baz] yeilds

BAR NOM: BAR NAME: baz FOO NAME: baz

Es interesante notar que el uso de args.with_defaults(nom: ''Jaques'') en la tarea foo no tiene efecto en la tarea dependiente - nom sigue siendo nulo.

Versión de rake, version 10.0.3 : rake, version 10.0.3

Versión de Ruby: ruby 1.9.3p125 (2012-02-16 revision 34643) [x86_64-darwin11.3.0]

He visto ejemplos en los que una tarea tiene parámetros y una tarea de dependencia como:

task :name, [:first_name, :last_name] => [:pre_name] do |t, args| args.with_defaults(:first_name => "John", :last_name => "Dough") puts "First name is #{args.first_name}" puts "Last name is #{args.last_name}" end

¿Cómo pasaría los parámetros a la tarea de nombre si fuera una dependencia de tarea como:

task :sendLetter => :name #do something end


Lo más cerca que probablemente vas a conseguir es

task :sendLetter do task(:name).invoke("first", "last") end

o

task :sendLetter do task(:name).execute(["first", "last"]) end

Puedes hacer algo como

task :sendLetter => task(:name).invoke("first", "last")

pero eso invocará el name independientemente de si solicitas sendLetter o no.

Task#invoke solo llama a la tarea si no se ha llamado y llama primero a cualquier requisito no llamado. Task#execute siempre llama a la tarea pero no llama ningún prerrequisito. Tenga en cuenta que los parámetros no afectan la naturaleza de una sola llamada de la Task#invoke de Task#invoke : si invoca una tarea parametrizada dos veces, solo se ejecutará una vez, ya sea que los parámetros sean diferentes o no.