ezid-client 1.6.0 → 1.9.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
- SHA1:
3
- metadata.gz: fea39a10be4faa6f53fc90a1e47912aac563852b
4
- data.tar.gz: 7812a50e289a44f48d2f7da5d160e87178f5aad2
2
+ SHA256:
3
+ metadata.gz: 6de69095537c80864a186b0089180182a74d08b2f6d9caddbab4628133919ef5
4
+ data.tar.gz: fefce462bfcb82b6297b5af267c3c9fe5bd49808675892634cf00df004ebd488
5
5
  SHA512:
6
- metadata.gz: 31a187c0ba4f9352093a87e1f86d963ea6d2204a564a81ccef9f4e63990afd709e479c72003a305db1db62c8fe224abea4ce8b335f431cf81e130d257a0e0761
7
- data.tar.gz: 473bc07ee2231bf9d538097898796e11867162844024f494fddc33add670a44822b4be1ced89c60987328cf1deb1c30bbed4974919c92733ce9f893b74edbba9
6
+ metadata.gz: 48ccd47fc68d90bcb867aee4a6880b1a9385cca28470611659d970db01e4a714538ff0f79268cbbcb4617ae6970e0a0c4ac9c640f283e1ed9d723d38d1a0d87d
7
+ data.tar.gz: 697963d59a8dff29f4da1d78c48eb54a2cf500900b56301a2f18f892067ee7624cb8d601aa2d07a91372b8a8f614e114254a8b820e9a9108754cc902fac2e6b8
@@ -0,0 +1,35 @@
1
+ # This workflow uses actions that are not certified by GitHub.
2
+ # They are provided by a third-party and are governed by
3
+ # separate terms of service, privacy policy, and support
4
+ # documentation.
5
+ # This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
6
+ # For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
7
+
8
+ name: Ruby
9
+
10
+ on:
11
+ push:
12
+ branches: [ develop ]
13
+ pull_request:
14
+ branches: [ develop ]
15
+
16
+ jobs:
17
+ test:
18
+
19
+ runs-on: ubuntu-latest
20
+ strategy:
21
+ matrix:
22
+ ruby-version: ['2.6', '2.7']
23
+
24
+ steps:
25
+ - uses: actions/checkout@v2
26
+ - name: Set up Ruby
27
+ # To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
28
+ # change this to (see https://github.com/ruby/setup-ruby#versioning):
29
+ # uses: ruby/setup-ruby@v1
30
+ uses: ruby/setup-ruby@v1
31
+ with:
32
+ ruby-version: ${{ matrix.ruby-version }}
33
+ bundler-cache: true # runs 'bundle install' and caches installed gems automatically
34
+ - name: Run tests
35
+ run: bundle exec rspec ./spec/unit/
data/README.md CHANGED
@@ -33,9 +33,11 @@ Or install it yourself as:
33
33
  >> identifier = Ezid::Identifier.mint("ark:/99999/fk4")
