bibtex-ruby 4.4.7 → 5.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.

Potentially problematic release.


This version of bibtex-ruby might be problematic. Click here for more details.

Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +23 -24
  3. data/History.txt +4 -0
  4. data/Rakefile +23 -25
  5. data/bibtex-ruby.gemspec +1 -1
  6. data/examples/bib2html.rb +5 -6
  7. data/examples/bib2yaml.rb +2 -2
  8. data/features/step_definitions/bibtex_steps.rb +3 -6
  9. data/features/step_definitions/name_steps.rb +1 -2
  10. data/lib/bibtex.rb +11 -13
  11. data/lib/bibtex/bibliography.rb +45 -58
  12. data/lib/bibtex/compatibility.rb +3 -5
  13. data/lib/bibtex/elements.rb +49 -42
  14. data/lib/bibtex/entry.rb +80 -84
  15. data/lib/bibtex/entry/citeproc_converter.rb +47 -52
  16. data/lib/bibtex/entry/rdf_converter.rb +97 -63
  17. data/lib/bibtex/error.rb +10 -11
  18. data/lib/bibtex/extensions.rb +2 -5
  19. data/lib/bibtex/filters.rb +4 -9
  20. data/lib/bibtex/filters/latex.rb +0 -2
  21. data/lib/bibtex/filters/linebreaks.rb +0 -2
  22. data/lib/bibtex/lexer.rb +81 -81
  23. data/lib/bibtex/names.rb +24 -28
  24. data/lib/bibtex/replaceable.rb +15 -17
  25. data/lib/bibtex/utilities.rb +5 -10
  26. data/lib/bibtex/value.rb +28 -34
  27. data/lib/bibtex/version.rb +6 -6
  28. data/test/benchmark.rb +20 -22
  29. data/test/bibtex/entry/test_rdf_converter.rb +3 -5
  30. data/test/bibtex/test_bibliography.rb +22 -35
  31. data/test/bibtex/test_elements.rb +7 -15
  32. data/test/bibtex/test_entry.rb +78 -87
  33. data/test/bibtex/test_filters.rb +8 -7
  34. data/test/bibtex/test_lexer.rb +10 -13
  35. data/test/bibtex/test_name_parser.rb +6 -9
  36. data/test/bibtex/test_names.rb +50 -55
  37. data/test/bibtex/test_parser.rb +30 -34
  38. data/test/bibtex/test_string.rb +8 -9
  39. data/test/bibtex/test_utilities.rb +6 -9
  40. data/test/bibtex/test_value.rb +41 -43
  41. data/test/helper.rb +3 -6
  42. data/test/macruby.rb +12 -13
  43. data/test/profile.rb +16 -16
  44. data/test/test_bibtex.rb +10 -15
  45. data/test/test_export.rb +5 -13
  46. metadata +4 -4
@@ -1,28 +1,28 @@
1
1
  class BibTeX::Entry::CiteProcConverter
2
- CSL_FILTER = Hash.new { |h, k| k }.merge(Hash[*%w{
3
- date issued
4
- isbn ISBN
5
- booktitle container-title
6
- journal container-title
2
+ CSL_FILTER = Hash.new { |_h, k| k }.merge(Hash[*%w[
3
+ date issued
4
+ isbn ISBN
5
+ booktitle container-title
6
+ journal container-title
7
7
  journaltitle container-title
8
- series collection-title
9
- address publisher-place
10
- pages page
11
- number issue
12
- url URL
13
- doi DOI
14
- pmid PMID
15
- pmcid PMCID
16
- year issued
17
- type genre
18
- school publisher
19
- institution publisher
8
+ series collection-title
9
+ address publisher-place
10
+ pages page
11
+ number issue
12
+ url URL
13
+ doi DOI
14
+ pmid PMID
15
+ pmcid PMCID
16
+ year issued
17
+ type genre
18
+ school publisher
19
+ institution publisher
20
20
  organization publisher
21
21
  howpublished publisher
22
- type genre
23
- }.map(&:intern)]).freeze
22
+ type genre
23
+ ].map(&:intern)]).freeze
24
24
 
