moab-versioning 2.4.0 → 2.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2cf042d5123eebc1b9c1b9693e05c45c99912b39
4
- data.tar.gz: 6e52763c9a40797606c858e7794eb9014d2fab7c
3
+ metadata.gz: b141f93a04b4ad8240f247a8a060c6b4b9ebb413
4
+ data.tar.gz: 7cc328d69cc4589730e5b8b35350ef327fd1ea3d
5
5
  SHA512:
6
- metadata.gz: b2ee7236ad243d907c51fdd82835c0e12829dc99a2b1a65bc1f9ed2b3c0d70ce396ebe7c58459cfdf0a2c4aa3479363fa80352ce3a343e31a308ba78e2e52652
7
- data.tar.gz: 0c61777fa909a4b57563ad3a9a94f1a8c46a6096dc58d97dd8c4ae86370c0e59899ae9dfb6805f3a96d00a20cb4a398e9bb3fc3d7615c5e0ba50d1b0bade36dd
6
+ metadata.gz: f8fcd9e0ad6d4fce690fbc88af68474e28693eb7e9bea7abf41beff93322fce78716d49ade6fb3a1c3410aaf3c55ec4262c411906e0efb8678e59fb0d1f2e792
7
+ data.tar.gz: fd3fab12cac688a8685aee5f30b50dba29d6ae2115adc2918b329c8a749577c6a1fb394fdf51c226c2c8e3fd5d6a716523928f2c0decb0d1ee7d585d6a575536
data/lib/moab/stanford.rb CHANGED
@@ -5,6 +5,7 @@ require 'stanford/storage_repository'
5
5
  require 'stanford/storage_services'
6
6
  require 'stanford/active_fedora_object'
7
7
  require 'stanford/moab_storage_directory'
8
+ require 'stanford/storage_object_validator'
8
9
 
9
10
  # Stanford is a module that isolates classes specific to the Stanford Digital Repository
10
11
  #
@@ -23,18 +23,6 @@ module Moab
23
23
  VERSIONS_NOT_IN_ORDER = 7
24
24
  FILES_IN_VERSION_DIR = 8
25
25
 
26
- ERROR_CODE_TO_MESSAGES = {
27
- INCORRECT_DIR=> "Incorrect items in path",
28
- MISSING_DIR => "Missing directory: %{addl}",
29
- EXTRA_CHILD_DETECTED => "Unexpected item in path: %{addl}",
30
- VERSION_DIR_BAD_FORMAT => "Version directory name not in 'v00xx' format",
31
- FILES_IN_VERSION_DIR => "Top level should contain only sequential version directories. Also contains files: %{addl}",
32
- NO_SIGNATURE_CATALOG => "Version: %{addl} Missing signatureCatalog.xml",
33
- NO_MANIFEST_INVENTORY => "Version: %{addl} Missing manifestInventory.xml",
34
- NO_XML_FILES => "Version: %{addl} Missing all required metadata files",
35
- VERSIONS_NOT_IN_ORDER => "Should contain only sequential version directories. Current directories: %{addl}"
36
- }.freeze
37
-
38
26
  attr_reader :storage_obj_path
39
27
 
40
28
  def initialize(storage_object)
@@ -50,6 +38,21 @@ module Moab
50
38
  errors
51
39
  end
52
40
 
41
+ def self.error_code_to_messages
42
+ @error_code_to_messages ||=
43
+ {
44
+ INCORRECT_DIR => "Incorrect items in path",
45
+ MISSING_DIR => "Missing directory: %{addl}",
46
+ EXTRA_CHILD_DETECTED => "Unexpected item in path: %{addl}",
47
+ VERSION_DIR_BAD_FORMAT => "Version directory name not in 'v00xx' format",
48
+ FILES_IN_VERSION_DIR => "Top level should contain only sequential version directories. Also contains files: %{addl}",
49
+ NO_SIGNATURE_CATALOG => "Version: %{addl} Missing signatureCatalog.xml",
50
+ NO_MANIFEST_INVENTORY => "Version: %{addl} Missing manifestInventory.xml",
51
+ NO_XML_FILES => "Version: %{addl} Missing all required metadata files",
52
+ VERSIONS_NOT_IN_ORDER => "Should contain only sequential version directories. Current directories: %{addl}"
53
+ }.freeze
54
+ end
55
+
53
56
  # TODO: Figure out which methods should be public
54
57
 
55
58
  private
@@ -157,7 +160,7 @@ module Moab
157
160
  end
158
161
 
159
162
  def error_code_msg(response_code, addl=nil)
160
- format(ERROR_CODE_TO_MESSAGES[response_code], addl: addl)
163
+ format(self.class.error_code_to_messages[response_code], addl: addl)
161
164
  end
162
165
 
163
166
  def check_required_manifest_files(dir, version)
@@ -176,5 +179,13 @@ module Moab
176
179
  errors << result if result
177
180
  errors
178
181
  end
182
+
183
+ def latest_manifest_inventory
184
+ "#{storage_obj_path}/#{version_directories.last}/#{MANIFEST_INVENTORY_PATH}"
185
+ end
186
+
187
+ def object_id_from_manifest_inventory
188
+ Nokogiri::XML(File.open(latest_manifest_inventory)).at_xpath('//fileInventory/@objectId').value
189
+ end
179
190
  end
180
191
  end
@@ -0,0 +1,35 @@
1
+ require 'moab'
2
+
3
+ module Stanford
4
+ # druids are Stanford specific entities
5
+ class StorageObjectValidator < Moab::StorageObjectValidator
6
+
7
+ # TODO: test to make sure constants don't collide on underlying int vals?
8
+ # keep from stepping on previously defined error code constants.
9
+ DRUID_MISMATCH = superclass.error_code_to_messages.keys.max + 1
10
+
11
+ def validation_errors
12
+ errors = []
13
+ errors.concat super
14
+ errors.concat identify_druid
15
+ end
16
+
17
+ def identify_druid
18
+ druid_from_filepath == object_id_from_manifest_inventory ? [] : [result_hash(DRUID_MISMATCH)]
19
+ end
20
+
21
+ # the Stanford validator expects keys to be in ascending numerical order
22
+ def self.error_code_to_messages
23
+ @error_code_to_messages ||=
24
+ {
25
+ DRUID_MISMATCH => 'manifestInventory object_id does not match druid'
26
+ }.merge!(superclass.error_code_to_messages).freeze
27
+ end
28
+
29
+ private
30
+
31
+ def druid_from_filepath
32
+ "druid:#{File.basename(storage_obj_path)}"
33
+ end
34
+ end
35
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: moab-versioning
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.0
4
+ version: 2.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Darren Weber
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2017-11-02 00:00:00.000000000 Z
14
+ date: 2017-11-08 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: confstruct
@@ -277,6 +277,7 @@ files:
277
277
  - lib/stanford/content_inventory.rb
278
278
  - lib/stanford/dor_metadata.rb
279
279
  - lib/stanford/moab_storage_directory.rb
280
+ - lib/stanford/storage_object_validator.rb
280
281
  - lib/stanford/storage_repository.rb
281
282
  - lib/stanford/storage_services.rb
282
283
  - lib/tasks/yard.rake
@@ -300,7 +301,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
300
301
  version: '0'
301
302
  requirements: []
302
303
  rubyforge_project:
303
- rubygems_version: 2.6.11
304
+ rubygems_version: 2.6.13
304
305
  signing_key:
305
306
  specification_version: 4
306
307
  summary: Ruby implementation of digital object versioning toolkit used by the SULAIR