class Jigit::Informator

This class is heavily based on the Interviewer class from the Danger gem The original link is github.com/danger/danger/blob/master/lib/danger/commands/init_helpers/interviewer.rb

Attributes

no_delay[RW]
no_waiting[RW]
ui[RW]

Public Class Methods

new(cork_board) click to toggle source
# File lib/jigit/helpers/informator.rb, line 9
def initialize(cork_board)
  @ui = cork_board
end

Public Instance Methods

ask(question) click to toggle source
# File lib/jigit/helpers/informator.rb, line 60
def ask(question)
  STDIN.reopen(File.open("/dev/tty", "r"))

  answer = ""
  loop do
    ui.puts "\n#{question}?"

    show_prompt
    answer = STDIN.gets.chomp

    break unless answer.empty?

    ui.print "\nYou need to provide an answer."
  end
  answer
end
ask_with_answers(question, possible_answers, is_numerated = false) click to toggle source
# File lib/jigit/helpers/informator.rb, line 77
def ask_with_answers(question, possible_answers, is_numerated = false)
  STDIN.reopen(File.open("/dev/tty", "r"))

  ui.print("\n#{question}? [")
  possible_answers_to_print = is_numerated ? possible_answers.map.with_index { |answer, index| "#{index}. #{answer}" } : possible_answers
  print_possible_answers(possible_answers_to_print)
  answer = ""
  loop do
    show_prompt
    answer = read_answer(possible_answers)

    if is_numerated
      numerated_answer = begin
                           Integer(answer)
                         rescue
                           break
                         end
      break if numerated_answer < 0 && possible_answers.count <= numerated_answer
      answer = possible_answers[numerated_answer]
    end

    break if possible_answers.include? answer

    ui.print "\nPossible answers are ["
    print_possible_answers(possible_answers)
  end
  answer
end
error(message) click to toggle source
# File lib/jigit/helpers/informator.rb, line 50
def error(message)
  ui.puts(message.red)
end
header(title) click to toggle source
# File lib/jigit/helpers/informator.rb, line 33
def header(title)
  say title.yellow
  say ""
  pause 0.6
end
important(message) click to toggle source
# File lib/jigit/helpers/informator.rb, line 39
def important(message)
  i = message.length + 8
  inform("-" * i)
  inform("--- " + message + " ---")
  inform("-" * i)
end
inform(message) click to toggle source
# File lib/jigit/helpers/informator.rb, line 21
def inform(message)
  ui.puts(message.green)
end
pause(time) click to toggle source
# File lib/jigit/helpers/informator.rb, line 29
def pause(time)
  sleep(time) unless @no_waiting
end
say(message) click to toggle source
# File lib/jigit/helpers/informator.rb, line 17
def say(message)
  ui.puts(message)
end
show_prompt() click to toggle source
# File lib/jigit/helpers/informator.rb, line 13
def show_prompt
  ui.print("> ".bold.green)
end
wait_for_return() click to toggle source
# File lib/jigit/helpers/informator.rb, line 54
def wait_for_return
  STDOUT.flush
  STDIN.gets unless @no_delay
  ui.puts
end
warn(message) click to toggle source
# File lib/jigit/helpers/informator.rb, line 46
def warn(message)
  ui.puts(message.yellow)
end

Private Instance Methods

print_possible_answers(possible_answers) click to toggle source
read_answer(possible_answers) click to toggle source
# File lib/jigit/helpers/informator.rb, line 108
def read_answer(possible_answers)
  answer = @no_waiting ? possible_answers[0] : STDIN.gets
  answer = answer.chomp unless answer.nil?
  answer = "yes" if answer == "y"
  answer = "no" if answer == "n"

  # default to first answer
  if answer == ""
    answer = possible_answers[0]
    ui.puts "Using: " + answer.yellow
  end
  answer
end