25
- CSL_FIELDS = %w{
25
+ CSL_FIELDS = %w[
26
26
  abstract annote archive archive_location archive-place
27
27
  authority call-number chapter-number citation-label citation-number
28
28
  collection-title container-title DOI edition event event-place
@@ -33,22 +33,22 @@ class BibTeX::Entry::CiteProcConverter
33
33
  year-suffix accessed container event-date issued original-date
34
34
  author editor translator recipient interviewer publisher composer
35
35
  original-publisher original-author container-author collection-editor
36
- }.map(&:intern).freeze
37
-
38
- CSL_TYPES = Hash.new { |h, k| k }.merge(Hash[*%w{
39
- booklet pamphlet
40
- conference paper-conference
41
- inbook chapter
42
- incollection chapter
43
- inproceedings paper-conference
44
- manual book
45
- mastersthesis thesis
46
- phdthesis thesis
47
- proceedings book
48
- techreport report
49
- unpublished manuscript
50
- article article-journal
51
- }.map(&:intern)]).freeze
36
+ ].map(&:intern).freeze
37
+
38
+ CSL_TYPES = Hash.new { |_h, k| k }.merge(Hash[*%w[
39
+ booklet pamphlet
40
+ conference paper-conference
41
+ inbook chapter
42
+ incollection chapter
43
+ inproceedings paper-conference
44
+ manual book
45
+ mastersthesis thesis
46
+ phdthesis thesis
47
+ proceedings book
48
+ techreport report
49
+ unpublished manuscript
50
+ article article-journal
51
+ ].map(&:intern)]).freeze
52
52
 
53
53
  def self.convert(bibtex, options = {})
54
54
  new(bibtex, options).convert!
@@ -71,40 +71,38 @@ class BibTeX::Entry::CiteProcConverter
71
71
  convert key, bibtex.parent.provide(key)
72
72
  end
73
73
 
74
- methods = self.class.instance_methods(false) - [:convert!, :hash]
74
+ methods = self.class.instance_methods(false) - %i[convert! hash]
75
75
  methods.each { |m| send(m) }
76
76
 
77
77
  hash
78
78
  end
79
79
 
80
80
  def conferences
81
- return unless [:conference, :proceedings, :inproceedings].include?(bibtex.type)
81
+ return unless %i[conference proceedings inproceedings].include?(bibtex.type)
82
82
 
83
83
  if bibtex.field?(:organization) && bibtex.field?(:publisher)
84
84
  hash['authority'] = bibtex[:organization]
85
85
  hash['publisher'] = bibtex[:publisher]
86
86
  end
87
87
 
88
- if bibtex.field? :address
89
- hash['event-place'] = bibtex[:address]
90
- end
88
+ hash['event-place'] = bibtex[:address] if bibtex.field? :address
91
89
  end
92
90
 
93
91
  def techreport
94
- return unless [:techreport, :report].include?(bibtex.type)
92
+ return unless %i[techreport report].include?(bibtex.type)
93
+
95
94
  hash['number'] = bibtex[:number].to_s if bibtex.field? :number
96
95
  end
97
96
 
98
97
  def date
99
- case
100
- when bibtex.field?(:date)
98
+ if bibtex.field?(:date)
101
99
  hash['issued'] = {
102
- 'date-parts' => bibtex.date.to_s.split('/').map { |part|
100
+ 'date-parts' => bibtex.date.to_s.split('/').map do |part|
103
101
  part.split('-').map(&:to_i)
104
- }
102
+ end
105
103
  }
106
104
 
107
- when bibtex.field?(:year)
105
+ elsif bibtex.field?(:year)
108
106
  case bibtex[:year].to_s
109
107
  when /^\d+$/
110
108
  parts = [bibtex[:year].to_s]
@@ -113,9 +111,7 @@ class BibTeX::Entry::CiteProcConverter
113
111
  parts.push BibTeX::Entry::MONTHS.find_index(bibtex[:month].to_s.intern)
114
112
  parts[1] = parts[1] + 1 unless parts[1].nil?
115
113
 
116
- if bibtex.field?(:day)
117
- parts.push bibtex[:day]
118
- end
114
+ parts.push bibtex[:day] if bibtex.field?(:day)
119
115
  end
120
116
 
121
117
  hash['issued'] = { 'date-parts' => [parts.compact.map(&:to_i)] }
@@ -123,8 +119,6 @@ class BibTeX::Entry::CiteProcConverter
123
119
  hash['issued'] = { 'literal' => bibtex[:year].to_s }
