dor-services-client 2.3.0 → 2.4.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
  SHA256:
3
- metadata.gz: a6338147f1bdeea6d2fb56ae0660572d3392c2e44593966a8bfabdcd8beff1a8
4
- data.tar.gz: fef44c433121a01e04d35525070b06c3c57a8ed0cce512c33bc6166e079eb9f2
3
+ metadata.gz: 98ce334358d0f3233121f562d96610339aa762e7758d3805a78fce94af96ae15
4
+ data.tar.gz: 72ca530a50cb19d8f37c9923942bcc222b4a19367ce760c638e1c9635adafbfa
5
5
  SHA512:
6
- metadata.gz: 72bd89f9b543f4454218b6df062e28ee2adeab2059909e4c720c70b6a88697f6a0904baa9da585bb074ddcbc4ad7f0d7605072ae39d3a1cc8f23abd560a8fd74
7
- data.tar.gz: c70e8a9dbbd29e597513073d966af7d3a602b535cd95ce1f36d91d50d5961c6ef09bc40a1d799e82a3e81245d53720bd2dcad565b080374592139a7d39cb14ba
6
+ metadata.gz: 689c2c25b4409e7a84cd9dfe5ac956027e1c41acfd95abc6643da2f97256b714a89d48699a0a85f683eb01811c5b8f9a3f65e1a6dd9c75417213f77362562397
7
+ data.tar.gz: d40443664b067ce06f4050695746fc9e6f8099d756b3c9c664699b1474e61253169a31701bd54565c95aa5ead3c4463f8ee10b57ac816dcb913b06696eaf3c5f
@@ -11,7 +11,8 @@ module Dor
11
11
  @object_identifier = object_identifier
12
12
  end
13
13
 
14
- # @return [String] The Dublin Core XML representation of the object
14
+ # @return [String, NilClass] The Dublin Core XML representation of the object or nil if response is 404
15
+ # @raise [UnexpectedResponse] on an unsuccessful response from the server
15
16
  def dublin_core
16
17
  resp = connection.get do |req|
17
18
  req.url "#{base_path}/dublin_core"
@@ -19,10 +20,11 @@ module Dor
19
20
  return resp.body if resp.success?
20
21
  return if resp.status == 404
21
22
 
22
- raise UnexpectedResponse, "#{resp.reason_phrase}: #{resp.status} (#{resp.body}) for #{object_identifier}"
23
+ raise UnexpectedResponse, ResponseErrorFormatter.format(response: resp, object_identifier: object_identifier)
23
24
  end
24
25
 
25
- # @return [String] The descriptive metadata XML representation of the object
26
+ # @return [String, NilClass] The descriptive metadata XML representation of the object or nil if response is 404
27
+ # @raise [UnexpectedResponse] on an unsuccessful response from the server
26
28
  def descriptive
27
29
  resp = connection.get do |req|
28
30
  req.url "#{base_path}/descriptive"
@@ -30,7 +32,7 @@ module Dor
30
32
  return resp.body if resp.success?
31
33
  return if resp.status == 404
32
34
 
33
- raise UnexpectedResponse, "#{resp.reason_phrase}: #{resp.status} (#{resp.body}) for #{object_identifier}"
35
+ raise UnexpectedResponse, ResponseErrorFormatter.format(response: resp, object_identifier: object_identifier)
34
36
  end
35
37
 
36
38
  private
@@ -111,7 +111,7 @@ module Dor
111
111
 
112
112
  def raise_exception_based_on_response!(response)
113
113
  raise (response.status == 404 ? NotFoundResponse : UnexpectedResponse),
114
- "#{response.reason_phrase}: #{response.status} (#{response.body})"
114
+ ResponseErrorFormatter.format(response: response)
115
115
  end
116
116
  end
117
117
  end
@@ -87,14 +87,14 @@ module Dor
87
87
 
88
88
  def raise_exception_based_on_response!(response)
89
89
  raise (response.status == 404 ? NotFoundResponse : UnexpectedResponse),
90
- "#{response.reason_phrase}: #{response.status} (#{response.body})"
90
+ ResponseErrorFormatter.format(response: response)
91
91
  end
92
92
 
93
93
  # Make request to server to open a new version
94
94
  # @param params [Hash] optional params (see dor-services-app)
95
95
  # @raise [NotFoundResponse] when the response is a 404 (object not found)
96
- # @raises [UnexpectedResponse] on an unsuccessful response from the server
97
- # @returns [String] the plain text from the server
96
+ # @raise [UnexpectedResponse] on an unsuccessful response from the server
97
+ # @return [String] the plain text from the server
98
98
  def open_new_version_response(**params)
99
99
  resp = connection.post do |req|
100
100
  req.url open_new_version_path
