commonmeta-ruby 3.2.9 → 3.2.10

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: e05b0fedfc5074f16bf6b04dd73150dcae6f75d3392dd3abe82bd52eafea1531
4
- data.tar.gz: 12700c970a507ae36013334f0e942413f0092d6bf4735aa27b6709a12bc7d84e
3
+ metadata.gz: 7def7640d11d8d88a8a9fb8b18394cd88d5de57e44832c9b05d7c23213857970
4
+ data.tar.gz: 9adc93a35e9c9060ddd3bda1bb859e88f45a00d31454af13c54b54d4c96209b8
5
5
  SHA512:
6
- metadata.gz: 74c86b93355c0337df66c15d519f51f5336f2f883924f1c6b2edad8b6460d509d2e3443653d8545b201004e6407afffe79a505044f8cae88bbeede9f25e16171
7
- data.tar.gz: 903e7a8af1ec1025f8e7125ed96eea07f0994ed71f1473c5111947e5d7c8c1e42c5dcbe2b0562e261f60515c374c5f23e1d593cf448b9a87962cd4f3c831e2a3
6
+ metadata.gz: 61ab2849532d1967e78111a68eec7c4ece6c1cbb968ae705fde933e11dab50079a4f441a4ab4c3acfe2e6d5e9d76dd1496d7b2092244cde2e5a0d588c8747b0d
7
+ data.tar.gz: cd470bf78ce018a78d89133ec5e17ab5dc6f3f35f982cc0e26736b24661bb316b6b9491e93ff897d98773ab027264b4532d367da2c03e546331ee20600c12a24
data/Gemfile.lock CHANGED
@@ -1,10 +1,10 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- commonmeta-ruby (3.2.9)
4
+ commonmeta-ruby (3.2.10)
5
5
  activesupport (>= 4.2.5, < 8.0)
6
6
  addressable (~> 2.8.1, < 2.8.2)
7
- base32-url (>= 0.5.0, < 1)
7
+ base32-url (>= 0.7.0, < 1)
8
8
  bibtex-ruby (~> 6.0)
9
9
  builder (~> 3.2, >= 3.2.4)
10
10
  citeproc-ruby (~> 2.0)
@@ -34,7 +34,8 @@ GEM
34
34
  addressable (2.8.1)
35
35
  public_suffix (>= 2.0.2, < 6.0)
36
36
  ast (2.4.2)
37
- base32-url (0.6.0)
37
+ base32-url (0.7.0)
38
+ uuidtools (~> 2.1, >= 2.1.5)
38
39
  bibtex-ruby (6.0.0)
39
40
  latex-decode (~> 0.0)
40
41
  builder (3.2.4)
@@ -241,6 +242,7 @@ GEM
241
242
  unf_ext (0.0.8.2)
242
243
  unicode-display_width (2.4.2)
243
244
  unicode-types (1.8.0)
245
+ uuidtools (2.2.0)
244
246
  vcr (6.1.0)
245
247
  webmock (3.18.1)
246
248
  addressable (>= 2.8.0)
data/commonmeta.gemspec CHANGED
@@ -20,7 +20,7 @@ Gem::Specification.new do |s|
20
20
  # Declare dependencies here, rather than in the Gemfile
21
21
  s.add_dependency 'activesupport', '>= 4.2.5', '< 8.0'
22
22
  s.add_dependency 'addressable', '~> 2.8.1', '< 2.8.2'
23
- s.add_dependency 'base32-url', '>= 0.5.0', '< 1'
23
+ s.add_dependency 'base32-url', '>= 0.7.0', '< 1'
24
24
  s.add_dependency 'bibtex-ruby', '~> 6.0'
25
25
  s.add_dependency 'builder', '~> 3.2', '>= 3.2.4'
26
26
  s.add_dependency 'citeproc-ruby', '~> 2.0'
@@ -264,8 +264,8 @@ module Commonmeta
264
264
  "item_number_type" => alternate_identifier["alternateIdentifierType"] ? alternate_identifier["alternateIdentifierType"].downcase : nil,
265
265
  }.compact
266
266
 
267
- # remove dashes from UUIDs, as item_number can only be 32 characters long
268
- alternate_identifier["alternateIdentifier"].gsub!("-", "") if alternate_identifier["alternateIdentifierType"] == "UUID"
267
+ # convert UUIDs into base32 encoded strings, as item_number can only be 32 characters long (UUIDv4 is 36 characters long)
268
+ alternate_identifier["alternateIdentifier"] = Base32::URL.encode_uuid(alternate_identifier["alternateIdentifier"], split: 7, checksum: true) if alternate_identifier["alternateIdentifierType"] == "UUID"
269
269
 
270
270
  xml.item_number(alternate_identifier["alternateIdentifier"], attributes)
271
271
  end
@@ -1367,19 +1367,27 @@ module Commonmeta
1367
1367
  end
1368
1368
  end
1369
1369
 
1370
- def encode_doi(prefix)
1370
+ def encode_doi(prefix, options = {})
1371
1371
  # DOI suffix is a generated from a random number, encoded in base32
1372
1372
  # suffix has 8 digits plus two checksum digits. With base32 there are
1373
1373
  # 32 possible digits, so 8 digits gives 32^8 possible combinations