124
120
  end
125
121
 
126
- else
127
- # no date present
128
122
  end
129
123
  end
130
124
 
@@ -136,6 +130,7 @@ class BibTeX::Entry::CiteProcConverter
136
130
  hash['type'] = CSL_TYPES[bibtex.type].to_s
137
131
 
138
132
  return if hash.key?('genre')
133
+
139
134
  case bibtex.type
140
135
  when :mastersthesis
141
136
  hash['genre'] = "Master's thesis"
@@ -7,35 +7,35 @@ rescue LoadError
7
7
  end
8
8
 
9
9
  class BibTeX::Entry::RDFConverter
10
- DEFAULT_REMOVE_FROM_FALLBACK = %w(
10
+ DEFAULT_REMOVE_FROM_FALLBACK = %w[
11
11
  bdsk-file-1
12
12
  bdsk-file-2
13
13
  bdsk-file-3
14
14
  bdsk-file-4
15
- ).map(&:intern).freeze
16
-
17
- BIBO_TYPES = Hash[*%w{
18
- article Article
19
- book Book
20
- booklet Book
21
- collection Collection
22
- conference AcademicArticle
23
- inbook BookSection
24
- incollection BookSection
25
- inproceedings AcademicArticle
26
- journal Journal
27
- manual Manual
28
- mastersthesis Thesis
29
- online Website
30
- patent Patent
31
- periodical Periodical
32
- phdthesis Thesis
33
- proceedings Proceedings
34
- standard Standard
35
- techreport Report
36
- thesis Thesis
37
- unpublished Manuscript
38
- }.map(&:intern)].freeze
15
+ ].map(&:intern).freeze
16
+
17
+ BIBO_TYPES = Hash[*%w[
18
+ article Article
19
+ book Book
20
+ booklet Book
21
+ collection Collection
22
+ conference AcademicArticle
23
+ inbook BookSection
24
+ incollection BookSection
25
+ inproceedings AcademicArticle
26
+ journal Journal
27
+ manual Manual
28
+ mastersthesis Thesis
29
+ online Website
30
+ patent Patent
31
+ periodical Periodical
32
+ phdthesis Thesis
33
+ proceedings Proceedings
34
+ standard Standard
35
+ techreport Report
36
+ thesis Thesis
37
+ unpublished Manuscript
38
+ ].map(&:intern)].freeze
39
39
 
40
40
  # converts a BibTeX entry to RDF
41
41
  # @return [RDF::Graph] the RDF graph of this entry
@@ -66,6 +66,7 @@ class BibTeX::Entry::RDFConverter
66
66
 
67
67
  def abstract
68
68
  return unless bibtex.field?(:abstract)
69
+
69
70
  remove_from_fallback(:abstract)
70
71
 
71
72
  graph << [entry, RDF::Vocab::DC.abstract, bibtex[:abstract].to_s]
@@ -74,6 +75,7 @@ class BibTeX::Entry::RDFConverter
74
75
 
75
76
  def annote
76
77
  return unless bibtex.field?(:annote)
78
+
77
79
  remove_from_fallback(:annote)
78
80
 
79
81
  pub = RDF::Node.new
@@ -85,6 +87,7 @@ class BibTeX::Entry::RDFConverter
85
87
 
86
88
  def author
87
89
  return unless bibtex.field?(:author)
90
+
88
91
  remove_from_fallback(:author)
89
92
 
90
93
  seq = RDF::Node.new
@@ -102,24 +105,25 @@ class BibTeX::Entry::RDFConverter
102
105
 
103
106
  def bdsk_url
104
107
  count = 1
105
- while bibtex.field?("bdsk-url-#{count}".to_sym) do
108
+ while bibtex.field?("bdsk-url-#{count}".to_sym)
106
109
  field = "bdsk-url-#{count}".to_sym
107
110
  remove_from_fallback(field)
108
111
  graph << [entry, RDF::Vocab::DC.URI, bibtex[field].to_s]
109
112
  graph << [entry, bibo[:uri], bibtex[field].to_s]
110
- count += 1
113
+ count += 1
111
114
  end
112
115
  end
113
116
 
114
117
  def booktitle
115
118
  return unless bibtex.field?(:booktitle)
