commonmeta-ruby 3.2.8 → 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: c4efef118736aa6738cde85e83a7074cfc0746339c6ee4a1c9d7fb464253a8c7
4
- data.tar.gz: 02665e140aae9c74d6bab0e0d09472992e1342d74784d33153104dba316fe3f9
3
+ metadata.gz: e05b0fedfc5074f16bf6b04dd73150dcae6f75d3392dd3abe82bd52eafea1531
4
+ data.tar.gz: 12700c970a507ae36013334f0e942413f0092d6bf4735aa27b6709a12bc7d84e
5
5
  SHA512:
6
- metadata.gz: 1beb77ff61c956fb294b7c072151970326d62a2cc9d9cfe6a48ff6d652a24829f8bf832f9442c970ba09e6c589fc0d73ba0cef6e5f1852d30e2205da47a06732
7
- data.tar.gz: 20608ff7d3a77b9a40c74ab4c5fc0e16377714d56bb60859c00a3c3e1378ea2484943c9a1ad25b062d454896278df81ca75a4426bac626b81cbf4ad23aaf1491
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.8)
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)
@@ -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,21 +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_publisher_item(xml)
64
+ insert_item_number(xml)
65
65
  insert_crossref_access_indicators(xml)
66
66
  insert_doi_data(xml)
67
67
  insert_citation_list(xml)
@@ -70,7 +70,7 @@ module Commonmeta
70
70
  end
71
71
 
72
72
  def insert_posted_content(xml)
73
- posted_content = { 'type' => 'other', 'language' => language ? language[0..1] : nil }.compact
73
+ posted_content = { "type" => "other", "language" => language ? language[0..1] : nil }.compact
74
74
 
75
75
  xml.posted_content(posted_content) do
76
76
  insert_group_title(xml)
@@ -78,7 +78,7 @@ module Commonmeta
78
78
  insert_crossref_titles(xml)
79
79
  insert_posted_date(xml)
80
80
  insert_institution(xml)
81
- insert_publisher_item(xml)
81
+ insert_item_number(xml)
82
82
  insert_crossref_abstract(xml)
83
83
  insert_crossref_access_indicators(xml)
84
84
  insert_doi_data(xml)
@@ -89,14 +89,14 @@ module Commonmeta
89
89
  def insert_group_title(xml)
90
90
  return xml if subjects.blank?
91
91
 
92
- xml.group_title(subjects.first['subject'].titleize)
92
+ xml.group_title(subjects.first["subject"].titleize)
93
93
  end
94
94
 
95
95
  def insert_crossref_creators(xml)
96
96
  xml.contributors do
97
97
  Array.wrap(creators).each_with_index do |person, index|
98
- xml.person_name('contributor_role' => 'author',
99
- 'sequence' => index.zero? ? 'first' : 'additional') do
98
+ xml.person_name("contributor_role" => "author",
99
+ "sequence" => index.zero? ? "first" : "additional") do
100
100
  insert_crossref_person(xml, person)
101
101
  end
102
102
  end
@@ -104,15 +104,15 @@ module Commonmeta
104
104
  end
105
105
 
106
106
  def insert_crossref_person(xml, person)
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'))
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"))
111
111
  end
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)
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)
116
116
  end
117
117
  end
118
118
 
@@ -120,7 +120,7 @@ module Commonmeta
120
120
  xml.titles do
121
121
  Array.wrap(titles).each do |title|
122
122
  if title.is_a?(Hash)
123
- xml.title(title['title'])
123
+ xml.title(title["title"])
124
124
  else
125
125
  xml.title(title)
126
126
  end
@@ -131,15 +131,15 @@ module Commonmeta
131
131
  def insert_citation_list(xml)
132
132
  xml.citation_list do
133
133
  Array.wrap(references).each do |ref|
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?
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?
143
143
  end
144
144
  end
145
145
  end
@@ -163,12 +163,12 @@ module Commonmeta
163
163
  def insert_crossref_access_indicators(xml)
164
164
  return xml if license.blank?
165
165
 
166
- rights_uri = license['url']
166
+ rights_uri = license["url"]
167
167
 
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')
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")
172
172
  end
173
173
  end
174
174
 
@@ -204,7 +204,7 @@ module Commonmeta
204
204
  xml.subjects do
205
205
  subjects.each do |subject|
206
206
  if subject.is_a?(Hash)
207
- xml.subject(subject['subject'])
207
+ xml.subject(subject["subject"])
208
208
  else
209
209
  xml.subject(subject)
210
210
  end
@@ -225,11 +225,11 @@ module Commonmeta
225
225
  end
226
226
 
227
227
  def insert_crossref_publication_date(xml)
228
- return xml if date['registered'].blank?
228
+ return xml if date["registered"].blank?
229
229
 
230
- date_ = get_datetime_from_iso8601(date['registered'])
230
+ date_ = get_datetime_from_iso8601(date["registered"])
231
231
 
232
- xml.publication_date('media_type' => 'online') do
232
+ xml.publication_date("media_type" => "online") do
233
233
  xml.month(date_.month) if date_.month.present?
234
234
  xml.day(date_.day) if date_.day.present?
235
235
  xml.year(date_.year) if date_.year.present?
@@ -237,9 +237,9 @@ module Commonmeta
237
237
  end
238
238
 
239
239
  def insert_posted_date(xml)
240
- return xml if date['published'].blank?
240
+ return xml if date["published"].blank?
241
241
 