1374
- random_int = SecureRandom.random_number(32 ** 7..(32 ** 8) - 1)
1375
- suffix = Base32::URL.encode(random_int, checksum: true)
1376
- str = "#{suffix[0, 5]}-#{suffix[5, 10]}"
1374
+ if options[:uuid]
1375
+ str = Base32::URL.encode_uuid(options[:uuid], split: 7, checksum: true)
1376
+ else
1377
+ random_int = SecureRandom.random_number(32 ** 7..(32 ** 8) - 1)
1378
+ suffix = Base32::URL.encode(random_int, checksum: true)
1379
+ str = "#{suffix[0, 5]}-#{suffix[5, 10]}"
1380
+ end
1377
1381
  "https://doi.org/#{prefix}/#{str}"
1378
1382
  end
1379
1383
 
1380
- def decode_doi(doi)
1384
+ def decode_doi(doi, options = {})
1381
1385
  suffix = doi.split("/", 5).last
1382
- Base32::URL.decode(suffix)
1386
+ if options[:uuid]
1387
+ Base32::URL.decode_uuid(suffix)
1388
+ else
1389
+ Base32::URL.decode(suffix)
1390
+ end
1383
1391
  end
1384
1392
 
1385
1393
  def encode_container_id
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Commonmeta
4
- VERSION = '3.2.9'
4
+ VERSION = '3.2.10'
5
5
  end
data/spec/utils_spec.rb CHANGED
@@ -650,6 +650,15 @@ describe Commonmeta::Metadata, vcr: true do
650
650
  expect(response.length).to eq(36)
651
651
  end
652
652
 
653
+ it "encode doi from uuid" do
654
+ prefix = "10.53731"
655
+ uuid = "c3095752-2af0-40a4-a229-3ceb7424bce2"
656
+ response = subject.encode_doi(prefix, uuid: uuid)
657
+ puts response
658
+ expect(response).to match(%r{#{prefix}/[a-z0-9]+})
659
+ expect(response.length).to eq(56)
660
+ end
661
+
653
662
  it "decode doi" do
654
663
  doi = "https://doi.org/10.53731/revzwnv-rpd913d-8drwz"
655
664
  response = subject.decode_doi(doi)
@@ -661,6 +670,12 @@ describe Commonmeta::Metadata, vcr: true do
661
670
  response = subject.decode_doi(doi)
662
671
  expect(response).to eq(30_198_793_950_250_854_133_601_922_433)
663
672
  end
673
+
674
+ it "decode doi to uuid" do
675
+ doi = "https://doi.org/10.53731/6315bn4-aqg82ja-4a9wxdt-29f7279"
676
+ response = subject.decode_doi(doi, uuid: true)
677
+ expect(response).to eq('255d48ab-c102-9288-a4f3-add092f388e9')
678
+ end
664
679
  end
665
680
 
666
681
  context "random id" do
@@ -191,6 +191,7 @@ describe Commonmeta::Metadata, vcr: true do
191
191
  "person_name")).first).to eq("ORCID" => "https://orcid.org/0000-0001-9165-2757", "contributor_role" => "author", "given_name" => "Esha", "sequence" => "first", "surname" => "Datta")
192
192
  expect(crossref_xml.dig("titles",
193
193
  "title")).to eq("Attempts at automating journal subject classification")
194
+ expect(crossref_xml.dig('item_number')).to eq("__content__"=>"2x2kzts-edc9rgb-vg6s4j6-z9t0d56", "item_number_type"=>"uuid")
194
195
  end
195
196
 
196
197
  it "json_feed_item with references" do
@@ -218,7 +219,7 @@ describe Commonmeta::Metadata, vcr: true do
218
219
  "title")).to eq("The Research Software Alliance (ReSA)")
219
220
  expect(crossref_xml.dig("citation_list", "citation").length).to eq(11)
220
221
  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
+ expect(crossref_xml.dig('item_number')).to eq("__content__"=>"4n9y0kg-3pd8288-fheey4m-qy53g93", "item_number_type"=>"uuid")
222
223
  end
223
224
 
224
225
  it "json_feed_item from rogue scholar with doi" do
@@ -242,6 +243,7 @@ describe Commonmeta::Metadata, vcr: true do
242
243
  "person_name")).first).to eq("ORCID"=>"https://orcid.org/0000-0003-3334-2771", "contributor_role"=>"author", "given_name"=>"Heinz", "sequence"=>"first", "surname"=>"Pampel")
243
244
  expect(crossref_xml.dig("titles",
244
245
  "title")).to eq("EU-Mitgliedstaaten betonen die Rolle von wissenschaftsgeleiteten Open-Access-Modellen jenseits von APCs")
246
+ expect(crossref_xml.dig('item_number')).to eq("__content__"=>"way2ng-4s48j9v-hbw4rjf-aqh9f33", "item_number_type"=>"uuid")
245
247
  end
246
248
  end
247
249
  end
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.9
4
+ version: 3.2.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martin Fenner
@@ -56,7 +56,7 @@ dependencies:
56
56
  requirements:
57
57
  - - ">="
58
58
  - !ruby/object:Gem::Version
59
- version: 0.5.0
59
+ version: 0.7.0
60
60
  - - "<"
61
61
  - !ruby/object:Gem::Version
62
62
  version: '1'
@@ -66,7 +66,7 @@ dependencies:
66
66
  requirements:
67
67
  - - ">="
68
68
  - !ruby/object:Gem::Version
69
- version: 0.5.0
69
+ version: 0.7.0
70
70
  - - "<"
71
71
  - !ruby/object:Gem::Version
72
72
  version: '1'