119
+
116
120
  remove_from_fallback(:booktitle)
117
121
  return if bibtex.has_parent? &&
118
- bibtex.parent[:title] == bibtex[:booktitle]
122
+ bibtex.parent[:title] == bibtex[:booktitle]
119
123
  return if bibtex.has_parent? &&
120
- bibtex.parent[:booktitle] == bibtex[:booktitle]
124
+ bibtex.parent[:booktitle] == bibtex[:booktitle]
121
125
  return if bibtex.has_parent? &&
122
- bibtex.parent[:isbn] == bibtex[:isbn]
126
+ bibtex.parent[:isbn] == bibtex[:isbn]
123
127
  return if bibtex[:title] == bibtex[:booktitle]
124
128
 
125
129
  series = RDF::Node.new
@@ -131,6 +135,7 @@ class BibTeX::Entry::RDFConverter
131
135
 
132
136
  def chapter
133
137
  return unless bibtex.field?(:chapter)
138
+
134
139
  remove_from_fallback(:chapter)
135
140
 
136
141
  graph << [entry, bibo[:chapter], bibtex[:chapter].to_s]
@@ -148,6 +153,7 @@ class BibTeX::Entry::RDFConverter
148
153
 
149
154
  def copyright
150
155
  return unless bibtex.field?(:copyright)
156
+
151
157
  remove_from_fallback(:copyright)
152
158
 
153
159
  graph << [entry, RDF::Vocab::DC.rightsHolder, bibtex[:copyright].to_s]
@@ -155,6 +161,7 @@ class BibTeX::Entry::RDFConverter
155
161
 
156
162
  def date_added
157
163
  return unless bibtex.field?(:'date-added')
164
+
158
165
  remove_from_fallback(:'date-added')
159
166
 
160
167
  graph << [entry, RDF::Vocab::DC.created, bibtex[:'date-added'].to_s]
@@ -162,6 +169,7 @@ class BibTeX::Entry::RDFConverter
162
169
 
163
170
  def date_modified
164
171
  return unless bibtex.field?(:'date-modified')
172
+
165
173
  remove_from_fallback(:'date-modified')
166
174
 
167
175
  graph << [entry, RDF::Vocab::DC.modified, bibtex[:'date-modified'].to_s]
@@ -169,14 +177,16 @@ class BibTeX::Entry::RDFConverter
169
177
 
170
178
  def doi
171
179
  return unless bibtex.field?(:doi)
180
+
172
181
  remove_from_fallback(:doi)
173
182
 
174
183
  graph << [entry, bibo[:doi], bibtex[:doi].to_s]
175
- graph << [entry, RDF::Vocab::DC.identifier, "doi:#{bibtex[:doi].to_s}"]
184
+ graph << [entry, RDF::Vocab::DC.identifier, "doi:#{bibtex[:doi]}"]
176
185
  end
177
186
 
178
187
  def edition
179
188
  return unless bibtex.field?(:edition)
189
+
180
190
  remove_from_fallback(:edition)
181
191
 
182
192
  graph << [entry, bibo[:edition], bibtex[:edition].to_s]
@@ -184,6 +194,7 @@ class BibTeX::Entry::RDFConverter
184
194
 
185
195
  def editor
186
196
  return unless bibtex.field?(:editor)
197
+
187
198
  remove_from_fallback(:editor)
188
199
 
189
200
  seq = RDF::Node.new
@@ -205,7 +216,8 @@ class BibTeX::Entry::RDFConverter
205
216
 
206
217
  def howpublished
207
218
  return unless bibtex.field?(:howpublished)
208
- return unless bibtex[:howpublished] =~ /^#{URI.regexp}$/
219
+ return unless bibtex[:howpublished] =~ /^#{URI::DEFAULT_PARSER.make_regexp}$/
220
+
209
221
  remove_from_fallback(:howpublished)
210
222
 
211
223
  graph << [entry, RDF::Vocab::DC.URI, bibtex[:howpublished].to_s]
@@ -214,6 +226,7 @@ class BibTeX::Entry::RDFConverter
214
226
 
215
227
  def institution
216
228
  return unless bibtex.field?(:institution)
229
+
217
230
  remove_from_fallback(:institution)
218
231
 
219
232
  org = agent(bibtex[:institution].to_s) { create_agent(bibtex[:institution].to_s, :Organization) }
