rails create ruby rake

rails - create rake task ruby



Haciendo preguntas en tareas de comisiĆ³n (4)

Tengo una tarea de rake que se llama desde otra tarea de rake.

En esta tarea de rake necesito pedirle al usuario que ingrese texto, y luego, dependiendo de la respuesta, continuar o evitar que todo continúe (incluida la tarea de rake).

¿Cómo puedo hacer esto?


Aunque la pregunta es bastante antigua, esta podría ser una alternativa interesante (y quizás poco conocida) para que un usuario pueda utilizar una gema externa:

require ''rubygems/user_interaction'' include Gem::UserInteraction task :input_test do input = ask("What is the airspeed velocity of a swallow?") raise "bah, humbug!" unless input == "an african or european swallow?" end task :blah_blah => :input_test do end


La gema HighLine hace fácil.

Para una simple pregunta de sí o no, puedes usar el agree :

require "highline/import" task :agree do if agree("Shall we continue? ( yes or no )") puts "Ok, lets go" else puts "Exiting" end end

Si quieres hacer algo más complejo utiliza ask :

require "highline/import" task :ask do answer = ask("Go left or right?") { |q| q.default = "left" q.validate = /^(left|right)$/i } if answer.match(/^right$/i) puts "Going to the right" else puts "Going to the left" end end

Aquí está la descripción de la gema:

Un objeto HighLine es un shell "orientado a líneas de alto nivel" sobre una entrada y una secuencia de salida. HighLine simplifica la interacción de la consola común, reemplazando eficazmente a pone () y obtiene (). El código de usuario simplemente puede especificar la pregunta que se debe hacer y cualquier detalle sobre la interacción del usuario, luego dejar el resto del trabajo a HighLine. Cuando HighLine.ask () regrese, tendrá la respuesta que solicitó, incluso si HighLine tuvo que preguntar muchas veces, validar resultados, realizar una verificación de rango, convertir tipos, etc.

Para más información puedes leer los documentos .


task :ask_question do puts "Do you want to go through with the task(Y/N)?" get_input end task :continue do puts "Task starting..." # the task is executed here end def get_input STDOUT.flush input = STDIN.gets.chomp case input.upcase when "Y" puts "going through with the task.." Rake::Task[''continue''].invoke when "N" puts "aborting the task.." else puts "Please enter Y or N" get_input end end


task :input_test do input = '''' STDOUT.puts "What is the airspeed velocity of a swallow?" input = STDIN.gets.chomp raise "bah, humbug!" unless input == "an african or european swallow?" end task :blah_blah => :input_test do end

creo que deberia funcionar