commonmeta-ruby 3.3.7 → 3.3.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a142d529ddbead4512d9a66531983b5dc8849631ccb28a0cc12b9801af7c7e6e
4
- data.tar.gz: 77b47a7afa4e7aa2b0cb82d6dad99da9b01cfaedb0ee6aba90d03187aa8691f5
3
+ metadata.gz: e717e42ba9e8264cfc3ebb4bcb774c58b7f003afad4ffea7da385cd66e84eb27
4
+ data.tar.gz: bee1fe28c91acb00e3b5afae8b4305d6036dd4924f554b44d49145ac388fcf69
5
5
  SHA512:
6
- metadata.gz: 0a672da90701e5d53ba7a91ac095e8577dac584150aa4ca58c095e757d47a9fd473638a662a5402c334e1399574d9596a7dc0d2bb2354f08f4c25cd73992c7d2
7
- data.tar.gz: 69c7a71c0dd770cd0685e792e639cc4d78f02196ce0dbad596107257557b1d4ff5e18e8caefc956d72fabbb45071432004c0653550eb94df6769ef2b8e21e5b6
6
+ metadata.gz: 1cc77541969f79992f5e8b6f0677939e64397ffbedfbb75c40d2d534c2a64ad2f8a29b86df1570d76cdd0245f2f80a01e422052c065ca5e45085b85fb9dda7ec
7
+ data.tar.gz: 1389f97cf9c919eda5a384a247b7cddb142b0bfb50ce4c7bb77d83f8c1da6812a20c3277a1a0860d42b4952c63c8862d29c6061e0c11cf2a1436ea0424cd3fc9
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- commonmeta-ruby (3.3.7)
4
+ commonmeta-ruby (3.3.8)
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)
@@ -49,7 +49,11 @@ module Commonmeta
49
49
  # DataCite metadata
50
50
  type = type[0..-3] if type.is_a?(String) && type.end_with?('al')
51
51
 
52
- if type.blank? && id.is_a?(String) && URI.parse(id).host == 'ror.org'
52
+ if type.blank? && name.blank? && id.is_a?(String) && URI.parse(id).host == 'ror.org'
53
+ type = 'Person'
54
+ author['affiliation'] = { 'affiliationIdentifier' => id }
55
+ id = nil
56
+ elsif type.blank? && id.is_a?(String) && URI.parse(id).host == 'ror.org'
53
57
  type = 'Organization'
54
58
  elsif type.blank? && author['type'] == 'Organization'
55
59
  type = 'Organization'
@@ -65,7 +69,7 @@ module Commonmeta
65
69
  contributor_type = parse_attributes(author.fetch('contributorType', nil))
66
70
 
67
71
  # split name for type Person into given/family name if not already provided
68
- if type == 'Person' && given_name.blank? && family_name.blank?
72
+ if type == 'Person' && name.present? && given_name.blank? && family_name.blank?
69
73
  Namae.options[:include_particle_in_family] = true
70
74
  names = Namae.parse(name)
71
75
  parsed_name = names.first
@@ -181,9 +185,7 @@ module Commonmeta
181
185
  name = (a['name'] || a['__content__']).to_s.squish.presence
182
186
  end
183
187
 
184
- next unless name.present?
185
-
186
- { 'id' => affiliation_identifier, 'name' => name }.compact
188
+ { 'id' => affiliation_identifier, 'name' => name }.compact.presence
187
189
  end.compact.presence
188
190
  end
189
191
 
@@ -95,21 +95,22 @@ module Commonmeta
95
95
  def insert_crossref_creators(xml)
96
96
  xml.contributors do
97
97
  Array.wrap(creators).each_with_index do |creator, index|
98
- if creator["type"] == "Organization"
99
- xml.organization("contributor_role" => "author",
100
- "sequence" => index.zero? ? "first" : "additional") do
101
- insert_crossref_organization(xml, creator)
102
- end
98
+ if creator["type"] == "Organization" && creator["name"].present?
99
+ xml.organization(creator["name"], "contributor_role" => "author",
100
+ "sequence" => index.zero? ? "first" : "additional")
103
101
  elsif creator["givenName"].present? || creator["familyName"].present?
104
102
  xml.person_name("contributor_role" => "author",
105
103
  "sequence" => index.zero? ? "first" : "additional") do
106
104
  insert_crossref_person(xml, creator)
107
105
  end
108
- else
109
- xml.unknown("contributor_role" => "author",
110
- "sequence" => index.zero? ? "first" : "additional") do
106
+ elsif creator["affiliation"].present?
107
+ xml.anonymous("contributor_role" => "author",
108
+ "sequence" => index.zero? ? "first" : "additional") do
111
109
  insert_crossref_anonymous(xml, creator)
112
110
  end
111
+ else
112
+ xml.anonymous("contributor_role" => "author",
113
+ "sequence" => index.zero? ? "first" : "additional")
113
114
  end
114
115
  end
115
116
  end
@@ -125,36 +126,18 @@ module Commonmeta
125
126
  xml.affiliations do
126
127
  xml.institution do
127
128
  xml.institution_name(creator.dig("affiliation", 0, "name")) if creator.dig("affiliation", 0, "name").present?
128
- xml.institution_id(creator.dig("affiliation", 0, "affiliationIdentifier"), "type" => creator.dig("affiliation", 0, "affiliationIdentifierScheme")) if creator.dig("affiliation", 0, "affiliationIdentifier").present?
129
- end
130
- end
131
- end
132
- end
133
-
134
- def insert_crossref_organization(xml, creator)
135
- xml.name(creator["name"]) if creator["name"].present?
136
- if creator["affiliation"].present?
137
- xml.affiliations do
138
- xml.institution do
139
- xml.institution_name(creator.dig("affiliation", 0, "name")) if creator.dig("affiliation", 0, "name").present?
140
- xml.institution_id(creator.dig("affiliation", 0, "affiliationIdentifier"), "type" => creator.dig("affiliation", 0, "affiliationIdentifierScheme")) if creator.dig("affiliation", 0, "affiliationIdentifier").present?
129
+ xml.institution_id(creator.dig("affiliation", 0, "id"), 'type' => "ror") if creator.dig("affiliation", 0, "id").present?
141
130
  end
142
131
  end
143
132
  end
144
133
  end
145
134
 
146
135
  def insert_crossref_anonymous(xml, creator)
147
- if person["affiliation"].present?
148
- xml.anonymous do
149
- xml.affiliations do
150
- xml.institution do
151
- xml.institution_name(creator.dig("affiliation", 0, "name")) if creator.dig("affiliation", 0, "name").present?
152
- xml.institution_id(creator.dig("affiliation", 0, "affiliationIdentifier"), "type" => creator.dig("affiliation", 0, "affiliationIdentifierScheme")) if creator.dig("affiliation", 0, "affiliationIdentifier").present?
153
- end
154
- end
136
+ xml.affiliations do
137
+ xml.institution do
138
+ xml.institution_name(creator.dig("affiliation", 0, "name")) if creator.dig("affiliation", 0, "name").present?
139
+ xml.institution_id(creator.dig("affiliation", 0, "id"), 'type' => "ror") if creator.dig("affiliation", 0, "id").present?
155
140
  end
156
- else
157
- xml.anonymous
158
141
  end
159
142
  end
160
143
 
@@ -5,7 +5,7 @@ require "pathname"
5
5
 
6
6
  module Commonmeta
7
7
  module SchemaUtils
8
- COMMONMETA = File.read(File.expand_path("../../resources/commonmeta_v0.9.1.json",
8
+ COMMONMETA = File.read(File.expand_path("../../resources/commonmeta_v0.9.2.json",
9
9
  __dir__))
10
10
 
11
11
  def json_schema_errors
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Commonmeta
4
- VERSION = '3.3.7'
4
+ VERSION = '3.3.8'
5
5
  end
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
- "$id": "https://commonmeta.org/commonmeta_v0.9.1.json",
4
- "title": "Commonmeta v0.9.1",
3
+ "$id": "https://commonmeta.org/commonmeta_v0.9.2.json",
4
+ "title": "Commonmeta v0.9.2",
5
5
  "description": "JSON representation of the Commonmeta schema.",
6
6
  "additionalProperties": false,
7
7
  "definitions": {
@@ -13,7 +13,14 @@
13
13
  "id": { "type": "string", "format": "uri" },
14
14
  "name": { "type": "string" }
15
15
  },
16
- "required": ["name"]
16
+ "anyOf": [
17
+ {
18
+ "required": ["id"]
19
+ },
20
+ {
21
+ "required": ["name"]
22
+ }
23
+ ]
17
24
  },
18
25
  "uniqueItems": true
19
26
  },
@@ -78,7 +85,7 @@
78
85
  "description": "The additional type of the resource.",
79
86
  "type": "string"
80
87
  },
