commonmeta-ruby 3.2.13 → 3.2.15

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,220 +1,270 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spec_helper'
3
+ require "spec_helper"
4
4
 
5
5
  describe Commonmeta::Metadata, vcr: true do
6
6
  subject { described_class.new }
7
7
 
8
- context 'get json_feed_item metadata' do
9
- it 'blogger post' do
10
- input = 'https://rogue-scholar.org/api/posts/f3629c86-06e0-42c0-844a-266b03a91ef1'
8
+ context "get json_feed_item metadata" do
9
+ it "blogger post" do
10
+ input = "https://rogue-scholar.org/api/posts/f3629c86-06e0-42c0-844a-266b03a91ef1"
11
11
  subject = described_class.new(input: input)
12
12
  expect(subject.valid?).to be true
13
- expect(subject.id).to eq('https://iphylo.blogspot.com/2023/05/ten-years-and-million-links.html')
14
- expect(subject.url).to eq('https://iphylo.blogspot.com/2023/05/ten-years-and-million-links.html')
15
- expect(subject.alternate_identifiers).to eq([{"alternateIdentifier"=>"f3629c86-06e0-42c0-844a-266b03a91ef1", "alternateIdentifierType"=>"UUID"}])
16
- expect(subject.type).to eq('Article')
13
+ expect(subject.id).to eq("https://iphylo.blogspot.com/2023/05/ten-years-and-million-links.html")
14
+ expect(subject.url).to eq("https://iphylo.blogspot.com/2023/05/ten-years-and-million-links.html")
15
+ expect(subject.alternate_identifiers).to eq([{ "alternateIdentifier" => "f3629c86-06e0-42c0-844a-266b03a91ef1", "alternateIdentifierType" => "UUID" }])
16
+ expect(subject.type).to eq("Article")
17
17
  expect(subject.creators.length).to eq(1)
18
- expect(subject.creators.first).to eq("familyName"=>"Page", "givenName"=>"Roderic", "type"=>"Person")
19
- expect(subject.titles).to eq([{"title"=>"Ten years and a million links"}])
20
- expect(subject.license).to eq('id' => 'CC-BY-4.0',
21
- 'url' => 'https://creativecommons.org/licenses/by/4.0/legalcode')
22
- expect(subject.date).to eq('published' => '2023-05-31')
23
- expect(subject.descriptions.first['description']).to start_with("As trailed on a Twitter thread last week I’ve been working on a manuscript describing the efforts to map taxonomic names to their original descriptions in the taxonomic literature.")
24
- expect(subject.publisher).to eq('name' => 'iPhylo')
25
- expect(subject.subjects).to be_nil
26
- expect(subject.language).to eq('en')
27
- expect(subject.container).to eq("identifier"=>"https://iphylo.blogspot.com/", "identifierType"=>"URL", "title"=>"iPhylo", "type"=>"Periodical")
18
+ expect(subject.creators.first).to eq("familyName" => "Page", "givenName" => "Roderic", "type" => "Person")
19
+ expect(subject.titles).to eq([{ "title" => "Ten years and a million links" }])
20
+ expect(subject.license).to eq("id" => "CC-BY-4.0",
21
+ "url" => "https://creativecommons.org/licenses/by/4.0/legalcode")
22
+ expect(subject.date).to eq("published" => "2023-05-31")
23
+ expect(subject.descriptions.first["description"]).to start_with("As trailed on a Twitter thread last week I’ve been working on a manuscript describing the efforts to map taxonomic names to their original descriptions in the taxonomic literature.")
24
+ expect(subject.publisher).to eq("name" => "iPhylo")
25
+ expect(subject.subjects).to eq([{ "subject" => "Natural sciences" },
26
+ { "schemeUri" => "http://www.oecd.org/science/inno/38235147.pdf",
27
+ "subject" => "FOS: Natural sciences",
28
+ "subjectScheme" => "Fields of Science and Technology (FOS)" }])
29
+ expect(subject.language).to eq("en")
30
+ expect(subject.container).to eq("identifier" => "https://iphylo.blogspot.com/", "identifierType" => "URL", "title" => "iPhylo", "type" => "Periodical")
28
31
  end
29
32
 
30
- it 'ghost post with doi' do
31
- input = 'https://rogue-scholar.org/api/posts/5bb66e92-5cb9-4659-8aca-20e486b695c9'
33
+ it "ghost post with doi" do
34
+ input = "https://rogue-scholar.org/api/posts/5bb66e92-5cb9-4659-8aca-20e486b695c9"
32
35
  subject = described_class.new(input: input)
33
36
  expect(subject.valid?).to be true
