Подтвердить что ты не робот

Задавать вопросы по рейк-задачам

У меня есть задача rake, вызываемая из другой задачи rake.

В этой задаче rake мне нужно попросить пользователя ввести какой-либо текст, а затем, в зависимости от ответа, либо продолжить, либо остановить все от продолжения (включая задачу вызова rake).

Как я могу это сделать?

4b9b3361

Ответ 1

task :input_test do
  input = ''
  STDOUT.puts "What is the airspeed velocity of a swallow?"
  input = STDIN.gets.chomp
  raise "bah, humbug!" unless input == "an african or european swallow?"
end
task :blah_blah => :input_test do 
end

Я думаю, что это должно работать

Ответ 2

task :ask_question do
  puts "Do you want to go through with the task(Y/N)?"
  get_input
end

task :continue do
  puts "Task starting..."
  # the task is executed here
end

def get_input
  STDOUT.flush
  input = STDIN.gets.chomp
  case input.upcase
  when "Y"
    puts "going through with the task.."
    Rake::Task['continue'].invoke
  when "N"
    puts "aborting the task.."
  else
    puts "Please enter Y or N"
    get_input
  end
end 

Ответ 3

HighLine драгоценный камень делает это легко.

Для простого вопроса "да" или "нет" вы можете использовать agree:

require "highline/import"
task :agree do
  if agree("Shall we continue? ( yes or no )")
    puts "Ok, lets go"
  else
    puts "Exiting"
  end
end

Если вы хотите сделать что-то более сложное, используйте ask:

require "highline/import"
task :ask do
  answer = ask("Go left or right?") { |q|
    q.default   = "left"
    q.validate  = /^(left|right)$/i
  }
  if answer.match(/^right$/i)
    puts "Going to the right"
  else
    puts "Going to the left"
  end
end

Здесь описание драгоценного камня:

Объект HighLine - это "высокоуровневая линейная ориентированная" оболочка поверх ввода и выходной поток. HighLine упрощает общее взаимодействие консоли, эффективно заменяя puts() и gets(). Пользовательский код может просто указывать вопрос о спросе и любые подробности о взаимодействии с пользователем, а затем оставить остальная часть работы HighLine. Когда HighLine.ask() вернется, вы получите ответ, который вы просили, даже если HighLine пришлось много раз спрашивать, проверять результаты, выполнять проверку диапазона, преобразовывать типы и т.д.

Для получения дополнительной информации вы можете прочитать документы.

Ответ 4

Несмотря на то, что вопрос довольно старый, это может быть интересной (и, возможно, малоизвестной) альтернативой для простого пользовательского ввода для использования внешнего драгоценного камня:

require 'rubygems/user_interaction'
include Gem::UserInteraction

task :input_test do
  input = ask("What is the airspeed velocity of a swallow?")
  raise "bah, humbug!" unless input == "an african or european swallow?"
end
task :blah_blah => :input_test do 
end