dor-services-client 9.1.1 → 10.2.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: a0cdf365381c6038c6b2cc8450158528c83f1daf5e7d41cff74f8fc5b48a6848
4
- data.tar.gz: c82464b2f24334a7f7640d17435d5c0dc7de72d898ed3de6034747dd0555026d
3
+ metadata.gz: 06256135ae4d1e556af51bd67aa764f3bdf4095503b5e7c41daf9fa32093be49
4
+ data.tar.gz: 9007c044ff70251c24b9216b447b4190c4162b4f97b8ce2d8c488223d75d0d92
5
5
  SHA512:
6
- metadata.gz: ad1b643a11d1254d44dcbcdad0ac308a16eaadc0ad658407247e23250c6a1c0ba466ced3ebab25652cd7d72d0cec73fbf8ccaa2ee9b44b25d817f1d2ea77a960
7
- data.tar.gz: c88e40ce8d62e1e64d77e8f31a856a27bc7d88af254a3116d70621cb83fbcd3b189e5c40b28bea42c73d73f1a32adade49aff0ee570dcdcbdaa0f2e310d07d71
6
+ metadata.gz: 5ec452bfeb53407eed48aa5342a339e4137c95542547fcf098c7b9d91ba9cb0930e1afb3d42a2ce5c6e6bc0a779e6bd4555250cdb4fb37d566eb1d034b450f4f
7
+ data.tar.gz: eda0ad02dec02532b6430a46d997d9df4d5aeb963274efd9f08fedbb645d41721b81791d6a7641b7bd0e9834e9a02bafc8ae9e1ce4ece19e747a61b253351837
data/.rubocop.yml CHANGED
@@ -13,7 +13,7 @@ Metrics/BlockLength:
13
13
  - 'spec/**/*'
14
14
 
15
15
  RSpec/MultipleMemoizedHelpers:
16
- Max: 10
16
+ Enabled: false
17
17
 
18
18
  RSpec/ExampleLength:
19
19
  Max: 10
@@ -134,3 +134,22 @@ RSpec/FactoryBot/SyntaxMethods: # new in 2.7
134
134
  Enabled: true
135
135
  RSpec/Rails/AvoidSetupHook: # new in 2.4
136
136
  Enabled: true
137
+
138
+ Lint/RefinementImportMethods: # new in 1.27
139
+ Enabled: true
140
+ Security/CompoundHash: # new in 1.28
141
+ Enabled: true
142
+ Style/FetchEnvVar: # new in 1.28
143
+ Enabled: true
144
+ Style/NestedFileDirname: # new in 1.26
145
+ Enabled: true
146
+ Style/ObjectThen: # new in 1.28
147
+ Enabled: true
148
+ Style/RedundantInitialize: # new in 1.27
149
+ Enabled: true
150
+ RSpec/BeEq: # new in 2.9.0
151
+ Enabled: true
152
+ RSpec/BeNil: # new in 2.9.0
153
+ Enabled: true
154
+ RSpec/VerifiedDoubleReference: # new in 2.10.0
155
+ Enabled: true
data/Gemfile CHANGED
@@ -4,7 +4,7 @@ source 'https://rubygems.org'
4
4
 
5
5
  git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
6
6
 
7
- gem 'activesupport', ENV['RAILS_VERSION'] if ENV['RAILS_VERSION']
7
+ gem 'activesupport', ENV.fetch('RAILS_VERSION', nil) if ENV['RAILS_VERSION']
8
8
 
9
9
  # Specify your gem's dependencies in dor-services-client.gemspec
10
10
  gemspec
data/README.md CHANGED
@@ -123,9 +123,11 @@ object_client.notify_goobi
123
123
  # Manage versions
124
124
  object_client.version.inventory
125
125
  object_client.version.current
126
- object_client.version.openable?(**params)
127
- object_client.version.open(**params)
128
- object_client.version.close(description: 'Changed title', significance: 'minor')
126
+ object_client.version.openable?
127
+ # see dor-services-app openapi.yml for optional params
128
+ object_client.version.open(description: 'Changed title', significance: 'minor')
129
+ # see dor-services-app openapi.yml for optional params
130
+ object_client.version.close
129
131
 
130
132
  # Get the Dublin Core XML representation
131
133
  object_client.metadata.dublin_core
