class TTY::Prompt::Suggestion
A class representing a suggestion out of possible choices
@api public
Constants
- DEFAULT_INDENT
- PLURAL_TEXT
- SINGLE_TEXT
Attributes
indent[R]
Number of spaces
@api public
plural_text[R]
Text for multiple suggestions
@api public
single_text[R]
Text for a single suggestion
@api public
Public Class Methods
new(**options)
click to toggle source
Initialize a Suggestion
@api public
# File lib/tty/prompt/suggestion.rb, line 35 def initialize(**options) @indent = options.fetch(:indent) { DEFAULT_INDENT } @single_text = options.fetch(:single_text) { SINGLE_TEXT } @plural_text = options.fetch(:plural_text) { PLURAL_TEXT } @suggestions = [] @comparator = Distance.new end
Public Instance Methods
suggest(message, possibilities)
click to toggle source
Suggest matches out of possibile strings
@param [String] message
@param [Array] possibilities
@api public
# File lib/tty/prompt/suggestion.rb, line 50 def suggest(message, possibilities) distances = measure_distances(message, possibilities) minimum_distance = distances.keys.min max_distance = distances.keys.max if minimum_distance < max_distance @suggestions = distances[minimum_distance].sort end evaluate end
Private Instance Methods
build_multiple_suggestions()
click to toggle source
@api private
# File lib/tty/prompt/suggestion.rb, line 104 def build_multiple_suggestions plural_text + "\n" + @suggestions.map do |sugest| " " * indent + sugest end.join("\n") end
build_single_suggestion()
click to toggle source
@api private
# File lib/tty/prompt/suggestion.rb, line 99 def build_single_suggestion single_text + "\n" + (" " * indent) + @suggestions.first end
evaluate()
click to toggle source
Build up a suggestion string
@param [Array] suggestions
@return [String]
@api private
# File lib/tty/prompt/suggestion.rb, line 88 def evaluate return @suggestions if @suggestions.empty? if @suggestions.one? build_single_suggestion else build_multiple_suggestions end end
measure_distances(message, possibilities)
click to toggle source
Measure distances between messag and possibilities
@param [String] message
@param [Array] possibilities
@return [Hash]
@api private
# File lib/tty/prompt/suggestion.rb, line 72 def measure_distances(message, possibilities) distances = Hash.new { |hash, key| hash[key] = [] } possibilities.each do |possibility| distances[@comparator.distance(message, possibility)] << possibility end distances end