@@ -223,39 +236,42 @@ class BibTeX::Entry::RDFConverter
223
236
 
224
237
  def isbn
225
238
  return unless bibtex.field?(:isbn)
239
+
226
240
  remove_from_fallback(:isbn)
227
241
 
228
242
  graph << [entry, bibo[:isbn], bibtex[:isbn].to_s]
229
243
 
230
- if bibtex.contained?
231
- graph << [entry, RDF::Vocab::DC.isPartOf, "urn:isbn:#{bibtex[:isbn].to_s}"]
232
- else
233
- graph << [entry, RDF::Vocab::DC.identifier, "urn:isbn:#{bibtex[:isbn].to_s}"]
234
- end
244
+ graph << if bibtex.contained?
245
+ [entry, RDF::Vocab::DC.isPartOf, "urn:isbn:#{bibtex[:isbn]}"]
246
+ else
247
+ [entry, RDF::Vocab::DC.identifier, "urn:isbn:#{bibtex[:isbn]}"]
248
+ end
235
249
  end
236
250
 
237
251
  def issn
238
252
  return unless bibtex.field?(:issn)
253
+
239
254
  remove_from_fallback(:issn)
240
255
 
241
256
  graph << [entry, bibo[:issn], bibtex[:issn].to_s]
242
- if bibtex.contained?
243
- graph << [entry, RDF::Vocab::DC.isPartOf, "urn:issn:#{bibtex[:issn].to_s}"]
244
- else
245
- graph << [entry, RDF::Vocab::DC.identifier, "urn:issn:#{bibtex[:issn].to_s}"]
246
- end
257
+ graph << if bibtex.contained?
258
+ [entry, RDF::Vocab::DC.isPartOf, "urn:issn:#{bibtex[:issn]}"]
259
+ else
260
+ [entry, RDF::Vocab::DC.identifier, "urn:issn:#{bibtex[:issn]}"]
261
+ end
247
262
  end
248
263
 
249
264
  def journal_dc_source
250
265
  return unless bibtex.field?(:journal)
266
+
251
267
  remove_from_fallback(:journal)
252
268
 
253
269
  source = []
254
270
  source << bibtex[:journal].to_s
255
- source << "Vol. #{bibtex[:volume].to_s}" if bibtex.field?(:volume)
256
- source << "No. #{bibtex[:number].to_s}" if bibtex.field?(:number)
271
+ source << "Vol. #{bibtex[:volume]}" if bibtex.field?(:volume)
272
+ source << "No. #{bibtex[:number]}" if bibtex.field?(:number)
257
273
  pagination = bibtex[:pagination] || 'pp.'
258
- source << "#{pagination.to_s} #{bibtex[:pages].to_s}" if bibtex.field?(:pages)
274
+ source << "#{pagination} #{bibtex[:pages]}" if bibtex.field?(:pages)
259
275
  graph << [entry, RDF::Vocab::DC.source, source.join(', ')]
260
276
  end
261
277
 
@@ -277,6 +293,7 @@ class BibTeX::Entry::RDFConverter
277
293
 
278
294
  def keywords
279
295
  return unless bibtex.field?(:keywords)
296
+
280
297
  remove_from_fallback(:keywords)
281
298
 
282
299
  bibtex[:keywords].to_s.split(/\s*[,;]\s*/).each do |keyword|
@@ -286,6 +303,7 @@ class BibTeX::Entry::RDFConverter
286
303
 
287
304
  def language
288
305
  return unless bibtex.field?(:language)
306
+
289
307
  remove_from_fallback(:language)
290
308
 
291
309
  bibtex[:language] = 'german' if bibtex[:language] == 'ngerman'
@@ -295,10 +313,11 @@ class BibTeX::Entry::RDFConverter
295
313
 
296
314
  def location
297
315
  return unless bibtex.field?(:location)
316
+
298
317
  remove_from_fallback(:location)
299
318
 
300
319
  graph << [entry, RDF::Vocab::DC.Location, bibtex[:location].to_s]
301
- if [:proceedings, :inproceedings, :conference].include?(bibtex.type)
320
+ if %i[proceedings inproceedings conference].include?(bibtex.type)
302
321
  event = RDF::Vocabulary.new('http://purl.org/NET/c4dm/event.owl')
