cff 0.9.0 → 1.0.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.
- checksums.yaml +4 -4
- data/CHANGES.md +73 -0
- data/CITATION.cff +3 -3
- data/CONTRIBUTING.md +71 -0
- data/LICENCE +1 -1
- data/README.md +27 -21
- data/Rakefile +9 -8
- data/cff.gemspec +12 -11
- data/lib/cff/citable.rb +72 -0
- data/lib/cff/entity.rb +11 -31
- data/lib/cff/errors.rb +2 -5
- data/lib/cff/file.rb +23 -18
- data/lib/cff/formatters/all.rb +26 -0
- data/lib/cff/formatters/apalike.rb +145 -0
- data/lib/cff/formatters/bibtex.rb +205 -0
- data/lib/cff/formatters/formatter.rb +98 -0
- data/lib/cff/formatters.rb +61 -0
- data/lib/cff/identifier.rb +13 -8
- data/lib/cff/{model.rb → index.rb} +65 -81
- data/lib/cff/licensable.rb +3 -3
- data/lib/cff/model_part.rb +46 -10
- data/lib/cff/person.rb +8 -10
- data/lib/cff/reference.rb +55 -114
- data/lib/cff/schema.rb +23 -0
- data/lib/{schema → cff/schemas}/1.2.0.json +0 -0
- data/lib/cff/util.rb +63 -6
- data/lib/cff/validatable.rb +12 -11
- data/lib/cff/version.rb +2 -2
- data/lib/cff.rb +4 -27
- metadata +37 -31
- data/lib/cff/formatter/apa_formatter.rb +0 -77
- data/lib/cff/formatter/bibtex_formatter.rb +0 -122
- data/lib/cff/formatter/formatter.rb +0 -63
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a3c050f5d10f432c5f693e34a3e357d6f6cb6354a34f1437e2d002d31260a668
|
4
|
+
data.tar.gz: 77a28d90a783419770aa706b033fc16895aa33762b1bf1e8d63f283e949b52b8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 20af71ee0317e192bccd3cd2a4e8e2be39c8bab84b9c4c74571968b80d519d292b2b7f2564aa5786fe995fddedfa90edea76058e400bd0971b1d805e0256b9ab
|
7
|
+
data.tar.gz: e38acde51d42a67b37c197c9d03e55fbe2a55ec5f3ee2e2632c1842a6292035831ac55acfd8ded8812bda8dc06d96578b2dcf28870f29f1d6fc0c855df758ba8
|
data/CHANGES.md
CHANGED
@@ -1,5 +1,78 @@
|
|
1
1
|
# Changes log for the Ruby CFF Library
|
2
2
|
|
3
|
+
## 1.0.0
|
4
|
+
|
5
|
+
* Add `type` to top-level CFF model.
|
6
|
+
* Correctly label datasets with APA-like formatter.
|
7
|
+
* Formatters: output a year, even if a month is not given.
|
8
|
+
* BibTeX: generalize getting simple publication data.
|
9
|
+
* BibTeX: generalize getting more complex publication data.
|
10
|
+
* BibTeX: get volume number from CFF `issue`.
|
11
|
+
* BibTeX: get publisher for a book.
|
12
|
+
* APA: get publisher for a book.
|
13
|
+
* BibTeX: add 'inproceedings' type for a preferred-citation.
|
14
|
+
* APA: add 'conference-paper' type for a preferred-citation.
|
15
|
+
* Generalize the `::pages_from_model` method.
|
16
|
+
* BibTeX: add address information where appropriate.
|
17
|
+
* BibTeX: use `software`, not `misc` where appropriate.
|
18
|
+
* BibTeX: add `version` field to `software` type.
|
19
|
+
* BibTeX: add `license` field to `software` type.
|
20
|
+
* Update README with the BibTeX formatter updates.
|
21
|
+
* Adding missing mapping for proceedings and conference
|
22
|
+
* BibTeX: add `manual` type for `preferred-citation`.
|
23
|
+
* BibTeX: add `doi` field to `manual` type.
|
24
|
+
* BibTeX: add `unpublished` type for `preferred-citation`.
|
25
|
+
* BibTeX: add `booklet` type for `preferred-citation`.
|
26
|
+
* BibTeX: add `techreport` type for `preferred-citation`.
|
27
|
+
* BibTeX: add the `institution` field for a `techreport`.
|
28
|
+
* APA: add the institution for a report, if possible.
|
29
|
+
* Clean up affiliations that include location in the report fixtures.
|
30
|
+
* Add `alias` field to `Entity`.
|
31
|
+
* Add a note to `Reference` about the `format` field.
|
32
|
+
* Ensure allowed fields in `Reference` are in alpha order.
|
33
|
+
* Add `term` field to `Reference`.
|
34
|
+
* Ensure allowed fields in `Entity` are in alpha order.
|
35
|
+
* Define `ModelPart#empty?`.
|
36
|
+
* Use `ModelPart#empty?` to simplify the formatter code.
|
37
|
+
* BibTeX: add the `note` field to all types.
|
38
|
+
* Prevent errors when cff is passed explicit `nil`s
|
39
|
+
* Update model part constructors for consistent behaviour.
|
40
|
+
* BibTeX: Use conference date if citing a conference paper.
|
41
|
+
* APA: Use conference date if citing a conference paper.
|
42
|
+
* APA: update range code to be more flexible.
|
43
|
+
* APA: add [Conference paper] label for conference papers.
|
44
|
+
* APA: handle date ranges with an earlier end date.
|
45
|
+
* Add `Util::transliterate` to normalise towards ASCII.
|
46
|
+
* Use the `transliterate` method to normalize citekeys.
|
47
|
+
* Add `Util::parameterize` to consolidate citekey code.
|
48
|
+
* Use the `parameterize` method to generate citekeys.
|
49
|
+
* Rename `generate_reference` -> `generate_citekey`.
|
50
|
+
* Only require language list if it is needed
|
51
|
+
* APA: don't output empty brackets if there's no issue.
|
52
|
+
* Formatters: use `date-published` for month/year values.
|
53
|
+
* Add a note to the README about BibTeX and APA standards.
|
54
|
+
* BibTeX: generalise author lists to actor lists.
|
55
|
+
* BibTeX: add `editor` field for `inproceedings` type.
|
56
|
+
* BibTeX: use `editors-series` if `editors` is not present.
|
57
|
+
* BibTeX: add `editor` field to `book` type.
|
58
|
+
* BibTeX: add `editor` field to `proceedings` type.
|
59
|
+
* Use the schema to determine the allowed fields within `Reference`.
|
60
|
+
* Use the schema to determine the allowed fields within `Person`.
|
61
|
+
* Use the schema to determine the allowed fields within `Entity`.
|
62
|
+
* Use the schema to determine the allowed fields within `Model`.
|
63
|
+
* Use the schema to determine the allowed fields within `Identifier`.
|
64
|
+
* Rename the `Model` class to `Index` which makes more sense.
|
65
|
+
* Add 'phdthesis' and 'mastersthesis' types for a preferred-citation.
|
66
|
+
* Add contribution guidelines.
|
67
|
+
* Handle 'in-press' in the formatters.
|
68
|
+
* Handle 'in-preparation' in the formatters.
|
69
|
+
* Handle 'submitted' in the formatters.
|
70
|
+
* Handle 'advance-online' in the formatters.
|
71
|
+
* Wholesale changes to isolate all the code from itself.
|
72
|
+
* Expand the range of tests, rubies and OSs in the CI.
|
73
|
+
* Update runtime gem dependencies.
|
74
|
+
* Implement an extensible formatter system.
|
75
|
+
|
3
76
|
## Version 0.9.0
|
4
77
|
|
5
78
|
* Update to final released version of schema 1.2.0.
|
data/CITATION.cff
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# This CITATION.cff file was created by ruby-cff (v 0.
|
1
|
+
# This CITATION.cff file was created by ruby-cff (v 1.0.0).
|
2
2
|
# Gem: https://rubygems.org/gems/cff
|
3
3
|
# CFF: https://citation-file-format.github.io/
|
4
4
|
|
@@ -21,9 +21,9 @@ keywords:
|
|
21
21
|
- metadata
|
22
22
|
- citation file format
|
23
23
|
- CFF
|
24
|
-
version: 0.
|
24
|
+
version: 1.0.0
|
25
25
|
doi: 10.5281/zenodo.1184077
|
26
|
-
date-released:
|
26
|
+
date-released: 2022-10-09
|
27
27
|
license: Apache-2.0
|
28
28
|
repository-artifact: https://rubygems.org/gems/cff
|
29
29
|
repository-code: https://github.com/citation-file-format/ruby-cff
|
data/CONTRIBUTING.md
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
# Contributing to the Ruby CFF Library
|
2
|
+
## Introduction
|
3
|
+
|
4
|
+
**Thank you** for considering a contribution to the **Ruby CFF Library**!
|
5
|
+
|
6
|
+
If you intended to contribute to another part of the Citation File Format project, for example the Citation File Format specification itself, please contribute to the respective repository ([list of repositories in the `citation-file-format` GitHub organization](https://github.com/orgs/citation-file-format/repositories)).
|
7
|
+
|
8
|
+
**Please follow these guidelines.** Their purpose is to make both contributing and accepting contributions easier for all parties involved.
|
9
|
+
|
10
|
+
There are many ways to contribute, e.g.:
|
11
|
+
|
12
|
+
* Tell a friend or colleague about the Citation File Format and Ruby CFF, or tweet about it
|
13
|
+
* Write blog posts, tutorials, etc. about the Citation File Format and Ruby CFF
|
14
|
+
* Review the format and its schema and documentation
|
15
|
+
* Improve wording in any prose output, including the specifications
|
16
|
+
* Create a new, better version of the schema and specifications
|
17
|
+
* Improve automated tests, continuous integration, documentation, etc.
|
18
|
+
|
19
|
+
## Ground Rules
|
20
|
+
|
21
|
+
Your contribution to Ruby CFF is valued, and it should be an enjoyable experience. To ensure this there is the Ruby CFF
|
22
|
+
[Code of Conduct](https://github.com/citation-file-format/ruby-cff/blob/main/CODE_OF_CONDUCT.md) which you are required to follow.
|
23
|
+
|
24
|
+
Please always start any contribution that will change the contents of this repository from [an issue](https://github.com/citation-file-format/ruby-cff/issues). This may mean [creating a new issue](https://github.com/citation-file-format/ruby-cff/issues/new) if it's something that hasn't been requested so far. This way,
|
25
|
+
|
26
|
+
* you can make sure that you don't invest your valuable time in something that may not be merged; and
|
27
|
+
* we can make sure that your contribution is something that will improve Ruby CFF, is in scope, and aligns with the roadmap for the Ruby CFF and the Citation File Format.
|
28
|
+
|
29
|
+
## Your First Contribution
|
30
|
+
|
31
|
+
If you are unsure where to begin with your contribution to CFF, have a look at the [open issues in this repository](https://github.com/citation-file-format/ruby-cff/issues), and see if you can identify one that you would like to work on.
|
32
|
+
|
33
|
+
If you have never contributed to an open source project, you may find this tutorial helpful: [How to Contribute to an Open Source Project on GitHub](https://app.egghead.io/playlists/how-to-contribute-to-an-open-source-project-on-github).
|
34
|
+
|
35
|
+
## Getting started
|
36
|
+
|
37
|
+
This is the workflow for contributions to this repository:
|
38
|
+
|
39
|
+
1. Take note of the [code of conduct](https://github.com/citation-file-format/ruby-cff/blob/main/CODE_OF_CONDUCT.md)
|
40
|
+
1. [Create a new issue](https://github.com/citation-file-format/ruby-cff/issues/new) if needs be, and discuss the changes you want to make with the maintainers and community
|
41
|
+
1. Fork the repository
|
42
|
+
1. Create a branch in your fork of the repository
|
43
|
+
1. Make changes in the new branch in your fork
|
44
|
+
* Please don't forget tests!
|
45
|
+
* If you add any classes, modules, methods, attributes, or constants, please document them
|
46
|
+
1. Create a pull request
|
47
|
+
1. Address any comments that come up during review
|
48
|
+
1. If and when your pull request has been merged, you can delete your branch (or the whole forked repository)
|
49
|
+
|
50
|
+
This workflow is loosely based on GitHub flow, and you can find more information in the [GitHub flow documentation](https://docs.github.com/en/get-started/quickstart/github-flow).
|
51
|
+
|
52
|
+
### Working with tests and documentation
|
53
|
+
|
54
|
+
There is a comprehensive test suite for Ruby CFF, which also contains a collection of test `CITATION.cff` files - both valid and invalid. Please add tests (and new test `CITATION.cff` files if appropriate) for any new features you add, or bugs you squash. It is advised to run these tests locally on your computer prior to submitting a pull request. However, if that's not possible, you still can submit the pull request and later check the status of the tests for your pull request on GitHub.
|
55
|
+
|
56
|
+
To run the tests, assuming that you have all the dependencies installed, simply run:
|
57
|
+
```shell
|
58
|
+
$ rake
|
59
|
+
```
|
60
|
+
|
61
|
+
To rebuild the documentation, if you have added to it or changed it:
|
62
|
+
```shell
|
63
|
+
$ rake rdoc
|
64
|
+
```
|
65
|
+
Then load `html/index.html` into a Web browser and double check it.
|
66
|
+
|
67
|
+
## FAQ
|
68
|
+
|
69
|
+
- **These guidelines do not address aspect XYZ! What should I do now?**
|
70
|
+
|
71
|
+
Please [submit an issue](https://github.com/citation-file-format/ruby-cff/issues/new), asking for clarification of and/or an addition to the guidelines.
|
data/LICENCE
CHANGED
@@ -186,7 +186,7 @@
|
|
186
186
|
same "printed page" as the copyright notice for easier
|
187
187
|
identification within third-party archives.
|
188
188
|
|
189
|
-
Copyright (c) 2018-
|
189
|
+
Copyright (c) 2018-2022 The Ruby Citation File Format Developers.
|
190
190
|
|
191
191
|
Licensed under the Apache License, Version 2.0 (the "License");
|
192
192
|
you may not use this file except in compliance with the License.
|
data/README.md
CHANGED
@@ -7,6 +7,7 @@ A Ruby library for creating, editing, validating and converting CITATION.cff fil
|
|
7
7
|
[](https://badge.fury.io/rb/cff)
|
8
8
|
[](https://github.com/citation-file-format/ruby-cff/actions/workflows/ruby.yml)
|
9
9
|
[](https://github.com/citation-file-format/ruby-cff/actions/workflows/lint.yml)
|
10
|
+
[](https://github.com/rubocop/rubocop)
|
10
11
|
[](https://codeclimate.com/github/citation-file-format/ruby-cff/maintainability)
|
11
12
|
[](https://coveralls.io/github/citation-file-format/ruby-cff)
|
12
13
|
|
@@ -14,7 +15,7 @@ A Ruby library for creating, editing, validating and converting CITATION.cff fil
|
|
14
15
|
|
15
16
|
This library provides a Ruby interface to create and edit Citation File Format (CFF) files. The resulting files can be validated against a formal schema to ensure correctness and can be output in a number of different citation-friendly formats.
|
16
17
|
|
17
|
-
The primary API entry points are the `
|
18
|
+
The primary API entry points are the `Index` and `File` classes.
|
18
19
|
|
19
20
|
See the [CITATION.cff documentation](https://citation-file-format.github.io/) for more details about the Citation File Format.
|
20
21
|
|
@@ -22,10 +23,10 @@ See the [full API documentation](https://citation-file-format.github.io/ruby-cff
|
|
22
23
|
|
23
24
|
### Quick start
|
24
25
|
|
25
|
-
You can quickly build and save a CFF
|
26
|
+
You can quickly build and save a CFF index like this:
|
26
27
|
|
27
28
|
```ruby
|
28
|
-
|
29
|
+
index = CFF::Index.new('Ruby CFF Library') do |cff|
|
29
30
|
cff.version = CFF::VERSION
|
30
31
|
cff.date_released = Date.today
|
31
32
|
cff.authors << CFF::Person.new('Robert', 'Haines')
|
@@ -35,7 +36,7 @@ model = CFF::Model.new('Ruby CFF Library') do |cff|
|
|
35
36
|
cff.repository_code = 'https://github.com/citation-file-format/ruby-cff'
|
36
37
|
end
|
37
38
|
|
38
|
-
CFF::File.write('CITATION.cff',
|
39
|
+
CFF::File.write('CITATION.cff', index)
|
39
40
|
```
|
40
41
|
|
41
42
|
Which will produce a file that looks something like this:
|
@@ -51,14 +52,14 @@ keywords:
|
|
51
52
|
- ruby
|
52
53
|
- credit
|
53
54
|
- citation
|
54
|
-
version: 0.
|
55
|
-
date-released:
|
55
|
+
version: 1.0.0
|
56
|
+
date-released: 2022-10-01
|
56
57
|
license: Apache-2.0
|
57
58
|
repository-artifact: https://rubygems.org/gems/cff
|
58
59
|
repository-code: https://github.com/citation-file-format/ruby-cff
|
59
60
|
```
|
60
61
|
|
61
|
-
`CFF::File` can be used to create a file directly, and it exposes the underlying `CFF::
|
62
|
+
`CFF::File` can be used to create a file directly, and it exposes the underlying `CFF::Index` directly. If using a block with `CFF::File::open` the file will get written on closing it:
|
62
63
|
|
63
64
|
```ruby
|
64
65
|
CFF::File.open('CITATION.cff') do |cff|
|
@@ -78,13 +79,13 @@ You can read a CFF file quickly with `CFF::File::read`:
|
|
78
79
|
cff = CFF::File.read('CITATION.cff')
|
79
80
|
```
|
80
81
|
|
81
|
-
And you can read a CFF file from memory with `CFF::
|
82
|
+
And you can read a CFF file from memory with `CFF::Index::read` or `CFF::Index::open` - as with `CFF::File` a block can be passed in to `open`:
|
82
83
|
|
83
84
|
```ruby
|
84
85
|
cff_string = ::File.read('CITATION.cff')
|
85
|
-
cff = CFF::
|
86
|
+
cff = CFF::Index.read(cff_string)
|
86
87
|
|
87
|
-
CFF::
|
88
|
+
CFF::Index.open(cff_string) do |cff|
|
88
89
|
# Edit cff here...
|
89
90
|
end
|
90
91
|
```
|
@@ -95,9 +96,9 @@ To quickly reference other software from your own CFF file, you can use `CFF::Re
|
|
95
96
|
require 'open-uri'
|
96
97
|
|
97
98
|
uri = 'https://raw.githubusercontent.com/citation-file-format/citation-file-format/main/CITATION.cff'
|
98
|
-
other_cff = URI
|
99
|
+
other_cff = URI(uri).open.read
|
99
100
|
|
100
|
-
ref = CFF::Reference.from_cff(CFF::
|
101
|
+
ref = CFF::Reference.from_cff(CFF::Index.read(other_cff))
|
101
102
|
|
102
103
|
CFF::File.open('CITATION.cff') do |cff|
|
103
104
|
cff.references = [ref]
|
@@ -116,7 +117,7 @@ rescue CFF::ValidationError => e
|
|
116
117
|
end
|
117
118
|
```
|
118
119
|
|
119
|
-
Both `CFF::File` and `CFF::
|
120
|
+
Both `CFF::File` and `CFF::Index` have instance methods to validate CFF files as well:
|
120
121
|
|
121
122
|
```ruby
|
122
123
|
cff = CFF::File.read('CITATION.cff')
|
@@ -129,7 +130,7 @@ end
|
|
129
130
|
|
130
131
|
Non-bang methods (`validate`) return an array, with `true`/`false` at index 0 to indicate pass/fail, and an array of errors at index 1 (if any).
|
131
132
|
|
132
|
-
Passing `fail_fast: true` (default: `false`) will cause the validator to abort on the first error it encounters and report just that. Only the instance methods on `CFF::File` and `CFF::
|
133
|
+
Passing `fail_fast: true` (default: `false`) will cause the validator to abort on the first error it encounters and report just that. Only the instance methods on `CFF::File` and `CFF::Index` provide the `fail_fast` option.
|
133
134
|
|
134
135
|
The validation methods (both class and instance) on `File` also validate the filename of a CFF file; in normal circumstances a CFF file should be named 'CITATION.cff'. You can switch this behaviour off by passing `fail_on_filename: false`. The non-bang methods (`validate`) on `File` return an extra value in the result array: `true`/`false` at index 2 to indicate whether the filename passed/failed validation.
|
135
136
|
|
@@ -155,19 +156,21 @@ Assuming the same CFF data as above, the two formats will look something like th
|
|
155
156
|
#### BibTeX format
|
156
157
|
|
157
158
|
```tex
|
158
|
-
@
|
159
|
+
@software{Haines_Ruby_CFF_Library_2022,
|
159
160
|
author = {Haines, Robert},
|
160
|
-
|
161
|
+
license = {Apache-2.0},
|
162
|
+
month = {10},
|
161
163
|
title = {{Ruby CFF Library}},
|
162
164
|
url = {https://github.com/citation-file-format/ruby-cff},
|
163
|
-
|
165
|
+
version = {1.0.0},
|
166
|
+
year = {2022}
|
164
167
|
}
|
165
168
|
```
|
166
169
|
|
167
170
|
#### APA-like format
|
168
171
|
|
169
172
|
```
|
170
|
-
Haines, R. (
|
173
|
+
Haines, R. (2022). Ruby CFF Library (Version 1.0.0) [Computer software]. https://github.com/citation-file-format/ruby-cff
|
171
174
|
```
|
172
175
|
|
173
176
|
#### Citing a paper rather than software
|
@@ -179,16 +182,19 @@ cff = CFF::File.read('CITATION.cff')
|
|
179
182
|
|
180
183
|
cff.to_bibtex(preferred_citation: false)
|
181
184
|
cff.to_apalike(preferred_citation: false)
|
182
|
-
|
183
185
|
```
|
184
186
|
|
185
187
|
#### A note on citation formats
|
186
188
|
|
187
|
-
Due to the different expectations of different publication venues, the citation text may need minor tweaking to be used in specific situations. If you spot a major, or general, error in the output
|
189
|
+
Due to the different expectations of different publication venues, the citation text may need minor tweaking to be used in specific situations. If you spot a major, or general, error in the output do [let us know](https://github.com/citation-file-format/ruby-cff/issues), but please check against the [BibTex](https://www.bibtex.com/format/) and [APA](https://apastyle.apa.org/style-grammar-guidelines/references) standards first.
|
188
190
|
|
189
191
|
### Library versions
|
190
192
|
|
191
|
-
|
193
|
+
From version 1.0.0 onwards, the principles of [semantic versioning](https://semver.org/) are applied when numbering releases with new features or breaking changes.
|
194
|
+
|
195
|
+
### Developing Ruby CFF
|
196
|
+
|
197
|
+
Please see our [Code of Conduct](https://github.com/citation-file-format/ruby-cff/blob/main/CODE_OF_CONDUCT.md) and our [contributor guidelines](https://github.com/citation-file-format/ruby-cff/blob/main/CONTRIBUTING.md).
|
192
198
|
|
193
199
|
### Licence
|
194
200
|
|
data/Rakefile
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# Copyright (c) 2018-
|
3
|
+
# Copyright (c) 2018-2022 The Ruby Citation File Format Developers.
|
4
4
|
#
|
5
5
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
6
|
# you may not use this file except in compliance with the License.
|
@@ -15,24 +15,25 @@
|
|
15
15
|
# limitations under the License.
|
16
16
|
|
17
17
|
require 'bundler/gem_tasks'
|
18
|
-
require '
|
18
|
+
require 'minitest/test_task'
|
19
19
|
require 'rdoc/task'
|
20
20
|
require 'rubocop/rake_task'
|
21
21
|
|
22
22
|
task default: :test
|
23
23
|
|
24
|
-
|
25
|
-
|
26
|
-
t.libs << 'lib'
|
27
|
-
t.test_files = FileList['test/**/*_test.rb']
|
24
|
+
Minitest::TestTask.create do |test|
|
25
|
+
test.test_globs = 'test/**/*_test.rb'
|
28
26
|
end
|
29
27
|
|
30
28
|
RDoc::Task.new do |r|
|
31
29
|
r.main = 'README.md'
|
32
|
-
r.rdoc_files.include(
|
30
|
+
r.rdoc_files.include(
|
31
|
+
'README.md', 'LICENCE', 'CODE_OF_CONDUCT.md', 'CONTRIBUTING.md',
|
32
|
+
'CHANGES.md', 'lib/**/*.rb'
|
33
|
+
)
|
33
34
|
r.options << '--markup=markdown'
|
34
35
|
r.options << '--tab-width=2'
|
35
|
-
r.options << "-t Ruby CFF Library version #{::CFF::VERSION}"
|
36
|
+
r.options << "-t Ruby CFF Library (version #{::CFF::VERSION})"
|
36
37
|
end
|
37
38
|
|
38
39
|
RuboCop::RakeTask.new
|
data/cff.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# Copyright (c) 2018-
|
3
|
+
# Copyright (c) 2018-2022 The Ruby Citation File Format Developers.
|
4
4
|
#
|
5
5
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
6
|
# you may not use this file except in compliance with the License.
|
@@ -35,7 +35,8 @@ Gem::Specification.new do |spec|
|
|
35
35
|
'bug_tracker_uri' => 'https://github.com/citation-file-format/ruby-cff/issues',
|
36
36
|
'changelog_uri' => 'https://github.com/citation-file-format/ruby-cff/blob/main/CHANGES.md',
|
37
37
|
'documentation_uri' => 'https://citation-file-format.github.io/ruby-cff/',
|
38
|
-
'source_code_uri' => 'https://github.com/citation-file-format/ruby-cff'
|
38
|
+
'source_code_uri' => 'https://github.com/citation-file-format/ruby-cff',
|
39
|
+
'rubygems_mfa_required' => 'true'
|
39
40
|
}
|
40
41
|
|
41
42
|
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
@@ -48,17 +49,17 @@ Gem::Specification.new do |spec|
|
|
48
49
|
|
49
50
|
spec.required_ruby_version = '>= 2.6'
|
50
51
|
|
51
|
-
spec.add_runtime_dependency 'json_schema', '~> 0.20.
|
52
|
-
spec.add_runtime_dependency 'language_list', '~> 1.2'
|
52
|
+
spec.add_runtime_dependency 'json_schema', '~> 0.20.4'
|
53
|
+
spec.add_runtime_dependency 'language_list', '~> 1.2.1'
|
53
54
|
|
54
|
-
spec.add_development_dependency 'minitest', '~> 5.
|
55
|
+
spec.add_development_dependency 'minitest', '~> 5.16.0'
|
55
56
|
spec.add_development_dependency 'rake', '~> 13.0'
|
56
|
-
spec.add_development_dependency 'rdoc', '~> 6.
|
57
|
-
spec.add_development_dependency 'rubocop', '~> 1.
|
58
|
-
spec.add_development_dependency 'rubocop-minitest', '~> 0.
|
59
|
-
spec.add_development_dependency 'rubocop-performance', '~> 1.
|
60
|
-
spec.add_development_dependency 'rubocop-rake', '~> 0.
|
61
|
-
spec.add_development_dependency 'simplecov', '
|
57
|
+
spec.add_development_dependency 'rdoc', '~> 6.4.0'
|
58
|
+
spec.add_development_dependency 'rubocop', '~> 1.35.0'
|
59
|
+
spec.add_development_dependency 'rubocop-minitest', '~> 0.21.0'
|
60
|
+
spec.add_development_dependency 'rubocop-performance', '~> 1.14.0'
|
61
|
+
spec.add_development_dependency 'rubocop-rake', '~> 0.6.0'
|
62
|
+
spec.add_development_dependency 'simplecov', '0.18.3'
|
62
63
|
spec.add_development_dependency 'simplecov-lcov', '~> 0.8.0'
|
63
64
|
spec.add_development_dependency 'test_construct', '~> 2.0'
|
64
65
|
end
|
data/lib/cff/citable.rb
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright (c) 2018-2022 The Ruby Citation File Format Developers.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
17
|
+
require_relative 'formatters'
|
18
|
+
|
19
|
+
##
|
20
|
+
module CFF
|
21
|
+
# Methods to enable turning a CFF model or file into a citation.
|
22
|
+
#
|
23
|
+
# The core functionality is in the `citation` method. In addition, each
|
24
|
+
# available output format has a `to_{format}` method generated for it as
|
25
|
+
# well, e.g. `to_bibtex` or `to_apalike`. These methods take a single
|
26
|
+
# parameter, `preferred_citation:`, which defaults to `true` as in the
|
27
|
+
# `citation` method.
|
28
|
+
module Citable
|
29
|
+
# :call-seq:
|
30
|
+
# citation(format, preferred_citation: true) -> String
|
31
|
+
#
|
32
|
+
# Output this Index in the specified format. Setting
|
33
|
+
# `preferred_citation: true` will honour the `preferred_citation` field in
|
34
|
+
# the index if one is present (default).
|
35
|
+
#
|
36
|
+
# `format` can be supplied as a String or a Symbol.
|
37
|
+
#
|
38
|
+
# Formats that are built-in to Ruby CFF are:
|
39
|
+
#
|
40
|
+
# * APAlike (e.g. `:apalike`, `'apalike'` or `'APAlike'`)
|
41
|
+
# * BibTeX (e.g. `:bibtex`, `'bibtex'` or `'BibTeX'`)
|
42
|
+
#
|
43
|
+
# *Note:* This method assumes that this Index is valid when called.
|
44
|
+
def citation(format, preferred_citation: true)
|
45
|
+
formatter = Formatters.formatter_for(format)
|
46
|
+
return '' if formatter.nil?
|
47
|
+
|
48
|
+
formatter.format(model: self, preferred_citation: preferred_citation)
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.add_to_format_method(format) # :nodoc:
|
52
|
+
method = "to_#{format}"
|
53
|
+
return if method_defined?(method)
|
54
|
+
|
55
|
+
class_eval(
|
56
|
+
# def to_bibtex(preferred_citation: true)
|
57
|
+
# citation(:bibtex, preferred_citation: preferred_citation)
|
58
|
+
# end
|
59
|
+
<<-END_TO_FORMAT, __FILE__, __LINE__ + 1
|
60
|
+
def #{method}(preferred_citation: true)
|
61
|
+
citation(:#{format}, preferred_citation: preferred_citation)
|
62
|
+
end
|
63
|
+
END_TO_FORMAT
|
64
|
+
)
|
65
|
+
end
|
66
|
+
|
67
|
+
# Add the formatters we know about already upfront.
|
68
|
+
Formatters.formatters.each do |format|
|
69
|
+
add_to_format_method(format)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
data/lib/cff/entity.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# Copyright (c) 2018-
|
3
|
+
# Copyright (c) 2018-2022 The Ruby Citation File Format Developers.
|
4
4
|
#
|
5
5
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
6
|
# you may not use this file except in compliance with the License.
|
@@ -14,9 +14,11 @@
|
|
14
14
|
# See the License for the specific language governing permissions and
|
15
15
|
# limitations under the License.
|
16
16
|
|
17
|
+
require_relative 'model_part'
|
18
|
+
require_relative 'schema'
|
19
|
+
|
17
20
|
##
|
18
21
|
module CFF
|
19
|
-
|
20
22
|
# An Entity can represent different types of entities, e.g., a publishing
|
21
23
|
# company, or conference. Like a Person, an Entity might have a number of
|
22
24
|
# roles, such as author, contact, editor, etc.
|
@@ -28,11 +30,12 @@ module CFF
|
|
28
30
|
# parentheses):
|
29
31
|
#
|
30
32
|
# * `address`
|
33
|
+
# * `alias`
|
31
34
|
# * `city`
|
32
35
|
# * `country`
|
33
|
-
# * `email`
|
34
36
|
# * `date_end` - *Note:* returns a `Date` object
|
35
37
|
# * `date_start` - *Note:* returns a `Date` object
|
38
|
+
# * `email`
|
36
39
|
# * `fax`
|
37
40
|
# * `location`
|
38
41
|
# * `name`
|
@@ -42,11 +45,9 @@ module CFF
|
|
42
45
|
# * `tel`
|
43
46
|
# * `website`
|
44
47
|
class Entity < ModelPart
|
48
|
+
ALLOWED_FIELDS = SCHEMA_FILE['definitions']['entity']['properties'].keys.freeze # :nodoc:
|
45
49
|
|
46
|
-
|
47
|
-
'address', 'city', 'country', 'email', 'date-end', 'date-start', 'fax',
|
48
|
-
'location', 'name', 'orcid', 'post-code', 'region', 'tel', 'website'
|
49
|
-
].freeze # :nodoc:
|
50
|
+
attr_date :date_end, :date_start
|
50
51
|
|
51
52
|
# :call-seq:
|
52
53
|
# new(name) -> Entity
|
@@ -54,37 +55,16 @@ module CFF
|
|
54
55
|
#
|
55
56
|
# Create a new Entity with the supplied name.
|
56
57
|
def initialize(param)
|
58
|
+
super()
|
59
|
+
|
57
60
|
if param.is_a?(Hash)
|
58
61
|
@fields = param
|
59
|
-
@fields.default = ''
|
60
62
|
else
|
61
|
-
@fields =
|
63
|
+
@fields = {}
|
62
64
|
@fields['name'] = param
|
63
65
|
end
|
64
66
|
|
65
67
|
yield self if block_given?
|
66
68
|
end
|
67
|
-
|
68
|
-
# :call-seq:
|
69
|
-
# date_end = date
|
70
|
-
#
|
71
|
-
# Set the `date-end` field. If a non-Date object is passed in it will
|
72
|
-
# be parsed into a Date.
|
73
|
-
def date_end=(date)
|
74
|
-
date = Date.parse(date) unless date.is_a?(Date)
|
75
|
-
|
76
|
-
@fields['date-end'] = date
|
77
|
-
end
|
78
|
-
|
79
|
-
# :call-seq:
|
80
|
-
# date_start = date
|
81
|
-
#
|
82
|
-
# Set the `date-start` field. If a non-Date object is passed in it will
|
83
|
-
# be parsed into a Date.
|
84
|
-
def date_start=(date)
|
85
|
-
date = Date.parse(date) unless date.is_a?(Date)
|
86
|
-
|
87
|
-
@fields['date-start'] = date
|
88
|
-
end
|
89
69
|
end
|
90
70
|
end
|
data/lib/cff/errors.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# Copyright (c) 2018-
|
3
|
+
# Copyright (c) 2018-2022 The Ruby Citation File Format Developers.
|
4
4
|
#
|
5
5
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
6
|
# you may not use this file except in compliance with the License.
|
@@ -16,10 +16,8 @@
|
|
16
16
|
|
17
17
|
##
|
18
18
|
module CFF
|
19
|
-
|
20
19
|
# Error is the base class for all errors raised by this library.
|
21
20
|
class Error < RuntimeError
|
22
|
-
|
23
21
|
def initialize(message = nil) # :nodoc:
|
24
22
|
super
|
25
23
|
end
|
@@ -31,9 +29,8 @@ module CFF
|
|
31
29
|
#
|
32
30
|
# Additionally, the `invalid_filename` flag is used to indicate whether the
|
33
31
|
# CFF file is named correctly. This is only used when validating a File;
|
34
|
-
# validating a
|
32
|
+
# validating a Index directly will not set this flag to `true`.
|
35
33
|
class ValidationError < Error
|
36
|
-
|
37
34
|
# The list of JsonSchema::ValidationErrors found by the validator.
|
38
35
|
attr_reader :errors
|
39
36
|
|