briard 2.8.2 → 2.9.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/Gemfile.lock +30 -20
  4. data/briard.gemspec +1 -0
  5. data/lib/briard/metadata.rb +4 -2
  6. data/lib/briard/metadata_utils.rb +2 -0
  7. data/lib/briard/readers/datacite_reader.rb +1 -1
  8. data/lib/briard/readers/schema_org_reader.rb +24 -7
  9. data/lib/briard/schema_utils.rb +15 -0
  10. data/lib/briard/version.rb +1 -1
  11. data/resources/json-schema/briard_schema.json +462 -0
  12. data/spec/fixtures/crosscite.json +1 -1
  13. data/spec/fixtures/datacite.json +1 -1
  14. data/spec/fixtures/datacite_software.json +1 -1
  15. data/spec/fixtures/datacite_software_version.json +1 -1
  16. data/spec/fixtures/vcr_cassettes/Briard_Metadata/get_schema_org_metadata/BlogPosting.yml +18 -18
  17. data/spec/fixtures/vcr_cassettes/Briard_Metadata/get_schema_org_metadata/BlogPosting_with_new_DOI.yml +22 -22
  18. data/spec/fixtures/vcr_cassettes/Briard_Metadata/get_schema_org_metadata/get_schema_org_metadata_front_matter/BlogPosting.yml +22 -22
  19. data/spec/fixtures/vcr_cassettes/Briard_Metadata/get_schema_org_metadata/harvard_dataverse.yml +6 -6
  20. data/spec/fixtures/vcr_cassettes/Briard_Metadata/get_schema_org_metadata/pangaea.yml +10 -10
  21. data/spec/fixtures/vcr_cassettes/Briard_Metadata/get_schema_org_metadata/zenodo.yml +8 -8
  22. data/spec/fixtures/vcr_cassettes/Briard_Metadata/json_schema_errors/doi_not_found.yml +105 -0
  23. data/spec/fixtures/vcr_cassettes/Briard_Metadata/json_schema_errors/is_valid.yml +65 -0
  24. data/spec/fixtures/vcr_cassettes/Briard_Metadata/json_schema_valid_/is_valid.yml +65 -0
  25. data/spec/fixtures/vcr_cassettes/Briard_Metadata/write_metadata_as_crossref/another_schema_org_from_front-matter.yml +22 -22
  26. data/spec/fixtures/vcr_cassettes/Briard_Metadata/write_metadata_as_crossref/journal_article_from_datacite.yml +6 -6
  27. data/spec/fixtures/vcr_cassettes/Briard_Metadata/write_metadata_as_crossref/posted_content.yml +9 -9
  28. data/spec/fixtures/vcr_cassettes/Briard_Metadata/write_metadata_as_crossref/schema_org_from_another_science_blog.yml +9 -9
  29. data/spec/fixtures/vcr_cassettes/Briard_Metadata/write_metadata_as_crossref/schema_org_from_front_matter.yml +22 -22
  30. data/spec/metadata_spec.rb +2 -0
  31. data/spec/readers/crossref_json_reader_spec.rb +1 -1
  32. data/spec/readers/datacite_json_reader_spec.rb +2 -2
  33. data/spec/readers/datacite_reader_spec.rb +36 -36
  34. data/spec/readers/npm_reader_spec.rb +3 -3
  35. data/spec/readers/schema_org_reader_spec.rb +26 -3
  36. data/spec/schema_utils_spec.rb +24 -0
  37. data/spec/writers/crossref_writer_spec.rb +1 -1
  38. data/spec/writers/datacite_writer_spec.rb +6 -6
  39. metadata +22 -2
@@ -43,7 +43,7 @@ describe Briard::Metadata, vcr: true do
43
43
  { 'subject' => 'mitochondrial genome' },
44
44
  { 'subject' => 'parasites' }])
45
45
  expect(subject.publisher).to eq('Dryad')
46
- expect(subject.agency).to eq('datacite')
46
+ expect(subject.agency).to eq('DataCite')
47
47
  expect(subject.schema_version).to eq('http://datacite.org/schema/kernel-4')
48
48
  end
49
49
 
@@ -78,7 +78,7 @@ describe Briard::Metadata, vcr: true do
78
78
  'subject' => 'FOS: Computer and information sciences',
79
79
  'subjectScheme' => 'Fields of Science and Technology (FOS)',
80
80
  'valueUri' => 'http://www.oecd.org/science/inno/38235147.pdf' }])
81
- expect(subject.agency).to eq('datacite')
81
+ expect(subject.agency).to eq('DataCite')
82
82
  expect(subject.schema_version).to eq('http://datacite.org/schema/kernel-4')
83
83
  end
84
84
 
@@ -101,7 +101,7 @@ describe Briard::Metadata, vcr: true do
101
101
  'subjectScheme' => 'DDC' }])
102
102
  expect(subject.publication_year).to eq('2013')
103
103
  expect(subject.publisher).to eq('Schloss Dagstuhl - Leibniz-Zentrum fuer Informatik GmbH, Wadern/Saarbruecken, Germany')
