commonmeta-ruby 3.2.7 → 3.2.9

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: 7a50ad8ff25b9ff753b60cc9a34f578ae064cedc2417a5db146898e8202f8dc3
4
- data.tar.gz: cc7f32e49a6d0621a30884a8226a9dda04cd5b13ed6545aefc28fd8f19386acb
3
+ metadata.gz: e05b0fedfc5074f16bf6b04dd73150dcae6f75d3392dd3abe82bd52eafea1531
4
+ data.tar.gz: 12700c970a507ae36013334f0e942413f0092d6bf4735aa27b6709a12bc7d84e
5
5
  SHA512:
6
- metadata.gz: 16d052d4e0dda3aed49235f43914f3d88e46627741500edb987cbf6dad00091234aa2304541f8ba6d713b05c9b158717d2c5632aa024e60dc694f7126752dda1
7
- data.tar.gz: d6a7044f3b3722dc71f22f8c98e12d3f5c5e79b82bdf1aff745ccb74ecbd4febd2d53926924b635b97334c30df233dd793802dabfe0ea038f387488acf0ae4ef
6
+ metadata.gz: 74c86b93355c0337df66c15d519f51f5336f2f883924f1c6b2edad8b6460d509d2e3443653d8545b201004e6407afffe79a505044f8cae88bbeede9f25e16171
7
+ data.tar.gz: 903e7a8af1ec1025f8e7125ed96eea07f0994ed71f1473c5111947e5d7c8c1e42c5dcbe2b0562e261f60515c374c5f23e1d593cf448b9a87962cd4f3c831e2a3
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- commonmeta-ruby (3.2.7)
4
+ commonmeta-ruby (3.2.9)
5
5
  activesupport (>= 4.2.5, < 8.0)
6
6
  addressable (~> 2.8.1, < 2.8.2)
7
7
  base32-url (>= 0.5.0, < 1)
@@ -103,7 +103,7 @@ GEM
103
103
  json-ld-preloaded (3.2.2)
104
104
  json-ld (~> 3.2)
105
105
  rdf (~> 3.2)
106
- json_schemer (1.0.2)
106
+ json_schemer (1.0.3)
107
107
  hana (~> 1.3)
108
108
  regexp_parser (~> 2.0)
109
109
  simpleidn (~> 0.2)
@@ -138,8 +138,8 @@ GEM
138
138
  props (1.2.0)
139
139
  iniparser (>= 0.1.0)
140
140
  public_suffix (4.0.7)
141
- racc (1.7.0)
142
- rack (3.0.7)
141
+ racc (1.7.1)
142
+ rack (3.0.8)
143
143
  rack-test (2.1.0)
144
144
  rack (>= 1.3)
145
145
  rainbow (3.1.1)
@@ -169,7 +169,7 @@ GEM
169
169
  rdf-xsd (3.2.1)
170
170
  rdf (~> 3.2)
171
171
  rexml (~> 3.2)
172
- regexp_parser (2.8.0)
172
+ regexp_parser (2.8.1)
173
173
  rexml (3.2.5)
174
174
  rspec (3.12.0)
175
175
  rspec-core (~> 3.12.0)
@@ -187,10 +187,10 @@ GEM
187
187
  rspec-xsd (0.1.0)
188
188
  nokogiri (~> 1.6)
189
189
  rspec (~> 3)
190
- rubocop (1.52.0)
190
+ rubocop (1.52.1)
191
191
  json (~> 2.3)
192
192
  parallel (~> 1.10)
193
- parser (>= 3.2.0.0)
193
+ parser (>= 3.2.2.3)
194
194
  rainbow (>= 2.2.2, < 4.0)
195
195
  regexp_parser (>= 1.8, < 3.0)
196
196
  rexml (>= 3.2.5, < 4.0)
@@ -3,12 +3,12 @@
3
3
  module Commonmeta
4
4
  module CrossrefUtils
5
5
  def write_crossref_xml
6
- @crossref_xml ||= Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml|
6
+ @crossref_xml ||= Nokogiri::XML::Builder.new(encoding: "UTF-8") do |xml|
7
7
  xml.doi_batch(crossref_root_attributes) do
8
8
  xml.head do
9
9
  # we use a uuid as batch_id
10
10
  xml.doi_batch_id(SecureRandom.uuid)
