serie juego game americana rake

juego - ¿Es posible hacer una tarea de Rake interactiva?



rake serie (3)

Quiero ejecutar una tarea de Rake que solicite la entrada del usuario.

Sé que puedo suministrar entradas en la línea de comandos, pero quiero preguntarle al usuario si está seguro de que desea proceder con una acción en particular en caso de que hayan escrito mal alguno de los valores proporcionados a la tarea de Rake.


Algo como esto podría funcionar

task :action do STDOUT.puts "I''m acting!" end task :check do STDOUT.puts "Are you sure? (y/n)" input = STDIN.gets.strip if input == ''y'' Rake::Task["action"].reenable Rake::Task["action"].invoke else STDOUT.puts "So sorry for the confusion" end end

Tarea reaplicar e invocar de Cómo ejecutar las tareas de Rake desde dentro de las tareas de Rake?


Aquí hay un ejemplo sin usar otra tarea.

task :solve_earth_problems => :environment do STDOUT.puts "This is risky. Are you sure? (y/n)" begin input = STDIN.gets.strip.downcase end until %w(y n).include?(input) if input != ''y'' STDOUT.puts "So sorry for the confusion" return end # user accepted, carry on Humanity.wipe_out! end


Una característica útil para la entrada del usuario es ponerlo en un bucle do..while , para continuar solo cuando un usuario haya suministrado una entrada válida. Ruby no tiene explícitamente esta construcción, pero puedes lograr lo mismo con begin y until . Eso se sumaría a la respuesta aceptada de la siguiente manera:

task :action do STDOUT.puts "I''m acting!" end task :check do # Loop until the user supplies a valid option begin STDOUT.puts "Are you sure? (y/n)" input = STDIN.gets.strip.downcase end until %w(y n).include?(input) if input == ''y'' Rake::Task["action"].reenable Rake::Task["action"].invoke else # We know at this point that they''ve explicitly said no, # rather than fumble the keyboard STDOUT.puts "So sorry for the confusion" end end