34
- expect(subject.id).to eq('https://doi.org/10.53731/4nwxn-frt36')
35
- expect(subject.url).to eq('https://blog.front-matter.io/posts/does-it-compose')
36
- expect(subject.alternate_identifiers).to eq([{"alternateIdentifier"=>"5bb66e92-5cb9-4659-8aca-20e486b695c9", "alternateIdentifierType"=>"UUID"}])
37
- expect(subject.type).to eq('Article')
37
+ expect(subject.id).to eq("https://doi.org/10.53731/4nwxn-frt36")
38
+ expect(subject.url).to eq("https://blog.front-matter.io/posts/does-it-compose")
39
+ expect(subject.alternate_identifiers).to eq([{ "alternateIdentifier" => "5bb66e92-5cb9-4659-8aca-20e486b695c9", "alternateIdentifierType" => "UUID" }])
40
+ expect(subject.type).to eq("Article")
38
41
  expect(subject.creators.length).to eq(1)
39
- expect(subject.creators.first).to eq("id" => "https://orcid.org/0000-0003-1419-2405", "familyName"=>"Fenner", "givenName"=>"Martin", "type"=>"Person")
40
- expect(subject.titles).to eq([{"title"=>"Does it compose?"}])
41
- expect(subject.license).to eq('id' => 'CC-BY-4.0',
42
- 'url' => 'https://creativecommons.org/licenses/by/4.0/legalcode')
43
- expect(subject.date).to eq('published' => '2023-05-16', 'updated' => '2023-05-16')
44
- expect(subject.descriptions.first['description']).to start_with("One question I have increasingly asked myself in the past few years. Meaning Can I run this open source software using Docker containers and a Docker Compose file?")
45
- expect(subject.publisher).to eq('name' => 'Front Matter')
46
- expect(subject.subjects).to eq([{"subject"=>"news"}])
47
- expect(subject.language).to eq('en')
48
- expect(subject.container).to eq("identifier"=>"https://blog.front-matter.io", "identifierType"=>"URL", "title"=>"Front Matter", "type"=>"Periodical")
42
+ expect(subject.creators.first).to eq("id" => "https://orcid.org/0000-0003-1419-2405", "familyName" => "Fenner", "givenName" => "Martin", "type" => "Person")
43
+ expect(subject.titles).to eq([{ "title" => "Does it compose?" }])
44
+ expect(subject.license).to eq("id" => "CC-BY-4.0",
45
+ "url" => "https://creativecommons.org/licenses/by/4.0/legalcode")
46
+ expect(subject.date).to eq("published" => "2023-05-16", "updated" => "2023-05-16")
47
+ expect(subject.descriptions.first["description"]).to start_with("One question I have increasingly asked myself in the past few years. Meaning Can I run this open source software using Docker containers and a Docker Compose file?")
48
+ expect(subject.publisher).to eq("name" => "Front Matter")
49
+ expect(subject.subjects).to eq([{ "subject" => "Engineering and technology" },
50
+ { "schemeUri" => "http://www.oecd.org/science/inno/38235147.pdf",
51
+ "subject" => "FOS: Engineering and technology",
52
+ "subjectScheme" => "Fields of Science and Technology (FOS)" }])
53
+ expect(subject.language).to eq("en")
54
+ expect(subject.container).to eq("identifier" => "https://blog.front-matter.io", "identifierType" => "URL", "title" => "Front Matter", "type" => "Periodical")
49
55
  end
50
56
 
51
- it 'ghost post without doi' do
52
- input = 'https://rogue-scholar.org/api/posts/c3095752-2af0-40a4-a229-3ceb7424bce2'
57
+ it "ghost post without doi" do
58
+ input = "https://rogue-scholar.org/api/posts/c3095752-2af0-40a4-a229-3ceb7424bce2"
53
59
  subject = described_class.new(input: input)
54
60
  expect(subject.valid?).to be true
55
- expect(subject.id).to eq('https://www.ideasurg.pub/residency-visual-abstract')
56
- expect(subject.url).to eq('https://www.ideasurg.pub/residency-visual-abstract')
57
- expect(subject.alternate_identifiers).to eq([{"alternateIdentifier"=>"c3095752-2af0-40a4-a229-3ceb7424bce2", "alternateIdentifierType"=>"UUID"}])
58
- expect(subject.type).to eq('Article')
61
+ expect(subject.id).to eq("https://www.ideasurg.pub/residency-visual-abstract")
62
+ expect(subject.url).to eq("https://www.ideasurg.pub/residency-visual-abstract")
63
+ expect(subject.alternate_identifiers).to eq([{ "alternateIdentifier" => "c3095752-2af0-40a4-a229-3ceb7424bce2", "alternateIdentifierType" => "UUID" }])
64
+ expect(subject.type).to eq("Article")
59
65
  expect(subject.creators.length).to eq(1)
