moab-versioning 4.0.0 → 4.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3e5f606dfba2cd8e6b58c044835b380fbfe6fbd2
4
- data.tar.gz: 53ac0623d30970defef6303eb5a60dbc08251b72
3
+ metadata.gz: b369a2ecc1e65bdcf4a40dfde46176838912ce2f
4
+ data.tar.gz: 8e9b829361e700e12220e203204433a1c56e7b55
5
5
  SHA512:
6
- metadata.gz: 330703dff850a3fd21e9a70839df565811b668cbdc228cf59ceafc8633b0cb703893298a054936fc5e87f2d66fc76e2599baa4dcb6c7eb16b7d1438e9bdcb738
7
- data.tar.gz: 4f55f879bd0d6dd5e0ff3ee0f8ce7db04566006cf7af5ddd0a252c521e6c79a7f0857808756f09bb0a05907eece777e0ffd8d171f463467d92f5a0705a7f8f9f
6
+ metadata.gz: b076d84c4bc16759c646234d37625068922cdbbbbe68add37bb0922c21d9963441ce7d280bab4f1d5511a078364004b0c59c9d7b4a376f60fe7f37ed8844f674
7
+ data.tar.gz: 81a48dbd61d60ca5469cba9d330970cb4b929a003bcea55177294f8426eca1d84e223988fdf70ac95ee818e38787992ae2355d3f3fe7d8c1718d8807a78fa803
@@ -16,6 +16,8 @@ module Moab
16
16
  MANIFEST_INVENTORY_PATH = File.join(MANIFESTS_DIR, "manifestInventory.xml").freeze
17
17
  SIGNATURE_CATALOG_PATH = File.join(MANIFESTS_DIR, "signatureCatalog.xml").freeze
18
18
 
19
+ FORBIDDEN_CONTENT_SUB_DIRS = ([DATA_DIR, MANIFESTS_DIR] + EXPECTED_DATA_SUB_DIRS).freeze
20
+
19
21
  # error codes
20
22
  INCORRECT_DIR_CONTENTS = 0
21
23
  MISSING_DIR = 1
@@ -30,6 +32,7 @@ module Moab
30
32
  NO_FILES_IN_METADATA_DIR = 10
31
33
  NO_FILES_IN_CONTENT_DIR = 11
32
34
  CONTENT_SUB_DIRS_DETECTED = 12
35
+ BAD_SUB_DIR_IN_CONTENT_DIR = 13
33
36
 
34
37
  attr_reader :storage_obj_path
35
38
 
@@ -38,11 +41,11 @@ module Moab
38
41
  @directory_entries_hash = {}
39
42
  end
40
43
 
41
- def validation_errors
44
+ def validation_errors(allow_content_subdirs=true)
42
45
  errors = []
43
46
  errors.concat check_correctly_named_version_dirs
44
47
  errors.concat check_sequential_version_dirs if errors.empty?
45
- errors.concat check_correctly_formed_moab if errors.empty?
48
+ errors.concat check_correctly_formed_moab(allow_content_subdirs) if errors.empty?
46
49
  errors
47
50
  end
48
51
 
@@ -61,7 +64,8 @@ module Moab
61
64
  VERSIONS_NOT_IN_ORDER => "Should contain only sequential version directories. Current directories: %{addl}",
62
65
  NO_FILES_IN_METADATA_DIR => "Version %{addl}: No files present in metadata dir",
63
66
  NO_FILES_IN_CONTENT_DIR => "Version %{addl}: No files present in content dir",
64
- CONTENT_SUB_DIRS_DETECTED => "Version %{addl}: content directory should only contain files, not directories"
67
+ CONTENT_SUB_DIRS_DETECTED => "Version %{addl}: content directory should only contain files, not directories",
68
+ BAD_SUB_DIR_IN_CONTENT_DIR => "Version %{addl}: content directory has forbidden sub-directory name: vnnnn or #{FORBIDDEN_CONTENT_SUB_DIRS}"
65
69
  }.freeze
66
70
  end
67
71
 
@@ -75,11 +79,15 @@ module Moab
75
79
  errors = []
76
80
  errors << result_hash(MISSING_DIR, 'no versions exist') unless version_directories.count > 0
77
81
  version_directories.each do |version_dir|
78
- errors << result_hash(VERSION_DIR_BAD_FORMAT, version_dir) unless version_dir =~ /^[v]\d{4}$/
82
+ errors << result_hash(VERSION_DIR_BAD_FORMAT, version_dir) unless version_dir_format?(version_dir)
79
83
  end
80
84
  errors
81
85
  end
82
86
 
87
+ def version_dir_format?(dirname)
88
+ dirname =~ /^[v]\d{4}$/
89
+ end
90
+
83
91
  # call only if the version directories are "correctly named" vdddd
