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 +5 -5
- data/.github/workflows/ruby.yml +35 -0
- data/README.md +59 -13
- data/Rakefile +6 -6
- data/VERSION +1 -1
- data/ezid-client.gemspec +5 -3
- data/lib/ezid/{batch_enumerator.rb → batch.rb} +2 -2
- data/lib/ezid/batch_download.rb +4 -0
- data/lib/ezid/client.rb +11 -10
- data/lib/ezid/configuration.rb +11 -4
- data/lib/ezid/error.rb +2 -0
- data/lib/ezid/identifier.rb +57 -20
- data/lib/ezid/metadata.rb +11 -1
- data/lib/ezid/metadata_transforms/datacite.rb +72 -0
- data/lib/ezid/requests/request.rb +22 -9
- data/lib/ezid/responses/response.rb +13 -0
- data/spec/fixtures/datacite_xml/empty.xml +1 -0
- data/spec/fixtures/datacite_xml/populated.xml +1 -0
- data/spec/integration/batch_download_spec.rb +4 -4
- data/spec/integration/client_spec.rb +1 -1
- data/spec/integration/identifier_spec.rb +3 -2
- data/spec/spec_helper.rb +4 -2
- data/spec/unit/{batch_enumerator_spec.rb → batch_spec.rb} +2 -2
- data/spec/unit/client_spec.rb +35 -3
- data/spec/unit/identifier_spec.rb +54 -15
- data/spec/unit/metadata_spec.rb +2 -0
- data/spec/unit/metadata_transform_datacite_spec.rb +169 -0
- metadata +54 -20
- data/.travis.yml +0 -10
data/spec/unit/metadata_spec.rb
CHANGED
@@ -0,0 +1,169 @@
|
|
1
|
+
module Ezid
|
2
|
+
RSpec.describe MetadataTransformDatacite do
|
3
|
+
describe "#transform" do
|
4
|
+
before(:each) do
|
5
|
+
described_class.transform(test_hash)
|
6
|
+
end
|
7
|
+
|
8
|
+
context "when there are no datacite fields" do
|
9
|
+
let(:test_hash) { {} }
|
10
|
+
let(:expected_xml) { File.read("spec/fixtures/datacite_xml/empty.xml") }
|
11
|
+
|
12
|
+
it "populates a datacite xml field with all required fields as empty" do
|
13
|
+
expect(test_hash["datacite"]).to eq(expected_xml)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
context "when there are datacite fields" do
|
18
|
+
let(:test_hash) { {
|
19
|
+
"datacite.identifier" => "TestIdentifier",
|
20
|
+
"datacite.identifiertype" => "TestIdentifierType",
|
21
|
+
"datacite.creator" => "TestCreatorName",
|
22
|
+
"datacite.title" => "TestTitle",
|
23
|
+
"datacite.publisher" => "TestPublisher",
|
24
|
+
"datacite.publicationyear" => "TestPublicationYear",
|
25
|
+
"datacite.resourcetype" => "TestResourceType",
|
26
|
+
"datacite.resourcetypegeneral" => "TestResourceTypeGeneral",
|
27
|
+
"datacite.description" => "TestDescription",
|
28
|
+
"some.other.field" => "SomeOtherValue",
|
29
|
+
} }
|
30
|
+
let(:expected_xml) { File.read("spec/fixtures/datacite_xml/populated.xml") }
|
31
|
+
|
32
|
+
it "populates a datacite xml field using values from the datacite.* fields" do
|
33
|
+
expect(test_hash["datacite"]).to eq(expected_xml)
|
34
|
+
end
|
35
|
+
|
36
|
+
it "removes the datacite.* fields from the hash" do
|
37
|
+
expect(test_hash.keys).not_to include(
|
38
|
+
"datacite.identifer",
|
39
|
+
"datacite.identifiertype",
|
40
|
+
"datacite.creator",
|
41
|
+
"datacite.title",
|
42
|
+
"datacite.publisher",
|
43
|
+
"datacite.publicationyear",
|
44
|
+
"datacite.resourcetype",
|
45
|
+
"datacite.resourcetypegeneral",
|
46
|
+
"datacite.description",
|
47
|
+
)
|
48
|
+
end
|
49
|
+
|
50
|
+
it "does not remove other fields" do
|
51
|
+
expect(test_hash).to include("some.other.field")
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
describe "#inverse" do
|
57
|
+
let(:test_hash) { {
|
58
|
+
"datacite" => test_xml,
|
59
|
+
"some.other.field" => "SomeOtherValue"
|
60
|
+
} }
|
61
|
+
|
62
|
+
before(:each) do
|
63
|
+
described_class.inverse(test_hash)
|
64
|
+
end
|
65
|
+
|
66
|
+
|
67
|
+
context "when there are no datacite fields" do
|
68
|
+
let(:expected_hash) { {
|
69
|
+
"datacite.identifier" => "",
|
70
|
+
"datacite.identifiertype" => "DOI",
|
71
|
+
"datacite.creator" => "",
|
72
|
+
"datacite.description" => "",
|
73
|
+
"datacite.publicationyear" => "",
|
74
|
+
"datacite.publisher" => "",
|
75
|
+
"datacite.resourcetype" => "",
|
76
|
+
"datacite.resourcetypegeneral" => "",
|
77
|
+
"datacite.title" => "",
|
78
|
+
} }
|
79
|
+
let(:test_xml) { File.read("spec/fixtures/datacite_xml/empty.xml") }
|
80
|
+
|
81
|
+
it "populates all required fields as empty" do
|
82
|
+
expect(test_hash).to include(expected_hash)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
context "when there are datacite fields" do
|
87
|
+
let(:expected_hash) { {
|
88
|
+
"datacite.identifier" => "TestIdentifier",
|
89
|
+
"datacite.identifiertype" => "TestIdentifierType",
|
90
|
+
"datacite.creator" => "TestCreatorName",
|
91
|
+
"datacite.title" => "TestTitle",
|
92
|
+
"datacite.publisher" => "TestPublisher",
|
93
|
+
"datacite.publicationyear" => "TestPublicationYear",
|
94
|
+
"datacite.resourcetype" => "TestResourceType",
|
95
|
+
"datacite.resourcetypegeneral" => "TestResourceTypeGeneral",
|
96
|
+
"datacite.description" => "TestDescription",
|
97
|
+
} }
|
98
|
+
let(:test_xml) { File.read("spec/fixtures/datacite_xml/populated.xml") }
|
99
|
+
|
100
|
+
it "populates all fields from the datacite.* fields" do
|
101
|
+
expect(test_hash).to include(expected_hash)
|
102
|
+
end
|
103
|
+
|
104
|
+
it "removes the datacite field" do
|
105
|
+
expect(test_hash).not_to include("datacite")
|
106
|
+
end
|
107
|
+
|
108
|
+
it "does not remove other fields" do
|
109
|
+
expect(test_hash).to include("some.other.field")
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
describe "#transform then #inverse" do
|
115
|
+
let(:test_hash) { {
|
116
|
+
"datacite.identifier" => "TestIdentifier",
|
117
|
+
"datacite.identifiertype" => "TestIdentifierType",
|
118
|
+
"datacite.creator" => "TestCreatorName",
|
119
|
+
"datacite.title" => "TestTitle",
|
120
|
+
"datacite.publisher" => "TestPublisher",
|
121
|
+
"datacite.publicationyear" => "TestPublicationYear",
|
122
|
+
"datacite.resourcetype" => "TestResourceType",
|
123
|
+
"datacite.resourcetypegeneral" => "TestResourceTypeGeneral",
|
124
|
+
"datacite.description" => "TestDescription",
|
125
|
+
"some.other.field" => "SomeOtherValue",
|
126
|
+
} }
|
127
|
+
|
128
|
+
before(:each) do
|
129
|
+
described_class.transform(test_hash)
|
130
|
+
described_class.inverse(test_hash)
|
131
|
+
end
|
132
|
+
|
133
|
+
it "is a lossless transformation" do
|
134
|
+
expect(test_hash).to eq({
|
135
|
+
"datacite.identifier" => "TestIdentifier",
|
136
|
+
"datacite.identifiertype" => "TestIdentifierType",
|
137
|
+
"datacite.creator" => "TestCreatorName",
|
138
|
+
"datacite.title" => "TestTitle",
|
139
|
+
"datacite.publisher" => "TestPublisher",
|
140
|
+
"datacite.publicationyear" => "TestPublicationYear",
|
141
|
+
"datacite.resourcetype" => "TestResourceType",
|
142
|
+
"datacite.resourcetypegeneral" => "TestResourceTypeGeneral",
|
143
|
+
"datacite.description" => "TestDescription",
|
144
|
+
"some.other.field" => "SomeOtherValue",
|
145
|
+
})
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
describe "#inverse then #transform" do
|
150
|
+
let(:test_xml) { File.read("spec/fixtures/datacite_xml/empty.xml") }
|
151
|
+
let(:test_hash) { {
|
152
|
+
"datacite" => test_xml,
|
153
|
+
"some.other.field" => "SomeOtherValue"
|
154
|
+
} }
|
155
|
+
|
156
|
+
before(:each) do
|
157
|
+
described_class.inverse(test_hash)
|
158
|
+
described_class.transform(test_hash)
|
159
|
+
end
|
160
|
+
|
161
|
+
it "is a lossless transformation" do
|
162
|
+
expect(test_hash).to eq({
|
163
|
+
"datacite" => test_xml,
|
164
|
+
"some.other.field" => "SomeOtherValue"
|
165
|
+
})
|
166
|
+
end
|
167
|
+
end
|
168
|
+
end
|
169
|
+
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.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Chandek-Stark
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-04-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: hashie
|
@@ -30,34 +30,62 @@ dependencies:
|
|
30
30
|
- - ">="
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: 3.4.3
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: nokogiri
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0'
|
40
|
+
type: :runtime
|
41
|
+
prerelease: false
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
33
47
|
- !ruby/object:Gem::Dependency
|
34
48
|
name: bundler
|
35
49
|
requirement: !ruby/object:Gem::Requirement
|
36
50
|
requirements:
|
37
|
-
- - "
|
51
|
+
- - ">="
|
38
52
|
- !ruby/object:Gem::Version
|
39
|
-
version: '
|
53
|
+
version: '0'
|
40
54
|
type: :development
|
41
55
|
prerelease: false
|
42
56
|
version_requirements: !ruby/object:Gem::Requirement
|
43
57
|
requirements:
|
44
|
-
- - "
|
58
|
+
- - ">="
|
45
59
|
- !ruby/object:Gem::Version
|
46
|
-
version: '
|
60
|
+
version: '0'
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: byebug
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0'
|
68
|
+
type: :development
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
47
75
|
- !ruby/object:Gem::Dependency
|
48
76
|
name: rake
|
49
77
|
requirement: !ruby/object:Gem::Requirement
|
50
78
|
requirements:
|
51
|
-
- - "
|
79
|
+
- - ">="
|
52
80
|
- !ruby/object:Gem::Version
|
53
|
-
version: '
|
81
|
+
version: '0'
|
54
82
|
type: :development
|
55
83
|
prerelease: false
|
56
84
|
version_requirements: !ruby/object:Gem::Requirement
|
57
85
|
requirements:
|
58
|
-
- - "
|
86
|
+
- - ">="
|
59
87
|
- !ruby/object:Gem::Version
|
60
|
-
version: '
|
88
|
+
version: '0'
|
61
89
|
- !ruby/object:Gem::Dependency
|
62
90
|
name: rspec
|
63
91
|
requirement: !ruby/object:Gem::Requirement
|
@@ -93,9 +121,9 @@ executables: []
|
|
93
121
|
extensions: []
|
94
122
|
extra_rdoc_files: []
|
95
123
|
files:
|
124
|
+
- ".github/workflows/ruby.yml"
|
96
125
|
- ".gitignore"
|
97
126
|
- ".rspec"
|
98
|
-
- ".travis.yml"
|
99
127
|
- Gemfile
|
100
128
|
- LICENSE.txt
|
101
129
|
- README.md
|
@@ -103,13 +131,14 @@ files:
|
|
103
131
|
- VERSION
|
104
132
|
- ezid-client.gemspec
|
105
133
|
- lib/ezid-client.rb
|
134
|
+
- lib/ezid/batch.rb
|
106
135
|
- lib/ezid/batch_download.rb
|
107
|
-
- lib/ezid/batch_enumerator.rb
|
108
136
|
- lib/ezid/client.rb
|
109
137
|
- lib/ezid/configuration.rb
|
110
138
|
- lib/ezid/error.rb
|
111
139
|
- lib/ezid/identifier.rb
|
112
140
|
- lib/ezid/metadata.rb
|
141
|
+
- lib/ezid/metadata_transforms/datacite.rb
|
113
142
|
- lib/ezid/proxy_identifier.rb
|
114
143
|
- lib/ezid/requests/batch_download_request.rb
|
115
144
|
- lib/ezid/requests/create_identifier_request.rb
|
@@ -139,21 +168,24 @@ files:
|
|
139
168
|
- lib/ezid/status.rb
|
140
169
|
- lib/ezid/test_helper.rb
|
141
170
|
- spec/fixtures/anvl_batch.txt
|
171
|
+
- spec/fixtures/datacite_xml/empty.xml
|
172
|
+
- spec/fixtures/datacite_xml/populated.xml
|
142
173
|
- spec/integration/batch_download_spec.rb
|
143
174
|
- spec/integration/client_spec.rb
|
144
175
|
- spec/integration/identifier_spec.rb
|
145
176
|
- spec/spec_helper.rb
|
146
177
|
- spec/unit/batch_download_request_spec.rb
|
147
|
-
- spec/unit/
|
178
|
+
- spec/unit/batch_spec.rb
|
148
179
|
- spec/unit/client_spec.rb
|
149
180
|
- spec/unit/identifier_spec.rb
|
150
181
|
- spec/unit/metadata_spec.rb
|
182
|
+
- spec/unit/metadata_transform_datacite_spec.rb
|
151
183
|
- spec/unit/proxy_identifier_spec.rb
|
152
184
|
homepage: https://github.com/duke-libraries/ezid-client
|
153
185
|
licenses:
|
154
186
|
- BSD-3-Clause
|
155
187
|
metadata: {}
|
156
|
-
post_install_message:
|
188
|
+
post_install_message:
|
157
189
|
rdoc_options: []
|
158
190
|
require_paths:
|
159
191
|
- lib
|
@@ -161,27 +193,29 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
161
193
|
requirements:
|
162
194
|
- - "~>"
|
163
195
|
- !ruby/object:Gem::Version
|
164
|
-
version: '2.
|
196
|
+
version: '2.1'
|
165
197
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
166
198
|
requirements:
|
167
199
|
- - ">="
|
168
200
|
- !ruby/object:Gem::Version
|
169
201
|
version: '0'
|
170
202
|
requirements: []
|
171
|
-
|
172
|
-
|
173
|
-
signing_key:
|
203
|
+
rubygems_version: 3.0.8
|
204
|
+
signing_key:
|
174
205
|
specification_version: 4
|
175
206
|
summary: Ruby client for EZID API Version 2
|
176
207
|
test_files:
|
177
208
|
- spec/fixtures/anvl_batch.txt
|
209
|
+
- spec/fixtures/datacite_xml/empty.xml
|
210
|
+
- spec/fixtures/datacite_xml/populated.xml
|
178
211
|
- spec/integration/batch_download_spec.rb
|
179
212
|
- spec/integration/client_spec.rb
|
180
213
|
- spec/integration/identifier_spec.rb
|
181
214
|
- spec/spec_helper.rb
|
182
215
|
- spec/unit/batch_download_request_spec.rb
|
183
|
-
- spec/unit/
|
216
|
+
- spec/unit/batch_spec.rb
|
184
217
|
- spec/unit/client_spec.rb
|
185
218
|
- spec/unit/identifier_spec.rb
|
186
219
|
- spec/unit/metadata_spec.rb
|
220
|
+
- spec/unit/metadata_transform_datacite_spec.rb
|
187
221
|
- spec/unit/proxy_identifier_spec.rb
|