briard 2.4.2 → 2.6.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (83) 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/.gitignore +1 -0
  5. data/.rubocop.yml +144 -620
  6. data/.rubocop_todo.yml +76 -0
  7. data/CHANGELOG.md +18 -0
  8. data/Gemfile +2 -0
  9. data/Gemfile.lock +43 -9
  10. data/Rakefile +1 -1
  11. data/{bolognese.gemspec → briard.gemspec} +46 -39
  12. data/lib/briard/array.rb +2 -2
  13. data/lib/briard/author_utils.rb +79 -71
  14. data/lib/briard/cli.rb +12 -13
  15. data/lib/briard/crossref_utils.rb +73 -61
  16. data/lib/briard/datacite_utils.rb +132 -106
  17. data/lib/briard/doi_utils.rb +10 -10
  18. data/lib/briard/metadata.rb +96 -106
  19. data/lib/briard/metadata_utils.rb +87 -78
  20. data/lib/briard/readers/bibtex_reader.rb +65 -65
  21. data/lib/briard/readers/cff_reader.rb +88 -70
  22. data/lib/briard/readers/citeproc_reader.rb +90 -84
  23. data/lib/briard/readers/codemeta_reader.rb +68 -50
  24. data/lib/briard/readers/crosscite_reader.rb +2 -2
  25. data/lib/briard/readers/crossref_reader.rb +249 -210
  26. data/lib/briard/readers/datacite_json_reader.rb +3 -3
  27. data/lib/briard/readers/datacite_reader.rb +225 -189
  28. data/lib/briard/readers/npm_reader.rb +49 -42
  29. data/lib/briard/readers/ris_reader.rb +82 -80
  30. data/lib/briard/readers/schema_org_reader.rb +182 -159
  31. data/lib/briard/string.rb +1 -1
  32. data/lib/briard/utils.rb +4 -4
  33. data/lib/briard/version.rb +3 -1
  34. data/lib/briard/whitelist_scrubber.rb +11 -4
  35. data/lib/briard/writers/bibtex_writer.rb +14 -8
  36. data/lib/briard/writers/cff_writer.rb +33 -26
  37. data/lib/briard/writers/codemeta_writer.rb +19 -15
  38. data/lib/briard/writers/csv_writer.rb +6 -4
  39. data/lib/briard/writers/datacite_json_writer.rb +8 -2
  40. data/lib/briard/writers/jats_writer.rb +33 -28
  41. data/lib/briard/writers/rdf_xml_writer.rb +1 -1
  42. data/lib/briard/writers/ris_writer.rb +30 -18
  43. data/lib/briard/writers/turtle_writer.rb +1 -1
  44. data/lib/briard.rb +6 -6
  45. data/rubocop.sarif +0 -0
  46. data/spec/array_spec.rb +5 -5
  47. data/spec/author_utils_spec.rb +151 -132
  48. data/spec/datacite_utils_spec.rb +135 -83
  49. data/spec/doi_utils_spec.rb +168 -164
  50. data/spec/find_from_format_spec.rb +69 -69
  51. data/spec/fixtures/vcr_cassettes/Briard_Metadata/sanitize/onlies_keep_specific_tags.yml +65 -0
  52. data/spec/fixtures/vcr_cassettes/Briard_Metadata/sanitize/removes_a_tags.yml +65 -0
  53. data/spec/metadata_spec.rb +91 -90
  54. data/spec/readers/bibtex_reader_spec.rb +43 -38
  55. data/spec/readers/cff_reader_spec.rb +165 -153
  56. data/spec/readers/citeproc_reader_spec.rb +45 -40
  57. data/spec/readers/codemeta_reader_spec.rb +128 -115
  58. data/spec/readers/crosscite_reader_spec.rb +34 -24
  59. data/spec/readers/crossref_reader_spec.rb +1098 -939
  60. data/spec/readers/datacite_json_reader_spec.rb +53 -40
  61. data/spec/readers/datacite_reader_spec.rb +1541 -1337
  62. data/spec/readers/npm_reader_spec.rb +48 -43
  63. data/spec/readers/ris_reader_spec.rb +53 -47
  64. data/spec/readers/schema_org_reader_spec.rb +329 -267
  65. data/spec/spec_helper.rb +6 -5
  66. data/spec/utils_spec.rb +371 -347
  67. data/spec/writers/bibtex_writer_spec.rb +143 -143
  68. data/spec/writers/cff_writer_spec.rb +96 -90
  69. data/spec/writers/citation_writer_spec.rb +34 -33
  70. data/spec/writers/citeproc_writer_spec.rb +226 -224
  71. data/spec/writers/codemeta_writer_spec.rb +18 -16
  72. data/spec/writers/crosscite_writer_spec.rb +91 -73
  73. data/spec/writers/crossref_writer_spec.rb +99 -91
  74. data/spec/writers/csv_writer_spec.rb +70 -70
  75. data/spec/writers/datacite_json_writer_spec.rb +78 -68
  76. data/spec/writers/datacite_writer_spec.rb +417 -322
  77. data/spec/writers/jats_writer_spec.rb +177 -161
  78. data/spec/writers/rdf_xml_writer_spec.rb +68 -63
  79. data/spec/writers/ris_writer_spec.rb +162 -162
  80. data/spec/writers/schema_org_writer_spec.rb +329 -294
  81. data/spec/writers/turtle_writer_spec.rb +47 -47
  82. metadata +242 -166
  83. data/.github/workflows/release.yml +0 -47
