briard 2.4.1 → 2.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/codeql-analysis.yml +72 -0
- data/.github/workflows/rubocop.yml +50 -0
- data/.rubocop.yml +144 -620
- data/.rubocop_todo.yml +76 -0
- data/CHANGELOG.md +22 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +43 -6
- data/Rakefile +1 -1
- data/{bolognese.gemspec → briard.gemspec} +46 -38
- data/lib/briard/array.rb +2 -2
- data/lib/briard/author_utils.rb +79 -71
- data/lib/briard/cli.rb +12 -13
- data/lib/briard/crossref_utils.rb +73 -61
- data/lib/briard/datacite_utils.rb +132 -106
- data/lib/briard/doi_utils.rb +10 -10
- data/lib/briard/metadata.rb +96 -106
- data/lib/briard/metadata_utils.rb +87 -78
- data/lib/briard/readers/bibtex_reader.rb +65 -65
- data/lib/briard/readers/cff_reader.rb +88 -70
- data/lib/briard/readers/citeproc_reader.rb +90 -84
- data/lib/briard/readers/codemeta_reader.rb +68 -50
- data/lib/briard/readers/crosscite_reader.rb +2 -2
- data/lib/briard/readers/crossref_reader.rb +249 -210
- data/lib/briard/readers/datacite_json_reader.rb +3 -3
- data/lib/briard/readers/datacite_reader.rb +225 -189
- data/lib/briard/readers/npm_reader.rb +49 -42
- data/lib/briard/readers/ris_reader.rb +82 -80
- data/lib/briard/readers/schema_org_reader.rb +182 -159
- data/lib/briard/string.rb +1 -1
- data/lib/briard/utils.rb +4 -4
- data/lib/briard/version.rb +3 -1
- data/lib/briard/whitelist_scrubber.rb +11 -4
- data/lib/briard/writers/bibtex_writer.rb +14 -8
- data/lib/briard/writers/cff_writer.rb +33 -26
- data/lib/briard/writers/codemeta_writer.rb +19 -15
- data/lib/briard/writers/csv_writer.rb +6 -4
- data/lib/briard/writers/datacite_json_writer.rb +8 -2
- data/lib/briard/writers/jats_writer.rb +33 -28
- data/lib/briard/writers/rdf_xml_writer.rb +1 -1
- data/lib/briard/writers/ris_writer.rb +30 -18
- data/lib/briard/writers/turtle_writer.rb +1 -1
- data/lib/briard.rb +6 -6
- data/rubocop.sarif +0 -0
- data/spec/array_spec.rb +5 -5
- data/spec/author_utils_spec.rb +151 -132
- data/spec/datacite_utils_spec.rb +135 -83
- data/spec/doi_utils_spec.rb +168 -164
- data/spec/find_from_format_spec.rb +69 -69
- data/spec/fixtures/vcr_cassettes/Briard_Metadata/sanitize/onlies_keep_specific_tags.yml +65 -0
- data/spec/fixtures/vcr_cassettes/Briard_Metadata/sanitize/removes_a_tags.yml +65 -0
- data/spec/metadata_spec.rb +91 -90
- data/spec/readers/bibtex_reader_spec.rb +43 -38
- data/spec/readers/cff_reader_spec.rb +165 -153
- data/spec/readers/citeproc_reader_spec.rb +45 -40
- data/spec/readers/codemeta_reader_spec.rb +128 -115
- data/spec/readers/crosscite_reader_spec.rb +34 -24
- data/spec/readers/crossref_reader_spec.rb +1098 -939
- data/spec/readers/datacite_json_reader_spec.rb +53 -40
- data/spec/readers/datacite_reader_spec.rb +1541 -1337
- data/spec/readers/npm_reader_spec.rb +48 -43
- data/spec/readers/ris_reader_spec.rb +53 -47
- data/spec/readers/schema_org_reader_spec.rb +329 -267
- data/spec/spec_helper.rb +6 -5
- data/spec/utils_spec.rb +371 -347
- data/spec/writers/bibtex_writer_spec.rb +143 -143
- data/spec/writers/cff_writer_spec.rb +96 -90
- data/spec/writers/citation_writer_spec.rb +34 -33
- data/spec/writers/citeproc_writer_spec.rb +226 -224
- data/spec/writers/codemeta_writer_spec.rb +18 -16
- data/spec/writers/crosscite_writer_spec.rb +91 -73
- data/spec/writers/crossref_writer_spec.rb +99 -91
- data/spec/writers/csv_writer_spec.rb +70 -70
- data/spec/writers/datacite_json_writer_spec.rb +78 -68
- data/spec/writers/datacite_writer_spec.rb +417 -322
- data/spec/writers/jats_writer_spec.rb +177 -161
- data/spec/writers/rdf_xml_writer_spec.rb +68 -63
- data/spec/writers/ris_writer_spec.rb +162 -162
- data/spec/writers/turtle_writer_spec.rb +47 -47
- metadata +250 -160
- data/.github/workflows/release.yml +0 -47
@@ -4,131 +4,131 @@ require 'spec_helper'
|
|
4
4
|
require 'briard/cli'
|
5
5
|
|
6
6
|
describe Briard::CLI do
|
7
|
-
context
|
7
|
+
context 'find_from_format_by_id', vcr: true do
|
8
8
|
let(:subject) do
|
9
9
|
described_class.new
|
10
10
|
end
|
11
11
|
|
12
|
-
it
|
13
|
-
id =
|
14
|
-
expect(subject.find_from_format_by_id(id)).to eq(
|
12
|
+
it 'crossref' do
|
13
|
+
id = 'https://doi.org/10.7554/eLife.01567'
|
14
|
+
expect(subject.find_from_format_by_id(id)).to eq('crossref')
|
15
15
|
end
|
16
16
|
|
17
|
-
it
|
18
|
-
id =
|
19
|
-
expect(subject.find_from_format_by_id(id)).to eq(
|
17
|
+
it 'datacite' do
|
18
|
+
id = 'https://doi.org/10.5061/DRYAD.8515'
|
19
|
+
expect(subject.find_from_format_by_id(id)).to eq('datacite')
|
20
20
|
end
|
21
21
|
|
22
|
-
it
|
23
|
-
id =
|
24
|
-
expect(subject.find_from_format_by_id(id)).to eq(
|
22
|
+
it 'medra' do
|
23
|
+
id = 'https://doi.org/10.1392/roma081203'
|
24
|
+
expect(subject.find_from_format_by_id(id)).to eq('medra')
|
25
25
|
end
|
26
26
|
|
27
|
-
it
|
28
|
-
id =
|
29
|
-
expect(subject.find_from_format_by_id(id)).to eq(
|
27
|
+
it 'kisti' do
|
28
|
+
id = 'https://doi.org/10.5012/bkcs.2013.34.10.2889'
|
29
|
+
expect(subject.find_from_format_by_id(id)).to eq('kisti')
|
30
30
|
end
|
31
31
|
|
32
|
-
it
|
33
|
-
id =
|
34
|
-
expect(subject.find_from_format_by_id(id)).to eq(
|
32
|
+
it 'jalc' do
|
33
|
+
id = 'https://doi.org/10.11367/grsj1979.12.283'
|
34
|
+
expect(subject.find_from_format_by_id(id)).to eq('jalc')
|
35
35
|
end
|
36
36
|
|
37
|
-
it
|
38
|
-
id =
|
39
|
-
expect(subject.find_from_format_by_id(id)).to eq(
|
37
|
+
it 'op' do
|
38
|
+
id = 'https://doi.org/10.2791/81962'
|
39
|
+
expect(subject.find_from_format_by_id(id)).to eq('op')
|
40
40
|
end
|
41
41
|
|
42
|
-
it
|
43
|
-
id =
|
44
|
-
expect(subject.find_from_format_by_id(id)).to eq(
|
42
|
+
it 'cff' do
|
43
|
+
id = 'https://github.com/citation-file-format/ruby-cff/blob/main/CITATION.cff'
|
44
|
+
expect(subject.find_from_format_by_id(id)).to eq('cff')
|
45
45
|
end
|
46
46
|
|
47
|
-
it
|
48
|
-
id =
|
49
|
-
expect(subject.find_from_format_by_id(id)).to eq(
|
47
|
+
it 'cff repository url' do
|
48
|
+
id = 'https://github.com/citation-file-format/ruby-cff'
|
49
|
+
expect(subject.find_from_format_by_id(id)).to eq('cff')
|
50
50
|
end
|
51
51
|
|
52
|
-
it
|
53
|
-
id =
|
54
|
-
expect(subject.find_from_format_by_id(id)).to eq(
|
52
|
+
it 'codemeta' do
|
53
|
+
id = 'https://github.com/datacite/maremma/blob/master/codemeta.json'
|
54
|
+
expect(subject.find_from_format_by_id(id)).to eq('codemeta')
|
55
55
|
end
|
56
56
|
|
57
|
-
it
|
58
|
-
id =
|
59
|
-
expect(subject.find_from_format_by_id(id)).to eq(
|
57
|
+
it 'npm' do
|
58
|
+
id = 'https://github.com/datacite/bracco/blob/master/package.json'
|
59
|
+
expect(subject.find_from_format_by_id(id)).to eq('npm')
|
60
60
|
end
|
61
61
|
|
62
|
-
it
|
63
|
-
id =
|
64
|
-
expect(subject.find_from_format_by_id(id)).to eq(
|
62
|
+
it 'schema_org' do
|
63
|
+
id = 'https://dataverse.harvard.edu/dataset.xhtml?persistentId=doi:10.7910/DVN/GAOC03'
|
64
|
+
expect(subject.find_from_format_by_id(id)).to eq('schema_org')
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
68
|
-
context
|
68
|
+
context 'find_from_format_by_filename' do
|
69
69
|
let(:subject) do
|
70
70
|
described_class.new
|
71
71
|
end
|
72
72
|
|
73
|
-
it
|
74
|
-
filename =
|
75
|
-
expect(subject.find_from_format_by_filename(filename)).to eq(
|
73
|
+
it 'npm' do
|
74
|
+
filename = 'package.json'
|
75
|
+
expect(subject.find_from_format_by_filename(filename)).to eq('npm')
|
76
76
|
end
|
77
77
|
|
78
|
-
it
|
79
|
-
filename =
|
80
|
-
expect(subject.find_from_format_by_filename(filename)).to eq(
|
78
|
+
it 'cff' do
|
79
|
+
filename = 'CITATION.cff'
|
80
|
+
expect(subject.find_from_format_by_filename(filename)).to eq('cff')
|
81
81
|
end
|
82
82
|
end
|
83
83
|
|
84
|
-
context
|
84
|
+
context 'find_from_format_by_string' do
|
85
85
|
let(:subject) do
|
86
86
|
described_class.new
|
87
87
|
end
|
88
88
|
|
89
|
-
it
|
90
|
-
string =
|
91
|
-
expect(subject.find_from_format_by_string(string)).to eq(
|
89
|
+
it 'crossref' do
|
90
|
+
string = File.read("#{fixture_path}crossref.xml").strip
|
91
|
+
expect(subject.find_from_format_by_string(string)).to eq('crossref')
|
92
92
|
end
|
93
93
|
|
94
|
-
it
|
95
|
-
string =
|
96
|
-
expect(subject.find_from_format_by_string(string)).to eq(
|
94
|
+
it 'datacite' do
|
95
|
+
string = File.read("#{fixture_path}datacite.xml").strip
|
96
|
+
expect(subject.find_from_format_by_string(string)).to eq('datacite')
|
97
97
|
end
|
98
98
|
|
99
|
-
it
|
100
|
-
string =
|
101
|
-
expect(subject.find_from_format_by_string(string)).to eq(
|
99
|
+
it 'datacite namespaced' do
|
100
|
+
string = File.read("#{fixture_path}ns0.xml").strip
|
101
|
+
expect(subject.find_from_format_by_string(string)).to eq('datacite')
|
102
102
|
end
|
103
103
|
|
104
|
-
it
|
105
|
-
string =
|
106
|
-
expect(subject.find_from_format_by_string(string)).to eq(
|
104
|
+
it 'codemeta' do
|
105
|
+
string = File.read("#{fixture_path}codemeta.json").strip
|
106
|
+
expect(subject.find_from_format_by_string(string)).to eq('codemeta')
|
107
107
|
end
|
108
108
|
|
109
|
-
it
|
110
|
-
string =
|
111
|
-
expect(subject.find_from_format_by_string(string)).to eq(
|
109
|
+
it 'cff' do
|
110
|
+
string = File.read("#{fixture_path}CITATION.cff").strip
|
111
|
+
expect(subject.find_from_format_by_string(string)).to eq('cff')
|
112
112
|
end
|
113
113
|
|
114
|
-
it
|
115
|
-
string =
|
116
|
-
expect(subject.find_from_format_by_string(string)).to eq(
|
114
|
+
it 'schema_org' do
|
115
|
+
string = File.read("#{fixture_path}schema_org_topmed.json").strip
|
116
|
+
expect(subject.find_from_format_by_string(string)).to eq('schema_org')
|
117
117
|
end
|
118
118
|
|
119
|
-
it
|
120
|
-
string =
|
121
|
-
expect(subject.find_from_format_by_string(string)).to eq(
|
119
|
+
it 'ris' do
|
120
|
+
string = File.read("#{fixture_path}crossref.ris").strip
|
121
|
+
expect(subject.find_from_format_by_string(string)).to eq('ris')
|
122
122
|
end
|
123
123
|
|
124
|
-
it
|
125
|
-
string =
|
126
|
-
expect(subject.find_from_format_by_string(string)).to eq(
|
124
|
+
it 'ris from pure' do
|
125
|
+
string = File.read("#{fixture_path}pure.ris").strip
|
126
|
+
expect(subject.find_from_format_by_string(string)).to eq('ris')
|
127
127
|
end
|
128
128
|
|
129
|
-
it
|
130
|
-
string =
|
131
|
-
expect(subject.find_from_format_by_string(string)).to eq(
|
129
|
+
it 'bibtex' do
|
130
|
+
string = File.read("#{fixture_path}crossref.bib").strip
|
131
|
+
expect(subject.find_from_format_by_string(string)).to eq('bibtex')
|
132
132
|
end
|
133
133
|
end
|
134
134
|
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://api.crossref.org/works/10.1101/097196/transform/application/vnd.crossref.unixsd+xml
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- Mozilla/5.0 (compatible; Maremma/4.9.8; mailto:info@front-matter.io)
|
12
|
+
Accept:
|
13
|
+
- text/xml;charset=utf-8
|
14
|
+
Accept-Encoding:
|
15
|
+
- gzip,deflate
|
16
|
+
response:
|
17
|
+
status:
|
18
|
+
code: 200
|
19
|
+
message: OK
|
20
|
+
headers:
|
21
|
+
Date:
|
22
|
+
- Sun, 18 Sep 2022 13:53:09 GMT
|
23
|
+
Content-Length:
|
24
|
+
- '3783'
|
25
|
+
Set-Cookie:
|
26
|
+
- AWSALB=zW+jUCQCDj/555gwvJ45b/GhjyG+x6fHL3yYOnDTfyNWF9FawCMoNw56e3KPfLvSGm/iohNXWEBMfw7yWrOvhscsZKD8g3/dpN/egh7F3nC/CKcElaJVJ2ZYRwIb;
|
27
|
+
Expires=Sun, 25 Sep 2022 13:53:09 GMT; Path=/, AWSALBCORS=zW+jUCQCDj/555gwvJ45b/GhjyG+x6fHL3yYOnDTfyNWF9FawCMoNw56e3KPfLvSGm/iohNXWEBMfw7yWrOvhscsZKD8g3/dpN/egh7F3nC/CKcElaJVJ2ZYRwIb;
|
28
|
+
Expires=Sun, 25 Sep 2022 13:53:09 GMT; Path=/; SameSite=None
|
29
|
+
Link:
|
30
|
+
- !binary |-
|
31
|
+
PGh0dHA6Ly9keC5kb2kub3JnLzEwLjExMDEvMDk3MTk2PjsgcmVsPSJjYW5vbmljYWwiLCA8aHR0cHM6Ly9zeW5kaWNhdGlvbi5oaWdod2lyZS5vcmcvY29udGVudC9kb2kvMTAuMTEwMS8wOTcxOTY+OyB2ZXJzaW9uPSJ2b3IiOyByZWw9Iml0ZW0iLCA8aHR0cDovL29yY2lkLm9yZy8wMDAwLTAwMDMtMTQxOS0yNDA1PjsgdGl0bGU9Ik1hcnRpbiBGZW5uZXIiOyByZWw9ImF1dGhvciIsIDxodHRwOi8vb3JjaWQub3JnLzAwMDAtMDAwMy0xMzA0LTE5Mzk+OyB0aXRsZT0iTWVyY+ggQ3Jvc2FzIjsgcmVsPSJhdXRob3IiLCA8aHR0cDovL29yY2lkLm9yZy8wMDAwLTAwMDEtNTIxMi03MDUyPjsgdGl0bGU9IkplZmZyZXkgR3JldGhlIjsgcmVsPSJhdXRob3IiLCA8aHR0cDovL29yY2lkLm9yZy8wMDAwLTAwMDItOTM3Ny0wNzk3PjsgdGl0bGU9IkRhdmlkIEtlbm5lZHkiOyByZWw9ImF1dGhvciIsIDxodHRwOi8vb3JjaWQub3JnLzAwMDAtMDAwMS04NDc5LTAyNjI+OyB0aXRsZT0iSGVubmluZyBIZXJtamFrb2IiOyByZWw9ImF1dGhvciIsIDxodHRwOi8vb3JjaWQub3JnLzAwMDAtMDAwMS05ODUzLTU2Njg+OyB0aXRsZT0iUGhpbGlwcGUgUm9jY2EtU2VycmEiOyByZWw9ImF1dGhvciIsIDxodHRwOi8vb3JjaWQub3JnLzAwMDAtMDAwMi0yMTg4LTI1NzA+OyB0aXRsZT0iR3VzdGF2byBEdXJhbmQiOyByZWw9ImF1dGhvciIsIDxodHRwOi8vb3JjaWQub3JnLzAwMDAtMDAwMi0xNzMxLTUzNDY+OyB0aXRsZT0iUm9iaW4gQmVyam9uIjsgcmVsPSJhdXRob3IiLCA8aHR0cDovL29yY2lkLm9yZy8wMDAwLTAwMDEtODI0OS03Mzg4PjsgdGl0bGU9IlNlYmFzdGlhbiBLYXJjaGVyIjsgcmVsPSJhdXRob3IiLCA8aHR0cDovL29yY2lkLm9yZy8wMDAwLTAwMDItODQwNi0zODcxPjsgdGl0bGU9Ik1hcnlhbm4gTWFydG9uZSI7IHJlbD0iYXV0aG9yIiwgPGh0dHA6Ly9vcmNpZC5vcmcvMDAwMC0wMDAzLTQwNjAtNzM2MD47IHRpdGxlPSJUaW1vdGh5IENsYXJrIjsgcmVsPSJhdXRob3Ii
|
32
|
+
Access-Control-Expose-Headers:
|
33
|
+
- Link
|
34
|
+
Access-Control-Allow-Headers:
|
35
|
+
- X-Requested-With, Accept, Accept-Encoding, Accept-Charset, Accept-Language,
|
36
|
+
Accept-Ranges, Cache-Control
|
37
|
+
Access-Control-Allow-Origin:
|
38
|
+
- "*"
|
39
|
+
Vary:
|
40
|
+
- Accept-Encoding
|
41
|
+
Content-Encoding:
|
42
|
+
- gzip
|
43
|
+
Server:
|
44
|
+
- Jetty(9.4.40.v20210413)
|
45
|
+
X-Ratelimit-Limit:
|
46
|
+
- '50'
|
47
|
+
X-Ratelimit-Interval:
|
48
|
+
- 1s
|
49
|
+
X-Api-Pool:
|
50
|
+
- polite
|
51
|
+
X-Rate-Limit-Limit:
|
52
|
+
- '50'
|
53
|
+
X-Rate-Limit-Interval:
|
54
|
+
- 1s
|
55
|
+
Permissions-Policy:
|
56
|
+
- interest-cohort=()
|
57
|
+
Connection:
|
58
|
+
- close
|
59
|
+
body:
|
60
|
+
encoding: ASCII-8BIT
|
61
|
+
string: !binary |-
|
62
|
+
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
|
63
|
+
http_version:
|
64
|
+
recorded_at: Sun, 18 Sep 2022 13:53:09 GMT
|
65
|
+
recorded_with: VCR 3.0.3
|
@@ -0,0 +1,65 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://api.crossref.org/works/10.1101/097196/transform/application/vnd.crossref.unixsd+xml
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- Mozilla/5.0 (compatible; Maremma/4.9.8; mailto:info@front-matter.io)
|
12
|
+
Accept:
|
13
|
+
- text/xml;charset=utf-8
|
14
|
+
Accept-Encoding:
|
15
|
+
- gzip,deflate
|
16
|
+
response:
|
17
|
+
status:
|
18
|
+
code: 200
|
19
|
+
message: OK
|
20
|
+
headers:
|
21
|
+
Date:
|
22
|
+
- Sun, 18 Sep 2022 13:53:10 GMT
|
23
|
+
Content-Length:
|
24
|
+
- '3783'
|
25
|
+
Set-Cookie:
|
26
|
+
- AWSALB=E5nJSP9p5ufW2wuz37lFutM5ztGEWzMYUzSHDw6OkesH+NpAJ5GuOQcMqS+Gl83IdMRzyPzXH7hlwLp0/BTqEzVTiTh37yFsYS+v32fWyzCWUYpC4Fkx+5FADyCA;
|
27
|
+
Expires=Sun, 25 Sep 2022 13:53:10 GMT; Path=/, AWSALBCORS=E5nJSP9p5ufW2wuz37lFutM5ztGEWzMYUzSHDw6OkesH+NpAJ5GuOQcMqS+Gl83IdMRzyPzXH7hlwLp0/BTqEzVTiTh37yFsYS+v32fWyzCWUYpC4Fkx+5FADyCA;
|
28
|
+
Expires=Sun, 25 Sep 2022 13:53:10 GMT; Path=/; SameSite=None
|
29
|
+
Link:
|
30
|
+
- !binary |-
|
31
|
+
PGh0dHA6Ly9keC5kb2kub3JnLzEwLjExMDEvMDk3MTk2PjsgcmVsPSJjYW5vbmljYWwiLCA8aHR0cHM6Ly9zeW5kaWNhdGlvbi5oaWdod2lyZS5vcmcvY29udGVudC9kb2kvMTAuMTEwMS8wOTcxOTY+OyB2ZXJzaW9uPSJ2b3IiOyByZWw9Iml0ZW0iLCA8aHR0cDovL29yY2lkLm9yZy8wMDAwLTAwMDMtMTQxOS0yNDA1PjsgdGl0bGU9Ik1hcnRpbiBGZW5uZXIiOyByZWw9ImF1dGhvciIsIDxodHRwOi8vb3JjaWQub3JnLzAwMDAtMDAwMy0xMzA0LTE5Mzk+OyB0aXRsZT0iTWVyY+ggQ3Jvc2FzIjsgcmVsPSJhdXRob3IiLCA8aHR0cDovL29yY2lkLm9yZy8wMDAwLTAwMDEtNTIxMi03MDUyPjsgdGl0bGU9IkplZmZyZXkgR3JldGhlIjsgcmVsPSJhdXRob3IiLCA8aHR0cDovL29yY2lkLm9yZy8wMDAwLTAwMDItOTM3Ny0wNzk3PjsgdGl0bGU9IkRhdmlkIEtlbm5lZHkiOyByZWw9ImF1dGhvciIsIDxodHRwOi8vb3JjaWQub3JnLzAwMDAtMDAwMS04NDc5LTAyNjI+OyB0aXRsZT0iSGVubmluZyBIZXJtamFrb2IiOyByZWw9ImF1dGhvciIsIDxodHRwOi8vb3JjaWQub3JnLzAwMDAtMDAwMS05ODUzLTU2Njg+OyB0aXRsZT0iUGhpbGlwcGUgUm9jY2EtU2VycmEiOyByZWw9ImF1dGhvciIsIDxodHRwOi8vb3JjaWQub3JnLzAwMDAtMDAwMi0yMTg4LTI1NzA+OyB0aXRsZT0iR3VzdGF2byBEdXJhbmQiOyByZWw9ImF1dGhvciIsIDxodHRwOi8vb3JjaWQub3JnLzAwMDAtMDAwMi0xNzMxLTUzNDY+OyB0aXRsZT0iUm9iaW4gQmVyam9uIjsgcmVsPSJhdXRob3IiLCA8aHR0cDovL29yY2lkLm9yZy8wMDAwLTAwMDEtODI0OS03Mzg4PjsgdGl0bGU9IlNlYmFzdGlhbiBLYXJjaGVyIjsgcmVsPSJhdXRob3IiLCA8aHR0cDovL29yY2lkLm9yZy8wMDAwLTAwMDItODQwNi0zODcxPjsgdGl0bGU9Ik1hcnlhbm4gTWFydG9uZSI7IHJlbD0iYXV0aG9yIiwgPGh0dHA6Ly9vcmNpZC5vcmcvMDAwMC0wMDAzLTQwNjAtNzM2MD47IHRpdGxlPSJUaW1vdGh5IENsYXJrIjsgcmVsPSJhdXRob3Ii
|
32
|
+
Access-Control-Expose-Headers:
|
33
|
+
- Link
|
34
|
+
Access-Control-Allow-Headers:
|
35
|
+
- X-Requested-With, Accept, Accept-Encoding, Accept-Charset, Accept-Language,
|
36
|
+
Accept-Ranges, Cache-Control
|
37
|
+
Access-Control-Allow-Origin:
|
38
|
+
- "*"
|
39
|
+
Vary:
|
40
|
+
- Accept-Encoding
|
41
|
+
Content-Encoding:
|
42
|
+
- gzip
|
43
|
+
Server:
|
44
|
+
- Jetty(9.4.40.v20210413)
|
45
|
+
X-Ratelimit-Limit:
|
46
|
+
- '50'
|
47
|
+
X-Ratelimit-Interval:
|
48
|
+
- 1s
|
49
|
+
X-Api-Pool:
|
50
|
+
- polite
|
51
|
+
X-Rate-Limit-Limit:
|
52
|
+
- '50'
|
53
|
+
X-Rate-Limit-Interval:
|
54
|
+
- 1s
|
55
|
+
Permissions-Policy:
|
56
|
+
- interest-cohort=()
|
57
|
+
Connection:
|
58
|
+
- close
|
59
|
+
body:
|
60
|
+
encoding: ASCII-8BIT
|
61
|
+
string: !binary |-
|
62
|
+
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
|
63
|
+
http_version:
|
64
|
+
recorded_at: Sun, 18 Sep 2022 13:53:10 GMT
|
65
|
+
recorded_with: VCR 3.0.3
|
data/spec/metadata_spec.rb
CHANGED
@@ -3,163 +3,164 @@
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
5
|
describe Briard::Metadata, vcr: true do
|
6
|
-
|
7
|
-
subject { Briard::Metadata.new(input: input) }
|
6
|
+
subject { described_class.new(input: input) }
|
8
7
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
8
|
+
let(:input) { 'http://doi.org/10.5438/4K3M-NYVG' }
|
9
|
+
|
10
|
+
context 'handle input' do
|
11
|
+
it 'unknown DOI prefix' do
|
12
|
+
input = 'http://doi.org/10.0137/14802'
|
13
|
+
subject = described_class.new(input: input)
|
13
14
|
expect(subject.valid?).to be false
|
14
|
-
expect(subject.bibtex).to
|
15
|
+
expect(subject.bibtex.nil?).to be(true)
|
15
16
|
end
|
16
17
|
|
17
|
-
it
|
18
|
-
input =
|
19
|
-
subject =
|
18
|
+
it 'DOI RA not Crossref or DataCite' do
|
19
|
+
input = 'http://doi.org/10.3980/j.issn.2222-3959.2015.03.07'
|
20
|
+
subject = described_class.new(input: input)
|
20
21
|
expect(subject.valid?).to be false
|
21
|
-
expect(subject.bibtex).to
|
22
|
+
expect(subject.bibtex.nil?).to be(true)
|
22
23
|
end
|
23
24
|
end
|
24
25
|
|
25
|
-
context
|
26
|
-
it
|
27
|
-
id =
|
28
|
-
expect(subject.find_from_format(id: id)).to eq(
|
26
|
+
context 'find from format by ID' do
|
27
|
+
it 'crossref' do
|
28
|
+
id = 'https://doi.org/10.1371/journal.pone.0000030'
|
29
|
+
expect(subject.find_from_format(id: id)).to eq('crossref')
|
29
30
|
end
|
30
31
|
|
31
|
-
it
|
32
|
-
id =
|
33
|
-
expect(subject.find_from_format(id: id)).to eq(
|
32
|
+
it 'crossref doi not url' do
|
33
|
+
id = '10.1371/journal.pone.0000030'
|
34
|
+
expect(subject.find_from_format(id: id)).to eq('crossref')
|
34
35
|
end
|
35
36
|
|
36
|
-
it
|
37
|
-
id =
|
38
|
-
expect(subject.find_from_format(id: id)).to eq(
|
37
|
+
it 'datacite' do
|
38
|
+
id = 'https://doi.org/10.5438/4K3M-NYVG'
|
39
|
+
expect(subject.find_from_format(id: id)).to eq('datacite')
|
39
40
|
end
|
40
41
|
|
41
|
-
it
|
42
|
-
id =
|
43
|
-
expect(subject.find_from_format(id: id)).to eq(
|
42
|
+
it 'datacite doi http' do
|
43
|
+
id = 'http://doi.org/10.5438/4K3M-NYVG'
|
44
|
+
expect(subject.find_from_format(id: id)).to eq('datacite')
|
44
45
|
end
|
45
46
|
|
46
|
-
it
|
47
|
-
id =
|
48
|
-
expect(subject.find_from_format(id: id)).to
|
47
|
+
it 'unknown DOI registration agency' do
|
48
|
+
id = 'http://doi.org/10.0137/14802'
|
49
|
+
expect(subject.find_from_format(id: id).nil?).to be(true)
|
49
50
|
end
|
50
51
|
|
51
|
-
it
|
52
|
-
id =
|
53
|
-
expect(subject.find_from_format(id: id)).to eq(
|
52
|
+
it 'orcid' do
|
53
|
+
id = 'http://orcid.org/0000-0002-0159-2197'
|
54
|
+
expect(subject.find_from_format(id: id)).to eq('orcid')
|
54
55
|
end
|
55
56
|
|
56
|
-
it
|
57
|
-
id =
|
58
|
-
expect(subject.find_from_format(id: id)).to eq(
|
57
|
+
it 'github' do
|
58
|
+
id = 'https://github.com/datacite/maremma/blob/master/codemeta.json'
|
59
|
+
expect(subject.find_from_format(id: id)).to eq('codemeta')
|
59
60
|
end
|
60
61
|
|
61
|
-
it
|
62
|
-
id =
|
63
|
-
expect(subject.find_from_format(id: id)).to eq(
|
62
|
+
it 'schema_org' do
|
63
|
+
id = 'https://blog.datacite.org/eating-your-own-dog-food'
|
64
|
+
expect(subject.find_from_format(id: id)).to eq('schema_org')
|
64
65
|
end
|
65
66
|
end
|
66
67
|
|
67
|
-
context
|
68
|
-
it
|
69
|
-
file = fixture_path
|
70
|
-
string =
|
68
|
+
context 'find from format from file' do
|
69
|
+
it 'bibtex' do
|
70
|
+
file = "#{fixture_path}crossref.bib"
|
71
|
+
string = File.read(file)
|
71
72
|
ext = File.extname(file)
|
72
|
-
expect(subject.find_from_format(string: string, ext: ext)).to eq(
|
73
|
+
expect(subject.find_from_format(string: string, ext: ext)).to eq('bibtex')
|
73
74
|
end
|
74
75
|
|
75
|
-
it
|
76
|
-
file = fixture_path
|
77
|
-
string =
|
76
|
+
it 'ris' do
|
77
|
+
file = "#{fixture_path}crossref.ris"
|
78
|
+
string = File.read(file)
|
78
79
|
ext = File.extname(file)
|
79
|
-
expect(subject.find_from_format(string: string, ext: ext)).to eq(
|
80
|
+
expect(subject.find_from_format(string: string, ext: ext)).to eq('ris')
|
80
81
|
end
|
81
82
|
|
82
|
-
it
|
83
|
-
file = fixture_path
|
84
|
-
string =
|
83
|
+
it 'crossref' do
|
84
|
+
file = "#{fixture_path}crossref.xml"
|
85
|
+
string = File.read(file)
|
85
86
|
ext = File.extname(file)
|
86
|
-
expect(subject.find_from_format(string: string, ext: ext)).to eq(
|
87
|
+
expect(subject.find_from_format(string: string, ext: ext)).to eq('crossref')
|
87
88
|
end
|
88
89
|
|
89
|
-
it
|
90
|
-
file = fixture_path
|
91
|
-
string =
|
90
|
+
it 'datacite' do
|
91
|
+
file = "#{fixture_path}datacite.xml"
|
92
|
+
string = File.read(file)
|
92
93
|
ext = File.extname(file)
|
93
|
-
expect(subject.find_from_format(string: string, ext: ext)).to eq(
|
94
|
+
expect(subject.find_from_format(string: string, ext: ext)).to eq('datacite')
|
94
95
|
end
|
95
96
|
|
96
|
-
it
|
97
|
-
file = fixture_path
|
98
|
-
string =
|
97
|
+
it 'datacite_json' do
|
98
|
+
file = "#{fixture_path}datacite.json"
|
99
|
+
string = File.read(file)
|
99
100
|
ext = File.extname(file)
|
100
|
-
expect(subject.find_from_format(string: string, ext: ext)).to eq(
|
101
|
+
expect(subject.find_from_format(string: string, ext: ext)).to eq('datacite_json')
|
101
102
|
end
|
102
103
|
|
103
|
-
it
|
104
|
-
file = fixture_path
|
105
|
-
string =
|
104
|
+
it 'schema_org' do
|
105
|
+
file = "#{fixture_path}schema_org.json"
|
106
|
+
string = File.read(file)
|
106
107
|
ext = File.extname(file)
|
107
|
-
expect(subject.find_from_format(string: string, ext: ext)).to eq(
|
108
|
+
expect(subject.find_from_format(string: string, ext: ext)).to eq('schema_org')
|
108
109
|
end
|
109
110
|
|
110
|
-
it
|
111
|
-
file = fixture_path
|
112
|
-
string =
|
111
|
+
it 'citeproc' do
|
112
|
+
file = "#{fixture_path}citeproc.json"
|
113
|
+
string = File.read(file)
|
113
114
|
ext = File.extname(file)
|
114
|
-
expect(subject.find_from_format(string: string, ext: ext)).to eq(
|
115
|
+
expect(subject.find_from_format(string: string, ext: ext)).to eq('citeproc')
|
115
116
|
end
|
116
117
|
|
117
|
-
it
|
118
|
-
file = fixture_path
|
119
|
-
string =
|
118
|
+
it 'crosscite' do
|
119
|
+
file = "#{fixture_path}crosscite.json"
|
120
|
+
string = File.read(file)
|
120
121
|
ext = File.extname(file)
|
121
|
-
expect(subject.find_from_format(string: string, ext: ext)).to eq(
|
122
|
+
expect(subject.find_from_format(string: string, ext: ext)).to eq('crosscite')
|
122
123
|
end
|
123
124
|
|
124
|
-
it
|
125
|
-
file = fixture_path
|
126
|
-
string =
|
125
|
+
it 'codemeta' do
|
126
|
+
file = "#{fixture_path}codemeta.json"
|
127
|
+
string = File.read(file)
|
127
128
|
ext = File.extname(file)
|
128
|
-
expect(subject.find_from_format(string: string, ext: ext)).to eq(
|
129
|
+
expect(subject.find_from_format(string: string, ext: ext)).to eq('codemeta')
|
129
130
|
end
|
130
131
|
end
|
131
132
|
|
132
|
-
context
|
133
|
-
it
|
134
|
-
file = fixture_path
|
135
|
-
string =
|
136
|
-
expect(subject.find_from_format(string: string)).to eq(
|
133
|
+
context 'find from format from string' do
|
134
|
+
it 'crosscite' do
|
135
|
+
file = "#{fixture_path}crosscite.json"
|
136
|
+
string = File.read(file)
|
137
|
+
expect(subject.find_from_format(string: string)).to eq('crosscite')
|
137
138
|
end
|
138
139
|
end
|
139
140
|
|
140
|
-
context
|
141
|
-
it
|
142
|
-
json =
|
141
|
+
context 'jsonlint' do
|
142
|
+
it 'valid' do
|
143
|
+
json = File.read("#{fixture_path}datacite_software.json")
|
143
144
|
response = subject.jsonlint(json)
|
144
|
-
expect(response).to
|
145
|
+
expect(response.empty?).to be(true)
|
145
146
|
end
|
146
147
|
|
147
|
-
it
|
148
|
+
it 'nil' do
|
148
149
|
json = nil
|
149
150
|
response = subject.jsonlint(json)
|
150
|
-
expect(response).to eq([
|
151
|
+
expect(response).to eq(['No JSON provided'])
|
151
152
|
end
|
152
153
|
|
153
|
-
it
|
154
|
-
json =
|
154
|
+
it 'missing_comma' do
|
155
|
+
json = File.read("#{fixture_path}datacite_software_missing_comma.json")
|
155
156
|
response = subject.jsonlint(json)
|
156
|
-
expect(response).to eq([
|
157
|
+
expect(response).to eq(['expected comma, not a string (after doi) at line 4, column 11 [parse.c:430]'])
|
157
158
|
end
|
158
159
|
|
159
|
-
it
|
160
|
-
json =
|
160
|
+
it 'overlapping_keys' do
|
161
|
+
json = File.read("#{fixture_path}datacite_software_overlapping_keys.json")
|
161
162
|
response = subject.jsonlint(json)
|
162
|
-
expect(response).to eq([
|
163
|
+
expect(response).to eq(['The same key is defined more than once: id'])
|
163
164
|
end
|
164
165
|
end
|
165
166
|
end
|