60
- expect(subject.creators.first).to eq("familyName"=>"Sathe", "givenName"=>"Tejas S.", "type"=>"Person")
61
- expect(subject.titles).to eq([{"title"=>"The Residency Visual Abstract"}])
62
- expect(subject.license).to eq('id' => 'CC-BY-4.0',
63
- 'url' => 'https://creativecommons.org/licenses/by/4.0/legalcode')
64
- expect(subject.date).to eq('published' => '2023-04-08')
65
- expect(subject.descriptions.first['description']).to start_with("A graphical, user-friendly tool for programs to highlight important data to prospective applicants")
66
- expect(subject.publisher).to eq('name' => 'I.D.E.A.S.')
67
- expect(subject.subjects).to be_nil
68
- expect(subject.language).to eq('en')
69
- expect(subject.container).to eq("identifier"=>"https://www.ideasurg.pub/", "identifierType"=>"URL", "title"=>"I.D.E.A.S.", "type"=>"Periodical")
66
+ expect(subject.creators.first).to eq("familyName" => "Sathe", "givenName" => "Tejas S.", "type" => "Person")
67
+ expect(subject.titles).to eq([{ "title" => "The Residency Visual Abstract" }])
68
+ expect(subject.license).to eq("id" => "CC-BY-4.0",
69
+ "url" => "https://creativecommons.org/licenses/by/4.0/legalcode")
70
+ expect(subject.date).to eq("published" => "2023-04-08")
71
+ expect(subject.descriptions.first["description"]).to start_with("A graphical, user-friendly tool for programs to highlight important data to prospective applicants")
72
+ expect(subject.publisher).to eq("name" => "I.D.E.A.S.")
73
+ expect(subject.subjects).to eq([{ "subject" => "Medical and health sciences" },
74
+ { "schemeUri" => "http://www.oecd.org/science/inno/38235147.pdf",
75
+ "subject" => "FOS: Medical and health sciences",
76
+ "subjectScheme" => "Fields of Science and Technology (FOS)" }])
77
+ expect(subject.language).to eq("en")
78
+ expect(subject.container).to eq("identifier" => "https://www.ideasurg.pub/", "identifierType" => "URL", "title" => "I.D.E.A.S.", "type" => "Periodical")
70
79
  end
71
80
 
72
- it 'ghost post with author name suffix' do
73
- input = 'https://rogue-scholar.org/api/posts/6179ad80-cc7f-4904-9260-0ecb3c3a90ba'
81
+ it "ghost post with author name suffix" do
82
+ input = "https://rogue-scholar.org/api/posts/6179ad80-cc7f-4904-9260-0ecb3c3a90ba"
74
83
  subject = described_class.new(input: input)
75
84
  expect(subject.valid?).to be true
76
- expect(subject.id).to eq('https://www.ideasurg.pub/academic-powerhouse')
77
- expect(subject.url).to eq('https://www.ideasurg.pub/academic-powerhouse')
78
- expect(subject.alternate_identifiers).to eq([{"alternateIdentifier"=>"6179ad80-cc7f-4904-9260-0ecb3c3a90ba", "alternateIdentifierType"=>"UUID"}])
79
- expect(subject.type).to eq('Article')
85
+ expect(subject.id).to eq("https://www.ideasurg.pub/academic-powerhouse")
86
+ expect(subject.url).to eq("https://www.ideasurg.pub/academic-powerhouse")
87
+ expect(subject.alternate_identifiers).to eq([{ "alternateIdentifier" => "6179ad80-cc7f-4904-9260-0ecb3c3a90ba", "alternateIdentifierType" => "UUID" }])
88
+ expect(subject.type).to eq("Article")
80
89
  expect(subject.creators.length).to eq(1)
81
- expect(subject.creators.first).to eq("familyName"=>"Sathe", "givenName"=>"Tejas S.", "type"=>"Person")
82
- expect(subject.titles).to eq([{"title"=>"How to Build an Academic Powerhouse: Let's Study Who's Doing it"}])
83
- expect(subject.license).to eq('id' => 'CC-BY-4.0',
84
- 'url' => 'https://creativecommons.org/licenses/by/4.0/legalcode')
85
- expect(subject.date).to eq('published' => '2023-06-03')
86
- expect(subject.descriptions.first['description']).to start_with("A Data Exploration with Public Data from the Academic Surgical Congress")
87
- expect(subject.publisher).to eq('name' => 'I.D.E.A.S.')
88
- expect(subject.subjects).to eq([{"subject"=>"pre-print"}])
89
- expect(subject.language).to eq('en')
90
- expect(subject.container).to eq("identifier"=>"https://www.ideasurg.pub/", "identifierType"=>"URL", "title"=>"I.D.E.A.S.", "type"=>"Periodical")
90
+ expect(subject.creators.first).to eq("familyName" => "Sathe", "givenName" => "Tejas S.", "type" => "Person")
91
+ expect(subject.titles).to eq([{ "title" => "How to Build an Academic Powerhouse: Let's Study Who's Doing it" }])
92
+ expect(subject.license).to eq("id" => "CC-BY-4.0",
93
+ "url" => "https://creativecommons.org/licenses/by/4.0/legalcode")
94
+ expect(subject.date).to eq("published" => "2023-06-03")
95
+ expect(subject.descriptions.first["description"]).to start_with("A Data Exploration with Public Data from the Academic Surgical Congress")
96
+ expect(subject.publisher).to eq("name" => "I.D.E.A.S.")
97
+ expect(subject.subjects).to eq([{ "subject" => "Medical and health sciences" },
98
+ { "schemeUri" => "http://www.oecd.org/science/inno/38235147.pdf",
99
+ "subject" => "FOS: Medical and health sciences",
100
+ "subjectScheme" => "Fields of Science and Technology (FOS)" }])
101
+ expect(subject.language).to eq("en")
102
+ expect(subject.container).to eq("identifier" => "https://www.ideasurg.pub/", "identifierType" => "URL", "title" => "I.D.E.A.S.", "type" => "Periodical")
91
103
  expect(subject.references).to be_nil
