moab-versioning 4.2.1 → 4.4.2
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 +5 -5
- data/lib/moab.rb +3 -2
- data/lib/moab/bagger.rb +25 -20
- data/lib/moab/config.rb +39 -8
- data/lib/moab/deposit_bag_validator.rb +22 -17
- data/lib/moab/exceptions.rb +10 -8
- data/lib/moab/file_group.rb +23 -22
- data/lib/moab/file_group_difference.rb +35 -35
- data/lib/moab/file_group_difference_subset.rb +5 -5
- data/lib/moab/file_instance.rb +4 -3
- data/lib/moab/file_instance_difference.rb +5 -5
- data/lib/moab/file_inventory.rb +25 -31
- data/lib/moab/file_inventory_difference.rb +11 -11
- data/lib/moab/file_manifestation.rb +8 -7
- data/lib/moab/file_signature.rb +35 -41
- data/lib/moab/signature_catalog.rb +19 -21
- data/lib/moab/signature_catalog_entry.rb +5 -5
- data/lib/moab/stanford.rb +2 -0
- data/lib/moab/storage_object.rb +23 -24
- data/lib/moab/storage_object_validator.rb +44 -16
- data/lib/moab/storage_object_version.rb +45 -40
- data/lib/moab/storage_repository.rb +59 -24
- data/lib/moab/storage_services.rb +17 -10
- data/lib/moab/utc_time.rb +3 -3
- data/lib/moab/verification_result.rb +3 -4
- data/lib/moab/version_metadata.rb +4 -4
- data/lib/moab/version_metadata_entry.rb +6 -6
- data/lib/moab/version_metadata_event.rb +1 -1
- data/lib/serializer.rb +2 -0
- data/lib/serializer/manifest.rb +9 -7
- data/lib/serializer/serializable.rb +41 -35
- data/lib/stanford/active_fedora_object.rb +1 -1
- data/lib/stanford/content_inventory.rb +40 -34
- data/lib/stanford/dor_metadata.rb +4 -3
- data/lib/stanford/moab_storage_directory.rb +4 -2
- data/lib/stanford/storage_object_validator.rb +1 -1
- data/lib/stanford/storage_repository.rb +9 -6
- data/lib/stanford/storage_services.rb +6 -6
- metadata +23 -38
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Stanford
|
4
4
|
# Stanford-specific utility methods for interfacing with DOR metadata files
|
@@ -31,11 +31,12 @@ module Stanford
|
|
31
31
|
# @return [FileInventory] Inventory of the files under the specified directory
|
32
32
|
def inventory_from_directory(directory, version_id = nil)
|
33
33
|
version_id ||= @version_id
|
34
|
-
version_inventory = Moab::FileInventory.new(type: 'version', digital_object_id: @digital_object_id,
|
34
|
+
version_inventory = Moab::FileInventory.new(type: 'version', digital_object_id: @digital_object_id,
|
35
|
+
version_id: version_id)
|
35
36
|
content_metadata = IO.read(File.join(directory, 'contentMetadata.xml'))
|
36
37
|
content_group = Stanford::ContentInventory.new.group_from_cm(content_metadata, 'preserve')
|
37
38
|
version_inventory.groups << content_group
|
38
|
-
metadata_group = Moab::FileGroup.new(:
|
39
|
+
metadata_group = Moab::FileGroup.new(group_id: 'metadata').group_from_directory(directory)
|
39
40
|
version_inventory.groups << metadata_group
|
40
41
|
version_inventory
|
41
42
|
end
|
@@ -1,11 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'find'
|
2
4
|
|
3
5
|
module Stanford
|
4
6
|
##
|
5
7
|
# methods for dealing with a directory which stores Moab objects
|
6
8
|
class MoabStorageDirectory
|
7
|
-
DRUID_TREE_REGEXP = '[[:lower:]]{2}/\\d{3}/[[:lower:]]{2}/\\d{4}'
|
8
|
-
DRUID_REGEXP = '[[:lower:]]{2}\\d{3}[[:lower:]]{2}\\d{4}'
|
9
|
+
DRUID_TREE_REGEXP = '[[:lower:]]{2}/\\d{3}/[[:lower:]]{2}/\\d{4}'
|
10
|
+
DRUID_REGEXP = '[[:lower:]]{2}\\d{3}[[:lower:]]{2}\\d{4}'
|
9
11
|
|
10
12
|
def self.find_moab_paths(storage_dir)
|
11
13
|
Find.find(storage_dir) do |path|
|
@@ -1,4 +1,5 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'druid-tools'
|
3
4
|
|
4
5
|
module Stanford
|
@@ -22,7 +23,7 @@ module Stanford
|
|
22
23
|
end
|
23
24
|
|
24
25
|
# @param object_id [String] The identifier of the digital object
|
25
|
-
# @return [
|
26
|
+
# @return [String] The branch segment of the object deposit path
|
26
27
|
def deposit_branch(object_id)
|
27
28
|
object_id.split(/:/)[-1]
|
28
29
|
end
|
@@ -30,12 +31,14 @@ module Stanford
|
|
30
31
|
# @param object_id [String] The identifier of the digital object whose path is requested
|
31
32
|
# @return [String] the druid tree directory path based on the given object identifier.
|
32
33
|
def druid_tree(object_id)
|
33
|
-
#
|
34
|
+
# NOTE: this seems an odd place to do druid validation, but leaving it here for now
|
34
35
|
syntax_msg = "Identifier has invalid suri syntax: #{object_id}"
|
35
|
-
raise syntax_msg
|
36
|
+
raise(Moab::InvalidSuriSyntaxError, "#{syntax_msg} nil or empty") if object_id.to_s.empty?
|
37
|
+
|
36
38
|
identifier = object_id.split(':')[-1]
|
37
|
-
raise syntax_msg if identifier.to_s.empty?
|
38
|
-
raise syntax_msg unless DruidTools::Druid.valid?(identifier, true)
|
39
|
+
raise(Moab::InvalidSuriSyntaxError, syntax_msg) if identifier.to_s.empty?
|
40
|
+
raise(Moab::InvalidSuriSyntaxError, syntax_msg) unless DruidTools::Druid.valid?(identifier, true)
|
41
|
+
|
39
42
|
DruidTools::Druid.new(identifier, true).tree.join(File::SEPARATOR)
|
40
43
|
end
|
41
44
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Stanford
|
4
4
|
# An interface class to support access to SDR storage via a RESTful server
|
@@ -17,9 +17,9 @@ module Stanford
|
|
17
17
|
new_inventory = Stanford::ContentInventory.new.inventory_from_cm(new_content_metadata, object_id, subset)
|
18
18
|
begin
|
19
19
|
# ObjectNotFoundException is raised if the object does not exist in storage
|
20
|
-
base_version ||=
|
20
|
+
base_version ||= current_version(object_id)
|
21
21
|
# FileNotFoundException is raised if object exists but has no contentMetadata file
|
22
|
-
base_cm_pathname =
|
22
|
+
base_cm_pathname = retrieve_file('metadata', 'contentMetadata.xml', object_id, base_version)
|
23
23
|
base_inventory = Stanford::ContentInventory.new.inventory_from_cm(base_cm_pathname.read, object_id, subset, base_version)
|
24
24
|
rescue Moab::ObjectNotFoundException, Moab::FileNotFoundException
|
25
25
|
# Create a skeletal FileInventory object, containing no file entries
|
@@ -41,7 +41,7 @@ module Stanford
|
|
41
41
|
new_inventory = Stanford::ContentInventory.new.inventory_from_cm(new_content_metadata, object_id, 'preserve')
|
42
42
|
begin
|
43
43
|
# ObjectNotFoundException is raised if the object does not exist in storage
|
44
|
-
version_id ||=
|
44
|
+
version_id ||= current_version(object_id)
|
45
45
|
storage_object_version = @@repository.storage_object(object_id).find_object_version(version_id)
|
46
46
|
signature_catalog = storage_object_version.signature_catalog
|
47
47
|
rescue Moab::ObjectNotFoundException
|
@@ -56,8 +56,8 @@ module Stanford
|
|
56
56
|
# @param version_id [Integer] The ID of the version whose file data is to be used, if nil use latest version
|
57
57
|
# @return [String] Returns a remediated copy of the contentMetadata with fixity data filled in
|
58
58
|
def self.cm_remediate(object_id, version_id = nil)
|
59
|
-
cm =
|
60
|
-
group =
|
59
|
+
cm = retrieve_file('metadata', 'contentMetadata.xml', object_id, version_id)
|
60
|
+
group = retrieve_file_group('content', object_id, version_id)
|
61
61
|
Stanford::ContentInventory.new.remediate_content_metadata(cm, group)
|
62
62
|
end
|
63
63
|
end
|
metadata
CHANGED
@@ -1,34 +1,34 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: moab-versioning
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.2
|
4
|
+
version: 4.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Darren Weber
|
8
8
|
- Richard Anderson
|
9
9
|
- Lynn McRae
|
10
10
|
- Hannah Frost
|
11
|
-
autorequire:
|
11
|
+
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date:
|
14
|
+
date: 2021-06-01 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
|
-
name:
|
17
|
+
name: druid-tools
|
18
18
|
requirement: !ruby/object:Gem::Requirement
|
19
19
|
requirements:
|
20
20
|
- - ">="
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version:
|
22
|
+
version: 1.0.0
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
27
|
- - ">="
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
29
|
+
version: 1.0.0
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
|
-
name:
|
31
|
+
name: json
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
33
33
|
requirements:
|
34
34
|
- - ">="
|
@@ -42,7 +42,7 @@ dependencies:
|
|
42
42
|
- !ruby/object:Gem::Version
|
43
43
|
version: '0'
|
44
44
|
- !ruby/object:Gem::Dependency
|
45
|
-
name: nokogiri
|
45
|
+
name: nokogiri
|
46
46
|
requirement: !ruby/object:Gem::Requirement
|
47
47
|
requirements:
|
48
48
|
- - ">="
|
@@ -56,7 +56,7 @@ dependencies:
|
|
56
56
|
- !ruby/object:Gem::Version
|
57
57
|
version: '0'
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
|
-
name:
|
59
|
+
name: nokogiri-happymapper
|
60
60
|
requirement: !ruby/object:Gem::Requirement
|
61
61
|
requirements:
|
62
62
|
- - ">="
|
@@ -70,21 +70,7 @@ dependencies:
|
|
70
70
|
- !ruby/object:Gem::Version
|
71
71
|
version: '0'
|
72
72
|
- !ruby/object:Gem::Dependency
|
73
|
-
name:
|
74
|
-
requirement: !ruby/object:Gem::Requirement
|
75
|
-
requirements:
|
76
|
-
- - ">="
|
77
|
-
- !ruby/object:Gem::Version
|
78
|
-
version: 1.0.0
|
79
|
-
type: :runtime
|
80
|
-
prerelease: false
|
81
|
-
version_requirements: !ruby/object:Gem::Requirement
|
82
|
-
requirements:
|
83
|
-
- - ">="
|
84
|
-
- !ruby/object:Gem::Version
|
85
|
-
version: 1.0.0
|
86
|
-
- !ruby/object:Gem::Dependency
|
87
|
-
name: equivalent-xml
|
73
|
+
name: coveralls
|
88
74
|
requirement: !ruby/object:Gem::Requirement
|
89
75
|
requirements:
|
90
76
|
- - ">="
|
@@ -98,7 +84,7 @@ dependencies:
|
|
98
84
|
- !ruby/object:Gem::Version
|
99
85
|
version: '0'
|
100
86
|
- !ruby/object:Gem::Dependency
|
101
|
-
name:
|
87
|
+
name: equivalent-xml
|
102
88
|
requirement: !ruby/object:Gem::Requirement
|
103
89
|
requirements:
|
104
90
|
- - ">="
|
@@ -112,7 +98,7 @@ dependencies:
|
|
112
98
|
- !ruby/object:Gem::Version
|
113
99
|
version: '0'
|
114
100
|
- !ruby/object:Gem::Dependency
|
115
|
-
name:
|
101
|
+
name: pry-byebug
|
116
102
|
requirement: !ruby/object:Gem::Requirement
|
117
103
|
requirements:
|
118
104
|
- - ">="
|
@@ -126,7 +112,7 @@ dependencies:
|
|
126
112
|
- !ruby/object:Gem::Version
|
127
113
|
version: '0'
|
128
114
|
- !ruby/object:Gem::Dependency
|
129
|
-
name:
|
115
|
+
name: rake
|
130
116
|
requirement: !ruby/object:Gem::Requirement
|
131
117
|
requirements:
|
132
118
|
- - ">="
|
@@ -140,7 +126,7 @@ dependencies:
|
|
140
126
|
- !ruby/object:Gem::Version
|
141
127
|
version: '0'
|
142
128
|
- !ruby/object:Gem::Dependency
|
143
|
-
name:
|
129
|
+
name: rspec
|
144
130
|
requirement: !ruby/object:Gem::Requirement
|
145
131
|
requirements:
|
146
132
|
- - ">="
|
@@ -159,28 +145,28 @@ dependencies:
|
|
159
145
|
requirements:
|
160
146
|
- - "~>"
|
161
147
|
- !ruby/object:Gem::Version
|
162
|
-
version:
|
148
|
+
version: '1.7'
|
163
149
|
type: :development
|
164
150
|
prerelease: false
|
165
151
|
version_requirements: !ruby/object:Gem::Requirement
|
166
152
|
requirements:
|
167
153
|
- - "~>"
|
168
154
|
- !ruby/object:Gem::Version
|
169
|
-
version:
|
155
|
+
version: '1.7'
|
170
156
|
- !ruby/object:Gem::Dependency
|
171
157
|
name: rubocop-rspec
|
172
158
|
requirement: !ruby/object:Gem::Requirement
|
173
159
|
requirements:
|
174
160
|
- - "~>"
|
175
161
|
- !ruby/object:Gem::Version
|
176
|
-
version: 1
|
162
|
+
version: '2.1'
|
177
163
|
type: :development
|
178
164
|
prerelease: false
|
179
165
|
version_requirements: !ruby/object:Gem::Requirement
|
180
166
|
requirements:
|
181
167
|
- - "~>"
|
182
168
|
- !ruby/object:Gem::Version
|
183
|
-
version: 1
|
169
|
+
version: '2.1'
|
184
170
|
description: Contains classes to process digital object version content and metadata
|
185
171
|
email:
|
186
172
|
- darren.weber@stanford.edu
|
@@ -229,24 +215,23 @@ homepage: https://github.com/sul-dlss/moab-versioning
|
|
229
215
|
licenses:
|
230
216
|
- Apache-2.0
|
231
217
|
metadata: {}
|
232
|
-
post_install_message:
|
218
|
+
post_install_message:
|
233
219
|
rdoc_options: []
|
234
220
|
require_paths:
|
235
221
|
- lib
|
236
222
|
required_ruby_version: !ruby/object:Gem::Requirement
|
237
223
|
requirements:
|
238
|
-
- - "
|
224
|
+
- - ">="
|
239
225
|
- !ruby/object:Gem::Version
|
240
|
-
version: '2.
|
226
|
+
version: '2.6'
|
241
227
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
242
228
|
requirements:
|
243
229
|
- - ">="
|
244
230
|
- !ruby/object:Gem::Version
|
245
231
|
version: '0'
|
246
232
|
requirements: []
|
247
|
-
|
248
|
-
|
249
|
-
signing_key:
|
233
|
+
rubygems_version: 3.1.4
|
234
|
+
signing_key:
|
250
235
|
specification_version: 4
|
251
236
|
summary: Ruby implementation of digital object versioning toolkit used by the SULAIR
|
252
237
|
Digital Library
|