briard 2.4.1 → 2.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/codeql-analysis.yml +72 -0
  3. data/.github/workflows/rubocop.yml +50 -0
  4. data/.rubocop.yml +144 -620
  5. data/.rubocop_todo.yml +76 -0
  6. data/CHANGELOG.md +22 -0
  7. data/Gemfile +2 -0
  8. data/Gemfile.lock +43 -6
  9. data/Rakefile +1 -1
  10. data/{bolognese.gemspec → briard.gemspec} +46 -38
  11. data/lib/briard/array.rb +2 -2
  12. data/lib/briard/author_utils.rb +79 -71
  13. data/lib/briard/cli.rb +12 -13
  14. data/lib/briard/crossref_utils.rb +73 -61
  15. data/lib/briard/datacite_utils.rb +132 -106
  16. data/lib/briard/doi_utils.rb +10 -10
  17. data/lib/briard/metadata.rb +96 -106
  18. data/lib/briard/metadata_utils.rb +87 -78
  19. data/lib/briard/readers/bibtex_reader.rb +65 -65
  20. data/lib/briard/readers/cff_reader.rb +88 -70
  21. data/lib/briard/readers/citeproc_reader.rb +90 -84
  22. data/lib/briard/readers/codemeta_reader.rb +68 -50
  23. data/lib/briard/readers/crosscite_reader.rb +2 -2
  24. data/lib/briard/readers/crossref_reader.rb +249 -210
  25. data/lib/briard/readers/datacite_json_reader.rb +3 -3
  26. data/lib/briard/readers/datacite_reader.rb +225 -189
  27. data/lib/briard/readers/npm_reader.rb +49 -42
  28. data/lib/briard/readers/ris_reader.rb +82 -80
  29. data/lib/briard/readers/schema_org_reader.rb +182 -159
  30. data/lib/briard/string.rb +1 -1
  31. data/lib/briard/utils.rb +4 -4
  32. data/lib/briard/version.rb +3 -1
  33. data/lib/briard/whitelist_scrubber.rb +11 -4
  34. data/lib/briard/writers/bibtex_writer.rb +14 -8
  35. data/lib/briard/writers/cff_writer.rb +33 -26
  36. data/lib/briard/writers/codemeta_writer.rb +19 -15
  37. data/lib/briard/writers/csv_writer.rb +6 -4
  38. data/lib/briard/writers/datacite_json_writer.rb +8 -2
  39. data/lib/briard/writers/jats_writer.rb +33 -28
  40. data/lib/briard/writers/rdf_xml_writer.rb +1 -1
  41. data/lib/briard/writers/ris_writer.rb +30 -18
  42. data/lib/briard/writers/turtle_writer.rb +1 -1
  43. data/lib/briard.rb +6 -6
  44. data/rubocop.sarif +0 -0
  45. data/spec/array_spec.rb +5 -5
  46. data/spec/author_utils_spec.rb +151 -132
  47. data/spec/datacite_utils_spec.rb +135 -83
  48. data/spec/doi_utils_spec.rb +168 -164
  49. data/spec/find_from_format_spec.rb +69 -69
  50. data/spec/fixtures/vcr_cassettes/Briard_Metadata/sanitize/onlies_keep_specific_tags.yml +65 -0
  51. data/spec/fixtures/vcr_cassettes/Briard_Metadata/sanitize/removes_a_tags.yml +65 -0
  52. data/spec/metadata_spec.rb +91 -90
  53. data/spec/readers/bibtex_reader_spec.rb +43 -38
  54. data/spec/readers/cff_reader_spec.rb +165 -153
  55. data/spec/readers/citeproc_reader_spec.rb +45 -40
  56. data/spec/readers/codemeta_reader_spec.rb +128 -115
  57. data/spec/readers/crosscite_reader_spec.rb +34 -24
  58. data/spec/readers/crossref_reader_spec.rb +1098 -939
  59. data/spec/readers/datacite_json_reader_spec.rb +53 -40
  60. data/spec/readers/datacite_reader_spec.rb +1541 -1337
  61. data/spec/readers/npm_reader_spec.rb +48 -43
  62. data/spec/readers/ris_reader_spec.rb +53 -47
  63. data/spec/readers/schema_org_reader_spec.rb +329 -267
  64. data/spec/spec_helper.rb +6 -5
  65. data/spec/utils_spec.rb +371 -347
  66. data/spec/writers/bibtex_writer_spec.rb +143 -143
  67. data/spec/writers/cff_writer_spec.rb +96 -90
  68. data/spec/writers/citation_writer_spec.rb +34 -33
  69. data/spec/writers/citeproc_writer_spec.rb +226 -224
  70. data/spec/writers/codemeta_writer_spec.rb +18 -16
  71. data/spec/writers/crosscite_writer_spec.rb +91 -73
  72. data/spec/writers/crossref_writer_spec.rb +99 -91
  73. data/spec/writers/csv_writer_spec.rb +70 -70
  74. data/spec/writers/datacite_json_writer_spec.rb +78 -68
  75. data/spec/writers/datacite_writer_spec.rb +417 -322
  76. data/spec/writers/jats_writer_spec.rb +177 -161
  77. data/spec/writers/rdf_xml_writer_spec.rb +68 -63
  78. data/spec/writers/ris_writer_spec.rb +162 -162
  79. data/spec/writers/turtle_writer_spec.rb +47 -47
  80. metadata +250 -160
  81. 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 "find_from_format_by_id", vcr: true do
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 "crossref" do
13
- id = "https://doi.org/10.7554/eLife.01567"
14
- expect(subject.find_from_format_by_id(id)).to eq("crossref")
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 "datacite" do
18
- id = "https://doi.org/10.5061/DRYAD.8515"
19
- expect(subject.find_from_format_by_id(id)).to eq("datacite")
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 "medra" do
23
- id = "https://doi.org/10.1392/roma081203"
24
- expect(subject.find_from_format_by_id(id)).to eq("medra")
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 "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")
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 "jalc" do
33
- id = "https://doi.org/10.11367/grsj1979.12.283"
34
- expect(subject.find_from_format_by_id(id)).to eq("jalc")
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 "op" do
38
- id = "https://doi.org/10.2791/81962"
39
- expect(subject.find_from_format_by_id(id)).to eq("op")
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 "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")
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 "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")
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 "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")
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 "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")
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 "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")
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 "find_from_format_by_filename" do
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 "npm" do
74
- filename = "package.json"
75
- expect(subject.find_from_format_by_filename(filename)).to eq("npm")
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 "cff" do
79
- filename = "CITATION.cff"
80
- expect(subject.find_from_format_by_filename(filename)).to eq("cff")
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 "find_from_format_by_string" do
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 "crossref" do
90
- string = IO.read(fixture_path + 'crossref.xml').strip
91
- expect(subject.find_from_format_by_string(string)).to eq("crossref")
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 "datacite" do
95
- string = IO.read(fixture_path + 'datacite.xml').strip
96
- expect(subject.find_from_format_by_string(string)).to eq("datacite")
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 "datacite namespaced" do
100
- string = IO.read(fixture_path + 'ns0.xml').strip
101
- expect(subject.find_from_format_by_string(string)).to eq("datacite")
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 "codemeta" do
105
- string = IO.read(fixture_path + 'codemeta.json').strip
106
- expect(subject.find_from_format_by_string(string)).to eq("codemeta")
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 "cff" do
110
- string = IO.read(fixture_path + 'CITATION.cff').strip
111
- expect(subject.find_from_format_by_string(string)).to eq("cff")
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 "schema_org" do
115
- string = IO.read(fixture_path + 'schema_org_topmed.json').strip
116
- expect(subject.find_from_format_by_string(string)).to eq("schema_org")
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 "ris" do
120
- string = IO.read(fixture_path + 'crossref.ris').strip
121
- expect(subject.find_from_format_by_string(string)).to eq("ris")
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 "ris from pure" do
125
- string = IO.read(fixture_path + 'pure.ris').strip
126
- expect(subject.find_from_format_by_string(string)).to eq("ris")
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 "bibtex" do
130
- string = IO.read(fixture_path + 'crossref.bib').strip
131
- expect(subject.find_from_format_by_string(string)).to eq("bibtex")
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
@@ -3,163 +3,164 @@
3
3
  require 'spec_helper'