@@ -3,29 +3,37 @@
3
3
  require 'spec_helper'
4
4
 
5
5
  describe Briard::Metadata, vcr: true do
6
- let(:input) { fixture_path + "datacite.json" }
6
+ subject { described_class.new(input: input) }
7
7
 
8
- subject { Briard::Metadata.new(input: input) }
8
+ let(:input) { "#{fixture_path}datacite.json" }
9
9
 
10
- context "get datacite_json raw" do
11
- it "BlogPosting" do
12
- expect(subject.raw).to eq(IO.read(input).strip)
10
+ context 'get datacite_json raw' do
11
+ it 'BlogPosting' do
12
+ expect(subject.raw).to eq(File.read(input).strip)
13
13
  end
14
14
  end
15
15
 
16
- context "get datacite_json metadata" do
17
- it "BlogPosting" do
16
+ context 'get datacite_json metadata' do
17
+ it 'BlogPosting' do
18
18
  expect(subject.valid?).to be true
19
- expect(subject.types).to eq("bibtex"=>"article", "citeproc"=>"article-journal", "resourceType"=>"BlogPosting", "resourceTypeGeneral"=>"Text", "ris"=>"RPRT", "schemaOrg"=>"ScholarlyArticle")
20
- expect(subject.creators).to eq([{"type"=>"Person", "id"=>"http://orcid.org/0000-0003-1419-2405", "name"=>"Fenner, Martin", "givenName"=>"Martin", "familyName"=>"Fenner"}])
21
- expect(subject.titles).to eq([{"title"=>"Eating your own Dog Food"}])
22
- expect(subject.identifiers).to eq([{"identifier"=>"https://doi.org/10.5438/4k3m-nyvg", "identifierType"=>"DOI"}, {"identifier"=>"MS-49-3632-5083", "identifierType"=>"Local accession number"}])
23
- expect(subject.dates).to eq([{"date"=>"2016-12-20", "dateType"=>"Created"}, {"date"=>"2016-12-20", "dateType"=>"Issued"}, {"date"=>"2016-12-20", "dateType"=>"Updated"}])
24
- expect(subject.publication_year).to eq("2016")
19
+ expect(subject.types).to eq('bibtex' => 'article', 'citeproc' => 'article-journal',
20
+ 'resourceType' => 'BlogPosting', 'resourceTypeGeneral' => 'Text', 'ris' => 'RPRT', 'schemaOrg' => 'ScholarlyArticle')
21
+ expect(subject.creators).to eq([{ 'type' => 'Person',
22
+ 'id' => 'http://orcid.org/0000-0003-1419-2405', 'name' => 'Fenner, Martin', 'givenName' => 'Martin', 'familyName' => 'Fenner' }])
23
+ expect(subject.titles).to eq([{ 'title' => 'Eating your own Dog Food' }])
24
+ expect(subject.identifiers).to eq([
25
+ { 'identifier' => 'https://doi.org/10.5438/4k3m-nyvg',
26
+ 'identifierType' => 'DOI' }, { 'identifier' => 'MS-49-3632-5083', 'identifierType' => 'Local accession number' }
27
+ ])
28
+ expect(subject.dates).to eq([{ 'date' => '2016-12-20', 'dateType' => 'Created' },
29
+ { 'date' => '2016-12-20', 'dateType' => 'Issued' }, { 'date' => '2016-12-20', 'dateType' => 'Updated' }])
30
+ expect(subject.publication_year).to eq('2016')
25
31
  expect(subject.related_identifiers.length).to eq(3)
