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,42 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'fileutils'
|
4
|
-
require 'uri'
|
5
|
-
|
6
|
-
module Dor
|
7
|
-
module Itemizable
|
8
|
-
extend ActiveSupport::Concern
|
9
|
-
extend Deprecation
|
10
|
-
self.deprecation_horizon = 'dor-services version 7.0.0'
|
11
|
-
|
12
|
-
included do
|
13
|
-
has_metadata name: 'contentMetadata', type: Dor::ContentMetadataDS, label: 'Content Metadata', control_group: 'M'
|
14
|
-
end
|
15
|
-
|
16
|
-
DIFF_FILENAME = 'cm_inv_diff'
|
17
|
-
|
18
|
-
# Deletes all cm_inv_diff files in the workspace for the Item
|
19
|
-
def clear_diff_cache
|
20
|
-
raise ArgumentError, 'Missing Dor::Config.stacks.local_workspace_root' if Dor::Config.stacks.local_workspace_root.nil?
|
21
|
-
|
22
|
-
druid = DruidTools::Druid.new(pid, Dor::Config.stacks.local_workspace_root)
|
23
|
-
diff_pattern = File.join(druid.temp_dir, DIFF_FILENAME + '.*')
|
24
|
-
FileUtils.rm_f Dir.glob(diff_pattern)
|
25
|
-
end
|
26
|
-
deprecation_deprecate clear_diff_cache: 'No longer used by any DLSS code and will be removed without replacement'
|
27
|
-
|
28
|
-
# Retrieves file difference manifest for contentMetadata from SDR
|
29
|
-
#
|
30
|
-
# @param [Symbol] subset keyword for file attributes :shelve, :preserve, :publish. Default is :all.
|
31
|
-
# @param [String] version
|
32
|
-
# @return [Moab::FileInventoryDifference] XML contents of cm_inv_diff manifest
|
33
|
-
def get_content_diff(subset = :all, version = nil)
|
34
|
-
raise Dor::ParameterError, 'Missing Dor::Config.stacks.local_workspace_root' if Dor::Config.stacks.local_workspace_root.nil?
|
35
|
-
|
36
|
-
raise Dor::Exception, 'Missing contentMetadata datastream' if !respond_to?(:contentMetadata) || contentMetadata.nil?
|
37
|
-
|
38
|
-
Sdr::Client.get_content_diff(pid, contentMetadata.content, subset.to_s, version)
|
39
|
-
end
|
40
|
-
deprecation_deprecate get_content_diff: 'Use Sdr::Client.get_content_diff instead'
|
41
|
-
end
|
42
|
-
end
|
@@ -1,46 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Dor
|
4
|
-
module Preservable
|
5
|
-
extend ActiveSupport::Concern
|
6
|
-
extend Deprecation
|
7
|
-
self.deprecation_horizon = 'dor-services version 7.0.0'
|
8
|
-
|
9
|
-
included do
|
10
|
-
has_metadata name: 'provenanceMetadata', type: ProvenanceMetadataDS, label: 'Provenance Metadata'
|
11
|
-
end
|
12
|
-
|
13
|
-
# This is invoked by Robots::DorRepo::Accession::ProvenanceMetadata in common-accessioning
|
14
|
-
# as well as Argo's ItemsController#fix_missing_provenance
|
15
|
-
def build_provenanceMetadata_datastream(workflow_id, event_text)
|
16
|
-
workflow_provenance = create_workflow_provenance(workflow_id, event_text)
|
17
|
-
ds = datastreams['provenanceMetadata']
|
18
|
-
ds.label ||= 'Provenance Metadata'
|
19
|
-
ds.ng_xml = workflow_provenance
|
20
|
-
ds.save
|
21
|
-
end
|
22
|
-
|
23
|
-
def sdr_ingest_transfer(agreement_id)
|
24
|
-
SdrIngestService.transfer(self, agreement_id)
|
25
|
-
end
|
26
|
-
deprecation_deprecate sdr_ingest_transfer: 'Use SdrIngestService.transfer instead'
|
27
|
-
|
28
|
-
private
|
29
|
-
|
30
|
-
# @return [Nokogiri::Document]
|
31
|
-
def create_workflow_provenance(workflow_id, event_text)
|
32
|
-
builder = Nokogiri::XML::Builder.new do |xml|
|
33
|
-
xml.provenanceMetadata(objectId: pid) do
|
34
|
-
xml.agent(name: 'DOR') do
|
35
|
-
xml.what(object: pid) do
|
36
|
-
xml.event(who: "DOR-#{workflow_id}", when: Time.new.iso8601) do
|
37
|
-
xml.text(event_text)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
builder.doc
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
@@ -1,86 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'equivalent-xml'
|
4
|
-
|
5
|
-
module Dor
|
6
|
-
module Processable
|
7
|
-
extend ActiveSupport::Concern
|
8
|
-
extend Deprecation
|
9
|
-
self.deprecation_horizon = 'dor-services version 7.0.0'
|
10
|
-
|
11
|
-
included do
|
12
|
-
has_metadata name: 'workflows',
|
13
|
-
type: Dor::WorkflowDs,
|
14
|
-
label: 'Workflows',
|
15
|
-
control_group: 'E',
|
16
|
-
autocreate: true
|
17
|
-
end
|
18
|
-
|
19
|
-
STEPS = ActiveSupport::Deprecation::DeprecatedConstantProxy.new('STEPS', 'Dor::StatusService::STEPS')
|
20
|
-
|
21
|
-
# The ContentMetadata and DescMetadata robot are allowed to build the
|
22
|
-
# datastream by reading a file from the /dor/workspace that matches the
|
23
|
-
# datastream name. This allows assembly or pre-assembly to prebuild the
|
24
|
-
# datastreams from templates or using other means
|
25
|
-
# (like the assembly-objectfile gem) and then have those datastreams picked
|
26
|
-
# up and added to the object during accessionWF.
|
27
|
-
#
|
28
|
-
# This method builds that datastream using the content of a file if such a file
|
29
|
-
# exists and is newer than the object's current datastream (see above); otherwise,
|
30
|
-
# builds the datastream by calling build_fooMetadata_datastream.
|
31
|
-
# @param [String] datastream name of a datastream (e.g. "fooMetadata")
|
32
|
-
# @param [Boolean] force overwrite existing datastream
|
33
|
-
# @param [Boolean] is_required
|
34
|
-
# @return [ActiveFedora::Datastream]
|
35
|
-
def build_datastream(datastream, force = false, is_required = false)
|
36
|
-
ds = datastreams[datastream]
|
37
|
-
builder = Dor::DatastreamBuilder.new(object: self,
|
38
|
-
datastream: ds,
|
39
|
-
force: force,
|
40
|
-
required: is_required)
|
41
|
-
builder.build
|
42
|
-
|
43
|
-
ds
|
44
|
-
end
|
45
|
-
deprecation_deprecate build_datastream: 'Use Dor::DatastreamBuilder instead'
|
46
|
-
|
47
|
-
def cleanup
|
48
|
-
CleanupService.cleanup(self)
|
49
|
-
end
|
50
|
-
deprecation_deprecate cleanup: 'Use CleanupService.cleanup instead'
|
51
|
-
|
52
|
-
# @return [Hash{Symbol => Object}] including :current_version, :status_code and :status_time
|
53
|
-
def status_info
|
54
|
-
StatusService.status_info(self)
|
55
|
-
end
|
56
|
-
deprecation_deprecate status_info: 'Use StatusService.status_info instead'
|
57
|
-
|
58
|
-
# @param [Boolean] include_time
|
59
|
-
# @return [String] single composed status from status_info
|
60
|
-
def status(include_time = false)
|
61
|
-
StatusService.status(self, include_time)
|
62
|
-
end
|
63
|
-
deprecation_deprecate status: 'Use StatusService.status instead'
|
64
|
-
|
65
|
-
def milestones
|
66
|
-
StatusService.new(self).milestones
|
67
|
-
end
|
68
|
-
deprecation_deprecate status_info: 'Use StatusService#milestones instead'
|
69
|
-
|
70
|
-
# Initilizes workflow for the object in the workflow service
|
71
|
-
# It will set the priorty of the new workflow to the current_priority if it is > 0
|
72
|
-
# It will set lane_id from the item's APO default workflow lane
|
73
|
-
# @param [String] name of the workflow to be initialized
|
74
|
-
# @param [Boolean] create_ds create a 'workflows' datastream in Fedora for the object
|
75
|
-
# @param [Integer] priority the workflow's priority level
|
76
|
-
def create_workflow(name, create_ds = true, priority = 0)
|
77
|
-
CreateWorkflowService.create_workflow(self, name: name, create_ds: create_ds, priority: priority)
|
78
|
-
end
|
79
|
-
deprecation_deprecate create_workflow: 'Use Dor::Services::Client.object(object_identifier).workflow.create(wf_name:) instead'
|
80
|
-
|
81
|
-
def initialize_workflow(name, create_ds = true, priority = 0)
|
82
|
-
warn 'WARNING: initialize_workflow is deprecated, use create_workflow instead'
|
83
|
-
create_workflow(name, create_ds, priority)
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
@@ -1,76 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'dor/datastreams/content_metadata_ds'
|
4
|
-
require 'fileutils'
|
5
|
-
|
6
|
-
module Dor
|
7
|
-
module Publishable
|
8
|
-
extend Deprecation
|
9
|
-
extend ActiveSupport::Concern
|
10
|
-
self.deprecation_horizon = 'dor-services version 7.0.0'
|
11
|
-
|
12
|
-
# Compute the thumbnail for this object following the rules at https://consul.stanford.edu/display/chimera/The+Rules+of+Thumb
|
13
|
-
# Used by PublicXmlService
|
14
|
-
# @return [String] the computed thumb filename, with the druid prefix and a slash in front of it, e.g. oo000oo0001/filenamewith space.jp2
|
15
|
-
def thumb
|
16
|
-
ThumbnailService.new(self).thumb
|
17
|
-
end
|
18
|
-
deprecation_deprecate :thumb
|
19
|
-
|
20
|
-
# Return a URI encoded version of the thumb image for use by indexers (leaving the extension of the filename)
|
21
|
-
# @return [String] URI encoded version of the thumb with the druid prefix, e.g. oo000oo0001%2Ffilenamewith%20space.jp2
|
22
|
-
def encoded_thumb
|
23
|
-
thumb_image = thumb # store the result locally, so we don't have to compute each time we use it below
|
24
|
-
return unless thumb_image
|
25
|
-
|
26
|
-
thumb_druid = thumb_image.split('/').first # the druid (before the first slash)
|
27
|
-
thumb_filename = thumb_image.split(/#{pid_regex}[\/]/).last # everything after the druid
|
28
|
-
"#{thumb_druid}%2F#{ERB::Util.url_encode(thumb_filename)}"
|
29
|
-
end
|
30
|
-
deprecation_deprecate :encoded_thumb
|
31
|
-
|
32
|
-
# Return a full qualified thumbnail image URL if the thumb is computable
|
33
|
-
# @return [String] fully qualified image URL for the computed thumbnail, e.g. https://stacks.stanford.edu/image/iiif/oo000oo0001%2Ffilenamewith%20space/full
|
34
|
-
def thumb_url
|
35
|
-
return unless encoded_thumb
|
36
|
-
|
37
|
-
thumb_basename = File.basename(encoded_thumb, File.extname(encoded_thumb)) # strip the extension for URL generation
|
38
|
-
"https://#{Dor::Config.stacks.host}/image/iiif/#{thumb_basename}/full/!400,400/0/default.jpg"
|
39
|
-
end
|
40
|
-
deprecation_deprecate :thumb_url
|
41
|
-
|
42
|
-
# strips away the relationships that should not be shown in public desc metadata
|
43
|
-
# @return [Nokogiri::XML]
|
44
|
-
def public_relationships
|
45
|
-
include_elements = ['fedora:isMemberOf', 'fedora:isMemberOfCollection', 'fedora:isConstituentOf']
|
46
|
-
rels_doc = Nokogiri::XML(datastreams['RELS-EXT'].content)
|
47
|
-
rels_doc.xpath('/rdf:RDF/rdf:Description/*', 'rdf' => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#').each do |rel|
|
48
|
-
unless include_elements.include?([rel.namespace.prefix, rel.name].join(':'))
|
49
|
-
rel.next_sibling.remove if rel.next_sibling.content.strip.empty?
|
50
|
-
rel.remove
|
51
|
-
end
|
52
|
-
end
|
53
|
-
rels_doc
|
54
|
-
end
|
55
|
-
|
56
|
-
# Generate the public .xml for a PURL page.
|
57
|
-
# @return [xml] The public xml for the item
|
58
|
-
def public_xml
|
59
|
-
PublicXmlService.new(self).to_xml
|
60
|
-
end
|
61
|
-
deprecation_deprecate public_xml: 'Use PublicXmlService#to_xml instead'
|
62
|
-
|
63
|
-
# Copies this object's public_xml to the Purl document cache if it is world discoverable
|
64
|
-
# otherwise, it prunes the object's metadata from the document cache
|
65
|
-
def publish_metadata
|
66
|
-
PublishMetadataService.publish(self)
|
67
|
-
end
|
68
|
-
deprecation_deprecate publish_metadata: 'use Dor::PublishMetadataService.publish(obj) instead or use publish_metadata_remotely'
|
69
|
-
|
70
|
-
# Call dor services app to have it publish the metadata
|
71
|
-
def publish_metadata_remotely
|
72
|
-
Dor::Services::Client.object(pid).publish
|
73
|
-
end
|
74
|
-
deprecation_deprecate publish_metadata_remotely: 'Use Dor::Services::Client.object(object_identifier).publish instead'
|
75
|
-
end
|
76
|
-
end
|
@@ -1,118 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'open-uri'
|
4
|
-
require 'retries'
|
5
|
-
|
6
|
-
module Dor
|
7
|
-
module Releaseable
|
8
|
-
extend ActiveSupport::Concern
|
9
|
-
extend Deprecation
|
10
|
-
self.deprecation_horizon = 'dor-services version 7.0.0'
|
11
|
-
|
12
|
-
# Add release tags to an item and initialize the item release workflow
|
13
|
-
# Each tag should be of the form !{:tag => 'Fitch : Batch2', :what => 'self', :to => 'Searchworks', :who => 'petucket', :release => true}
|
14
|
-
# @param release_tags [Hash, Array<Hash>] hash of a single release tag or an array of many such hashes
|
15
|
-
# @raise [ArgumentError] Raised if the tags are improperly supplied
|
16
|
-
def add_release_nodes_and_start_releaseWF(release_tags)
|
17
|
-
release_tags = [release_tags] unless release_tags.is_a?(Array)
|
18
|
-
|
19
|
-
# Add in each tag
|
20
|
-
release_tags.each do |r_tag|
|
21
|
-
add_release_node(r_tag[:release], r_tag)
|
22
|
-
end
|
23
|
-
|
24
|
-
# Save item to dor so the robots work with the latest data
|
25
|
-
save
|
26
|
-
create_workflow('releaseWF')
|
27
|
-
end
|
28
|
-
deprecation_deprecate add_release_nodes_and_start_releaseWF: 'No longer used by any DLSS code'
|
29
|
-
|
30
|
-
# Called in Dor::UpdateMarcRecordService (in dor-services-app too)
|
31
|
-
# Determine projects in which an item is released
|
32
|
-
# @param [Boolean] skip_live_purl set true to skip requesting from purl backend
|
33
|
-
# @return [Hash{String => Boolean}] all namespaces, keys are Project name Strings, values are Boolean
|
34
|
-
def released_for(skip_live_purl = false)
|
35
|
-
releases.released_for(skip_live_purl: skip_live_purl)
|
36
|
-
end
|
37
|
-
|
38
|
-
# Helper method to get the release tags as a nodeset
|
39
|
-
# @return [Nokogiri::XML::NodeSet] all release tags and their attributes
|
40
|
-
delegate :release_tags, to: :releases
|
41
|
-
deprecation_deprecate release_tags: 'use ReleaseTagService#release_tags instead'
|
42
|
-
|
43
|
-
# Take a hash of tags as obtained via Dor::Item.release_tags and returns the newest tag for each namespace
|
44
|
-
# @param tags [Hash] a hash of tags obtained via Dor::Item.release_tags or matching format
|
45
|
-
# @return [Hash] a hash of latest tags for each to value
|
46
|
-
def get_newest_release_tag(tags)
|
47
|
-
releases.newest_release_tag(tags)
|
48
|
-
end
|
49
|
-
deprecation_deprecate get_newest_release_tag: 'use ReleaseTagService#newest_release_tag instead'
|
50
|
-
|
51
|
-
def releases
|
52
|
-
@releases ||= ReleaseTagService.for(self)
|
53
|
-
end
|
54
|
-
|
55
|
-
# Determine if the supplied tag is a valid release tag that meets all requirements
|
56
|
-
#
|
57
|
-
# @param attrs [hash] A hash of attributes for the tag, must contain: :when, a ISO 8601 timestamp; :who, to identify who or what added the tag; and :to, a string identifying the release target
|
58
|
-
# @raise [RuntimeError] Raises an error of the first fault in the release tag
|
59
|
-
# @return [Boolean] Returns true if no errors found
|
60
|
-
def valid_release_attributes_and_tag(tag, attrs = {})
|
61
|
-
raise ArgumentError, ':when is not iso8601' if attrs[:when].match('\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z').nil?
|
62
|
-
|
63
|
-
%i[who to what].each do |check_attr|
|
64
|
-
raise ArgumentError, "#{check_attr} not supplied as a String" if attrs[check_attr].class != String
|
65
|
-
end
|
66
|
-
|
67
|
-
what_correct = false
|
68
|
-
%w(self collection).each do |allowed_what_value|
|
69
|
-
what_correct = true if attrs[:what] == allowed_what_value
|
70
|
-
end
|
71
|
-
raise ArgumentError, ':what must be self or collection' unless what_correct
|
72
|
-
raise ArgumentError, 'the value set for this tag is not a boolean' if !!tag != tag # rubocop:disable Style/DoubleNegation
|
73
|
-
|
74
|
-
true
|
75
|
-
end
|
76
|
-
deprecation_deprecate valid_release_attributes_and_tag: 'No longer used by any DLSS code'
|
77
|
-
|
78
|
-
# Add a release node for the item
|
79
|
-
# Will use the current time if timestamp not supplied. You can supply a timestap for correcting history, etc if desired
|
80
|
-
# Timestamp will be calculated by the function
|
81
|
-
#
|
82
|
-
# @param release [Boolean] True or false for the release node
|
83
|
-
# @param attrs [hash] A hash of any attributes to be placed onto the tag
|
84
|
-
# @return [Nokogiri::XML::Element] the tag added if successful
|
85
|
-
# @raise [ArgumentError] Raised if attributes are improperly supplied
|
86
|
-
#
|
87
|
-
# @example
|
88
|
-
# item.add_release_node(true,{:what=>'self',:to=>'Searchworks',:who=>'petucket'})
|
89
|
-
def add_release_node(release, attrs = {})
|
90
|
-
allowed_release_attributes = %i[what to who when] # any other release attributes sent in will be rejected and not stored
|
91
|
-
identity_metadata_ds = identityMetadata
|
92
|
-
attrs.delete_if { |key, _value| !allowed_release_attributes.include?(key) }
|
93
|
-
attrs[:when] = Time.now.utc.iso8601 if attrs[:when].nil? # add the timestamp
|
94
|
-
valid_release_attributes(release, attrs)
|
95
|
-
identity_metadata_ds.add_value(:release, release.to_s, attrs)
|
96
|
-
end
|
97
|
-
deprecation_deprecate add_release_node: 'No longer used by any DLSS code'
|
98
|
-
|
99
|
-
# Determine if the supplied tag is a valid release node that meets all requirements
|
100
|
-
#
|
101
|
-
# @param tag [Boolean] True or false for the release node
|
102
|
-
# @param attrs [hash] A hash of attributes for the tag, must contain :when, a ISO 8601 timestamp and :who to identify who or what added the tag, :to,
|
103
|
-
# @raise [ArgumentError] Raises an error of the first fault in the release tag
|
104
|
-
# @return [Boolean] Returns true if no errors found
|
105
|
-
def valid_release_attributes(tag, attrs = {})
|
106
|
-
raise ArgumentError, ':when is not iso8601' if attrs[:when].match('\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z').nil?
|
107
|
-
|
108
|
-
%i[who to what].each do |check_attr|
|
109
|
-
raise ArgumentError, "#{check_attr} not supplied as a String" if attrs[check_attr].class != String
|
110
|
-
end
|
111
|
-
raise ArgumentError, ':what must be self or collection' unless %w(self collection).include? attrs[:what]
|
112
|
-
raise ArgumentError, 'the value set for this tag is not a boolean' unless [true, false].include? tag
|
113
|
-
|
114
|
-
true
|
115
|
-
end
|
116
|
-
deprecation_deprecate valid_release_attributes: 'No longer used by any DLSS code'
|
117
|
-
end
|
118
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Dor
|
4
|
-
module Rightsable
|
5
|
-
extend ActiveSupport::Concern
|
6
|
-
|
7
|
-
included do
|
8
|
-
has_metadata name: 'rightsMetadata', type: Dor::RightsMetadataDS, label: 'Rights metadata'
|
9
|
-
end
|
10
|
-
|
11
|
-
def build_rightsMetadata_datastream(ds)
|
12
|
-
content_ds = admin_policy_object.datastreams['defaultObjectRights']
|
13
|
-
ds.dsLabel = 'Rights Metadata'
|
14
|
-
ds.ng_xml = content_ds.ng_xml.clone
|
15
|
-
end
|
16
|
-
|
17
|
-
def world_doc
|
18
|
-
Nokogiri::XML::Builder.new do |xml|
|
19
|
-
xml.access(type: 'read') do
|
20
|
-
xml.machine { xml.world }
|
21
|
-
end
|
22
|
-
end.doc
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Dor
|
4
|
-
module Shelvable
|
5
|
-
extend Deprecation
|
6
|
-
extend ActiveSupport::Concern
|
7
|
-
self.deprecation_horizon = 'dor-services version 7.0.0'
|
8
|
-
|
9
|
-
# Push file changes for shelve-able files into the stacks
|
10
|
-
def shelve
|
11
|
-
ShelvingService.shelve(self)
|
12
|
-
end
|
13
|
-
deprecation_deprecate shelve: 'Use ShelvingService.shelve(work) instead'
|
14
|
-
end
|
15
|
-
end
|
@@ -1,72 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Dor
|
4
|
-
module Versionable
|
5
|
-
extend ActiveSupport::Concern
|
6
|
-
extend Deprecation
|
7
|
-
self.deprecation_horizon = 'dor-services version 7.0.0'
|
8
|
-
|
9
|
-
included do
|
10
|
-
has_metadata name: 'versionMetadata', type: Dor::VersionMetadataDS, label: 'Version Metadata', autocreate: true
|
11
|
-
end
|
12
|
-
|
13
|
-
# Increments the version number and initializes versioningWF for the object
|
14
|
-
# @param [Hash] opts optional params
|
15
|
-
# @option opts [Boolean] :assume_accessioned If true, does not check whether object has been accessioned.
|
16
|
-
# @option opts [Boolean] :create_workflows_ds If false, create_workflow() will not initialize the workflows datastream.
|
17
|
-
# @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
|
18
|
-
# @raise [Dor::Exception] if the object hasn't been accessioned, or if a version is already opened
|
19
|
-
def open_new_version(opts = {})
|
20
|
-
VersionService.open(self, opts)
|
21
|
-
end
|
22
|
-
deprecation_deprecate open_new_version: 'Use Dor::Services::Client.object(object_identifier).open_new_version(**params) instead'
|
23
|
-
|
24
|
-
def current_version
|
25
|
-
versionMetadata.current_version_id
|
26
|
-
end
|
27
|
-
|
28
|
-
# Sets versioningWF:submit-version to completed and initiates accessionWF for the object
|
29
|
-
# @param [Hash] opts optional params
|
30
|
-
# @option opts [String] :description describes the version change
|
31
|
-
# @option opts [Symbol] :significance which part of the version tag to increment
|
32
|
-
# :major, :minor, :admin (see Dor::VersionTag#increment)
|
33
|
-
# @option opts [String] :version_num version number to archive rows with. Otherwise, current version is used
|
34
|
-
# @option opts [Boolean] :start_accesion set to true if you want accessioning to start (default), false otherwise
|
35
|
-
# @raise [Dor::Exception] if the object hasn't been opened for versioning, or if accessionWF has
|
36
|
-
# already been instantiated or the current version is missing a tag or description
|
37
|
-
def close_version(opts = {})
|
38
|
-
VersionService.close(self, opts)
|
39
|
-
end
|
40
|
-
deprecation_deprecate close_version: 'Use Dor::Services::Client.object(object_identifier).close_version(**params) instead'
|
41
|
-
|
42
|
-
# @return [Boolean] true if 'opened' lifecycle is active, false otherwise
|
43
|
-
def new_version_open?
|
44
|
-
VersionService.new(self).open?
|
45
|
-
end
|
46
|
-
deprecation_deprecate new_version_open?: 'Use VersionService.open? instead'
|
47
|
-
|
48
|
-
# This is used by Argo and the MergeService
|
49
|
-
# @return [Boolean] true if the object is in a state that allows it to be modified.
|
50
|
-
# States that will allow modification are: has not been submitted for accessioning, has an open version or has sdr-ingest set to hold
|
51
|
-
def allows_modification?
|
52
|
-
if Dor::Config.workflow.client.lifecycle('dor', pid, 'submitted') &&
|
53
|
-
!VersionService.new(self).open? &&
|
54
|
-
Dor::Config.workflow.client.workflow_status('dor', pid, 'accessionWF', 'sdr-ingest-transfer') != 'hold'
|
55
|
-
false
|
56
|
-
else
|
57
|
-
true
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
# Following chart of processes on this consul page: https://consul.stanford.edu/display/chimera/Versioning+workflows
|
62
|
-
def start_version
|
63
|
-
open_new_version
|
64
|
-
end
|
65
|
-
deprecation_deprecate start_version: 'Use Dor::Services::Client.object(object_identifier).open_new_version(**params) instead'
|
66
|
-
|
67
|
-
def submit_version
|
68
|
-
close_version
|
69
|
-
end
|
70
|
-
deprecation_deprecate submit_version: 'Use Dor::Services::Client.object(object_identifier).close_version(**params) instead'
|
71
|
-
end
|
72
|
-
end
|