dor-services-client 1.7.0 → 1.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: d21a10048e6c6a968aab94efe1343d0ccd8b516aa7400e38dbf7db600cdda10c
4
- data.tar.gz: e3eb26fe950f1bf8b8c4c34a2ee8b24e082bd4a8aa0938a5c856a48090f5d498
3
+ metadata.gz: 3ebc90d8d21ff990c42ec2836981cc9f9f58ecb0381a563b02beaa9f7f1c4192
4
+ data.tar.gz: a6c3e9486eb2b3bd734eec127721d8f17bbee913718e5038fa37b9910be0c2c2
5
5
  SHA512:
6
- metadata.gz: 0b2580ebf1b1b536a9934248a8d55cc0d8f956f9a438befcf48042a4ca26e309a167f4f4174439e1b4866e228482a922cc9add40b99aacc7a96a3fc817a9633d
7
- data.tar.gz: 5ac1721da5515fd5a42be65b2bb3e59a9c03bae2a30fd52d1b9065e143a7874d616272a190b1dd6eb5ac4563fee1f3d4ec534f758ff78390a4d3bcaa383a4b8b
6
+ metadata.gz: 21e178424afe1d89adb1f2aa6f372eac45d3e5a04da66839494acb95780d370e50b09c26e43efe7d9093cb57940dab8c5306ee62b4a57763f9f4e558c88fc63a
7
+ data.tar.gz: 907c84790debd06e77586f9f636fcbdc9c2d621a266c54aeee920a2de7ef468c3de43b15eee0e9624a53e5c0f2b31bbac84de5612d1488c992a930e57c693493
data/README.md CHANGED
@@ -59,10 +59,14 @@ objects_client.register(params: {})
59
59
  # For performing operations on a known, registered object
60
60
  object_client = Dor::Services::Client.object(object_identifier)
61
61
  object_client.publish
62
+ # Copy metadata from Symphony into descMetadata
63
+ object_client.refresh_metadata
62
64
  object_client.notify_goobi
63
65
  object_client.current_version
64
66
  object_client.open_new_version(**params)
65
67
  object_client.close_version(**params)
68
+ # Return the Dublin Core XML representation
69
+ object_client.metadata.dublin_core
66
70
  object_client.files.retrieve(filename: filename_string)
67
71
  object_client.files.preserved_content(filename: filename_string, version: version_string)
68
72
  object_client.files.list
@@ -56,10 +56,19 @@ module Dor
56
56
  end
57
57
 
58
58
  class << self
59
- def configure(url:, username: nil, password: nil)
59
+ # @param [String] url
60
+ # @param [String] username
61
+ # @param [String] password
62
+ # @param [String] token a bearer token for HTTP auth
63
+ # @param [String] token_header ('Authorization') set this to something if you are also using
64
+ # basic auth, or the headers will collide
65
+ def configure(url:, username: nil, password: nil, token: nil, token_header: 'Authorization')
60
66
  instance.url = url
61
67
  instance.username = username
62
68
  instance.password = password
69
+ instance.token = token
70
+ instance.token_header = token_header
71
+
63
72
  # Force connection to be re-established when `.configure` is called
64
73
  instance.connection = nil
65
74
 
@@ -69,11 +78,11 @@ module Dor
69
78
  delegate :objects, :object, :workflows, to: :instance
70
79
  end
71
80
 
72
- attr_writer :url, :username, :password, :connection
81
+ attr_writer :url, :username, :password, :token, :token_header, :connection
73
82
 
74
83
  private
75
84
 
76
- attr_reader :username, :password
85
+ attr_reader :username, :password, :token, :token_header
77
86
 
78
87
  def url
79
88
  @url || raise(Error, 'url has not yet been configured')
@@ -86,9 +95,10 @@ module Dor
86
95
  # @note when username & password are nil, this line is required else
87
96
  # the Faraday instance will be passed an empty block, which
88
97
  # causes the adapter not to be set. Thus, everything breaks.
