class HighLine::QuestionAsker

def ask_once

Returns:
  • (String) - answer
def ask_once
  # If in readline mode, let reline take care of the prompt
  question.show_question(@highline) unless question.readline
  begin
    question.get_response_or_default(@highline)
    raise NotValidQuestionError unless question.valid_answer?
    question.convert
    question.check_range
    if question.confirm
      confirmation = @highline.send(:confirm, question)
      raise NoConfirmationQuestionError unless confirmation
    end
  rescue ExplainableError => e
    explain_error(e.explanation_key)
    retry
  rescue ArgumentError => error
    case error.message
    when /ambiguous/
      # the assumption here is that OptionParser::Completion#complete
      # (used for ambiguity resolution) throws exceptions containing
      # the word 'ambiguous' whenever resolution fails
      explain_error(:ambiguous_completion)
      retry
    when /invalid value for/
      explain_error(:invalid_type)
      retry
    else
      raise
    end
  end
  question.answer
end