class TTY::Prompt::MaskQuestion

Public Class Methods

new(prompt, options = {}) click to toggle source

Create masked question

@param [Hash] options @option options [String] :mask

@api public

Calls superclass method
# File lib/tty/prompt/mask_question.rb, line 15
def initialize(prompt, options = {})
  super
  @mask        = options.fetch(:mask) { Symbols.symbols[:dot] }
  @done_masked = false
  @failure     = false
  @prompt.subscribe(self)
end

Public Instance Methods

keyenter(event) click to toggle source
# File lib/tty/prompt/mask_question.rb, line 39
def keyenter(event)
  @done_masked = true
end
keypress(event) click to toggle source
# File lib/tty/prompt/mask_question.rb, line 43
def keypress(event)
  if [:backspace, :delete].include?(event.key.name)
    @input.chop! unless @input.empty?
  elsif event.value =~ /^[^\e\n\r]/
    @input += event.value
  end
end
keyreturn(event) click to toggle source
# File lib/tty/prompt/mask_question.rb, line 35
def keyreturn(event)
  @done_masked = true
end
mask(char = (not_set = true)) click to toggle source

Set character for masking the STDIN input

@param [String] char

@return [self]

@api public

# File lib/tty/prompt/mask_question.rb, line 30
def mask(char = (not_set = true))
  return @mask if not_set
  @mask = char
end
read_input(question) click to toggle source

Read input from user masked by character

@private

# File lib/tty/prompt/mask_question.rb, line 77
def read_input(question)
  @done_masked = false
  @failure = false
  @input = ''
  until @done_masked
    @prompt.read_keypress
    @prompt.print(@prompt.clear_line)
    @prompt.print(render_question)
  end
  @prompt.puts
  @input
end
render_error(errors) click to toggle source
Calls superclass method
# File lib/tty/prompt/mask_question.rb, line 69
def render_error(errors)
  @failure = !errors.empty?
  super
end
render_question() click to toggle source

Render question and input replaced with masked character

@api private

# File lib/tty/prompt/mask_question.rb, line 54
def render_question
  header = "#{@prefix}#{message} "
  if echo?
    masked = "#{@mask * "#{@input}".length}"
    if @done_masked && !@failure
      masked = @prompt.decorate(masked, @active_color)
    elsif @done_masked && @failure
      masked = @prompt.decorate(masked, @error_color)
    end
    header += masked
  end
  header << "\n" if @done
  header
end