11
- xml.timestamp(Time.now.utc.strftime('%Y%m%d%H%M%S'))
11
+ xml.timestamp(Time.now.utc.strftime("%Y%m%d%H%M%S"))
12
12
  xml.depositor do
13
13
  xml.depositor_name(depositor)
14
14
  xml.email_address(email)
@@ -23,12 +23,12 @@ module Commonmeta
23
23
  end
24
24
 
25
25
  def crossref_errors(xml: nil)
26
- filepath = File.expand_path('../../resources/crossref/crossref5.3.1.xsd', __dir__)
27
- File.open(filepath, 'r') do |f|
26
+ filepath = File.expand_path("../../resources/crossref/crossref5.3.1.xsd", __dir__)
27
+ File.open(filepath, "r") do |f|
28
28
  schema = Nokogiri::XML::Schema(f)
29
29
  end
30
30
 
31
- schema.validate(Nokogiri::XML(xml, nil, 'UTF-8')).map(&:to_s).unwrap
31
+ schema.validate(Nokogiri::XML(xml, nil, "UTF-8")).map(&:to_s).unwrap
32
32
  rescue Nokogiri::XML::SyntaxError => e
33
33
  e.message
34
34
  end
@@ -37,9 +37,9 @@ module Commonmeta
37
37
  return xml if doi_from_url(id).blank?
38
38
 
39
39
  case type
40
- when 'JournalArticle'
40
+ when "JournalArticle"
41
41
  insert_journal(xml)
42
- when 'Article'
42
+ when "Article"
43
43
  insert_posted_content(xml)
44
44
  end
45
45
  end
@@ -47,20 +47,21 @@ module Commonmeta
47
47
  def insert_journal(xml)
48
48
  xml.journal do
49
49
  if language.present?
50
- xml.journal_metadata('language' => language[0..1]) do
51
- xml.full_title(container['title'])
50
+ xml.journal_metadata("language" => language[0..1]) do
51
+ xml.full_title(container["title"])
52
52
  end
53
53
  else
54
54
  xml.journal_metadata do
55
- xml.full_title(container['title'])
55
+ xml.full_title(container["title"])
56
56
  end
57
57
  end
58
- xml.journal_article('publication_type' => 'full_text') do
58
+ xml.journal_article("publication_type" => "full_text") do
59
59
  insert_crossref_titles(xml)
60
60
  insert_crossref_creators(xml)
61
61
  insert_crossref_publication_date(xml)
62
62
  insert_crossref_abstract(xml)
63
63
  insert_crossref_issn(xml)
64
+ insert_item_number(xml)
64
65
  insert_crossref_access_indicators(xml)
65
66
  insert_doi_data(xml)
66
67
  insert_citation_list(xml)
@@ -69,7 +70,7 @@ module Commonmeta
69
70
  end
70
71
 
71
72
  def insert_posted_content(xml)
72
- posted_content = { 'type' => 'other', 'language' => language ? language[0..1] : nil }.compact
73
+ posted_content = { "type" => "other", "language" => language ? language[0..1] : nil }.compact
73
74
 
74
75
  xml.posted_content(posted_content) do
75
76
  insert_group_title(xml)
@@ -77,7 +78,7 @@ module Commonmeta
77
78
  insert_crossref_titles(xml)
78
79
  insert_posted_date(xml)
79
80
  insert_institution(xml)
80
- insert_publisher_item(xml)
81
+ insert_item_number(xml)
81
82
  insert_crossref_abstract(xml)
82
83
  insert_crossref_access_indicators(xml)
83
84
  insert_doi_data(xml)
@@ -88,14 +89,14 @@ module Commonmeta
88
89
  def insert_group_title(xml)
89
90
  return xml if subjects.blank?
90
91
 
91
- xml.group_title(subjects.first['subject'].titleize)
92
+ xml.group_title(subjects.first["subject"].titleize)
92
93
  end
93
94
 
94
95
  def insert_crossref_creators(xml)
95
96
  xml.contributors do
96
97
  Array.wrap(creators).each_with_index do |person, index|
97
- xml.person_name('contributor_role' => 'author',
98
- 'sequence' => index.zero? ? 'first' : 'additional') do
98
+ xml.person_name("contributor_role" => "author",
99
+ "sequence" => index.zero? ? "first" : "additional") do
99
100
  insert_crossref_person(xml, person)
100
101
  end
101
102
  end
@@ -103,15 +104,15 @@ module Commonmeta
103
104
  end