92
104
  end
93
105
 
94
- it 'syldavia gazette post with references' do
95
- input = 'https://rogue-scholar.org/api/posts/0022b9ef-525a-4a79-81ad-13411697f58a'
106
+ it "syldavia gazette post with references" do
107
+ input = "https://rogue-scholar.org/api/posts/0022b9ef-525a-4a79-81ad-13411697f58a"
96
108
  subject = described_class.new(input: input)
97
109
  expect(subject.valid?).to be true
98
- expect(subject.id).to eq('https://doi.org/10.53731/ffbx660-083tnag')
99
- expect(subject.url).to eq('https://syldavia-gazette.org/guinea-worms-chatgpt-neanderthals')
100
- expect(subject.alternate_identifiers).to eq([{"alternateIdentifier"=>"0022b9ef-525a-4a79-81ad-13411697f58a", "alternateIdentifierType"=>"UUID"}])
101
- expect(subject.type).to eq('Article')
110
+ expect(subject.id).to eq("https://doi.org/10.53731/ffbx660-083tnag")
111
+ expect(subject.url).to eq("https://syldavia-gazette.org/guinea-worms-chatgpt-neanderthals")
112
+ expect(subject.alternate_identifiers).to eq([{ "alternateIdentifier" => "0022b9ef-525a-4a79-81ad-13411697f58a", "alternateIdentifierType" => "UUID" }])
113
+ expect(subject.type).to eq("Article")
102
114
  expect(subject.creators.length).to eq(1)
103
- expect(subject.creators.first).to eq("familyName"=>"Fenner", "givenName"=>"Martin", "id"=>"https://orcid.org/0000-0003-1419-2405", "type"=>"Person")
104
- expect(subject.titles).to eq([{"title"=>"Guinea Worms, ChatGPT, Neanderthals, Plagiarism, Tidyverse"}])
105
- expect(subject.license).to eq('id' => 'CC-BY-4.0',
106
- 'url' => 'https://creativecommons.org/licenses/by/4.0/legalcode')
107
- expect(subject.date).to eq('published' => '2023-02-01', 'updated' => '2023-04-13')
108
- expect(subject.descriptions.first['description']).to start_with("Guinea worm disease reaches all-time low: only 13* human cases reported in 2022")
109
- expect(subject.publisher).to eq('name' => 'Syldavia Gazette')
110
- expect(subject.subjects).to be_nil
111
- expect(subject.language).to eq('en')
112
- expect(subject.container).to eq("identifier"=>"https://syldavia-gazette.org", "identifierType"=>"URL", "title"=>"Syldavia Gazette", "type"=>"Periodical")
115
+ expect(subject.creators.first).to eq("familyName" => "Fenner", "givenName" => "Martin", "id" => "https://orcid.org/0000-0003-1419-2405", "type" => "Person")
116
+ expect(subject.titles).to eq([{ "title" => "Guinea Worms, ChatGPT, Neanderthals, Plagiarism, Tidyverse" }])
117
+ expect(subject.license).to eq("id" => "CC-BY-4.0",
118
+ "url" => "https://creativecommons.org/licenses/by/4.0/legalcode")
119
+ expect(subject.date).to eq("published" => "2023-02-01", "updated" => "2023-04-13")
120
+ expect(subject.descriptions.first["description"]).to start_with("Guinea worm disease reaches all-time low: only 13* human cases reported in 2022")
121
+ expect(subject.publisher).to eq("name" => "Syldavia Gazette")
122
+ expect(subject.subjects).to eq([{ "subject" => "Humanities" }, { "schemeUri" => "http://www.oecd.org/science/inno/38235147.pdf", "subject" => "FOS: Humanities", "subjectScheme" => "Fields of Science and Technology (FOS)" }])
123
+ expect(subject.language).to eq("en")
124
+ expect(subject.container).to eq("identifier" => "https://syldavia-gazette.org", "identifierType" => "URL", "title" => "Syldavia Gazette", "type" => "Periodical")
113
125
  expect(subject.references.length).to eq(5)
114
- expect(subject.references.first).to eq("key"=>"ref1", "url"=>"https://cartercenter.org/news/pr/2023/2022-guinea-worm-worldwide-cases-announcement.html")
126
+ expect(subject.references.first).to eq("key" => "ref1", "url" => "https://cartercenter.org/news/pr/2023/2022-guinea-worm-worldwide-cases-announcement.html")
115
127
  end
