ezid-client 1.9.0 → 1.9.1

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: 6de69095537c80864a186b0089180182a74d08b2f6d9caddbab4628133919ef5
4
- data.tar.gz: fefce462bfcb82b6297b5af267c3c9fe5bd49808675892634cf00df004ebd488
3
+ metadata.gz: c9f57cbf5676426140bcb2dfa38ec0e1ba6bf522bb8a248e13adcbb2bd032d19
4
+ data.tar.gz: 3e7600a7a594330755d76fb8198bb9648b0369a5b50b43a218ecad8d9edce2c8
5
5
  SHA512:
6
- metadata.gz: 48ccd47fc68d90bcb867aee4a6880b1a9385cca28470611659d970db01e4a714538ff0f79268cbbcb4617ae6970e0a0c4ac9c640f283e1ed9d723d38d1a0d87d
7
- data.tar.gz: 697963d59a8dff29f4da1d78c48eb54a2cf500900b56301a2f18f892067ee7624cb8d601aa2d07a91372b8a8f614e114254a8b820e9a9108754cc902fac2e6b8
6
+ metadata.gz: c1569bd7a22632bb056ec30bfe3d00eaeb68114fda1a8f087b27ce6cc7a31299cd3777acbb176091ab49275ccebaa66c7d3324c2ef87cadc43183fcc3a441b45
7
+ data.tar.gz: 63efb714e862e2998411957807420405bed66260c39b351dff5ad8383677481419c212c48299c9f0089a1c64fae91c4e7dfd7cefb96943585c04381827ccb67a
@@ -9,9 +9,9 @@ name: Ruby
9
9
 
10
10
  on:
11
11
  push:
12
- branches: [ develop ]
12
+ branches: [ main ]
13
13
  pull_request:
14
- branches: [ develop ]
14
+ branches: [ main ]
15
15
 
16
16
  jobs:
17
17
  test:
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.9.0
1
+ 1.9.1
@@ -36,6 +36,11 @@ module Ezid
36
36
  # @example "ark:/99999/fk4"
37
37
  attr_accessor :default_shoulder
38
38
 
39
+ # Interval in seconds to wait between
40
+ # retries of failed requests
41
+ # @see Ezid::Request#execute.
42
+ attr_accessor :retry_interval
43
+
39
44
  def initialize
40
45
  @user = ENV["EZID_USER"]
41
46
  @password = ENV["EZID_PASSWORD"]
@@ -43,6 +48,7 @@ module Ezid
43
48
  @port = ENV["EZID_PORT"] || PORT
44
49
  @timeout = ENV["EZID_TIMEOUT"] || TIMEOUT
45
50
  @default_shoulder = ENV["EZID_DEFAULT_SHOULDER"]
51
+ @retry_interval = ( ENV["EZID_RETRY_INTERVAL"] || 15 ).to_i
46
52
  end
47
53
 
48
54
  def inspect
@@ -54,7 +54,7 @@ module Ezid
54
54
  response_class.new(get_response_for_request)
55
55
  rescue Net::HTTPServerException, UnexpectedResponseError => e
56
56
  if retries < 2
57
- sleep 15
57
+ sleep client.config.retry_interval
58
58
  retries += 1
59
59
  retry
60
60
  else
@@ -15,12 +15,9 @@ module Ezid
15
15
  ERROR = "error".freeze
16
16
 
17
17
  def initialize(http_response)
18
- super
18
+ http_response.value # raises Net::HTTPServerException
19
19
 
20
- unless __getobj__.code =~ /2\d\d/
21
- raise Error, "HTTP response error: %s %s" %
22
- [ __getobj__.code, __getobj__.message ]
23
- end
20
+ super
24
21
 
