Sha256: b5ceac69264999fbf1c50eb1f0056273d3cef48e563233722403ee3c2a387a0c

Contents?: true

Size: 1.7 KB

Versions: 7

Compression:

Stored size: 1.7 KB

Contents

# frozen_string_literal: true
module Hyrax
  module SolrDocument
    ##
    # Decorates an object responding to `#id` with an `#ordered_member_ids` method.
    #
    # @note this decorator is intended for use with data representations other
    #   than the core model objects, as an alternative to a direct query of the
    #   canonical database. for example, it can be used with `SolrDocument` to
    #   quickly retrieve member order in a way that is compatible with the
    #   fast access required in Blacklight's search contexts.
    #
    # @example
    #   base_document = SolrDocument.new(my_work.to_solr)
    #   solr_document = Hyrax::SolrDocument::OrderedMembers.decorate(base_document)
    #
    #   solr_document.ordered_member_ids # => ['abc', '123']
    #
    class OrderedMembers < Draper::Decorator
      delegate_all

      ##
      # @note the purpose of this method is to provide fast access to member
      #   order. currently this is achieved by accessing indexed list proxies
      #   from Solr. however, this strategy may change in the future.
      #
      # @return [Enumerable<String>] ids in the order of their membership,
      #   only includes ids of ordered members.
      def ordered_member_ids
        return [] if id.blank?
        @ordered_member_ids ||= query_for_ordered_ids
      end

      private

        def query_for_ordered_ids(limit: 10_000,
                                  proxy_field: 'proxy_in_ssi',
                                  target_field: 'ordered_targets_ssim')
          ActiveFedora::SolrService
            .query("#{proxy_field}:#{id}", rows: limit, fl: target_field)
            .flat_map { |x| x.fetch(target_field, nil) }
            .compact
        end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
hyrax-2.9.6 app/models/concerns/hyrax/solr_document/ordered_members.rb
hyrax-2.9.5 app/models/concerns/hyrax/solr_document/ordered_members.rb
hyrax-2.9.4 app/models/concerns/hyrax/solr_document/ordered_members.rb
hyrax-2.9.3 app/models/concerns/hyrax/solr_document/ordered_members.rb
hyrax-2.9.2 app/models/concerns/hyrax/solr_document/ordered_members.rb
hyrax-2.9.1 app/models/concerns/hyrax/solr_document/ordered_members.rb
hyrax-2.9.0 app/models/concerns/hyrax/solr_document/ordered_members.rb