dor-services-client 1.8.0 → 1.9.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: 3ebc90d8d21ff990c42ec2836981cc9f9f58ecb0381a563b02beaa9f7f1c4192
4
- data.tar.gz: a6c3e9486eb2b3bd734eec127721d8f17bbee913718e5038fa37b9910be0c2c2
3
+ metadata.gz: 86fea009a88a5fd765b3777f475a259d821988c26dfd9b5c25e9d041768f9280
4
+ data.tar.gz: f58cd9c866860b514e098966daf09b0606c43b4b980f2a169a983a434d0b65c5
5
5
  SHA512:
6
- metadata.gz: 21e178424afe1d89adb1f2aa6f372eac45d3e5a04da66839494acb95780d370e50b09c26e43efe7d9093cb57940dab8c5306ee62b4a57763f9f4e558c88fc63a
7
- data.tar.gz: 907c84790debd06e77586f9f636fcbdc9c2d621a266c54aeee920a2de7ef468c3de43b15eee0e9624a53e5c0f2b31bbac84de5612d1488c992a930e57c693493
6
+ metadata.gz: 2bde6be34744ecfc81a254e1e386130a7e1b6ba999cfed8189ad97d7652f407230b5e08299914c2118a59e10e42662099cb59cac28f48409b1352ddc647a4484
7
+ data.tar.gz: 803356f6b3acf1564014f305a1fcd696d2a9e6cb8763a4a6f2c5d4b9e174bf30a5405e32bab13ec969530501f1f124e8448851f46f9553924b02ba0a04c7630f
data/README.md CHANGED
@@ -62,11 +62,14 @@ object_client.publish
62
62
  # Copy metadata from Symphony into descMetadata
63
63
  object_client.refresh_metadata
64
64
  object_client.notify_goobi
65
- object_client.current_version
66
- object_client.open_new_version(**params)
67
- object_client.close_version(**params)
68
- # Return the Dublin Core XML representation
65
+ object_client.version.current
66
+ object_client.version.openeable?(**params)
67
+ object_client.version.open(**params)
68
+ object_client.version.close(**params)
69
+ # Get the Dublin Core XML representation
69
70
  object_client.metadata.dublin_core
71
+ # Get the public descriptive XML representation
72
+ object_client.metadata.descriptive
70
73
  object_client.files.retrieve(filename: filename_string)
71
74
  object_client.files.preserved_content(filename: filename_string, version: version_string)
72
75
  object_client.files.list
@@ -27,6 +27,7 @@ Gem::Specification.new do |spec|
27
27
  spec.add_dependency 'faraday', '~> 0.15'
28
28
  spec.add_dependency 'moab-versioning', '~> 4.0'
29
29
  spec.add_dependency 'nokogiri', '~> 1.8'
30
+ spec.add_dependency 'zeitwerk', '~> 2.1'
30
31
 
31
32
  spec.add_development_dependency 'bundler'
32
33
  spec.add_development_dependency 'rake', '~> 10.0'
@@ -1,17 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'dor/services/client/files'
4
- require 'dor/services/client/release_tags'
5
- require 'dor/services/client/sdr'
6
- require 'dor/services/client/workflow'
7
- require 'dor/services/client/workspace'
8
- require 'dor/services/client/metadata'
3
+ require 'deprecation'
9
4
 
10
5
  module Dor
11
6
  module Services
12
7
  class Client
13
8
  # API calls that are about a repository object
14
9
  class Object < VersionedService
10
+ extend Deprecation
11
+
15
12
  attr_reader :object_identifier
16
13
 
17
14
  # @param object_identifier [String] the pid for the object
@@ -46,6 +43,10 @@ module Dor
46
43
  @release_tags ||= ReleaseTags.new(connection: connection, version: api_version, object_identifier: object_identifier)
47
44
  end
48
45
 
46
+ def version
47
+ @version ||= ObjectVersion.new(connection: connection, version: api_version, object_identifier: object_identifier)
48
+ end
49
+
49
50
  # Publish a new object
50
51
  # @raise [NotFoundResponse] when the response is a 404 (object not found)
51
52
  # @raise [UnexpectedResponse] when the response is not successful.
@@ -98,47 +99,20 @@ module Dor
98
99
  raise_exception_based_on_response!(resp)
99
100
  end
100
101
 
101
- # Get the current_version for a DOR object. This comes from Dor::VersionMetadataDS
102
- # @raise [NotFoundResponse] when the response is a 404 (object not found)
103
- # @raise [UnexpectedResponse] when the response is not successful.
104
- # @return [String] the version identifier
105
102
  def current_version
106
- resp = connection.get do |req|
107
- req.url "#{object_path}/versions/current"
108
- end
109
- return resp.body if resp.success?
110
-
111
- raise_exception_based_on_response!(resp)
103
+ version.current
112
104
  end
105
+ deprecation_deprecate current_version: 'use version.current instead'
113
106
 