34
34
  I, [2016-03-01T22:20:08.505323 #35148] INFO -- : EZID MintIdentifier -- success: ark:/99999/fk4tq65d6k
35
35
  => #<Ezid::Identifier id=ark:/99999/fk4tq65d6k>
36
+
36
37
  >> identifier.status
37
38
  I, [2016-03-01T22:20:22.323650 #35148] INFO -- : EZID GetIdentifierMetadata -- success: ark:/99999/fk4tq65d6k
38
39
  => "public"
40
+
39
41
  >> identifier.target
40
42
  => "http://ezid.cdlib.org/id/ark:/99999/fk4tq65d6k"
41
43
  ```
@@ -87,11 +89,14 @@ I, [2014-12-04T15:07:00.648676 #86655] INFO -- : EZID GetIdentifierMetadata --
87
89
  ```
88
90
  >> identifier.target
89
91
  => "http://ezid.cdlib.org/id/ark:/99999/fk43f4wd4v"
92
+
90
93
  >> identifier.target = "http://example.com"
91
94
  => "http://example.com"
95
+
92
96
  >> identifier.save
93
97
  I, [2014-12-09T11:24:26.321801 #32279] INFO -- : EZID ModifyIdentifier -- success: ark:/99999/fk43f4wd4v
94
98
  => #<Ezid::Identifier id="ark:/99999/fk43f4wd4v">
99
+
95
100
  >> identifier.target
96
101
  I, [2014-12-09T11:24:27.039288 #32279] INFO -- : EZID GetIdentifierMetadata -- success: ark:/99999/fk43f4wd4v
97
102
  => "http://example.com"
@@ -107,6 +112,7 @@ I, [2014-12-09T11:24:27.039288 #32279] INFO -- : EZID GetIdentifierMetadata --
107
112
  >> identifier = Ezid::Identifier.mint("ark:/99999/fk4", status: "reserved")
108
113
  I, [2016-03-01T22:26:08.645858 #36701] INFO -- : EZID MintIdentifier -- success: ark:/99999/fk4pz5fm1b
109
114
  => #<Ezid::Identifier id=ark:/99999/fk4pz5fm1b>
115
+
110
116
  >> identifier.delete
111
117
  I, [2016-03-01T22:26:14.829731 #36701] INFO -- : EZID GetIdentifierMetadata -- success: ark:/99999/fk4pz5fm1b
112
118
  I, [2016-03-01T22:26:15.711390 #36701] INFO -- : EZID DeleteIdentifier -- success: ark:/99999/fk4pz5fm1b
@@ -120,22 +126,57 @@ See http://ezid.cdlib.org/doc/apidoc.html#parameters. Repeated values should be
120
126
  *Added in v1.3.0:* `Ezid::BatchDownload` class.
121
127
 
122
128
  ```
123
- >> batch = Ezid::BatchDownload.new(:csv)
129
+ >> batch_download = Ezid::BatchDownload.new(:csv)
124
130
  => #<Ezid::BatchDownload format=:csv>
125
- >> batch.column = ["_id", "_target"]
131
+
132
+ >> batch_download.column = ["_id", "_target"]
126
133
  => ["_id", "_target"]
127
- >> batch.createdAfter = Date.today.to_time
134
+
135
+ >> batch_download.createdAfter = Date.today.to_time
128
136
  => 2016-02-24 00:00:00 -0500
129
- >> batch
137
+
138
+ >> batch_download
130
139
  => #<Ezid::BatchDownload column=["_id", "_target"] createdAfter=1456290000 format=:csv>
131
- >> batch.download_url
140
+
141
+ >> batch_download.url
132
142
  I, [2016-02-24T18:03:40.828005 #1084] INFO -- : EZID BatchDownload -- success: http://ezid.cdlib.org/download/4a63401e17.csv.gz
133
143
  => "http://ezid.cdlib.org/download/4a63401e17.csv.gz"
134
- >> batch.download_file
135
- File successfully download to /current/working/directory/4a63401e17.csv.gz.
136
- => nil
144
+
145
+ >> batch_download.file
146
+ => /current/working/directory/4a63401e17.csv.gz
137
147
  ```
138
148
 
149
+ ## Batch
150
+
151
+ *Added in v1.6.0.* `Ezid::Batch` class.
152
+
153
+ **Version 1.7.0 upgrade note:** This class was originally named `Ezid::BatchEnumerator`, but it is not a Ruby enumerator. `Ezid::Batch` is the new name with the same API.
154
+
155
+ ```
156
+ >> require 'ezid/batch'
157
+ => true
158
+
159
+ >> batch = Ezid::Batch.new(:anvl, "spec/fixtures/anvl_batch.txt")
160
+ => #<Ezid::Batch:0x007f87a8900308 @format=:anvl, @batch_file="spec/fixtures/anvl_batch.txt">
161
+
162
+ >> id = batch.first
163
+ => #<Ezid::Identifier id=ark:/99999/fk4086hs23>
164
+
165
+ >> id.target
166
+ => "http://example.com"
167
+
168
+ >> puts id.metadata
169
+ _updated: 1488227717
170
+ _target: http://example.com
171
+ _profile: erc
172
+ _ownergroup: apitest
173
+ _owner: apitest
174
+ _export: yes
175
+ _created: 1488227717
176
+ _status: public
177
+ => nil
178
+ ```
179
+
139
180
  ## Metadata handling
140
181
 
141
182
  Accessors are provided to ease the use of EZID [reserved metadata elements](http://ezid.cdlib.org/doc/apidoc.html#internal-metadata) and [metadata profiles](http://ezid.cdlib.org/doc/apidoc.html#metadata-profiles):
@@ -145,6 +186,7 @@ Accessors are provided to ease the use of EZID [reserved metadata elements](http
145
186
  ```
146
187
  >> identifier.status # reads "_status" element
147
188
  => "public"
189
+
148
190
  >> identifier.status = "unavailable" # writes "_status" element
149
191
  => "unavailable"
150
192
  ```
@@ -159,6 +201,7 @@ Notes:
159
201
  ```
160
202
  >> identifier.dc_type # reads "dc.type" element
161
203
  => "Collection"
204
+
162
205
  >> identifier.dc_type = "Image" # writes "dc.type" element
163
206
  => "Image"
164
207
  ```
@@ -253,11 +296,10 @@ require "ezid/test_helper"
253
296
 
254
297
  The module provides constants:
255
298
 
256
- - `TEST_ARK_SHOULDER` => "ark:/99999/fk4"
257
- - `TEST_DOI_SHOULDER` => "doi:10.5072/FK2"
258
- - `TEST_USER` => "apitest"
259
- - `TEST_HOST` => "ezid.cdlib.org"
260
- - `TEST_PORT` => 443
299
+ - `EZID_TEST_SHOULDER` => "doi:10.5072/FK2"
300
+ - `EZID_TEST_USER` => "apitest"
301
+ - `EZID_TEST_HOST` => "ezid.cdlib.org"
302
+ - `EZID_TEST_PORT` => 443
261
303
 
262
304
  The test user password is not provided - contact EZID and configure as above - or use your own EZID credentials, since all accounts can mint/create on the test shoulders.
263
305
 
@@ -283,3 +325,7 @@ In order to run the integration tests successfully, you must supply the password
283
325
  3. Commit your changes (`git commit -am 'Add some feature'`)
284
326
  4. Push to the branch (`git push origin my-new-feature`)
285
327
  5. Create a new Pull Request
328
+
329
+ ## Acknowledgments
330
+
331
+ - Justin Gondron (jgondron) contributed Datacite compatibility code (added in v1.8.0).
data/Rakefile CHANGED
@@ -5,18 +5,18 @@ desc "Run all specs in spec directory"
5
5
  RSpec::Core::RakeTask.new(:spec)
6
6
 
7
7
  desc "Run the ci build (no integration tests)"
8
- task :ci do
9
- system "rspec . -t ~deprecated -t ~integration"
8
+ RSpec::Core::RakeTask.new(:ci) do |t|
9
+ t.rspec_opts = "--tag '~deprecated' --tag '~ezid'"
10
10
  end
11
11
 
12
12
  desc "Run tests of deprecated functionality"
13
- task :deprecated do
14
- system "rspec . -t deprecated"
13
+ RSpec::Core::RakeTask.new(:deprecated) do |t|
14
+ t.rspec_opts = "--tag deprecated"
15
15
  end
16
16
 
17
17
  desc "Run the integration tests"
18
- task :integration do
19
- system "rspec . -t integration"
18
+ RSpec::Core::RakeTask.new(:integration) do |t|
19
+ t.rspec_opts = "--tag integration"
20
20
  end
21
21
 
22
22
  task default: :spec
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.6.0
1
+ 1.9.0
data/ezid-client.gemspec CHANGED
@@ -17,12 +17,14 @@ Gem::Specification.new do |spec|
17
17
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
18
  spec.require_paths = ["lib"]
19
19
 
20
- spec.required_ruby_version = "~> 2.0"
20
+ spec.required_ruby_version = "~> 2.1"
21
21
 
22
22
  spec.add_dependency "hashie", "~> 3.4", ">= 3.4.3"
23
+ spec.add_dependency "nokogiri"
23
24
 
24
- spec.add_development_dependency "bundler", "~> 1.7"
25
- spec.add_development_dependency "rake", "~> 10.5"
25
+ spec.add_development_dependency "bundler"
26
+ spec.add_development_dependency "byebug"
27
+ spec.add_development_dependency "rake"
26
28
  spec.add_development_dependency "rspec", "~> 3.4"
27
29
  spec.add_development_dependency "rspec-its", "~> 1.2"
28
30
  end
@@ -1,5 +1,5 @@
1
1
  module Ezid
2
- class BatchEnumerator
2
+ class Batch
3
3
  include Enumerable
4
4
 
5
5
  attr_reader :format, :batch_file
@@ -25,7 +25,7 @@ module Ezid
25
25
  while record = f.gets("")
26
26
  head, metadata = record.split(/\n/, 2)
27
27
  id = head.sub(/\A::/, "").strip
28
- yield Ezid::Identifier.new(id, metadata: metadata)
28
+ yield Identifier.load(id, metadata)
29
29
  end
30
30
  end
31
31
  end
@@ -84,6 +84,8 @@ module Ezid
84
84
  get_response.download_url
85
85
  end
86
86
 
87
+ alias_method :url, :download_url
88
+
87
89
  def download_file(path: nil)
88
90
  path ||= Dir.getwd
89
91
  fullpath = File.directory?(path) ? File.join(path, download_filename) : path
@@ -123,6 +125,8 @@ module Ezid
123
125
  fullpath
124
126
  end
125
127
 
128
+ alias_method :file, :download_file
129
+
126
130
  private
127
131
 
128
132
  def download_uri
data/lib/ezid/client.rb CHANGED
@@ -44,12 +44,11 @@ module Ezid
44
44
  end
45
45
  end
46
46
 
47
- attr_reader :user, :password, :host, :port, :use_ssl, :timeout
47
+ attr_reader :user, :password, :host, :port, :timeout
48
48
 
49
49
  def initialize(opts = {})
50
50
  @host = opts[:host] || config.host
51
51
  @port = (opts[:port] || config.port).to_i
52
- @use_ssl = opts[:use_ssl] || config.use_ssl
53
52
  @timeout = (opts[:timeout] || config.timeout).to_i
54
53
  @user = opts[:user] || config.user
55
54
  @password = opts[:password] || config.password
@@ -60,6 +59,12 @@ module Ezid
60
59
  end
61
60
  end
62
61
 
62
+ def use_ssl
63
+ warn "[DEPRECATION] `use_ssl` is deprecated and will be removed in ezid-client v2.0." \
64
+ " EZID requires SSL as of April 30, 2017."
65
+ true
66
+ end
67
+
63
68
  def inspect
64
69
  "#<#{self.class.name} connection=#{connection.inspect}, " \
65
70
  "user=#{user.inspect}, session=#{logged_in? ? 'OPEN' : 'CLOSED'}>"
@@ -188,15 +193,11 @@ module Ezid
188
193
 
189
194
  private
190
195
 
191
- def use_ssl?
192
- use_ssl || port == 443
193
- end
194
-
195
196
  def build_connection
196
- conn = Net::HTTP.new(host, port)
197
- conn.use_ssl = use_ssl?
198
- conn.read_timeout = timeout
199
- conn
197
+ Net::HTTP.new(host, port).tap do |conn|
198
+ conn.use_ssl = true
199
+ conn.read_timeout = timeout
200
+ end
200
201
  end
201
202
 
202
203
  def handle_response(response, request_name)
@@ -20,9 +20,6 @@ module Ezid
20
20
  # EZID TCP/IP port
21
21
  attr_accessor :port
22
22
 
23
- # Use HTTPS?
24
- attr_accessor :use_ssl
25
-
26
23
  # HTTP read timeout (seconds)
27
24
  attr_accessor :timeout
28
25
 
@@ -44,7 +41,6 @@ module Ezid
44
41
  @password = ENV["EZID_PASSWORD"]
45
42
  @host = ENV["EZID_HOST"] || HOST
46
43
  @port = ENV["EZID_PORT"] || PORT
47
- @use_ssl = true if ENV["EZID_USE_SSL"] == true.to_s
48
44
  @timeout = ENV["EZID_TIMEOUT"] || TIMEOUT
49
45
  @default_shoulder = ENV["EZID_DEFAULT_SHOULDER"]
50
46
  end
@@ -67,5 +63,16 @@ module Ezid
67
63
  Metadata
68
64
  end
69
65
 
66
+ def use_ssl
67
+ warn "[DEPRECATION] `use_ssl` is deprecated and will be removed in ezid-client v2.0." \
68
+ " EZID requires SSL as of April 30, 2017."
69
+ true
70
+ end
71
+
72
+ def use_ssl=(*)
73
+ warn "[DEPRECATION] `use_ssl=` is deprecated and will be removed in ezid-client v2.0." \
74
+ " EZID requires SSL as of April 30, 2017."
75
+ end
76
+
70
77
  end
71
78
  end
data/lib/ezid/error.rb CHANGED
@@ -8,4 +8,6 @@ module Ezid
8
8
  class NotAllowedError < Error; end
9
9
 
10
10
  class DeletionError < Error; end
11
+
12
+ class UnexpectedResponseError < Error; end
11
13
  end
@@ -65,10 +65,25 @@ module Ezid
65
65
  # @return [Ezid::Identifier] the identifier
66
66
  # @raise [Ezid::IdentifierNotFoundError]
67
67
  def modify(id, metadata)
68
- i = allocate
69
- i.id = id
70
- i.update_metadata(metadata)
71
- i.modify!
68
+ allocate.tap do |i|
69
+ i.id = id
70
+ i.update_metadata(metadata)
71
+ i.modify!
72
+ end
73
+ end
74
+
75
+ # Loads an identifier with provided remote metadata
76
+ # The main purpose is to provide an API in a batch processing
77
+ # context to instantiate Identifiers from a BatchDownload.
78
+ # @see #load_metadata!
79
+ # @param id [String] the EZID identifier
80
+ # @param metadata [String, Hash, Ezid::Metadata] the provided metadata
81
+ # @return [Ezid::Identifier] the identifier
82
+ def load(id, metadata = nil)
83
+ allocate.tap do |i|
84
+ i.id = id
85
+ i.load_metadata!(metadata)
86
+ end
72
87
  end
73
88
 
74
89
  # Retrieves an identifier
@@ -76,9 +91,10 @@ module Ezid
76
91
  # @return [Ezid::Identifier] the identifier
77
92
  # @raise [Ezid::IdentifierNotFoundError] if the identifier does not exist in EZID
78
93
  def find(id)
79
- i = allocate
80
- i.id = id
81
- i.load_metadata
94
+ allocate.tap do |i|
95
+ i.id = id
96
+ i.load_metadata
97
+ end
82
98
  end
83
99
  end
84
100
 
@@ -132,9 +148,14 @@ module Ezid
132
148
  # @return [Ezid::Metadata] the metadata
133
149
  def metadata(_=nil)
134
150
  if !_.nil?
135
- warn "[DEPRECATION] The parameter of `metadata` is deprecated and will be removed in 2.0. (called from #{caller.first})"
151
+ warn "[DEPRECATION] The parameter of `metadata` is ignored and will be removed in 2.0. " \
152
+ "(called from #{caller.first})"
136
153
  end
137
- @metadata ||= Metadata.new
154
+ remote_metadata.merge(local_metadata).freeze
155
+ end
156
+
157
+ def local_metadata
158
+ @local_metadata ||= Metadata.new
138
159
  end
139
160
 
140
161
  def remote_metadata
@@ -172,7 +193,7 @@ module Ezid
172
193
  # @param attrs [Hash] the metadata
173
194
  # @return [Ezid::Identifier] the identifier
174
195
  def update_metadata(attrs={})
175
- metadata.update(attrs)
196
+ local_metadata.update(attrs)
176
197
  self
177
198
  end
178
199
 
@@ -203,13 +224,25 @@ module Ezid
203
224
  load_metadata
204
225
  end
205
226
 
206
- # Loads the metadata from EZID
227
+ # Loads the metadata from EZID and marks the identifier as persisted.
207
228
  # @return [Ezid::Identifier] the identifier
208
- # @raise [Ezid::Error]
229
+ # @raise [Ezid::Error] the identifier is not found or other error.
209
230
  def load_metadata
210
231
  response = client.get_identifier_metadata(id)
211
- # self.remote_metadata = Metadata.new(response.metadata)
212
- remote_metadata.replace(response.metadata)
232
+ load_remote_metadata(response.metadata)
233
+ persists!
234
+ self
235
+ end
236
+
237
+ # Loads provided metadata and marks the identifier as persisted.
238
+ # The main purpose is to provide an API in a batch processing
239
+ # context to instantiate Identifiers from a BatchDownload.
240
+ # @see Ezid::BatchEnumerator
241
+ # @see .load
242
+ # @param metadata [String, Hash, Ezid::Metadata] the provided metadata
243
+ # @return [Ezid::Identifier] the identifier
244
+ def load_metadata!(metadata)
245
+ load_remote_metadata(metadata)
213
246
  persists!
214
247
  self
215
248
  end
@@ -287,8 +320,8 @@ module Ezid
287
320
  end
288
321
 
289
322
  def reset_metadata
290
- metadata.clear unless metadata.empty?
291
- remote_metadata.clear unless remote_metadata.empty?
323
+ local_metadata.clear
324
+ remote_metadata.clear
292
325
  end
293
326
 
294
327
  protected
@@ -302,7 +335,7 @@ module Ezid
302
335
  private
303
336
 
304
337
  def local_or_remote_metadata(*args)
305
- value = metadata.send(*args)
338
+ value = local_metadata.send(*args)
306
339
  if value.nil? && persisted?
307
340
  load_metadata if remote_metadata.empty?
308
341
  value = remote_metadata.send(*args)
@@ -311,7 +344,7 @@ module Ezid
311
344
  end
312
345
 
313
346
  def modify
314
- client.modify_identifier(id, metadata)
347
+ client.modify_identifier(id, local_metadata)
315
348
  end
316
349
 
317
350
  def create_or_mint
@@ -319,12 +352,12 @@ module Ezid
319
352
  end
320
353
 
321
354
  def mint
322
- response = client.mint_identifier(shoulder, metadata)
355
+ response = client.mint_identifier(shoulder, local_metadata)
323
356
  self.id = response.id
324
357
  end
325
358
 
326
359
  def create
327
- client.create_identifier(id, metadata)
360
+ client.create_identifier(id, local_metadata)
328
361
  end
329
362
 
330
363
  def persist
@@ -340,5 +373,9 @@ module Ezid
340
373
  update_metadata(self.class.defaults)
341
374
  end
342
375
 
376
+ def load_remote_metadata(metadata)
377
+ remote_metadata.replace(metadata)
378
+ end
379
+
343
380
  end
344
381
  end