116
128
 
117
- it 'wordpress post' do
118
- input = 'https://rogue-scholar.org/api/posts/1c578558-1324-4493-b8af-84c49eabc52f'
129
+ it "wordpress post" do
130
+ input = "https://rogue-scholar.org/api/posts/1c578558-1324-4493-b8af-84c49eabc52f"
119
131
  subject = described_class.new(input: input)
120
132
  expect(subject.valid?).to be true
121
- expect(subject.id).to eq('http://wisspub.net/?p=20455')
122
- expect(subject.url).to eq('https://wisspub.net/2023/05/23/eu-mitgliedstaaten-betonen-die-rolle-von-wissenschaftsgeleiteten-open-access-modellen-jenseits-von-apcs')
123
- expect(subject.alternate_identifiers).to eq([{"alternateIdentifier"=>"1c578558-1324-4493-b8af-84c49eabc52f", "alternateIdentifierType"=>"UUID"}])
124
- expect(subject.type).to eq('Article')
133
+ expect(subject.id).to eq("http://wisspub.net/?p=20455")
134
+ expect(subject.url).to eq("https://wisspub.net/2023/05/23/eu-mitgliedstaaten-betonen-die-rolle-von-wissenschaftsgeleiteten-open-access-modellen-jenseits-von-apcs")
135
+ expect(subject.alternate_identifiers).to eq([{ "alternateIdentifier" => "1c578558-1324-4493-b8af-84c49eabc52f", "alternateIdentifierType" => "UUID" }])
136
+ expect(subject.type).to eq("Article")
125
137
  expect(subject.creators.length).to eq(1)
126
- expect(subject.creators.first).to eq("familyName"=>"Pampel", "givenName"=>"Heinz", "id"=>"https://orcid.org/0000-0003-3334-2771", "type"=>"Person")
127
- expect(subject.titles).to eq([{"title"=>"EU-Mitgliedstaaten betonen die Rolle von wissenschaftsgeleiteten Open-Access-Modellen jenseits von APCs"}])
128
- expect(subject.license).to eq('id' => 'CC-BY-4.0',
129
- 'url' => 'https://creativecommons.org/licenses/by/4.0/legalcode')
130
- expect(subject.date).to eq('published' => '2023-05-23', 'updated' => '2023-05-23')
131
- expect(subject.descriptions.first['description']).to start_with("Die EU-Wissenschaftsministerien haben sich auf ihrer heutigen Sitzung in Brüssel unter dem Titel “Council conclusions on high-quality, transparent, open, trustworthy and equitable scholarly publishing”")
132
- expect(subject.publisher).to eq('name' => 'wisspub.net')
133
- expect(subject.subjects).to eq([{"subject"=>"open access"}, {"subject"=>"open access transformation"}, {"subject"=>"open science"}, {"subject"=>"eu"}])
134
- expect(subject.language).to eq('de')
135
- expect(subject.container).to eq("identifier"=>"https://wisspub.net", "identifierType"=>"URL", "title"=>"wisspub.net", "type"=>"Periodical")
138
+ expect(subject.creators.first).to eq("familyName" => "Pampel", "givenName" => "Heinz", "id" => "https://orcid.org/0000-0003-3334-2771", "type" => "Person")
139
+ expect(subject.titles).to eq([{ "title" => "EU-Mitgliedstaaten betonen die Rolle von wissenschaftsgeleiteten Open-Access-Modellen jenseits von APCs" }])
140
+ expect(subject.license).to eq("id" => "CC-BY-4.0",
141
+ "url" => "https://creativecommons.org/licenses/by/4.0/legalcode")
142
+ expect(subject.date).to eq("published" => "2023-05-23", "updated" => "2023-05-23")
143
+ expect(subject.descriptions.first["description"]).to start_with("Die EU-Wissenschaftsministerien haben sich auf ihrer heutigen Sitzung in Brüssel unter dem Titel “Council conclusions on high-quality, transparent, open, trustworthy and equitable scholarly publishing”")
144
+ expect(subject.publisher).to eq("name" => "wisspub.net")
145
+ expect(subject.subjects).to eq([{ "subject" => "Engineering and technology" },
146
+ { "schemeUri" => "http://www.oecd.org/science/inno/38235147.pdf",
147
+ "subject" => "FOS: Engineering and technology",
148
+ "subjectScheme" => "Fields of Science and Technology (FOS)" }])
149
+ expect(subject.language).to eq("de")
150
+ expect(subject.container).to eq("identifier" => "https://wisspub.net", "identifierType" => "URL", "title" => "wisspub.net", "type" => "Periodical")
136
151
  end
137
152
 
138
- it 'wordpress post with references' do
139
- input = 'https://rogue-scholar.org/api/posts/4e4bf150-751f-4245-b4ca-fe69e3c3bb24'
153
+ it "wordpress post with references" do
154
+ input = "https://rogue-scholar.org/api/posts/4e4bf150-751f-4245-b4ca-fe69e3c3bb24"
140
155
  subject = described_class.new(input: input)