114
- # Open new version for an object
115
- # @param params [Hash] optional params (see dor-services-app)
116
- # @raise [MalformedResponse] when the response is not parseable.
117
- # @raise [NotFoundResponse] when the response is a 404 (object not found)
118
- # @raise [UnexpectedResponse] when the response is not successful.
119
- # @return [String] the current version
120
107
  def open_new_version(**params)
121
- version = open_new_version_response(**params)
122
- raise MalformedResponse, "Version of #{object_identifier} is empty" if version.empty?
123
-
124
- version
108
+ version.open(**params)
125
109
  end
110
+ deprecation_deprecate open_new_version: 'use version.open instead'
126
111
 
127
- # Close current version for an object
128
- # @param params [Hash] optional params (see dor-services-app)
129
- # @raise [NotFoundResponse] when the response is a 404 (object not found)
130
- # @raise [UnexpectedResponse] when the response is not successful.
131
- # @return [String] a message confirming successful closing
132
112
  def close_version(**params)
133
- resp = connection.post do |req|
134
- req.url close_version_path
135
- req.headers['Content-Type'] = 'application/json'
136
- req.body = params.to_json if params.any?
137
- end
138
- return resp.body if resp.success?
139
-
140
- raise_exception_based_on_response!(resp)
113
+ version.close(**params)
141
114
  end
115
+ deprecation_deprecate close_version: 'use version.close instead'
142
116
 
143
117
  private
144
118
 
@@ -150,30 +124,6 @@ module Dor
150
124
  raise (response.status == 404 ? NotFoundResponse : UnexpectedResponse),
151
125
  "#{response.reason_phrase}: #{response.status} (#{response.body})"
152
126
  end
153
-
154
- # Make request to server to open a new version
155
- # @param params [Hash] optional params (see dor-services-app)
156
- # @raise [NotFoundResponse] when the response is a 404 (object not found)
157
- # @raises [UnexpectedResponse] on an unsuccessful response from the server
158
- # @returns [String] the plain text from the server
159
- def open_new_version_response(**params)
160
- resp = connection.post do |req|
161
- req.url open_new_version_path
162
- req.headers['Content-Type'] = 'application/json'
163
- req.body = params.to_json if params.any?
164
- end
165
- return resp.body if resp.success?
166
-
167
- raise_exception_based_on_response!(resp)
168
- end
169
-
170
- def open_new_version_path
171
- "#{object_path}/versions"
172
- end
173
-
174
- def close_version_path
175
- "#{object_path}/versions/current/close"
176
- end
177
127
  end
178
128
  end
179
129
  end
@@ -0,0 +1,119 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dor
4
+ module Services
5
+ class Client
6
+ # API calls that are about versions
7
+ class ObjectVersion < VersionedService
8
+ # @param object_identifier [String] the pid for the object
9
+ def initialize(connection:, version:, object_identifier:)
10
+ super(connection: connection, version: version)
11
+ @object_identifier = object_identifier
12
+ end
13
+
14
+ # Get the current version for a DOR object. This comes from Dor::VersionMetadataDS
15
+ # @raise [NotFoundResponse] when the response is a 404 (object not found)
16
+ # @raise [UnexpectedResponse] when the response is not successful.
17
+ # @return [String] the version identifier
18
+ def current
19
+ resp = connection.get do |req|
20
+ req.url "#{object_path}/versions/current"
21
+ end
22
+ return resp.body if resp.success?
23
+
24
+ raise_exception_based_on_response!(resp)
25
+ end
26
+
27
+ # Determines if a new version can be opened for a DOR object.
28
+ # @param params [Hash] optional params (see dor-services-app)
29
+ # @raise [NotFoundResponse] when the response is a 404 (object not found)
30
+ # @raise [UnexpectedResponse] when the response is not successful.
31
+ # @return [Boolean] true if a new version can be opened
32
+ # rubocop:disable Metrics/MethodLength
33
+ def openeable?(**params)
34
+ resp = connection.get do |req|
35
+ req.url "#{object_path}/versions/openeable"
36
+ req.params = params
37
+ end
38
+
39
+ raise_exception_based_on_response!(resp) unless resp.success?
40
+
41
+ if resp.body == 'true'
42
+ true
43
+ elsif resp.body == 'false'
44
+ false
45
+ else
46
+ raise MalformedResponse, "Expected true or false, not #{resp.body}"
47
+ end
48
+ end
49
+ # rubocop:enable Metrics/MethodLength
50
+
51
+ # Open new version for an object
52
+ # @param params [Hash] optional params (see dor-services-app)
53
+ # @raise [MalformedResponse] when the response is not parseable.
54
+ # @raise [NotFoundResponse] when the response is a 404 (object not found)
55
+ # @raise [UnexpectedResponse] when the response is not successful.
56
+ # @return [String] the current version
57
+ def open(**params)
58
+ version = open_new_version_response(**params)
59
+ raise MalformedResponse, "Version of #{object_identifier} is empty" if version.empty?
60
+
61
+ version
62
+ end
63
+
64
+ # Close current version for an object
65
+ # @param params [Hash] optional params (see dor-services-app)
66
+ # @raise [NotFoundResponse] when the response is a 404 (object not found)
67
+ # @raise [UnexpectedResponse] when the response is not successful.
68
+ # @return [String] a message confirming successful closing
69
+ def close(**params)
70
+ resp = connection.post do |req|
71
+ req.url close_version_path
72
+ req.headers['Content-Type'] = 'application/json'
73
+ req.body = params.to_json if params.any?
74
+ end
75
+ return resp.body if resp.success?
76
+
77
+ raise_exception_based_on_response!(resp)
78
+ end
79
+
80
+ private
81
+
82
+ attr_reader :object_identifier
83
+
84
+ def object_path
85
+ "#{api_version}/objects/#{object_identifier}"
86
+ end
87
+
88
+ def raise_exception_based_on_response!(response)
89
+ raise (response.status == 404 ? NotFoundResponse : UnexpectedResponse),
90
+ "#{response.reason_phrase}: #{response.status} (#{response.body})"
91
+ end
92
+
93
+ # Make request to server to open a new version
94
+ # @param params [Hash] optional params (see dor-services-app)
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
98
+ def open_new_version_response(**params)
99
+ resp = connection.post do |req|
100
+ req.url open_new_version_path
101
+ req.headers['Content-Type'] = 'application/json'
102
+ req.body = params.to_json if params.any?
103
+ end
104
+ return resp.body if resp.success?
105
+
106
+ raise_exception_based_on_response!(resp)
107
+ end
108
+
109
+ def open_new_version_path
110
+ "#{object_path}/versions"
111
+ end
112
+
113
+ def close_version_path
114
+ "#{object_path}/versions/current/close"
115
+ end
116
+ end
117
+ end
118
+ end
119
+ end
@@ -3,7 +3,7 @@
3
3
  module Dor
