ezid-client 1.5.0 → 1.6.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 +4 -4
- data/.travis.yml +1 -0
- data/VERSION +1 -1
- data/lib/ezid/batch_download.rb +31 -21
- data/lib/ezid/batch_enumerator.rb +42 -0
- data/spec/fixtures/anvl_batch.txt +39 -0
- data/spec/integration/batch_download_spec.rb +21 -0
- data/spec/unit/batch_enumerator_spec.rb +34 -0
- metadata +10 -5
- data/spec/unit/batch_download_spec.rb +0 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fea39a10be4faa6f53fc90a1e47912aac563852b
|
4
|
+
data.tar.gz: 7812a50e289a44f48d2f7da5d160e87178f5aad2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 31a187c0ba4f9352093a87e1f86d963ea6d2204a564a81ccef9f4e63990afd709e479c72003a305db1db62c8fe224abea4ce8b335f431cf81e130d257a0e0761
|
7
|
+
data.tar.gz: 473bc07ee2231bf9d538097898796e11867162844024f494fddc33add670a44822b4be1ced89c60987328cf1deb1c30bbed4974919c92733ce9f893b74edbba9
|
data/.travis.yml
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.6.0
|
data/lib/ezid/batch_download.rb
CHANGED
@@ -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}
|
@@ -87,36 +88,45 @@ module Ezid
|
|
87
88
|
path ||= Dir.getwd
|
88
89
|
fullpath = File.directory?(path) ? File.join(path, download_filename) : path
|
89
90
|
tries = 0
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
raise BatchDownloadError,
|
103
|
-
"Maximum download attempts (#{MAX_DOWNLOAD_TRIES}) reached unsuccessfully."
|
91
|
+
ready = false
|
92
|
+
|
93
|
+
print "Checking for download "
|
94
|
+
Net::HTTP.start(download_uri.host, download_uri.port) do |http|
|
95
|
+
while tries < MAX_DOWNLOAD_TRIES
|
96
|
+
tries += 1
|
97
|
+
sleep DOWNLOAD_RETRY_INTERVAL
|
98
|
+
print "."
|
99
|
+
response = http.head(download_uri.path)
|
100
|
+
if response.code == '200'
|
101
|
+
ready = true
|
102
|
+
break
|
104
103
|
end
|
105
|
-
else
|
106
|
-
raise
|
107
104
|
end
|
108
|
-
|
109
|
-
|
110
|
-
|
105
|
+
end
|
106
|
+
puts
|
107
|
+
|
108
|
+
unless ready
|
109
|
+
raise BatchDownloadError,
|
110
|
+
"Download not ready after checking #{MAX_DOWNLOAD_TRIES} times."
|
111
|
+
end
|
112
|
+
|
113
|
+
File.open(fullpath, "wb") do |f|
|
114
|
+
Net::HTTP.start(download_uri.host, download_uri.port) do |http|
|
115
|
+
http.request_get(download_uri.path) do |response|
|
116
|
+
response.read_body do |chunk|
|
117
|
+
f.write(chunk)
|
118
|
+
end
|
119
|
+
end
|
111
120
|
end
|
112
|
-
puts "File successfully download to #{fullpath}."
|
113
121
|
end
|
122
|
+
|
123
|
+
fullpath
|
114
124
|
end
|
115
125
|
|
116
126
|
private
|
117
127
|
|
118
128
|
def download_uri
|
119
|
-
URI(download_url)
|
129
|
+
@download_uri ||= URI(download_url)
|
120
130
|
end
|
121
131
|
|
122
132
|
def download_filename
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Ezid
|
2
|
+
class BatchEnumerator
|
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 Ezid::Identifier.new(id, metadata: 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
|
@@ -0,0 +1,39 @@
|
|
1
|
+
:: ark:/99999/fk4086hs23
|
2
|
+
_updated: 1488227717
|
3
|
+
_target: http://example.com
|
4
|
+
_profile: erc
|
5
|
+
_ownergroup: apitest
|
6
|
+
_owner: apitest
|
7
|
+
_export: yes
|
8
|
+
_created: 1488227717
|
9
|
+
_status: public
|
10
|
+
|
11
|
+
:: ark:/99999/fk4086hs23/123
|
12
|
+
_updated: 1488227718
|
13
|
+
_target: http://ezid.cdlib.org/id/ark:/99999/fk4086hs23/123
|
14
|
+
_profile: erc
|
15
|
+
_ownergroup: apitest
|
16
|
+
_owner: apitest
|
17
|
+
_export: yes
|
18
|
+
_created: 1488227718
|
19
|
+
_status: public
|
20
|
+
|
21
|
+
:: ark:/99999/fk40p1bb85
|
22
|
+
_updated: 1488303565
|
23
|
+
_target: http://ezid.cdlib.org/id/ark:/99999/fk40p1bb85
|
24
|
+
_profile: erc
|
25
|
+
_ownergroup: apitest
|
26
|
+
_owner: apitest
|
27
|
+
_export: yes
|
28
|
+
_created: 1488303565
|
29
|
+
_status: public
|
30
|
+
|
31
|
+
:: ark:/99999/fk40z7fh7x
|
32
|
+
_updated: 1488232856
|
33
|
+
_target: http://ezid.cdlib.org/id/ark:/99999/fk40z7fh7x
|
34
|
+
_profile: erc
|
35
|
+
_ownergroup: apitest
|
36
|
+
_owner: apitest
|
37
|
+
_export: yes
|
38
|
+
_created: 1488232856
|
39
|
+
_status: public
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'tempfile'
|
2
|
+
|
3
|
+
module Ezid
|
4
|
+
RSpec.describe BatchDownload do
|
5
|
+
|
6
|
+
subject do
|
7
|
+
a_week_ago = (Time.now - (7*24*60*60)).to_i
|
8
|
+
described_class.new(:anvl, compression: "zip", permanence: "test", status: "public", createdAfter: a_week_ago)
|
9
|
+
end
|
10
|
+
|
11
|
+
its(:download_url) { is_expected.to match(/\Ahttp:\/\/ezid\.cdlib\.org\/download\/\w+\.zip\z/) }
|
12
|
+
|
13
|
+
specify {
|
14
|
+
Dir.mktmpdir do |tmpdir|
|
15
|
+
expect(subject.download_file(path: tmpdir))
|
16
|
+
.to match(/\A#{tmpdir}\/\w+\.zip\z/)
|
17
|
+
end
|
18
|
+
}
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'ezid/batch_enumerator'
|
2
|
+
|
3
|
+
module Ezid
|
4
|
+
RSpec.describe BatchEnumerator do
|
5
|
+
|
6
|
+
let(:batch_file) { File.expand_path("../../fixtures/anvl_batch.txt", __FILE__) }
|
7
|
+
|
8
|
+
subject { described_class.new(:anvl, batch_file) }
|
9
|
+
|
10
|
+
its(:count) { is_expected.to eq 4 }
|
11
|
+
|
12
|
+
specify {
|
13
|
+
subject.each do |id|
|
14
|
+
expect(id).to be_a(Identifier)
|
15
|
+
end
|
16
|
+
}
|
17
|
+
|
18
|
+
specify {
|
19
|
+
batch_array = subject.to_a
|
20
|
+
expect(batch_array.length).to eq 4
|
21
|
+
}
|
22
|
+
|
23
|
+
specify {
|
24
|
+
ids = subject.map(&:id)
|
25
|
+
expect(ids).to eq ["ark:/99999/fk4086hs23", "ark:/99999/fk4086hs23/123", "ark:/99999/fk40p1bb85", "ark:/99999/fk40z7fh7x"]
|
26
|
+
}
|
27
|
+
|
28
|
+
specify {
|
29
|
+
id = subject.first
|
30
|
+
expect(id.target).to eq "http://example.com"
|
31
|
+
}
|
32
|
+
|
33
|
+
end
|
34
|
+
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.
|
4
|
+
version: 1.6.0
|
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:
|
11
|
+
date: 2017-02-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: hashie
|
@@ -104,6 +104,7 @@ files:
|
|
104
104
|
- ezid-client.gemspec
|
105
105
|
- lib/ezid-client.rb
|
106
106
|
- lib/ezid/batch_download.rb
|
107
|
+
- lib/ezid/batch_enumerator.rb
|
107
108
|
- lib/ezid/client.rb
|
108
109
|
- lib/ezid/configuration.rb
|
109
110
|
- lib/ezid/error.rb
|
@@ -137,11 +138,13 @@ files:
|
|
137
138
|
- lib/ezid/session.rb
|
138
139
|
- lib/ezid/status.rb
|
139
140
|
- lib/ezid/test_helper.rb
|
141
|
+
- spec/fixtures/anvl_batch.txt
|
142
|
+
- spec/integration/batch_download_spec.rb
|
140
143
|
- spec/integration/client_spec.rb
|
141
144
|
- spec/integration/identifier_spec.rb
|
142
145
|
- spec/spec_helper.rb
|
143
146
|
- spec/unit/batch_download_request_spec.rb
|
144
|
-
- spec/unit/
|
147
|
+
- spec/unit/batch_enumerator_spec.rb
|
145
148
|
- spec/unit/client_spec.rb
|
146
149
|
- spec/unit/identifier_spec.rb
|
147
150
|
- spec/unit/metadata_spec.rb
|
@@ -166,16 +169,18 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
166
169
|
version: '0'
|
167
170
|
requirements: []
|
168
171
|
rubyforge_project:
|
169
|
-
rubygems_version: 2.
|
172
|
+
rubygems_version: 2.6.8
|
170
173
|
signing_key:
|
171
174
|
specification_version: 4
|
172
175
|
summary: Ruby client for EZID API Version 2
|
173
176
|
test_files:
|
177
|
+
- spec/fixtures/anvl_batch.txt
|
178
|
+
- spec/integration/batch_download_spec.rb
|
174
179
|
- spec/integration/client_spec.rb
|
175
180
|
- spec/integration/identifier_spec.rb
|
176
181
|
- spec/spec_helper.rb
|
177
182
|
- spec/unit/batch_download_request_spec.rb
|
178
|
-
- spec/unit/
|
183
|
+
- spec/unit/batch_enumerator_spec.rb
|
179
184
|
- spec/unit/client_spec.rb
|
180
185
|
- spec/unit/identifier_spec.rb
|
181
186
|
- spec/unit/metadata_spec.rb
|