Удобная функция для пользовательского ввода заключается в том, чтобы поместить его в цикл do..while
, чтобы продолжить, только когда пользователь предоставил действительный ввод. Ruby явно не имеет этой конструкции, но вы можете добиться того же с помощью begin
и until
. Это добавило бы к принятому ответу следующее:
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