81
-
88
+
82
89
  "url": {
83
90
  "description": "The URL of the resource.",
84
91
  "type": "string",
@@ -168,7 +175,14 @@
168
175
  "type": {
169
176
  "description": "The type of the container.",
170
177
  "type": "string",
171
- "enum": ["Book", "BookSeries", "Journal", "Periodical", "ProceedingsSeries", "Series"]
178
+ "enum": [
179
+ "Book",
180
+ "BookSeries",
181
+ "Journal",
182
+ "Periodical",
183
+ "ProceedingsSeries",
184
+ "Series"
185
+ ]
172
186
  },
173
187
  "title": {
174
188
  "description": "The title of the container.",
@@ -1,181 +1,222 @@
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
  let(:subject) do
7
7
  described_class.new
8
8
  end
9
9
 
10
- context 'is_personal_name?' do
11
- it 'has id' do
12
- author = { 'id' => 'http://orcid.org/0000-0003-1419-2405', 'givenName' => 'Martin', 'familyName' => 'Fenner', 'name' => 'Martin Fenner' }
13
- expect(subject.is_personal_name?(name: author['name'])).to be true
10
+ context "is_personal_name?" do
11
+ it "has id" do
12
+ author = { "id" => "http://orcid.org/0000-0003-1419-2405", "givenName" => "Martin", "familyName" => "Fenner", "name" => "Martin Fenner" }
13
+ expect(subject.is_personal_name?(name: author["name"])).to be true
14
14
  end
15
15
 
16
- it 'has orcid id' do
17
- author = { 'creatorName' => 'Fenner, Martin', 'givenName' => 'Martin', 'familyName' => 'Fenner',
18
- 'nameIdentifier' => { 'schemeURI' => 'http://orcid.org/', 'nameIdentifierScheme' => 'ORCID', '__content__' => '0000-0003-1419-2405' } }
19
- expect(subject.is_personal_name?(name: author['creatorName'])).to be true
16
+ it "has orcid id" do
17
+ author = { "creatorName" => "Fenner, Martin", "givenName" => "Martin", "familyName" => "Fenner",
18
+ "nameIdentifier" => { "schemeURI" => "http://orcid.org/", "nameIdentifierScheme" => "ORCID", "__content__" => "0000-0003-1419-2405" } }
19
+ expect(subject.is_personal_name?(name: author["creatorName"])).to be true
20
20
  end
21
21
 
22
- it 'has family name' do
23
- author = { 'givenName' => 'Martin', 'familyName' => 'Fenner', 'name' => 'Martin Fenner' }
24
- expect(subject.is_personal_name?(name: author['name'])).to be true
22
+ it "has family name" do
23
+ author = { "givenName" => "Martin", "familyName" => "Fenner", "name" => "Martin Fenner" }
24
+ expect(subject.is_personal_name?(name: author["name"])).to be true
25
25
  end
26
26
 
27
- it 'has comma' do
28
- author = { 'name' => 'Fenner, Martin' }
29
- expect(subject.is_personal_name?(name: author['name'])).to be true
27
+ it "has comma" do
28
+ author = { "name" => "Fenner, Martin" }
29
+ expect(subject.is_personal_name?(name: author["name"])).to be true
30
30
  end
31
31
 
32
- it 'has known given name' do
33
- author = { 'name' => 'Martin Fenner' }
34
- expect(subject.is_personal_name?(name: author['name'])).to be true
32
+ it "has known given name" do
33
+ author = { "name" => "Martin Fenner" }
34
+ expect(subject.is_personal_name?(name: author["name"])).to be true
35
35
  end
36
36
 
37
- it 'has unknown given name' do
38
- author = { 'name' => 'Rintze Zelle' }
39
- expect(subject.is_personal_name?(name: author['name'])).to be true
37
+ it "has unknown given name" do
38
+ author = { "name" => "Rintze Zelle" }
39
+ expect(subject.is_personal_name?(name: author["name"])).to be true
40
40
  end
41
41
 
42
- it 'has middle initial' do
43
- author = { 'name' => 'Martin H. Fenner' }
44
- expect(subject.is_personal_name?(name: author['name'])).to be true
42
+ it "has middle initial" do
43
+ author = { "name" => "Martin H. Fenner" }
44
+ expect(subject.is_personal_name?(name: author["name"])).to be true
45
45
  end
46
46
 
47
- it 'has unknown given name and middle initial' do
48
- author = { 'name' => 'Tejas S. Sathe' }
49
- expect(subject.is_personal_name?(name: author['name'])).to be true
47
+ it "has unknown given name and middle initial" do
48
+ author = { "name" => "Tejas S. Sathe" }
49
+ expect(subject.is_personal_name?(name: author["name"])).to be true
50
50
  end
51
51
 
52
- it 'has no info' do
53
- author = { 'name' => 'M Fenner' }
54
- expect(subject.is_personal_name?(name: author['name'])).to be true
52
+ it "has no info" do
53
+ author = { "name" => "M Fenner" }
54
+ expect(subject.is_personal_name?(name: author["name"])).to be true
55
55
  end
56
56
 
57
- it 'name with title' do
58
- author = { 'name' => 'Tejas S. Sathe, MD' }
59
- expect(subject.is_personal_name?(name: author['name'])).to be true
57
+ it "name with title" do
58
+ author = { "name" => "Tejas S. Sathe, MD" }
59
+ expect(subject.is_personal_name?(name: author["name"])).to be true
60
60
  end
61
61
  end
62
62
 
63
- context 'cleanup_author' do
64
- it 'Smith J.' do
65
- author = 'Smith J.'
66
- expect(subject.cleanup_author(author)).to eq('Smith, J.')
63
+ context "cleanup_author" do
64
+ it "Smith J." do
65
+ author = "Smith J."
66
+ expect(subject.cleanup_author(author)).to eq("Smith, J.")
67
67
  end
68
68
 
69
- it 'Smith, John' do
70
- author = 'Smith, John'
71
- expect(subject.cleanup_author(author)).to eq('Smith, John')
69
+ it "Smith, John" do
70
+ author = "Smith, John"
71
+ expect(subject.cleanup_author(author)).to eq("Smith, John")
72
72
  end
73
73
 
74
- it 'John Smith' do
75
- author = 'John Smith'
76
- expect(subject.cleanup_author(author)).to eq('John Smith')
74
+ it "John Smith" do
75
+ author = "John Smith"
76
+ expect(subject.cleanup_author(author)).to eq("John Smith")
77
77
  end
78
78
 
79
- it 'with email' do
80
- author = 'noreply@blogger.com (Roderic Page)'
81
- expect(subject.cleanup_author(author)).to eq('Roderic Page')
79
+ it "with email" do
80
+ author = "noreply@blogger.com (Roderic Page)"
81
+ expect(subject.cleanup_author(author)).to eq("Roderic Page")
82
82
  end
83
83
  end
84
84
 
85
- context 'get_one_author' do
86
- it 'has type organization' do
87
- author = { 'email' => 'info@ucop.edu', 'name' => 'University of California, Santa Barbara',
88
- 'role' => { 'namespace' => 'http://www.ngdc.noaa.gov/metadata/published/xsd/schema/resources/Codelist/gmxCodelists.xml#CI_RoleCode', 'roleCode' => 'copyrightHolder' }, 'type' => 'Organization' }
85
+ context "get_one_author" do
86
+ it "has type organization" do
87
+ author = { "email" => "info@ucop.edu", "name" => "University of California, Santa Barbara",
88
+ "role" => { "namespace" => "http://www.ngdc.noaa.gov/metadata/published/xsd/schema/resources/Codelist/gmxCodelists.xml#CI_RoleCode", "roleCode" => "copyrightHolder" }, "type" => "Organization" }
89
89
  response = subject.get_one_author(author)
90
- expect(response).to eq('name' => 'University of California, Santa Barbara', 'type' => 'Organization')
90
+ expect(response).to eq("name" => "University of California, Santa Barbara", "type" => "Organization")
91
91
  end
92
92
 
93
- it 'has familyName' do
94
- input = 'https://doi.org/10.5438/4K3M-NYVG'
93
+ it "has familyName" do
94
+ input = "https://doi.org/10.5438/4K3M-NYVG"
95
95
  subject = described_class.new(input: input)
96
- meta = JSON.parse(subject.raw).dig('data', 'attributes')
97
- response = subject.get_one_author(meta.dig('creators').first)
96
+ meta = JSON.parse(subject.raw).dig("data", "attributes")
97
+ response = subject.get_one_author(meta.dig("creators").first)
98
98
  expect(response).to eq(
99
- 'id' => 'https://orcid.org/0000-0003-1419-2405',
100
- 'givenName' => 'Martin', 'familyName' => 'Fenner', 'type' => 'Person'
99
+ "id" => "https://orcid.org/0000-0003-1419-2405",
100
+ "givenName" => "Martin", "familyName" => "Fenner", "type" => "Person",
101
101
  )
102
102
  end
103
103
 
104
- it 'has name with title' do
105
- author = { 'name' => "Tejas S. Sathe, MD" }
104
+ it "has name with title" do
105
+ author = { "name" => "Tejas S. Sathe, MD" }
106
106
  response = subject.get_one_author(author)
107
- expect(response).to eq('givenName' => 'Tejas S.', 'familyName' => 'Sathe', 'type' => 'Person')
107
+ expect(response).to eq("givenName" => "Tejas S.", "familyName" => "Sathe", "type" => "Person")
108
108
  end
109
109
 
110
- it 'has name in display-order with ORCID' do
111
- input = 'https://doi.org/10.6084/M9.FIGSHARE.4700788'
110
+ it "has name in display-order with ORCID" do
111
+ input = "https://doi.org/10.6084/M9.FIGSHARE.4700788"
112
112
  subject = described_class.new(input: input)
113
- meta = JSON.parse(subject.raw).dig('data', 'attributes')
114
- response = subject.get_one_author(meta.dig('creators').first)
115
- expect(response).to eq('type' => 'Person',
116
- 'id' => 'https://orcid.org/0000-0003-4881-1606',
117
- 'givenName' => 'Andrea', 'familyName' => 'Bedini')
113
+ meta = JSON.parse(subject.raw).dig("data", "attributes")
114
+ response = subject.get_one_author(meta.dig("creators").first)
115
+ expect(response).to eq("type" => "Person",
116
+ "id" => "https://orcid.org/0000-0003-4881-1606",
117
+ "givenName" => "Andrea", "familyName" => "Bedini")
118
118
  end
119
119
 
120
- it 'is organization' do
121
- author = { 'email' => 'info@ucop.edu',
122
- 'name' => { '__content__' => 'University of California, Santa Barbara' },
123
- 'type' => 'Organization', 'role' => { 'namespace' => 'http://www.ngdc.noaa.gov/metadata/published/xsd/schema/resources/Codelist/gmxCodelists.xml#CI_RoleCode', 'roleCode' => 'copyrightHolder' } }
120
+ it "is organization" do
121
+ author = { "email" => "info@ucop.edu",
122
+ "name" => { "__content__" => "University of California, Santa Barbara" },
123
+ "type" => "Organization", "role" => { "namespace" => "http://www.ngdc.noaa.gov/metadata/published/xsd/schema/resources/Codelist/gmxCodelists.xml#CI_RoleCode", "roleCode" => "copyrightHolder" } }
124
124
  response = subject.get_one_author(author)
125
- expect(response).to eq('name' => 'University of California, Santa Barbara',
126
- 'type' => 'Organization')
125
+ expect(response).to eq("name" => "University of California, Santa Barbara",
126
+ "type" => "Organization")
127
127
  end
128
128
 
129
- it 'name with affiliation crossref' do
130
- input = '10.7554/elife.01567'
131
- subject = described_class.new(input: input, from: 'crossref')
129
+ it "is another organization" do
130
+ author = { "name" => "University of California, Santa Barbara",
131
+ "id" => "https://ror.org/02t274463" }
132
+ response = subject.get_one_author(author)
133
+ expect(response).to eq("id" => "https://ror.org/02t274463", "name" => "University of California, Santa Barbara", "type" => "Organization")
134
+ end
135
+
136
+ it "is anonymous" do
137
+ author = { "id" => "https://ror.org/05745n787" }
138
+ response = subject.get_one_author(author)
139
+ expect(response).to eq("type" => "Person", "affiliation" => [{"id"=>"https://ror.org/05745n787"}])
140
+ end
141
+
142
+ it "name with affiliation crossref" do
143
+ input = "10.7554/elife.01567"
144
+ subject = described_class.new(input: input, from: "crossref")
132
145
  response = subject.get_one_author(subject.creators.first)
133
- expect(response).to eq('affiliation' => [{ 'name' => 'Department of Plant Molecular Biology, University of Lausanne, Lausanne, Switzerland' }], 'familyName' => 'Sankar',
134
- 'givenName' => 'Martial',
135
- 'type' => 'Person')
146
+ expect(response).to eq("affiliation" => [{ "name" => "Department of Plant Molecular Biology, University of Lausanne, Lausanne, Switzerland" }], "familyName" => "Sankar",
147
+ "givenName" => "Martial",
148
+ "type" => "Person")
136
149
  end
137
150
 
138
- it 'only familyName and givenName' do
139
- input = 'https://doi.pangaea.de/10.1594/PANGAEA.836178'
140
- subject = described_class.new(input: input, from: 'schema_org')
151
+ it "only familyName and givenName" do
152
+ input = "https://doi.pangaea.de/10.1594/PANGAEA.836178"
153
+ subject = described_class.new(input: input, from: "schema_org")
141
154
  response = subject.get_one_author(subject.creators.first)
142
- expect(response).to eq('type' => 'Person', 'givenName' => 'Emma', 'familyName' => 'Johansson')
155
+ expect(response).to eq("type" => "Person", "givenName" => "Emma", "familyName" => "Johansson")
156
+ end
157
+
158
+ it "affiliation is space" do
159
+ input = "10.1177/0042098011428175"
160
+ subject = described_class.new(input: input)
161
+ response = subject.get_one_author(subject.creators.first)
162
+ expect(response).to eq("familyName"=>"Petrovici", "givenName"=>"Norbert", "type"=>"Person")
143
163
  end
144
164
  end
145
165
 
146
- context 'authors_as_string' do
166
+ context "authors_as_string" do
147
167
  let(:authors) do
148
- [{ 'type' => 'Person',
149
- 'id' => 'https://orcid.org/0000-0003-0077-4738',
150
- 'givenName' => 'Matt',
151
- 'familyName' => 'Jones' },
152
- { 'type' => 'Person',
153
- 'id' => 'https://orcid.org/0000-0002-2192-403X',
154
- 'givenName' => 'Peter',
155
- 'familyName' => 'Slaughter' },
156
- { 'type' => 'Organization',
157
- 'id' => 'https://ror.org/02t274463',
158
- 'name' => 'University of California, Santa Barbara' }]
159
- end
160
-
161
- it 'authors' do
168
+ [{ "type" => "Person",
169
+ "id" => "https://orcid.org/0000-0003-0077-4738",
170
+ "givenName" => "Matt",
171
+ "familyName" => "Jones" },
172
+ { "type" => "Person",
173
+ "id" => "https://orcid.org/0000-0002-2192-403X",
174
+ "givenName" => "Peter",
175
+ "familyName" => "Slaughter" },
176
+ { "type" => "Organization",
177
+ "id" => "https://ror.org/02t274463",
178
+ "name" => "University of California, Santa Barbara" }]
179
+ end
180
+
181
+ it "authors" do
162
182
  response = subject.authors_as_string(authors[0..1])
163
- expect(response).to eq('Jones, Matt and Slaughter, Peter')
183
+ expect(response).to eq("Jones, Matt and Slaughter, Peter")
164
184
  end
165
185
 
166
- it 'single author' do
186
+ it "single author" do
167
187
  response = subject.authors_as_string(authors.first)
168
- expect(response).to eq('Jones, Matt')
188
+ expect(response).to eq("Jones, Matt")
169
189
  end
170
190
 
171
- it 'no author' do
191
+ it "no author" do
172
192
  response = subject.authors_as_string(nil)
173
193
  expect(response.nil?).to be(true)
174
194
  end
175
195
 
176
- it 'with organization' do
196
+ it "with organization" do
177
197
  response = subject.authors_as_string(authors)
178
- expect(response).to eq('Jones, Matt and Slaughter, Peter and {University of California, Santa Barbara}')
198
+ expect(response).to eq("Jones, Matt and Slaughter, Peter and {University of California, Santa Barbara}")
199
+ end
200
+ end
201
+
202
+ context "get_affiliations" do
203
+ it "name" do
204
+ affiliation = [{ 'name' => 'University of Zurich, Zurich, Switzerland' }]
205
+ response = subject.get_affiliations(affiliation)
206
+ expect(response).to eq([{ 'name' => 'University of Zurich, Zurich, Switzerland' }])
207
+ end
208
+
209
+ it "name and ROR ID" do
210
+ affiliation = { "id" => "https://ror.org/02t274463",
211
+ "name" => "University of California, Santa Barbara" }
212
+ response = subject.get_affiliations(affiliation)
213
+ expect(response).to eq([{ "name" => "University of California, Santa Barbara" }])
214
+ end
215
+
216
+ it "only ROR ID" do
217
+ affiliation = { "affiliationIdentifier" => "https://ror.org/02t274463" }
218
+ response = subject.get_affiliations(affiliation)
219
+ expect(response).to eq([{"id"=>"https://ror.org/02t274463"}])
179
220
  end
180
221
  end
181
222
  end
@@ -0,0 +1,62 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://rogue-scholar.org/api/posts/a163e340-5b3c-4736-9ab0-8c54fdff6a3c
6
+ body:
7
+ encoding: UTF-8
8
+ string: ''
9
+ headers:
10
+ Connection:
11
+ - close
12
+ Host:
13
+ - 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
+ Age:
22
+ - '0'
23
+ Cache-Control:
24
+ - public, max-age=0, must-revalidate
25
+ Content-Length:
26
+ - '2017'
27
+ Content-Type:
28
+ - application/json; charset=utf-8
29
+ Date:
30
+ - Tue, 20 Jun 2023 19:17:19 GMT
31
+ Etag:
32
+ - '"hpv2dd3pyd1jt"'
33
+ Server:
34
+ - Vercel
35
+ Strict-Transport-Security:
36
+ - max-age=63072000
37
+ X-Matched-Path:
38
+ - "/api/posts/[slug]"
39
+ X-Vercel-Cache:
40
+ - MISS
41
+ X-Vercel-Id:
42
+ - fra1::iad1::jwz7p-1687288639219-41a872c06d7b
43
+ Connection:
44
+ - close
45
+ body:
46
+ encoding: UTF-8
47
+ string: "{\"id\":\"https://doi.org/10.59350/g6bth-b6f85\",\"uuid\":\"a163e340-5b3c-4736-9ab0-8c54fdff6a3c\",\"url\":\"https://lab.sub.uni-goettingen.de/welcome.html\",\"title\":\"Welcome
48
+ to the Lab\",\"summary\":\"Welcome everyone! This is the place to read about
49
+ projects, resources and all the things we deal with at our work on digital
50
+ collections, databases, APIs, tools and esoteric programming languages we
51
+ prefer to write in. It is not meant for a single subject, but covers all topics
52
+ we \U0001F496. So I hope you don’t mind if the next post is about one of my
53
+ adorable cute rabbits.\",\"date_published\":\"2017-01-01T00:00:01Z\",\"date_modified\":\"2017-01-01T00:00:01Z\",\"date_indexed\":\"2023-06-20T09:15:18+00:00\",\"authors\":[{\"url\":\"https://ror.org/05745n787\",\"name\":null}],\"image\":\"https://lab.sub.uni-goettingen.de/assets/images/Bibliothek_der_UNI_Goettingen-wikiCommons-Suhaknoke.webp\",\"content_html\":\"<p>Welcome
54
+ everyone!</p> <p>This is the place to read about projects, resources and all
55
+ the things we deal with at our work on digital collections, databases, APIs,
56
+ tools and esoteric programming languages we prefer to write in. It is <em>not</em>
57
+ meant for a single subject, but covers all topics we \U0001F496. So I hope
58
+ you don’t mind if the next post is about one of my adorable cute rabbits.</p>\",\"tags\":[\"meta\"],\"language\":\"en\",\"references\":null,\"blog_id\":\"6hezn63\",\"blog\":{\"id\":\"6hezn63\",\"title\":\"lab.sub
59
+ - Articles\",\"description\":\"Better sit thus, and observe thy strange things\",\"language\":\"en\",\"favicon\":null,\"feed_url\":\"https://lab.sub.uni-goettingen.de/atom.xml\",\"home_page_url\":\"https://lab.sub.uni-goettingen.de/\",\"user_id\":\"8498eaf6-8c58-4b58-bc15-27eda292b1aa\",\"created_at\":\"2023-06-11T08:09:50+00:00\",\"indexed_at\":\"2023-04-24\",\"feed_format\":\"application/atom+xml\",\"license\":\"https://creativecommons.org/licenses/by/4.0/legalcode\",\"generator\":\"Jekyll\",\"category\":\"Engineering
60
+ and Technology\",\"prefix\":\"10.59350\",\"modified_at\":\"2023-06-01T00:00:01+00:00\",\"version\":\"https://jsonfeed.org/version/1.1\",\"backlog\":false,\"authors\":null}}"
61
+ recorded_at: Tue, 20 Jun 2023 19:17:19 GMT
62
+ recorded_with: VCR 6.1.0
@@ -0,0 +1,303 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://doi.org/ra/10.1177
6
+ body:
7
+ encoding: UTF-8
8
+ string: ''
9
+ headers:
10
+ Connection:
11
+ - close
12
+ Host:
13
+ - doi.org
14
+ User-Agent:
15
+ - http.rb/5.1.1
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Date:
22
+ - Wed, 21 Jun 2023 06:59:57 GMT
23
+ Content-Type:
24
+ - application/json;charset=UTF-8
25
+ Transfer-Encoding:
26
+ - chunked
27
+ Connection:
28
+ - close
29
+ Permissions-Policy:
30
+ - interest-cohort=(),browsing-topics=()
31
+ Cf-Cache-Status:
32
+ - DYNAMIC
33
+ Report-To:
34
+ - '{"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=WU%2FllRC0hBlvN%2BLUIqA5%2BpFmmTvjgA9UpuYKwtTSGR9wNtn%2BBm3WDuXw0nJZp2KAsMUk8vPlHwYo2DVBHZraAkB9xnnlHKWG2wDoY0OuZx%2BWIjgu%2FJoB62ox8a%2FaYk%2B%2BNrCbUYE%3D"}],"group":"cf-nel","max_age":604800}'
35
+ Nel:
36
+ - '{"success_fraction":0,"report_to":"cf-nel","max_age":604800}'
37
+ Strict-Transport-Security:
38
+ - max-age=31536000; includeSubDomains; preload
39
+ Server:
40
+ - cloudflare
41
+ Cf-Ray:
42
+ - 7daa5f2ad84d0a69-AMS
43
+ Alt-Svc:
44
+ - h3=":443"; ma=86400
45
+ body:
46
+ encoding: UTF-8
47
+ string: |-
48
+ [
49
+ {
50
+ "DOI": "10.1177",
51
+ "RA": "Crossref"
52
+ }
53
+ ]
54
+ recorded_at: Wed, 21 Jun 2023 06:59:57 GMT
55
+ - request:
56
+ method: get
57
+ uri: https://api.crossref.org/works/10.1177/0042098011428175
58
+ body:
59
+ encoding: UTF-8
60
+ string: ''
61
+ headers:
62
+ Connection:
63
+ - close
64
+ Host:
65
+ - api.crossref.org
66
+ User-Agent:
67
+ - http.rb/5.1.1
68
+ response:
69
+ status:
70
+ code: 200
71
+ message: OK
72
+ headers:
73
+ Date:
74
+ - Wed, 21 Jun 2023 06:59:57 GMT
75
+ Content-Type:
76
+ - application/json
77
+ Transfer-Encoding:
78
+ - chunked
79
+ Access-Control-Expose-Headers:
80
+ - Link
81
+ Access-Control-Allow-Headers:
82
+ - X-Requested-With, Accept, Accept-Encoding, Accept-Charset, Accept-Language,
83
+ Accept-Ranges, Cache-Control
84
+ Access-Control-Allow-Origin:
85
+ - "*"
86
+ Server:
87
+ - Jetty(9.4.40.v20210413)
88
+ X-Ratelimit-Limit:
89
+ - '50'
90
+ X-Ratelimit-Interval:
91
+ - 1s
92
+ X-Api-Pool:
93
+ - public
94
+ X-Rate-Limit-Limit:
95
+ - '50'
96
+ X-Rate-Limit-Interval:
97
+ - 1s
98
+ Permissions-Policy:
99
+ - interest-cohort=()
100
+ Connection:
101
+ - close
102
+ body:
103
+ encoding: UTF-8
104
+ string: '{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2023,5,7]],"date-time":"2023-05-07T19:48:38Z","timestamp":1683488918534},"reference-count":54,"publisher":"SAGE
105
+ Publications","issue":"11","license":[{"start":{"date-parts":[[2011,12,22]],"date-time":"2011-12-22T00:00:00Z","timestamp":1324512000000},"content-version":"tdm","delay-in-days":0,"URL":"http:\/\/journals.sagepub.com\/page\/policies\/text-and-data-mining-license"}],"content-domain":{"domain":["journals.sagepub.com"],"crossmark-restriction":true},"short-container-title":["Urban
106
+ Studies"],"published-print":{"date-parts":[[2012,11]]},"abstract":"<jats:p>
107
+ In this article, the case of Cluj\/Kolozsvar, regional capital of Transylvania,
108
+ is analysed in order to uncover the geographies of power in which the workers,
109
+ a category that has often been analytically silenced, have had an important
110
+ role in reframing the landscape of the city. Principal component analysis
111
+ is used to clarify the city\u2019s socialist and post-socialist urbanisation
112
+ processes, and the qualitative data show how the workers appropriated the
113
+ urban space in a nationalist manner. The workers\u2019 tactics had an important
114
+ impact, from a relational perspective, on the spatial strategies of the emerging
115
+ post-socialist middle class. <\/jats:p>","DOI":"10.1177\/0042098011428175","type":"journal-article","created":{"date-parts":[[2011,12,23]],"date-time":"2011-12-23T05:16:52Z","timestamp":1324617412000},"page":"2377-2397","update-policy":"http:\/\/dx.doi.org\/10.1177\/sage-journals-update-policy","source":"Crossref","is-referenced-by-count":16,"title":["Workers
116
+ and the City: Rethinking the Geographies of Power in Post-socialist Urbanisation"],"prefix":"10.1177","volume":"49","author":[{"given":"Norbert","family":"Petrovici","sequence":"first","affiliation":[{"name":"\u00a0"}]}],"member":"179","published-online":{"date-parts":[[2011,12,22]]},"reference":[{"issue":"3","key":"atypb1","first-page":"110","volume":"5","author":"Belkis\u00a0D.","year":"2003","journal-title":"IDEA
117
+ Arta \u015fi Societate"},{"key":"atypb2","unstructured":"Bodnar\u00a0J.Evil
118
+ Paradises: Dreamworlds of Neoliberalism. Davis\u00a0M., Monk\u00a0D., ed.
119
+ New York: New Press; 2007:140-151."},{"issue":"2","key":"atypb3","first-page":"53","volume":"19","author":"Burawoy\u00a0M.","year":"1989","journal-title":"Socialist
120
+ Review"},{"issue":"4","key":"atypb4","doi-asserted-by":"crossref","first-page":"1099","DOI":"10.1086\/320299","volume":"106","author":"Burawoy\u00a0M.","year":"2001","journal-title":"American
121
+ Journal of Sociology"},{"key":"atypb5","doi-asserted-by":"publisher","DOI":"10.1086\/210402"},{"key":"atypb6","doi-asserted-by":"publisher","DOI":"10.1017\/S0010417503000331"},{"key":"atypb7","volume-title":"Privatizing
122
+ Poland: Baby Food, Big Business, and the Remaking of Labor","author":"Dunn\u00a0E.
123
+ C.","year":"2004"},{"key":"atypb8","volume-title":"Making Capitalism without
124
+ Capitalists: Class Formation and Elite Struggles in Post-communist Central
125
+ Europe","author":"Eyal\u00a0G.","year":"1998"},{"key":"atypb9","doi-asserted-by":"publisher","DOI":"10.1086\/320300"},{"key":"atypb10","volume-title":"From
126
+ the Cult of Waste to the Trash Heap of History: The Politics of Waste in Socialist
127
+ and Postsocialist Hungary","author":"Gille\u00a0Z.","year":"2007"},{"key":"atypb11","volume-title":"Transformation
128
+ of Cities in Central and Eastern Europe","author":"Hamilton\u00a0F. E. I.","year":"2006"},{"key":"atypb12","doi-asserted-by":"publisher","DOI":"10.1080\/13604810903298672"},{"key":"atypb13","doi-asserted-by":"publisher","DOI":"10.1080\/13604810903579287"},{"key":"atypb14","doi-asserted-by":"publisher","DOI":"10.1525\/9780520936102"},{"key":"atypb15","doi-asserted-by":"publisher","DOI":"10.1017\/S0020859009990630"},{"key":"atypb16","unstructured":"Hirt\u00a0S.,Kovachev\u00a0A.The
129
+ Urban Mosaic of Post-socialist Eastern Europe. Tsenkova\u00a0S., Nedovic-Budic\u00a0Z.,
130
+ ed. Dordrecht: Springer; 2006:112-130."},{"key":"atypb17","doi-asserted-by":"publisher","DOI":"10.1017\/S0147547905000189"},{"key":"atypb18","doi-asserted-by":"publisher","DOI":"10.1146\/annurev.so.06.080180.002245"},{"key":"atypb19","doi-asserted-by":"publisher","DOI":"10.1007\/BF00993596"},{"key":"atypb20","volume-title":"Expanding
131
+ Class: Power and Everyday Politics in Industrial Communities","author":"Kalb\u00a0D.","year":"1997"},{"key":"atypb21","volume-title":"Working-class
132
+ Formation: Nineteenth-century Patterns in Western Europe and the United States","author":"Katznelson\u00a0I.","year":"1986"},{"issue":"4","key":"atypb22","first-page":"399","volume":"12","author":"Kideckel\u00a0D.","year":"1988","journal-title":"Dialectical
133
+ Anthropology"},{"key":"atypb23","unstructured":"Kideckel\u00a0D.Postsocialism:
134
+ Ideals, Ideologies, and Practices in Eurasia. Hann\u00a0C., ed. London: Routledge;
135
+ 2002:114-132."},{"key":"atypb24","volume-title":"Getting by in Postsocialist
136
+ Romania: Labor, the Body, and Working Class Culture","author":"Kideckel\u00a0D.","year":"2008"},{"key":"atypb25","doi-asserted-by":"publisher","DOI":"10.1016\/j.cities.2006.02.002"},{"key":"atypb26","first-page":"70","volume":"46","author":"Lascu\u00a0N.","year":"2006","journal-title":"Arhitectura"},{"key":"atypb27","first-page":"13","volume":"1","author":"Lascu\u00a0N.","year":"1979","journal-title":"Arhitectura"},{"key":"atypb28","first-page":"125","volume":"15","author":"Lazar\u00a0M.","year":"2003","journal-title":"IDEA
137
+ Arts and Society"},{"key":"atypb29","volume-title":"Vital statistics in the
138
+ city of Cluj-Napoca","year":"2007"},{"key":"atypb30","volume-title":"The Social
139
+ Impact of Informal Economies in Eastern Europe","author":"Neef\u00a0R.","year":"2002"},{"key":"atypb31","volume-title":"The
140
+ Defeat of Solidarity: Anger and Politics in Postcommunist Europe","author":"Ost\u00a0D.","year":"2005"},{"issue":"2","key":"atypb32","first-page":"9","volume":"53","author":"Ourednicek\u00a0M.","year":"2009","journal-title":"Studia
141
+ Sociologie"},{"key":"atypb33","doi-asserted-by":"publisher","DOI":"10.4324\/9780203881927"},{"key":"atypb34","unstructured":"Petrovici\u00a0N.Headlines
142
+ of Nationalism, Subtexts of Class. Kalb\u00a0D., Halmai\u00a0G., ed. New York:
143
+ Berghahn Books; 2011:57-77."},{"key":"atypb35","doi-asserted-by":"publisher","DOI":"10.1017\/S0147547905000165"},{"issue":"1","key":"atypb36","doi-asserted-by":"crossref","first-page":"130","DOI":"10.1163\/187633009X411539","volume":"36","author":"Poenaru\u00a0F.","year":"2009","journal-title":"East
144
+ Central Europe"},{"issue":"1","key":"atypb37","first-page":"55","volume":"17","author":"Riabchuk\u00a0A.","year":"2009","journal-title":"Debatte"},{"key":"atypb38","doi-asserted-by":"publisher","DOI":"10.1023\/A:1022435000258"},{"key":"atypb39","doi-asserted-by":"publisher","DOI":"10.1177\/0011392104046619"},{"key":"atypb40","doi-asserted-by":"publisher","DOI":"10.1080\/13604810902982250"},{"key":"atypb41","doi-asserted-by":"publisher","DOI":"10.1080\/13604811003633719"},{"key":"atypb42","doi-asserted-by":"publisher","DOI":"10.1111\/j.1467-8330.2008.00592.x"},{"key":"atypb43","doi-asserted-by":"publisher","DOI":"10.1002\/9780470712733.ch3"},{"key":"atypb44","doi-asserted-by":"publisher","DOI":"10.1007\/978-1-4020-6053-3"},{"key":"atypb45","doi-asserted-by":"publisher","DOI":"10.1111\/j.1467-8330.2008.00573.x"},{"key":"atypb46","doi-asserted-by":"publisher","DOI":"10.1080\/02673039982678"},{"key":"atypb47","unstructured":"Szel\u00e9nyi\u00a0I.,Kostello\u00a0E.The
145
+ New Institutionalism in Sociology. Nee\u00a0V., Brinton\u00a0M., ed. New York:
146
+ Russell Sage Foundation; 1998:305-326."},{"key":"atypb48","volume-title":"The
147
+ Poverty of Theory and Other Essays","author":"Thompson\u00a0E. P.","year":"1978"},{"key":"atypb49","volume-title":"Stalinism
148
+ for All Seasons: A Political History of Romanian Communism","author":"Tism\u0103neanu\u00a0V.","year":"2003"},{"key":"atypb50","unstructured":"Tosics\u00a0I.Transformation
149
+ of Cities in Central and Eastern Europe. Hamilton\u00a0F. E. I., Dimitrowska
150
+ Andrews\u00a0K., Pichler-Milanovic\u00a0N., ed. Tokyo: United Nations University
151
+ Press; 2006:47-78."},{"key":"atypb51","volume-title":"S\u0103p\u0103tor \u00een
152
+ Pia\u0163a Discordiei","author":"Tripon\u00a0M.","year":"2005"},{"issue":"3","key":"atypb52","first-page":"130","volume":"5","author":"Troc\u00a0G.","year":"2003","journal-title":"IDEA
153
+ Arta \u015fi Societate"},{"key":"atypb53","doi-asserted-by":"publisher","DOI":"10.1007\/3-7908-1727-9"},{"key":"atypb54","doi-asserted-by":"publisher","DOI":"10.1017\/S0010417500019903"}],"container-title":["Urban
154
+ Studies"],"original-title":[],"language":"en","link":[{"URL":"http:\/\/journals.sagepub.com\/doi\/pdf\/10.1177\/0042098011428175","content-type":"application\/pdf","content-version":"vor","intended-application":"text-mining"},{"URL":"http:\/\/journals.sagepub.com\/doi\/pdf\/10.1177\/0042098011428175","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2021,5,16]],"date-time":"2021-05-16T13:53:27Z","timestamp":1621173207000},"score":1,"resource":{"primary":{"URL":"http:\/\/journals.sagepub.com\/doi\/10.1177\/0042098011428175"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2011,12,22]]},"references-count":54,"journal-issue":{"issue":"11","published-print":{"date-parts":[[2012,11]]}},"alternative-id":["10.1177\/0042098011428175"],"URL":"http:\/\/dx.doi.org\/10.1177\/0042098011428175","relation":{},"ISSN":["0042-0980","1360-063X"],"issn-type":[{"value":"0042-0980","type":"print"},{"value":"1360-063X","type":"electronic"}],"subject":["Urban
155
+ Studies","Environmental Science (miscellaneous)"],"published":{"date-parts":[[2011,12,22]]}}}'
156
+ recorded_at: Wed, 21 Jun 2023 06:59:57 GMT
157
+ - request:
158
+ method: get
159
+ uri: https://api.crossref.org/members/179
160
+ body:
161
+ encoding: UTF-8
162
+ string: ''
163
+ headers:
164
+ Connection:
165
+ - close
166
+ Host:
167
+ - api.crossref.org
168
+ User-Agent:
169
+ - http.rb/5.1.1
170
+ response:
171
+ status:
172
+ code: 200
173
+ message: OK
174
+ headers:
175
+ Date:
176
+ - Wed, 21 Jun 2023 06:59:58 GMT
177
+ Content-Type:
178
+ - application/json
179
+ Transfer-Encoding:
180
+ - chunked
181
+ Access-Control-Expose-Headers:
182
+ - Link
183
+ Access-Control-Allow-Headers:
184
+ - X-Requested-With, Accept, Accept-Encoding, Accept-Charset, Accept-Language,
185
+ Accept-Ranges, Cache-Control
186
+ Access-Control-Allow-Origin:
187
+ - "*"
188
+ Server:
189
+ - Jetty(9.4.40.v20210413)
190
+ X-Ratelimit-Limit:
191
+ - '50'
192
+ X-Ratelimit-Interval:
193
+ - 1s
194
+ X-Api-Pool:
195
+ - public
196
+ X-Rate-Limit-Limit:
197
+ - '50'
198
+ X-Rate-Limit-Interval:
199
+ - 1s
200
+ Permissions-Policy:
201
+ - interest-cohort=()
202
+ Connection:
203
+ - close
204
+ body:
205
+ encoding: UTF-8
206
+ string: '{"status":"ok","message-type":"member","message-version":"1.0.0","message":{"last-status-check-time":1687303488709,"primary-name":"SAGE
207
+ Publications","counts":{"current-dois":212065,"backfile-dois":2784347,"total-dois":2996412},"breakdowns":{"dois-by-issued-year":[[2020,91760],[2022,87882],[2021,86441],[2014,86188],[2016,84799],[2013,82548],[2017,82500],[2018,80619],[2019,80361],[2012,79247],[2009,76596],[2011,76586],[2015,76217],[2010,75226],[2008,74866],[2007,68850],[2006,65904],[2005,65225],[2004,63509],[2003,55361],[2002,53945],[2001,51620],[2000,50472],[1999,47214],[1998,44564],[1997,44102],[1996,42534],[1995,39264],[2023,37732],[1993,37730],[1994,37125],[1992,35237],[1991,33677],[1990,33622],[1989,31761],[1988,30972],[1987,29341],[1986,27580],[1985,25638],[1984,25249],[1983,24813],[1982,23828],[1981,22728],[1980,22144],[1979,21740],[1978,21186],[1977,20376],[1976,19956],[1974,19050],[1975,18677],[1973,18466],[1972,18370],[1971,16532],[1970,16120],[1969,16059],[1968,15300],[1967,14944],[1966,14403],[1965,13894],[1964,13126],[1963,12000],[1962,11394],[1961,10670],[1960,10444],[1959,9742],[1958,9005],[1957,8667],[1956,7941],[1955,7757],[1954,7639],[1953,6995],[1951,6892],[1952,6747],[1950,6551],[1949,6338],[1948,5844],[1939,5417],[1947,5211],[1930,5117],[1938,5020],[1931,4982],[1941,4851],[1936,4823],[1940,4736],[1935,4689],[1928,4633],[1946,4630],[1929,4583],[1942,4582],[1937,4557],[1933,4546],[1927,4451],[1932,4398],[1934,4358],[1926,4278],[1945,4173],[1924,4015],[1944,4008],[1943,3997],[1925,3994],[1921,3774],[1922,3719],[1923,3691],[1914,3646],[1913,3378],[1920,3362],[1909,3324],[1915,3231],[1912,3138],[1911,3113],[1919,3080],[1910,3051],[1916,3026],[1908,3016],[1917,2930],[1918,2640],[1906,2434],[1907,2428],[1904,2023],[1903,1796],[1902,1650],[1898,1648],[1899,1632],[1905,1602],[1896,1554],[1894,1433],[1901,1320],[1895,1257],[1892,864],[1897,653],[1893,512],[1900,449],[1891,355],[1890,268],[1887,193],[1886,193],[1885,189],[1881,172],[1888,170],[1884,167],[1889,154],[1883,146],[1882,132],[1879,80],[1880,77],[1856,65],[1858,54],[1853,54],[1847,54],[1823,54],[1860,53],[1859,53],[1850,53],[1878,52],[1852,52],[1857,51],[1851,51],[1877,50],[1862,50],[1827,49],[1855,48],[1876,47],[1873,47],[1864,47],[1871,46],[1869,45],[1867,45],[1874,44],[1861,44],[1865,43],[1816,43],[1863,42],[1875,41],[1866,41],[1848,41],[1868,40],[1854,39],[1821,39],[1872,38],[1870,33],[1818,33],[1811,33],[1844,32],[1819,31],[1815,29],[1814,29],[1817,28],[1813,28],[1843,27],[1838,26],[1840,25],[1839,25],[1849,24],[1845,24],[1812,24],[1831,23],[1842,22],[1835,22],[1809,22],[1846,21],[1837,20],[1841,19],[1832,18],[1829,17],[1828,17],[1833,14],[2024,8],[2103,2]]},"prefixes":["10.1528","10.1606","10.12679","10.3821","10.4137","10.1345","10.2511","10.1106","10.1622","10.1369","10.4219","10.14240","10.4135","10.5126","10.5367","10.5301","10.1243","10.7182","10.2190","10.47515","10.3818","10.2968","10.47594","10.1630","10.1354","10.1258","10.15256","10.3317","10.31124","10.5034","10.2182","10.17322","10.5153","10.1177","10.2189","10.1191","10.5193"],"coverage":{"affiliations-current":0.8446796972626317,"similarity-checking-current":0.9263103293801429,"descriptions-current":0.002791596916039893,"ror-ids-current":0.0,"funders-backfile":0.02452567873185347,"licenses-backfile":0.8441020461889269,"funders-current":0.2638672105250749,"affiliations-backfile":0.6015457125135624,"resource-links-backfile":0.8432594787934119,"orcids-backfile":0.04384295491905283,"update-policies-current":0.914752552283498,"ror-ids-backfile":0.0,"orcids-current":0.716247376983472,"similarity-checking-backfile":0.8617988346998418,"references-backfile":0.4934201807461498,"descriptions-backfile":0.002570441112404452,"award-numbers-backfile":0.01977698900316663,"update-policies-backfile":0.2589666446028458,"licenses-current":0.924914530922123,"award-numbers-current":0.2116945276212482,"abstracts-backfile":0.420136570621406,"resource-links-current":0.9181335911159314,"abstracts-current":0.7917808219178082,"references-current":0.8106854030603824},"prefix":[{"name":"Sage
208
+ Publications- Academy of Traumatology","value":"10.1528"},{"name":"Alliance
209
+ for Children and Families","value":"10.1606"},{"name":"Alliance for Children
210
+ and Families","value":"10.12679"},{"name":"Canadian Pharmacists Journal","value":"10.3821"},{"name":"Libertas
211
+ Academica, Ltd.","value":"10.4137"},{"name":"Harvey Whitney Books Co.","value":"10.1345"},{"name":"TASH","value":"10.2511"},{"name":"Sage
212
+ Publications - Technomic Publishing Company","value":"10.1106"},{"name":"SagePublications
213
+ - National Association of School Nurses","value":"10.1622"},{"name":"Journal
214
+ of Histochemistry & Cytochemistry","value":"10.1369"},{"name":"Sage Publications
215
+ (Prufrock Press, Inc.)","value":"10.4219"},{"name":"SAGE","value":"10.14240"},{"name":"Sage
216
+ Publications - Reference E-Books","value":"10.4135"},{"name":"Excellus Health
217
+ Plan, Inc.","value":"10.5126"},{"name":"IP Publishing","value":"10.5367"},{"name":"Wichtig
218
+ Publishing, SRL","value":"10.5301"},{"name":"Research Publishing Services
219
+ - Professional Engineering Publishing","value":"10.1243"},{"name":"North American
220
+ Transplant Coordinators Organization","value":"10.7182"},{"name":"Baywood
221
+ Publishing","value":"10.2190"},{"name":"SAGE Publications","value":"10.47515"},{"name":"Justice
222
+ Research & Statistics Association","value":"10.3818"},{"name":"Sage Publications
223
+ - Bulletin of the Atomic Scientists","value":"10.2968"},{"name":"Adam Matthew
224
+ Digital","value":"10.47594"},{"name":"Sage Publications-International Institute
225
+ for Environment and Development","value":"10.1630"},{"name":"American College
226
+ of Veterinary Pathologists","value":"10.1354"},{"name":"The Royal Society
227
+ of Medicine","value":"10.1258"},{"name":"Swiss Medical Press, GmbH","value":"10.15256"},{"name":"Sage
228
+ Publications (JRAAS Limited)","value":"10.3317"},{"name":"SAGE Publications","value":"10.31124"},{"name":"Excellus
229
+ Health Plan, Inc.","value":"10.5034"},{"name":"Canadian Association of Occupational
230
+ Therapists","value":"10.2182"},{"name":"Sage - Corwin","value":"10.17322"},{"name":"Sociological
231
+ Research Online","value":"10.5153"},{"name":"SAGE Publications","value":"10.1177"},{"name":"Johnson
232
+ Graduate School of Management, Cornell University","value":"10.2189"},{"name":"Arnold
233
+ Publishers","value":"10.1191"},{"name":"Association for Experimental Education","value":"10.5193"}],"id":179,"tokens":["sage","publications"],"counts-type":{"all":{"book-section":618,"monograph":4954,"report":109,"peer-review":3263,"journal-article":2730067,"other":2412,"book":4438,"reference-entry":138463,"journal":153,"component":250,"book-chapter":98893,"database":524,"reference-book":8645,"posted-content":3226,"journal-issue":3015,"edited-book":29},"backfile":{"monograph":4812,"report":98,"journal-article":2534652,"other":99,"book":3065,"reference-entry":131213,"component":24,"book-chapter":91329,"database":325,"reference-book":7126,"posted-content":1788,"journal-issue":2992,"edited-book":13},"current":{"monograph":142,"report":11,"peer-review":3263,"journal-article":195415,"other":1957,"book":1373,"reference-entry":2415,"book-chapter":3901,"database":199,"reference-book":1519,"posted-content":1438,"journal-issue":23,"edited-book":16}},"coverage-type":{"all":{"book-section":{"last-status-check-time":1687303488709,"affiliations":0.0,"abstracts":0.0,"orcids":0.0,"licenses":0.0,"references":0.0,"funders":0.0,"similarity-checking":0.1731391585760518,"award-numbers":0.0,"ror-ids":0.0,"update-policies":0.0,"resource-links":0.0,"descriptions":0.0},"monograph":{"last-status-check-time":1687303488709,"affiliations":0.0,"abstracts":6.055712555510698E-4,"orcids":0.0,"licenses":0.0,"references":0.0,"funders":0.0,"similarity-checking":0.1626968106580541,"award-numbers":0.0,"ror-ids":0.0,"update-policies":0.0,"resource-links":0.0,"descriptions":0.0},"report":{"last-status-check-time":1687303488709,"affiliations":0.0,"abstracts":0.0,"orcids":0.0,"licenses":0.0,"references":0.0,"funders":0.0,"similarity-checking":0.009174311926605505,"award-numbers":0.0,"ror-ids":0.0,"update-policies":0.0,"resource-links":0.0,"descriptions":0.0},"peer-review":{"last-status-check-time":1687303488709,"affiliations":0.0,"abstracts":0.0,"orcids":0.0,"licenses":0.0,"references":0.0,"funders":0.0,"similarity-checking":0.0,"award-numbers":0.0,"ror-ids":0.0,"update-policies":0.0,"resource-links":0.0,"descriptions":0.0},"journal-article":{"last-status-check-time":1687303488709,"affiliations":0.6791097068313708,"abstracts":0.4888063186727652,"orcids":0.0999975458477759,"licenses":0.9311731177293451,"references":0.5662025877020601,"funders":0.04550987210203999,"similarity-checking":0.9372458624641813,"award-numbers":0.03661411972673198,"ror-ids":0.0,"update-policies":0.3351712613646478,"resource-links":0.9309687271411288,"descriptions":0.0},"other":{"last-status-check-time":1687303488709,"affiliations":0.0,"abstracts":0.0,"orcids":0.0,"licenses":0.0,"references":0.0,"funders":0.0,"similarity-checking":0.01990049751243781,"award-numbers":0.0,"ror-ids":0.0,"update-policies":0.0,"resource-links":0.0,"descriptions":0.0},"book":{"last-status-check-time":1687303488709,"affiliations":0.0,"abstracts":0.002478593961243804,"orcids":0.0,"licenses":0.0,"references":0.0,"funders":0.0,"similarity-checking":0.1266336187471834,"award-numbers":0.0,"ror-ids":0.0,"update-policies":0.0,"resource-links":0.0,"descriptions":0.0},"reference-entry":{"last-status-check-time":1687303488709,"affiliations":0.0,"abstracts":0.0,"orcids":0.0,"licenses":0.0,"references":0.0,"funders":0.0,"similarity-checking":0.1040855679856713,"award-numbers":0.0,"ror-ids":0.0,"update-policies":0.0,"resource-links":0.0,"descriptions":0.0},"journal":{"last-status-check-time":1687303488709,"affiliations":0.0,"abstracts":0.0,"orcids":0.0,"licenses":0.0,"references":0.0,"funders":0.0,"similarity-checking":0.07189542483660132,"award-numbers":0.0,"ror-ids":0.0,"update-policies":0.0,"resource-links":0.0,"descriptions":0.0},"component":{"last-status-check-time":1687303488709,"affiliations":0.096,"abstracts":0.0,"orcids":0.0,"licenses":0.0,"references":0.0,"funders":0.0,"similarity-checking":0.26,"award-numbers":0.0,"ror-ids":0.0,"update-policies":0.0,"resource-links":0.0,"descriptions":0.2},"book-chapter":{"last-status-check-time":1687303488709,"affiliations":0.0,"abstracts":0.0,"orcids":0.0,"licenses":0.0,"references":0.0,"funders":0.0,"similarity-checking":0.1480691252161427,"award-numbers":0.0,"ror-ids":0.0,"update-policies":0.0,"resource-links":0.0,"descriptions":0.0},"database":{"last-status-check-time":1687303488709,"affiliations":0.0,"abstracts":0.0,"orcids":0.0,"licenses":0.0,"references":0.0,"funders":0.0,"similarity-checking":0.0,"award-numbers":0.0,"ror-ids":0.0,"update-policies":0.0,"resource-links":0.0,"descriptions":0.9980916030534351},"reference-book":{"last-status-check-time":1687303488709,"affiliations":0.0,"abstracts":0.0,"orcids":0.0,"licenses":0.0,"references":0.0,"funders":0.0,"similarity-checking":0.2202429149797571,"award-numbers":0.0,"ror-ids":0.0,"update-policies":0.0,"resource-links":0.0,"descriptions":0.0},"posted-content":{"last-status-check-time":1687303488709,"affiliations":0.0,"abstracts":1.0,"orcids":0.2991320520768754,"licenses":1.0,"references":0.0,"funders":0.0,"similarity-checking":0.9820210787352759,"award-numbers":0.0,"ror-ids":0.0,"update-policies":0.0,"resource-links":0.0,"descriptions":0.0},"journal-issue":{"last-status-check-time":1687303488709,"affiliations":0.0,"abstracts":0.0,"orcids":0.0,"licenses":0.3396351575456053,"references":0.0,"funders":0.0,"similarity-checking":0.2530679933665008,"award-numbers":0.0,"ror-ids":0.0,"update-policies":0.0,"resource-links":0.3396351575456053,"descriptions":0.0},"edited-book":{"last-status-check-time":1687303488709,"affiliations":0.0,"abstracts":0.03448275862068966,"orcids":0.0,"licenses":0.0,"references":0.0,"funders":0.0,"similarity-checking":0.0,"award-numbers":0.0,"ror-ids":0.0,"update-policies":0.0,"resource-links":0.0,"descriptions":0.0}},"backfile":{"monograph":{"last-status-check-time":1687303488709,"affiliations":0.0,"abstracts":0.0,"orcids":0.0,"licenses":0.0,"references":0.0,"funders":0.0,"similarity-checking":0.1674979218620116,"award-numbers":0.0,"ror-ids":0.0,"update-policies":0.0,"resource-links":0.0,"descriptions":0.0},"report":{"last-status-check-time":1687303488709,"affiliations":0.0,"abstracts":0.0,"orcids":0.0,"licenses":0.0,"references":0.0,"funders":0.0,"similarity-checking":0.01020408163265306,"award-numbers":0.0,"ror-ids":0.0,"update-policies":0.0,"resource-links":0.0,"descriptions":0.0},"journal-article":{"last-status-check-time":1687303488709,"affiliations":0.6607960382727096,"abstracts":0.4608198679739862,"orcids":0.04795253944131186,"licenses":0.9261472580851337,"references":0.5420282547663348,"funders":0.02694176557570822,"similarity-checking":0.9325556328837253,"award-numbers":0.02172527037242193,"ror-ids":0.0,"update-policies":0.284478105870155,"resource-links":0.9259271095203602,"descriptions":0.0},"other":{"last-status-check-time":1687303488709,"affiliations":0.0,"abstracts":0.0,"orcids":0.0,"licenses":0.0,"references":0.0,"funders":0.0,"similarity-checking":0.0303030303030303,"award-numbers":0.0,"ror-ids":0.0,"update-policies":0.0,"resource-links":0.0,"descriptions":0.0},"book":{"last-status-check-time":1687303488709,"affiliations":0.0,"abstracts":0.0,"orcids":0.0,"licenses":0.0,"references":0.0,"funders":0.0,"similarity-checking":0.1833605220228385,"award-numbers":0.0,"ror-ids":0.0,"update-policies":0.0,"resource-links":0.0,"descriptions":0.0},"reference-entry":{"last-status-check-time":1687303488709,"affiliations":0.0,"abstracts":0.0,"orcids":0.0,"licenses":0.0,"references":0.0,"funders":0.0,"similarity-checking":0.1071235319671069,"award-numbers":0.0,"ror-ids":0.0,"update-policies":0.0,"resource-links":0.0,"descriptions":0.0},"component":{"last-status-check-time":1687303488709,"affiliations":1.0,"abstracts":0.0,"orcids":0.0,"licenses":0.0,"references":0.0,"funders":0.0,"similarity-checking":0.9583333333333333,"award-numbers":0.0,"ror-ids":0.0,"update-policies":0.0,"resource-links":0.0,"descriptions":1.0},"book-chapter":{"last-status-check-time":1687303488709,"affiliations":0.0,"abstracts":0.0,"orcids":0.0,"licenses":0.0,"references":0.0,"funders":0.0,"similarity-checking":0.1518575698847026,"award-numbers":0.0,"ror-ids":0.0,"update-policies":0.0,"resource-links":0.0,"descriptions":0.0},"database":{"last-status-check-time":1687303488709,"affiliations":0.0,"abstracts":0.0,"orcids":0.0,"licenses":0.0,"references":0.0,"funders":0.0,"similarity-checking":0.0,"award-numbers":0.0,"ror-ids":0.0,"update-policies":0.0,"resource-links":0.0,"descriptions":0.9969230769230769},"reference-book":{"last-status-check-time":1687303488709,"affiliations":0.0,"abstracts":0.0,"orcids":0.0,"licenses":0.0,"references":0.0,"funders":0.0,"similarity-checking":0.2671905697445972,"award-numbers":0.0,"ror-ids":0.0,"update-policies":0.0,"resource-links":0.0,"descriptions":0.0},"posted-content":{"last-status-check-time":1687303488709,"affiliations":0.0,"abstracts":1.0,"orcids":0.2969798657718121,"licenses":1.0,"references":0.0,"funders":0.0,"similarity-checking":0.9899328859060403,"award-numbers":0.0,"ror-ids":0.0,"update-policies":0.0,"resource-links":0.0,"descriptions":0.0},"journal-issue":{"last-status-check-time":1687303488709,"affiliations":0.0,"abstracts":0.0,"orcids":0.0,"licenses":0.3422459893048128,"references":0.0,"funders":0.0,"similarity-checking":0.2550133689839572,"award-numbers":0.0,"ror-ids":0.0,"update-policies":0.0,"resource-links":0.3422459893048128,"descriptions":0.0},"edited-book":{"last-status-check-time":1687303488709,"affiliations":0.0,"abstracts":0.0,"orcids":0.0,"licenses":0.0,"references":0.0,"funders":0.0,"similarity-checking":0.0,"award-numbers":0.0,"ror-ids":0.0,"update-policies":0.0,"resource-links":0.0,"descriptions":0.0}},"current":{"monograph":{"last-status-check-time":1687303488709,"affiliations":0.0,"abstracts":0.02112676056338028,"orcids":0.0,"licenses":0.0,"references":0.0,"funders":0.0,"similarity-checking":0.0,"award-numbers":0.0,"ror-ids":0.0,"update-policies":0.0,"resource-links":0.0,"descriptions":0.0},"report":{"last-status-check-time":1687303488709,"affiliations":0.0,"abstracts":0.0,"orcids":0.0,"licenses":0.0,"references":0.0,"funders":0.0,"similarity-checking":0.0,"award-numbers":0.0,"ror-ids":0.0,"update-policies":0.0,"resource-links":0.0,"descriptions":0.0},"peer-review":{"last-status-check-time":1687303488709,"affiliations":0.0,"abstracts":0.0,"orcids":0.0,"licenses":0.0,"references":0.0,"funders":0.0,"similarity-checking":0.0,"award-numbers":0.0,"ror-ids":0.0,"update-policies":0.0,"resource-links":0.0,"descriptions":0.0},"journal-article":{"last-status-check-time":1687303488709,"affiliations":0.9166491825090193,"abstracts":0.8518076913235934,"orcids":0.7750530921372464,"licenses":0.996361589437863,"references":0.8797584627587443,"funders":0.2863495637489446,"similarity-checking":0.9980810070874805,"award-numbers":0.2297315968579689,"ror-ids":0.0,"update-policies":0.9926924749891257,"resource-links":0.996361589437863,"descriptions":0.0},"other":{"last-status-check-time":1687303488709,"affiliations":0.0,"abstracts":0.0,"orcids":0.0,"licenses":0.0,"references":0.0,"funders":0.0,"similarity-checking":0.0,"award-numbers":0.0,"ror-ids":0.0,"update-policies":0.0,"resource-links":0.0,"descriptions":0.0},"book":{"last-status-check-time":1687303488709,"affiliations":0.0,"abstracts":0.008011653313911142,"orcids":0.0,"licenses":0.0,"references":0.0,"funders":0.0,"similarity-checking":0.0,"award-numbers":0.0,"ror-ids":0.0,"update-policies":0.0,"resource-links":0.0,"descriptions":0.0},"reference-entry":{"last-status-check-time":1687303488709,"affiliations":0.0,"abstracts":0.0,"orcids":0.0,"licenses":0.0,"references":0.0,"funders":0.0,"similarity-checking":0.0,"award-numbers":0.0,"ror-ids":0.0,"update-policies":0.0,"resource-links":0.0,"descriptions":0.0},"book-chapter":{"last-status-check-time":1687303488709,"affiliations":0.0,"abstracts":0.0,"orcids":0.0,"licenses":0.0,"references":0.0,"funders":0.0,"similarity-checking":0.0,"award-numbers":0.0,"ror-ids":0.0,"update-policies":0.0,"resource-links":0.0,"descriptions":0.0},"database":{"last-status-check-time":1687303488709,"affiliations":0.0,"abstracts":0.0,"orcids":0.0,"licenses":0.0,"references":0.0,"funders":0.0,"similarity-checking":0.0,"award-numbers":0.0,"ror-ids":0.0,"update-policies":0.0,"resource-links":0.0,"descriptions":1.0},"reference-book":{"last-status-check-time":1687303488709,"affiliations":0.0,"abstracts":0.0,"orcids":0.0,"licenses":0.0,"references":0.0,"funders":0.0,"similarity-checking":0.0,"award-numbers":0.0,"ror-ids":0.0,"update-policies":0.0,"resource-links":0.0,"descriptions":0.0},"posted-content":{"last-status-check-time":1687303488709,"affiliations":0.0,"abstracts":1.0,"orcids":0.301808066759388,"licenses":1.0,"references":0.0,"funders":0.0,"similarity-checking":0.972183588317107,"award-numbers":0.0,"ror-ids":0.0,"update-policies":0.0,"resource-links":0.0,"descriptions":0.0},"journal-issue":{"last-status-check-time":1687303488709,"affiliations":0.0,"abstracts":0.0,"orcids":0.0,"licenses":0.0,"references":0.0,"funders":0.0,"similarity-checking":0.0,"award-numbers":0.0,"ror-ids":0.0,"update-policies":0.0,"resource-links":0.0,"descriptions":0.0},"edited-book":{"last-status-check-time":1687303488709,"affiliations":0.0,"abstracts":0.0625,"orcids":0.0,"licenses":0.0,"references":0.0,"funders":0.0,"similarity-checking":0.0,"award-numbers":0.0,"ror-ids":0.0,"update-policies":0.0,"resource-links":0.0,"descriptions":0.0}}},"flags":{"deposits-abstracts-current":true,"deposits-orcids-current":true,"deposits":true,"deposits-affiliations-backfile":true,"deposits-update-policies-backfile":true,"deposits-similarity-checking-backfile":true,"deposits-award-numbers-current":true,"deposits-resource-links-current":true,"deposits-ror-ids-current":false,"deposits-articles":true,"deposits-affiliations-current":true,"deposits-funders-current":true,"deposits-references-backfile":true,"deposits-ror-ids-backfile":false,"deposits-abstracts-backfile":true,"deposits-licenses-backfile":true,"deposits-award-numbers-backfile":true,"deposits-descriptions-current":true,"deposits-references-current":true,"deposits-resource-links-backfile":true,"deposits-descriptions-backfile":true,"deposits-orcids-backfile":true,"deposits-funders-backfile":true,"deposits-update-policies-current":true,"deposits-similarity-checking-current":true,"deposits-licenses-current":true},"location":"Thousand
234
+ Oaks, CA, United States","names":["SAGE Publications","Sage Publications-
235
+ Academy of Traumatology","Alliance for Children and Families","Canadian Pharmacists
236
+ Journal","Libertas Academica, Ltd.","Harvey Whitney Books Co.","TASH","Sage
237
+ Publications - Technomic Publishing Company","SagePublications - National
238
+ Association of School Nurses","Journal of Histochemistry & Cytochemistry","Sage
239
+ Publications (Prufrock Press, Inc.)","SAGE","Sage Publications - Reference
240
+ E-Books","Excellus Health Plan, Inc.","IP Publishing","Wichtig Publishing,
241
+ SRL","Research Publishing Services - Professional Engineering Publishing","North
242
+ American Transplant Coordinators Organization","Baywood Publishing","Justice
243
+ Research & Statistics Association","Sage Publications - Bulletin of the Atomic
244
+ Scientists","Adam Matthew Digital","Sage Publications-International Institute
245
+ for Environment and Development","American College of Veterinary Pathologists","The
246
+ Royal Society of Medicine","Swiss Medical Press, GmbH","Sage Publications
247
+ (JRAAS Limited)","Canadian Association of Occupational Therapists","Sage -
248
+ Corwin","Sociological Research Online","Johnson Graduate School of Management,
249
+ Cornell University","Arnold Publishers","Association for Experimental Education"]}}'
250
+ recorded_at: Wed, 21 Jun 2023 06:59:58 GMT
251
+ - request:
252
+ method: get
253
+ uri: https://doi.org/ra/10.1177
254
+ body:
255
+ encoding: UTF-8
256
+ string: ''
257
+ headers:
258
+ Connection:
259
+ - close
260
+ Host:
261
+ - doi.org
262
+ User-Agent:
263
+ - http.rb/5.1.1
264
+ response:
265
+ status:
266
+ code: 200
267
+ message: OK
268
+ headers:
269
+ Date:
270
+ - Wed, 21 Jun 2023 06:59:59 GMT
271
+ Content-Type:
272
+ - application/json;charset=UTF-8
273
+ Transfer-Encoding:
274
+ - chunked
275
+ Connection:
276
+ - close
277
+ Permissions-Policy:
278
+ - interest-cohort=(),browsing-topics=()
279
+ Cf-Cache-Status:
280
+ - DYNAMIC
281
+ Report-To:
282
+ - '{"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=bNbXRHfVukPPYrYk5wu4g0iPpSEzVd6QktB0GY1pi0vzya1wxGq3qXom7Z08n4sqBwgUc2hkYILxL1FOyAVDgh%2FSPJrsDIeyK0hzTPlV1%2FZEB23Lu4sZm3RpnGSyLNQ7vbSuY6U%3D"}],"group":"cf-nel","max_age":604800}'
283
+ Nel:
284
+ - '{"success_fraction":0,"report_to":"cf-nel","max_age":604800}'
285
+ Strict-Transport-Security:
286
+ - max-age=31536000; includeSubDomains; preload
287
+ Server:
288
+ - cloudflare
289
+ Cf-Ray:
290
+ - 7daa5f363859b76c-AMS
291
+ Alt-Svc:
292
+ - h3=":443"; ma=86400
293
+ body:
294
+ encoding: UTF-8
295
+ string: |-
296
+ [
297
+ {
298
+ "DOI": "10.1177",
299
+ "RA": "Crossref"
300
+ }
301
+ ]
302
+ recorded_at: Wed, 21 Jun 2023 06:59:59 GMT
303
+ recorded_with: VCR 6.1.0
@@ -0,0 +1,62 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://rogue-scholar.org/api/posts/a163e340-5b3c-4736-9ab0-8c54fdff6a3c
6
+ body:
7
+ encoding: UTF-8
8
+ string: ''
9
+ headers:
10
+ Connection:
11
+ - close
12
+ Host:
13
+ - 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
+ Age:
22
+ - '0'
23
+ Cache-Control:
24
+ - public, max-age=0, must-revalidate
25
+ Content-Length:
26
+ - '2017'
27
+ Content-Type:
28
+ - application/json; charset=utf-8
29
+ Date:
30
+ - Tue, 20 Jun 2023 19:25:14 GMT
31
+ Etag:
32
+ - '"hpv2dd3pyd1jt"'
33
+ Server:
34
+ - Vercel
35
+ Strict-Transport-Security:
36
+ - max-age=63072000
37
+ X-Matched-Path:
38
+ - "/api/posts/[slug]"
39
+ X-Vercel-Cache:
40
+ - MISS
41
+ X-Vercel-Id:
42
+ - fra1::iad1::rfqk5-1687289113815-cb42220988ef
43
+ Connection:
44
+ - close
45
+ body:
46
+ encoding: UTF-8
47
+ string: "{\"id\":\"https://doi.org/10.59350/g6bth-b6f85\",\"uuid\":\"a163e340-5b3c-4736-9ab0-8c54fdff6a3c\",\"url\":\"https://lab.sub.uni-goettingen.de/welcome.html\",\"title\":\"Welcome
48
+ to the Lab\",\"summary\":\"Welcome everyone! This is the place to read about
49
+ projects, resources and all the things we deal with at our work on digital
50
+ collections, databases, APIs, tools and esoteric programming languages we
51
+ prefer to write in. It is not meant for a single subject, but covers all topics
52
+ we \U0001F496. So I hope you don’t mind if the next post is about one of my
53
+ adorable cute rabbits.\",\"date_published\":\"2017-01-01T00:00:01Z\",\"date_modified\":\"2017-01-01T00:00:01Z\",\"date_indexed\":\"2023-06-20T09:15:18+00:00\",\"authors\":[{\"url\":\"https://ror.org/05745n787\",\"name\":null}],\"image\":\"https://lab.sub.uni-goettingen.de/assets/images/Bibliothek_der_UNI_Goettingen-wikiCommons-Suhaknoke.webp\",\"content_html\":\"<p>Welcome
54
+ everyone!</p> <p>This is the place to read about projects, resources and all
55
+ the things we deal with at our work on digital collections, databases, APIs,
56
+ tools and esoteric programming languages we prefer to write in. It is <em>not</em>
57
+ meant for a single subject, but covers all topics we \U0001F496. So I hope
58
+ you don’t mind if the next post is about one of my adorable cute rabbits.</p>\",\"tags\":[\"meta\"],\"language\":\"en\",\"references\":null,\"blog_id\":\"6hezn63\",\"blog\":{\"id\":\"6hezn63\",\"title\":\"lab.sub
59
+ - Articles\",\"description\":\"Better sit thus, and observe thy strange things\",\"language\":\"en\",\"favicon\":null,\"feed_url\":\"https://lab.sub.uni-goettingen.de/atom.xml\",\"home_page_url\":\"https://lab.sub.uni-goettingen.de/\",\"user_id\":\"8498eaf6-8c58-4b58-bc15-27eda292b1aa\",\"created_at\":\"2023-06-11T08:09:50+00:00\",\"indexed_at\":\"2023-04-24\",\"feed_format\":\"application/atom+xml\",\"license\":\"https://creativecommons.org/licenses/by/4.0/legalcode\",\"generator\":\"Jekyll\",\"category\":\"Engineering
60
+ and Technology\",\"prefix\":\"10.59350\",\"modified_at\":\"2023-06-01T00:00:01+00:00\",\"version\":\"https://jsonfeed.org/version/1.1\",\"backlog\":false,\"authors\":null}}"
61
+ recorded_at: Tue, 20 Jun 2023 19:25:14 GMT
62
+ recorded_with: VCR 6.1.0
@@ -228,8 +228,7 @@ describe Commonmeta::Metadata, vcr: true do
228
228
  it "ghost post with organizational author" do
229
229
  input = "https://rogue-scholar.org/api/posts/5561f8e4-2ff1-4186-a8d5-8dacb3afe414"
230
230
  subject = described_class.new(input: input)
231
- puts subject.errors
232
- # expect(subject.valid?).to be true
231
+ expect(subject.valid?).to be true
233
232
  expect(subject.id).to eq("https://libscie.org/ku-leuven-supports-researchequals")
234
233
  expect(subject.url).to eq("https://libscie.org/ku-leuven-supports-researchequals")
235
234
  expect(subject.alternate_identifiers).to eq([{ "alternateIdentifier" => "5561f8e4-2ff1-4186-a8d5-8dacb3afe414", "alternateIdentifierType" => "UUID" }])
@@ -251,6 +250,31 @@ describe Commonmeta::Metadata, vcr: true do
251
250
  expect(subject.references).to be_nil
252
251
  end
253
252
 
253
+ it "jekyll post with anonymous author" do
254
+ input = "https://rogue-scholar.org/api/posts/a163e340-5b3c-4736-9ab0-8c54fdff6a3c"
255
+ subject = described_class.new(input: input)
256
+ expect(subject.valid?).to be true
257
+ expect(subject.id).to eq("https://doi.org/10.59350/g6bth-b6f85")
258
+ expect(subject.url).to eq("https://lab.sub.uni-goettingen.de/welcome.html")
259
+ expect(subject.alternate_identifiers).to eq([{ "alternateIdentifier" => "a163e340-5b3c-4736-9ab0-8c54fdff6a3c", "alternateIdentifierType" => "UUID" }])
260
+ expect(subject.type).to eq("Article")
261
+ expect(subject.creators.length).to eq(1)
262
+ expect(subject.creators.first).to eq("affiliation"=>[{"id"=>"https://ror.org/05745n787"}], "type"=>"Person")
263
+ expect(subject.titles).to eq([{ "title" => "Welcome to the Lab" }])
264
+ expect(subject.license).to eq("id" => "CC-BY-4.0",
265
+ "url" => "https://creativecommons.org/licenses/by/4.0/legalcode")
266
+ expect(subject.date).to eq("published"=>"2017-01-01", "updated"=>"2017-01-01")
267
+ expect(subject.descriptions.first["description"]).to start_with("Welcome everyone!")
268
+ expect(subject.publisher).to eq("name" => "lab.sub - Articles")
269
+ expect(subject.subjects).to eq([{ "subject" => "Engineering and technology" },
270
+ { "schemeUri" => "http://www.oecd.org/science/inno/38235147.pdf",
271
+ "subject" => "FOS: Engineering and technology",
272
+ "subjectScheme" => "Fields of Science and Technology (FOS)" }])
273
+ expect(subject.language).to eq("en")
274
+ expect(subject.container).to eq("identifier" => "https://lab.sub.uni-goettingen.de/", "identifierType" => "URL", "title" => "lab.sub - Articles", "type" => "Periodical")
275
+ expect(subject.references).to be_nil
276
+ end
277
+
254
278
  it "blog post with non-url id" do
255
279
  input = "https://rogue-scholar.org/api/posts/1898d2d7-4d87-4487-96c4-3073cf99e9a5"
256
280
  subject = described_class.new(input: input)
@@ -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("contributor_role"=>"author", "name"=>"Liberate Science", "sequence"=>"first")
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
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.7
4
+ version: 3.3.8
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-18 00:00:00.000000000 Z
11
+ date: 2023-06-21 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.1.json
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
@@ -873,11 +873,13 @@ files:
873
873
  - spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/ghost_post_with_organizational_author.yml
874
874
  - spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/ghost_post_without_doi.yml
875
875
  - spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/jekyll_post.yml
876
+ - spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/jekyll_post_with_anonymous_author.yml
876
877
  - spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/substack_post_with_broken_reference.yml
877
878
  - spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/syldavia_gazette_post_with_references.yml
878
879
  - spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/upstream_post_with_references.yml
879
880
  - spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/wordpress_post.yml
880
881
  - spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_json_feed_item_metadata/wordpress_post_with_references.yml
882
+ - spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_one_author/affiliation_is_space.yml
881
883
  - spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_one_author/has_familyName.yml
882
884
  - spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_one_author/has_name_in_display-order_with_ORCID.yml
883
885
  - spec/fixtures/vcr_cassettes/Commonmeta_Metadata/get_one_author/name_with_affiliation_crossref.yml
@@ -917,6 +919,7 @@ files:
917
919
  - spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/another_schema_org_from_front-matter.yml
918
920
  - spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/journal_article.yml
919
921
  - spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/journal_article_from_datacite.yml
922
+ - spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/json_feed_item_from_rogue_scholar_with_anonymous_author.yml
920
923
  - spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/json_feed_item_from_rogue_scholar_with_doi.yml
921
924
  - spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/json_feed_item_from_rogue_scholar_with_organizational_author.yml
922
925
  - spec/fixtures/vcr_cassettes/Commonmeta_Metadata/write_metadata_as_crossref/json_feed_item_from_upstream_blog.yml