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 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