89
- conn.adapter Faraday.default_adapter
98
+ conn.adapter Faraday.default_adapter
90
99
  conn.basic_auth username, password if username && password
91
100
  conn.headers[:user_agent] = user_agent
101
+ conn.headers[token_header] = "Bearer #{token}" if token
92
102
  end
93
103
  end
94
104
 
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: tru
2
+
3
+ module Dor
4
+ module Services
5
+ class Client
6
+ # API calls that are about retrieving metadata
7
+ class Metadata < 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
+ # @return [String] The Dublin Core XML representation of the object
15
+ def dublin_core
16
+ resp = connection.get do |req|
17
+ req.url "#{base_path}/dublin_core"
18
+ end
19
+ return resp.body if resp.success?
20
+ return if resp.status == 404
21
+
22
+ raise UnexpectedResponse, "#{resp.reason_phrase}: #{resp.status} (#{resp.body}) for #{object_identifier}"
23
+ end
24
+
25
+ # @return [String] The descriptive metadata XML representation of the object
26
+ def descriptive
27
+ resp = connection.get do |req|
28
+ req.url "#{base_path}/descriptive"
29
+ end
30
+ return resp.body if resp.success?
31
+ return if resp.status == 404
32
+
33
+ raise UnexpectedResponse, "#{resp.reason_phrase}: #{resp.status} (#{resp.body}) for #{object_identifier}"
34
+ end
35
+
36
+ private
37
+
38
+ attr_reader :object_identifier
39
+
40
+ def base_path
41
+ "#{api_version}/objects/#{object_identifier}/metadata"
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -5,6 +5,7 @@ require 'dor/services/client/release_tags'
5
5
  require 'dor/services/client/sdr'
6
6
  require 'dor/services/client/workflow'
7
7
  require 'dor/services/client/workspace'
8
+ require 'dor/services/client/metadata'
8
9
 
9
10
  module Dor
10
11
  module Services
@@ -25,6 +26,10 @@ module Dor
25
26
  @sdr ||= SDR.new(connection: connection, version: api_version, object_identifier: object_identifier)
26
27
  end
27
28
 
29
+ def metadata
30
+ @metadata ||= Metadata.new(connection: connection, version: api_version, object_identifier: object_identifier)
31
+ end
32
+
28
33
  def files
29
34
  @files ||= Files.new(connection: connection, version: api_version, object_identifier: object_identifier)
30
35
  end
@@ -67,6 +72,19 @@ module Dor
67
72
  raise_exception_based_on_response!(resp)
68
73
  end
69
74
 
75
+ # Pull in metadata from Symphony and update descMetadata
76
+ # @raise [NotFoundResponse] when the response is a 404 (object not found)
77
+ # @raise [UnexpectedResponse] when the response is not successful.
78
+ # @return [boolean] true on success
79
+ def refresh_metadata
80
+ resp = connection.post do |req|
81
+ req.url "#{object_path}/refresh_metadata"
82
+ end
83
+ return true if resp.success?
84
+
85
+ raise_exception_based_on_response!(resp)
86
+ end
87
+
70
88
  # Notify the external Goobi system for a new object that was registered in DOR
71
89
  # @raise [NotFoundResponse] when the response is a 404 (object not found)
72
90
  # @raise [UnexpectedResponse] when the response is not successful.
@@ -3,7 +3,7 @@
3
3
  module Dor
4
4
  module Services
5
5
  class Client
6
- VERSION = '1.7.0'
6
+ VERSION = '1.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: 1.7.0
4
+ version: 1.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: 2019-03-14 00:00:00.000000000 Z
12
+ date: 2019-05-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -180,6 +180,7 @@ files:
180
180
  - lib/dor/services/client.rb
181
181
  - lib/dor/services/client/error_faraday_middleware.rb
182
182
  - lib/dor/services/client/files.rb
183
+ - lib/dor/services/client/metadata.rb
183
184
  - lib/dor/services/client/object.rb
184
185
  - lib/dor/services/client/objects.rb
185
186
  - lib/dor/services/client/release_tags.rb