104
- expect(subject.agency).to eq('datacite')
104
+ expect(subject.agency).to eq('DataCite')
105
105
  expect(subject.schema_version).to eq('http://datacite.org/schema/kernel-2.1')
106
106
  end
107
107
 
@@ -163,7 +163,7 @@ describe Briard::Metadata, vcr: true do
163
163
  expect(subject.sizes).to eq(['4 kB'])
164
164
  expect(subject.formats).to eq(['application/xml'])
165
165
  expect(subject.publisher).to eq('DataCite')
166
- expect(subject.agency).to eq('datacite')
166
+ expect(subject.agency).to eq('DataCite')
167
167
  expect(subject.schema_version).to eq('http://datacite.org/schema/kernel-4')
168
168
  end
169
169
 
@@ -183,7 +183,7 @@ describe Briard::Metadata, vcr: true do
183
183
  { 'date' => '2016', 'dateType' => 'Issued' }])
184
184
  expect(subject.publication_year).to eq('2016')
185
185
  expect(subject.publisher).to eq('University of St Andrews')
186
- expect(subject.agency).to eq('datacite')
186
+ expect(subject.agency).to eq('DataCite')
187
187
  expect(subject.schema_version).to eq('http://datacite.org/schema/kernel-4')
188
188
  end
189
189
 
@@ -206,7 +206,7 @@ describe Briard::Metadata, vcr: true do
206
206
  expect(subject.sizes).to eq([])
207
207
  expect(subject.subjects).to eq([{ 'subject' => 'environmental research' }])
208
208
  expect(subject.publisher).to eq('EvK2 CNR Committee')
209
- expect(subject.agency).to eq('datacite')
209
+ expect(subject.agency).to eq('DataCite')
210
210
  expect(subject.schema_version).to eq('http://datacite.org/schema/kernel-2.2')
211
211
  end
212
212
 
@@ -243,7 +243,7 @@ describe Briard::Metadata, vcr: true do
243
243
  { 'subject' => 'crossover experiment' },
244
244
  { 'subject' => 'hci' }])
245
245
  expect(subject.publisher).to eq('Zenodo')
246
- expect(subject.agency).to eq('datacite')
246
+ expect(subject.agency).to eq('DataCite')
247
247
  expect(subject.schema_version).to eq('http://datacite.org/schema/kernel-4')
248
248
  end
249
249
 
@@ -290,7 +290,7 @@ describe Briard::Metadata, vcr: true do
290
290
  'subject' => 'FOS: Biological sciences',
291
291
  'subjectScheme' => 'Fields of Science and Technology (FOS)' }
292
292
  ])
293
- expect(subject.agency).to eq('datacite')
293
+ expect(subject.agency).to eq('DataCite')
294
294
  expect(subject.schema_version).to eq('http://datacite.org/schema/kernel-4')
295
295
  end
296
296
 
@@ -323,7 +323,7 @@ describe Briard::Metadata, vcr: true do
323
323
  'subjectScheme' => 'Fields of Science and Technology (FOS)', 'schemeUri' => 'http://www.oecd.org/science/inno/38235147.pdf' },
324
324
  { 'subject' => '60412 Quantitative Genetics (incl. Disease and Trait Mapping Genetics)',
325
325
  'subjectScheme' => 'FOR', 'schemeUri' => 'http://www.abs.gov.au/ausstats/abs@.nsf/0/6BB427AB9696C225CA2574180004463E' }])
326
- expect(subject.agency).to eq('datacite')
326
+ expect(subject.agency).to eq('DataCite')
327
327
  expect(subject.schema_version).to eq('http://datacite.org/schema/kernel-4')
328
328
  end
329
329
 
@@ -385,7 +385,7 @@ describe Briard::Metadata, vcr: true do
385
385
  { 'subject' => 'data mining' },
386
386
  { 'subject' => 'statistical computing language r' },
387
387
  { 'subject' => 'funded research publications' }])
388
- expect(subject.agency).to eq('datacite')
388
+ expect(subject.agency).to eq('DataCite')
389
389
  expect(subject.schema_version).to eq('http://datacite.org/schema/kernel-4')
390
390
  end
391
391
 
@@ -434,7 +434,7 @@ describe Briard::Metadata, vcr: true do
434
434
  'funderName' => 'European Commission' }])
435
435
  expect(subject.identifiers).to eq([{ 'identifier' => '123',
436
436
  'identifierType' => 'Repository ID' }])
437
- expect(subject.agency).to eq('datacite')
437
+ expect(subject.agency).to eq('DataCite')
438
438
  expect(subject.schema_version).to eq('http://datacite.org/schema/kernel-4')
439
439
  expect(subject.state).to eq('findable')
440
440
  end
@@ -723,7 +723,7 @@ describe Briard::Metadata, vcr: true do
723
723
  'http://www.rcuk.ac.uk/research/efficiency/researchadmin/harmonisation/',
724
724
  'subject' => 'Materials Characterisation',
725
725
  'subjectScheme' => 'RCUK Research Classifications' }])
726
- expect(subject.agency).to eq('datacite')
726
+ expect(subject.agency).to eq('DataCite')
727
727
  expect(subject.schema_version).to eq('http://datacite.org/schema/kernel-4')