4
4
  module Services
5
5
  class Client
6
- VERSION = '1.8.0'
6
+ VERSION = '1.9.0'
7
7
  end
8
8
  end
9
9
  end
@@ -1,15 +1,26 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'dor/services/client/version'
4
- require 'singleton'
5
- require 'faraday'
6
3
  require 'active_support/core_ext/hash/indifferent_access'
7
4
  require 'active_support/core_ext/module/delegation'
8
- require 'dor/services/client/versioned_service'
9
- require 'dor/services/client/object'
10
- require 'dor/services/client/objects'
11
- require 'dor/services/client/workflows'
12
- require 'dor/services/client/error_faraday_middleware'
5
+ require 'faraday'
6
+ require 'singleton'
7
+ require 'zeitwerk'
8
+
9
+ class DorServicesClientInflector < Zeitwerk::Inflector
10
+ def camelize(basename, _abspath)
11
+ case basename
12
+ when 'sdr'
13
+ 'SDR'
14
+ else
15
+ super
16
+ end
17
+ end
18
+ end
19
+
20
+ loader = Zeitwerk::Loader.new
21
+ loader.inflector = DorServicesClientInflector.new
22
+ loader.push_dir('lib')
23
+ loader.setup
13
24
 
14
25
  module Dor
15
26
  module Services
@@ -88,6 +99,7 @@ module Dor
88
99
  @url || raise(Error, 'url has not yet been configured')
89
100
  end
90
101
 
102
+ # rubocop:disable Metrics/AbcSize
91
103
  def connection
92
104
  @connection ||= Faraday.new(url) do |conn|
93
105
  conn.use ErrorFaradayMiddleware
@@ -101,6 +113,7 @@ module Dor
101
113
  conn.headers[token_header] = "Bearer #{token}" if token
102
114
  end
103
115
  end
116
+ # rubocop:enable Metrics/AbcSize
104
117
 
105
118
  def user_agent
106
119
  "dor-services-client #{Dor::Services::Client::VERSION}"
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: 1.8.0
4
+ version: 1.9.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-05-01 00:00:00.000000000 Z
12
+ date: 2019-05-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -87,6 +87,20 @@ dependencies:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
89
  version: '1.8'
90
+ - !ruby/object:Gem::Dependency
91
+ name: zeitwerk
92
+ requirement: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '2.1'
97
+ type: :runtime
98
+ prerelease: false
99
+ version_requirements: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '2.1'
90
104
  - !ruby/object:Gem::Dependency
91
105
  name: bundler
92
106
  requirement: !ruby/object:Gem::Requirement
@@ -182,6 +196,7 @@ files:
182
196
  - lib/dor/services/client/files.rb
183
197
  - lib/dor/services/client/metadata.rb
184
198
  - lib/dor/services/client/object.rb
199
+ - lib/dor/services/client/object_version.rb
185
200
  - lib/dor/services/client/objects.rb
186
201
  - lib/dor/services/client/release_tags.rb
187
202
  - lib/dor/services/client/sdr.rb