commonmeta-ruby 3.2.7 → 3.2.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 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