141
156
  expect(subject.valid?).to be true
142
- expect(subject.id).to eq('http://svpow.com/?p=20992')
143
- expect(subject.url).to eq('https://svpow.com/2023/06/09/new-paper-curtice-et-al-2023-on-the-first-haplocanthosaurus-from-dry-mesa')
144
- expect(subject.type).to eq('Article')
157
+ expect(subject.id).to eq("http://svpow.com/?p=20992")
158
+ expect(subject.url).to eq("https://svpow.com/2023/06/09/new-paper-curtice-et-al-2023-on-the-first-haplocanthosaurus-from-dry-mesa")
159
+ expect(subject.type).to eq("Article")
145
160
  expect(subject.creators.length).to eq(1)
146
- expect(subject.creators.first).to eq("familyName"=>"Wedel", "givenName"=>"Matt", "type"=>"Person")
147
- expect(subject.titles).to eq([{"title"=>"New paper: Curtice et al. (2023) on the first Haplocanthosaurus from Dry Mesa"}])
148
- expect(subject.license).to eq('id' => 'CC-BY-4.0',
149
- 'url' => 'https://creativecommons.org/licenses/by/4.0/legalcode')
150
- expect(subject.date).to eq('published' => '2023-06-09', 'updated' => '2023-06-09')
151
- expect(subject.descriptions.first['description']).to start_with("Haplocanthosaurus tibiae and dorsal vertebrae.")
152
- expect(subject.publisher).to eq('name' => 'Sauropod Vertebra Picture of the Week')
153
- expect(subject.subjects).to eq([{"subject"=>"#mte14"}, {"subject"=>"barosaurus"}, {"subject"=>"cervical"}, {"subject"=>"conferences"}, {"subject"=>"diplodocids"}])
154
- expect(subject.language).to eq('en')
155
- expect(subject.container).to eq("identifier"=>"https://svpow.com", "identifierType"=>"URL", "title"=>"Sauropod Vertebra Picture of the Week", "type"=>"Periodical")
161
+ expect(subject.creators.first).to eq("familyName" => "Wedel", "givenName" => "Matt", "type" => "Person")
162
+ expect(subject.titles).to eq([{ "title" => "New paper: Curtice et al. (2023) on the first Haplocanthosaurus from Dry Mesa" }])
163
+ expect(subject.license).to eq("id" => "CC-BY-4.0",
164
+ "url" => "https://creativecommons.org/licenses/by/4.0/legalcode")
165
+ expect(subject.date).to eq("published" => "2023-06-09", "updated" => "2023-06-09")
166
+ expect(subject.descriptions.first["description"]).to start_with("Haplocanthosaurus tibiae and dorsal vertebrae.")
167
+ expect(subject.publisher).to eq("name" => "Sauropod Vertebra Picture of the Week")
168
+ expect(subject.subjects).to eq([{ "subject" => "Natural sciences" },
169
+ { "schemeUri" => "http://www.oecd.org/science/inno/38235147.pdf",
170
+ "subject" => "FOS: Natural sciences",
171
+ "subjectScheme" => "Fields of Science and Technology (FOS)" }])
172
+ expect(subject.language).to eq("en")
173
+ expect(subject.container).to eq("identifier" => "https://svpow.com", "identifierType" => "URL", "title" => "Sauropod Vertebra Picture of the Week", "type" => "Periodical")
156
174
  expect(subject.references.length).to eq(3)
157
- 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")
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")
158
176
  end
159
177
 
160
- it 'upstream post with references' do
161
- input = 'https://rogue-scholar.org/api/posts/954f8138-0ecd-4090-87c5-cef1297f1470'
178
+ it "upstream post with references" do
179
+ input = "https://rogue-scholar.org/api/posts/954f8138-0ecd-4090-87c5-cef1297f1470"
162
180
  subject = described_class.new(input: input)
163
181
  expect(subject.valid?).to be true
164
- expect(subject.id).to eq('https://doi.org/10.54900/zwm7q-vet94')
165
- expect(subject.url).to eq('https://upstream.force11.org/the-research-software-alliance-resa')
166
- expect(subject.alternate_identifiers).to eq([{"alternateIdentifier"=>"954f8138-0ecd-4090-87c5-cef1297f1470", "alternateIdentifierType"=>"UUID"}])
167
- expect(subject.type).to eq('Article')
182
+ expect(subject.id).to eq("https://doi.org/10.54900/zwm7q-vet94")
183
+ expect(subject.url).to eq("https://upstream.force11.org/the-research-software-alliance-resa")
184
+ expect(subject.alternate_identifiers).to eq([{ "alternateIdentifier" => "954f8138-0ecd-4090-87c5-cef1297f1470", "alternateIdentifierType" => "UUID" }])
185
+ expect(subject.type).to eq("Article")
168
186
  expect(subject.creators.length).to eq(2)
