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