104
105
 
105
106
  def insert_crossref_person(xml, person)
106
- xml.given_name(person['givenName']) if person['givenName'].present?
107
- xml.surname(person['familyName']) if person['familyName'].present?
108
- if person.dig('id') && URI.parse(person.dig('id')).host == 'orcid.org'
109
- xml.ORCID(person.dig('id'))
107
+ xml.given_name(person["givenName"]) if person["givenName"].present?
108
+ xml.surname(person["familyName"]) if person["familyName"].present?
109
+ if person.dig("id") && URI.parse(person.dig("id")).host == "orcid.org"
110
+ xml.ORCID(person.dig("id"))
110
111
  end
111
- Array.wrap(person['affiliation']).each do |affiliation|
112
- attributes = { 'affiliationIdentifier' => affiliation['affiliationIdentifier'],
113
- 'affiliationIdentifierScheme' => affiliation['affiliationIdentifierScheme'], 'schemeURI' => affiliation['schemeUri'] }.compact
114
- xml.affiliation(affiliation['name'], attributes)
112
+ Array.wrap(person["affiliation"]).each do |affiliation|
113
+ attributes = { "affiliationIdentifier" => affiliation["affiliationIdentifier"],
114
+ "affiliationIdentifierScheme" => affiliation["affiliationIdentifierScheme"], "schemeURI" => affiliation["schemeUri"] }.compact
115
+ xml.affiliation(affiliation["name"], attributes)
115
116
  end
116
117
  end
117
118
 
@@ -119,7 +120,7 @@ module Commonmeta
119
120
  xml.titles do
120
121
  Array.wrap(titles).each do |title|
121
122
  if title.is_a?(Hash)
122
- xml.title(title['title'])
123
+ xml.title(title["title"])
123
124
  else
124
125
  xml.title(title)
125
126
  end
@@ -130,15 +131,15 @@ module Commonmeta
130
131
  def insert_citation_list(xml)
131
132
  xml.citation_list do
132
133
  Array.wrap(references).each do |ref|
133
- xml.citation('key' => ref['key']) do
134
- xml.journal_article(ref['journal_title']) if ref['journal_title'].present?
135
- xml.author(ref['author']) if ref['author'].present?
136
- xml.volume(ref['volume']) if ref['volume'].present?
137
- xml.first_page(ref['first_page']) if ref['first_page'].present?
138
- xml.cYear(ref['cYear']) if ref['cYear'].present?
139
- xml.article_title(ref['article_title']) if ref['article_title'].present?
140
- xml.doi(ref['doi']) if ref['doi'].present?
141
- xml.unstructured_citation(ref['url']) if ref['url'].present?
134
+ xml.citation("key" => ref["key"]) do
135
+ xml.journal_article(ref["journal_title"]) if ref["journal_title"].present?
136
+ xml.author(ref["author"]) if ref["author"].present?
137
+ xml.volume(ref["volume"]) if ref["volume"].present?
138
+ xml.first_page(ref["first_page"]) if ref["first_page"].present?
139
+ xml.cYear(ref["cYear"]) if ref["cYear"].present?
140
+ xml.article_title(ref["article_title"]) if ref["article_title"].present?
141
+ xml.doi(doi_from_url(ref["doi"])) if ref["doi"].present?
142
+ xml.unstructured_citation(ref["url"]) if ref["url"].present?
142
143
  end
143
144
  end
144
145
  end
@@ -162,12 +163,12 @@ module Commonmeta
162
163
  def insert_crossref_access_indicators(xml)
163
164
  return xml if license.blank?
164
165
 
165
- rights_uri = license['url']
166
+ rights_uri = license["url"]
166
167
 
167
- xml.program('xmlns' => 'http://www.crossref.org/AccessIndicators.xsd',
168
- 'name' => 'AccessIndicators') do
169
- xml.license_ref(rights_uri, 'applies_to' => 'vor')
170
- xml.license_ref(rights_uri, 'applies_to' => 'tdm')
168
+ xml.program("xmlns" => "http://www.crossref.org/AccessIndicators.xsd",
169
+ "name" => "AccessIndicators") do
170
+ xml.license_ref(rights_uri, "applies_to" => "vor")
171
+ xml.license_ref(rights_uri, "applies_to" => "tdm")
171
172
  end
172
173
  end
173
174
 
@@ -203,7 +204,7 @@ module Commonmeta
203
204
  xml.subjects do
