dor-services-client 0.7.0 → 0.8.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: 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