@@ -16,8 +16,8 @@ module Dor
16
16
 
17
17
  # make the registration request to the server
18
18
  # @param params [Hash] optional params (see dor-services-app)
19
- # @raises [UnexpectedResponse] on an unsuccessful response from the server
20
- # @returns [String] the raw JSON from the server
19
+ # @raise [UnexpectedResponse] on an unsuccessful response from the server
20
+ # @return [String] the raw JSON from the server
21
21
  def register_response(params:)
22
22
  resp = connection.post do |req|
23
23
  req.url "#{api_version}/objects"
@@ -28,7 +28,7 @@ module Dor
28
28
  end
29
29
  return resp.body if resp.success?
30
30
 
31
- raise UnexpectedResponse, "#{resp.reason_phrase}: #{resp.status} (#{resp.body})"
31
+ raise UnexpectedResponse, ResponseErrorFormatter.format(response: resp)
32
32
  end
33
33
  end
34
34
  end
@@ -16,7 +16,7 @@ module Dor
16
16
  # @param what [String]
17
17
  # @param to [String]
18
18
  # @param who [String]
19
- # @raises [UnexpectedResponse] if the request is unsuccessful.
19
+ # @raise [UnexpectedResponse] if the request is unsuccessful.
20
20
  # @return [Boolean] true if successful
21
21
  # rubocop:disable Metrics/MethodLength
22
22
  def create(release:, what:, to:, who:)
@@ -31,7 +31,7 @@ module Dor
31
31
  req.headers['Content-Type'] = 'application/json'
32
32
  req.body = params.to_json
33
33
  end
34
- raise UnexpectedResponse, "#{resp.reason_phrase}: #{resp.status} (#{resp.body})" unless resp.success?
34
+ raise UnexpectedResponse, ResponseErrorFormatter.format(response: resp) unless resp.success?
35
35
 
36
36
  true
37
37
  end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dor
4
+ module Services
5
+ class Client
6
+ # Format HTTP response-related errors
7
+ class ResponseErrorFormatter
8
+ DEFAULT_BODY = 'Response from dor-services-app did not contain a body. \
9
+ Check honeybadger for dor-services-app for backtraces, \
10
+ and look into adding a `rescue_from` in dor-services-app \
11
+ to provide more details to the client in the future'
12
+
13
+ def self.format(response:, object_identifier: nil)
14
+ new(response: response, object_identifier: object_identifier).format
15
+ end
16
+
17
+ attr_reader :reason_phrase, :status, :body, :object_identifier
18
+
19
+ def initialize(response:, object_identifier: nil)
20
+ @reason_phrase = response.reason_phrase
21
+ @status = response.status
22
+ @body = response.body.present? ? response.body : DEFAULT_BODY
23
+ @object_identifier = object_identifier
24
+ end
25
+
26
+ def format
27
+ return "#{reason_phrase}: #{status} (#{body})" if object_identifier.nil?
28
+
29
+ "#{reason_phrase}: #{status} (#{body}) for #{object_identifier}"
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -34,7 +34,7 @@ module Dor
34
34
  resp = signature_catalog_response
35
35
 
36
36
  return Moab::SignatureCatalog.new(digital_object_id: object_identifier, version_id: 0) if resp.status == 404
37
- raise UnexpectedResponse, "#{resp.reason_phrase}: #{resp.status} (#{resp.body}) for #{object_identifier}" unless resp.success?
37
+ raise UnexpectedResponse, ResponseErrorFormatter.format(response: resp, object_identifier: object_identifier) unless resp.success?
38
38
 
39
39
  Moab::SignatureCatalog.parse resp.body
40
40
  end
@@ -54,7 +54,8 @@ module Dor
54
54
  end
55
55
 
56
56
  # @param [String] datastream The identifier of the metadata datastream
57
- # @return [String] The datastream contents from the previous version of the digital object (fetched from SDR storage)
57
+ # @return [String, NilClass] datastream content from previous version of the object (from SDR storage), or nil if response status is 404
58
+ # @raise [UnexpectedResponse] on an unsuccessful, non-404 response from the server
58
59
  def metadata(datastream:)
59
60
  resp = connection.get do |req|
60
61
  req.url "#{base_path}/metadata/#{datastream}.xml"
@@ -62,7 +63,7 @@ module Dor
62
63
  return resp.body if resp.success?
63
64
  return if resp.status == 404
64
65
 
65
- raise UnexpectedResponse, "#{resp.reason_phrase}: #{resp.status} (#{resp.body}) for #{object_identifier}"
66
+ raise UnexpectedResponse, ResponseErrorFormatter.format(response: resp, object_identifier: object_identifier)
66
67
  end
67
68
 
68
69
  private
@@ -76,15 +77,15 @@ module Dor
76
77
  end
77
78
 
