briard 2.4.1 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
@@ -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