briard 2.0.2 → 2.2.3

Sign up to get free protection for your applications and to get access to all the features.
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