728
728
  end
729
729
 
@@ -752,7 +752,7 @@ describe Briard::Metadata, vcr: true do
752
752
  'funderIdentifier' => 'https://doi.org/10.13039/501100000780',
753
753
  'funderIdentifierType' => 'Crossref Funder ID',
754
754
  'funderName' => 'European Commission' }])
755
- expect(subject.agency).to eq('datacite')
755
+ expect(subject.agency).to eq('DataCite')
756
756
  expect(subject.schema_version).to eq('http://datacite.org/schema/kernel-4')
757
757
  end
758
758
 
@@ -777,7 +777,7 @@ describe Briard::Metadata, vcr: true do
777
777
  expect(subject.funding_references.length).to eq(1)
778
778
  expect(subject.funding_references.first).to eq('awardNumber' => 'проект № 170100728',
779
779
  'funderName' => 'РФФИ')
780
- expect(subject.agency).to eq('datacite')
780
+ expect(subject.agency).to eq('DataCite')
781
781
  expect(subject.schema_version).to eq('http://datacite.org/schema/kernel-4')
782
782
  end
783
783
 
@@ -804,7 +804,7 @@ describe Briard::Metadata, vcr: true do
804
804
  expect(subject.related_identifiers.length).to eq(3)
805
805
  expect(subject.related_identifiers.last).to eq('relatedIdentifier' => '10.5438/0000-00ss',
806
806
  'relatedIdentifierType' => 'DOI', 'relationType' => 'IsPartOf')
807
- expect(subject.agency).to eq('datacite')
807
+ expect(subject.agency).to eq('DataCite')
808
808
  end
809
809
 
810
810
  it 'Schema 4.1 from string' do
@@ -840,7 +840,7 @@ describe Briard::Metadata, vcr: true do
840
840
  'rightsUri' => 'https://creativecommons.org/licenses/by-nd/2.0/legalcode',
841
841
  'schemeUri' => 'https://spdx.org/licenses/' }])
842
842
  expect(subject.publisher).to eq('Springer')
843
- expect(subject.agency).to eq('datacite')
843
+ expect(subject.agency).to eq('DataCite')
844
844
  expect(subject.schema_version).to eq('http://datacite.org/schema/kernel-4')
845
845
  end
846
846
 
@@ -873,7 +873,7 @@ describe Briard::Metadata, vcr: true do
873
873
  'rightsUri' => 'https://creativecommons.org/licenses/by-nd/2.0/legalcode',
874
874
  'schemeUri' => 'https://spdx.org/licenses/' }])
875
875
  expect(subject.publisher).to eq('Springer')
876
- expect(subject.agency).to eq('datacite')
876
+ expect(subject.agency).to eq('DataCite')
877
877
  expect(subject.schema_version).to eq('http://datacite.org/schema/kernel-4.0')
878
878
  end
879
879
 
@@ -904,7 +904,7 @@ describe Briard::Metadata, vcr: true do
904
904
  'rightsUri' => 'https://creativecommons.org/publicdomain/zero/1.0/legalcode',
905
905
  'schemeUri' => 'https://spdx.org/licenses/' }])
906
906
  expect(subject.publisher).to eq('Dryad Digital Repository')
907
- expect(subject.agency).to eq('datacite')
907
+ expect(subject.agency).to eq('DataCite')
908
908
  expect(subject.schema_version).to eq('http://datacite.org/schema/kernel-3')
909
909
  end
910
910
 
@@ -937,7 +937,7 @@ describe Briard::Metadata, vcr: true do
937
937
  'rightsUri' => 'https://creativecommons.org/licenses/by-nd/2.0/legalcode',
938
938
  'schemeUri' => 'https://spdx.org/licenses/' }])
939
939
  expect(subject.publisher).to eq('Springer')
940
- expect(subject.agency).to eq('datacite')
940
+ expect(subject.agency).to eq('DataCite')
941
941
  expect(subject.schema_version).to eq('http://datacite.org/schema/kernel-3.0')
942
942
  end
943
943
 
@@ -965,7 +965,7 @@ describe Briard::Metadata, vcr: true do
965
965
  expect(subject.related_identifiers.last).to eq('relatedIdentifier' => '10.5272/oldertestpub',
966
966
  'relatedIdentifierType' => 'DOI', 'relationType' => 'IsPartOf')
967
967
  expect(subject.publisher).to eq('Springer')
968
- expect(subject.agency).to eq('datacite')
968
+ expect(subject.agency).to eq('DataCite')
969
969
  expect(subject.schema_version).to eq('http://datacite.org/schema/kernel-2.2')
970
970
  end
971
971
 
@@ -1005,7 +1005,7 @@ describe Briard::Metadata, vcr: true do
1005
1005
  'rightsUri' => 'https://creativecommons.org/licenses/by-nd/2.0/legalcode',
1006
1006
  'schemeUri' => 'https://spdx.org/licenses/' }])
1007
1007
  expect(subject.publisher).to eq('Springer')
1008
- expect(subject.agency).to eq('datacite')
1008
+ expect(subject.agency).to eq('DataCite')
1009
1009
  end
