commonmeta-ruby 3.2.9 → 3.2.11
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 +4 -4
- data/Gemfile.lock +5 -3
- data/commonmeta.gemspec +1 -1
- data/lib/commonmeta/cli.rb +6 -0
- data/lib/commonmeta/crossref_utils.rb +2 -2
- data/lib/commonmeta/readers/json_feed_reader.rb +11 -0
- data/lib/commonmeta/utils.rb +18 -6
- data/lib/commonmeta/version.rb +1 -1
- data/spec/cli_spec.rb +6 -5
- data/spec/readers/json_feed_reader_spec.rb +6 -0
- data/spec/utils_spec.rb +14 -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: a0921f5f53d0f34c3828253a5b5bca784a18a5efdd956083e145c80efd479b9d
|
4
|
+
data.tar.gz: 90f16c47ef51a0e0136be4d16e1558db2c916e89cd99c71ca9dccaa394d67a67
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ce11b5a931ac2c383b30a600bb5551e0451ad8221656f7235833c3cb724aabfca17afbfbd67f27fe6c0df457da13e2a812d73f57d4061bec7452b2e6e7f794bd
|
7
|
+
data.tar.gz: 6e35050730a313ffbdd37f88809d52da14e3d371efd52a24960adbe906d017a8a621479982e881359d129a10ef59bedae02e6d5383f5119d6d8b9be2fba29829
|
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.11)
|
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'
|
data/lib/commonmeta/cli.rb
CHANGED
@@ -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
|
@@ -109,6 +109,17 @@ module Commonmeta
|
|
109
109
|
posts = JSON.parse(response.body.to_s)
|
110
110
|
posts.map { |post| post["uuid"] }.first
|
111
111
|
end
|
112
|
+
|
113
|
+
def get_json_feed_by_blog(blog_id)
|
114
|
+
# get all JSON Feed items from a particular blog
|
115
|
+
|
116
|
+
url = json_feed_by_blog_url(blog_id)
|
117
|
+
response = HTTP.get(url)
|
118
|
+
return { "string" => nil, "state" => "not_found" } unless response.status.success?
|
119
|
+
|
120
|
+
blog = JSON.parse(response.body.to_s)
|
121
|
+
blog["items"].map { |item| item["uuid"] }.join('\n')
|
122
|
+
end
|
112
123
|
end
|
113
124
|
end
|
114
125
|
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
|
@@ -1396,5 +1404,9 @@ module Commonmeta
|
|
1396
1404
|
def json_feed_unregistered_url
|
1397
1405
|
"https://rogue-scholar.org/api/posts/unregistered"
|
1398
1406
|
end
|
1407
|
+
|
1408
|
+
def json_feed_by_blog_url(blog_id)
|
1409
|
+
"https://rogue-scholar.org/api/blogs/#{blog_id}"
|
1410
|
+
end
|
1399
1411
|
end
|
1400
1412
|
end
|
data/lib/commonmeta/version.rb
CHANGED
data/spec/cli_spec.rb
CHANGED
@@ -341,9 +341,10 @@ describe Commonmeta::CLI do
|
|
341
341
|
end
|
342
342
|
end
|
343
343
|
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
344
|
+
describe "json_feed", vcr: true do
|
345
|
+
it "json_feed_by_blog" do
|
346
|
+
input = "tyfqw20"
|
347
|
+
expect { subject.json_feed_by_blog input }.to output(/3e1278f6-e7c0-43e1-bb54-6829e1344c0d/).to_stdout
|
348
|
+
end
|
349
|
+
end
|
349
350
|
end
|
@@ -207,5 +207,11 @@ describe Commonmeta::Metadata, vcr: true do
|
|
207
207
|
response = subject.get_json_feed_unregistered
|
208
208
|
expect(response).to eq("ca2a7df4-f3b9-487c-82e9-27f54de75ea8")
|
209
209
|
end
|
210
|
+
|
211
|
+
it 'by blog_id' do
|
212
|
+
response = subject.get_json_feed_by_blog('tyfqw20').split('\n')
|
213
|
+
expect(response.length).to eq(25)
|
214
|
+
expect(response.first).to eq("3e1278f6-e7c0-43e1-bb54-6829e1344c0d")
|
215
|
+
end
|
210
216
|
end
|
211
217
|
end
|
data/spec/utils_spec.rb
CHANGED
@@ -650,6 +650,14 @@ 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
|
+
expect(response).to match(%r{#{prefix}/[a-z0-9]+})
|
658
|
+
expect(response.length).to eq(56)
|
659
|
+
end
|
660
|
+
|
653
661
|
it "decode doi" do
|
654
662
|
doi = "https://doi.org/10.53731/revzwnv-rpd913d-8drwz"
|
655
663
|
response = subject.decode_doi(doi)
|
@@ -661,6 +669,12 @@ describe Commonmeta::Metadata, vcr: true do
|
|
661
669
|
response = subject.decode_doi(doi)
|
662
670
|
expect(response).to eq(30_198_793_950_250_854_133_601_922_433)
|
663
671
|
end
|
672
|
+
|
673
|
+
it "decode doi to uuid" do
|
674
|
+
doi = "https://doi.org/10.53731/6315bn4-aqg82ja-4a9wxdt-29f7279"
|
675
|
+
response = subject.decode_doi(doi, uuid: true)
|
676
|
+
expect(response).to eq('255d48ab-c102-9288-a4f3-add092f388e9')
|
677
|
+
end
|
664
678
|
end
|
665
679
|
|
666
680
|
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.11
|
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'
|