78
79
  # make the request to the server for the currentVersion xml
79
- # @raises [UnexpectedResponse] on an unsuccessful response from the server
80
- # @returns [String] the raw xml from the server
80
+ # @raise [UnexpectedResponse] on an unsuccessful response from the server
81
+ # @return [String] the raw xml from the server
81
82
  def current_version_response
82
83
  resp = connection.get do |req|
83
84
  req.url current_version_path
84
85
  end
85
86
  return resp.body if resp.success?
86
87
 
87
- raise UnexpectedResponse, "#{resp.reason_phrase}: #{resp.status} (#{resp.body}) for #{object_identifier}"
88
+ raise UnexpectedResponse, ResponseErrorFormatter.format(response: resp, object_identifier: object_identifier)
88
89
  end
89
90
 
90
91
  def current_version_path
@@ -92,15 +93,15 @@ module Dor
92
93
  end
93
94
 
94
95
  # make the request to the server for the content diff
95
- # @raises [UnexpectedResponse] on an unsuccessful response from the server
96
- # @returns [String] the raw xml from the server
96
+ # @raise [UnexpectedResponse] on an unsuccessful response from the server
97
+ # @return [String] the raw xml from the server
97
98
  def content_diff_response(current_content:, subset:, version:)
98
99
  resp = connection.post do |req|
99
100
  req.url content_diff_path(subset: subset, version: version)
100
101
  req.headers['Content-Type'] = 'application/xml'
101
102
  req.body = current_content
102
103
  end
103
- raise UnexpectedResponse, "#{resp.reason_phrase}: #{resp.status} (#{resp.body}) for #{object_identifier}" unless resp.success?
104
+ raise UnexpectedResponse, ResponseErrorFormatter.format(response: resp, object_identifier: object_identifier) unless resp.success?
104
105
 
105
106
  resp.body
106
107
  end
@@ -3,7 +3,7 @@
3
3
  module Dor
4
4
  module Services
5
5
  class Client
6
- VERSION = '2.3.0'
6
+ VERSION = '2.4.0'
7
7
  end
8
8
  end
9
9
  end
@@ -13,24 +13,24 @@ module Dor
13
13
 
14
14
  # Initializes a new workspace
15
15
  # @param source [String] the path to the object
16
- # @raises [UnexpectedResponse] if the request is unsuccessful.
16
+ # @raise [UnexpectedResponse] if the request is unsuccessful.
17
17
  # @return nil
18
18
  def create(source:)
19
19
  resp = connection.post do |req|
20
20
  req.url workspace_path
21
21
  req.params['source'] = source
22
22
  end
23
- raise UnexpectedResponse, "#{resp.reason_phrase}: #{resp.status} (#{resp.body})" unless resp.success?
23
+ raise UnexpectedResponse, ResponseErrorFormatter.format(response: resp) unless resp.success?
24
24
  end
25
25
 
26
26
  # Cleans up a workspace
27
- # @raises [UnexpectedResponse] if the request is unsuccessful.
27
+ # @raise [UnexpectedResponse] if the request is unsuccessful.
28
28
  # @return nil
29
29
  def cleanup
30
30
  resp = connection.delete do |req|
31
31
  req.url workspace_path
32
32
  end
33
- raise UnexpectedResponse, "#{resp.reason_phrase}: #{resp.status} (#{resp.body})" unless resp.success?
33
+ raise UnexpectedResponse, ResponseErrorFormatter.format(response: resp) unless resp.success?
34
34
  end
35
35
 
36
36
  private
@@ -2,6 +2,7 @@
2
2
 
3
3
  require 'active_support/core_ext/hash/indifferent_access'
4
4
  require 'active_support/core_ext/module/delegation'
5
+ require 'active_support/core_ext/object/blank'
5
6
  require 'faraday'
6
7
  require 'singleton'
7
8
  require 'zeitwerk'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dor-services-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.0
4
+ version: 2.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Coyne
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2019-08-22 00:00:00.000000000 Z
12
+ date: 2019-08-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -185,6 +185,7 @@ files:
185
185
  - lib/dor/services/client/object_version.rb
186
186
  - lib/dor/services/client/objects.rb
187
187
  - lib/dor/services/client/release_tags.rb
188
+ - lib/dor/services/client/response_error_formatter.rb
188
189
  - lib/dor/services/client/sdr.rb
189
190
  - lib/dor/services/client/version.rb
190
191
  - lib/dor/services/client/versioned_service.rb
@@ -208,7 +209,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
208
209
  version: '0'
209
210
  requirements: []
210
211
  rubyforge_project:
211
- rubygems_version: 2.7.6
212
+ rubygems_version: 2.7.8
212
213
  signing_key:
213
214
  specification_version: 4
214
215
  summary: A client for dor-services-app