class UserInput::Prompt
Prompt
object
Public Class Methods
new(params = {}, &block)
click to toggle source
Build new prompt object and set defaults
# File lib/userinput/prompt.rb, line 9 def initialize(params = {}, &block) @attempts = params[:attempts] @message = params[:message] || '' @separator = params[:separator] || '?' @default = params[:default] @secret = params[:secret] || false @fd = params[:fd] || STDOUT @validation = block || params[:validation] end
Public Instance Methods
ask()
click to toggle source
Request user input
# File lib/userinput/prompt.rb, line 21 def ask @fd.print full_message disable_echo if @secret input = _ask return input if valid(input) check_counter ask ensure enable_echo if @secret end
Private Instance Methods
_ask()
click to toggle source
Parse user input
# File lib/userinput/prompt.rb, line 55 def _ask input = STDIN.gets.chomp input = @default if input.empty? && @default @fd.puts if @secret input end
check_counter()
click to toggle source
Track attempt counter
# File lib/userinput/prompt.rb, line 64 def check_counter return if @attempts.nil? @attempts -= 1 raise ArgumentError, 'No valid input provided' if @attempts.zero? end
disable_echo()
click to toggle source
Disable terminal display of user input
# File lib/userinput/prompt.rb, line 72 def disable_echo toggle_echo false end
enable_echo()
click to toggle source
Enable terminal display of user input
# File lib/userinput/prompt.rb, line 78 def enable_echo toggle_echo true end
full_message()
click to toggle source
# File lib/userinput/prompt.rb, line 36 def full_message MESSAGE_TEMPLATE % { message: @message, separator: @separator, default: @default.nil? ? '' : "[#{@default}] " } end
toggle_echo(state)
click to toggle source
Toggle terminal display of user input
# File lib/userinput/prompt.rb, line 84 def toggle_echo(state) setting = state ? '' : '-' `stty #{setting}echo` rescue nil end
valid(input)
click to toggle source
Validate user input
# File lib/userinput/prompt.rb, line 46 def valid(input) return true unless @validation _, method = VALIDATIONS.find { |klass, _| @validation.is_a? klass } return @validation.send(method, input) if method raise "Supported validation type not provided #{@validation.class}" end