commonmeta-ruby 3.3.7 → 3.3.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +7 -5
- data/lib/commonmeta/author_utils.rb +11 -7
- data/lib/commonmeta/crossref_utils.rb +14 -31
- data/lib/commonmeta/schema_utils.rb +1 -1
- data/lib/commonmeta/version.rb +1 -1
- data/resources/{commonmeta_v0.9.1.json → commonmeta_v0.9.2.json} +19 -5
- data/spec/author_utils_spec.rb +145 -104
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/ghost_post_with_institutional_author.yml +56 -0
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/jekyll_post_with_anonymous_author.yml +62 -0
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/wordpress_post_with_tracking_code_on_url.yml +60 -0
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_one_author/affiliation_is_space.yml +303 -0
- data/spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/json_feed_item_from_rogue_scholar_with_anonymous_author.yml +62 -0
- data/spec/readers/json_feed_reader_spec.rb +74 -2
- data/spec/readers/ris_reader_spec.rb +1 -1
- data/spec/readers/schema_org_reader_spec.rb +1 -3
- data/spec/writers/crossref_xml_writer_spec.rb +34 -1
- data/spec/writers/schema_org_writer_spec.rb +1 -1
- metadata +8 -3
@@ -174,6 +174,54 @@ describe Commonmeta::Metadata, vcr: true do
|
|
174
174
|
expect(subject.references.length).to eq(3)
|
175
175
|
expect(subject.references.first).to eq("key" => "ref1", "url" => "https://sauroposeidon.files.wordpress.com/2010/04/foster-and-wedel-2014-haplocanthosaurus-from-snowmass-colorado.pdf")
|
176
176
|
end
|
177
|
+
|
178
|
+
it "wordpress post with tracking code on url" do
|
179
|
+
input = "https://rogue-scholar.org/api/posts/5d95d90d-ff59-4c8b-b7f8-44e6b45fd593"
|
180
|
+
subject = described_class.new(input: input)
|
181
|
+
puts subject.errors
|
182
|
+
# expect(subject.valid?).to be true
|
183
|
+
expect(subject.id).to eq("https://doi.org/10.59350/tpa8t-j6292")
|
184
|
+
expect(subject.url).to eq("https://www.samuelmoore.org/2023/04/20/how-to-cultivate-good-closures-scaling-small-and-the-limits-of-openness")
|
185
|
+
expect(subject.type).to eq("Article")
|
186
|
+
expect(subject.creators.length).to eq(1)
|
187
|
+
expect(subject.creators.first).to eq("familyName"=>"Moore", "givenName"=>"Samuel", "id"=>"https://orcid.org/0000-0002-0504-2897", "type"=>"Person")
|
188
|
+
expect(subject.titles).to eq([{ "title" => "How to cultivate good closures: ‘scaling small’ and the limits of openness" }])
|
189
|
+
expect(subject.license).to eq("id" => "CC-BY-4.0",
|
190
|
+
"url" => "https://creativecommons.org/licenses/by/4.0/legalcode")
|
191
|
+
expect(subject.date).to eq("published"=>"2023-04-20", "updated"=>"2023-06-19")
|
192
|
+
expect(subject.descriptions.first["description"]).to start_with("Text of a talk given to the COPIM end-of-project conference")
|
193
|
+
expect(subject.publisher).to eq("name" => "Samuel Moore")
|
194
|
+
expect(subject.subjects).to eq([{ "subject" => "Social sciences" },
|
195
|
+
{ "schemeUri" => "http://www.oecd.org/science/inno/38235147.pdf",
|
196
|
+
"subject" => "FOS: Social sciences",
|
197
|
+
"subjectScheme" => "Fields of Science and Technology (FOS)" }])
|
198
|
+
expect(subject.language).to eq("en")
|
199
|
+
expect(subject.container).to eq("identifier" => "https://www.samuelmoore.org/", "identifierType" => "URL", "title" => "Samuel Moore", "type" => "Periodical")
|
200
|
+
expect(subject.references).to be_nil
|
201
|
+
end
|
202
|
+
|
203
|
+
it "ghost post with institutional author" do
|
204
|
+
input = "https://rogue-scholar.org/api/posts/2b3cdd27-5123-4167-9482-3c074392e2d2"
|
205
|
+
subject = described_class.new(input: input)
|
206
|
+
expect(subject.valid?).to be true
|
207
|
+
expect(subject.id).to eq("https://blog.oa.works/nature-features-oa-reports-work-putting-oa-policy-into-practice")
|
208
|
+
expect(subject.url).to eq("https://blog.oa.works/nature-features-oa-reports-work-putting-oa-policy-into-practice")
|
209
|
+
expect(subject.type).to eq("Article")
|
210
|
+
expect(subject.creators.length).to eq(1)
|
211
|
+
expect(subject.creators.first).to eq("name"=>"OA.Works", "type"=>"Organization")
|
212
|
+
expect(subject.titles).to eq([{ "title" => "Nature features OA.Report's work putting OA policy into practice!" }])
|
213
|
+
expect(subject.license).to eq("id" => "CC-BY-4.0",
|
214
|
+
"url" => "https://creativecommons.org/licenses/by/4.0/legalcode")
|
215
|
+
expect(subject.date).to eq("published" => "2023-01-24")
|
216
|
+
expect(subject.descriptions.first["description"]).to start_with("After a couple of years of working to support institutions implementing their OA policies")
|
217
|
+
expect(subject.publisher).to eq("name" => "OA.Works Blog")
|
218
|
+
expect(subject.subjects).to eq([{ "subject" => "Engineering and technology" },
|
219
|
+
{ "schemeUri" => "http://www.oecd.org/science/inno/38235147.pdf",
|
220
|
+
"subject" => "FOS: Engineering and technology",
|
221
|
+
"subjectScheme" => "Fields of Science and Technology (FOS)" }])
|
222
|
+
expect(subject.language).to eq("en")
|
223
|
+
expect(subject.container).to eq("identifier" => "https://blog.oa.works/", "identifierType" => "URL", "title" => "OA.Works Blog", "type" => "Periodical")
|
224
|
+
end
|
177
225
|
|
178
226
|
it "upstream post with references" do
|
179
227
|
input = "https://rogue-scholar.org/api/posts/954f8138-0ecd-4090-87c5-cef1297f1470"
|
@@ -228,8 +276,7 @@ describe Commonmeta::Metadata, vcr: true do
|
|
228
276
|
it "ghost post with organizational author" do
|
229
277
|
input = "https://rogue-scholar.org/api/posts/5561f8e4-2ff1-4186-a8d5-8dacb3afe414"
|
230
278
|
subject = described_class.new(input: input)
|
231
|
-
|
232
|
-
# expect(subject.valid?).to be true
|
279
|
+
expect(subject.valid?).to be true
|
233
280
|
expect(subject.id).to eq("https://libscie.org/ku-leuven-supports-researchequals")
|
234
281
|
expect(subject.url).to eq("https://libscie.org/ku-leuven-supports-researchequals")
|
235
282
|
expect(subject.alternate_identifiers).to eq([{ "alternateIdentifier" => "5561f8e4-2ff1-4186-a8d5-8dacb3afe414", "alternateIdentifierType" => "UUID" }])
|
@@ -251,6 +298,31 @@ describe Commonmeta::Metadata, vcr: true do
|
|
251
298
|
expect(subject.references).to be_nil
|
252
299
|
end
|
253
300
|
|
301
|
+
it "jekyll post with anonymous author" do
|
302
|
+
input = "https://rogue-scholar.org/api/posts/a163e340-5b3c-4736-9ab0-8c54fdff6a3c"
|
303
|
+
subject = described_class.new(input: input)
|
304
|
+
expect(subject.valid?).to be true
|
305
|
+
expect(subject.id).to eq("https://doi.org/10.59350/g6bth-b6f85")
|
306
|
+
expect(subject.url).to eq("https://lab.sub.uni-goettingen.de/welcome.html")
|
307
|
+
expect(subject.alternate_identifiers).to eq([{ "alternateIdentifier" => "a163e340-5b3c-4736-9ab0-8c54fdff6a3c", "alternateIdentifierType" => "UUID" }])
|
308
|
+
expect(subject.type).to eq("Article")
|
309
|
+
expect(subject.creators.length).to eq(1)
|
310
|
+
expect(subject.creators.first).to eq("affiliation"=>[{"id"=>"https://ror.org/05745n787"}], "type"=>"Person")
|
311
|
+
expect(subject.titles).to eq([{ "title" => "Welcome to the Lab" }])
|
312
|
+
expect(subject.license).to eq("id" => "CC-BY-4.0",
|
313
|
+
"url" => "https://creativecommons.org/licenses/by/4.0/legalcode")
|
314
|
+
expect(subject.date).to eq("published"=>"2017-01-01", "updated"=>"2017-01-01")
|
315
|
+
expect(subject.descriptions.first["description"]).to start_with("Welcome everyone!")
|
316
|
+
expect(subject.publisher).to eq("name" => "lab.sub - Articles")
|
317
|
+
expect(subject.subjects).to eq([{ "subject" => "Engineering and technology" },
|
318
|
+
{ "schemeUri" => "http://www.oecd.org/science/inno/38235147.pdf",
|
319
|
+
"subject" => "FOS: Engineering and technology",
|
320
|
+
"subjectScheme" => "Fields of Science and Technology (FOS)" }])
|
321
|
+
expect(subject.language).to eq("en")
|
322
|
+
expect(subject.container).to eq("identifier" => "https://lab.sub.uni-goettingen.de/", "identifierType" => "URL", "title" => "lab.sub - Articles", "type" => "Periodical")
|
323
|
+
expect(subject.references).to be_nil
|
324
|
+
end
|
325
|
+
|
254
326
|
it "blog post with non-url id" do
|
255
327
|
input = "https://rogue-scholar.org/api/posts/1898d2d7-4d87-4487-96c4-3073cf99e9a5"
|
256
328
|
subject = described_class.new(input: input)
|
@@ -50,7 +50,7 @@ describe Commonmeta::Metadata, vcr: true do
|
|
50
50
|
expect(subject.state).to eq('not_found')
|
51
51
|
expect(subject.id).to eq('https://doi.org/10.7554/elife.01567')
|
52
52
|
expect(subject.type).to eq('Dissertation')
|
53
|
-
expect(subject.creators).to eq([{
|
53
|
+
expect(subject.creators).to eq([{"familyName"=>"Toparlar", "givenName"=>"Y.", "type"=>"Person"}])
|
54
54
|
expect(subject.titles).to eq([{ 'title' => 'A multiscale analysis of the urban heat island effect' }])
|
55
55
|
expect(subject.descriptions.first['description']).to start_with('Designing the climates of cities')
|
56
56
|
expect(subject.date).to eq('created' => '2018-04-25', 'published' => '2018-04-25')
|
@@ -153,9 +153,7 @@ describe Commonmeta::Metadata, vcr: true do
|
|
153
153
|
expect(subject.titles).to eq([{ 'title' => 'Summary data ankylosing spondylitis GWAS' }])
|
154
154
|
expect(subject.container).to eq('identifier' => 'https://dataverse.harvard.edu',
|
155
155
|
'identifierType' => 'URL', 'title' => 'Harvard Dataverse', 'type' => 'DataRepository')
|
156
|
-
expect(subject.creators).to eq([{
|
157
|
-
'name' => 'International Genetics of Ankylosing Spondylitis Consortium (IGAS)'
|
158
|
-
}])
|
156
|
+
expect(subject.creators).to eq([{"name"=>"International Genetics of Ankylosing Spondylitis Consortium (IGAS)", "type"=>"Organization"}])
|
159
157
|
expect(subject.subjects).to eq([{ 'subject' => 'Medicine, health and life sciences' },
|
160
158
|
{ 'subject' => 'genome-wide association studies' },
|
161
159
|
{ 'subject' => 'Ankylosing spondylitis' }])
|
@@ -279,11 +279,44 @@ describe Commonmeta::Metadata, vcr: true do
|
|
279
279
|
crossref_xml = Hash.from_xml(subject.crossref_xml).dig("doi_batch", "body", "posted_content")
|
280
280
|
expect(Array.wrap(crossref_xml.dig("contributors", "organization")).length).to eq(1)
|
281
281
|
expect(Array.wrap(crossref_xml.dig("contributors",
|
282
|
-
"organization")).first).to eq("
|
282
|
+
"organization")).first).to eq("__content__"=>"Liberate Science", "contributor_role"=>"author", "sequence"=>"first")
|
283
283
|
expect(crossref_xml.dig("titles",
|
284
284
|
"title")).to eq("KU Leuven supports ResearchEquals")
|
285
285
|
expect(crossref_xml.dig('item_number')).to eq("__content__"=>"5561f8e42ff14186a8d58dacb3afe414", "item_number_type"=>"uuid")
|
286
286
|
expect(crossref_xml.dig('group_title')).to eq('Social sciences')
|
287
287
|
end
|
288
|
+
|
289
|
+
it "json_feed_item from rogue scholar with anonymous author" do
|
290
|
+
input = "https://rogue-scholar.org/api/posts/a163e340-5b3c-4736-9ab0-8c54fdff6a3c"
|
291
|
+
subject = described_class.new(input: input, doi: "10.59350/9ry27-7cz42")
|
292
|
+
|
293
|
+
expect(subject.id).to eq("https://doi.org/10.59350/9ry27-7cz42")
|
294
|
+
expect(subject.url).to eq("https://lab.sub.uni-goettingen.de/welcome.html")
|
295
|
+
expect(subject.alternate_identifiers).to eq([{ "alternateIdentifier" => "a163e340-5b3c-4736-9ab0-8c54fdff6a3c", "alternateIdentifierType" => "UUID" }])
|
296
|
+
expect(subject.type).to eq("Article")
|
297
|
+
expect(subject.creators.length).to eq(1)
|
298
|
+
expect(subject.creators.first).to eq("affiliation"=>[{"id"=>"https://ror.org/05745n787"}], "type"=>"Person")
|
299
|
+
expect(subject.titles).to eq([{ "title" => "Welcome to the Lab" }])
|
300
|
+
expect(subject.license).to eq("id" => "CC-BY-4.0",
|
301
|
+
"url" => "https://creativecommons.org/licenses/by/4.0/legalcode")
|
302
|
+
expect(subject.date).to eq("published"=>"2017-01-01", "updated"=>"2017-01-01")
|
303
|
+
expect(subject.descriptions.first["description"]).to start_with("Welcome everyone!")
|
304
|
+
expect(subject.publisher).to eq("name" => "lab.sub - Articles")
|
305
|
+
expect(subject.subjects).to eq([{ "subject" => "Engineering and technology" },
|
306
|
+
{ "schemeUri" => "http://www.oecd.org/science/inno/38235147.pdf",
|
307
|
+
"subject" => "FOS: Engineering and technology",
|
308
|
+
"subjectScheme" => "Fields of Science and Technology (FOS)" }])
|
309
|
+
expect(subject.language).to eq("en")
|
310
|
+
expect(subject.container).to eq("identifier" => "https://lab.sub.uni-goettingen.de/", "identifierType" => "URL", "title" => "lab.sub - Articles", "type" => "Periodical")
|
311
|
+
expect(subject.references).to be_nil
|
312
|
+
crossref_xml = Hash.from_xml(subject.crossref_xml).dig("doi_batch", "body", "posted_content")
|
313
|
+
expect(Array.wrap(crossref_xml.dig("contributors", "anonymous")).length).to eq(1)
|
314
|
+
expect(Array.wrap(crossref_xml.dig("contributors",
|
315
|
+
"anonymous")).first).to eq("affiliations"=>{"institution"=>{"institution_id"=>{"__content__"=>"https://ror.org/05745n787", "type"=>"ror"}}}, "contributor_role"=>"author", "sequence"=>"first")
|
316
|
+
expect(crossref_xml.dig("titles",
|
317
|
+
"title")).to eq("Welcome to the Lab")
|
318
|
+
expect(crossref_xml.dig('item_number')).to eq("__content__"=>"a163e3405b3c47369ab08c54fdff6a3c", "item_number_type"=>"uuid")
|
319
|
+
expect(crossref_xml.dig('group_title')).to eq('Engineering and technology')
|
320
|
+
end
|
288
321
|
end
|
289
322
|
end
|
@@ -177,7 +177,7 @@ describe Commonmeta::Metadata, vcr: true do
|
|
177
177
|
expect(json['@id']).to eq('https://doi.org/10.23725/8na3-9s47')
|
178
178
|
expect(json['@type']).to eq('Dataset')
|
179
179
|
expect(json['name']).to eq('NWD165827.recab.cram')
|
180
|
-
expect(json['author']).to eq(
|
180
|
+
expect(json['author']).to eq("@type"=>"Organization", "name"=>"TOPMed")
|
181
181
|
expect(json['includedInDataCatalog']).to be_empty
|
182
182
|
expect(json['identifier']).to eq(
|
183
183
|
[{ '@type' => 'PropertyValue',
|
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.3.
|
4
|
+
version: 3.3.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Martin Fenner
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-06-
|
11
|
+
date: 2023-06-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -655,7 +655,7 @@ files:
|
|
655
655
|
- lib/commonmeta/xml_converter.rb
|
656
656
|
- resources/2008/09/xsd.xsl
|
657
657
|
- resources/cff.json
|
658
|
-
- resources/commonmeta_v0.9.
|
658
|
+
- resources/commonmeta_v0.9.2.json
|
659
659
|
- resources/crossref/AccessIndicators.xsd
|
660
660
|
- resources/crossref/JATS-journalpublishing1-3d2-mathml3-elements.xsd
|
661
661
|
- resources/crossref/JATS-journalpublishing1-3d2-mathml3.xsd
|
@@ -870,14 +870,18 @@ files:
|
|
870
870
|
- spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/blogger_post.yml
|
871
871
|
- spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/ghost_post_with_author_name_suffix.yml
|
872
872
|
- spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/ghost_post_with_doi.yml
|
873
|
+
- spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/ghost_post_with_institutional_author.yml
|
873
874
|
- spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/ghost_post_with_organizational_author.yml
|
874
875
|
- spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/ghost_post_without_doi.yml
|
875
876
|
- spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/jekyll_post.yml
|
877
|
+
- spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/jekyll_post_with_anonymous_author.yml
|
876
878
|
- spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/substack_post_with_broken_reference.yml
|
877
879
|
- spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/syldavia_gazette_post_with_references.yml
|
878
880
|
- spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/upstream_post_with_references.yml
|
879
881
|
- spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/wordpress_post.yml
|
880
882
|
- spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/wordpress_post_with_references.yml
|
883
|
+
- spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/wordpress_post_with_tracking_code_on_url.yml
|
884
|
+
- spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_one_author/affiliation_is_space.yml
|
881
885
|
- spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_one_author/has_familyName.yml
|
882
886
|
- spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_one_author/has_name_in_display-order_with_ORCID.yml
|
883
887
|
- spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_one_author/name_with_affiliation_crossref.yml
|
@@ -917,6 +921,7 @@ files:
|
|
917
921
|
- spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/another_schema_org_from_front-matter.yml
|
918
922
|
- spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/journal_article.yml
|
919
923
|
- spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/journal_article_from_datacite.yml
|
924
|
+
- spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/json_feed_item_from_rogue_scholar_with_anonymous_author.yml
|
920
925
|
- spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/json_feed_item_from_rogue_scholar_with_doi.yml
|
921
926
|
- spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/json_feed_item_from_rogue_scholar_with_organizational_author.yml
|
922
927
|
- spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/json_feed_item_from_upstream_blog.yml
|