Cómo escribir rake tasks con argumentos

En proyectos Ruby o Rails, cuando queremos ejecutar tareas en el entorno (no en el software como tal) nos valemos de las rake task. Comandos que permiten recrear archivos, insertar o limpiar archivos y datos.

Ahora, cuando creamos nuestras rake tasks personalizadas es muy usual que sean bastante sencillas y triviales pero qué pasa cuándo necesitan un poco más de personalización, cuándo necesitamos pasar argumentos a estas, ¿es posible hacerlo? Claro que sí.

Una rake task la ejecutamos con el comando rake acompañado del nombre de esta. Ejemplo:

$ rake tmp:clear

Dicha tarea limpiará los archivos en la carpeta tmp/ de un proyecto Ruby on Rails.

Resulta que es sencillo pero es poco intuitivo escribir una rake taks que acepte parámetros. La forma es así:

task :name, [:arg_1, :arg_2] => :environment do |task, args|
  # some code
end

La clave está en el segundo argumento de la función task. El primero es el nombre de la tarea y el segundo es una lista de argumentos.

Nota que aunque sea un solo argumento, hay que enviarlo dentro de un array.

Como la declaración de task es un bloque, los parámetros del bloque son task y args. task es una instancia de Rake::Task y args es una instancia de Rake::TaskArguments. Esto último quiere decir que args puede parecer un hash pero no lo es. Tiene comportamiento similar por lo que uno podría hacer esto:

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

Y funcionará sin problemas.

Sobre Rake::Task y Rake::TaskArguments.

Finalmente, una rake task como la anterior se invoca así:

$ rake name[Francisco,Quintero]

Visto en Stack Overflow.

Autor: cesc1989

Ingeniero de Sistemas que le gusta escribir y compartir sobre recursos que considera útiles, además que le gusta leer manga y ver anime.

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

A %d blogueros les gusta esto: