Sha256: 1958e4b563466d3bfa6a13fe611013d644964ee9291fc2e2a52e028b9c983d75

Contents?: true

Size: 1.29 KB

Versions: 2

Compression:

Stored size: 1.29 KB

Contents

module Eco
  module Data
    module FuzzyMatch
      class Results < Struct.new(:needle, :value, :raw_results)

        def results_with_false_positives
          relevant_results(methods: :jaro_winkler, threshold: 0.5)
        end

        def relevant_results(methods: order, threshold: 0.5)
          raw_results.select do |result|
            result.all_threshold?(methods, threshold)
          end.yield_self do |filtered|
            self.class.new(needle, value, filtered).tap do |results|
              results.order = methods
            end
          end
        end

        def order=(values)
          @order = [values].flatten.compact
          raw_results.each {|r| r.order = @order}
        end

        def order
          @order ||= [:words_ngrams, :dice]
        end

        def results
          raw_results.sort
        end

        def print
          msg = results.map do |result|
            result.print
          end.join("\n  ")

          puts "'#{value}':\n  " + msg
        end

        private

        def item_string(item, attr = self.method)
          return item if !item || item.is_a?(String) || !attr
          attr = attr.to_sym
          return item.send(attr) if item.respond_to?(attr)
        end

      end

    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
eco-helpers-2.0.18 lib/eco/data/fuzzy_match/results.rb
eco-helpers-2.0.17 lib/eco/data/fuzzy_match/results.rb