class CloudSesame::Query::Node::Fuzziness

Constants

EXCLUDING_TERMS

Public Class Methods

new(&block) click to toggle source
# File lib/cloud_sesame/query/node/fuzziness.rb, line 8
def initialize(&block)

  # default fuzziness
  @max_fuzziness = 3
  @min_char_size = 6
  @fuzzy_percent = 0.17

  instance_eval(&block) if block_given?
end

Public Instance Methods

compile(string) click to toggle source
# File lib/cloud_sesame/query/node/fuzziness.rb, line 30
def compile(string)
  (compiled = each_word_in(string) { |word| fuzziness(word) }).compact!
  "(#{ compiled.join('+') })"
end
fuzzy_percent(float) click to toggle source
# File lib/cloud_sesame/query/node/fuzziness.rb, line 26
def fuzzy_percent(float)
  @fuzzy_percent = float.to_f
end
max_fuzziness(int) click to toggle source
# File lib/cloud_sesame/query/node/fuzziness.rb, line 18
def max_fuzziness(int)
  @max_fuzziness = int.to_i
end
min_char_size(int) click to toggle source
# File lib/cloud_sesame/query/node/fuzziness.rb, line 22
def min_char_size(int)
  @min_char_size = int.to_i
end

Private Instance Methods

each_word_in(string, &block) click to toggle source
# File lib/cloud_sesame/query/node/fuzziness.rb, line 37
def each_word_in(string, &block)
  string.split(' ').map!(&block)
end
excluding_term?(word) click to toggle source
# File lib/cloud_sesame/query/node/fuzziness.rb, line 51
def excluding_term?(word)
  !!(EXCLUDING_TERMS =~ word)
end
fuzziness(word) click to toggle source
# File lib/cloud_sesame/query/node/fuzziness.rb, line 41
def fuzziness(word)
  if (length = word.length) >= @min_char_size && !excluding_term?(word)
    fuzziness = (length * @fuzzy_percent).round
    fuzziness = [fuzziness, @max_fuzziness].min
    "#{ word }~#{ fuzziness }"
  else
    word
  end
end