briard 2.0.2 → 2.2.3

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 (33) hide show
  1. checksums.yaml +4 -4
  2. data/.tool-versions +1 -0
  3. data/CHANGELOG.md +32 -0
  4. data/Gemfile.lock +1 -1
  5. data/LICENSE.md +1 -1
  6. data/README.md +7 -0
  7. data/lib/briard/metadata.rb +2 -2
  8. data/lib/briard/metadata_utils.rb +4 -0
  9. data/lib/briard/readers/cff_reader.rb +123 -0
  10. data/lib/briard/readers/crossref_reader.rb +3 -3
  11. data/lib/briard/utils.rb +23 -1
  12. data/lib/briard/version.rb +1 -1
  13. data/lib/briard/writers/cff_writer.rb +54 -0
  14. data/spec/find_from_format_spec.rb +21 -1
  15. data/spec/fixtures/CITATION.cff +83 -0
  16. data/spec/fixtures/vcr_cassettes/Briard_Metadata/get_cff_metadata/cff-converter-python.yml +75 -0
  17. data/spec/fixtures/vcr_cassettes/Briard_Metadata/get_cff_metadata/pidgraph-notebooks-python.yml +75 -0
  18. data/spec/fixtures/vcr_cassettes/Briard_Metadata/get_cff_metadata/ruby-cff.yml +75 -0
  19. data/spec/fixtures/vcr_cassettes/Briard_Metadata/get_cff_metadata/ruby-cff_repository_url.yml +75 -0
  20. data/spec/fixtures/vcr_cassettes/Briard_Metadata/get_codemeta_metadata/maremma.yml +10 -10
  21. data/spec/fixtures/vcr_cassettes/Briard_Metadata/get_codemeta_metadata/metadata_reports.yml +6 -6
  22. data/spec/fixtures/vcr_cassettes/Briard_Metadata/github/github_as_cff_url.yml +65 -0
  23. data/spec/fixtures/vcr_cassettes/Briard_Metadata/github/github_from_url_cff_file.yml +65 -0
  24. data/spec/fixtures/vcr_cassettes/Briard_Metadata/write_metadata_as_cff/SoftwareSourceCode_DataCite.yml +61 -0
  25. data/spec/fixtures/vcr_cassettes/Briard_Metadata/write_metadata_as_cff/SoftwareSourceCode_Zenodo.yml +61 -0
  26. data/spec/fixtures/vcr_cassettes/Briard_Metadata/write_metadata_as_cff/SoftwareSourceCode_also_Zenodo.yml +61 -0
  27. data/spec/fixtures/vcr_cassettes/Briard_Metadata/write_metadata_as_cff/ruby-cff.yml +75 -0
  28. data/spec/metadata_spec.rb +1 -1
  29. data/spec/readers/cff_reader_spec.rb +172 -0
  30. data/spec/readers/codemeta_reader_spec.rb +1 -1
  31. data/spec/utils_spec.rb +12 -0
  32. data/spec/writers/cff_writer_spec.rb +78 -0
  33. metadata +18 -2
