Sha256: 3da29e117565f3c715bf66ad9d071b796ad9ec67fba0191c6ade615a1de6404d

Contents?: true

Size: 894 Bytes

Versions: 2

Compression:

Stored size: 894 Bytes

Contents

module DbClustering
  module DatasourceAdapters
    class ActiveRecord

      def initialize(relation:)
        @relation = relation
      end

      def iterate_all_points
        points_count = @relation.count
        current_index = 0
        
        @relation.find_each do |datasource_point|
          point = DbClustering::Models::Point.new(datasource_point)
          yield(point, current_index, points_count)
          current_index += 1
        end
      end

      def neighbors(point:, distance_metric:, max_distance:)
        neighbors = []

        @relation.find_each do |neighbor_candidate|
          candidate_point = DbClustering::Models::Point.new(neighbor_candidate)

          if distance_metric.distance(point.vector, candidate_point.vector) <= max_distance
            neighbors << candidate_point
          end
        end

        neighbors
      end

    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
db_clustering-0.1.6 lib/datasource_adapters/active_record.rb
db_clustering-0.1.5 lib/datasource_adapters/active_record.rb