1010
1010
 
1011
1011
  it 'namespaced xml from string' do
@@ -1024,7 +1024,7 @@ describe Briard::Metadata, vcr: true do
1024
1024
  { 'date' => '2018-07-18', 'dateType' => 'Accepted' }, { 'date' => '2018', 'dateType' => 'Issued' }])
1025
1025
  expect(subject.publication_year).to eq('2018')
1026
1026
  expect(subject.publisher).to eq('nanoHUB')
1027
- expect(subject.agency).to eq('datacite')
1027
+ expect(subject.agency).to eq('DataCite')
1028
1028
  expect(subject.schema_version).to eq('http://datacite.org/schema/kernel-2.2')
1029
1029
  end
1030
1030
 
@@ -1055,7 +1055,7 @@ describe Briard::Metadata, vcr: true do
1055
1055
  expect(subject.titles).to eq([{ 'title' => 'CERES Level 3 Cloud Type Historgram Terra+Aqua HDF file - Edition4' }])
1056
1056
  expect(subject.publication_year).to eq('2016')
1057
1057
  expect(subject.publisher).to eq('NASA Langley Atmospheric Science Data Center DAAC')
1058
- expect(subject.agency).to eq('datacite')
1058
+ expect(subject.agency).to eq('DataCite')
1059
1059
  expect(subject.schema_version).to eq('http://datacite.org/schema/kernel-4')
1060
1060
  end
1061
1061
 
@@ -1103,7 +1103,7 @@ describe Briard::Metadata, vcr: true do
1103
1103
  { 'date' => '1996', 'dateType' => 'Issued' }])
1104
1104
  expect(subject.publication_year).to eq('1996')
1105
1105
  expect(subject.publisher).to eq('GESIS Data Archive')
1106
- expect(subject.agency).to eq('datacite')
1106
+ expect(subject.agency).to eq('DataCite')
1107
1107
  expect(subject.schema_version).to eq('http://datacite.org/schema/kernel-4')
1108
1108
  end
1109
1109
 
@@ -1129,7 +1129,7 @@ describe Briard::Metadata, vcr: true do
1129
1129
  expect(subject.subjects).to eq([{ 'subject' => 'pv systems' },
1130
1130
  { 'subject' => 'off-grid applications' }])
1131
1131
  expect(subject.publisher).to eq('WIP-Munich')
1132
- expect(subject.agency).to eq('datacite')
1132
+ expect(subject.agency).to eq('DataCite')
1133
1133
  expect(subject.schema_version).to eq('http://datacite.org/schema/kernel-2.2')
1134
1134
  end
1135
1135
 
@@ -1165,7 +1165,7 @@ describe Briard::Metadata, vcr: true do
1165
1165
  expect(subject.dates).to eq([{ 'date' => '2017', 'dateType' => 'Issued' }])
1166
1166
  expect(subject.publication_year).to eq('2017')
1167
1167
  expect(subject.publisher).to eq('Siemens AG')
1168
- expect(subject.agency).to eq('datacite')
1168
+ expect(subject.agency).to eq('DataCite')
1169
1169
  expect(subject.schema_version).to eq('http://datacite.org/schema/kernel-3')
1170
1170
  end
1171
1171
 
@@ -1207,7 +1207,7 @@ describe Briard::Metadata, vcr: true do
1207
1207
  { 'date' => '2015', 'dateType' => 'Issued' }])
1208
1208
  expect(subject.publication_year).to eq('2015')
1209
1209
  expect(subject.publisher).to eq('Royal Netherlands Meteorological Institute (KNMI)')
1210
- expect(subject.agency).to eq('datacite')
1210
+ expect(subject.agency).to eq('DataCite')
1211
1211
  expect(subject.schema_version).to eq('http://datacite.org/schema/kernel-4')
1212
1212
  end
1213
1213
 
@@ -1217,7 +1217,7 @@ describe Briard::Metadata, vcr: true do
1217
1217
  expect(subject.valid?).to be false
1218
1218
  expect(subject.id).to eq('https://doi.org/10.4124/05f6c379-dd68-4cdb-880d-33d3e9576d52/1')
1219
1219
  expect(subject.doi).to eq('10.4124/05f6c379-dd68-4cdb-880d-33d3e9576d52/1')
1220
- expect(subject.agency).to eq('datacite')
1220
+ expect(subject.agency).to eq('DataCite')
1221
1221
  expect(subject.state).to eq('not_found')
1222
1222
  end
1223
1223
 
@@ -1233,7 +1233,7 @@ describe Briard::Metadata, vcr: true do
1233
1233
  expect(subject.dates).to eq([{ 'date' => '2018-01-12', 'dateType' => 'Issued' }])
1234
1234
  expect(subject.publication_year).to eq('2018')
1235
1235
  expect(subject.publisher).to eq('CaltechDATA')
1236
- expect(subject.agency).to eq('datacite')
1236
+ expect(subject.agency).to eq('DataCite')
1237
1237
  expect(subject.schema_version).to eq('http://datacite.org/schema/kernel-4')
