dor-services 6.8.0 → 7.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/config/config_defaults.yml +0 -27
- data/config/dev_console_env.rb.example +0 -17
- data/lib/dor-services.rb +9 -73
- data/lib/dor/config.rb +1 -30
- data/lib/dor/datastreams/content_metadata_ds.rb +8 -0
- data/lib/dor/datastreams/desc_metadata_ds.rb +19 -0
- data/lib/dor/datastreams/identity_metadata_ds.rb +65 -0
- data/lib/dor/datastreams/rights_metadata_ds.rb +14 -2
- data/lib/dor/datastreams/workflow_definition_ds.rb +1 -1
- data/lib/dor/datastreams/workflow_ds.rb +0 -15
- data/lib/dor/indexers/identifiable_indexer.rb +8 -4
- data/lib/dor/indexers/releasable_indexer.rb +7 -1
- data/lib/dor/models/abstract.rb +143 -8
- data/lib/dor/models/admin_policy_object.rb +0 -3
- data/lib/dor/models/collection.rb +0 -2
- data/lib/dor/models/concerns/embargoable.rb +7 -60
- data/lib/dor/models/etd.rb +100 -0
- data/lib/dor/models/item.rb +12 -28
- data/lib/dor/models/part.rb +18 -0
- data/lib/dor/models/set.rb +0 -2
- data/lib/dor/services/collection_service.rb +36 -0
- data/lib/dor/services/embargo_service.rb +93 -0
- data/lib/dor/services/ontology.rb +0 -18
- data/lib/dor/services/public_desc_metadata_service.rb +7 -11
- data/lib/dor/services/search_service.rb +0 -40
- data/lib/dor/version.rb +1 -1
- data/lib/dor/workflow/document.rb +0 -7
- metadata +15 -78
- data/lib/dor/models/concerns/assembleable.rb +0 -18
- data/lib/dor/models/concerns/contentable.rb +0 -185
- data/lib/dor/models/concerns/describable.rb +0 -82
- data/lib/dor/models/concerns/eventable.rb +0 -18
- data/lib/dor/models/concerns/geoable.rb +0 -14
- data/lib/dor/models/concerns/governable.rb +0 -101
- data/lib/dor/models/concerns/identifiable.rb +0 -172
- data/lib/dor/models/concerns/itemizable.rb +0 -42
- data/lib/dor/models/concerns/preservable.rb +0 -46
- data/lib/dor/models/concerns/processable.rb +0 -86
- data/lib/dor/models/concerns/publishable.rb +0 -76
- data/lib/dor/models/concerns/releaseable.rb +0 -118
- data/lib/dor/models/concerns/rightsable.rb +0 -25
- data/lib/dor/models/concerns/shelvable.rb +0 -15
- data/lib/dor/models/concerns/versionable.rb +0 -72
- data/lib/dor/services/ability.rb +0 -77
- data/lib/dor/services/cleanup_reset_service.rb +0 -103
- data/lib/dor/services/datastream_builder.rb +0 -96
- data/lib/dor/services/decommission_service.rb +0 -31
- data/lib/dor/services/digital_stacks_service.rb +0 -125
- data/lib/dor/services/dublin_core_service.rb +0 -45
- data/lib/dor/services/file_metadata_merge_service.rb +0 -71
- data/lib/dor/services/indexing_service.rb +0 -131
- data/lib/dor/services/merge_service.rb +0 -105
- data/lib/dor/services/public_xml_service.rb +0 -116
- data/lib/dor/services/publish_metadata_service.rb +0 -99
- data/lib/dor/services/reset_workspace_service.rb +0 -27
- data/lib/dor/services/sdr_ingest_service.rb +0 -172
- data/lib/dor/services/secondary_file_name_service.rb +0 -10
- data/lib/dor/services/shelving_service.rb +0 -69
- data/lib/dor/services/technical_metadata_service.rb +0 -232
- data/lib/dor/services/version_service.rb +0 -84
- data/lib/dor/utils/sdr_client.rb +0 -94
@@ -1,84 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Dor
|
4
|
-
# Open and close versions
|
5
|
-
class VersionService
|
6
|
-
def self.open(work, opts = {})
|
7
|
-
new(work).open(opts)
|
8
|
-
end
|
9
|
-
|
10
|
-
def self.close(work, opts = {})
|
11
|
-
new(work).close(opts)
|
12
|
-
end
|
13
|
-
|
14
|
-
def initialize(work)
|
15
|
-
@work = work
|
16
|
-
end
|
17
|
-
|
18
|
-
# Increments the version number and initializes versioningWF for the object
|
19
|
-
# @param [Hash] opts optional params
|
20
|
-
# @option opts [Boolean] :assume_accessioned If true, does not check whether object has been accessioned.
|
21
|
-
# @option opts [Boolean] :create_workflows_ds If false, create_workflow() will not initialize the workflows datastream.
|
22
|
-
# @option opts [Hash] :vers_md_upd_info If present, used to add to the events datastream and set the desc and significance on the versionMetadata datastream
|
23
|
-
# @raise [Dor::Exception] if the object hasn't been accessioned, or if a version is already opened
|
24
|
-
def open(opts = {})
|
25
|
-
# During local development, we need a way to open a new version even if the object has not been accessioned.
|
26
|
-
raise(Dor::Exception, 'Object net yet accessioned') unless
|
27
|
-
opts[:assume_accessioned] || Dor::Config.workflow.client.lifecycle('dor', work.pid, 'accessioned')
|
28
|
-
raise Dor::VersionAlreadyOpenError, 'Object already opened for versioning' if open?
|
29
|
-
raise Dor::Exception, 'Object currently being accessioned' if Dor::Config.workflow.client.active_lifecycle('dor', work.pid, 'submitted')
|
30
|
-
|
31
|
-
sdr_version = Sdr::Client.current_version work.pid
|
32
|
-
|
33
|
-
vmd_ds = work.versionMetadata
|
34
|
-
vmd_ds.sync_then_increment_version sdr_version
|
35
|
-
vmd_ds.save unless work.new_record?
|
36
|
-
|
37
|
-
k = :create_workflows_ds
|
38
|
-
if opts.key?(k)
|
39
|
-
# During local development, Hydrus (or another app w/ local Fedora) does not want to initialize workflows datastream.
|
40
|
-
CreateWorkflowService.create_workflow(work, name: 'versioningWF', create_ds: opts[k])
|
41
|
-
else
|
42
|
-
CreateWorkflowService.create_workflow(work, name: 'versioningWF')
|
43
|
-
end
|
44
|
-
|
45
|
-
vmd_upd_info = opts[:vers_md_upd_info]
|
46
|
-
return unless vmd_upd_info
|
47
|
-
|
48
|
-
work.events.add_event('open', vmd_upd_info[:opening_user_name], "Version #{vmd_ds.current_version_id} opened")
|
49
|
-
vmd_ds.update_current_version(description: vmd_upd_info[:description], significance: vmd_upd_info[:significance].to_sym)
|
50
|
-
work.save
|
51
|
-
end
|
52
|
-
|
53
|
-
# Sets versioningWF:submit-version to completed and initiates accessionWF for the object
|
54
|
-
# @param [Hash] opts optional params
|
55
|
-
# @option opts [String] :description describes the version change
|
56
|
-
# @option opts [Symbol] :significance which part of the version tag to increment
|
57
|
-
# :major, :minor, :admin (see Dor::VersionTag#increment)
|
58
|
-
# @option opts [String] :version_num version number to archive rows with. Otherwise, current version is used
|
59
|
-
# @option opts [Boolean] :start_accesion set to true if you want accessioning to start (default), false otherwise
|
60
|
-
# @raise [Dor::Exception] if the object hasn't been opened for versioning, or if accessionWF has
|
61
|
-
# already been instantiated or the current version is missing a tag or description
|
62
|
-
def close(opts = {})
|
63
|
-
unless opts.empty?
|
64
|
-
work.versionMetadata.update_current_version opts
|
65
|
-
work.versionMetadata.save
|
66
|
-
end
|
67
|
-
|
68
|
-
raise Dor::Exception, 'latest version in versionMetadata requires tag and description before it can be closed' unless work.versionMetadata.current_version_closeable?
|
69
|
-
raise Dor::Exception, 'Trying to close version on an object not opened for versioning' unless open?
|
70
|
-
raise Dor::Exception, 'accessionWF already created for versioned object' if Dor::Config.workflow.client.active_lifecycle('dor', work.pid, 'submitted')
|
71
|
-
|
72
|
-
Dor::Config.workflow.client.close_version 'dor', work.pid, opts.fetch(:start_accession, true) # Default to creating accessionWF when calling close_version
|
73
|
-
end
|
74
|
-
|
75
|
-
# @return [Boolean] true if 'opened' lifecycle is active, false otherwise
|
76
|
-
def open?
|
77
|
-
return true if Dor::Config.workflow.client.active_lifecycle('dor', work.pid, 'opened')
|
78
|
-
|
79
|
-
false
|
80
|
-
end
|
81
|
-
|
82
|
-
attr_reader :work
|
83
|
-
end
|
84
|
-
end
|
data/lib/dor/utils/sdr_client.rb
DELETED
@@ -1,94 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'moab'
|
4
|
-
module Sdr
|
5
|
-
class Client
|
6
|
-
extend Deprecation
|
7
|
-
|
8
|
-
class << self
|
9
|
-
# @param [String] druid id of the object you want the version of
|
10
|
-
# @return [Integer] the current version from SDR
|
11
|
-
def current_version(druid)
|
12
|
-
xml = client["objects/#{druid}/current_version"].get
|
13
|
-
|
14
|
-
begin
|
15
|
-
doc = Nokogiri::XML xml
|
16
|
-
raise if doc.root.name != 'currentVersion'
|
17
|
-
|
18
|
-
return Integer(doc.text)
|
19
|
-
rescue StandardError
|
20
|
-
raise "Unable to parse XML from SDR current_version API call: #{xml}"
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
# @param [String] dsname The identifier of the metadata datastream
|
25
|
-
# @return [String] The datastream contents from the previous version of the digital object (fetched from SDR storage)
|
26
|
-
def get_sdr_metadata(druid, dsname)
|
27
|
-
Deprecation.warn(self, 'Sdr::Client.get_sdr_metadata is deprecated and will be removed in dor-services 7. ' \
|
28
|
-
'Use Dor::Services::Client.object(object_identifier).sdr.metadatra(datastream:) instead')
|
29
|
-
|
30
|
-
client["objects/#{druid}/metadata/#{dsname}.xml"].get
|
31
|
-
rescue RestClient::ResourceNotFound
|
32
|
-
nil
|
33
|
-
end
|
34
|
-
|
35
|
-
# @param [String] druid The object identifier
|
36
|
-
# @return [Moab::SignatureCatalog] the catalog of all files previously ingested
|
37
|
-
def get_signature_catalog(druid)
|
38
|
-
Deprecation.warn(self, 'Sdr::Client.get_signature_catalog is deprecated and will be removed in dor-services 7. ' \
|
39
|
-
'Use Dor::Services::Client.object(object_identifier).sdr.signature_catalog instead')
|
40
|
-
|
41
|
-
response = client["objects/#{druid}/manifest/signatureCatalog.xml"].get
|
42
|
-
Moab::SignatureCatalog.parse(response)
|
43
|
-
rescue RestClient::ResourceNotFound
|
44
|
-
Moab::SignatureCatalog.new(digital_object_id: druid, version_id: 0)
|
45
|
-
end
|
46
|
-
|
47
|
-
# Retrieves file difference manifest for contentMetadata from SDR
|
48
|
-
#
|
49
|
-
# @param [String] druid The object identifier
|
50
|
-
# @param [String] current_content The contentMetadata xml
|
51
|
-
# @param [String] subset ('all') The keyword for file attributes 'shelve', 'preserve', 'publish'.
|
52
|
-
# @param [Integer, NilClass] version (nil)
|
53
|
-
# @return [Moab::FileInventoryDifference] the differences for the given content and subset (i.e.: cm_inv_diff manifest)
|
54
|
-
def get_content_diff(druid, current_content, subset = 'all', version = nil)
|
55
|
-
Deprecation.warn(self, 'Sdr::Client.get_content_diff is deprecated and will be removed in dor-services 7. ' \
|
56
|
-
'Use Dor::Services::Client.object(object_identifier).sdr.content_diff(current_content:, subset:, version:) instead')
|
57
|
-
|
58
|
-
unless subset.is_a? String
|
59
|
-
Deprecation.warn(self, "subset parameter must be a string. You provided '#{subset.inspect}'. This will be an error in version 7")
|
60
|
-
subset = subset.to_s
|
61
|
-
end
|
62
|
-
raise Dor::ParameterError, "Invalid subset value: #{subset}" unless %w(all shelve preserve publish).include?(subset)
|
63
|
-
|
64
|
-
query_string = { subset: subset }
|
65
|
-
query_string[:version] = version.to_s unless version.nil?
|
66
|
-
query_string = URI.encode_www_form(query_string)
|
67
|
-
sdr_query = "objects/#{druid}/cm-inv-diff?#{query_string}"
|
68
|
-
response = client[sdr_query].post(current_content, content_type: 'application/xml')
|
69
|
-
Moab::FileInventoryDifference.parse(response)
|
70
|
-
end
|
71
|
-
|
72
|
-
# This was used by Argo but is no longer used anywhere
|
73
|
-
def get_preserved_file_content(druid, filename, version)
|
74
|
-
Deprecation.warn(self, 'Sdr::Client.get_preserved_file_content is deprecated and will be removed in dor-services 7. ' \
|
75
|
-
'Use Dor::Services::Client.object(object_identifier).files.preserved_content(filename:, version:) instead')
|
76
|
-
|
77
|
-
client["objects/#{druid}/content/#{URI.encode(filename)}?version=#{version}"].get
|
78
|
-
end
|
79
|
-
|
80
|
-
def client
|
81
|
-
if Dor::Config.sdr.url
|
82
|
-
# dor-services-app takes this path
|
83
|
-
Dor::Config.sdr.rest_client
|
84
|
-
elsif Dor::Config.dor_services.url
|
85
|
-
# Anything that is not dor-servics-app should be through here.
|
86
|
-
Deprecation.warn(self, 'you are using dor-services to invoke calls to dor-services-app. Use dor-services-client instead.')
|
87
|
-
Dor::Config.dor_services.rest_client['v1/sdr']
|
88
|
-
else
|
89
|
-
raise Dor::ParameterError, 'Missing Dor::Config.sdr and/or Dor::Config.dor_services configuration'
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|