Можно ли сделать интерактивное задание Rake? - PullRequest
36 голосов
/ 25 марта 2011

Я хочу запустить задачу Rake, которая запрашивает ввод у пользователя.

Я знаю, что могу вводить данные в командной строке, но я хочу спросить пользователя, если они уверены , хотят ли они выполнить определенное действие, если они неправильно набрали один иззначения, переданные в задачу Rake.

Ответы [ 3 ]

78 голосов
/ 28 марта 2011

Как-то так может работать

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

Повторное включение и вызов задачи из Как запускать Rake-задачи из Rake-задач?

5 голосов
/ 01 августа 2017

Вот пример без использования другой задачи.

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
5 голосов
/ 05 декабря 2014

Удобная функция для пользовательского ввода заключается в том, чтобы поместить его в цикл 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...