class EY::CLI::UI::Prompter

Public Class Methods

add_answer(arg) click to toggle source
# File lib/engineyard/cli/ui.rb, line 19
def self.add_answer(arg)
  @answers ||= []
  @answers << arg
end
agree(question, default) click to toggle source
# File lib/engineyard/cli/ui.rb, line 58
def self.agree(question, default)
  if @mock
    @questions ||= []
    @questions << question
    answer = @answers.shift
    answer == '' ? default : %w[y yes].include?(answer)
  else
    timeout_if_not_interactive do
      answer = highline.agree(question) {|q| q.default = default ? 'Y/n' : 'N/y' }
      case answer
      when 'Y/n' then true
      when 'N/y' then false
      else            answer
      end
    end
  end
end
ask(question, password = false, default = nil) click to toggle source
# File lib/engineyard/cli/ui.rb, line 42
def self.ask(question, password = false, default = nil)
  if @mock
    @questions ||= []
    @questions << question
    answer = @answers.shift
    (answer == '' && default) ? default : answer
  else
    timeout_if_not_interactive do
      highline.ask(question) do |q|
        q.echo = "*"        if password
        q.default = default if default
      end.to_s
    end
  end
end
enable_mock!() click to toggle source
# File lib/engineyard/cli/ui.rb, line 28
def self.enable_mock!
  @questions = []
  @answers = []
  @mock = true
end
highline() click to toggle source
# File lib/engineyard/cli/ui.rb, line 34
def self.highline
  @highline ||= HighLine.new($stdin)
end
interactive?() click to toggle source
# File lib/engineyard/cli/ui.rb, line 38
def self.interactive?
  @mock || ($stdout && $stdout.tty?)
end
questions() click to toggle source
# File lib/engineyard/cli/ui.rb, line 24
def self.questions
  @questions
end
timeout_if_not_interactive(&block) click to toggle source
# File lib/engineyard/cli/ui.rb, line 76
def self.timeout_if_not_interactive(&block)
  if interactive?
    block.call
  else
    Timeout.timeout(2, &block)
  end
end