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

Version Path
CloudSesame-1.0.1 lib/cloud_sesame/query/node/fuzziness.rb
CloudSesame-1.0.0 lib/cloud_sesame/query/node/fuzziness.rb
CloudSesame-0.9.4 lib/cloud_sesame/query/node/fuzziness.rb
CloudSesame-0.9.3 lib/cloud_sesame/query/node/fuzziness.rb
CloudSesame-0.9.2 lib/cloud_sesame/query/node/fuzziness.rb
CloudSesame-0.9.1 lib/cloud_sesame/query/node/fuzziness.rb
CloudSesame-0.9.0 lib/cloud_sesame/query/node/fuzziness.rb
CloudSesame-0.8.3 lib/cloud_sesame/query/node/fuzziness.rb
CloudSesame-0.8.2 lib/cloud_sesame/query/node/fuzziness.rb
CloudSesame-0.8.1 lib/cloud_sesame/query/node/fuzziness.rb
CloudSesame-0.8.0 lib/cloud_sesame/query/node/fuzziness.rb
CloudSesame-0.7.13 lib/cloud_sesame/query/node/fuzziness.rb
CloudSesame-0.7.12 lib/cloud_sesame/query/node/fuzziness.rb
CloudSesame-0.7.11 lib/cloud_sesame/query/node/fuzziness.rb
CloudSesame-0.7.10 lib/cloud_sesame/query/node/fuzziness.rb
CloudSesame-0.7.9 lib/cloud_sesame/query/node/fuzziness.rb
CloudSesame-0.7.8 lib/cloud_sesame/query/node/fuzziness.rb
CloudSesame-0.7.7 lib/cloud_sesame/query/node/fuzziness.rb