26
- expect(subject.related_identifiers.first).to eq("relatedIdentifier"=>"10.5438/0000-00ss", "relatedIdentifierType"=>"DOI", "relationType"=>"IsPartOf")
27
- expect(subject.related_identifiers.last).to eq("relatedIdentifier"=>"10.5438/55e5-t5c0", "relatedIdentifierType"=>"DOI", "relationType"=>"References")
28
- expect(subject.agency).to eq("datacite")
32
+ expect(subject.related_identifiers.first).to eq('relatedIdentifier' => '10.5438/0000-00ss',
33
+ 'relatedIdentifierType' => 'DOI', 'relationType' => 'IsPartOf')
34
+ expect(subject.related_identifiers.last).to eq('relatedIdentifier' => '10.5438/55e5-t5c0',
35
+ 'relatedIdentifierType' => 'DOI', 'relationType' => 'References')
36
+ expect(subject.agency).to eq('datacite')
29
37
  end
30
38
 
31
39
  # it "SoftwareSourceCode" do
@@ -42,39 +50,44 @@ describe Briard::Metadata, vcr: true do
42
50
  # expect(subject.agency).to eq("DataCite")
43
51
  # end
44
52
 
45
- it "SoftwareSourceCode missing_comma" do
46
- input = fixture_path + "datacite_software_missing_comma.json"
47
- subject = Briard::Metadata.new(input: input, from: "datacite_json", show_errors: true)
53
+ it 'SoftwareSourceCode missing_comma' do
54
+ input = "#{fixture_path}datacite_software_missing_comma.json"
55
+ subject = described_class.new(input: input, from: 'datacite_json', show_errors: true)
48
56
  expect(subject.valid?).to be false
49
- expect(subject.errors).to eq(["expected comma, not a string (after doi) at line 4, column 11 [parse.c:430]"])
50
- expect(subject.codemeta).to be_nil
57
+ expect(subject.errors).to eq(['expected comma, not a string (after doi) at line 4, column 11 [parse.c:430]'])
58
+ expect(subject.codemeta.nil?).to be(true)
51
59
  end
52
60
 
53
- it "SoftwareSourceCode overlapping_keys" do
54
- input = fixture_path + "datacite_software_overlapping_keys.json"
55
- subject = Briard::Metadata.new(input: input, from: "datacite_json", show_errors: true)
61
+ it 'SoftwareSourceCode overlapping_keys' do
62
+ input = "#{fixture_path}datacite_software_overlapping_keys.json"
63
+ subject = described_class.new(input: input, from: 'datacite_json', show_errors: true)
56
64
  expect(subject.valid?).to be false