169
- expect(subject.creators.first).to eq("familyName"=>"Katz", "givenName"=>"Daniel S.", "id"=>"https://orcid.org/0000-0001-5934-7525", "type"=>"Person")
170
- expect(subject.titles).to eq([{"title"=>"The Research Software Alliance (ReSA)"}])
171
- expect(subject.license).to eq('id' => 'CC-BY-4.0',
172
- 'url' => 'https://creativecommons.org/licenses/by/4.0/legalcode')
173
- expect(subject.date).to eq('published' => '2023-04-18', 'updated' => '2023-04-18')
174
- expect(subject.descriptions.first['description']).to start_with("Research software is a key part of most research today. As University of Manchester Professor Carole Goble has said, \"software is the ubiquitous instrument of science.\"")
175
- expect(subject.publisher).to eq('name' => 'Upstream')
176
- expect(subject.subjects).to eq([{"subject"=>"news"}])
177
- expect(subject.language).to eq('en')
178
- expect(subject.container).to eq("identifier"=>"https://upstream.force11.org", "identifierType"=>"URL", "title"=>"Upstream", "type"=>"Periodical")
187
+ expect(subject.creators.first).to eq("familyName" => "Katz", "givenName" => "Daniel S.", "id" => "https://orcid.org/0000-0001-5934-7525", "type" => "Person")
188
+ expect(subject.titles).to eq([{ "title" => "The Research Software Alliance (ReSA)" }])
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-18", "updated" => "2023-04-18")
192
+ expect(subject.descriptions.first["description"]).to start_with("Research software is a key part of most research today. As University of Manchester Professor Carole Goble has said, \"software is the ubiquitous instrument of science.\"")
193
+ expect(subject.publisher).to eq("name" => "Upstream")
194
+ expect(subject.subjects).to eq([{ "subject" => "Humanities" },
195
+ { "schemeUri" => "http://www.oecd.org/science/inno/38235147.pdf",
196
+ "subject" => "FOS: Humanities",
197
+ "subjectScheme" => "Fields of Science and Technology (FOS)" }])
198
+ expect(subject.language).to eq("en")
199
+ expect(subject.container).to eq("identifier" => "https://upstream.force11.org", "identifierType" => "URL", "title" => "Upstream", "type" => "Periodical")
179
200
  expect(subject.references.length).to eq(11)
180
- expect(subject.references.first).to eq("key"=>"ref1", "url"=>"https://software.ac.uk/blog/2014-12-04-its-impossible-conduct-research-without-software-say-7-out-10-uk-researchers")
201
+ expect(subject.references.first).to eq("key" => "ref1", "url" => "https://software.ac.uk/blog/2014-12-04-its-impossible-conduct-research-without-software-say-7-out-10-uk-researchers")
181
202
  end
182
203
 
183
- it 'jekyll post' do
184
- input = 'https://rogue-scholar.org/api/posts/efdacb04-bcec-49d7-b689-ab3eab0634bf'
204
+ it "jekyll post" do
205
+ input = "https://rogue-scholar.org/api/posts/efdacb04-bcec-49d7-b689-ab3eab0634bf"
185
206
  subject = described_class.new(input: input)
186
207
  expect(subject.valid?).to be true
187
- expect(subject.id).to eq('https://citationstyles.org/2020/07/11/seeking-public-comment-on-CSL-1-0-2')
188
- expect(subject.url).to eq('https://citationstyles.org/2020/07/11/seeking-public-comment-on-CSL-1-0-2')
189
- expect(subject.alternate_identifiers).to eq([{"alternateIdentifier"=>"efdacb04-bcec-49d7-b689-ab3eab0634bf", "alternateIdentifierType"=>"UUID"}])
190
- expect(subject.type).to eq('Article')
208
+ expect(subject.id).to eq("https://citationstyles.org/2020/07/11/seeking-public-comment-on-CSL-1-0-2")
209
+ expect(subject.url).to eq("https://citationstyles.org/2020/07/11/seeking-public-comment-on-CSL-1-0-2")
210
+ expect(subject.alternate_identifiers).to eq([{ "alternateIdentifier" => "efdacb04-bcec-49d7-b689-ab3eab0634bf", "alternateIdentifierType" => "UUID" }])
211
+ expect(subject.type).to eq("Article")
191
212
  expect(subject.creators.length).to eq(1)
