ezid-client 1.5.0 → 1.9.0.rc1

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: 5e7662a25f1a8f0b0c027298428ed9ee5714137c
4
- data.tar.gz: ae70777a70f7ffb50fb00e49e3c86c305e0721d0
2
+ SHA256:
3
+ metadata.gz: 992d846692204d2ee3317ba756f1f70448a1194fb8e2d7cf129dd9b7f270919e
4
+ data.tar.gz: 3dba7c268214d865b85425cfb18ad3dd5f2e23d1b8a0c21ed14366b4aaae283c
5
5
  SHA512:
6
- metadata.gz: 68d2a8953cdf238fb34fbb861129b2a34a1e42e1aded1f3a56e3ed720507a67f4313ca67ed6ffe5e59567769c5556fedcf52ebdd69a9e500c0fb1e0893db9bf2
7
- data.tar.gz: 8a0763e0ff8922e9ae2b0c946acf16c8da5f9b64296235efc9f5a5aac2204bd234cf897cecb3af4d87a363f7aba2d95571ce8f15f7557f6ef21d02eed49aaba9
6
+ metadata.gz: 161c7c1037a3016c2399b24e3f6fb6addfd91988e3b97149da907bd5461a72b29eb9058d403067b9a166ba6eea40bd58fd7f291a11100a698b93e24a9d228159
7
+ data.tar.gz: 3538d1792458f2d53ee81868249c3217112994aea0da67e1023eda3526bc98246282b90d87a346287e12f7eadd24874a48f5d521f055ea5a34d1130844832b87
@@ -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.5.0
1
+ 1.9.0.rc1
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
data/lib/ezid/batch.rb ADDED
@@ -0,0 +1,42 @@
1
+ module Ezid
2
+ class Batch
3
+ include Enumerable
4
+
5
+ attr_reader :format, :batch_file
6
+
7
+ def initialize(format, batch_file)
8
+ @format = format
9
+ @batch_file = batch_file
10
+ end
11
+
12
+ def each(&block)
13
+ case format
14
+ when :anvl
15
+ each_anvl(&block)
16
+ when :xml
17
+ each_xml(&block)
18
+ when :csv
19
+ each_csv(&block)
20
+ end
21
+ end
22
+
23
+ def each_anvl(&block)
24
+ File.open(batch_file, "rb") do |f|
25
+ while record = f.gets("")
26
+ head, metadata = record.split(/\n/, 2)
27
+ id = head.sub(/\A::/, "").strip
28
+ yield Identifier.load(id, metadata)
29
+ end
30
+ end
31
+ end
32
+
33
+ def each_xml
34
+ raise NotImplementedError
35
+ end
36
+
37
+ def each_csv
38
+ raise NotImplementedError
39
+ end
40
+
41
+ end
42
+ end
@@ -40,6 +40,7 @@ module Ezid
40
40
 
41
41
  # Parameters
42
42
  property :format, required: true # {anvl|csv|xml}
43
+ property :compression # {gzip|zip}
43
44
  property :column # repeatable
44
45
  property :notify # repeatable
45
46
  property :convertTimestamps # {yes|no}
@@ -83,40 +84,53 @@ module Ezid
83
84
  get_response.download_url
84
85
  end
85
86
 
87
+ alias_method :url, :download_url
88
+
86
89
  def download_file(path: nil)
87
90
  path ||= Dir.getwd
88
91
  fullpath = File.directory?(path) ? File.join(path, download_filename) : path
89
92
  tries = 0
90
- begin
91
- tries += 1
92
- download = Net::HTTP.get_response(download_uri)
93
- download.value
94
- rescue Net::HTTPServerException => e
95
- if download.is_a?(Net::HTTPNotFound)
96
- if tries < MAX_DOWNLOAD_TRIES
97
- print "Download file not yet available (attempt #{tries} of #{MAX_DOWNLOAD_TRIES})."
98
- puts " Trying again in #{DOWNLOAD_RETRY_INTERVAL} second(s) ..."
99
- sleep DOWNLOAD_RETRY_INTERVAL
100
- retry
101
- else
102
- raise BatchDownloadError,
103
- "Maximum download attempts (#{MAX_DOWNLOAD_TRIES}) reached unsuccessfully."
93
+ ready = false
94
+
95
+ print "Checking for download "
96
+ Net::HTTP.start(download_uri.host, download_uri.port) do |http|
97
+ while tries < MAX_DOWNLOAD_TRIES
98
+ tries += 1
99
+ sleep DOWNLOAD_RETRY_INTERVAL
100
+ print "."
101
+ response = http.head(download_uri.path)
102
+ if response.code == '200'
103
+ ready = true
104
+ break
104
105
  end
105
- else
106
- raise
107
106
  end
108
- else
109
- File.open(fullpath, "wb") do |f|
110
- f.write(download.body)
107
+ end
108
+ puts
109
+
110
+ unless ready
111
+ raise BatchDownloadError,
112
+ "Download not ready after checking #{MAX_DOWNLOAD_TRIES} times."
113
+ end
114
+
115
+ File.open(fullpath, "wb") do |f|
116
+ Net::HTTP.start(download_uri.host, download_uri.port) do |http|
117
+ http.request_get(download_uri.path) do |response|
118
+ response.read_body do |chunk|
119
+ f.write(chunk)
120
+ end
121
+ end
111
122
  end
112
- puts "File successfully download to #{fullpath}."
113
123
  end
124
+
125
+ fullpath
114
126
  end
115
127
 
128
+ alias_method :file, :download_file
129
+
116
130
  private
117
131
 
118
132
  def download_uri
119
- URI(download_url)
133
+ @download_uri ||= URI(download_url)
120
134
  end
121
135
 
122
136
  def download_filename
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