25
22
  unless status_line =~ /^(#{SUCCESS}|#{ERROR}): /
26
23
  raise UnexpectedResponseError, __getobj__.body
@@ -19,6 +19,7 @@ module Ezid
19
19
  config.port = ENV["EZID_TEST_PORT"] || TEST_PORT
20
20
  config.logger = Logger.new(File::NULL)
21
21
  config.default_shoulder = ENV["EZID_TEST_SHOULDER"] || TEST_SHOULDER
22
+ config.retry_interval = 1
22
23
  end
23
24
  end
24
25
 
@@ -1,15 +1,11 @@
1
1
  module Ezid
2
2
  RSpec.describe Client do
3
3
 
4
- let(:http_response) { double }
5
-
6
- before do
7
- allow(http_response).to receive(:value) { nil }
8
- allow(http_response).to receive(:code) { '200' }
9
- end
4
+ let(:http_response) { double(value: value, body: body) }
5
+ let(:value) { nil }
6
+ let(:body) { '' }
10
7
 
11
8
  describe "initialization without a block" do
12
- let(:http_response) { double }
13
9
  it "should not login" do
14
10
  expect_any_instance_of(described_class).not_to receive(:login)
15
11
  described_class.new
@@ -18,12 +14,14 @@ module Ezid
18
14
 
19
15
  describe "#create_identifier" do
20
16
  let(:id) { "ark:/99999/fk4fn19h88" }
21
- let(:http_response) { double(body: "success: ark:/99999/fk4fn19h88") }
17
+ let(:body) { "success: ark:/99999/fk4fn19h88" }
22
18
  let(:stub_response) { CreateIdentifierResponse.new(http_response) }
19
+
23
20
  before do
24
21
  allow(CreateIdentifierRequest).to receive(:execute).with(subject, id, nil) { stub_response }
25
22
  end
26
- it "should be a success" do
23
+
24
+ it "is a success" do
27
25
  response = subject.create_identifier(id)
28
26
  expect(response).to be_success
29
27
  expect(response.id).to eq(id)
@@ -32,19 +30,22 @@ module Ezid
32
30
 
33
31
  describe "#mint_identifier" do
34
32
  let(:stub_response) { MintIdentifierResponse.new(http_response) }
33
+
35
34
  before do
36
35
  allow(MintIdentifierRequest).to receive(:execute).with(subject, TEST_ARK_SHOULDER, nil) { stub_response }
37
36
  end
37
+
38
38
  describe "which is an ARK" do
39
- let(:http_response) { double(body: "success: ark:/99999/fk4fn19h88") }
39
+ let(:body) { "success: ark:/99999/fk4fn19h88" }
40
40
  it "should be a success" do
41
41
  response = subject.mint_identifier(TEST_ARK_SHOULDER)
42
42
  expect(response).to be_success
43
43
  expect(response.id).to eq("ark:/99999/fk4fn19h88")
44
44
  end
45
45
  end
46
+
46
47
  describe "which is a DOI" do
47
- let(:http_response) { double(body: "success: doi:10.5072/FK2TEST | ark:/99999/fk4fn19h88") }
48
+ let(:body) { "success: doi:10.5072/FK2TEST | ark:/99999/fk4fn19h88" }
48
49
  let(:metadata) do
49
50
  <<-EOS
50
51
  datacite.title: Test
@@ -54,31 +55,38 @@ datacite.publicationyear: 2014
54
55
  datacite.resourcetype: Other
55
56
  EOS
56
57
  end
58
+
57
59
  before do
58
60
  allow(MintIdentifierRequest).to receive(:execute).with(subject, TEST_DOI_SHOULDER, metadata) { stub_response }
59
61
  end
60
- it "should be a sucess" do
62
+
63
+ it "is a success" do
61
64
  response = subject.mint_identifier(TEST_DOI_SHOULDER, metadata)
62
65
  expect(response).to be_success
63
66
  expect(response.id).to eq("doi:10.5072/FK2TEST")
64
67
  expect(response.shadow_ark).to eq("ark:/99999/fk4fn19h88")
65
68
  end
66
69
  end
70
+
67
71
  describe "when a shoulder is not given" do
68
- let(:http_response) { double(body: "success: ark:/99999/fk4fn19h88") }
72
+ let(:body) { "success: ark:/99999/fk4fn19h88" }
73
+
69
74
  context "and the :default_shoulder config option is set" do
70
75
  before do
71
76
  allow(MintIdentifierRequest).to receive(:execute).with(subject, TEST_ARK_SHOULDER, nil) { stub_response }
72
77
  allow(Client.config).to receive(:default_shoulder) { TEST_ARK_SHOULDER }
73
78
  end
74
- it "should use the default shoulder" do
79
+
80
+ it "uses the default shoulder" do
75
81
  response = subject.mint_identifier
76
82
  expect(response).to be_success
77
83
  end
78
84
  end
85
+
79
86
  context "and the :default_shoulder config option is not set" do
80
87
  before { allow(Client.config).to receive(:default_shoulder) { nil } }
81
- it "should raise an exception" do
88
+
89
+ it "raises an exception" do
82
90
  expect { subject.mint_identifier }.to raise_error(Error)
83
91
  end
84
92
  end
@@ -87,8 +95,8 @@ EOS
87
95
 
88
96
  describe "#get_identifier_metadata" do
89
97
  let(:id) { "ark:/99999/fk4fn19h88" }
90
- let(:http_response) do
91
- double(body: <<-EOS
98
+ let(:body) do
99
+ <<-EOS
92
100
  success: ark:/99999/fk4fn19h88
93
101
  _updated: 1416507086
94
102
  _target: http://ezid.cdlib.org/id/ark:/99999/fk4fn19h88
@@ -99,13 +107,15 @@ _export: yes
99
107
  _created: 1416507086
100
108
  _status: public
101
109
  EOS
102
- )
110
+
103
111
  end
104
112
  let(:stub_response) { GetIdentifierMetadataResponse.new(http_response) }
113
+
105
114
  before do
106
115
  allow(GetIdentifierMetadataRequest).to receive(:execute).with(subject, id) { stub_response }
107
116
  end
108
- it "should retrieve the metadata" do
117
+
118
+ it "retrieves the metadata" do
109
119
  response = subject.get_identifier_metadata(id)
110
120
  expect(response).to be_success
111
121
  expect(response.metadata).to eq <<-EOS
@@ -123,18 +133,20 @@ EOS
123
133
 
124
134
  describe "server status" do
125
135
  let(:stub_response) { ServerStatusResponse.new(http_response) }
126
- let(:http_response) do
127
- double(body: <<-EOS
136
+ let(:body) do
137
+ <<-EOS
128
138
  success: EZID is up
129
139
  noid: up
130
140
  ldap: up
131
141
  EOS
132
- )
142
+
133
143
  end
144
+
134
145
  before do
135
146
  allow(ServerStatusRequest).to receive(:execute).with(subject, "*") { stub_response }
136
147
  end
137
- it "should report the status of EZID and subsystems" do
148
+
149
+ it "reports the status of EZID and subsystems" do
138
150
  response = subject.server_status("*")
139
151
  expect(response).to be_success
140
152
  expect(response).to be_up
@@ -147,11 +159,13 @@ EOS
147
159
 
148
160
  describe "batch download" do
149
161
  let(:stub_response) { BatchDownloadResponse.new(http_response) }
150
- let(:http_response) { double(body: "success: http://ezid.cdlib.org/download/da543b91a0.xml.gz") }
162
+ let(:body) { "success: http://ezid.cdlib.org/download/da543b91a0.xml.gz" }
163
+
151
164
  before do
152
165
  allow(BatchDownloadRequest).to receive(:execute).with(subject, format: "xml") { stub_response }
153
166
  end
154
- it "should return the URL to download the batch" do
167
+
168
+ it "returns the URL to download the batch" do
155
169
  response = subject.batch_download(format: "xml")
156
170
  expect(response).to be_success
157
171
  expect(response.download_url).to eq("http://ezid.cdlib.org/download/da543b91a0.xml.gz")
@@ -160,33 +174,78 @@ EOS
160
174
 
161
175
  describe "error handling" do
162
176
  let(:stub_response) { GetIdentifierMetadataResponse.new(http_response) }
177
+
163
178
  before do
164
179
  allow(GetIdentifierMetadataRequest).to receive(:execute).with(subject, "invalid") { stub_response }
165
180
  end
166
181
 
167
182
  describe "HTTP error response" do
168
183
  before do
169
- allow(http_response).to receive(:code) { '500' }
170
- allow(http_response).to receive(:message) { 'Internal Server Error' }
184
+ allow(http_response).to receive(:value).and_raise(Net::HTTPServerException.new('Barf!', double))
171
185
  end
172
- it "should raise an exception" do
173
- expect { subject.get_identifier_metadata("invalid") }.to raise_error(Error)
186
+
187
+ it "raises an exception" do
188
+ expect { subject.get_identifier_metadata("invalid") }.to raise_error(Net::HTTPServerException)
174
189
  end
175
190
  end
176
191
 
177
192
  describe "EZID API error response" do
178
- let(:http_response) { double(body: "error: bad request - no such identifier") }
179
- it "should raise an exception" do
193
+ let(:body) { "error: bad request - no such identifier" }
194
+
195
+ it "raises an exception" do
180
196
  expect { subject.get_identifier_metadata("invalid") }.to raise_error(Error)
181
197
  end
182
198
  end
183
199
 
184
- describe "Unexpected response" do
185
- let(:http_response) { double(body: "<html>\n<head><title>Ouch!</title></head>\n<body>Help!</body>\n</html>") }
186
- it "should raise an exception" do
200
+ describe "Unexpected response (body)" do
201
+ let(:body) do
202
+ <<-EOS
203
+ <html>
204
+ <head>
205
+ <title>Ouch!</title>
206
+ </head>
207
+ <body>
208
+ Help!
209
+ </body>
210
+ </html>
211
+ EOS
212
+
213
+ end
214
+
215
+ it "raises an exception" do
187
216
  expect { subject.get_identifier_metadata("invalid") }.to raise_error(UnexpectedResponseError)
188
217
  end
189
218
  end
190
219
  end
220
+
221
+ describe "retrying on certain errors" do
222
+ before do
223
+ allow(GetIdentifierMetadataResponse).to receive(:new).and_raise(exception)
224
+ end
225
+
226
+ describe "HTTP error" do
227
+ let(:exception) { Net::HTTPServerException.new('Barf!', double) }
228
+
229
+ it "retries twice" do
230
+ begin
231
+ subject.get_identifier_metadata("invalid")
232
+ rescue Exception => _
233
+ end
234
+ expect(GetIdentifierMetadataResponse).to have_received(:new).exactly(3).times
235
+ end
236
+ end
237
+
238
+ describe "Unexpected response" do
239
+ let(:exception) { UnexpectedResponseError.new("HTML?!") }
240
+
241
+ it "retries twice" do
242
+ begin
243
+ subject.get_identifier_metadata("invalid")
244
+ rescue Exception => _
245
+ end
246
+ expect(GetIdentifierMetadataResponse).to have_received(:new).exactly(3).times
247
+ end
248
+ end
249
+ end
191
250
  end
192
251
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ezid-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.9.0
4
+ version: 1.9.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Chandek-Stark
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-04-09 00:00:00.000000000 Z
11
+ date: 2021-05-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hashie