class Capistrano::Harrow::UI::TTY

Public Class Methods

new(params={input: $stdin, output: $stdout, timeout: 30}) click to toggle source
# File lib/capistrano/harrow/ui/tty.rb, line 5
def initialize(params={input: $stdin, output: $stdout, timeout: 30})
  @in = params.fetch(:input, $stdin)
  @out = params.fetch(:output, $stdout)
  @timeout = params.fetch(:timeout, 60)
end

Public Instance Methods

prompt(prompt_str, answers=['yes', 'no']) click to toggle source
# File lib/capistrano/harrow/ui/tty.rb, line 24
def prompt(prompt_str, answers=['yes', 'no'])
  answers = Array(answers)

  @out.write prompt_str

  default_answer = answers.first
  hints = answers_hint(answers)

  unless hints.empty?
    @out.write " "
    @out.write hints
  end

  @out.write ": "

  unless IO.select([@in], [], [], @timeout)
    raise TimeoutError.new
  else
    answer = @in.gets.chop
  end

  return default_answer if answer.empty?

  answer
end
prompt_password(prompt_str) click to toggle source
# File lib/capistrano/harrow/ui/tty.rb, line 15
def prompt_password(prompt_str)
  %x`stty -echo 2>/dev/null`
  password =  prompt(prompt_str, [])
  show "\n"
  password
ensure
  %x`stty echo  2>/dev/null`
end
show(text) click to toggle source
# File lib/capistrano/harrow/ui/tty.rb, line 11
def show(text)
  @out.puts text
end

Private Instance Methods

answers_hint(answers) click to toggle source
# File lib/capistrano/harrow/ui/tty.rb, line 51
def answers_hint(answers)
  return '' if Array(answers).length == 0
  items = answers.map(&:to_s).map(&:strip)
  items[0] = items.first[0].upcase + items.first[1..-1]
  "(#{items.join("/")})"
end