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.('../../../config/config_defaults.yml', __FILE__))))
- VERSION =
'5.10.2'.freeze
- INDEX_VERSION_FIELD =
'dor_services_version_ssi'.freeze
- @@registered_classes =
{}
Class Method Summary collapse
- .configure(*args, &block) ⇒ Object
- .ensure_models_loaded! ⇒ Object
-
.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.
-
.find_all(query, opts = {}) ⇒ Object
TODO: return enumerable and lazy load_instance TODO: restrict fieldlist (fl) for non-:lightweight queries.
-
.load_instance(pid) ⇒ Object
Load an object and inspect its identityMetadata to figure out what class to adapt it to.
- .root ⇒ Object
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.
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.}' 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.
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.identityMetadata.objectType.first object_class = registered_classes[object_type] || Dor::Item obj.adapt_to(object_class) end |
.root ⇒ Object
67 68 69 |
# File 'lib/dor-services.rb', line 67 def root File.dirname(__FILE__) end |