84
92
  def check_sequential_version_dirs
85
93
  errors = []
@@ -93,14 +101,14 @@ module Moab
93
101
  errors
94
102
  end
95
103
 
96
- def check_correctly_formed_moab
104
+ def check_correctly_formed_moab(allow_content_subdirs=true)
97
105
  errors = []
98
106
  version_directories.each do |version_dir|
99
107
  version_path = File.join(storage_obj_path, version_dir)
100
108
  version_error_count = errors.size
101
109
  errors.concat check_version_sub_dirs(version_path, version_dir)
102
110
  errors.concat check_required_manifest_files(version_path, version_dir) if version_error_count == errors.size
103
- errors.concat check_data_directory(version_path, version_dir) if version_error_count == errors.size
111
+ errors.concat check_data_directory(version_path, version_dir, allow_content_subdirs) if version_error_count == errors.size
104
112
  end
105
113
  errors
106
114
  end
@@ -119,13 +127,13 @@ module Moab
119
127
  errors
120
128
  end
121
129
 
122
- def check_data_directory(version_path, version)
130
+ def check_data_directory(version_path, version, allow_content_subdirs=true)
123
131
  errors = []
124
132
  data_dir_path = File.join(version_path, DATA_DIR)
125
133
  data_sub_dirs = directory_entries(data_dir_path)
126
134
  errors.concat check_data_sub_dirs(version, data_sub_dirs)
127
135
  errors.concat check_metadata_dir_files_only(version_path) if errors.empty?
128
- errors.concat check_optional_content_dir_files_only(version_path) if data_sub_dirs.include?('content') && errors.empty?
136
+ errors.concat check_optional_content_dir(version_path, allow_content_subdirs) if data_sub_dirs.include?('content') && errors.empty?
129
137
  errors
130
138
  end
131
139
 
@@ -141,14 +149,25 @@ module Moab
141
149
  errors
142
150
  end
143
151
 
144
- def check_optional_content_dir_files_only(version_path)
152
+ def check_optional_content_dir(version_path, allow_content_subdirs=true)
145
153
  errors = []
146
154
  content_dir_path = File.join(version_path, DATA_DIR, CONTENT_DIR)
147
155
  errors << result_hash(NO_FILES_IN_CONTENT_DIR, basename(version_path)) if directory_entries(content_dir_path).empty?
148
- errors << result_hash(CONTENT_SUB_DIRS_DETECTED, basename(version_path)) if contains_sub_dir?(content_dir_path)
156
+ errors << result_hash(CONTENT_SUB_DIRS_DETECTED, basename(version_path)) if contains_sub_dir?(content_dir_path) && !allow_content_subdirs
157
+ if allow_content_subdirs && contains_sub_dir?(content_dir_path) && contains_forbidden_content_sub_dir?(content_dir_path)
158
+ errors << result_hash(BAD_SUB_DIR_IN_CONTENT_DIR, basename(version_path))
159
+ end
149
160
  errors
150
161
  end
151
162
 
163
+ def contains_forbidden_content_sub_dir?(path)
164
+ sub_dirs(path).detect { |sub_dir| content_sub_dir_forbidden?(sub_dir) }
165
+ end
166
+
167
+ def content_sub_dir_forbidden?(dirname)
168
+ FORBIDDEN_CONTENT_SUB_DIRS.include?(dirname) || version_dir_format?(dirname)
169
+ end
170
+
152
171
  def subset?(first_array, second_array)
153
172
  first_array.to_set.subset?(second_array.to_set)
154
173
  end
@@ -208,6 +227,10 @@ module Moab
208
227
  directory_entries(path).detect { |entry| File.file?(File.join(path, entry)) }
209
228
  end
210
229
 
230
+ def sub_dirs(path)
231
+ directory_entries(path).select { |entry| File.directory?(File.join(path, entry)) }
232
+ end
233
+
211
234
  def basename(path)
212
235
  path.split(File::SEPARATOR)[-1]
213
236
  end
@@ -8,9 +8,9 @@ module Stanford
8
8
  # keep from stepping on previously defined error code constants.
9
9
  DRUID_MISMATCH = superclass.error_code_to_messages.keys.max + 1
10
10
 
11
- def validation_errors
11
+ def validation_errors(allow_content_subdirs=true)
12
12
  errors = []
13
- errors.concat super
13
+ errors.concat super(allow_content_subdirs)
14
14
  errors.concat(identify_druid) if errors.empty?
15
15
  errors
16
16
  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: 4.0.0
4
+ version: 4.1.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-22 00:00:00.000000000 Z
14
+ date: 2017-12-02 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: confstruct