1238
1238
  expect(subject.state).to eq('findable')
1239
1239
  end
@@ -1250,7 +1250,7 @@ describe Briard::Metadata, vcr: true do
1250
1250
  expect(subject.dates).to eq([{ 'date' => '2018', 'dateType' => 'Issued' }])
1251
1251
  expect(subject.publication_year).to eq('2018')
1252
1252
  expect(subject.publisher).to eq('F1000 Research Limited')
1253
- expect(subject.agency).to eq('datacite')
1253
+ expect(subject.agency).to eq('DataCite')
1254
1254
  expect(subject.schema_version).to eq('http://datacite.org/schema/kernel-3')
1255
1255
  expect(subject.state).to eq('findable')
1256
1256
  end
@@ -1269,7 +1269,7 @@ describe Briard::Metadata, vcr: true do
1269
1269
  expect(subject.titles).to eq([{ 'title' => 'Referee report. For: Gates - add article keywords to the metatags [version 2; referees: 1 approved]' }])
1270
1270
  expect(subject.publication_year).to eq('2018')
1271
1271
  expect(subject.publisher).to eq('Gates Open Research')
1272
- expect(subject.agency).to eq('datacite')
1272
+ expect(subject.agency).to eq('DataCite')
1273
1273
  expect(subject.schema_version).to eq('http://datacite.org/schema/kernel-3')
1274
1274
  end
1275
1275
 
@@ -1371,7 +1371,7 @@ describe Briard::Metadata, vcr: true do
1371
1371
  { 'date' => '2009-10-01/2014-01-23', 'dateType' => 'Created' }])
1372
1372
  expect(subject.publication_year).to eq('2014')
1373
1373
  expect(subject.publisher).to eq('Deutsches Elektronen-Synchrotron, DESY, Hamburg')
1374
- expect(subject.agency).to eq('datacite')
1374
+ expect(subject.agency).to eq('DataCite')
1375
1375
  expect(subject.schema_version).to eq('http://datacite.org/schema/kernel-3')
1376
1376
  end
1377
1377
 
@@ -1396,7 +1396,7 @@ describe Briard::Metadata, vcr: true do
1396
1396
  expect(subject.funding_references.count).to eq(1)
1397
1397
  expect(subject.funding_references.first).to eq('awardNumber' => 'проект № 170100728',
1398
1398
  'funderName' => 'РФФИ')
1399
- expect(subject.agency).to eq('datacite')
1399
+ expect(subject.agency).to eq('DataCite')
1400
1400
  expect(subject.schema_version).to eq('http://datacite.org/schema/kernel-4')
1401
1401
  end
1402
1402
 
@@ -1507,7 +1507,7 @@ describe Briard::Metadata, vcr: true do
1507
1507
  'title' => 'Meteo measurements at the Sand Motor' }])
1508
1508
  expect(subject.publication_year).to eq('2017')
1509
1509
  expect(subject.publisher).to eq('4TU.Centre for Research Data')
1510
- expect(subject.agency).to eq('datacite')
1510
+ expect(subject.agency).to eq('DataCite')
1511
1511
  expect(subject.schema_version).to eq('http://datacite.org/schema/kernel-4')
1512
1512
  expect(subject.geo_locations.first['geoLocationPlace']).to eq('Zandmotor, sand suppletion area on the Dutch coast.')
1513
1513
  expect(subject.geo_locations.first['geoLocationPolygon'].first).to eq('polygonPoint' => {
@@ -1579,7 +1579,7 @@ describe Briard::Metadata, vcr: true do
1579
1579
  }
1580
1580
  ])
1581
1581
  expect(subject.publisher).to eq('DataCite')
1582
- expect(subject.agency).to eq('datacite')
1582
+ expect(subject.agency).to eq('DataCite')
1583
1583
  expect(subject.schema_version).to eq('http://datacite.org/schema/kernel-4')
1584
1584
  expect(subject.related_items.last).to eq(
1585
1585
  {
@@ -1773,7 +1773,7 @@ describe Briard::Metadata, vcr: true do
1773
1773
  }
1774
1774
  ])
1775
1775
  expect(subject.publisher).to eq('GigaScience Database')
1776
- expect(subject.agency).to eq('datacite')
1776
+ expect(subject.agency).to eq('DataCite')
1777
1777
  expect(subject.schema_version).to eq('http://datacite.org/schema/kernel-4')
1778
1778
  end
1779
1779
 
@@ -16,7 +16,7 @@ describe Briard::Metadata, vcr: true do
16
16
  context 'get npm metadata' do
17
17
  it 'minimal' do
18
18
  expect(subject.valid?).to be false
19
- expect(subject.errors.first).to start_with("3:0: ERROR: Element '{http://datacite.org/schema/kernel-4}identifier'")
19
+ expect(subject.errors.first).to eq("root is missing required keys: id, publisher, publication_year")
20
20
  # expect(subject.identifiers).to eq([{"identifier"=>"https://doi.org/10.5438/4k3m-nyvg", "identifierType"=>"DOI"}])
21
21
  # expect(subject.url).to eq("https://blog.datacite.org/eating-your-own-dog-food")
