module Gamefic::Keywords
Constants
- SPLIT_REGEXP
Public Instance Methods
keywords()
click to toggle source
Get an array of keywords associated with this object. The default implementation splits the value of self.to_s into an array.
@return [Array<String>]
# File lib/gamefic/keywords.rb, line 9 def keywords self.to_s.downcase.split(SPLIT_REGEXP).uniq end
specified?(description, fuzzy: false)
click to toggle source
Determine if this object matches the provided description. In a regular match, every word in the description must be a keyword. Fuzzy matches accept words if a keyword starts with it, e.g., “red” would be a fuzzy match for “reddish.”
@example
dog = "big red dog" dog.extend Gamefic::Matchable dog.specified?("red dog") #=> true dog.specified?("gray dog") #=> false dog.specified?("red do") #=> false dog.specified?("re do", fuzzy: true) #=> true dog.specified?("red og", fuzzy: true) #=> false
@param description [String] The description to be compared @param fuzzy [Boolean] Use fuzzy matching (default is false) @return [Boolean]
# File lib/gamefic/keywords.rb, line 32 def specified? description, fuzzy: false words = description.split(SPLIT_REGEXP) return false if words.empty? matches = 0 available = keywords words.each { |w| if fuzzy available.each { |k| if k.gsub(/[^a-z0-9]/, '').start_with?(w.downcase.gsub(/[^a-z0-9]/, '')) matches +=1 break end } else matches +=1 if available.include?(w.downcase) end } matches == words.length end