Class: Kotoshu::Suggestions::SuggestionSet
- Inherits:
-
Object
- Object
- Kotoshu::Suggestions::SuggestionSet
- Includes:
- Enumerable
- Defined in:
- lib/kotoshu/suggestions/suggestion_set.rb
Overview
A collection of suggestions with rich query methods. This is MORE OOP than Spylls which returns plain iterators of strings.
Instance Attribute Summary collapse
-
#max_size ⇒ Object
readonly
Returns the value of attribute max_size.
-
#suggestions ⇒ Object
readonly
Returns the value of attribute suggestions.
Class Method Summary collapse
-
.empty(max_size: 10) ⇒ SuggestionSet
Create an empty suggestion set.
-
.from_words(words, source: :unknown, max_size: 10) ⇒ SuggestionSet
Create a suggestion set from an array of words.
Instance Method Summary collapse
-
#add(suggestion) ⇒ SuggestionSet
(also: #<<)
Add a suggestion to the set.
-
#as_json ⇒ Array<Hash>
Convert to JSON-compatible array.
-
#concat(new_suggestions) ⇒ SuggestionSet
Add multiple suggestions.
-
#each {|suggestion| ... } ⇒ Enumerator
Iterate over suggestions.
-
#empty? ⇒ Boolean
Check if the set is empty.
-
#find_word(word) ⇒ Suggestion?
Find a suggestion by word.
-
#first ⇒ Suggestion?
Get the first (best) suggestion.
-
#from_source(source) ⇒ SuggestionSet
Get suggestions by source.
-
#high_confidence ⇒ SuggestionSet
Get high-confidence suggestions.
-
#include?(word) ⇒ Boolean
(also: #has_word?)
Check if set contains a specific word.
-
#initialize(suggestions = [], max_size: 10) ⇒ SuggestionSet
constructor
A new instance of SuggestionSet.
-
#inspect ⇒ String
Inspect the suggestion set.
-
#last ⇒ Suggestion?
Get the last suggestion.
-
#low_confidence ⇒ SuggestionSet
Get low-confidence suggestions.
-
#merge!(other) ⇒ SuggestionSet
Merge another suggestion set into this one.
-
#size ⇒ Integer
(also: #count, #length)
Get the number of suggestions.
-
#to_a ⇒ Array<Hash>
Convert to array of hashes.
-
#to_s ⇒ String
String representation.
-
#to_words ⇒ Array<String>
(also: #words)
Convert to array of words.
-
#top(n) ⇒ Array<Suggestion>
Get the top N suggestions.
-
#unique ⇒ SuggestionSet
Get unique suggestions (by word, case-insensitive).
-
#within_distance(min_distance: 0, max_distance: 2) ⇒ SuggestionSet
Get suggestions within a distance range.
Constructor Details
#initialize(suggestions = [], max_size: 10) ⇒ SuggestionSet
Returns a new instance of SuggestionSet.
16 17 18 19 20 |
# File 'lib/kotoshu/suggestions/suggestion_set.rb', line 16 def initialize(suggestions = [], max_size: 10) @suggestions = suggestions @max_size = max_size sort_and_limit! end |
Instance Attribute Details
#max_size ⇒ Object (readonly)
Returns the value of attribute max_size.
12 13 14 |
# File 'lib/kotoshu/suggestions/suggestion_set.rb', line 12 def max_size @max_size end |
#suggestions ⇒ Object (readonly)
Returns the value of attribute suggestions.
12 13 14 |
# File 'lib/kotoshu/suggestions/suggestion_set.rb', line 12 def suggestions @suggestions end |
Class Method Details
.empty(max_size: 10) ⇒ SuggestionSet
Create an empty suggestion set.
212 213 214 |
# File 'lib/kotoshu/suggestions/suggestion_set.rb', line 212 def self.empty(max_size: 10) new([], max_size: max_size) end |
.from_words(words, source: :unknown, max_size: 10) ⇒ SuggestionSet
Create a suggestion set from an array of words.
222 223 224 225 |
# File 'lib/kotoshu/suggestions/suggestion_set.rb', line 222 def self.from_words(words, source: :unknown, max_size: 10) suggestions = words.map { |w| Suggestion.from_word(w, source: source) } new(suggestions, max_size: max_size) end |
Instance Method Details
#add(suggestion) ⇒ SuggestionSet Also known as: <<
Add a suggestion to the set.
26 27 28 29 30 |
# File 'lib/kotoshu/suggestions/suggestion_set.rb', line 26 def add(suggestion) @suggestions << suggestion sort_and_limit! self end |
#as_json ⇒ Array<Hash>
Convert to JSON-compatible array.
186 187 188 |
# File 'lib/kotoshu/suggestions/suggestion_set.rb', line 186 def as_json(*) to_a end |
#concat(new_suggestions) ⇒ SuggestionSet
Add multiple suggestions.
37 38 39 40 41 |
# File 'lib/kotoshu/suggestions/suggestion_set.rb', line 37 def concat(new_suggestions) @suggestions.concat(new_suggestions) sort_and_limit! self end |
#each {|suggestion| ... } ⇒ Enumerator
Iterate over suggestions.
145 146 147 148 149 |
# File 'lib/kotoshu/suggestions/suggestion_set.rb', line 145 def each(&block) return enum_for(:each) unless block_given? @suggestions.each(&block) end |
#empty? ⇒ Boolean
Check if the set is empty.
128 129 130 |
# File 'lib/kotoshu/suggestions/suggestion_set.rb', line 128 def empty? @suggestions.empty? end |
#find_word(word) ⇒ Suggestion?
Find a suggestion by word.
99 100 101 |
# File 'lib/kotoshu/suggestions/suggestion_set.rb', line 99 def find_word(word) @suggestions.find { |s| s.same_word?(word) } end |
#first ⇒ Suggestion?
Get the first (best) suggestion.
114 115 116 |
# File 'lib/kotoshu/suggestions/suggestion_set.rb', line 114 def first @suggestions.first end |
#from_source(source) ⇒ SuggestionSet
Get suggestions by source.
56 57 58 |
# File 'lib/kotoshu/suggestions/suggestion_set.rb', line 56 def from_source(source) SuggestionSet.new(@suggestions.select { |s| s.from_source?(source) }, max_size: @max_size) end |
#high_confidence ⇒ SuggestionSet
Get high-confidence suggestions.
63 64 65 |
# File 'lib/kotoshu/suggestions/suggestion_set.rb', line 63 def high_confidence SuggestionSet.new(@suggestions.select(&:high_confidence?), max_size: @max_size) end |
#include?(word) ⇒ Boolean Also known as: has_word?
Check if set contains a specific word.
90 91 92 |
# File 'lib/kotoshu/suggestions/suggestion_set.rb', line 90 def include?(word) @suggestions.any? { |s| s.same_word?(word) } end |
#inspect ⇒ String
Inspect the suggestion set.
200 201 202 203 204 205 206 |
# File 'lib/kotoshu/suggestions/suggestion_set.rb', line 200 def inspect if @suggestions.empty? to_s else "#{self} [#{@suggestions.map(&:word).join(", ")}]" end end |
#last ⇒ Suggestion?
Get the last suggestion.
121 122 123 |
# File 'lib/kotoshu/suggestions/suggestion_set.rb', line 121 def last @suggestions.last end |
#low_confidence ⇒ SuggestionSet
Get low-confidence suggestions.
70 71 72 |
# File 'lib/kotoshu/suggestions/suggestion_set.rb', line 70 def low_confidence SuggestionSet.new(@suggestions.select(&:low_confidence?), max_size: @max_size) end |
#merge!(other) ⇒ SuggestionSet
Merge another suggestion set into this one.
47 48 49 50 |
# File 'lib/kotoshu/suggestions/suggestion_set.rb', line 47 def merge!(other) concat(other.suggestions) self end |
#size ⇒ Integer Also known as: count, length
Get the number of suggestions.
135 136 137 |
# File 'lib/kotoshu/suggestions/suggestion_set.rb', line 135 def size @suggestions.size end |
#to_a ⇒ Array<Hash>
Convert to array of hashes.
179 180 181 |
# File 'lib/kotoshu/suggestions/suggestion_set.rb', line 179 def to_a @suggestions.map(&:to_h) end |
#to_s ⇒ String
String representation.
193 194 195 |
# File 'lib/kotoshu/suggestions/suggestion_set.rb', line 193 def to_s "SuggestionSet(size: #{size}, max_size: #{@max_size})" end |
#to_words ⇒ Array<String> Also known as: words
Convert to array of words.
171 172 173 |
# File 'lib/kotoshu/suggestions/suggestion_set.rb', line 171 def to_words @suggestions.map(&:word) end |
#top(n) ⇒ Array<Suggestion>
Get the top N suggestions.
107 108 109 |
# File 'lib/kotoshu/suggestions/suggestion_set.rb', line 107 def top(n) @suggestions.first(n) end |
#unique ⇒ SuggestionSet
Get unique suggestions (by word, case-insensitive).
154 155 156 157 158 159 160 161 162 163 164 165 166 |
# File 'lib/kotoshu/suggestions/suggestion_set.rb', line 154 def unique seen = {} unique_suggestions = @suggestions.select do |s| word = s.word.downcase if seen[word] false else seen[word] = true true end end SuggestionSet.new(unique_suggestions, max_size: @max_size) end |
#within_distance(min_distance: 0, max_distance: 2) ⇒ SuggestionSet
Get suggestions within a distance range.
79 80 81 82 83 84 |
# File 'lib/kotoshu/suggestions/suggestion_set.rb', line 79 def within_distance(min_distance: 0, max_distance: 2) filtered = @suggestions.select do |s| s.distance >= min_distance && s.distance <= max_distance end SuggestionSet.new(filtered, max_size: @max_size) end |