4
4
 
5
5
  describe Briard::Metadata, vcr: true do
6
- let(:input) { "http://doi.org/10.5438/4K3M-NYVG" }
7
- subject { Briard::Metadata.new(input: input) }
6
+ subject { described_class.new(input: input) }
8
7
 
9
- context "handle input" do
10
- it "unknown DOI prefix" do
11
- input = "http://doi.org/10.0137/14802"
12
- subject = Briard::Metadata.new(input: input)
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 be_nil
15
+ expect(subject.bibtex.nil?).to be(true)
15
16
  end
16
17
 
17
- it "DOI RA not Crossref or DataCite" do
18
- input = "http://doi.org/10.3980/j.issn.2222-3959.2015.03.07"
19
- subject = Briard::Metadata.new(input: input)
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 be_nil
22
+ expect(subject.bibtex.nil?).to be(true)
22
23
  end
23
24
  end
24
25
 
25
- context "find from format by ID" do
26
- it "crossref" do
27
- id = "https://doi.org/10.1371/journal.pone.0000030"
28
- expect(subject.find_from_format(id: id)).to eq("crossref")
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 "crossref doi not url" do
32
- id = "10.1371/journal.pone.0000030"
33
- expect(subject.find_from_format(id: id)).to eq("crossref")
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 "datacite" do
37
- id = "https://doi.org/10.5438/4K3M-NYVG"
38
- expect(subject.find_from_format(id: id)).to eq("datacite")
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 "datacite doi http" do
42
- id = "http://doi.org/10.5438/4K3M-NYVG"
43
- expect(subject.find_from_format(id: id)).to eq("datacite")
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 "unknown DOI registration agency" do
47
- id = "http://doi.org/10.0137/14802"
48
- expect(subject.find_from_format(id: id)).to be_nil
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 "orcid" do
52
- id = "http://orcid.org/0000-0002-0159-2197"
53
- expect(subject.find_from_format(id: id)).to eq("orcid")
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 "github" do
57
- id = "https://github.com/datacite/maremma/blob/master/codemeta.json"
58
- expect(subject.find_from_format(id: id)).to eq("codemeta")
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 "schema_org" do
62
- id = "https://blog.datacite.org/eating-your-own-dog-food"
63
- expect(subject.find_from_format(id: id)).to eq("schema_org")
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 "find from format from file" do
68
- it "bibtex" do
69
- file = fixture_path + "crossref.bib"
70
- string = IO.read(file)
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("bibtex")
73
+ expect(subject.find_from_format(string: string, ext: ext)).to eq('bibtex')
73
74
  end