22
22
  expect(subject.types).to eq('bibtex' => 'misc', 'citeproc' => 'article',
@@ -34,7 +34,7 @@ describe Briard::Metadata, vcr: true do
34
34
  input = "#{fixture_path}cit_package.json"
35
35
  subject = described_class.new(input: input, from: 'npm')
36
36
  expect(subject.valid?).to be false
37
- expect(subject.errors.first).to start_with("3:0: ERROR: Element '{http://datacite.org/schema/kernel-4}identifier'")
37
+ expect(subject.errors.first).to eq("root is missing required keys: id, publisher, publication_year")
38
38
  # expect(subject.identifiers).to eq([{"identifier"=>"https://doi.org/10.5438/4k3m-nyvg", "identifierType"=>"DOI"}])
39
39
  # expect(subject.url).to eq("https://blog.datacite.org/eating-your-own-dog-food")
40
40
  expect(subject.types).to eq('bibtex' => 'misc', 'citeproc' => 'article',
@@ -52,7 +52,7 @@ describe Briard::Metadata, vcr: true do
52
52
  input = "#{fixture_path}edam_package.json"
53
53
  subject = described_class.new(input: input, from: 'npm')
54
54
  expect(subject.valid?).to be false
55
- expect(subject.errors.first).to start_with("3:0: ERROR: Element '{http://datacite.org/schema/kernel-4}identifier'")
55
+ expect(subject.errors.first).to eq("root is missing required keys: id, publisher, publication_year")
56
56
  # expect(subject.identifiers).to eq([{"identifier"=>"https://doi.org/10.5438/4k3m-nyvg", "identifierType"=>"DOI"}])
57
57
  # expect(subject.url).to eq("https://blog.datacite.org/eating-your-own-dog-food")
58
58
  expect(subject.types).to eq('bibtex' => 'misc', 'citeproc' => 'article',
@@ -95,9 +95,8 @@ describe Briard::Metadata, vcr: true do
95
95
  it 'zenodo' do
96
96
  input = 'https://www.zenodo.org/record/1196821'
97
97
  subject = described_class.new(input: input, from: 'schema_org')
98
- expect(subject.valid?).to be false
98
+ expect(subject.valid?).to be true
99
99
  expect(subject.language).to eq('eng')
100
- expect(subject.errors).to eq("49:0: ERROR: Element '{http://datacite.org/schema/kernel-4}publisher': [facet 'minLength'] The value has a length of '0'; this underruns the allowed minimum length of '1'.")
101
100
  expect(subject.id).to eq('https://doi.org/10.5281/zenodo.1196821')
102
101
  expect(subject.doi).to eq('10.5281/zenodo.1196821')
103
102
  expect(subject.url).to eq('https://zenodo.org/record/1196821')
@@ -108,7 +107,7 @@ describe Briard::Metadata, vcr: true do
108
107
  expect(subject.creators.first).to eq('name' => 'Staib, Matthias',
109
108
  'nameIdentifiers' => [{ 'nameIdentifier' => 'https://orcid.org/0000-0001-9688-838X', 'nameIdentifierScheme' => 'ORCID', 'schemeUri' => 'https://orcid.org' }],
110
109
  'nameType' => 'Personal', 'givenName' => 'Matthias', 'familyName' => 'Staib', 'affiliation' => [{ 'name' => 'University of Zurich, Zurich, Switzerland' }])
111
- expect(subject.publisher.nil?).to be(true)
110
+ expect(subject.publisher).to eq('Zenodo')
112
111
  expect(subject.publication_year).to eq('2018')
113
112
  expect(subject.subjects).to eq([{ 'subject' => 'pupil size response' },
114
113
  { 'subject' => 'skin conductance response' },
@@ -174,6 +173,30 @@ describe Briard::Metadata, vcr: true do
174
173
  { 'subject' => 'ankylosing spondylitis' }])
175
174
  end
176
175
 
176
+ it 'upstream blog' do
177
+ input = 'https://upstream.force11.org/elife-reviewed-preprints-interview-with-fiona-hutton'
178
+ subject = described_class.new(input: input, from: 'schema_org')
179
+ expect(subject.valid?).to be true
180
+ expect(subject.id).to eq('https://doi.org/10.54900/8d7emer-rm2pg72')
181
+ expect(subject.doi).to eq('10.54900/8d7emer-rm2pg72')
182
+ expect(subject.types).to eq('bibtex' => 'article', 'citeproc' => 'article-newspaper',
183
+ 'resourceTypeGeneral' => 'Preprint', 'ris' => 'GEN', 'schemaOrg' => 'Article')
184
+ expect(subject.titles).to eq([{ 'title' => 'eLife Reviewed Preprints: Interview with Fiona Hutton' }])
185
+ expect(subject.container).to eq('identifier' => 'https://upstream.force11.org/',
186
+ 'identifierType' => 'URL', 'title' => 'Upstream', 'type' => 'Blog')
187
+ expect(subject.creators.size).to eq(2)
188
+ expect(subject.creators.first).to eq("familyName"=>"Hutton",
189
+ "givenName" => "Fiona",
190
+ "name" => "Hutton, Fiona",
191
+ "nameType" => "Personal")
192
+ expect(subject.subjects).to eq([{ 'subject' => 'interviews' }])
193
+ expect(subject.publisher).to eq('Upstream')
194
+ expect(subject.dates).to eq([{ 'date' => '2022-11-15T10:29:38Z', 'dateType' => 'Issued' },
195
+ { 'date' => '2023-01-11T22:58:48Z', 'dateType' => 'Updated' }])
196
+ expect(subject.publication_year).to eq('2022')
197
+ expect(subject.rights_list).to eq([{"rights"=>"Creative Commons Attribution 4.0 International", "rightsUri"=>"https://creativecommons.org/licenses/by/4.0/legalcode", "rightsIdentifier"=>"cc-by-4.0", "rightsIdentifierScheme"=>"SPDX", "schemeUri"=>"https://spdx.org/licenses/"}])
198
+ end
199
+
177
200
  # TODO: check 403 status in DOI resolver
178
201
  # it "harvard dataverse via identifiers.org" do
179
202
  # input = "https://identifiers.org/doi/10.7910/DVN/NJ7XSO"
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Briard::Metadata, vcr: true do
6
+ subject { described_class.new(input: input, from: 'crossref') }
7
+
8
+ let(:input) { 'https://doi.org/10.1101/097196' }
9
+
10
+ context 'json_schema_errors' do
11
+ it 'is_valid' do
12
+ response = subject.json_schema_errors
13
+ expect(response).to be_nil
14
+ end
15
+
16
+ it 'no creator' do
17
+ input = "#{fixture_path}datacite_missing_creator.xml"
18
+ subject = described_class.new(input: input, regenerate: true)
19
+ expect(subject.creators).to be_empty
20
+ expect(subject.valid?).to be false
21
+ expect(subject.json_schema_errors).to be nil
22
+ end
23
+ end
24
+ end
@@ -138,7 +138,7 @@ describe Briard::Metadata, vcr: true do
138
138
  'schemeUri' => 'https://orcid.org' }],
139
139
  'nameType' => 'Personal' }])
