sdr-client 0.17.0 → 0.17.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/sdr_client.rb +2 -0
- data/lib/sdr_client/deposit/model_process.rb +54 -14
- data/lib/sdr_client/version.rb +1 -1
- data/sdr-client.gemspec +2 -1
- metadata +20 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 67db5756bbb0378efa0f8fc14cf690b790ce8165142487e79b1449d497c30001
|
4
|
+
data.tar.gz: 4c6d3c6a5108eece153ebb3880129210423568025db785cbbd12b4c0988d4a3d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 54da060f2498da93b90292f07ecb3e3076418acfbf19a2a233867a11a251075c1bb56a7b497f11ebe7194eb035285525f9948f90939acfc753bfd2f746b3ad63
|
7
|
+
data.tar.gz: bb9a4281ea61338b4acccbca9c2af67801982202378172682e2d17f57d8027018644e1b54d2d3c19a1969328b818f1ce055c04d7040d14c50c7cdab026d572e1
|
data/lib/sdr_client.rb
CHANGED
@@ -23,11 +23,14 @@ module SdrClient
|
|
23
23
|
|
24
24
|
def run
|
25
25
|
check_files_exist
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
26
|
+
child_files_match
|
27
|
+
|
28
|
+
upload_responses = UploadFiles.new(files: files,
|
29
|
+
logger: logger,
|
30
|
+
connection: connection,
|
31
|
+
mime_types: mime_types).run
|
32
|
+
new_request_dro = with_external_identifiers(upload_responses)
|
33
|
+
upload_request_dro(new_request_dro.to_json)
|
31
34
|
end
|
32
35
|
|
33
36
|
private
|
@@ -41,10 +44,23 @@ module SdrClient
|
|
41
44
|
end
|
42
45
|
end
|
43
46
|
|
47
|
+
def child_files_match
|
48
|
+
# Files without request files.
|
49
|
+
files.each do |filepath|
|
50
|
+
filename = ::File.basename(filepath)
|
51
|
+
|
52
|
+
raise "Request file not provided for #{filepath}" if request_files[filename].nil?
|
53
|
+
end
|
54
|
+
|
55
|
+
# Request files without files
|
56
|
+
filenames = files.map { |filepath| ::File.basename(filepath) }
|
57
|
+
request_files.keys.each do |request_filename|
|
58
|
+
raise "File not provided for request file #{request_filename}" unless filenames.include?(request_filename)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
44
62
|
# @return [Hash<Symbol,String>] the result of the metadata call
|
45
|
-
|
46
|
-
def upload_request_dro
|
47
|
-
request_json = request_dro.to_json
|
63
|
+
def upload_request_dro(request_json)
|
48
64
|
logger.info("Starting upload metadata: #{request_json}")
|
49
65
|
response = connection.post(DRO_PATH, request_json, 'Content-Type' => 'application/json')
|
50
66
|
unexpected_response(response) unless response.status == 201
|
@@ -53,7 +69,6 @@ module SdrClient
|
|
53
69
|
|
54
70
|
{ druid: JSON.parse(response.body)['druid'], background_job: response.headers['Location'] }
|
55
71
|
end
|
56
|
-
# rubocop:enable Metrics/AbcSize
|
57
72
|
|
58
73
|
def unexpected_response(response)
|
59
74
|
raise "There was an error with your request: #{response.body}" if response.status == 400
|
@@ -69,16 +84,41 @@ module SdrClient
|
|
69
84
|
end
|
70
85
|
end
|
71
86
|
|
87
|
+
# Map of filenames to mimetypes
|
72
88
|
def mime_types
|
73
89
|
@mime_types ||=
|
74
90
|
Hash[
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
91
|
+
request_files.map do |filename, file|
|
92
|
+
[filename, file.hasMimeType || 'application/octet-stream']
|
93
|
+
end
|
94
|
+
]
|
95
|
+
end
|
96
|
+
|
97
|
+
# Map of filenames to request files
|
98
|
+
def request_files
|
99
|
+
@request_files ||=
|
100
|
+
Hash[
|
101
|
+
request_dro.structural.contains.map do |file_set|
|
102
|
+
file_set.structural.contains.map do |file|
|
103
|
+
[file.filename, file]
|
104
|
+
end
|
105
|
+
end.flatten(1)
|
80
106
|
]
|
81
107
|
end
|
108
|
+
|
109
|
+
def with_external_identifiers(upload_responses)
|
110
|
+
signed_id_map = Hash[upload_responses.map { |response| [response.filename, response.signed_id] }]
|
111
|
+
|
112
|
+
# Manipulating request_dro as hash since immutable
|
113
|
+
request_dro_hash = request_dro.to_h
|
114
|
+
request_dro_hash[:structural][:contains].each do |file_set|
|
115
|
+
file_set[:structural][:contains].each do |file|
|
116
|
+
file[:externalIdentifier] = signed_id_map[file[:filename]]
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
Cocina::Models::RequestDRO.new(request_dro_hash)
|
121
|
+
end
|
82
122
|
end
|
83
123
|
end
|
84
124
|
end
|
data/lib/sdr_client/version.rb
CHANGED
data/sdr-client.gemspec
CHANGED
@@ -27,11 +27,12 @@ Gem::Specification.new do |spec|
|
|
27
27
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
28
28
|
spec.require_paths = ['lib']
|
29
29
|
|
30
|
+
spec.add_dependency 'activesupport'
|
30
31
|
spec.add_dependency 'dry-monads'
|
31
32
|
spec.add_dependency 'faraday', '>= 0.16'
|
32
33
|
|
33
34
|
spec.add_development_dependency 'bundler', '~> 2.0'
|
34
|
-
spec.add_development_dependency 'cocina-models'
|
35
|
+
spec.add_development_dependency 'cocina-models', '~> 0.28.0'
|
35
36
|
spec.add_development_dependency 'rake', '~> 13.0'
|
36
37
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
37
38
|
spec.add_development_dependency 'rubocop', '~> 0.79.0'
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sdr-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.17.
|
4
|
+
version: 0.17.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Justin Coyne
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-03-
|
11
|
+
date: 2020-03-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: dry-monads
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -56,16 +70,16 @@ dependencies:
|
|
56
70
|
name: cocina-models
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
58
72
|
requirements:
|
59
|
-
- - "
|
73
|
+
- - "~>"
|
60
74
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
75
|
+
version: 0.28.0
|
62
76
|
type: :development
|
63
77
|
prerelease: false
|
64
78
|
version_requirements: !ruby/object:Gem::Requirement
|
65
79
|
requirements:
|
66
|
-
- - "
|
80
|
+
- - "~>"
|
67
81
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
82
|
+
version: 0.28.0
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: rake
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|