commonmeta-ruby 3.7.2 → 3.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/publish.yml +23 -0
  3. data/Gemfile.lock +30 -29
  4. data/bin/commonmeta +1 -1
  5. data/docs/.gitignore +1 -0
  6. data/docs/_publish.yml +4 -0
  7. data/docs/_quarto.yml +46 -0
  8. data/docs/_site/favicon.ico +0 -0
  9. data/docs/_site/images/icon.png +0 -0
  10. data/docs/_site/index.html +947 -0
  11. data/docs/_site/readers/bibtex_reader.html +802 -0
  12. data/docs/_site/search.json +74 -0
  13. data/docs/_site/site_libs/bootstrap/bootstrap-dark.min.css +9 -0
  14. data/docs/_site/site_libs/bootstrap/bootstrap-icons.css +2078 -0
  15. data/docs/_site/site_libs/bootstrap/bootstrap-icons.woff +0 -0
  16. data/docs/_site/site_libs/bootstrap/bootstrap.min.css +9 -0
  17. data/docs/_site/site_libs/bootstrap/bootstrap.min.js +7 -0
  18. data/docs/_site/site_libs/clipboard/clipboard.min.js +7 -0
  19. data/docs/_site/site_libs/quarto-html/anchor.min.js +9 -0
  20. data/docs/_site/site_libs/quarto-html/popper.min.js +6 -0
  21. data/docs/_site/site_libs/quarto-html/quarto-syntax-highlighting-dark.css +179 -0
  22. data/docs/_site/site_libs/quarto-html/quarto-syntax-highlighting.css +179 -0
  23. data/docs/_site/site_libs/quarto-html/quarto.js +889 -0
  24. data/docs/_site/site_libs/quarto-html/tippy.css +1 -0
  25. data/docs/_site/site_libs/quarto-html/tippy.umd.min.js +2 -0
  26. data/docs/_site/site_libs/quarto-nav/headroom.min.js +7 -0
  27. data/docs/_site/site_libs/quarto-nav/quarto-nav.js +288 -0
  28. data/docs/_site/site_libs/quarto-search/autocomplete.umd.js +3 -0
  29. data/docs/_site/site_libs/quarto-search/fuse.min.js +9 -0
  30. data/docs/_site/site_libs/quarto-search/quarto-search.js +1241 -0
  31. data/docs/_site/utils/doi_utils.html +787 -0
  32. data/docs/_site/writers/bibtex_writer.html +803 -0
  33. data/docs/favicon.ico +0 -0
  34. data/docs/images/icon.png +0 -0
  35. data/docs/index.qmd +83 -0
  36. data/docs/readers/bibtex_reader.ipynb +37 -0
  37. data/docs/theme.scss +7 -0
  38. data/docs/utils/doi_utils.ipynb +28 -0
  39. data/docs/writers/bibtex_writer.ipynb +39 -0
  40. data/lib/commonmeta/cli.rb +5 -5
  41. data/lib/commonmeta/crossref_utils.rb +7 -1
  42. data/lib/commonmeta/doi_utils.rb +5 -0
  43. data/lib/commonmeta/metadata.rb +66 -62
  44. data/lib/commonmeta/readers/json_feed_reader.rb +15 -5
  45. data/lib/commonmeta/version.rb +1 -1
  46. data/spec/cli_spec.rb +2 -2
  47. data/spec/doi_utils_spec.rb +14 -0
  48. data/spec/fixtures/vcr_cassettes/Commonmeta_CLI/json_feed/json_feed_blog_slug.yml +71 -0
  49. data/spec/readers/json_feed_reader_spec.rb +40 -8
  50. data/spec/writers/crossref_xml_writer_spec.rb +25 -8
  51. metadata +40 -3