@@ -25,7 +25,7 @@ Gem::Specification.new do |spec|
25
25
  spec.required_ruby_version = '>= 2.7', '< 4' # dor-services-app needs 2.7 due to fedora3
26
26
 
27
27
  spec.add_dependency 'activesupport', '>= 4.2', '< 8'
28
- spec.add_dependency 'cocina-models', '~> 0.75.0' # leave pinned to patch level until cocina-models hits 1.0
28
+ spec.add_dependency 'cocina-models', '~> 0.77.0' # leave pinned to patch level until cocina-models hits 1.0
29
29
  spec.add_dependency 'deprecation', '>= 0'
30
30
  spec.add_dependency 'faraday', '~> 2.0'
31
31
  spec.add_dependency 'faraday-retry'
@@ -15,10 +15,10 @@ module Dor
15
15
 
16
16
  # Start accession on an object (start specified workflow, assemblyWF by default, and version if needed)
17
17
  # @param params [Hash<Symbol,String>] optional parameter hash
18
- # @option params [String] :significance set significance (major/minor/patch) of version change
19
- # @option params [String] :description set description of version change
20
- # @option params [String] :opening_user_name add opening username to the events datastream
21
- # @option params [String] :workflow the workflow to start (defaults to 'assemblyWF')
18
+ # @option params [String] :significance set significance (major/minor/patch) of version change - required
19
+ # @option params [String] :description set description of version change - required
20
+ # @option params [String] :opening_user_name add opening username to the events datastream - optional
21
+ # @option params [String] :workflow the workflow to start - defaults to 'assemblyWF'
22
22
  # @return [Boolean] true on success
23
23
  # @raise [NotFoundResponse] when the response is a 404 (object not found)
24
24
  # @raise [UnexpectedResponse] when the response is not successful.
@@ -33,7 +33,10 @@ module Dor
33
33
  # @raise [BadRequestError] when ETag not provided.
34
34
  # @return [Cocina::Models::DROWithMetadata,Cocina::Models::CollectionWithMetadata,Cocina::Models::AdminPolicyWithMetadata] the returned model
35
35
  # rubocop:disable Metrics/AbcSize
36
+ # rubocop:disable Metrics/MethodLength
36
37
  def update(params:, skip_lock: false)
38
+ raise ArgumentError, 'Cocina object not provided.' unless params.respond_to?(:externalIdentifier)
39
+
37
40
  # Raised if Cocina::Models::*WithMetadata not provided.
38
41
  raise ArgumentError, 'ETag not provided.' unless skip_lock || params.respond_to?(:lock)
39
42
 
@@ -42,7 +45,7 @@ module Dor
42
45
  req.headers['Content-Type'] = 'application/json'
43
46
  # asking the service to return JSON (else it'll be plain text)
44
47
  req.headers['Accept'] = 'application/json'
45
- req.headers['If-Match'] = params[:lock] unless skip_lock
48
+ req.headers['If-Match'] = params.lock unless skip_lock
46
49
  req.body = build_json_from_cocina(params)
47
50
  end
48
51
 
@@ -51,6 +54,7 @@ module Dor
51
54
  build_cocina_from_response(resp)
52
55
  end
53
56
  # rubocop:enable Metrics/AbcSize
57
+ # rubocop:enable Metrics/MethodLength
54
58
 
55
59
  # Pull in metadata from Symphony and updates descriptive metadata
56
60
  # @raise [NotFoundResponse] when the response is a 404 (object not found)
@@ -55,27 +55,6 @@ module Dor
55
55
  build_cocina_from_response(resp)
56
56
  end
57
57
 
58
- # Retrieves the Cocina model and response metadata
59
- # @raise [NotFoundResponse] when the response is a 404 (object not found)
60
- # @raise [UnexpectedResponse] when the response is not successful.
61
- # @return [Array<Cocina::Models::DRO,Cocina::Models::Collection,Cocina::Models::AdminPolicy,ObjectMetadata>] a tuple where
62
- # the first is the model and the second is a ObjectMetadata object
63
- def find_with_metadata
64
- resp = connection.get do |req|
65
- req.url object_path
66
- end
67
- raise_exception_based_on_response!(resp) unless resp.success?
68
-
69
- model = Cocina::Models.build(JSON.parse(resp.body))
70
-
71
- # Don't use #slice here as Faraday will downcase the keys.
72
- metadata = ObjectMetadata.new(updated_at: resp.headers['Last-Modified'],
73
- created_at: resp.headers['X-Created-At'],
74
- etag: resp.headers['ETag'])
75
- [model, metadata]
76
- end
77
- deprecation_deprecate find_with_metadata: 'Use find instead with provides models with metadata.'
78
-
79
58
  # Get a list of the collections. (Similar to Valkyrie's find_inverse_references_by)
