Una característica muy útil para la entrada del usuario es ponerlo en un bucle do..while
, sólo a seguir cuando un usuario ha suministrado válida entrada. Ruby no tiene explícitamente esta construcción, pero puede 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
Busque en lugar de tareas interactivas [Thor] (https://github.com/wycats/thor). Es muy superior a Rake, y viene con Rails, por lo que ya lo tienes sin instalar nada. – meagar
@meagar acaba de toparse con esto hoy y estoy atascado, ¿alguna vez te diste cuenta? Estoy en una Mac con zsh. . . –
Acabo de descifrarlo, aparentemente estaba relacionado con el complemento Rails zsh. Cuando eliminé ese complemento, reinicié zsh y luego lo re-agregué, el problema desapareció. . . –