@@ -0,0 +1,71 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api.rogue-scholar.org/posts/01a92f9a-f8e0-442b-86e2-11530d9d5635
6
+ body:
7
+ encoding: ASCII-8BIT
8
+ string: ''
9
+ headers:
10
+ Connection:
11
+ - close
12
+ Host:
13
+ - api.rogue-scholar.org
14
+ User-Agent:
15
+ - http.rb/5.1.1
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Content-Type:
22
+ - application/json
23
+ Content-Length:
24
+ - '3313'
25
+ Ratelimit-Limit:
26
+ - '15'
27
+ Ratelimit-Remaining:
28
+ - '14'
29
+ Ratelimit-Reset:
30
+ - '3'
31
+ Date:
32
+ - Mon, 25 Dec 2023 10:38:50 GMT
33
+ Server:
34
+ - Fly/9e37a80f (2023-12-22)
35
+ Via:
36
+ - 1.1 fly.io
37
+ Fly-Request-Id:
38
+ - 01HJG8WMFGNRM35PXT9HSQJYJH-fra
39
+ body:
40
+ encoding: UTF-8
41
+ string: '{"archive_url":"https://wayback.archive-it.org/22123/20231101171300/https://eve.gd/2017/05/07/an-important-note-if-you-have-a-lenovo-g580","authors":[{"name":"Martin
42
+ Paul Eve","url":"https://orcid.org/0000-0002-5589-8511"}],"blog":{"api":false,"archive_prefix":"https://wayback.archive-it.org/22123/20231101171300/","authors":[{"name":"Martin
43
+ Paul Eve","url":null}],"backlog":0,"canonical_url":null,"category":"languagesAndLiterature","created_at":1690329600,"current_feed_url":"https://eve.gd/feed/feed.atom","description":null,"favicon":"https://eve.gd/favicon.png","feed_format":"application/atom+xml","feed_url":"https://eve.gd/feed_all.xml","filter":null,"funding":null,"generator":"Jekyll","generator_raw":"Jekyll","home_page_url":"https://eve.gd","id":"z4b9d78","indexed":false,"issn":null,"language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","plan":"Team","prefix":"10.59348","relative_url":"blog","secure":true,"slug":"eve","status":"active","title":"Martin
44
+ Paul Eve","updated_at":1702425600,"use_api":null,"use_mastodon":false,"user_id":"eb3f6a26-3e38-42ad-b752-250eb2c0bf89","version":"https://jsonfeed.org/version/1.1"},"blog_name":"Martin
45
+ Paul Eve","blog_slug":"eve","content_text":"The Lenovo G580 comes with Windows
46
+ 8. It is possible to permanently lock\nyourself out of the operating system
47
+ if you begin with a Microsoft\naccount and migrate this to a local account.
48
+ Further, you won''t be able\nto rescue the system since *it is impossible
49
+ to enter the BIOS setup in\nthe machine''s default state if you cannot login
50
+ to Windows*.\n\nTo fix this:\n\n1. Disable \"fast boot\" mode in Windows
51
+ 8. You can do this in \"Power\n Settings\". If you don''t do this, you
52
+ can''t modify the Windows disk\n partition when booting from a recovery
53
+ USB.\n2. [Update your\n BIOS](https://download.lenovo.com/consumer/mobiles/62cn97ww_64.exe).\n Do
54
+ it now or you won''t be able to unless you can still login to\n Windows
55
+ 8.\n3. Go into the BIOS (shutdown the machine then press the small button\n next
56
+ to the power button and select \"BIOS setup\"). Then, set an\n administrator
57
+ password in the BIOS settings. Then, \"disable secure\n boot\". This will
58
+ allow you to boot from a recovery USB stick such as\n Kali or Ubuntu.\n\nUrgh.
59
+ A Catch-22 where Microsoft Windows corrupted a login (thanks,\nMicrosoft)
60
+ and a hardware defect stops you booting into a recovery\nmedium (thanks, Lenovo).\n\n[An
61
+ important note if you have a Lenovo\nG580](https://eve.gd/2017/05/07/an-important-note-if-you-have-a-lenovo-g580/)\nwas
62
+ originally published by Martin Paul Eve at [Martin Paul\nEve](https://eve.gd)
63
+ on May 07, 2017.\n","doi":"https://doi.org/10.59348/dmq66-f5d26","guid":"https://eve.gd/2017/05/07/an-important-note-if-you-have-a-lenovo-g580","id":"01a92f9a-f8e0-442b-86e2-11530d9d5635","image":null,"indexed_at":1696162656,"language":"en","published_at":1494172558,"reference":[],"relationships":[],"summary":"The
64
+ Lenovo G580 comes with Windows 8. It is possible to permanently lock yourself
65
+ out of the operating system if you begin with a Microsoft account and migrate
66
+ this to a local account.\n","tags":[],"title":"An important note if you have
67
+ a Lenovo G580","updated_at":1494115200,"url":"https://eve.gd/2017/05/07/an-important-note-if-you-have-a-lenovo-g580"}
68
+
69
+ '
70
+ recorded_at: Mon, 25 Dec 2023 10:38:50 GMT
71
+ recorded_with: VCR 6.2.0
@@ -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
- "type" => "Person",
242
- "familyName" => "Stocker",
243
- "givenName" => "Markus",
244
- "id" => "https://orcid.org/0000-0001-5492-3212")
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)
@@ -528,7 +560,7 @@ describe Commonmeta::Metadata, vcr: true do
528
560
 
529
561
  context "get doi_prefix for blog", vcr: true do
530
562
  it "by blog_id" do
531
- response = subject.get_doi_prefix_by_blog_id("iphylo")
563
+ response = subject.get_doi_prefix_by_blog_slug("iphylo")
532
564
  expect(response).to eq("10.59350")
533
565
  end
534
566
 
@@ -545,7 +577,7 @@ describe Commonmeta::Metadata, vcr: true do
545
577
 
546
578
  context "get blog_id for json_feed item id", vcr: true do
547
579
  it "by blog post id" do
548
- response = subject.get_json_feed_blog_id("1898d2d7-4d87-4487-96c4-3073cf99e9a5")
580
+ response = subject.get_json_feed_blog_slug("1898d2d7-4d87-4487-96c4-3073cf99e9a5")
549
581
  expect(response).to eq("sfmatheson")
550
582
  end
551
583
 
@@ -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
- "type" => "Person",
337
- "familyName" => "Stocker",
338
- "givenName" => "Markus",
339
- "id" => "https://orcid.org/0000-0001-5492-3212")
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.7.2
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: 2023-11-08 00:00:00.000000000 Z
11
+ date: 2024-01-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -599,6 +599,7 @@ files:
599
599
  - ".github/workflows/build.yml"
600
600
  - ".github/workflows/changelog.yml"
601
601
  - ".github/workflows/codeql-analysis.yml"
602
+ - ".github/workflows/publish.yml"
602
603
  - ".github/workflows/rubocop.yml"
603
604
  - ".gitignore"
604
605
  - ".rubocop.yml"
@@ -615,6 +616,41 @@ files:
615
616
  - bin/commonmeta
616
617
  - commonmeta.gemspec
617
618
  - csl-data.json
619
+ - docs/.gitignore
620
+ - docs/_publish.yml
621
+ - docs/_quarto.yml
622
+ - docs/_site/favicon.ico
623
+ - docs/_site/images/icon.png
624
+ - docs/_site/index.html
625
+ - docs/_site/readers/bibtex_reader.html
626
+ - docs/_site/search.json
627
+ - docs/_site/site_libs/bootstrap/bootstrap-dark.min.css
628
+ - docs/_site/site_libs/bootstrap/bootstrap-icons.css
629
+ - docs/_site/site_libs/bootstrap/bootstrap-icons.woff
630
+ - docs/_site/site_libs/bootstrap/bootstrap.min.css
631
+ - docs/_site/site_libs/bootstrap/bootstrap.min.js
632
+ - docs/_site/site_libs/clipboard/clipboard.min.js
633
+ - docs/_site/site_libs/quarto-html/anchor.min.js
634
+ - docs/_site/site_libs/quarto-html/popper.min.js
635
+ - docs/_site/site_libs/quarto-html/quarto-syntax-highlighting-dark.css
636
+ - docs/_site/site_libs/quarto-html/quarto-syntax-highlighting.css
637
+ - docs/_site/site_libs/quarto-html/quarto.js
638
+ - docs/_site/site_libs/quarto-html/tippy.css
639
+ - docs/_site/site_libs/quarto-html/tippy.umd.min.js
640
+ - docs/_site/site_libs/quarto-nav/headroom.min.js
641
+ - docs/_site/site_libs/quarto-nav/quarto-nav.js
642
+ - docs/_site/site_libs/quarto-search/autocomplete.umd.js
643
+ - docs/_site/site_libs/quarto-search/fuse.min.js
644
+ - docs/_site/site_libs/quarto-search/quarto-search.js
645
+ - docs/_site/utils/doi_utils.html
646
+ - docs/_site/writers/bibtex_writer.html
647
+ - docs/favicon.ico
648
+ - docs/images/icon.png
649
+ - docs/index.qmd
650
+ - docs/readers/bibtex_reader.ipynb
651
+ - docs/theme.scss
652
+ - docs/utils/doi_utils.ipynb
653
+ - docs/writers/bibtex_writer.ipynb
618
654
  - lib/commonmeta.rb
619
655
  - lib/commonmeta/array.rb
620
656
  - lib/commonmeta/author_utils.rb
@@ -791,6 +827,7 @@ files:
791
827
  - spec/fixtures/vcr_cassettes/Commonmeta_CLI/find_from_format_by_id/medra.yml
792
828
  - spec/fixtures/vcr_cassettes/Commonmeta_CLI/find_from_format_by_id/op.yml
793
829
  - spec/fixtures/vcr_cassettes/Commonmeta_CLI/json_feed/json_feed_blog_id.yml
830
+ - spec/fixtures/vcr_cassettes/Commonmeta_CLI/json_feed/json_feed_blog_slug.yml
794
831
  - spec/fixtures/vcr_cassettes/Commonmeta_CLI/json_feed/json_feed_by_blog.yml
795
832
  - spec/fixtures/vcr_cassettes/Commonmeta_CLI/json_feed/json_feed_unregistered.yml
796
833
  - spec/fixtures/vcr_cassettes/Commonmeta_CLI/json_feed/json_feed_updated.yml
@@ -1053,7 +1090,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
1053
1090
  - !ruby/object:Gem::Version
1054
1091
  version: '0'
1055
1092
  requirements: []
1056
- rubygems_version: 3.4.18
1093
+ rubygems_version: 3.4.22
1057
1094
  signing_key:
1058
1095
  specification_version: 4
1059
1096
  summary: Ruby client library for conversion of scholarly metadata