57
- expect(subject.errors).to eq(["The same key is defined more than once: id"])
58
- expect(subject.codemeta).to be_nil
65
+ expect(subject.errors).to eq(['The same key is defined more than once: id'])
66
+ expect(subject.codemeta.nil?).to be(true)
59
67
  end
60
68
 
61
- it "metadata from api" do
62
- input = "10.5281/zenodo.28518"
63
- subject = Briard::Metadata.new(input: input, regenerate: true)
69
+ it 'metadata from api' do
70
+ input = '10.5281/zenodo.28518'
71
+ subject = described_class.new(input: input, regenerate: true)
64
72
  expect(subject.valid?).to be true
65
- expect(subject.types).to eq("bibtex"=>"misc", "citeproc"=>"article", "resourceTypeGeneral"=>"Software", "ris"=>"COMP", "schemaOrg"=>"SoftwareSourceCode")
73
+ expect(subject.types).to eq('bibtex' => 'misc', 'citeproc' => 'article',
74
+ 'resourceTypeGeneral' => 'Software', 'ris' => 'COMP', 'schemaOrg' => 'SoftwareSourceCode')
66
75
  expect(subject.creators.length).to eq(2)
67
- expect(subject.creators.first).to eq("affiliation"=>[{"name"=>"University of Washington"}], "familyName"=>"Vanderplas", "givenName"=>"Jake", "name"=>"Vanderplas, Jake", "nameIdentifiers"=>[], "nameType"=>"Personal")
68
- expect(subject.titles).to eq([{"title"=>"Supersmoother: Minor Bug Fix Release"}])
69
- expect(subject.id).to eq("https://doi.org/10.5281/zenodo.28518")
70
- expect(subject.identifiers).to eq([{"identifier"=>"https://zenodo.org/record/28518", "identifierType"=>"URL"}])
71
- expect(subject.dates).to eq([{"date"=>"2015-08-19", "dateType"=>"Issued"}])
72
- expect(subject.publication_year).to eq("2015")
73
- expect(subject.version_info).to eq("v0.3.2")
74
- expect(subject.datacite).to include("<version>v0.3.2</version>")
76
+ expect(subject.creators.first).to eq('affiliation' => [{ 'name' => 'University of Washington' }],
77
+ 'familyName' => 'Vanderplas', 'givenName' => 'Jake', 'name' => 'Vanderplas, Jake', 'nameIdentifiers' => [], 'nameType' => 'Personal')
78
+ expect(subject.titles).to eq([{ 'title' => 'Supersmoother: Minor Bug Fix Release' }])
79
+ expect(subject.id).to eq('https://doi.org/10.5281/zenodo.28518')
80
+ expect(subject.identifiers).to eq([{ 'identifier' => 'https://zenodo.org/record/28518',
81
+ 'identifierType' => 'URL' }])
82
+ expect(subject.dates).to eq([{ 'date' => '2015-08-19', 'dateType' => 'Issued' }])
83
+ expect(subject.publication_year).to eq('2015')
84
+ expect(subject.version_info).to eq('v0.3.2')
85
+ expect(subject.datacite).to include('<version>v0.3.2</version>')
75
86
  expect(subject.related_identifiers.length).to eq(2)
76
- expect(subject.related_identifiers.first).to eq("relatedIdentifier"=>"https://github.com/jakevdp/supersmoother/tree/v0.3.2", "relatedIdentifierType"=>"URL", "relationType"=>"IsSupplementTo")
77
- expect(subject.agency).to eq("datacite")
87
+ expect(subject.related_identifiers.first).to eq(
88
+ 'relatedIdentifier' => 'https://github.com/jakevdp/supersmoother/tree/v0.3.2', 'relatedIdentifierType' => 'URL', 'relationType' => 'IsSupplementTo'
89
+ )
90
+ expect(subject.agency).to eq('datacite')
78
91
  end
79
92
  end
80
93
  end