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 36 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 51 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 106 def build_multiple_suggestions suggestion = '' suggestion << plural_text + "\n" suggestion << @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 suggestion = '' suggestion << single_text + "\n" suggestion << (' ' * 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 89 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 73 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