140
140
  expect(subject.subjects).to eq([])
141
- expect(subject.container).to eq('type' => 'Blog')
141
+ expect(subject.container).to eq("identifier"=>"https://www.polyneme.xyz", "identifierType"=>"URL", "type"=>"Blog")
142
142
  expect(subject.language).to eq('en-US')
143
143
  expect(subject.dates).to eq([{ 'date' => '2022-10-21', 'dateType' => 'Issued' },
144
144
  { 'date' => '2022-10-21', 'dateType' => 'Created' },
@@ -187,7 +187,7 @@ describe Briard::Metadata, vcr: true do
187
187
  expect(subject.publication_year).to eq('2015')
188
188
  expect(subject.version_info).to eq('v0.3.2')
189
189
  expect(subject.publisher).to eq('Zenodo')
190
- expect(subject.agency).to eq('datacite')
190
+ expect(subject.agency).to eq('DataCite')
191
191
  expect(subject.schema_version).to eq('http://datacite.org/schema/kernel-4')
192
192
  expect(subject.datacite).to include('<version>v0.3.2</version>')
193
193
  end
@@ -216,7 +216,7 @@ describe Briard::Metadata, vcr: true do
216
216
  { 'schemeUri' => 'http://www.oecd.org/science/inno/38235147.pdf',
217
217
  'subject' => 'FOS: Computer and information sciences',
218
218
  'subjectScheme' => 'Fields of Science and Technology (FOS)' }])
219
- expect(subject.agency).to eq('datacite')
219
+ expect(subject.agency).to eq('DataCite')
220
220
  expect(subject.schema_version).to eq('http://datacite.org/schema/kernel-3')
221
221
  expect(subject.datacite).to end_with('</resource>')
222
222
  end
@@ -245,7 +245,7 @@ describe Briard::Metadata, vcr: true do
245
245
  { 'schemeUri' => 'http://www.oecd.org/science/inno/38235147.pdf',
246
246
  'subject' => 'FOS: Computer and information sciences',
247
247
  'subjectScheme' => 'Fields of Science and Technology (FOS)' }])
248
- expect(subject.agency).to eq('datacite')
248
+ expect(subject.agency).to eq('DataCite')
249
249
  expect(subject.schema_version).to eq('http://datacite.org/schema/kernel-3')
250
250
  expect(subject.datacite).to end_with('</resource>')
251
251
  end
@@ -273,7 +273,7 @@ describe Briard::Metadata, vcr: true do
273
273
  expect(subject.related_identifiers.last).to eq('relatedIdentifier' => '10.1371/journal.ppat.1000446',
274
274
  'relatedIdentifierType' => 'DOI', 'relationType' => 'IsCitedBy')
275
275
  expect(subject.publisher).to eq('Dryad')
276
- expect(subject.agency).to eq('datacite')
276
+ expect(subject.agency).to eq('DataCite')
277
277
  expect(subject.schema_version).to eq('http://datacite.org/schema/kernel-4')
278
278
 
