commonmeta-ruby 3.7.3 → 3.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +12 -11
- data/lib/commonmeta/crossref_utils.rb +7 -1
- data/lib/commonmeta/doi_utils.rb +5 -0
- data/lib/commonmeta/metadata.rb +66 -62
- data/lib/commonmeta/readers/json_feed_reader.rb +11 -1
- data/lib/commonmeta/version.rb +1 -1
- data/spec/doi_utils_spec.rb +14 -0
- data/spec/readers/json_feed_reader_spec.rb +38 -6
- data/spec/writers/crossref_xml_writer_spec.rb +25 -8
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: acaeef11b787265fa53f7997c4d6d8d4942f786eb633b1b32df5e0d09b5752a6
|
4
|
+
data.tar.gz: 675258b94dc8cc1bbb327f88f7ae7b86b104af5d27b9c44d74172630d1bf6ed7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1eab3f0ee1f997259b8c9b0e0aa9d3458277ca41b81e67013153fb65bbfaed149b35548866728d8c26d5f9c2b71dc6935a8d69a25c91b62ceca3896445920af0
|
7
|
+
data.tar.gz: 2d725b722aee5c0829ec8e5d037f83c3939acf138aa4b312ed3c417772ff8e327ca32ea638493b73151f011417231a49bb91f5d0d176e9544f8a0b4599aa4ea4
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
commonmeta-ruby (3.
|
4
|
+
commonmeta-ruby (3.8.0)
|
5
5
|
activesupport (>= 4.2.5, < 8.0)
|
6
6
|
addressable (~> 2.8.1, < 2.8.2)
|
7
7
|
base32-url (>= 0.7.0, < 1)
|
@@ -44,8 +44,9 @@ GEM
|
|
44
44
|
uuidtools (~> 2.1, >= 2.1.5)
|
45
45
|
base64 (0.2.0)
|
46
46
|
bcp47_spec (0.2.1)
|
47
|
-
bibtex-ruby (6.
|
47
|
+
bibtex-ruby (6.1.0)
|
48
48
|
latex-decode (~> 0.0)
|
49
|
+
racc (~> 1.7)
|
49
50
|
bigdecimal (3.1.5)
|
50
51
|
builder (3.2.4)
|
51
52
|
citeproc (1.0.10)
|
@@ -67,7 +68,7 @@ GEM
|
|
67
68
|
csl (~> 2.0)
|
68
69
|
diff-lcs (1.5.0)
|
69
70
|
docile (1.4.0)
|
70
|
-
domain_name (0.6.
|
71
|
+
domain_name (0.6.20240107)
|
71
72
|
drb (2.2.0)
|
72
73
|
ruby2_keywords
|
73
74
|
ebnf (2.5.0)
|
@@ -135,13 +136,13 @@ GEM
|
|
135
136
|
multi_json (1.15.0)
|
136
137
|
mutex_m (0.2.0)
|
137
138
|
namae (1.1.1)
|
138
|
-
nokogiri (1.
|
139
|
+
nokogiri (1.16.0-arm64-darwin)
|
139
140
|
racc (~> 1.4)
|
140
141
|
oj (3.16.3)
|
141
142
|
bigdecimal (>= 3.0)
|
142
143
|
optimist (3.1.0)
|
143
144
|
parallel (1.24.0)
|
144
|
-
parser (3.
|
145
|
+
parser (3.3.0.2)
|
145
146
|
ast (~> 2.4.1)
|
146
147
|
racc
|
147
148
|
postrank-uri (1.1)
|
@@ -171,7 +172,7 @@ GEM
|
|
171
172
|
rdf-xsd (3.3.0)
|
172
173
|
rdf (~> 3.3)
|
173
174
|
rexml (~> 3.2)
|
174
|
-
regexp_parser (2.
|
175
|
+
regexp_parser (2.9.0)
|
175
176
|
rexml (3.2.6)
|
176
177
|
rspec (3.12.0)
|
177
178
|
rspec-core (~> 3.12.0)
|
@@ -202,16 +203,16 @@ GEM
|
|
202
203
|
unicode-display_width (>= 2.4.0, < 3.0)
|
203
204
|
rubocop-ast (1.30.0)
|
204
205
|
parser (>= 3.2.1.0)
|
205
|
-
rubocop-capybara (2.
|
206
|
+
rubocop-capybara (2.20.0)
|
206
207
|
rubocop (~> 1.41)
|
207
|
-
rubocop-factory_bot (2.
|
208
|
-
rubocop (~> 1.
|
209
|
-
rubocop-performance (1.20.
|
208
|
+
rubocop-factory_bot (2.25.1)
|
209
|
+
rubocop (~> 1.41)
|
210
|
+
rubocop-performance (1.20.2)
|
210
211
|
rubocop (>= 1.48.1, < 2.0)
|
211
212
|
rubocop-ast (>= 1.30.0, < 2.0)
|
212
213
|
rubocop-rake (0.6.0)
|
213
214
|
rubocop (~> 1.0)
|
214
|
-
rubocop-rspec (2.
|
215
|
+
rubocop-rspec (2.26.1)
|
215
216
|
rubocop (~> 1.40)
|
216
217
|
rubocop-capybara (~> 2.17)
|
217
218
|
rubocop-factory_bot (~> 2.22)
|
@@ -342,11 +342,17 @@ module Commonmeta
|
|
342
342
|
return xml if doi_from_url(id).blank? || url.blank?
|
343
343
|
|
344
344
|
xml.doi_data do
|
345
|
-
|
345
|
+
doi = doi_from_url(id).downcase
|
346
|
+
xml.doi(doi)
|
346
347
|
xml.resource(url)
|
347
348
|
xml.collection("property" => "text-mining") do
|
348
349
|
xml.item do
|
349
350
|
xml.resource(url, "mime_type" => "text/html")
|
351
|
+
if is_rogue_scholar_doi?(doi)
|
352
|
+
Array.wrap(files).each do |file|
|
353
|
+
xml.resource(file["url"], "mime_type" => file["mimeType"])
|
354
|
+
end
|
355
|
+
end
|
350
356
|
end
|
351
357
|
end
|
352
358
|
end
|
data/lib/commonmeta/doi_utils.rb
CHANGED
@@ -77,5 +77,10 @@ module Commonmeta
|
|
77
77
|
|
78
78
|
{ 'id' => "https://api.crossref.org/members/#{member_id}", 'name' => name }
|
79
79
|
end
|
80
|
+
|
81
|
+
def is_rogue_scholar_doi?(doi)
|
82
|
+
prefix = validate_prefix(doi)
|
83
|
+
%w[10.34732 10.53731 10.54900 10.57689 10.59348 10.59349 10.59350].include?(prefix)
|
84
|
+
end
|
80
85
|
end
|
81
86
|
end
|
data/lib/commonmeta/metadata.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: truefiles
|
2
2
|
|
3
|
-
require_relative
|
3
|
+
require_relative "metadata_utils"
|
4
4
|
|
5
5
|
module Commonmeta
|
6
6
|
class Metadata
|
@@ -10,7 +10,11 @@ module Commonmeta
|
|
10
10
|
:email, :registrant
|
11
11
|
attr_reader :doc, :page_start, :page_end
|
12
12
|
attr_writer :id, :provider_id, :client_id, :doi, :alternate_identifiers, :contributors,
|
13
|
-
:titles, :publisher, :license, :date, :volume, :url, :version, :subjects,
|
13
|
+
:titles, :publisher, :license, :date, :volume, :url, :version, :subjects,
|
14
|
+
:descriptions, :language, :sizes, :formats, :schema_version, :meta, :container,
|
15
|
+
:provider, :format, :funding_references, :state, :geo_locations, :type,
|
16
|
+
:additional_type, :files, :references, :related_identifiers, :related_items,
|
17
|
+
:style, :locale, :archive_locations
|
14
18
|
|
15
19
|
def initialize(options = {})
|
16
20
|
options.symbolize_keys!
|
@@ -23,29 +27,29 @@ module Commonmeta
|
|
23
27
|
|
24
28
|
# mEDRA, KISTI, JaLC and OP DOIs are found in the Crossref index
|
25
29
|
case @from
|
26
|
-
when
|
27
|
-
ra =
|
28
|
-
when
|
29
|
-
ra =
|
30
|
-
when
|
31
|
-
ra =
|
32
|
-
when
|
33
|
-
ra =
|
30
|
+
when "medra"
|
31
|
+
ra = "mEDRA"
|
32
|
+
when "kisti"
|
33
|
+
ra = "KISTI"
|
34
|
+
when "jalc"
|
35
|
+
ra = "JaLC"
|
36
|
+
when "op"
|
37
|
+
ra = "OP"
|
34
38
|
end
|
35
39
|
|
36
40
|
# generate name for method to call dynamically
|
37
41
|
hsh = @from.present? ? send("get_#{@from}", id: id, **options) : {}
|
38
|
-
string = hsh.fetch(
|
42
|
+
string = hsh.fetch("string", nil)
|
39
43
|
elsif options[:input].present? && File.exist?(options[:input])
|
40
44
|
filename = File.basename(options[:input])
|
41
45
|
ext = File.extname(options[:input])
|
42
46
|
if %w[.bib .ris .xml .json .cff].include?(ext)
|
43
47
|
hsh = {
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
48
|
+
"url" => options[:url],
|
49
|
+
"state" => options[:state],
|
50
|
+
"provider_id" => options[:provider_id],
|
51
|
+
"client_id" => options[:client_id],
|
52
|
+
"files" => options[:files],
|
49
53
|
}
|
50
54
|
string = File.read(options[:input])
|
51
55
|
@from = options[:from] || find_from_format(string: string, ext: ext)
|
@@ -55,14 +59,14 @@ module Commonmeta
|
|
55
59
|
end
|
56
60
|
else
|
57
61
|
hsh = {
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
62
|
+
"url" => options[:url],
|
63
|
+
"state" => options[:state],
|
64
|
+
"provider_id" => options[:provider_id],
|
65
|
+
"client_id" => options[:client_id],
|
66
|
+
"files" => options[:files],
|
67
|
+
"contributors" => options[:contributors],
|
68
|
+
"titles" => options[:titles],
|
69
|
+
"publisher" => options[:publisher],
|
66
70
|
}
|
67
71
|
string = options[:input]
|
68
72
|
@from = options[:from] || find_from_format(string: string)
|
@@ -70,7 +74,7 @@ module Commonmeta
|
|
70
74
|
|
71
75
|
# make sure input is encoded as utf8
|
72
76
|
if string.present? && string.is_a?(String)
|
73
|
-
dup_string = string.dup.force_encoding(
|
77
|
+
dup_string = string.dup.force_encoding("UTF-8").encode!
|
74
78
|
end
|
75
79
|
@string = dup_string
|
76
80
|
|
@@ -81,11 +85,11 @@ module Commonmeta
|
|
81
85
|
@sandbox = options[:sandbox]
|
82
86
|
|
83
87
|
# options that come from the datacite database
|
84
|
-
@url = hsh.to_h[
|
85
|
-
@state = hsh.to_h[
|
86
|
-
@provider_id = hsh.to_h[
|
87
|
-
@client_id = hsh.to_h[
|
88
|
-
@files = hsh.to_h[
|
88
|
+
@url = hsh.to_h["url"].presence || options[:url].presence
|
89
|
+
@state = hsh.to_h["state"].presence
|
90
|
+
@provider_id = hsh.to_h["provider_id"].presence
|
91
|
+
@client_id = hsh.to_h["client_id"].presence
|
92
|
+
@files = hsh.to_h["files"].presence
|
89
93
|
|
90
94
|
# options that come from the cli, needed
|
91
95
|
# for crossref doi registration
|
@@ -125,23 +129,23 @@ module Commonmeta
|
|
125
129
|
end
|
126
130
|
|
127
131
|
def id
|
128
|
-
@id ||= meta.fetch(
|
132
|
+
@id ||= meta.fetch("id", nil)
|
129
133
|
end
|
130
134
|
|
131
135
|
def doi
|
132
|
-
@doi ||= meta.fetch(
|
136
|
+
@doi ||= meta.fetch("doi", nil)
|
133
137
|
end
|
134
138
|
|
135
139
|
def provider_id
|
136
|
-
@provider_id ||= meta.fetch(
|
140
|
+
@provider_id ||= meta.fetch("provider_id", nil)
|
137
141
|
end
|
138
142
|
|
139
143
|
def client_id
|
140
|
-
@client_id ||= meta.fetch(
|
144
|
+
@client_id ||= meta.fetch("client_id", nil)
|
141
145
|
end
|
142
146
|
|
143
147
|
def exists?
|
144
|
-
(@state || meta.fetch(
|
148
|
+
(@state || meta.fetch("state", nil)) != "not_found"
|
145
149
|
end
|
146
150
|
|
147
151
|
def valid?
|
@@ -151,111 +155,111 @@ module Commonmeta
|
|
151
155
|
# Catch errors in the reader
|
152
156
|
# Then validate against JSON schema for Commonmeta
|
153
157
|
def errors
|
154
|
-
meta.fetch(
|
158
|
+
meta.fetch("errors", nil) || json_schema_errors
|
155
159
|
end
|
156
160
|
|
157
161
|
def descriptions
|
158
|
-
@descriptions ||= meta.fetch(
|
162
|
+
@descriptions ||= meta.fetch("descriptions", nil)
|
159
163
|
end
|
160
164
|
|
161
165
|
def license
|
162
|
-
@license ||= meta.fetch(
|
166
|
+
@license ||= meta.fetch("license", nil)
|
163
167
|
end
|
164
168
|
|
165
169
|
def subjects
|
166
|
-
@subjects ||= meta.fetch(
|
170
|
+
@subjects ||= meta.fetch("subjects", nil)
|
167
171
|
end
|
168
172
|
|
169
173
|
def language
|
170
|
-
@language ||= meta.fetch(
|
174
|
+
@language ||= meta.fetch("language", nil)
|
171
175
|
end
|
172
176
|
|
173
177
|
def sizes
|
174
|
-
@sizes ||= meta.fetch(
|
178
|
+
@sizes ||= meta.fetch("sizes", nil)
|
175
179
|
end
|
176
180
|
|
177
181
|
def formats
|
178
|
-
@formats ||= meta.fetch(
|
182
|
+
@formats ||= meta.fetch("formats", nil)
|
179
183
|
end
|
180
184
|
|
181
185
|
def schema_version
|
182
|
-
@schema_version ||= meta.fetch(
|
186
|
+
@schema_version ||= meta.fetch("schema_version", nil)
|
183
187
|
end
|
184
188
|
|
185
189
|
def funding_references
|
186
|
-
@funding_references ||= meta.fetch(
|
190
|
+
@funding_references ||= meta.fetch("funding_references", nil)
|
187
191
|
end
|
188
192
|
|
189
193
|
def references
|
190
|
-
@references ||= meta.fetch(
|
194
|
+
@references ||= meta.fetch("references", nil)
|
191
195
|
end
|
192
196
|
|
193
197
|
def related_identifiers
|
194
|
-
@related_identifiers ||= meta.fetch(
|
198
|
+
@related_identifiers ||= meta.fetch("related_identifiers", nil)
|
195
199
|
end
|
196
200
|
|
197
201
|
def related_items
|
198
|
-
@related_items ||= meta.fetch(
|
202
|
+
@related_items ||= meta.fetch("related_items", nil)
|
199
203
|
end
|
200
204
|
|
201
205
|
def url
|
202
|
-
@url ||= meta.fetch(
|
206
|
+
@url ||= meta.fetch("url", nil)
|
203
207
|
end
|
204
208
|
|
205
209
|
def version
|
206
|
-
@version ||= meta.fetch(
|
210
|
+
@version ||= meta.fetch("version", nil)
|
207
211
|
end
|
208
212
|
|
209
213
|
def container
|
210
|
-
@container ||= meta.fetch(
|
214
|
+
@container ||= meta.fetch("container", nil)
|
211
215
|
end
|
212
216
|
|
213
217
|
def geo_locations
|
214
|
-
@geo_locations ||= meta.fetch(
|
218
|
+
@geo_locations ||= meta.fetch("geo_locations", nil)
|
215
219
|
end
|
216
220
|
|
217
221
|
def date
|
218
|
-
@date ||= meta.fetch(
|
222
|
+
@date ||= meta.fetch("date", nil)
|
219
223
|
end
|
220
224
|
|
221
225
|
def publisher
|
222
|
-
@publisher ||= meta.fetch(
|
226
|
+
@publisher ||= meta.fetch("publisher", nil)
|
223
227
|
end
|
224
228
|
|
225
229
|
def alternate_identifiers
|
226
|
-
@alternate_identifiers ||= meta.fetch(
|
230
|
+
@alternate_identifiers ||= meta.fetch("alternate_identifiers", nil)
|
227
231
|
end
|
228
232
|
|
229
233
|
def files
|
230
|
-
@files ||= meta.fetch(
|
234
|
+
@files ||= meta.fetch("files", nil)
|
231
235
|
end
|
232
236
|
|
233
237
|
def provider
|
234
|
-
@provider ||= meta.fetch(
|
238
|
+
@provider ||= meta.fetch("provider", nil)
|
235
239
|
end
|
236
240
|
|
237
241
|
def state
|
238
|
-
@state ||= meta.fetch(
|
242
|
+
@state ||= meta.fetch("state", nil)
|
239
243
|
end
|
240
244
|
|
241
245
|
def type
|
242
|
-
@type ||= meta.fetch(
|
246
|
+
@type ||= meta.fetch("type", nil)
|
243
247
|
end
|
244
248
|
|
245
249
|
def additional_type
|
246
|
-
@additional_type ||= meta.fetch(
|
250
|
+
@additional_type ||= meta.fetch("additional_type", nil)
|
247
251
|
end
|
248
252
|
|
249
253
|
def titles
|
250
|
-
@titles ||= meta.fetch(
|
254
|
+
@titles ||= meta.fetch("titles", nil)
|
251
255
|
end
|
252
256
|
|
253
257
|
def contributors
|
254
|
-
@contributors ||= meta.fetch(
|
258
|
+
@contributors ||= meta.fetch("contributors", nil)
|
255
259
|
end
|
256
260
|
|
257
261
|
def archive_locations
|
258
|
-
@archive_locations ||= meta.fetch(
|
262
|
+
@archive_locations ||= meta.fetch("archive_locations", nil)
|
259
263
|
end
|
260
264
|
end
|
261
265
|
end
|
@@ -69,7 +69,7 @@ module Commonmeta
|
|
69
69
|
funding_references = get_funding_references(meta)
|
70
70
|
related_identifiers = get_related_identifiers(meta)
|
71
71
|
alternate_identifiers = [{ "alternateIdentifier" => meta["id"], "alternateIdentifierType" => "UUID" }]
|
72
|
-
|
72
|
+
files = get_files(id)
|
73
73
|
archive_url = meta.fetch("archive_url", nil)
|
74
74
|
|
75
75
|
if archive_url
|
@@ -99,10 +99,20 @@ module Commonmeta
|
|
99
99
|
"funding_references" => funding_references.presence,
|
100
100
|
"related_identifiers" => related_identifiers.presence,
|
101
101
|
"alternate_identifiers" => alternate_identifiers,
|
102
|
+
"files" => files.presence,
|
102
103
|
"archive_locations" => archive_locations,
|
103
104
|
"state" => state }.compact.merge(read_options)
|
104
105
|
end
|
105
106
|
|
107
|
+
def get_files(id)
|
108
|
+
doi = doi_from_url(id)
|
109
|
+
return nil unless is_rogue_scholar_doi?(doi)
|
110
|
+
|
111
|
+
[{ "mimeType" => "text/markdown", "url" => "https://api.rogue-scholar.org/posts/#{doi}.md" },
|
112
|
+
{ "mimeType" => "application/pdf", "url" => "https://api.rogue-scholar.org/posts/#{doi}.pdf" },
|
113
|
+
{ "mimeType" => "application/epub+zip", "url" => "https://api.rogue-scholar.org/posts/#{doi}.epub" }]
|
114
|
+
end
|
115
|
+
|
106
116
|
def get_references(meta)
|
107
117
|
# check that references resolve
|
108
118
|
Array.wrap(meta["reference"]).reduce([]) do |sum, reference|
|
data/lib/commonmeta/version.rb
CHANGED
data/spec/doi_utils_spec.rb
CHANGED
@@ -315,4 +315,18 @@ describe Commonmeta::Metadata, vcr: true do
|
|
315
315
|
expect(response).to eq('10.5061')
|
316
316
|
end
|
317
317
|
end
|
318
|
+
|
319
|
+
context 'is_rogue_scholar_doi' do
|
320
|
+
it 'rogue scholar doi' do
|
321
|
+
doi = '10.53731/cjx855h-hn5jtq8'
|
322
|
+
response = subject.is_rogue_scholar_doi?(doi)
|
323
|
+
expect(response).to be true
|
324
|
+
end
|
325
|
+
|
326
|
+
it 'not a rogue scholar doi' do
|
327
|
+
doi = '10.1371/journal.pone.0000030'
|
328
|
+
response = subject.is_rogue_scholar_doi?(doi)
|
329
|
+
expect(response).to be false
|
330
|
+
end
|
331
|
+
end
|
318
332
|
end
|
@@ -36,6 +36,8 @@ describe Commonmeta::Metadata, vcr: true do
|
|
36
36
|
# expect(subject.valid?).to be true
|
37
37
|
expect(subject.id).to eq("https://doi.org/10.53731/4nwxn-frt36")
|
38
38
|
expect(subject.url).to eq("https://blog.front-matter.io/posts/does-it-compose")
|
39
|
+
expect(subject.files.length).to eq(3)
|
40
|
+
expect(subject.files[1]).to eq("mimeType" => "application/pdf", "url" => "https://api.rogue-scholar.org/posts/10.53731/4nwxn-frt36.pdf")
|
39
41
|
expect(subject.alternate_identifiers).to eq([{ "alternateIdentifier" => "5bb66e92-5cb9-4659-8aca-20e486b695c9", "alternateIdentifierType" => "UUID" }])
|
40
42
|
expect(subject.type).to eq("Article")
|
41
43
|
expect(subject.contributors.length).to eq(1)
|
@@ -60,6 +62,8 @@ describe Commonmeta::Metadata, vcr: true do
|
|
60
62
|
# expect(subject.valid?).to be true
|
61
63
|
expect(subject.id).to eq("https://doi.org/10.53731/r79v4e1-97aq74v-ag578")
|
62
64
|
expect(subject.url).to eq("https://blog.front-matter.io/posts/differences-between-orcid-and-datacite-metadata")
|
65
|
+
expect(subject.files.length).to eq(3)
|
66
|
+
expect(subject.files[1]).to eq("mimeType" => "application/pdf", "url" => "https://api.rogue-scholar.org/posts/10.53731/r79v4e1-97aq74v-ag578.pdf")
|
63
67
|
expect(subject.alternate_identifiers).to eq([{ "alternateIdentifier" => "8a4de443-3347-4b82-b57d-e3c82b6485fc", "alternateIdentifierType" => "UUID" }])
|
64
68
|
expect(subject.type).to eq("Article")
|
65
69
|
expect(subject.contributors.length).to eq(1)
|
@@ -85,6 +89,8 @@ describe Commonmeta::Metadata, vcr: true do
|
|
85
89
|
# expect(subject.valid?).to be true
|
86
90
|
expect(subject.id).to eq("https://doi.org/10.53731/r294649-6f79289-8cw18")
|
87
91
|
expect(subject.url).to eq("https://blog.front-matter.io/posts/nine-simple-ways-to-make-it-easier-to-re-use-your-data")
|
92
|
+
expect(subject.files.length).to eq(3)
|
93
|
+
expect(subject.files[1]).to eq("mimeType" => "application/pdf", "url" => "https://api.rogue-scholar.org/posts/10.53731/r294649-6f79289-8cw18.pdf")
|
88
94
|
expect(subject.alternate_identifiers).to eq([{ "alternateIdentifier" => "2bdebfc5-e02e-42c2-90c5-e873e2d0435d", "alternateIdentifierType" => "UUID" }])
|
89
95
|
expect(subject.type).to eq("Article")
|
90
96
|
expect(subject.contributors.length).to eq(1)
|
@@ -110,6 +116,8 @@ describe Commonmeta::Metadata, vcr: true do
|
|
110
116
|
# expect(subject.valid?).to be true
|
111
117
|
expect(subject.id).to eq("https://doi.org/10.53731/r79s4nh-97aq74v-ag4t1")
|
112
118
|
expect(subject.url).to eq("https://blog.front-matter.io/posts/tracking-the-growth-of-the-pid-graph")
|
119
|
+
expect(subject.files.length).to eq(3)
|
120
|
+
expect(subject.files[1]).to eq("mimeType" => "application/pdf", "url" => "https://api.rogue-scholar.org/posts/10.53731/r79s4nh-97aq74v-ag4t1.pdf")
|
113
121
|
expect(subject.alternate_identifiers).to eq([{ "alternateIdentifier" => "e58dc9c8-b870-4db2-8896-238b3246c551", "alternateIdentifierType" => "UUID" }])
|
114
122
|
expect(subject.type).to eq("Article")
|
115
123
|
expect(subject.contributors.length).to eq(1)
|
@@ -187,6 +195,8 @@ describe Commonmeta::Metadata, vcr: true do
|
|
187
195
|
# expect(subject.valid?).to be true
|
188
196
|
expect(subject.id).to eq("https://doi.org/10.53731/ffbx660-083tnag")
|
189
197
|
expect(subject.url).to eq("https://syldavia-gazette.org/guinea-worms-chatgpt-neanderthals")
|
198
|
+
expect(subject.files.length).to eq(3)
|
199
|
+
expect(subject.files[1]).to eq("mimeType" => "application/pdf", "url" => "https://api.rogue-scholar.org/posts/10.53731/ffbx660-083tnag.pdf")
|
190
200
|
expect(subject.alternate_identifiers).to eq([{ "alternateIdentifier" => "0022b9ef-525a-4a79-81ad-13411697f58a", "alternateIdentifierType" => "UUID" }])
|
191
201
|
expect(subject.type).to eq("Article")
|
192
202
|
expect(subject.contributors.length).to eq(1)
|
@@ -210,6 +220,8 @@ describe Commonmeta::Metadata, vcr: true do
|
|
210
220
|
# expect(subject.valid?).to be true
|
211
221
|
expect(subject.id).to eq("https://doi.org/10.59350/kz04m-s8z58")
|
212
222
|
expect(subject.url).to eq("https://wisspub.net/2023/05/23/eu-mitgliedstaaten-betonen-die-rolle-von-wissenschaftsgeleiteten-open-access-modellen-jenseits-von-apcs")
|
223
|
+
expect(subject.files.length).to eq(3)
|
224
|
+
expect(subject.files[1]).to eq("mimeType" => "application/pdf", "url" => "https://api.rogue-scholar.org/posts/10.59350/kz04m-s8z58.pdf")
|
213
225
|
expect(subject.alternate_identifiers).to eq([{ "alternateIdentifier" => "1c578558-1324-4493-b8af-84c49eabc52f", "alternateIdentifierType" => "UUID" }])
|
214
226
|
expect(subject.type).to eq("Article")
|
215
227
|
expect(subject.contributors.length).to eq(1)
|
@@ -234,14 +246,16 @@ describe Commonmeta::Metadata, vcr: true do
|
|
234
246
|
# expect(subject.valid?).to be true
|
235
247
|
expect(subject.id).to eq("https://doi.org/10.59350/faeph-x4x84")
|
236
248
|
expect(subject.url).to eq("https://wayback.archive-it.org/22143/20231103191454/https://project-thor.eu/2016/08/10/orcid-integration-in-pangaea")
|
249
|
+
expect(subject.files.length).to eq(3)
|
250
|
+
expect(subject.files[1]).to eq("mimeType" => "application/pdf", "url" => "https://api.rogue-scholar.org/posts/10.59350/faeph-x4x84.pdf")
|
237
251
|
expect(subject.alternate_identifiers).to eq([{ "alternateIdentifier" => "570c8129-e867-49e6-8517-bd783627e76e", "alternateIdentifierType" => "UUID" }])
|
238
252
|
expect(subject.type).to eq("Article")
|
239
253
|
expect(subject.contributors.length).to eq(1)
|
240
254
|
expect(subject.contributors.first).to eq("contributorRoles" => ["Author"],
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
255
|
+
"type" => "Person",
|
256
|
+
"familyName" => "Stocker",
|
257
|
+
"givenName" => "Markus",
|
258
|
+
"id" => "https://orcid.org/0000-0001-5492-3212")
|
245
259
|
expect(subject.titles).to eq([{ "title" => "ORCID Integration Series: PANGAEA" }])
|
246
260
|
expect(subject.license).to eq("id" => "CC-BY-4.0",
|
247
261
|
"url" => "https://creativecommons.org/licenses/by/4.0/legalcode")
|
@@ -253,7 +267,7 @@ describe Commonmeta::Metadata, vcr: true do
|
|
253
267
|
"subject" => "FOS: Computer and information sciences",
|
254
268
|
"subjectScheme" => "Fields of Science and Technology (FOS)" }])
|
255
269
|
expect(subject.language).to eq("en")
|
256
|
-
expect(subject.funding_references).to eq([{ "awardNumber" => "654039", "funderIdentifier" => "https://doi.org/10.13039/501100007601", "funderIdentifierType"=>"Crossref Funder ID", "funderName" => "European Union’s Horizon 2020 research and innovation programme" }])
|
270
|
+
expect(subject.funding_references).to eq([{ "awardNumber" => "654039", "funderIdentifier" => "https://doi.org/10.13039/501100007601", "funderIdentifierType" => "Crossref Funder ID", "funderName" => "European Union’s Horizon 2020 research and innovation programme" }])
|
257
271
|
expect(subject.container).to eq("identifier" => "https://project-thor.eu", "identifierType" => "URL", "title" => "Project THOR", "type" => "Periodical")
|
258
272
|
expect(subject.archive_locations).to eq(["Internet Archive"])
|
259
273
|
end
|
@@ -264,10 +278,12 @@ describe Commonmeta::Metadata, vcr: true do
|
|
264
278
|
# expect(subject.valid?).to be true
|
265
279
|
expect(subject.id).to eq("https://doi.org/10.59350/hke8v-d1e66")
|
266
280
|
expect(subject.url).to eq("https://svpow.com/2023/06/09/new-paper-curtice-et-al-2023-on-the-first-haplocanthosaurus-from-dry-mesa")
|
281
|
+
expect(subject.files.length).to eq(3)
|
282
|
+
expect(subject.files[1]).to eq("mimeType" => "application/pdf", "url" => "https://api.rogue-scholar.org/posts/10.59350/hke8v-d1e66.pdf")
|
267
283
|
expect(subject.type).to eq("Article")
|
268
284
|
expect(subject.contributors.length).to eq(1)
|
269
285
|
expect(subject.contributors.first).to eq("familyName" => "Wedel", "givenName" => "Matt", "type" => "Person", "contributorRoles" => ["Author"])
|
270
|
-
expect(subject.titles).to eq([{ "title" => "New paper: Curtice et al. (2023) on the first <i>Haplocanthosaurus</i> from Dry Mesa"}])
|
286
|
+
expect(subject.titles).to eq([{ "title" => "New paper: Curtice et al. (2023) on the first <i>Haplocanthosaurus</i> from Dry Mesa" }])
|
271
287
|
expect(subject.license).to eq("id" => "CC-BY-4.0",
|
272
288
|
"url" => "https://creativecommons.org/licenses/by/4.0/legalcode")
|
273
289
|
expect(subject.date).to eq("published" => "2023-06-09", "updated" => "2023-06-09")
|
@@ -289,6 +305,8 @@ describe Commonmeta::Metadata, vcr: true do
|
|
289
305
|
# expect(subject.valid?).to be true
|
290
306
|
expect(subject.id).to eq("https://doi.org/10.59350/tpa8t-j6292")
|
291
307
|
expect(subject.url).to eq("https://www.samuelmoore.org/2023/04/20/how-to-cultivate-good-closures-scaling-small-and-the-limits-of-openness")
|
308
|
+
expect(subject.files.length).to eq(3)
|
309
|
+
expect(subject.files[1]).to eq("mimeType" => "application/pdf", "url" => "https://api.rogue-scholar.org/posts/10.59350/tpa8t-j6292.pdf")
|
292
310
|
expect(subject.type).to eq("Article")
|
293
311
|
expect(subject.contributors.length).to eq(1)
|
294
312
|
expect(subject.contributors.first).to eq("familyName" => "Moore", "givenName" => "Samuel", "type" => "Person", "contributorRoles" => ["Author"])
|
@@ -313,6 +331,8 @@ describe Commonmeta::Metadata, vcr: true do
|
|
313
331
|
# expect(subject.valid?).to be true
|
314
332
|
expect(subject.id).to eq("https://doi.org/10.59350/tfahc-rp566")
|
315
333
|
expect(subject.url).to eq("https://blog.oa.works/nature-features-oa-reports-work-putting-oa-policy-into-practice")
|
334
|
+
expect(subject.files.length).to eq(3)
|
335
|
+
expect(subject.files[1]).to eq("mimeType" => "application/pdf", "url" => "https://api.rogue-scholar.org/posts/10.59350/tfahc-rp566.pdf")
|
316
336
|
expect(subject.type).to eq("Article")
|
317
337
|
expect(subject.contributors.length).to eq(1)
|
318
338
|
expect(subject.contributors.first).to eq("name" => "OA.Works", "type" => "Organization", "contributorRoles" => ["Author"])
|
@@ -362,6 +382,8 @@ describe Commonmeta::Metadata, vcr: true do
|
|
362
382
|
# expect(subject.valid?).to be true
|
363
383
|
expect(subject.id).to eq("https://doi.org/10.59350/zwdq7-waa43")
|
364
384
|
expect(subject.url).to eq("https://citationstyles.org/2020/07/11/seeking-public-comment-on-CSL-1-0-2")
|
385
|
+
expect(subject.files.length).to eq(3)
|
386
|
+
expect(subject.files[1]).to eq("mimeType" => "application/pdf", "url" => "https://api.rogue-scholar.org/posts/10.59350/zwdq7-waa43.pdf")
|
365
387
|
expect(subject.alternate_identifiers).to eq([{ "alternateIdentifier" => "efdacb04-bcec-49d7-b689-ab3eab0634bf", "alternateIdentifierType" => "UUID" }])
|
366
388
|
expect(subject.type).to eq("Article")
|
367
389
|
expect(subject.contributors.length).to eq(0)
|
@@ -387,6 +409,8 @@ describe Commonmeta::Metadata, vcr: true do
|
|
387
409
|
# expect(subject.valid?).to be true
|
388
410
|
expect(subject.id).to eq("https://doi.org/10.59350/2shz7-ehx26")
|
389
411
|
expect(subject.url).to eq("https://libscie.org/ku-leuven-supports-researchequals")
|
412
|
+
expect(subject.files.length).to eq(3)
|
413
|
+
expect(subject.files[1]).to eq("mimeType" => "application/pdf", "url" => "https://api.rogue-scholar.org/posts/10.59350/2shz7-ehx26.pdf")
|
390
414
|
expect(subject.alternate_identifiers).to eq([{ "alternateIdentifier" => "5561f8e4-2ff1-4186-a8d5-8dacb3afe414", "alternateIdentifierType" => "UUID" }])
|
391
415
|
expect(subject.type).to eq("Article")
|
392
416
|
expect(subject.contributors.length).to eq(1)
|
@@ -412,6 +436,8 @@ describe Commonmeta::Metadata, vcr: true do
|
|
412
436
|
# expect(subject.valid?).to be true
|
413
437
|
expect(subject.id).to eq("https://doi.org/10.59350/33es7-fqz31")
|
414
438
|
expect(subject.url).to eq("https://lab.sub.uni-goettingen.de/welcome.html")
|
439
|
+
expect(subject.files.length).to eq(3)
|
440
|
+
expect(subject.files[1]).to eq("mimeType" => "application/pdf", "url" => "https://api.rogue-scholar.org/posts/10.59350/33es7-fqz31.pdf")
|
415
441
|
expect(subject.alternate_identifiers).to eq([{ "alternateIdentifier" => "a163e340-5b3c-4736-9ab0-8c54fdff6a3c", "alternateIdentifierType" => "UUID" }])
|
416
442
|
expect(subject.type).to eq("Article")
|
417
443
|
expect(subject.contributors.length).to eq(1)
|
@@ -437,6 +463,8 @@ describe Commonmeta::Metadata, vcr: true do
|
|
437
463
|
# expect(subject.valid?).to be true
|
438
464
|
expect(subject.id).to eq("https://doi.org/10.59350/63055-a8604")
|
439
465
|
expect(subject.url).to eq("http://sfmatheson.blogspot.com/2023/01/quintessence-of-dust-2023-restart-why.html")
|
466
|
+
expect(subject.files.length).to eq(3)
|
467
|
+
expect(subject.files[1]).to eq("mimeType" => "application/pdf", "url" => "https://api.rogue-scholar.org/posts/10.59350/63055-a8604.pdf")
|
440
468
|
expect(subject.alternate_identifiers).to eq([{ "alternateIdentifier" => "1898d2d7-4d87-4487-96c4-3073cf99e9a5", "alternateIdentifierType" => "UUID" }])
|
441
469
|
expect(subject.type).to eq("Article")
|
442
470
|
expect(subject.contributors.length).to eq(1)
|
@@ -462,6 +490,8 @@ describe Commonmeta::Metadata, vcr: true do
|
|
462
490
|
# expect(subject.valid?).to be true
|
463
491
|
expect(subject.id).to eq("https://doi.org/10.59350/9gfjs-pey70")
|
464
492
|
expect(subject.url).to eq("https://flavoursofopen.science/grundlagen-fur-die-entwicklung-einer-open-scholarship-strategie")
|
493
|
+
expect(subject.files.length).to eq(3)
|
494
|
+
expect(subject.files[1]).to eq("mimeType" => "application/pdf", "url" => "https://api.rogue-scholar.org/posts/10.59350/9gfjs-pey70.pdf")
|
465
495
|
expect(subject.alternate_identifiers).to eq([{ "alternateIdentifier" => "f3dc29da-0481-4f3b-8110-4c07260fca67", "alternateIdentifierType" => "UUID" }])
|
466
496
|
expect(subject.type).to eq("Article")
|
467
497
|
expect(subject.contributors.length).to eq(1)
|
@@ -488,6 +518,8 @@ describe Commonmeta::Metadata, vcr: true do
|
|
488
518
|
# expect(subject.valid?).to be true
|
489
519
|
expect(subject.id).to eq("https://doi.org/10.59350/bbcsr-r4b59")
|
490
520
|
expect(subject.url).to eq("https://markrubin.substack.com/p/the-preregistration-prescriptiveness")
|
521
|
+
expect(subject.files.length).to eq(3)
|
522
|
+
expect(subject.files[1]).to eq("mimeType" => "application/pdf", "url" => "https://api.rogue-scholar.org/posts/10.59350/bbcsr-r4b59.pdf")
|
491
523
|
expect(subject.alternate_identifiers).to eq([{ "alternateIdentifier" => "2b105b29-acbc-4eae-9ff1-368803f36a4d", "alternateIdentifierType" => "UUID" }])
|
492
524
|
expect(subject.type).to eq("Article")
|
493
525
|
expect(subject.contributors.length).to eq(1)
|
@@ -57,7 +57,7 @@ describe Commonmeta::Metadata, vcr: true do
|
|
57
57
|
"journal_article")
|
58
58
|
expect(Array.wrap(crossref_xml.dig("contributors", "person_name")).length).to eq(6)
|
59
59
|
expect(Array.wrap(crossref_xml.dig("contributors",
|
60
|
-
"person_name")).first).to eq("contributor_role"=>"author", "given_name"=>"Markus", "sequence"=>"first", "surname"=>"Ralser")
|
60
|
+
"person_name")).first).to eq("contributor_role" => "author", "given_name" => "Markus", "sequence" => "first", "surname" => "Ralser")
|
61
61
|
expect(crossref_xml.dig("titles",
|
62
62
|
"title")).to eq("Triose Phosphate Isomerase Deficiency Is Caused by Altered Dimerization–Not Catalytic Inactivity–of the Mutant Enzymes")
|
63
63
|
end
|
@@ -232,6 +232,9 @@ describe Commonmeta::Metadata, vcr: true do
|
|
232
232
|
"title")).to eq("Attempts at automating journal subject classification")
|
233
233
|
expect(crossref_xml.dig("item_number")).to eq("__content__" => "5d14ffacb9ac4e20bdc0d9248df4e80d", "item_number_type" => "uuid")
|
234
234
|
expect(crossref_xml.dig("group_title")).to eq("Humanities")
|
235
|
+
expect(crossref_xml.dig("doi_data", "collection", "item", "resource").length).to eq(4)
|
236
|
+
expect(crossref_xml.dig("doi_data", "collection", "item", "resource", 2)).to eq("__content__" => "https://api.rogue-scholar.org/posts/10.54900/n6dnt-xpq48.pdf", "mime_type" => "application/pdf")
|
237
|
+
|
235
238
|
end
|
236
239
|
|
237
240
|
it "json_feed_item with references" do
|
@@ -264,6 +267,8 @@ describe Commonmeta::Metadata, vcr: true do
|
|
264
267
|
expect(crossref_xml.dig("citation_list", "citation").last).to eq("article_title" => "The Research Software Alliance (ReSA) and the community landscape", "cYear" => "2020", "doi" => "10.5281/zenodo.3699950", "key" => "ref11")
|
265
268
|
expect(crossref_xml.dig("item_number")).to eq("__content__" => "954f81380ecd409087c5cef1297f1470", "item_number_type" => "uuid")
|
266
269
|
expect(crossref_xml.dig("group_title")).to eq("Humanities")
|
270
|
+
expect(crossref_xml.dig("doi_data", "collection", "item", "resource").length).to eq(4)
|
271
|
+
expect(crossref_xml.dig("doi_data", "collection", "item", "resource", 2)).to eq("__content__" => "https://api.rogue-scholar.org/posts/10.54900/zwm7q-vet94.pdf", "mime_type" => "application/pdf")
|
267
272
|
end
|
268
273
|
|
269
274
|
it "json_feed_item from rogue scholar with doi" do
|
@@ -277,7 +282,7 @@ describe Commonmeta::Metadata, vcr: true do
|
|
277
282
|
expect(subject.titles).to eq([{ "title" => "EU-Mitgliedstaaten betonen die Rolle von wissenschaftsgeleiteten Open-Access-Modellen jenseits von APCs" }])
|
278
283
|
expect(subject.contributors.length).to eq(1)
|
279
284
|
expect(subject.contributors.first).to eq("familyName" => "Pampel", "givenName" => "Heinz", "id" => "https://orcid.org/0000-0003-3334-2771", "type" => "Person", "contributorRoles" => ["Author"])
|
280
|
-
expect(subject.publisher).to eq("name"=>"wisspub.net")
|
285
|
+
expect(subject.publisher).to eq("name" => "wisspub.net")
|
281
286
|
expect(subject.subjects).to eq([{ "subject" => "Social sciences" },
|
282
287
|
{ "schemeUri" => "http://www.oecd.org/science/inno/38235147.pdf",
|
283
288
|
"subject" => "FOS: Social sciences",
|
@@ -293,6 +298,8 @@ describe Commonmeta::Metadata, vcr: true do
|
|
293
298
|
"title")).to eq("EU-Mitgliedstaaten betonen die Rolle von wissenschaftsgeleiteten Open-Access-Modellen jenseits von APCs")
|
294
299
|
expect(crossref_xml.dig("item_number")).to eq("__content__" => "1c57855813244493b8af84c49eabc52f", "item_number_type" => "uuid")
|
295
300
|
expect(crossref_xml.dig("group_title")).to eq("Social sciences")
|
301
|
+
expect(crossref_xml.dig("doi_data", "collection", "item", "resource").length).to eq(4)
|
302
|
+
expect(crossref_xml.dig("doi_data", "collection", "item", "resource", 2)).to eq("__content__" => "https://api.rogue-scholar.org/posts/10.59350/9ry27-7cz42.pdf", "mime_type" => "application/pdf")
|
296
303
|
end
|
297
304
|
|
298
305
|
it "json_feed_item from rogue scholar with organizational author" do
|
@@ -321,6 +328,8 @@ describe Commonmeta::Metadata, vcr: true do
|
|
321
328
|
"title")).to eq("KU Leuven supports ResearchEquals")
|
322
329
|
expect(crossref_xml.dig("item_number")).to eq("__content__" => "5561f8e42ff14186a8d58dacb3afe414", "item_number_type" => "uuid")
|
323
330
|
expect(crossref_xml.dig("group_title")).to eq("Social sciences")
|
331
|
+
expect(crossref_xml.dig("doi_data", "collection", "item", "resource").length).to eq(4)
|
332
|
+
expect(crossref_xml.dig("doi_data", "collection", "item", "resource", 2)).to eq("__content__" => "https://api.rogue-scholar.org/posts/10.59350/9ry27-7cz42.pdf", "mime_type" => "application/pdf")
|
324
333
|
end
|
325
334
|
|
326
335
|
it "json_feed_item from rogue scholar with archived content" do
|
@@ -333,10 +342,10 @@ describe Commonmeta::Metadata, vcr: true do
|
|
333
342
|
expect(subject.type).to eq("Article")
|
334
343
|
expect(subject.contributors.length).to eq(1)
|
335
344
|
expect(subject.contributors.first).to eq("contributorRoles" => ["Author"],
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
345
|
+
"type" => "Person",
|
346
|
+
"familyName" => "Stocker",
|
347
|
+
"givenName" => "Markus",
|
348
|
+
"id" => "https://orcid.org/0000-0001-5492-3212")
|
340
349
|
expect(subject.titles).to eq([{ "title" => "ORCID Integration Series: PANGAEA" }])
|
341
350
|
expect(subject.license).to eq("id" => "CC-BY-4.0",
|
342
351
|
"url" => "https://creativecommons.org/licenses/by/4.0/legalcode")
|
@@ -348,18 +357,20 @@ describe Commonmeta::Metadata, vcr: true do
|
|
348
357
|
"subject" => "FOS: Computer and information sciences",
|
349
358
|
"subjectScheme" => "Fields of Science and Technology (FOS)" }])
|
350
359
|
expect(subject.language).to eq("en")
|
351
|
-
expect(subject.funding_references).to eq([{ "awardNumber" => "654039", "funderIdentifier" => "https://doi.org/10.13039/501100007601", "funderIdentifierType"=>"Crossref Funder ID", "funderName" => "European Union’s Horizon 2020 research and innovation programme" }])
|
360
|
+
expect(subject.funding_references).to eq([{ "awardNumber" => "654039", "funderIdentifier" => "https://doi.org/10.13039/501100007601", "funderIdentifierType" => "Crossref Funder ID", "funderName" => "European Union’s Horizon 2020 research and innovation programme" }])
|
352
361
|
expect(subject.container).to eq("identifier" => "https://project-thor.eu", "identifierType" => "URL", "title" => "Project THOR", "type" => "Periodical")
|
353
362
|
expect(subject.archive_locations).to eq(["Internet Archive"])
|
354
363
|
# puts subject.crossref_xml
|
355
364
|
crossref_xml = Hash.from_xml(subject.crossref_xml).dig("doi_batch", "body", "posted_content")
|
356
365
|
expect(Array.wrap(crossref_xml.dig("contributors", "person_name")).length).to eq(1)
|
357
366
|
expect(Array.wrap(crossref_xml.dig("contributors",
|
358
|
-
"person_name")).first).to eq("ORCID"=>"https://orcid.org/0000-0001-5492-3212", "contributor_role"=>"author", "given_name"=>"Markus", "sequence"=>"first", "surname"=>"Stocker")
|
367
|
+
"person_name")).first).to eq("ORCID" => "https://orcid.org/0000-0001-5492-3212", "contributor_role" => "author", "given_name" => "Markus", "sequence" => "first", "surname" => "Stocker")
|
359
368
|
expect(crossref_xml.dig("titles",
|
360
369
|
"title")).to eq("ORCID Integration Series: PANGAEA")
|
361
370
|
expect(crossref_xml.dig("item_number")).to eq("__content__" => "570c8129e86749e68517bd783627e76e", "item_number_type" => "uuid")
|
362
371
|
expect(crossref_xml.dig("group_title")).to eq("Computer and information sciences")
|
372
|
+
expect(crossref_xml.dig("doi_data", "collection", "item", "resource").length).to eq(4)
|
373
|
+
expect(crossref_xml.dig("doi_data", "collection", "item", "resource", 2)).to eq("__content__" => "https://api.rogue-scholar.org/posts/10.59350/faeph-x4x84.pdf", "mime_type" => "application/pdf")
|
363
374
|
end
|
364
375
|
|
365
376
|
it "json_feed_item from rogue scholar with relations" do
|
@@ -397,6 +408,8 @@ describe Commonmeta::Metadata, vcr: true do
|
|
397
408
|
"title")).to eq("Differences between ORCID and DataCite Metadata")
|
398
409
|
expect(crossref_xml.dig("item_number")).to eq("__content__" => "8a4de44333474b82b57de3c82b6485fc", "item_number_type" => "uuid")
|
399
410
|
expect(crossref_xml.dig("group_title")).to eq("Computer and information sciences")
|
411
|
+
expect(crossref_xml.dig("doi_data", "collection", "item", "resource").length).to eq(4)
|
412
|
+
expect(crossref_xml.dig("doi_data", "collection", "item", "resource", 2)).to eq("__content__" => "https://api.rogue-scholar.org/posts/10.53731/r79v4e1-97aq74v-ag578.pdf", "mime_type" => "application/pdf")
|
400
413
|
end
|
401
414
|
|
402
415
|
it "json_feed_item from rogue scholar with relations and funding" do
|
@@ -433,6 +446,8 @@ describe Commonmeta::Metadata, vcr: true do
|
|
433
446
|
"title")).to eq("Tracking the Growth of the PID Graph")
|
434
447
|
expect(crossref_xml.dig("item_number")).to eq("__content__" => "e58dc9c8b8704db28896238b3246c551", "item_number_type" => "uuid")
|
435
448
|
expect(crossref_xml.dig("group_title")).to eq("Computer and information sciences")
|
449
|
+
expect(crossref_xml.dig("doi_data", "collection", "item", "resource").length).to eq(4)
|
450
|
+
expect(crossref_xml.dig("doi_data", "collection", "item", "resource", 2)).to eq("__content__" => "https://api.rogue-scholar.org/posts/10.53731/r79s4nh-97aq74v-ag4t1.pdf", "mime_type" => "application/pdf")
|
436
451
|
end
|
437
452
|
|
438
453
|
it "json_feed_item from rogue scholar with anonymous author" do
|
@@ -466,6 +481,8 @@ describe Commonmeta::Metadata, vcr: true do
|
|
466
481
|
"title")).to eq("Welcome to the Lab")
|
467
482
|
expect(crossref_xml.dig("item_number")).to eq("__content__" => "a163e3405b3c47369ab08c54fdff6a3c", "item_number_type" => "uuid")
|
468
483
|
expect(crossref_xml.dig("group_title")).to eq("Computer and information sciences")
|
484
|
+
expect(crossref_xml.dig("doi_data", "collection", "item", "resource").length).to eq(4)
|
485
|
+
expect(crossref_xml.dig("doi_data", "collection", "item", "resource", 2)).to eq("__content__" => "https://api.rogue-scholar.org/posts/10.59350/9ry27-7cz42.pdf", "mime_type" => "application/pdf")
|
469
486
|
end
|
470
487
|
end
|
471
488
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: commonmeta-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Martin Fenner
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-01-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|