204
205
  subjects.each do |subject|
205
206
  if subject.is_a?(Hash)
206
- xml.subject(subject['subject'])
207
+ xml.subject(subject["subject"])
207
208
  else
208
209
  xml.subject(subject)
209
210
  end
@@ -224,11 +225,11 @@ module Commonmeta
224
225
  end
225
226
 
226
227
  def insert_crossref_publication_date(xml)
227
- return xml if date['registered'].blank?
228
+ return xml if date["registered"].blank?
228
229
 
229
- date_ = get_datetime_from_iso8601(date['registered'])
230
+ date_ = get_datetime_from_iso8601(date["registered"])
230
231
 
231
- xml.publication_date('media_type' => 'online') do
232
+ xml.publication_date("media_type" => "online") do
232
233
  xml.month(date_.month) if date_.month.present?
233
234
  xml.day(date_.day) if date_.day.present?
234
235
  xml.year(date_.year) if date_.year.present?
@@ -236,9 +237,9 @@ module Commonmeta
236
237
  end
237
238
 
238
239
  def insert_posted_date(xml)
239
- return xml if date['published'].blank?
240
+ return xml if date["published"].blank?
240
241
 
241
- date_ = get_datetime_from_iso8601(date['published'])
242
+ date_ = get_datetime_from_iso8601(date["published"])
242
243
 
243
244
  xml.posted_date do
244
245
  xml.month(date_.month) if date_.month.present?
@@ -251,21 +252,22 @@ module Commonmeta
251
252
  return xml if publisher.blank?
252
253
 
253
254
  xml.institution do
254
- xml.institution_name(publisher['name'])
255
+ xml.institution_name(publisher["name"])
255
256
  end
256
257
  end
257
258
 
258
- def insert_publisher_item(xml)
259
+ def insert_item_number(xml)
259
260
  return xml if alternate_identifiers.blank?
260
261
 
261
- xml.publisher_item do
262
- alternate_identifiers.each do |alternate_identifier|
263
- attributes = {
264
- 'item_number_type' => alternate_identifier['alternateIdentifierType'] ? alternate_identifier['alternateIdentifierType'].downcase : nil
265
- }.compact
262
+ alternate_identifiers.each do |alternate_identifier|
263
+ attributes = {
264
+ "item_number_type" => alternate_identifier["alternateIdentifierType"] ? alternate_identifier["alternateIdentifierType"].downcase : nil,
265
+ }.compact
266
266
 
267
- xml.item_number(alternate_identifier['alternateIdentifier'], attributes)
268
- end
267
+ # remove dashes from UUIDs, as item_number can only be 32 characters long
268
+ alternate_identifier["alternateIdentifier"].gsub!("-", "") if alternate_identifier["alternateIdentifierType"] == "UUID"
269
+
270
+ xml.item_number(alternate_identifier["alternateIdentifier"], attributes)
269
271
  end
270
272
  end
271
273
 
@@ -275,9 +277,9 @@ module Commonmeta
275
277
  xml.doi_data do
276
278
  xml.doi(doi_from_url(id).downcase)
277
279
  xml.resource(url)
278
- xml.collection('property' => 'text-mining') do
280
+ xml.collection("property" => "text-mining") do
279
281
  xml.item do
280
- xml.resource(url, 'mime_type' => 'text/html')
282
+ xml.resource(url, "mime_type" => "text/html")
281
283
  end
282
284
  end
283
285
  end
@@ -292,26 +294,26 @@ module Commonmeta
292
294
  r = rights
293
295
  else
294
296
  r = {}
295
- r['rights'] = rights
296
- r['rightsUri'] = normalize_id(rights)
297
+ r["rights"] = rights
298
+ r["rightsUri"] = normalize_id(rights)
297
299
  end
298
300
 
299
301
  attributes = {
300
- 'rightsURI' => r['rightsUri'],
301
- 'rightsIdentifier' => r['rightsIdentifier'],
302
- 'rightsIdentifierScheme' => r['rightsIdentifierScheme'],
303
- 'schemeURI' => r['schemeUri'],
304
- 'xml:lang' => r['lang']
302
+ "rightsURI" => r["rightsUri"],
303
+ "rightsIdentifier" => r["rightsIdentifier"],
304
+ "rightsIdentifierScheme" => r["rightsIdentifierScheme"],
305
+ "schemeURI" => r["schemeUri"],
306
+ "xml:lang" => r["lang"],
305
307
  }.compact