242
- date_ = get_datetime_from_iso8601(date['published'])
242
+ date_ = get_datetime_from_iso8601(date["published"])
243
243
 
244
244
  xml.posted_date do
245
245
  xml.month(date_.month) if date_.month.present?
@@ -252,24 +252,22 @@ module Commonmeta
252
252
  return xml if publisher.blank?
253
253
 
254
254
  xml.institution do
255
- xml.institution_name(publisher['name'])
255
+ xml.institution_name(publisher["name"])
256
256
  end
257
257
  end
258
258
 
259
- def insert_publisher_item(xml)
259
+ def insert_item_number(xml)
260
260
  return xml if alternate_identifiers.blank?
261
261
 
262
- xml.publisher_item do
263
- alternate_identifiers.each do |alternate_identifier|
264
- attributes = {
265
- 'item_number_type' => alternate_identifier['alternateIdentifierType'] ? alternate_identifier['alternateIdentifierType'].downcase : nil
266
- }.compact
267
-
268
- # remove dashes from UUIDs, as item_number can only be 32 characters long
269
- alternate_identifier['alternateIdentifier'].gsub!('-', '') if alternate_identifier['alternateIdentifierType'] == 'UUID'
262
+ alternate_identifiers.each do |alternate_identifier|
263
+ attributes = {
264
+ "item_number_type" => alternate_identifier["alternateIdentifierType"] ? alternate_identifier["alternateIdentifierType"].downcase : nil,
265
+ }.compact
270
266
 
271
- xml.item_number(alternate_identifier['alternateIdentifier'], attributes)
272
- 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)
273
271
  end
274
272
  end
275
273
 
@@ -279,9 +277,9 @@ module Commonmeta
279
277
  xml.doi_data do
280
278
  xml.doi(doi_from_url(id).downcase)
281
279
  xml.resource(url)
282
- xml.collection('property' => 'text-mining') do
280
+ xml.collection("property" => "text-mining") do
283
281
  xml.item do
284
- xml.resource(url, 'mime_type' => 'text/html')
282
+ xml.resource(url, "mime_type" => "text/html")
285
283
  end
286
284
  end
287
285
  end
@@ -296,26 +294,26 @@ module Commonmeta
296
294
  r = rights
297
295
  else
298
296
  r = {}
299
- r['rights'] = rights
300
- r['rightsUri'] = normalize_id(rights)
297
+ r["rights"] = rights
298
+ r["rightsUri"] = normalize_id(rights)
301
299
  end
302
300
 
303
301
  attributes = {
304
- 'rightsURI' => r['rightsUri'],
305
- 'rightsIdentifier' => r['rightsIdentifier'],
306
- 'rightsIdentifierScheme' => r['rightsIdentifierScheme'],
307
- 'schemeURI' => r['schemeUri'],
308
- '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"],
309
307
  }.compact
310
308
 
311
- xml.rights(r['rights'], attributes)
309
+ xml.rights(r["rights"], attributes)
312
310
  end
313
311
  end
314
312
 
315
313
  def insert_crossref_issn(xml)
316
- issn = if container.to_h.fetch('identifierType', nil) == 'ISSN'
317
- container.to_h.fetch('identifier', nil)
318
- end
314
+ issn = if container.to_h.fetch("identifierType", nil) == "ISSN"
315
+ container.to_h.fetch("identifier", nil)
316
+ end
319
317
 
320
318
  return xml if issn.blank?
321
319
 
@@ -329,22 +327,22 @@ module Commonmeta
329
327
  d = descriptions.first
330
328
  else
331
329
  d = {}
332
- d['description'] = descriptions.first
330
+ d["description"] = descriptions.first
333
331
  end
334
332
 
335
- xml.abstract('xmlns' => 'http://www.ncbi.nlm.nih.gov/JATS1') do
336
- xml.p(d['description'])
333
+ xml.abstract("xmlns" => "http://www.ncbi.nlm.nih.gov/JATS1") do
334
+ xml.p(d["description"])
337
335
  end
338
336
  end
339
337
 
340
338
  def crossref_root_attributes
341
- { 'xmlns:xsi': 'http://www.w3.org/2001/XMLSchema-instance',
342
- 'xsi:schemaLocation': 'http://www.crossref.org/schema/5.3.1 https://www.crossref.org/schemas/crossref5.3.1.xsd',
343
- xmlns: 'http://www.crossref.org/schema/5.3.1',
344
- 'xmlns:jats': 'http://www.ncbi.nlm.nih.gov/JATS1',
345
- 'xmlns:fr': 'http://www.crossref.org/fundref.xsd',
346
- 'xmlns:mml': 'http://www.w3.org/1998/Math/MathML',
347
- 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" }
348
346
  end
349
347
  end
350
348
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Commonmeta
4
- VERSION = '3.2.8'
4
+ VERSION = '3.2.9'
5
5
  end
@@ -218,7 +218,7 @@ describe Commonmeta::Metadata, vcr: true do
218
218
  "title")).to eq("The Research Software Alliance (ReSA)")
219
219
  expect(crossref_xml.dig("citation_list", "citation").length).to eq(11)
220
220
  expect(crossref_xml.dig("citation_list", "citation").last).to eq("doi"=>"10.5281/zenodo.3699950", "key"=>"ref11")
221
- expect(crossref_xml.dig('publisher_item', 'item_number')).to eq("__content__"=>"954f81380ecd409087c5cef1297f1470", "item_number_type"=>"uuid")
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.8
4
+ version: 3.2.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martin Fenner