80
59
  # @raise [UnexpectedResponse] if the request is unsuccessful.
81
60
  # @return [Array<Cocina::Models::DRO>]
@@ -27,15 +27,13 @@ module Dor
27
27
  end
28
28
 
29
29
  # Determines if a new version can be opened for a DOR object.
30
- # @param params [Hash] optional params (see dor-services-app)
31
30
  # @raise [NotFoundResponse] when the response is a 404 (object not found)
32
31
  # @raise [UnexpectedResponse] when the response is not successful.
33
32
  # @return [Boolean] true if a new version can be opened
34
33
  # rubocop:disable Metrics/MethodLength
35
- def openable?(**params)
34
+ def openable?
36
35
  resp = connection.get do |req|
37
36
  req.url "#{base_path}/openable"
38
- req.params = params
39
37
  end
40
38
 
41
39
  raise_exception_based_on_response!(resp) unless resp.success?
@@ -52,20 +50,30 @@ module Dor
52
50
  # rubocop:enable Metrics/MethodLength
53
51
 
54
52
  # Open new version for an object
55
- # @param params [Hash] optional params (see dor-services-app)
56
- # @raise [MalformedResponse] when the response is not parseable.
53
+ # @param description [String] a description of the object version being opened - required
54
+ # @param significance [String] 'major' 'minor' or 'admin' - required
55
+ # @param opening_user_name [String] sunetid - defaults to nil
56
+ # @param assume_accessioned [Boolean] if true, does not check whether object has been accessioned; defaults to false
57
57
  # @raise [NotFoundResponse] when the response is a 404 (object not found)
58
58
  # @raise [UnexpectedResponse] when the response is not successful.
59
- # @return [String] the current version
59
+ # @return [Cocina::Models::DROWithMetadata|CollectionWithMetadata|AdminPolicyWithMetadata] cocina model with updated version
60
60
  def open(**params)
61
- version = open_new_version_response(**params)
62
- raise MalformedResponse, "Version of #{object_identifier} is empty" if version.empty?
61
+ resp = connection.post do |req|
62
+ req.url open_new_version_path
63
+ req.headers['Content-Type'] = 'application/json'
64
+ req.body = params.to_json if params.any?
65
+ end
63
66
 
64
- version
67
+ raise_exception_based_on_response!(resp) unless resp.success?
68
+
69
+ build_cocina_from_response(resp)
65
70
  end
66
71
 
67
72
  # Close current version for an object
68
- # @param params [Hash] optional params (see dor-services-app)
73
+ # @param description [String] (optional) - a description of the object version being opened
74
+ # @param significance [String] (optional) - 'major' 'minor' or 'admin'
75
+ # @param user_name [String] (optional) - sunetid
76
+ # @param start_accession [Boolean] (optional) - whether to start accessioning workflow; defaults to true
69
77
  # @raise [NotFoundResponse] when the response is a 404 (object not found)
70
78
  # @raise [UnexpectedResponse] when the response is not successful.
71
79
  # @return [String] a message confirming successful closing
@@ -99,22 +107,6 @@ module Dor
99
107
  "#{api_version}/objects/#{object_identifier}"
100
108
  end
101
109
 
102
- # Make request to server to open a new version
103
- # @param params [Hash] optional params (see dor-services-app)
104
- # @raise [NotFoundResponse] when the response is a 404 (object not found)
105
- # @raise [UnexpectedResponse] on an unsuccessful response from the server
106
- # @return [String] the plain text from the server
107
- def open_new_version_response(**params)
108
- resp = connection.post do |req|
109
- req.url open_new_version_path
110
- req.headers['Content-Type'] = 'application/json'
111
- req.body = params.to_json if params.any?
112
- end
113
- return resp.body if resp.success?
114
-
115
- raise_exception_based_on_response!(resp)
116
- end
117
-
118
110
  def base_path