303
322
  graph << [entry, event[:place], org]
304
323
  end
@@ -306,6 +325,7 @@ class BibTeX::Entry::RDFConverter
306
325
 
307
326
  def lccn
308
327
  return unless bibtex.field?(:lccn)
328
+
309
329
  remove_from_fallback(:lccn)
310
330
 
311
331
  graph << [entry, bibo[:lccn], bibtex[:lccn].to_s]
@@ -313,6 +333,7 @@ class BibTeX::Entry::RDFConverter
313
333
 
314
334
  def note
315
335
  return unless bibtex.field?(:note)
336
+
316
337
  remove_from_fallback(:note)
317
338
 
318
339
  pub = RDF::Node.new
@@ -324,28 +345,31 @@ class BibTeX::Entry::RDFConverter
324
345
 
325
346
  def number
326
347
  return unless bibtex.field?(:number)
348
+
327
349
  remove_from_fallback(:number)
328
350
 
329
- case bibtex.type
330
- when :techreport || :manual || :unpublished
331
- graph << [entry, bibo[:number], bibtex[:number].to_s]
332
- else
333
- graph << [entry, bibo[:issue], bibtex[:number].to_s]
334
- end
351
+ graph << case bibtex.type
352
+ when :techreport || :manual || :unpublished
353
+ [entry, bibo[:number], bibtex[:number].to_s]
354
+ else
355
+ [entry, bibo[:issue], bibtex[:number].to_s]
356
+ end
335
357
  end
336
358
 
337
359
  def organization
338
360
  return unless bibtex.field?(:organization)
361
+
339
362
  remove_from_fallback(:organization)
340
363
 
341
364
  org = agent(bibtex[:organization].to_s) { create_agent(bibtex[:organization].to_s, :Organization) }
342
365
 
343
366
  graph << [entry, RDF::Vocab::DC.contributor, org]
344
- graph << [entry, bibo[:organizer], org] if [:proceedings, :inproceedings, :conference].include?(bibtex.type)
367
+ graph << [entry, bibo[:organizer], org] if %i[proceedings inproceedings conference].include?(bibtex.type)
345
368
  end
346
369
 
347
370
  def pages
348
371
  return unless bibtex.field?(:pages)
372
+
349
373
  remove_from_fallback(:pages)
350
374
 
351
375
  if bibtex[:pages].to_s =~ /^\s*(\d+)\s*-+\s*(\d+)\s*$/
@@ -358,6 +382,7 @@ class BibTeX::Entry::RDFConverter
358
382
 
359
383
  def pagetotal
360
384
  return unless bibtex.field?(:pagetotal)
385
+
361
386
  remove_from_fallback(:pagetotal)
362
387
 
363
388
  graph << [entry, bibo[:numPages], bibtex[:pagetotal].to_s]
@@ -365,6 +390,7 @@ class BibTeX::Entry::RDFConverter
365
390
 
366
391
  def parent
367
392
  return unless bibtex.has_parent?
393
+
368
394
  remove_from_fallback(:crossref)
369
395
 
370
396
  parent_id = RDF::URI.new(bibtex.parent.identifier)
@@ -374,17 +400,17 @@ class BibTeX::Entry::RDFConverter
374
400
 
375
401
  def publisher
376
402
  return unless bibtex.field?(:publisher, :organization, :school, :institution)
403
+
377
404
  remove_from_fallback(:publisher, :address)
378
405
 
379
406
  org =
380
- case
381
- when bibtex.field?(:publisher)
407
+ if bibtex.field?(:publisher)
382
408
  agent(bibtex[:publisher].to_s) { create_agent(bibtex[:publisher].to_s, :Organization) }
383
- when bibtex.field?(:organization)
409
+ elsif bibtex.field?(:organization)
384
410
  agent(bibtex[:organization].to_s) { create_agent(bibtex[:organization].to_s, :Organization) }
385
- when bibtex.field?(:school)
411
+ elsif bibtex.field?(:school)
386
412
  agent(bibtex[:school].to_s) { create_agent(bibtex[:school].to_s, :Organization) }
387
- when bibtex.field?(:institution)
413
+ elsif bibtex.field?(:institution)
388
414
  agent(bibtex[:institution].to_s) { create_agent(bibtex[:institution].to_s, :Organization) }
