commonmeta-ruby 3.3.7 → 3.3.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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