279
279
  datacite = Maremma.from_xml(subject.datacite).fetch('resource', {})
@@ -301,7 +301,7 @@ describe Briard::Metadata, vcr: true do
301
301
  { 'date' => '2016-03-14T17:02:02Z', 'dateType' => 'Available' }, { 'date' => '2013', 'dateType' => 'Issued' }])
302
302
  expect(subject.publication_year).to eq('2013')
303
303
  expect(subject.publisher).to eq('UC Merced')
304
- expect(subject.agency).to eq('datacite')
304
+ expect(subject.agency).to eq('DataCite')
305
305
  expect(subject.schema_version).to eq('http://datacite.org/schema/kernel-4')
306
306
 
307
307
  datacite = Maremma.from_xml(subject.datacite).fetch('resource', {})
@@ -315,7 +315,7 @@ describe Briard::Metadata, vcr: true do
315
315
  expect(subject.valid?).to be false
316
316
  expect(subject.id).to eq('https://doi.org/10.4124/05f6c379-dd68-4cdb-880d-33d3e9576d52/1')
317
317
  expect(subject.doi).to eq('10.4124/05f6c379-dd68-4cdb-880d-33d3e9576d52/1')
318
- expect(subject.agency).to eq('datacite')
318
+ expect(subject.agency).to eq('DataCite')
319
319
  expect(subject.state).to eq('not_found')
320
320
  datacite = Maremma.from_xml(subject.datacite).fetch('resource', {})
321
321
  expect(datacite['identifier']).to eq('identifierType' => 'DOI',
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: briard
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.8.2
4
+ version: 2.9.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martin Fenner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-11-23 00:00:00.000000000 Z
11
+ date: 2023-01-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -290,6 +290,20 @@ dependencies:
290
290
  - - "~>"
291
291
  - !ruby/object:Gem::Version
292
292
  version: 0.3.0
293
+ - !ruby/object:Gem::Dependency
294
+ name: json_schemer
295
+ requirement: !ruby/object:Gem::Requirement
296
+ requirements:
297
+ - - "~>"
298
+ - !ruby/object:Gem::Version
299
+ version: 0.2.23
300
+ type: :runtime
301
+ prerelease: false
302
+ version_requirements: !ruby/object:Gem::Requirement
303
+ requirements:
304
+ - - "~>"
305
+ - !ruby/object:Gem::Version
306
+ version: 0.2.23
293
307
  - !ruby/object:Gem::Dependency
294
308
  name: loofah
295
309
  requirement: !ruby/object:Gem::Requirement
@@ -747,6 +761,7 @@ files:
747
761
  - lib/briard/readers/npm_reader.rb
748
762
  - lib/briard/readers/ris_reader.rb
749
763
  - lib/briard/readers/schema_org_reader.rb
764
+ - lib/briard/schema_utils.rb
750
765
  - lib/briard/string.rb
751
766
  - lib/briard/utils.rb
752
767
  - lib/briard/version.rb
@@ -790,6 +805,7 @@ files:
790
805
  - resources/datacite-relationType-v4.xsd
791
806
  - resources/datacite-resourceType-v4.xsd
792
807
  - resources/datacite-titleType-v4.xsd
808
+ - resources/json-schema/briard_schema.json
793
809
  - resources/kernel-2.1/include/datacite-contributorType-v1.1.xsd
794
810
  - resources/kernel-2.1/include/datacite-contributorType-v2.xsd
795
811
  - resources/kernel-2.1/include/datacite-dateType-v1.1.xsd
@@ -1289,6 +1305,9 @@ files:
1289
1305
  - spec/fixtures/vcr_cassettes/Briard_Metadata/is_personal_name_/has_no_info.yml
1290
1306
  - spec/fixtures/vcr_cassettes/Briard_Metadata/is_personal_name_/has_orcid_id.yml
1291
1307
  - spec/fixtures/vcr_cassettes/Briard_Metadata/is_personal_name_/has_type_organization.yml
1308
+ - spec/fixtures/vcr_cassettes/Briard_Metadata/json_schema_errors/doi_not_found.yml
1309
+ - spec/fixtures/vcr_cassettes/Briard_Metadata/json_schema_errors/is_valid.yml
1310
+ - spec/fixtures/vcr_cassettes/Briard_Metadata/json_schema_valid_/is_valid.yml
1292
1311
  - spec/fixtures/vcr_cassettes/Briard_Metadata/jsonlint/missing_comma.yml
1293
1312
  - spec/fixtures/vcr_cassettes/Briard_Metadata/jsonlint/nil.yml
1294
1313
  - spec/fixtures/vcr_cassettes/Briard_Metadata/jsonlint/overlapping_keys.yml
@@ -1501,6 +1520,7 @@ files:
1501
1520
  - spec/readers/npm_reader_spec.rb
1502
1521
  - spec/readers/ris_reader_spec.rb
1503
1522
  - spec/readers/schema_org_reader_spec.rb
1523
+ - spec/schema_utils_spec.rb
1504
1524
  - spec/spec_helper.rb
1505
1525
  - spec/utils_spec.rb
1506
1526
  - spec/writers/bibtex_writer_spec.rb