119
111
  "#{object_path}/versions"
120
112
  end
@@ -8,9 +8,9 @@ module Dor
8
8
  # API calls that are about a repository objects
9
9
  class Objects < VersionedService
10
10
  # Creates a new object in DOR
11
- # @param params [Cocina::Models::RequestDRO,Cocina::Models::RequestCollection,Cocina::Models::RequestAPO]
11
+ # @param params [Cocina::Models::RequestDRO,Cocina::Models::RequestCollection,Cocina::Models::RequestAdminPolicy]
12
12
  # @param assign_doi [Boolean]
13
- # @return [Cocina::Models::RequestDRO,Cocina::Models::RequestCollection,Cocina::Models::RequestAPO] the returned model
13
+ # @return [Cocina::Models::DROWithMetadata,Cocina::Models::CollectionWithMetadata,Cocina::Models::AdminPolicyWithMetadata] the returned model
14
14
  def register(params:, assign_doi: false)
15
15
  resp = connection.post do |req|
16
16
  req.url "#{api_version}/objects"
@@ -3,7 +3,7 @@
3
3
  module Dor
4
4
  module Services
5
5
  class Client
6
- VERSION = '9.1.1'
6
+ VERSION = '10.2.0'
7
7
  end
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dor-services-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 9.1.1
4
+ version: 10.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Coyne
8
8
  - Michael Giarlo
9
- autorequire:
9
+ autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2022-04-21 00:00:00.000000000 Z
12
+ date: 2022-05-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -37,14 +37,14 @@ dependencies:
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.75.0
40
+ version: 0.77.0
41
41
  type: :runtime
42
42
  prerelease: false
43
43
  version_requirements: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 0.75.0
47
+ version: 0.77.0
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: deprecation
50
50
  requirement: !ruby/object:Gem::Requirement
@@ -213,7 +213,7 @@ dependencies:
213
213
  - - ">="
214
214
  - !ruby/object:Gem::Version
215
215
  version: '0'
216
- description:
216
+ description:
217
217
  email:
218
218
  - jcoyne@justincoyne.com
219
219
  - leftwing@alumni.rutgers.edu
@@ -249,7 +249,6 @@ files:
249
249
  - lib/dor/services/client/metadata.rb
250
250
  - lib/dor/services/client/mutate.rb
251
251
  - lib/dor/services/client/object.rb
252
- - lib/dor/services/client/object_metadata.rb
253
252
  - lib/dor/services/client/object_version.rb
254
253
  - lib/dor/services/client/objects.rb
255
254
  - lib/dor/services/client/response_error_formatter.rb
@@ -262,7 +261,7 @@ homepage: https://github.com/sul-dlss/dor-services-client
262
261
  licenses: []
263
262
  metadata:
264
263
  rubygems_mfa_required: 'true'
265
- post_install_message:
264
+ post_install_message:
266
265
  rdoc_options: []
267
266
  require_paths:
268
267
  - lib
@@ -280,8 +279,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
280
279
  - !ruby/object:Gem::Version
281
280
  version: '0'
282
281
  requirements: []
283
- rubygems_version: 3.3.7
284
- signing_key:
282
+ rubygems_version: 3.2.32
283
+ signing_key:
285
284
  specification_version: 4
286
285
  summary: A client for dor-services-app
287
286
  test_files: []
@@ -1,34 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'deprecation'
4
-
5
- module Dor
6
- module Services
7
- class Client
8
- # An object representing metadata about the cocina object returned by the object show method
9
- class ObjectMetadata
10
- extend Deprecation
11
-
12
- attr_reader :created_at, :updated_at, :etag
13
-
14
- def initialize(created_at:, updated_at:, etag: nil)
15
- @created_at = created_at
16
- @updated_at = updated_at
17
- @etag = etag
18
- end
19
-
20
- def [](key)
21
- case key
22
- when 'Last-Modified'
23
- updated_at
24
- when 'X-Created-At'
25
- created_at
26
- else
27
- raise KeyError, 'Unknown key'
28
- end
29
- end
30
- deprecation_deprecate(:[] => 'Hash accessor is no longer used, use object accessor instead')
31
- end
32
- end
33
- end
34
- end