306
308
 
307
- xml.rights(r['rights'], attributes)
309
+ xml.rights(r["rights"], attributes)
308
310
  end
309
311
  end
310
312
 
311
313
  def insert_crossref_issn(xml)
312
- issn = if container.to_h.fetch('identifierType', nil) == 'ISSN'
313
- container.to_h.fetch('identifier', nil)
314
- end
314
+ issn = if container.to_h.fetch("identifierType", nil) == "ISSN"
315
+ container.to_h.fetch("identifier", nil)
316
+ end
315
317
 
316
318
  return xml if issn.blank?
317
319
 
@@ -325,22 +327,22 @@ module Commonmeta
325
327
  d = descriptions.first
326
328
  else
327
329
  d = {}
328
- d['description'] = descriptions.first
330
+ d["description"] = descriptions.first
329
331
  end
330
332
 
331
- xml.abstract('xmlns' => 'http://www.ncbi.nlm.nih.gov/JATS1') do
332
- xml.p(d['description'])
333
+ xml.abstract("xmlns" => "http://www.ncbi.nlm.nih.gov/JATS1") do
334
+ xml.p(d["description"])
333
335
  end
334
336
  end
335
337
 
336
338
  def crossref_root_attributes
337
- { 'xmlns:xsi': 'http://www.w3.org/2001/XMLSchema-instance',
338
- 'xsi:schemaLocation': 'http://www.crossref.org/schema/5.3.1 https://www.crossref.org/schemas/crossref5.3.1.xsd',
339
- xmlns: 'http://www.crossref.org/schema/5.3.1',
340
- 'xmlns:jats': 'http://www.ncbi.nlm.nih.gov/JATS1',
341
- 'xmlns:fr': 'http://www.crossref.org/fundref.xsd',
342
- 'xmlns:mml': 'http://www.w3.org/1998/Math/MathML',
343
- version: '5.3.1' }
339
+ { 'xmlns:xsi': "http://www.w3.org/2001/XMLSchema-instance",
340
+ 'xsi:schemaLocation': "http://www.crossref.org/schema/5.3.1 https://www.crossref.org/schemas/crossref5.3.1.xsd",
341
+ xmlns: "http://www.crossref.org/schema/5.3.1",
342
+ 'xmlns:jats': "http://www.ncbi.nlm.nih.gov/JATS1",
343
+ 'xmlns:fr': "http://www.crossref.org/fundref.xsd",
344
+ 'xmlns:mml': "http://www.w3.org/1998/Math/MathML",
345
+ version: "5.3.1" }
344
346
  end
345
347
  end
346
348
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Commonmeta
4
- VERSION = '3.2.7'
4
+ VERSION = '3.2.9'
5
5
  end
@@ -217,8 +217,8 @@ describe Commonmeta::Metadata, vcr: true do
217
217
  expect(crossref_xml.dig("titles",
218
218
  "title")).to eq("The Research Software Alliance (ReSA)")
219
219
  expect(crossref_xml.dig("citation_list", "citation").length).to eq(11)
220
- expect(crossref_xml.dig("citation_list", "citation").last).to eq("doi"=>"https://doi.org/10.5281/zenodo.3699950", "key"=>"ref11")
221
- expect(crossref_xml.dig('publisher_item', 'item_number')).to eq("__content__"=>"954f8138-0ecd-4090-87c5-cef1297f1470", "item_number_type"=>"uuid")
220
+ expect(crossref_xml.dig("citation_list", "citation").last).to eq("doi"=>"10.5281/zenodo.3699950", "key"=>"ref11")
221
+ expect(crossref_xml.dig('item_number')).to eq("__content__"=>"954f81380ecd409087c5cef1297f1470", "item_number_type"=>"uuid")
222
222
  end
223
223
 
224
224
  it "json_feed_item from rogue scholar with doi" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: commonmeta-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.2.7
4
+ version: 3.2.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martin Fenner
@@ -1419,7 +1419,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
1419
1419
  - !ruby/object:Gem::Version
1420
1420
  version: '0'
1421
1421
  requirements: []
1422
- rubygems_version: 3.4.13
1422
+ rubygems_version: 3.4.14
1423
1423
  signing_key:
1424
1424
  specification_version: 4
1425
1425
  summary: Ruby client library for conversion of scholarly metadata