389
415
  end
390
416
 
@@ -399,6 +425,7 @@ class BibTeX::Entry::RDFConverter
399
425
 
400
426
  def school
401
427
  return unless bibtex.field?(:school)
428
+
402
429
  remove_from_fallback(:school)
403
430
 
404
431
  org = agent(bibtex[:school].to_s) { create_agent(bibtex[:school].to_s, :Organization) }
@@ -408,6 +435,7 @@ class BibTeX::Entry::RDFConverter
408
435
 
409
436
  def series
410
437
  return unless bibtex.field?(:series)
438
+
411
439
  remove_from_fallback(:series)
412
440
  return if bibtex.has_parent? && bibtex.parent[:title] == bibtex[:series]
413
441
  return if bibtex.has_parent? && bibtex.parent[:series] == bibtex[:series]
@@ -450,17 +478,19 @@ class BibTeX::Entry::RDFConverter
450
478
 
451
479
  def title
452
480
  return unless bibtex.field?(:title)
481
+
453
482
  remove_from_fallback(:title)
454
483
 
455
484
  title = [bibtex[:title].to_s, bibtex[:subtitle].to_s]
456
- .reject { |t| t.nil? || t.empty? }
457
- .join(': ')
485
+ .reject { |t| t.nil? || t.empty? }
486
+ .join(': ')
458
487
  graph << [entry, RDF::Vocab::DC.title, title]
459
488
  graph << [entry, bibo[:shortTitle], bibtex[:title].to_s] if bibtex.field?(:subtitle)
460
489
  end
461
490
 
462
491
  def translator
463
492
  return unless bibtex.field?(:translator)
493
+
464
494
  remove_from_fallback(:translator)
465
495
 
466
496
  node = agent(bibtex[:translator].to_s) do
@@ -484,6 +514,7 @@ class BibTeX::Entry::RDFConverter
484
514
 
485
515
  def url
486
516
  return unless bibtex.field?(:url)
517
+
487
518
  remove_from_fallback(:url)
488
519
 
489
520
  graph << [entry, RDF::Vocab::DC.URI, bibtex[:url].to_s]
@@ -492,6 +523,7 @@ class BibTeX::Entry::RDFConverter
492
523
 
493
524
  def volume
494
525
  return unless bibtex.field?(:volume)
526
+
495
527
  remove_from_fallback(:volume)
496
528
 
497
529
  graph << [entry, bibo[:volume], bibtex[:volume].to_s]
@@ -499,6 +531,7 @@ class BibTeX::Entry::RDFConverter
499
531
 
500
532
  def volumes
501
533
  return unless bibtex.field?(:volumes)
534
+
502
535
  remove_from_fallback(:volumes)
503
536
 
504
537
  graph << [entry, bibo[:numVolumes], bibtex[:volumes].to_s]
@@ -506,6 +539,7 @@ class BibTeX::Entry::RDFConverter
506
539
 
507
540
  def year
508
541
  return unless bibtex.field?(:year)
542
+
509
543
  remove_from_fallback(:year, :month)
510
544
 
511
545
  year = bibtex[:year].to_s
@@ -536,7 +570,7 @@ class BibTeX::Entry::RDFConverter
536
570
  @entry ||= RDF::URI.new(bibtex.identifier)
537
571
  end
538
572
 
539
- def agent(key = nil, &block)
573
+ def agent(key = nil)
540
574
  if key.nil?
541
575
  @agent
542
576
  else
@@ -552,7 +586,7 @@ class BibTeX::Entry::RDFConverter
552
586
  graph << [node, RDF::Vocab::FOAF.name, name.to_s]
553
587
 
554
588
  if name.is_a?(BibTeX::Name)
555
- [:given, :family, :prefix, :suffix].each do |part|
589
+ %i[given family prefix suffix].each do |part|
556
590
  value = name.send(part)
557
591
  graph << [node, bibo["#{part}Name"], value.to_s] unless value.nil?
558
592
  end
@@ -566,7 +600,7 @@ class BibTeX::Entry::RDFConverter
566
600
  pattern [uri, nil, nil]
567
601
  end
568
602
 
569
- solutions.size > 0
603
+ !solutions.empty?
570
604
  end
571
605
 
572
606
  def fallback