Module: ActiveFedora::QueryResultBuilder

Defined in:
lib/active_fedora/query_result_builder.rb

Constant Summary collapse

HAS_MODEL_SOLR_FIELD =
SolrQueryBuilder.solr_name("has_model", :symbol).freeze

Class Method Summary collapse

Class Method Details

.class_from_solr_document(hit, opts = {}) ⇒ Object

Returns the best singular class for the solr object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/active_fedora/query_result_builder.rb', line 30

def self.class_from_solr_document(hit, opts = {})
  #Set the default starting point to the class specified, if available.
  best_model_match = Model.from_class_uri(opts[:class]) unless opts[:class].nil?
  Array(hit[HAS_MODEL_SOLR_FIELD]).each do |value|

    model_value = Model.from_class_uri(value)

    if model_value

      # Set as the first model in case opts[:class] was nil
      best_model_match ||= model_value

      # If there is an inheritance structure, use the most specific case.
      if best_model_match > model_value
        best_model_match = model_value
      end
    end
  end

  ActiveFedora::Base.logger.warn "Could not find a model for #{hit["id"]}, defaulting to ActiveFedora::Base" unless best_model_match if ActiveFedora::Base.logger
  best_model_match || ActiveFedora::Base
end

.classes_from_solr_document(hit, opts = {}) ⇒ Object

Returns all possible classes for the solr object



21
22
23
24
25
26
27
# File 'lib/active_fedora/query_result_builder.rb', line 21

def self.classes_from_solr_document(hit, opts = {})
  classes = []

  hit[HAS_MODEL_SOLR_FIELD].each { |value| classes << Model.from_class_uri(value) }

  classes.compact
end

.lazy_reify_solr_results(solr_results, opts = {}) ⇒ Object



3
4
5
6
7
8
9
# File 'lib/active_fedora/query_result_builder.rb', line 3

def self.lazy_reify_solr_results(solr_results, opts = {})
  Enumerator.new do |yielder|
    solr_results.each do |hit|
      yielder.yield(reify_solr_result(hit, opts))
    end
  end
end

.reify_solr_result(hit, opts = {}) ⇒ Object



15
16
17
18
# File 'lib/active_fedora/query_result_builder.rb', line 15

def self.reify_solr_result(hit, opts = {})
  klass = class_from_solr_document(hit)
  klass.find(hit[SOLR_DOCUMENT_ID], cast: true)
end

.reify_solr_results(solr_results, opts = {}) ⇒ Object



11
12
13
# File 'lib/active_fedora/query_result_builder.rb', line 11

def self.reify_solr_results(solr_results, opts = {})
  solr_results.collect { |hit| reify_solr_result(hit, opts) }
end