Sha256: 36f23708ce0c1c567131d6f2275d88ca70c2dbde045c43d0577a30c3093e0b04

Contents?: true

Size: 1.08 KB

Versions: 2

Compression:

Stored size: 1.08 KB

Contents

module CloudSesame
  module Query
    class Fuzziness

      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 parse(string)
        result = each_with(string) { |word| fuzziness word }
        join_by_and result
      end

      private

      def each_with(string, &block)
        string.split(' ').map &block
      end

      def fuzziness(word)
        if word.length >= @min_char_size
          fuzziness = (word.length * @fuzzy_percent).round
          fuzziness = [fuzziness, @max_fuzziness].min
          "#{word}~#{fuzziness}"
        else
          word
        end
      end

      def join_by_and(*args)
        (args = args.flatten.compact).size > 1 ? "(#{ args.join('+') })" : args[0]
      end

    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
CloudSesame-0.2.1 lib/cloud_sesame/query/fuzziness.rb
CloudSesame-0.2.0 lib/cloud_sesame/query/fuzziness.rb