dor-services-client 0.7.0 → 0.8.0

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: 875495ec63471d10398a445d157995ea10d279be90f83f6fd00de0587dbd9eda
4
- data.tar.gz: df2c81d982fd112a808806ab41eaade32edcac05be679dbbfc5bdb5ab5c4625c
3
+ metadata.gz: bfe6441b14958a78f3b20690780ee260abaecaf92341ce8775c8735e311b9a1f
4
+ data.tar.gz: 73d11d588c9ab1274415229f2d051f2dda45c4f3a900a4428d564a7d1fc38dd5
5
5
  SHA512:
6
- metadata.gz: 5fd7d69b9ea0a9282be2d6c7e5be789f20df33f6870633fb3fe248b2963c5d1cf3f6c0b6ab2b1659107f490ac4825a32f417643b3b8e55b5d3a25dbd06eb908e
7
- data.tar.gz: 1869bd7147d957bbb5568110ce6e389eefee1956d911bac2eda31f5fa379ff57d44a97c697503b6b0a5b7f27786a2a1288b9b7b1b23b3e0a2ca2dd77dc6c3a2a
6
+ metadata.gz: ee530c3203266a71c5f0e6fc0bf2563f46b03fae774cf29595378dc324e4e8d2ef86116eb72126908639620716e8b15cbe52408c062ed5db284f87867cc090d6
7
+ data.tar.gz: 3e90b21e6be05de21faf18b68836c7592b9e8bc3575c4f8cb75397945ea1158392561e51ca89ba3950f008e55817c7aee2dc75433e829a6f8d3ad9b325167f8e
data/README.md CHANGED
@@ -25,27 +25,28 @@ Or install it yourself as:
25
25
 
26
26
  ## Usage
27
27
 
28
- To configure the client, you may do so globally (say, in a Rails initializer):
28
+ To configure and use the client, here's an example:
29
29
 
30
30
  ```ruby
31
31
  require 'dor/services/client'
32
32
 
33
- Dor::Services::Client.configure(url: Settings.DOR_SERVICES.URL,
34
- username: Settings.DOR_SERVICES.USER,
35
- password: Settings.DOR_SERVICES.PASS)
36
- ```
37
-
38
- Note that the client may not be used without first having been configured, and the `url` keyword is required. The `username` and `password` arguments are optional. (If you are working in a project where the credentials are embedded in the URL, that ought to work just fine as well.)
33
+ def do_the_thing
34
+ # This API endpoint returns JSON
35
+ response = client.register(params: { druid: 'druid:123' })
36
+ response[:pid] # => 'druid:123'
37
+ end
39
38
 
40
- Then you can invoke methods on the client that correspond to dor-services-app API requests, e.g.:
39
+ private
41
40
 
42
- ```ruby
43
- # This API endpoint returns JSON
44
- response = Dor::Services::Client.register(params: { druid: 'druid:123' })
45
- response[:pid]
46
- # => 'druid:123'
41
+ def client
42
+ @client ||= Dor::Services::Client.configure(url: Settings.DOR_SERVICES.URL,
43
+ username: Settings.DOR_SERVICES.USER,
44
+ password: Settings.DOR_SERVICES.PASS)
45
+ end
47
46
  ```
48
47
 
48
+ Note that the client may **not** be used without first having been configured, and the `url` keyword is **required**. The `username` and `password` arguments are optional. (If you are working in a project where the credentials are embedded in the URL, that ought to work just fine as well.)
49
+
49
50
  ## Development
50
51
 
51
52
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -23,6 +23,7 @@ Gem::Specification.new do |spec|
23
23
  spec.require_paths = ['lib']
24
24
 
25
25
  spec.add_dependency 'activesupport', '>= 4.2', '< 6'
26
+ spec.add_dependency 'deprecation'
26
27
  spec.add_dependency 'faraday', '~> 0.15'
27
28
  spec.add_dependency 'nokogiri', '~> 1.8'
28
29
 
@@ -7,8 +7,10 @@ require 'active_support/core_ext/hash/indifferent_access'
7
7
  require 'active_support/core_ext/module/delegation'
8
8
  require 'dor/services/client/versioned_service'
9
9
  require 'dor/services/client/files'
10
+ require 'dor/services/client/object'
10
11
  require 'dor/services/client/objects'
11
12
  require 'dor/services/client/release_tags'
13
+ require 'dor/services/client/sdr'
12
14
  require 'dor/services/client/workflow'
13
15
  require 'dor/services/client/workspace'
14
16
 
@@ -28,10 +30,18 @@ module Dor
28
30
 
29
31
  include Singleton
30
32
 
33
+ def object(object)
34
+ Object.new(connection: connection, version: DEFAULT_VERSION, object: object)
35
+ end
36
+
31
37
  def objects
