Sha256: c225bbab840d865a60d52f61f9dad8f08b94ed50fb05b7e94731a56ceec5ac0c

Contents?: true

Size: 1.52 KB

Versions: 6

Compression:

Stored size: 1.52 KB

Contents

# frozen_string_literal: true
module Wings
  module CustomQueries
    ##
    # @see https://github.com/samvera/valkyrie/wiki/Queries#custom-queries
    # @see Hyrax::CustomQueries::FindIdsByModel
    class FindIdsByModel
      def self.queries
        [:find_ids_by_model]
      end

      def initialize(query_service:, query_rows: 1_000)
        @query_service = query_service
        @query_rows = query_rows
      end

      attr_reader :query_service
      delegate :resource_factory, to: :query_service

      ##
      # @note uses solr to do the lookup
      #
      # @param model [Class]
      # @param ids [Enumerable<#to_s>, Symbol]
      #
      # @return [Enumerable<Valkyrie::ID>]
      def find_ids_by_model(model:, ids: :all)
        return enum_for(:find_ids_by_model, model: model, ids: ids) unless block_given?
        model_name = ModelRegistry.lookup(model).model_name

        solr_query = "_query_:\"{!raw f=has_model_ssim}#{model_name}\""
        solr_response = Hyrax::SolrService.get(solr_query, fl: 'id', rows: @query_rows)['response']

        loop do
          response_docs = solr_response['docs']
          response_docs.select! { |doc| ids.include?(doc['id']) } unless ids == :all

          response_docs.each { |doc| yield doc['id'] }

          break if (solr_response['start'] + solr_response['docs'].count) >= solr_response['numFound']
          solr_response = Hyrax::SolrService.get(solr_query, fl: 'id', rows: @query_rows, start: solr_response['start'] + @query_rows)['response']
        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
hyrax-5.0.4 lib/wings/services/custom_queries/find_ids_by_model.rb
hyrax-5.0.3 lib/wings/services/custom_queries/find_ids_by_model.rb
hyrax-5.0.2 lib/wings/services/custom_queries/find_ids_by_model.rb
hyrax-5.0.1 lib/wings/services/custom_queries/find_ids_by_model.rb
hyrax-5.0.0 lib/wings/services/custom_queries/find_ids_by_model.rb
hyrax-5.0.0.rc3 lib/wings/services/custom_queries/find_ids_by_model.rb