Sha256: 7fde792f9aeea2f324e01a8301ba18602ce60807ff8ba2144d995196c4d274fe
Contents?: true
Size: 1.25 KB
Versions: 18
Compression:
Stored size: 1.25 KB
Contents
module CloudSesame module Query module Node class Fuzziness EXCLUDING_TERMS = /(^\-|\*$)/.freeze def initialize(&block) # default fuzziness @max_fuzziness = 3 @min_char_size = 6 @fuzzy_percent = 0.17 instance_eval(&block) if block_given? end def max_fuzziness(int) @max_fuzziness = int.to_i end def min_char_size(int) @min_char_size = int.to_i end def fuzzy_percent(float) @fuzzy_percent = float.to_f end def compile(string) (compiled = each_word_in(string) { |word| fuzziness(word) }).compact! "(#{ compiled.join('+') })" end private def each_word_in(string, &block) string.split(' ').map!(&block) end 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 def excluding_term?(word) !!(EXCLUDING_TERMS =~ word) end end end end end
Version data entries
18 entries across 18 versions & 1 rubygems