sdr-client 0.17.0 → 0.17.1

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
  SHA256:
3
- metadata.gz: 065c4f605e60c45bb76c98eac741d67f5b7e848a5b59402396b4c7273ba80334
4
- data.tar.gz: f826dad9e9e758242672f92baffde17f65c347f05013d7420a5ff69459344935
3
+ metadata.gz: 67db5756bbb0378efa0f8fc14cf690b790ce8165142487e79b1449d497c30001
4
+ data.tar.gz: 4c6d3c6a5108eece153ebb3880129210423568025db785cbbd12b4c0988d4a3d
5
5
  SHA512:
6
- metadata.gz: '06295472bb1577491a3ea0f40a89cd904c14bb19c2064c226e129487d74828c0335109b2818bd280eed1d80af266d2352a72bc4b4838fa1fea7ff9830f81f1d8'
7
- data.tar.gz: 6830c8249d6ae651fdbf1c6a62e582db254f663fe6d4316de84c7a1d6a2ba17fd516a129991ca8634a98ccd5857fe59ba56b12341412d0f7732232e93e78fa2d
6
+ metadata.gz: 54da060f2498da93b90292f07ecb3e3076418acfbf19a2a233867a11a251075c1bb56a7b497f11ebe7194eb035285525f9948f90939acfc753bfd2f746b3ad63
7
+ data.tar.gz: bb9a4281ea61338b4acccbca9c2af67801982202378172682e2d17f57d8027018644e1b54d2d3c19a1969328b818f1ce055c04d7040d14c50c7cdab026d572e1
@@ -2,6 +2,8 @@
2
2
 
3
3
  require 'dry/monads'
4
4
  require 'faraday'
5
+ require 'active_support'
6
+ require 'active_support/core_ext/object/json'
5
7
 
6
8
  require 'sdr_client/version'
7
9
  require 'sdr_client/deposit'
@@ -23,11 +23,14 @@ module SdrClient
23
23
 
24
24
  def run
25
25
  check_files_exist
26
- UploadFiles.new(files: files,
27
- logger: logger,
28
- connection: connection,
29
- mime_types: mime_types).run
30
- upload_request_dro
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
- # rubocop:disable Metrics/AbcSize
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
- request_dro.structural.contains.map do |file_set|
76
- file_set.structural.contains.map do |file|
77
- [file.filename, file.hasMimeType || 'application/octet-stream']
78
- end
79
- end.flatten(1)
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SdrClient
4
- VERSION = '0.17.0'
4
+ VERSION = '0.17.1'
5
5
  end
@@ -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.0
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-10 00:00:00.000000000 Z
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: '0'
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: '0'
82
+ version: 0.28.0
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: rake
71
85
  requirement: !ruby/object:Gem::Requirement