commonmeta-ruby 3.2.9 → 3.2.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +5 -3
- data/commonmeta.gemspec +1 -1
- data/lib/commonmeta/crossref_utils.rb +2 -2
- data/lib/commonmeta/utils.rb +14 -6
- data/lib/commonmeta/version.rb +1 -1
- data/spec/utils_spec.rb +15 -0
- data/spec/writers/crossref_xml_writer_spec.rb +3 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7def7640d11d8d88a8a9fb8b18394cd88d5de57e44832c9b05d7c23213857970
|
4
|
+
data.tar.gz: 9adc93a35e9c9060ddd3bda1bb859e88f45a00d31454af13c54b54d4c96209b8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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.
|
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.
|
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.
|
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.
|
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
|
-
#
|
268
|
-
alternate_identifier["alternateIdentifier"].
|
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
|
data/lib/commonmeta/utils.rb
CHANGED
@@ -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
|
-
|
1375
|
-
|
1376
|
-
|
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
|
-
|
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
|
data/lib/commonmeta/version.rb
CHANGED
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__"=>"
|
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.
|
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.
|
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.
|
69
|
+
version: 0.7.0
|
70
70
|
- - "<"
|
71
71
|
- !ruby/object:Gem::Version
|
72
72
|
version: '1'
|