32
38
  @objects ||= Objects.new(connection: connection, version: DEFAULT_VERSION)
33
39
  end
34
40
 
41
+ def sdr
42
+ @sdr ||= SDR.new(connection: connection, version: DEFAULT_VERSION)
43
+ end
44
+
35
45
  def files
36
46
  @files ||= Files.new(connection: connection, version: DEFAULT_VERSION)
37
47
  end
@@ -123,7 +133,6 @@ module Dor
123
133
 
124
134
  # Notify goobi system of a new object
125
135
  delegate :notify_goobi, to: :objects
126
-
127
136
  end
128
137
 
129
138
  # Gets the current version number for the object
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'nokogiri'
4
+ require 'deprecation'
5
+
6
+ module Dor
7
+ module Services
8
+ class Client
9
+ # API calls that are about a repository object
10
+ class Object < VersionedService
11
+ # @param object [String] the pid for the object
12
+ def initialize(connection:, version:, object:)
13
+ super(connection: connection, version: version)
14
+ @object = object
15
+ end
16
+
17
+ # Publish a new object
18
+ # @raise [UnexpectedResponse] when the response is not successful.
19
+ # @return [boolean] true on success
20
+ def publish
21
+ resp = connection.post do |req|
22
+ req.url "#{api_version}/objects/#{object}/publish"
23
+ end
24
+ raise UnexpectedResponse, "#{resp.reason_phrase}: #{resp.status} (#{resp.body})" unless resp.success?
25
+
26
+ true
27
+ end
28
+
29
+ # Notify the external Goobi system for a new object that was registered in DOR
30
+ # @raise [UnexpectedResponse] when the response is not successful.
31
+ # @return [boolean] true on success
32
+ def notify_goobi
33
+ resp = connection.post do |req|
34
+ req.url "#{object_path}/notify_goobi"
35
+ end
36
+ raise UnexpectedResponse, "#{resp.reason_phrase}: #{resp.status} (#{resp.body})" unless resp.success?
37
+
38
+ true
39
+ end
40
+
41
+ # Get the current_version for a DOR object. This comes from Dor::VersionMetadataDS
42
+ # @raise [UnexpectedResponse] when the response is not successful.
43
+ # @return [String] the version identifier
44
+ def current_version
45
+ resp = connection.get do |req|
46
+ req.url "#{object_path}/versions/current"
47
+ end
48
+ raise UnexpectedResponse, "#{resp.reason_phrase}: #{resp.status} (#{resp.body})" unless resp.success?
49
+
50
+ resp.body
51
+ end
52
+
53
+ private
54
+
55
+ attr_reader :object
56
+
57
+ def object_path
58
+ "#{api_version}/objects/#{object}"
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
@@ -1,12 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'nokogiri'
4
+ require 'deprecation'
4
5
 
5
6
  module Dor
6
7
  module Services
7
8
  class Client
8
- # API calls that are about a repository object
9
+ # API calls that are about a repository objects
9
10
  class Objects < VersionedService
11
+ extend Deprecation
12
+
10
13
  # Creates a new object in DOR
11
14
  # @return [HashWithIndifferentAccess] the response, which includes a :pid
12
15
  def register(params:)
@@ -19,26 +22,18 @@ module Dor
19
22
  # @raise [UnexpectedResponse] when the response is not successful.
20
23
  # @return [boolean] true on success
21
24
  def publish(object:)
22
- resp = connection.post do |req|
23
- req.url "#{api_version}/objects/#{object}/publish"
24
- end
25
- raise UnexpectedResponse, "#{resp.reason_phrase}: #{resp.status} (#{resp.body})" unless resp.success?
26
-
27
- true
25
+ Object.new(connection: connection, version: api_version, object: object).publish
28
26
  end
27
+ deprecation_deprecate publish: 'Use Dor::Client.object(obj).publish instead'
29
28
 
30
29
  # Notify the external Goobi system for a new object that was registered in DOR
31
30
  # @param object [String] the pid for the object
32
31
  # @raise [UnexpectedResponse] when the response is not successful.
33
32
  # @return [boolean] true on success
34
33
  def notify_goobi(object:)
35
- resp = connection.post do |req|
36
- req.url "#{api_version}/objects/#{object}/notify_goobi"
37
- end
38
- raise UnexpectedResponse, "#{resp.reason_phrase}: #{resp.status} (#{resp.body})" unless resp.success?
39
-
40
- true
34
+ Object.new(connection: connection, version: api_version, object: object).notify_goobi
41
35
  end
36
+ deprecation_deprecate notify_goobi: 'Use Dor::Client.object(obj).notify_goobi instead'
42
37
 
43
38
  # Gets the current version number for the object
