Module: Dor

Defined in:
lib/dor/config.rb,
lib/dor/version.rb,
lib/dor-services.rb,
lib/dor/exceptions.rb,
lib/dor/models/set.rb,
lib/dor/models/item.rb,
lib/dor/models/geoable.rb,
lib/dor/workflow/graph.rb,
lib/dor/models/editable.rb,
lib/dor/models/eventable.rb,
lib/dor/models/shelvable.rb,
lib/dor/workflow/process.rb,
lib/dor/models/collection.rb,
lib/dor/models/governable.rb,
lib/dor/models/itemizable.rb,
lib/dor/models/rightsable.rb,
lib/dor/models/upgradable.rb,
lib/dor/workflow/document.rb,
lib/dor/models/contentable.rb,
lib/dor/models/describable.rb,
lib/dor/models/embargoable.rb,
lib/dor/models/preservable.rb,
lib/dor/models/processable.rb,
lib/dor/models/publishable.rb,
lib/dor/models/releaseable.rb,
lib/dor/models/versionable.rb,
lib/dor/models/assembleable.rb,
lib/dor/models/identifiable.rb,
lib/dor/datastreams/events_ds.rb,
lib/dor/services/suri_service.rb,
lib/dor/models/workflow_object.rb,
lib/dor/services/merge_service.rb,
lib/dor/datastreams/workflow_ds.rb,
lib/dor/services/search_service.rb,
lib/dor/services/cleanup_service.rb,
lib/dor/services/indexing_service.rb,
lib/dor/services/metadata_service.rb,
lib/dor/models/admin_policy_object.rb,
lib/dor/datastreams/geo_metadata_ds.rb,
lib/dor/services/sdr_ingest_service.rb,
lib/dor/datastreams/desc_metadata_ds.rb,
lib/dor/datastreams/role_metadata_ds.rb,
lib/dor/services/registration_service.rb,
lib/dor/datastreams/rights_metadata_ds.rb,
lib/dor/services/cleanup_reset_service.rb,
lib/dor/datastreams/content_metadata_ds.rb,
lib/dor/datastreams/embargo_metadata_ds.rb,
lib/dor/datastreams/version_metadata_ds.rb,
lib/dor/services/digital_stacks_service.rb,
lib/dor/datastreams/identity_metadata_ds.rb,
lib/dor/services/reset_workspace_service.rb,
lib/dor/datastreams/simple_dublin_core_ds.rb,
lib/dor/datastreams/workflow_definition_ds.rb,
lib/dor/services/technical_metadata_service.rb,
lib/dor/datastreams/default_object_rights_ds.rb,
lib/dor/datastreams/administrative_metadata_ds.rb

Defined Under Namespace

Modules: Assembleable, BasicItem, Contentable, Describable, Editable, Embargoable, Eventable, Geoable, Governable, Identifiable, Itemizable, Preservable, Processable, Publishable, Releaseable, Rightsable, Shelvable, Upgradable, Versionable, Versioning, Workflow Classes: Abstract, AdminPolicyObject, AdministrativeMetadataDS, CleanupResetService, CleanupService, Collection, Configuration, ContentMetadataDS, DefaultObjectRightsDS, DescMetadataDS, DigitalStacksService, DuplicateIdError, EmbargoMetadataDS, EventsDS, Exception, GeoMetadataDS, IdentityMetadataDS, IndexingService, Item, MergeService, MetadataError, MetadataService, ParameterError, RegistrationService, ResetWorkspaceService, RightsMetadataDS, RoleMetadataDS, SdrIngestService, SearchService, Set, SimpleDublinCoreDs, SuriService, TechnicalMetadataService, VersionMetadataDS, VersionTag, WorkflowDefinitionDs, WorkflowDs, WorkflowObject

Constant Summary collapse

Config =
Configuration.new(YAML.load(File.read(File.expand_path('../../../config/config_defaults.yml', __FILE__))))
VERSION =
'5.10.2'.freeze
INDEX_VERSION_FIELD =
'dor_services_version_ssi'.freeze
@@registered_classes =
{}

Class Method Summary collapse

Class Method Details

.configure(*args, &block) ⇒ Object



13
14
15
# File 'lib/dor-services.rb', line 13

def configure(*args, &block)
  Dor::Config.configure *args, &block
end

.ensure_models_loaded!Object



63
64
65
# File 'lib/dor-services.rb', line 63

def ensure_models_loaded!
  [Item, Set, Collection, AdminPolicyObject, WorkflowObject]
end

.find(pid, opts = {}) ⇒ Object

Get objectType information from solr and load the correct class the first time, saving the overhead of using ActiveFedora::Base#adapt_to. It falls back to Dor.load_instance() if the item is not in the index, or is improperly indexed.

Parameters:

  • pid (String)

    The object’s PID

Returns:

  • (Object)

    the ActiveFedora-modeled object



35
36
37
38
# File 'lib/dor-services.rb', line 35

def find(pid, opts = {})
  opts[:rows] = 1 # we know we are going to just pay attention to the .first doc anyway
  find_all(%(id:"#{pid}"), opts).first || load_instance(pid)
end

.find_all(query, opts = {}) ⇒ Object

TODO: return enumerable and lazy load_instance TODO: restrict fieldlist (fl) for non-:lightweight queries



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/dor-services.rb', line 42

def find_all(query, opts = {})
  ensure_models_loaded!
  resp = SearchService.query query, opts
  resp.docs.collect do |solr_doc|
    doc_version = solr_doc[INDEX_VERSION_FIELD].first rescue '0.0.0'
    doc_version = Gem::Version.new(doc_version)
    object_type = Array(solr_doc[ActiveFedora::SolrService.solr_name('objectType', :symbol)]).first
    object_class = registered_classes[object_type] || ActiveFedora::Base
    if opts[:lightweight] && doc_version >= Gem::Version.new('3.1.0')
      begin
        object_class.load_instance_from_solr solr_doc['id'], solr_doc
      rescue Exception => e
        ActiveFedora.logger.warn("Exception: '#{e.message}' trying to load #{solr_doc['id']} from solr. Loading from Fedora")
        load_instance(solr_doc['id'])
      end
    else
      load_instance solr_doc['id']
    end
  end
end

.load_instance(pid) ⇒ Object

Load an object and inspect its identityMetadata to figure out what class to adapt it to. This is necessary when the object is not indexed, or the index is missing the objectType property.

Parameters:

  • pid (String)

    The object’s PID



21
22
23
24
25
26
27
28
# File 'lib/dor-services.rb', line 21

def load_instance(pid)
  ensure_models_loaded!
  obj = Dor::Abstract.find pid
  return nil if obj.new_object?
  object_type = obj..objectType.first
  object_class = registered_classes[object_type] || Dor::Item
  obj.adapt_to(object_class)
end

.rootObject



67
68
69
# File 'lib/dor-services.rb', line 67

def root
  File.dirname(__FILE__)
end