74
75
 
75
- it "ris" do
76
- file = fixture_path + "crossref.ris"
77
- string = IO.read(file)
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("ris")
80
+ expect(subject.find_from_format(string: string, ext: ext)).to eq('ris')
80
81
  end
81
82
 
82
- it "crossref" do
83
- file = fixture_path + "crossref.xml"
84
- string = IO.read(file)
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("crossref")
87
+ expect(subject.find_from_format(string: string, ext: ext)).to eq('crossref')
87
88
  end
88
89
 
89
- it "datacite" do
90
- file = fixture_path + "datacite.xml"
91
- string = IO.read(file)
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("datacite")
94
+ expect(subject.find_from_format(string: string, ext: ext)).to eq('datacite')
94
95
  end
95
96
 
96
- it "datacite_json" do
97
- file = fixture_path + "datacite.json"
98
- string = IO.read(file)
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("datacite_json")
101
+ expect(subject.find_from_format(string: string, ext: ext)).to eq('datacite_json')
101
102
  end
102
103
 
103
- it "schema_org" do
104
- file = fixture_path + "schema_org.json"
105
- string = IO.read(file)
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("schema_org")
108
+ expect(subject.find_from_format(string: string, ext: ext)).to eq('schema_org')
108
109
  end
109
110
 
110
- it "citeproc" do
111
- file = fixture_path + "citeproc.json"
112
- string = IO.read(file)
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("citeproc")
115
+ expect(subject.find_from_format(string: string, ext: ext)).to eq('citeproc')
115
116
  end
116
117
 
117
- it "crosscite" do
118
- file = fixture_path + "crosscite.json"
119
- string = IO.read(file)
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("crosscite")
122
+ expect(subject.find_from_format(string: string, ext: ext)).to eq('crosscite')
122
123
  end
123
124
 
124
- it "codemeta" do
125
- file = fixture_path + "codemeta.json"
126
- string = IO.read(file)
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("codemeta")
129
+ expect(subject.find_from_format(string: string, ext: ext)).to eq('codemeta')
129
130
  end
130
131
  end
131
132
 
132
- context "find from format from string" do
133
- it "crosscite" do
134
- file = fixture_path + "crosscite.json"
135
- string = IO.read(file)
136
- expect(subject.find_from_format(string: string)).to eq("crosscite")
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 "jsonlint" do
141
- it "valid" do
142
- json = IO.read(fixture_path + "datacite_software.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 be_empty
145
+ expect(response.empty?).to be(true)
145
146
  end
146
147
 
147
- it "nil" do
148
+ it 'nil' do
148
149
  json = nil
149
150
  response = subject.jsonlint(json)
150
- expect(response).to eq(["No JSON provided"])
151
+ expect(response).to eq(['No JSON provided'])
151
152
  end
152
153
 
153
- it "missing_comma" do
154
- json = IO.read(fixture_path + "datacite_software_missing_comma.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(["expected comma, not a string (after doi) at line 4, column 11 [parse.c:430]"])
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 "overlapping_keys" do
160
- json = IO.read(fixture_path + "datacite_software_overlapping_keys.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(["The same key is defined more than once: id"])
163
+ expect(response).to eq(['The same key is defined more than once: id'])
163
164
  end
164
165
  end
165
166
  end