44
39
  # @param object [String] the pid for the object
@@ -46,16 +41,9 @@ module Dor
46
41
  # @raise [MalformedResponse] when the response is not parseable.
47
42
  # @return [Integer] the current version
48
43
  def current_version(object:)
49
- xml = current_version_response(object: object)
50
- begin
51
- doc = Nokogiri::XML xml
52
- raise if doc.root.name != 'currentVersion'
53
-
54
- return Integer(doc.text)
55
- rescue StandardError
56
- raise MalformedResponse, "Unable to parse XML from current_version API call: #{xml}"
57
- end
44
+ SDR.new(connection: connection, version: api_version).current_version(object: object)
58
45
  end
46
+ deprecation_deprecate current_version: 'Use Dor::Client.sdr.current_version instead'
59
47
 
60
48
  private
61
49
 
@@ -74,22 +62,6 @@ module Dor
74
62
 
75
63
  raise UnexpectedResponse, "#{resp.reason_phrase}: #{resp.status} (#{resp.body})"
76
64
  end
77
-
78
- # 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
81
- def current_version_response(object:)
82
- resp = connection.get do |req|
83
- req.url current_version_path(object: object)
84
- end
85
- return resp.body if resp.success?
86
-
87
- raise UnexpectedResponse, "#{resp.reason_phrase}: #{resp.status} (#{resp.body}) for #{object}"
88
- end
89
-
90
- def current_version_path(object:)
91
- "#{api_version}/sdr/objects/#{object}/current_version"
92
- end
93
65
  end
94
66
  end
95
67
  end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dor
4
+ module Services
5
+ class Client
6
+ # API calls that are about preserved objects
7
+ class SDR < VersionedService
8
+ # Gets the current version number for the object
9
+ # @param object [String] the pid for the object
10
+ # @raise [UnexpectedResponse] when the response is not successful.
11
+ # @raise [MalformedResponse] when the response is not parseable.
12
+ # @return [Integer] the current version
13
+ def current_version(object:)
14
+ xml = current_version_response(object: object)
15
+ begin
16
+ doc = Nokogiri::XML xml
17
+ raise if doc.root.name != 'currentVersion'
18
+
19
+ return Integer(doc.text)
20
+ rescue StandardError
21
+ raise MalformedResponse, "Unable to parse XML from current_version API call: #{xml}"
22
+ end
23
+ end
24
+
25
+ private
26
+
27
+ # make the request to the server for the currentVersion xml
28
+ # @raises [UnexpectedResponse] on an unsuccessful response from the server
29
+ # @returns [String] the raw xml from the server
30
+ def current_version_response(object:)
31
+ resp = connection.get do |req|
32
+ req.url current_version_path(object: object)
33
+ end
34
+ return resp.body if resp.success?
35
+
36
+ raise UnexpectedResponse, "#{resp.reason_phrase}: #{resp.status} (#{resp.body}) for #{object}"
37
+ end
38
+
39
+ def current_version_path(object:)
40
+ "#{api_version}/sdr/objects/#{object}/current_version"
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -3,7 +3,7 @@
3
3
  module Dor
4
4
  module Services
5
5
  class Client
6
- VERSION = '0.7.0'
6
+ VERSION = '0.8.0'
7
7
  end
8
8
  end
9
9
  end
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: 0.7.0
4
+ version: 0.8.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: 2018-12-21 00:00:00.000000000 Z
12
+ date: 2019-01-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -31,6 +31,20 @@ dependencies:
31
31
  - - "<"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '6'
34
+ - !ruby/object:Gem::Dependency
35
+ name: deprecation
36
+ requirement: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ type: :runtime
42
+ prerelease: false
43
+ version_requirements: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
34
48
  - !ruby/object:Gem::Dependency
35
49
  name: faraday
36
50
  requirement: !ruby/object:Gem::Requirement
@@ -151,8 +165,10 @@ files:
151
165
  - dor-services-client.gemspec
152
166
  - lib/dor/services/client.rb
153
167
  - lib/dor/services/client/files.rb
168
+ - lib/dor/services/client/object.rb
154
169
  - lib/dor/services/client/objects.rb
155
170
  - lib/dor/services/client/release_tags.rb
171
+ - lib/dor/services/client/sdr.rb
156
172
  - lib/dor/services/client/version.rb
157
173
  - lib/dor/services/client/versioned_service.rb
158
174
  - lib/dor/services/client/workflow.rb
@@ -176,7 +192,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
176
192
  version: '0'
177
193
  requirements: []
178
194
  rubyforge_project:
179
- rubygems_version: 2.7.8
195
+ rubygems_version: 2.7.6
180
196
  signing_key:
181
197
  specification_version: 4
182
198
  summary: A client for dor-services-app