class ActiveFedora::SolrInstanceLoader
Responsible for loading an ActiveFedora::Base proxy from a Solr document.
def active_fedora_class
def active_fedora_class @active_fedora_class ||= ActiveFedora::QueryResultBuilder.class_from_solr_document(solr_doc) end
def allocate_object
def allocate_object active_fedora_class.allocate.init_with_json(profile_json) end
def initialize(context, id, solr_doc = nil)
def initialize(context, id, solr_doc = nil) @context = context @id = id @solr_doc = solr_doc validate_solr_doc_and_id!(@solr_doc) end
def object
def object return @object if @object @object = allocate_object @object.readonly! @object.freeze @object end
def profile_json
def profile_json @profile_json ||= begin profile_json = Array(solr_doc[ActiveFedora::IndexingService.profile_solr_name]).first unless profile_json.present? raise ActiveFedora::ObjectNotFoundError, "Object #{id} does not contain a solrized profile" end profile_json end end
def solr_doc
def solr_doc @solr_doc ||= begin result = context.find_with_conditions(id: id) if result.empty? raise ActiveFedora::ObjectNotFoundError, "Object #{id} not found in solr" end @solr_doc = result.first validate_solr_doc_and_id!(@solr_doc) @solr_doc end end
def validate_solr_doc_and_id!(document)
def validate_solr_doc_and_id!(document) return true if document.nil? solr_id = document[SOLR_DOCUMENT_ID] if id != solr_id raise ActiveFedora::FedoraSolrMismatchError.new(id, solr_id) end end