192
- expect(subject.creators.first).to eq("familyName"=>"Karcher", "givenName"=>"Sebastian", "type"=>"Person")
193
- expect(subject.titles).to eq([{"title"=>"Seeking Public Comment on CSL 1.0.2 Release"}])
194
- expect(subject.license).to eq('id' => 'CC-BY-4.0',
195
- 'url' => 'https://creativecommons.org/licenses/by/4.0/legalcode')
196
- expect(subject.date).to eq('published' => '2020-07-11', 'updated' => '2020-07-11')
197
- expect(subject.descriptions.first['description']).to start_with("Over the past few months, Citation Style Language developers have worked to address a backlog of feature requests. This work will be reflected in two upcoming releases.")
198
- expect(subject.publisher).to eq('name' => 'Citation Style Language')
199
- expect(subject.subjects).to be_nil
200
- expect(subject.language).to eq('en')
201
- expect(subject.container).to eq("identifier"=>"https://citationstyles.org/", "identifierType"=>"URL", "title"=>"Citation Style Language", "type"=>"Periodical")
213
+ expect(subject.creators.first).to eq("familyName" => "Karcher", "givenName" => "Sebastian", "type" => "Person")
214
+ expect(subject.titles).to eq([{ "title" => "Seeking Public Comment on CSL 1.0.2 Release" }])
215
+ expect(subject.license).to eq("id" => "CC-BY-4.0",
216
+ "url" => "https://creativecommons.org/licenses/by/4.0/legalcode")
217
+ expect(subject.date).to eq("published" => "2020-07-11", "updated" => "2020-07-11")
218
+ expect(subject.descriptions.first["description"]).to start_with("Over the past few months, Citation Style Language developers have worked to address a backlog of feature requests. This work will be reflected in two upcoming releases.")
219
+ expect(subject.publisher).to eq("name" => "Citation Style Language")
220
+ expect(subject.subjects).to eq([{ "subject" => "Engineering and technology" },
221
+ { "schemeUri" => "http://www.oecd.org/science/inno/38235147.pdf",
222
+ "subject" => "FOS: Engineering and technology",
223
+ "subjectScheme" => "Fields of Science and Technology (FOS)" }])
224
+ expect(subject.language).to eq("en")
225
+ expect(subject.container).to eq("identifier" => "https://citationstyles.org/", "identifierType" => "URL", "title" => "Citation Style Language", "type" => "Periodical")
226
+ end
227
+
228
+ it "substack post with broken reference" do
229
+ input = "https://rogue-scholar.org/api/posts/2b105b29-acbc-4eae-9ff1-368803f36a4d"
230
+ subject = described_class.new(input: input)
231
+ expect(subject.valid?).to be true
232
+ expect(subject.id).to eq("https://doi.org/10.59350/bbcsr-r4b59")
233
+ expect(subject.url).to eq("https://markrubin.substack.com/p/the-preregistration-prescriptiveness")
234
+ expect(subject.alternate_identifiers).to eq([{ "alternateIdentifier" => "2b105b29-acbc-4eae-9ff1-368803f36a4d", "alternateIdentifierType" => "UUID" }])
235
+ expect(subject.type).to eq("Article")
236
+ expect(subject.creators.length).to eq(1)
237
+ expect(subject.creators.first).to eq("familyName" => "Rubin", "givenName" => "Mark", "type" => "Person")
238
+ expect(subject.titles).to eq([{ "title" => "The Preregistration Prescriptiveness Trade-Off and Unknown Unknowns in Science" }])
239
+ expect(subject.license).to eq("id" => "CC-BY-4.0",
240
+ "url" => "https://creativecommons.org/licenses/by/4.0/legalcode")
241
+ expect(subject.date).to eq("published" => "2023-06-06")
242
+ expect(subject.descriptions.first["description"]).to start_with("Comments on Van Drimmelen (2023)")
243
+ expect(subject.publisher).to eq("name" => "Critical Metascience")
244
+ expect(subject.subjects).to eq([{ "subject" => "Social sciences" },
245
+ { "schemeUri" => "http://www.oecd.org/science/inno/38235147.pdf",
246
+ "subject" => "FOS: Social sciences",
247
+ "subjectScheme" => "Fields of Science and Technology (FOS)" }])
248
+ expect(subject.language).to eq("en")
249
+ expect(subject.container).to eq("identifier" => "https://markrubin.substack.com", "identifierType" => "URL", "title" => "Critical Metascience", "type" => "Periodical")
250
+ expect(subject.references.length).to eq(16)
251
+ expect(subject.references.first).to eq("key" => "ref1", "doi" => "https://doi.org/10.3386/w27250")
202
252
  end
203
253
  end
204
254
 
205
- context 'get json_feed' do
206
- it 'unregistered posts' do
255
+ context "get json_feed" do
256
+ it "unregistered posts" do
207
257
  response = subject.get_json_feed_unregistered
208
258
  expect(response).to eq("ca2a7df4-f3b9-487c-82e9-27f54de75ea8")
209
259
  end
210
260
 
211
- it 'not indexed posts' do
212
- response = subject.get_json_feed_not_indexed('2023-01-01')
261
+ it "not indexed posts" do
262
+ response = subject.get_json_feed_not_indexed("2023-01-01")
213
263
  expect(response).to eq("ab58e412-06eb-42b7-b81a-d340825b9d48")
214
264
  end
215
265
 
216
- it 'by blog_id' do
217
- response = subject.get_json_feed_by_blog('tyfqw20')
266
+ it "by blog_id" do
267
+ response = subject.get_json_feed_by_blog("tyfqw20")
218
268
  expect(response).to eq("3e1278f6-e7c0-43e1-bb54-6829e1344c0d")
219
269
  end
220
270
  end