@@ -0,0 +1,61 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api.datacite.org/dois/10.5281/zenodo.15497?include=media,client
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ User-Agent:
11
+ - Mozilla/5.0 (compatible; Maremma/4.9.6; mailto:info@front-matter.io)
12
+ Accept:
13
+ - text/html,application/json,application/xml;q=0.9, text/plain;q=0.8,image/png,*/*;q=0.5
14
+ Accept-Encoding:
15
+ - gzip,deflate
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Date:
22
+ - Tue, 07 Dec 2021 11:17:11 GMT
23
+ Content-Type:
24
+ - application/json; charset=utf-8
25
+ Connection:
26
+ - keep-alive
27
+ Status:
28
+ - 200 OK
29
+ X-Anonymous-Consumer:
30
+ - 'true'
31
+ Cache-Control:
32
+ - max-age=0, private, must-revalidate
33
+ Vary:
34
+ - Accept-Encoding
35
+ Content-Encoding:
36
+ - gzip
37
+ Etag:
38
+ - W/"1efc7894df6207f4acc17d2ba66e6d48"
39
+ X-Runtime:
40
+ - '0.809856'
41
+ X-Request-Id:
42
+ - 4055a210-ae16-4e1f-a15a-08331dd796e2
43
+ X-Powered-By:
44
+ - Phusion Passenger(R) 6.0.12
45
+ Server:
46
+ - nginx/1.18.0 + Phusion Passenger(R) 6.0.12
47
+ Access-Control-Allow-Credentials:
48
+ - 'true'
49
+ Access-Control-Allow-Methods:
50
+ - GET, POST, PUT, PATCH, DELETE, OPTIONS
51
+ Access-Control-Allow-Headers:
52
+ - Accept,Access-Control-Allow-Origin,Access-Control-Expose-Headers,Access-Control-Allow-Methods,Access-Control-Allow-Headers,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin,User-Agent,X-Mx-ReqToken,X-Requested-With
53
+ Access-Control-Expose-Headers:
54
+ - Authorization
55
+ body:
56
+ encoding: ASCII-8BIT
57
+ string: !binary |-
58
+ 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
59
+ http_version:
60
+ recorded_at: Tue, 07 Dec 2021 11:17:11 GMT
61
+ recorded_with: VCR 3.0.3
@@ -0,0 +1,75 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://raw.githubusercontent.com/citation-file-format/ruby-cff/main/CITATION.cff
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ User-Agent:
11
+ - Mozilla/5.0 (compatible; Maremma/4.9.6; mailto:info@front-matter.io)
12
+ Accept:
13
+ - application/json;charset=UTF-8
14
+ Accept-Encoding:
15
+ - gzip,deflate
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Connection:
22
+ - keep-alive
23
+ Content-Length:
24
+ - '1100'
25
+ Cache-Control:
26
+ - max-age=300
27
+ Content-Security-Policy:
28
+ - default-src 'none'; style-src 'unsafe-inline'; sandbox
29
+ Content-Type:
30
+ - text/plain; charset=utf-8
31
+ Etag:
32
+ - W/"0c65d88dd50bd96382850237735a8e2d6c0826d4497c8aafd6c28a2bacdb4127"
33
+ Strict-Transport-Security:
34
+ - max-age=31536000
35
+ X-Content-Type-Options:
36
+ - nosniff
37
+ X-Frame-Options:
38
+ - deny
39
+ X-Xss-Protection:
40
+ - 1; mode=block
41
+ X-Github-Request-Id:
42
+ - C94A:D42F:40C4B0:4FF047:61AF689B
43
+ Content-Encoding:
44
+ - gzip
45
+ Accept-Ranges:
46
+ - bytes
47
+ Date:
48
+ - Tue, 07 Dec 2021 13:58:52 GMT
49
+ Via:
50
+ - 1.1 varnish
51
+ X-Served-By:
52
+ - cache-hhn4041-HHN
53
+ X-Cache:
54
+ - MISS
55
+ X-Cache-Hits:
56
+ - '0'
57
+ X-Timer:
58
+ - S1638885532.881150,VS0,VE231
59
+ Vary:
60
+ - Authorization,Accept-Encoding,Origin
61
+ Access-Control-Allow-Origin:
62
+ - "*"
63
+ X-Fastly-Request-Id:
64
+ - 226be732c5d156ff9846cc2a7b43c4ec2f4643b9
65
+ Expires:
66
+ - Tue, 07 Dec 2021 14:03:52 GMT
67
+ Source-Age:
68
+ - '0'
69
+ body:
70
+ encoding: ASCII-8BIT
71
+ string: !binary |-
72
+ H4sIAAAAAAAAA5VW247bNhB911cMkJcWCGVJ67UkP3Xj7Xa3uRXZDYo80tLIIkyLAknZcf4mj/2O/FiHlC9bW0lcw4ZkcjjXwznzAp5qYWD28HTz9PD+XVhUFVRCImy4gUIjt1jCfAu6m2+Z2/xlDVGYh9GvYfAC/sDVFGprWzMdjZzIAlcmVHoxci8jkieh2d3dUagQlluhGuaMsErpFbfhQti6m4dCjYKAzrA1akMyU4jDJIyCFRrDFziFhwq2qoPO4NEf0bg1DRully+hlchpl6wgCEuSolmArREqJaXauH8rtLzklgdWWElKP5Am5yO8EXPN9Tbgc2M1L+y0T43sl6HVai1KNMD7I6KxqCteIFgFK96ItpOULZjtIoQ7l8Y7H6FPqQl4Z2ulzTRgUPGVkFvWcApuCvdcNLQPsBBrbParH9QctaVVpQtRHnPo//osR/Rh9EtYfn2VsTSPcxLnFZkT3gkXA8LHRviU2i2oCt7ypqjRkPcv4eNr8sWZ6wX7XAwFcItrlKolLcESt5Ts0ofhykAPAkopLL0YVdkN174CXomTQYNcF/Vh87mc6Yyl4PmcPLZO1aE87KCjB2SPFVqmWgUHhHgsBqUSBJYovE6yePQFG1WqMI6zcZSmASlDptEDg5KYREnMoozFWSBFgY2h0G9aThlhDmsaW0WJUnrLuLai8jj4McKfHSlUiUfxHawLtRqE/WiPYdJQocamQJ9Tu21JySFZADugDtXFVXsPKoBTWN3qziy90AmyHi22NW/8xk/BdcXGeXLN0mScDdh4bDlfmnMTf3ZaC84buA8vM5OwNJqM2Tia5ANmZnWHcK+axbmldyjkpSayLJ2wdBJNBkwcLuH3ruH/voinFl7xJeqBVLnHpfqTSZawSZ4kQ/qlUztQ7taBS19qIk7oLZ7kmT+AKy4k4bHXEc69jd8WbtVBe8CNv4WUYlFTyx7w5feFuhB3MUuvxwmLkmyoWn99+0fjF/bYfftKz3M7t5y69aUAj9JsTEmNcn9gg3O6z88uctmaGqVQR6IacOi1atSaS7U+9+VG4mfelJdWIGbXSZ6zqyR3RSbOaagRCdzf8b4/UMvz2shkh+fNj6KKx304xFmFFu2RDgpFlWypp79/cF3V82NB/IiFby+07Vqy40ouJexarXHU4SSH2lB4sWPXcRrnV+mwYztTNHE8d2232g8DP/PiSE7Oo0EGcRuOQ84EjF86pzBf6xMFn27evvmv+AmTub1z5vM2e7Kkzn0YNM7GL5oySGUrSSFY/LwbIGBD+IO6o2mDAQGKxo6ipqZF9EacOZdHn2k66Z31sVEi9x6EMCOOotTv6RwK7qQL2dEyZXblJip6Cg0HYhNkmoYciRYUbdGhZaM2UNOPlgulNUFHbvuxqz97tOeHKPq6qlETKQjKxdGvH9XyO8ztb+mBu2cz9uoTGxN1A5zMjf8CsnKrBdwKAAA=
73
+ http_version:
74
+ recorded_at: Tue, 07 Dec 2021 13:58:52 GMT
75
+ recorded_with: VCR 3.0.3
@@ -54,7 +54,7 @@ describe Briard::Metadata, vcr: true do
54
54
  end
55
55
 
56
56
  it "github" do
57
- id = "https://github.com/datacite/maremma"
57
+ id = "https://github.com/datacite/maremma/blob/master/codemeta.json"
58
58
  expect(subject.find_from_format(id: id)).to eq("codemeta")
59
59
  end
60
60
 
@@ -0,0 +1,172 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Briard::Metadata, vcr: true do
6
+ let(:input) { "https://github.com/citation-file-format/ruby-cff/blob/main/CITATION.cff" }
7
+
8
+ subject { Briard::Metadata.new(input: input) }
9
+
10
+ context "get cff metadata" do
11
+ it "ruby-cff" do
12
+ expect(subject.valid?).to be true
13
+ expect(subject.id).to eq("https://doi.org/10.5281/zenodo.1184077")
14
+ expect(subject.url).to eq("https://github.com/citation-file-format/ruby-cff")
15
+ expect(subject.types).to eq("bibtex"=>"misc", "citeproc"=>"article-journal", "resourceTypeGeneral"=>"Software", "ris"=>"COMP", "schemaOrg"=>"SoftwareSourceCode")
16
+ expect(subject.creators).to eq([{"affiliation"=>[{"name"=>"The University of Manchester, UK"}], "familyName"=>"Haines", "givenName"=>"Robert", "name"=>"Haines, Robert", "nameIdentifiers"=>
17
+ [{"nameIdentifier"=>"https://orcid.org/0000-0002-9538-7919",
18
+ "nameIdentifierScheme"=>"ORCID",
19
+ "schemeUri"=>"https://orcid.org"}], "nameType"=>"Personal"}, {"name"=>"The Ruby Citation File Format Developers", "nameType"=>"Organizational"}])
20
+ expect(subject.titles).to eq([{"title"=>"Ruby CFF Library"}])
21
+ expect(subject.descriptions.first["description"]).to start_with("This library provides a Ruby interface to manipulate Citation File Format files")
22
+ expect(subject.subjects).to eq([{"subject"=>"ruby"},
23
+ {"subject"=>"credit"},
24
+ {"subject"=>"software citation"},
25
+ {"subject"=>"research software"},
26
+ {"subject"=>"software sustainability"},
27
+ {"subject"=>"metadata"},
28
+ {"subject"=>"citation file format"},
29
+ {"subject"=>"CFF"}])
30
+ expect(subject.version_info).to eq("0.9.0")
31
+ expect(subject.dates).to eq([{"date"=>"2021-08-18", "dateType"=>"Issued"}])
32
+ expect(subject.publication_year).to eq("2021")
33
+ expect(subject.publisher).to eq("GitHub")
34
+ expect(subject.rights_list).to eq([{"rights"=>"Apache License 2.0",
35
+ "rightsIdentifier"=>"apache-2.0",
36
+ "rightsIdentifierScheme"=>"SPDX",
37
+ "rightsUri"=>"http://www.apache.org/licenses/LICENSE-2.0",
38
+ "schemeUri"=>"https://spdx.org/licenses/"}])
39
+ expect(subject.related_identifiers).to eq([{"relatedIdentifier"=>"https://doi.org/10.5281/zenodo.1003149", "relatedIdentifierType"=>"DOI", "relationType"=>"References"}])
40
+ end
41
+
42
+ it "cff-converter-python" do
43
+ input = "https://github.com/citation-file-format/cff-converter-python/blob/main/CITATION.cff"
44
+ subject = Briard::Metadata.new(input: input)
45
+ expect(subject.id).to eq("https://doi.org/10.5281/zenodo.1162057")
46
+ expect(subject.url).to eq("https://github.com/citation-file-format/cff-converter-python")
47
+ expect(subject.types).to eq("bibtex"=>"misc", "citeproc"=>"article-journal", "resourceTypeGeneral"=>"Software", "ris"=>"COMP", "schemaOrg"=>"SoftwareSourceCode")
48
+ expect(subject.creators).to eq([{"affiliation"=>[{"name"=>"Netherlands eScience Center"}],
49
+ "familyName"=>"Spaaks",
50
+ "givenName"=>"Jurriaan H.",
51
+ "name"=>"Spaaks, Jurriaan H.",
52
+ "nameIdentifiers"=>
53
+ [{"nameIdentifier"=>"https://orcid.org/0000-0002-7064-4069",
54
+ "nameIdentifierScheme"=>"ORCID",
55
+ "schemeUri"=>"https://orcid.org"}],
56
+ "nameType"=>"Personal"},
57
+ {"affiliation"=>[{"name"=>"Netherlands eScience Center"}],
58
+ "familyName"=>"Klaver",
59
+ "givenName"=>"Tom",
60
+ "name"=>"Klaver, Tom",
61
+ "nameType"=>"Personal"},
62
+ {"affiliation"=>[{"name"=>"Netherlands eScience Center"}],
63
+ "familyName"=>"Verhoeven",
64
+ "givenName"=>"Stefan",
65
+ "name"=>"Verhoeven, Stefan",
66
+ "nameIdentifiers"=>
67
+ [{"nameIdentifier"=>"https://orcid.org/0000-0002-5821-2060",
68
+ "nameIdentifierScheme"=>"ORCID",
69
+ "schemeUri"=>"https://orcid.org"}],
70
+ "nameType"=>"Personal"},
71
+ {"affiliation"=>[{"name"=>"Humboldt-Universit??t zu Berlin"}],
72
+ "familyName"=>"Druskat",
73
+ "givenName"=>"Stephan",
74
+ "name"=>"Druskat, Stephan",
75
+ "nameIdentifiers"=>
76
+ [{"nameIdentifier"=>"https://orcid.org/0000-0003-4925-7248",
77
+ "nameIdentifierScheme"=>"ORCID",
78
+ "schemeUri"=>"https://orcid.org"}],
79
+ "nameType"=>"Personal"},
80
+ {"affiliation"=>[{"name"=>"University of Oslo"}],
81
+ "familyName"=>"Leoncio",
82
+ "givenName"=>"Waldir",
83
+ "name"=>"Leoncio, Waldir",
84
+ "nameType"=>"Personal"}])
85
+ expect(subject.titles).to eq([{"title"=>"cffconvert"}])
86
+ expect(subject.descriptions.first["description"]).to start_with("Command line program to validate and convert CITATION.cff files")
87
+ expect(subject.subjects).to eq([{"subject"=>"bibliography"},
88
+ {"subject"=>"BibTeX"},
89
+ {"subject"=>"cff"},
90
+ {"subject"=>"citation"},
91
+ {"subject"=>"CITATION.cff"},
92
+ {"subject"=>"CodeMeta"},
93
+ {"subject"=>"EndNote"},
94
+ {"subject"=>"RIS"},
95
+ {"subject"=>"Citation File Format"}])
96
+ expect(subject.version_info).to eq("2.0.0")
97
+ expect(subject.dates).to eq([{"date"=>"2021-09-22", "dateType"=>"Issued"}])
98
+ expect(subject.publication_year).to eq("2021")
99
+ expect(subject.publisher).to eq("GitHub")
100
+ expect(subject.rights_list).to eq([{"rights"=>"Apache License 2.0",
101
+ "rightsIdentifier"=>"apache-2.0",
102
+ "rightsIdentifierScheme"=>"SPDX",
103
+ "rightsUri"=>"http://www.apache.org/licenses/LICENSE-2.0",
104
+ "schemeUri"=>"https://spdx.org/licenses/"}])
105
+ expect(subject.related_identifiers).to eq([{"relatedIdentifier"=>"https://doi.org/10.5281/zenodo.1310751", "relatedIdentifierType"=>"DOI", "relationType"=>"References"}])
106
+ end
107
+
108
+ it "ruby-cff" do
109
+ expect(subject.valid?).to be true
110
+ expect(subject.id).to eq("https://doi.org/10.5281/zenodo.1184077")
111
+ expect(subject.url).to eq("https://github.com/citation-file-format/ruby-cff")
112
+ expect(subject.types).to eq("bibtex"=>"misc", "citeproc"=>"article-journal", "resourceTypeGeneral"=>"Software", "ris"=>"COMP", "schemaOrg"=>"SoftwareSourceCode")
113
+ expect(subject.creators).to eq([{"affiliation"=>[{"name"=>"The University of Manchester, UK"}], "familyName"=>"Haines", "givenName"=>"Robert", "name"=>"Haines, Robert", "nameIdentifiers"=>
114
+ [{"nameIdentifier"=>"https://orcid.org/0000-0002-9538-7919",
115
+ "nameIdentifierScheme"=>"ORCID",
116
+ "schemeUri"=>"https://orcid.org"}], "nameType"=>"Personal"}, {"name"=>"The Ruby Citation File Format Developers", "nameType"=>"Organizational"}])
117
+ expect(subject.titles).to eq([{"title"=>"Ruby CFF Library"}])
118
+ expect(subject.descriptions.first["description"]).to start_with("This library provides a Ruby interface to manipulate Citation File Format files")
119
+ expect(subject.subjects).to eq([{"subject"=>"ruby"},
120
+ {"subject"=>"credit"},
121
+ {"subject"=>"software citation"},
122
+ {"subject"=>"research software"},
123
+ {"subject"=>"software sustainability"},
124
+ {"subject"=>"metadata"},
125
+ {"subject"=>"citation file format"},
126
+ {"subject"=>"CFF"}])
127
+ expect(subject.version_info).to eq("0.9.0")
128
+ expect(subject.dates).to eq([{"date"=>"2021-08-18", "dateType"=>"Issued"}])
129
+ expect(subject.publication_year).to eq("2021")
130
+ expect(subject.publisher).to eq("GitHub")
131
+ expect(subject.rights_list).to eq([{"rights"=>"Apache License 2.0",
132
+ "rightsIdentifier"=>"apache-2.0",
133
+ "rightsIdentifierScheme"=>"SPDX",
134
+ "rightsUri"=>"http://www.apache.org/licenses/LICENSE-2.0",
135
+ "schemeUri"=>"https://spdx.org/licenses/"}])
136
+ expect(subject.related_identifiers).to eq([{"relatedIdentifier"=>"https://doi.org/10.5281/zenodo.1003149", "relatedIdentifierType"=>"DOI", "relationType"=>"References"}])
137
+ end
138
+
139
+ it "ruby-cff repository url" do
140
+ input = "https://github.com/citation-file-format/ruby-cff"
141
+ subject = Briard::Metadata.new(input: input)
142
+ expect(subject.valid?).to be true
143
+ expect(subject.id).to eq("https://doi.org/10.5281/zenodo.1184077")
144
+ expect(subject.url).to eq("https://github.com/citation-file-format/ruby-cff")
145
+ expect(subject.types).to eq("bibtex"=>"misc", "citeproc"=>"article-journal", "resourceTypeGeneral"=>"Software", "ris"=>"COMP", "schemaOrg"=>"SoftwareSourceCode")
146
+ expect(subject.creators).to eq([{"affiliation"=>[{"name"=>"The University of Manchester, UK"}], "familyName"=>"Haines", "givenName"=>"Robert", "name"=>"Haines, Robert", "nameIdentifiers"=>
147
+ [{"nameIdentifier"=>"https://orcid.org/0000-0002-9538-7919",
148
+ "nameIdentifierScheme"=>"ORCID",
149
+ "schemeUri"=>"https://orcid.org"}], "nameType"=>"Personal"}, {"name"=>"The Ruby Citation File Format Developers", "nameType"=>"Organizational"}])
150
+ expect(subject.titles).to eq([{"title"=>"Ruby CFF Library"}])
151
+ expect(subject.descriptions.first["description"]).to start_with("This library provides a Ruby interface to manipulate Citation File Format files")
152
+ expect(subject.subjects).to eq([{"subject"=>"ruby"},
153
+ {"subject"=>"credit"},
154
+ {"subject"=>"software citation"},
155
+ {"subject"=>"research software"},
156
+ {"subject"=>"software sustainability"},
157
+ {"subject"=>"metadata"},
158
+ {"subject"=>"citation file format"},
159
+ {"subject"=>"CFF"}])
160
+ expect(subject.version_info).to eq("0.9.0")
161
+ expect(subject.dates).to eq([{"date"=>"2021-08-18", "dateType"=>"Issued"}])
162
+ expect(subject.publication_year).to eq("2021")
163
+ expect(subject.publisher).to eq("GitHub")
164
+ expect(subject.rights_list).to eq([{"rights"=>"Apache License 2.0",
165
+ "rightsIdentifier"=>"apache-2.0",
166
+ "rightsIdentifierScheme"=>"SPDX",
167
+ "rightsUri"=>"http://www.apache.org/licenses/LICENSE-2.0",
168
+ "schemeUri"=>"https://spdx.org/licenses/"}])
169
+ expect(subject.related_identifiers).to eq([{"relatedIdentifier"=>"https://doi.org/10.5281/zenodo.1003149", "relatedIdentifierType"=>"DOI", "relationType"=>"References"}])
170
+ end
171
+ end
172
+ end
@@ -3,7 +3,7 @@
3
3
  require 'spec_helper'
4
4
 
5
5
  describe Briard::Metadata, vcr: true do
6
- let(:input) { "https://github.com/datacite/maremma" }
6
+ let(:input) { "https://github.com/datacite/maremma/blob/master/codemeta.json" }
7
7
 
8
8
  subject { Briard::Metadata.new(input: input) }
9
9
 
data/spec/utils_spec.rb CHANGED
@@ -507,12 +507,24 @@ describe Briard::Metadata, vcr: true do
507
507
  expect(response).to eq(:owner=>"datacite", :repo=>"metadata-reports", :release=>"master", :path=>"software/codemeta.json")
508
508
  end
509
509
 
510
+ it "github_from_url cff file" do
511
+ url = "https://github.com/citation-file-format/ruby-cff/blob/main/CITATION.cff"
512
+ response = subject.github_from_url(url)
513
+ expect(response).to eq(:owner=>"citation-file-format", :path=>"CITATION.cff", :release=>"main", :repo=>"ruby-cff")
514
+ end
515
+
510
516
  it "github_as_codemeta_url" do
511
517
  url = "https://github.com/datacite/bolognese"
512
518
  response = subject.github_as_codemeta_url(url)
513
519
  expect(response).to eq("https://raw.githubusercontent.com/datacite/bolognese/master/codemeta.json")
514
520
  end
515
521
 
522
+ it "github_as_cff_url" do
523
+ url = "https://github.com/citation-file-format/ruby-cff"
524
+ response = subject.github_as_cff_url(url)
525
+ expect(response).to eq("https://raw.githubusercontent.com/citation-file-format/ruby-cff/main/CITATION.cff")
526
+ end
527
+
516
528
  it "github_from_url file" do
517
529
  url = "https://github.com/datacite/metadata-reports/blob/master/software/codemeta.json"
518
530
  response = subject.github_as_codemeta_url(url)
@@ -0,0 +1,78 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Briard::Metadata, vcr: true do
6
+ context "write metadata as cff" do
7
+ it "SoftwareSourceCode Zenodo" do
8
+ input = "https://doi.org/10.5281/zenodo.10164"
9
+ subject = Briard::Metadata.new(input: input, from: "datacite")
10
+ expect(subject.valid?).to be true
11
+ json = Psych.safe_load(subject.cff, permitted_classes: [Date])
12
+ expect(json["doi"]).to eq("https://doi.org/10.5281/zenodo.10164")
13
+ expect(json["authors"]).to eq([{"affiliation"=>"Juelich Supercomputing Centre, Jülich, Germany",
14
+ "family-names"=>"Klatt",
15
+ "given-names"=>"Torbjörn"},
16
+ {"affiliation"=>"Juelich Supercomputing Centre, Jülich, Germany",
17
+ "family-names"=>"Moser",
18
+ "given-names"=>"Dieter"},
19
+ {"affiliation"=>"Juelich Supercomputing Centre, Jülich, Germany",
20
+ "family-names"=>"Speck",
21
+ "given-names"=>"Robert"}])
22
+ expect(json["title"]).to eq("Pypint -- Python Framework For Parallel-In-Time Methods")
23
+ expect(json["abstract"]).to eq("<em>PyPinT</em> is a framework for Parallel-in-Time integration routines. The main purpose of <em>PyPinT</em> is to provide a framework for educational use and prototyping new parallel-in-time algorithms. As well it will aid in developing a high-performance C++ implementation for massively parallel computers providing the benefits of parallel-in-time routines to a zoo of time integrators in various applications.")
24
+ expect(json["date-released"]).to eq("2014-05-27")
25
+ expect(json["repository-code"]).to eq("https://zenodo.org/record/10164")
26
+ expect(json["keywords"]).to eq(["Parallel-in-Time Integration", "Spectral Deferred Corrections", "Multigrid", "Multi-Level Spectral Deferred Corrections", "Python Framework"])
27
+ expect(json["license"]).to be_nil
28
+ expect(json["references"]).to eq("identifiers"=>[{"type"=>"url", "value"=>"https://github.com/Parallel-in-Time/PyPinT/tree/release-v0.0.4"}])
29
+ end
30
+
31
+ it "SoftwareSourceCode also Zenodo" do
32
+ input = "https://doi.org/10.5281/zenodo.15497"
33
+ subject = Briard::Metadata.new(input: input, from: "datacite")
34
+ expect(subject.valid?).to be true
35
+ json = Psych.safe_load(subject.cff, permitted_classes: [Date])
36
+ expect(json["doi"]).to eq("https://doi.org/10.5281/zenodo.15497")
37
+ expect(json["authors"]).to eq([{"affiliation"=>
38
+ "Instituut voor Kern- en Stralingsfysica, KU Leuven, 3001 Leuven, België",
39
+ "family-names"=>"Gins",
40
+ "given-names"=>"Wouter"},
41
+ {"affiliation"=>
42
+ "Instituut voor Kern- en Stralingsfysica, KU Leuven, 3001 Leuven, België",
43
+ "family-names"=>"de Groote",
44
+ "given-names"=>"Ruben"},
45
+ {"affiliation"=>
46
+ "Instituut voor Kern- en Stralingsfysica, KU Leuven, 3001 Leuven, België",
47
+ "family-names"=>"Heylen",
48
+ "given-names"=>"Hanne"}])
49
+ expect(json["title"]).to eq("Satlas: Simulation And Analysis Toolbox For Laser Spectroscopy And Nmr Experiments")
50
+ expect(json["abstract"]).to eq("Initial release of the satlas Python package for the analysis and simulation for laser spectroscopy experiments. For the documentation, see http://woutergins.github.io/satlas/")
51
+ expect(json["date-released"]).to eq("2015-02-18")
52
+ expect(json["repository-code"]).to eq("https://zenodo.org/record/15497")
53
+ expect(json["keywords"]).to be_nil
54
+ expect(json["license"]).to be_nil
55
+ expect(json["references"]).to eq("identifiers"=>[{"type"=>"url", "value"=>"https://github.com/woutergins/satlas/tree/v1.0.0"}])
56
+ end
57
+
58
+ it "ruby-cff" do
59
+ input = "https://github.com/citation-file-format/ruby-cff"
60
+ subject = Briard::Metadata.new(input: input)
61
+ expect(subject.valid?).to be true
62
+ json = Psych.safe_load(subject.cff, permitted_classes: [Date])
63
+ expect(json["doi"]).to eq("https://doi.org/10.5281/zenodo.1184077")
64
+ expect(json["authors"]).to eq([{"affiliation"=>"The University of Manchester, UK",
65
+ "family-names"=>"Haines",
66
+ "given-names"=>"Robert",
67
+ "orcid"=>"https://orcid.org/0000-0002-9538-7919"},
68
+ {"name"=>"The Ruby Citation File Format Developers"}])
69
+ expect(json["title"]).to eq("Ruby CFF Library")
70
+ expect(json["abstract"]).to eq("This library provides a Ruby interface to manipulate Citation File Format files")
71
+ expect(json["date-released"]).to eq("2021-08-18")
72
+ expect(json["repository-code"]).to eq("https://github.com/citation-file-format/ruby-cff")
73
+ expect(json["keywords"]).to eq(["ruby", "credit", "software citation", "research software", "software sustainability", "metadata", "citation file format", "CFF"])
74
+ expect(json["license"]).to eq("apache-2.0")
75
+ expect(json["references"]).to eq("identifiers"=>[{"type"=>"doi", "value"=>"10.5281/zenodo.1003149"}])
76
+ end
77
+ end
78
+ end
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.0.2
4
+ version: 2.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martin Fenner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-12-06 00:00:00.000000000 Z
11
+ date: 2021-12-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: maremma
@@ -599,6 +599,7 @@ files:
599
599
  - ".github/workflows/release.yml"
600
600
  - ".gitignore"
601
601
  - ".rubocop.yml"
602
+ - ".tool-versions"
602
603
  - CHANGELOG.md
603
604
  - CITATION
604
605
  - CITATION.cff
@@ -621,6 +622,7 @@ files:
621
622
  - lib/briard/metadata_utils.rb
622
623
  - lib/briard/pubmed.rb
623
624
  - lib/briard/readers/bibtex_reader.rb
625
+ - lib/briard/readers/cff_reader.rb
624
626
  - lib/briard/readers/citeproc_reader.rb
625
627
  - lib/briard/readers/codemeta_reader.rb
626
628
  - lib/briard/readers/crosscite_reader.rb
@@ -635,6 +637,7 @@ files:
635
637
  - lib/briard/version.rb
636
638
  - lib/briard/whitelist_scrubber.rb
637
639
  - lib/briard/writers/bibtex_writer.rb
640
+ - lib/briard/writers/cff_writer.rb
638
641
  - lib/briard/writers/citation_writer.rb
639
642
  - lib/briard/writers/citeproc_writer.rb
640
643
  - lib/briard/writers/codemeta_writer.rb
@@ -801,6 +804,7 @@ files:
801
804
  - spec/datacite_utils_spec.rb
802
805
  - spec/doi_utils_spec.rb
803
806
  - spec/find_from_format_spec.rb
807
+ - spec/fixtures/CITATION.cff
804
808
  - spec/fixtures/aida.json
805
809
  - spec/fixtures/cgimp_package.json
806
810
  - spec/fixtures/cit_package.json
@@ -961,6 +965,10 @@ files:
961
965
  - spec/fixtures/vcr_cassettes/Briard_Metadata/from_schema_org/with_id.yml
962
966
  - spec/fixtures/vcr_cassettes/Briard_Metadata/from_schema_org_creators/with_affiliation.yml
963
967
  - spec/fixtures/vcr_cassettes/Briard_Metadata/from_schema_org_creators/without_affiliation.yml
968
+ - spec/fixtures/vcr_cassettes/Briard_Metadata/get_cff_metadata/cff-converter-python.yml
969
+ - spec/fixtures/vcr_cassettes/Briard_Metadata/get_cff_metadata/pidgraph-notebooks-python.yml
970
+ - spec/fixtures/vcr_cassettes/Briard_Metadata/get_cff_metadata/ruby-cff.yml
971
+ - spec/fixtures/vcr_cassettes/Briard_Metadata/get_cff_metadata/ruby-cff_repository_url.yml
964
972
  - spec/fixtures/vcr_cassettes/Briard_Metadata/get_codemeta_metadata/maremma.yml
965
973
  - spec/fixtures/vcr_cassettes/Briard_Metadata/get_codemeta_metadata/metadata_reports.yml
966
974
  - spec/fixtures/vcr_cassettes/Briard_Metadata/get_crossref_metadata/DOI_with_ORCID_ID.yml
@@ -1076,8 +1084,10 @@ files:
1076
1084
  - spec/fixtures/vcr_cassettes/Briard_Metadata/get_series_information/title_and_pages.yml
1077
1085
  - spec/fixtures/vcr_cassettes/Briard_Metadata/get_series_information/title_volume_and_pages.yml
1078
1086
  - spec/fixtures/vcr_cassettes/Briard_Metadata/get_series_information/title_volume_issue_and_pages.yml
1087
+ - spec/fixtures/vcr_cassettes/Briard_Metadata/github/github_as_cff_url.yml
1079
1088
  - spec/fixtures/vcr_cassettes/Briard_Metadata/github/github_as_codemeta_url.yml
1080
1089
  - spec/fixtures/vcr_cassettes/Briard_Metadata/github/github_from_url.yml
1090
+ - spec/fixtures/vcr_cassettes/Briard_Metadata/github/github_from_url_cff_file.yml
1081
1091
  - spec/fixtures/vcr_cassettes/Briard_Metadata/github/github_from_url_file.yml
1082
1092
  - spec/fixtures/vcr_cassettes/Briard_Metadata/handle_input/DOI_RA_not_Crossref_or_DataCite.yml
1083
1093
  - spec/fixtures/vcr_cassettes/Briard_Metadata/handle_input/unknown_DOI_prefix.yml
@@ -1202,6 +1212,10 @@ files:
1202
1212
  - spec/fixtures/vcr_cassettes/Briard_Metadata/write_metadata_as_bibtex/text.yml
1203
1213
  - spec/fixtures/vcr_cassettes/Briard_Metadata/write_metadata_as_bibtex/with_data_citation.yml
1204
1214
  - spec/fixtures/vcr_cassettes/Briard_Metadata/write_metadata_as_bibtex/with_pages.yml
1215
+ - spec/fixtures/vcr_cassettes/Briard_Metadata/write_metadata_as_cff/SoftwareSourceCode_DataCite.yml
1216
+ - spec/fixtures/vcr_cassettes/Briard_Metadata/write_metadata_as_cff/SoftwareSourceCode_Zenodo.yml
1217
+ - spec/fixtures/vcr_cassettes/Briard_Metadata/write_metadata_as_cff/SoftwareSourceCode_also_Zenodo.yml
1218
+ - spec/fixtures/vcr_cassettes/Briard_Metadata/write_metadata_as_cff/ruby-cff.yml
1205
1219
  - spec/fixtures/vcr_cassettes/Briard_Metadata/write_metadata_as_citation/Dataset.yml
1206
1220
  - spec/fixtures/vcr_cassettes/Briard_Metadata/write_metadata_as_citation/Journal_article.yml
1207
1221
  - spec/fixtures/vcr_cassettes/Briard_Metadata/write_metadata_as_citation/Journal_article_vancouver_style.yml
@@ -1298,6 +1312,7 @@ files:
1298
1312
  - spec/fixtures/vivli.xml
1299
1313
  - spec/metadata_spec.rb
1300
1314
  - spec/readers/bibtex_reader_spec.rb
1315
+ - spec/readers/cff_reader_spec.rb
1301
1316
  - spec/readers/citeproc_reader_spec.rb
1302
1317
  - spec/readers/codemeta_reader_spec.rb
1303
1318
  - spec/readers/crosscite_reader_spec.rb
@@ -1310,6 +1325,7 @@ files:
1310
1325
  - spec/spec_helper.rb
1311
1326
  - spec/utils_spec.rb
1312
1327
  - spec/writers/bibtex_writer_spec.rb
1328
+ - spec/writers/cff_writer_spec.rb
1313
1329
  - spec/writers/citation_writer_spec.rb
1314
1330
  - spec/writers/citeproc_writer_spec.rb
1315
1331
  - spec/writers/codemeta_writer_spec.rb