Module: Dor

Extended by:
ActiveSupport::Autoload
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/abstract.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/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, Contentable, Describable, Editable, Embargoable, Eventable, Geoable, Governable, Identifiable, Itemizable, Preservable, Processable, Publishable, Releaseable, Rightsable, Shelvable, Versionable, Versioning, Workflow Classes: Abstract, AdminPolicyObject, AdministrativeMetadataDS, Agreement, 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.16.0'.freeze
INDEX_VERSION_FIELD =
'dor_services_version_ssi'.freeze
@@registered_classes =
{}

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.configure(*args, &block) ⇒ Object



15
16
17
# File 'lib/dor-services.rb', line 15

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

.ensure_models_loaded!Object

Deprecated.


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

def ensure_models_loaded!
  ActiveSupport::Deprecation.warn 'Dor.ensure_models_loaded! is unnecessary and has been deprecated.'
  eager_load!
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



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

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



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

def find_all(query, opts = {})
  resp = SearchService.query query, opts
  resp['response']['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
        Dor.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



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

def load_instance(pid)
  obj = Dor::Abstract.find pid, cast: false
  return nil if obj.new_record?
  obj.adapt_to_cmodel
end

.loggerObject



71
72
73
74
75
76
77
78
# File 'lib/dor-services.rb', line 71

def logger
  require 'logger'
  @logger ||= if defined?(::Rails) && ::Rails.respond_to?(:logger)
      Rails.logger
    else
      Logger.new(STDOUT)
    end
end

.rootObject



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

def root
  File.dirname(__FILE__)
end

Instance Method Details

#loggerObject



81
82
83
# File 'lib/dor-services.rb', line 81

def logger
  Dor.logger
end