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.
- checksums.yaml +4 -4
- data/Gemfile +23 -24
- data/History.txt +4 -0
- data/Rakefile +23 -25
- data/bibtex-ruby.gemspec +1 -1
- data/examples/bib2html.rb +5 -6
- data/examples/bib2yaml.rb +2 -2
- data/features/step_definitions/bibtex_steps.rb +3 -6
- data/features/step_definitions/name_steps.rb +1 -2
- data/lib/bibtex.rb +11 -13
- data/lib/bibtex/bibliography.rb +45 -58
- data/lib/bibtex/compatibility.rb +3 -5
- data/lib/bibtex/elements.rb +49 -42
- data/lib/bibtex/entry.rb +80 -84
- data/lib/bibtex/entry/citeproc_converter.rb +47 -52
- data/lib/bibtex/entry/rdf_converter.rb +97 -63
- data/lib/bibtex/error.rb +10 -11
- data/lib/bibtex/extensions.rb +2 -5
- data/lib/bibtex/filters.rb +4 -9
- data/lib/bibtex/filters/latex.rb +0 -2
- data/lib/bibtex/filters/linebreaks.rb +0 -2
- data/lib/bibtex/lexer.rb +81 -81
- data/lib/bibtex/names.rb +24 -28
- data/lib/bibtex/replaceable.rb +15 -17
- data/lib/bibtex/utilities.rb +5 -10
- data/lib/bibtex/value.rb +28 -34
- data/lib/bibtex/version.rb +6 -6
- data/test/benchmark.rb +20 -22
- data/test/bibtex/entry/test_rdf_converter.rb +3 -5
- data/test/bibtex/test_bibliography.rb +22 -35
- data/test/bibtex/test_elements.rb +7 -15
- data/test/bibtex/test_entry.rb +78 -87
- data/test/bibtex/test_filters.rb +8 -7
- data/test/bibtex/test_lexer.rb +10 -13
- data/test/bibtex/test_name_parser.rb +6 -9
- data/test/bibtex/test_names.rb +50 -55
- data/test/bibtex/test_parser.rb +30 -34
- data/test/bibtex/test_string.rb +8 -9
- data/test/bibtex/test_utilities.rb +6 -9
- data/test/bibtex/test_value.rb +41 -43
- data/test/helper.rb +3 -6
- data/test/macruby.rb +12 -13
- data/test/profile.rb +16 -16
- data/test/test_bibtex.rb +10 -15
- data/test/test_export.rb +5 -13
- metadata +4 -4
@@ -1,11 +1,8 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
3
|
module BibTeX
|
4
|
-
|
5
4
|
class ElementTest < Minitest::Spec
|
6
|
-
|
7
5
|
describe '.parse' do
|
8
|
-
|
9
6
|
it 'accepts a BibTeX string' do
|
10
7
|
Element.parse('@misc{x,},@misc{y,}').length.must_be :==, 2
|
11
8
|
end
|
@@ -15,19 +12,16 @@ module BibTeX
|
|
15
12
|
end
|
16
13
|
|
17
14
|
it 'accepts a Hash and returns an Entry' do
|
18
|
-
Element.parse(
|
15
|
+
Element.parse(bibtex_type: :book)[0].type.must_be :==, :book
|
19
16
|
end
|
20
17
|
|
21
18
|
it 'accepts an array of hashes' do
|
22
|
-
Element.parse([{ :
|
19
|
+
Element.parse([{ bibtex_type: :book }, { bibtex_type: :misc }])[1].type.must_be :==, :misc
|
23
20
|
end
|
24
|
-
|
25
21
|
end
|
26
|
-
|
27
22
|
end
|
28
23
|
|
29
24
|
class PreambleTest < Minitest::Spec
|
30
|
-
|
31
25
|
describe 'a new preamble instance' do
|
32
26
|
before do
|
33
27
|
@preamble = Preamble.new
|
@@ -45,20 +39,18 @@ module BibTeX
|
|
45
39
|
end
|
46
40
|
|
47
41
|
it 'should support round-trips of all parsed preambles' do
|
48
|
-
assert_equal %
|
49
|
-
assert_equal %
|
50
|
-
assert_equal %
|
42
|
+
assert_equal %(@preamble{ "This bibliography was created \\today" }\n), @preambles[0].to_s
|
43
|
+
assert_equal %(@preamble{ "Bib\\TeX" }\n), @preambles[1].to_s
|
44
|
+
assert_equal %(@preamble{ "Maintained by " # maintainer }\n), @preambles[2].to_s
|
51
45
|
end
|
52
46
|
|
53
47
|
it 'should support string replacement of preamble contents' do
|
54
|
-
assert_equal
|
48
|
+
assert_equal '"Maintained by " # maintainer', @preambles[2].value.to_s
|
55
49
|
@bib.replace_strings
|
56
|
-
assert_equal
|
50
|
+
assert_equal '"Maintained by " # "Myself"', @preambles[2].value.to_s
|
57
51
|
@bib.join_strings
|
58
52
|
assert_equal 'Maintained by Myself', @preambles[2].value.to_s
|
59
53
|
end
|
60
54
|
end
|
61
|
-
|
62
55
|
end
|
63
|
-
|
64
56
|
end
|
data/test/bibtex/test_entry.rb
CHANGED
@@ -1,10 +1,7 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
1
|
require 'helper.rb'
|
4
2
|
|
5
3
|
module BibTeX
|
6
4
|
class EntryTest < Minitest::Spec
|
7
|
-
|
8
5
|
describe 'a new entry' do
|
9
6
|
it "won't be nil" do
|
10
7
|
Entry.new.wont_be_nil
|
@@ -14,7 +11,7 @@ module BibTeX
|
|
14
11
|
describe '#add' do
|
15
12
|
it 'preserves BibTeX::Names (and other subclasses of BibTeX::Value)' do
|
16
13
|
e = Entry.new
|
17
|
-
e.add(:author, Names.new(Name.new(:
|
14
|
+
e.add(:author, Names.new(Name.new(first: 'first_name')))
|
18
15
|
assert_equal e[:author].class, Names
|
19
16
|
end
|
20
17
|
end
|
@@ -88,7 +85,7 @@ module BibTeX
|
|
88
85
|
end
|
89
86
|
|
90
87
|
describe 'when "booktitle" is undefined for the entry but defined in the reference' do
|
91
|
-
before { @bib['a'].booktitle =
|
88
|
+
before { @bib['a'].booktitle = 'A Booktitle' }
|
92
89
|
it 'returns the referenced booktitle' do
|
93
90
|
@bib['a1'].booktitle.must_be :==, @bib['a'].booktitle
|
94
91
|
end
|
@@ -119,7 +116,7 @@ module BibTeX
|
|
119
116
|
end
|
120
117
|
|
121
118
|
it 'returns a list of all fields not set in the field but in the reference' do
|
122
|
-
@bib['a1'].inherited_fields.must_be :==, [
|
119
|
+
@bib['a1'].inherited_fields.must_be :==, %i[booktitle editor title]
|
123
120
|
end
|
124
121
|
end
|
125
122
|
|
@@ -138,7 +135,6 @@ module BibTeX
|
|
138
135
|
end
|
139
136
|
end
|
140
137
|
end
|
141
|
-
|
142
138
|
end
|
143
139
|
end
|
144
140
|
|
@@ -148,21 +144,20 @@ module BibTeX
|
|
148
144
|
end
|
149
145
|
|
150
146
|
it 'returns the author (if set)' do
|
151
|
-
Entry.new(:
|
147
|
+
Entry.new(author: 'A').names.must_be :==, %w[A]
|
152
148
|
end
|
153
149
|
|
154
150
|
it 'returns all authors (if set)' do
|
155
|
-
Entry.new(:
|
151
|
+
Entry.new(author: 'A B and C D').parse_names.names.length.must_be :==, 2
|
156
152
|
end
|
157
153
|
|
158
154
|
it 'returns the editor (if set)' do
|
159
|
-
Entry.new(:
|
155
|
+
Entry.new(editor: 'A').names.must_be :==, %w[A]
|
160
156
|
end
|
161
157
|
|
162
158
|
it 'returns the translator (if set)' do
|
163
|
-
Entry.new(:
|
159
|
+
Entry.new(translator: 'A').names.must_be :==, %w[A]
|
164
160
|
end
|
165
|
-
|
166
161
|
end
|
167
162
|
|
168
163
|
describe 'month conversion' do
|
@@ -170,14 +165,14 @@ module BibTeX
|
|
170
165
|
@entry = Entry.new
|
171
166
|
end
|
172
167
|
|
173
|
-
[[:jan,'January'], [:feb,'February'], [:sep,'September']].each do |m|
|
168
|
+
[[:jan, 'January'], [:feb, 'February'], [:sep, 'September']].each do |m|
|
174
169
|
it 'should convert english months' do
|
175
170
|
@entry.month = m[1]
|
176
171
|
assert_equal m[0], @entry.month.v
|
177
172
|
end
|
178
173
|
end
|
179
174
|
|
180
|
-
[[
|
175
|
+
[%i[jan jan], %i[feb feb], %i[sep sep]].each do |m|
|
181
176
|
it 'should convert bibtex abbreviations' do
|
182
177
|
@entry.month = m[1]
|
183
178
|
assert_equal m[0], @entry.month.v
|
@@ -190,7 +185,7 @@ module BibTeX
|
|
190
185
|
assert_match(/month = aug/, @entry.to_s)
|
191
186
|
end
|
192
187
|
|
193
|
-
[[:jan,1], [:feb,2], [:sep,9]].each do |m|
|
188
|
+
[[:jan, 1], [:feb, 2], [:sep, 9]].each do |m|
|
194
189
|
it 'should convert numbers' do
|
195
190
|
@entry.month = m[1]
|
196
191
|
assert_equal m[0], @entry.month.v
|
@@ -201,7 +196,6 @@ module BibTeX
|
|
201
196
|
assert_equal m[1], @entry.month_numeric
|
202
197
|
end
|
203
198
|
end
|
204
|
-
|
205
199
|
end
|
206
200
|
|
207
201
|
describe '#values_at' do
|
@@ -210,7 +204,7 @@ module BibTeX
|
|
210
204
|
end
|
211
205
|
|
212
206
|
it 'returns an empty array when given no arguments' do
|
213
|
-
assert_equal [], Entry.new(:
|
207
|
+
assert_equal [], Entry.new(title: 'foo').values_at
|
214
208
|
end
|
215
209
|
|
216
210
|
it 'returns a nil array if the passed in key is not set' do
|
@@ -218,8 +212,8 @@ module BibTeX
|
|
218
212
|
end
|
219
213
|
|
220
214
|
it 'returns an array with the value of the passed in key' do
|
221
|
-
assert_equal ['x'], Entry.new(:
|
222
|
-
assert_equal [
|
215
|
+
assert_equal ['x'], Entry.new(title: 'x').values_at(:title)
|
216
|
+
assert_equal %w[a b], Entry.new(title: 'b', year: 'a').values_at(:year, :title)
|
223
217
|
end
|
224
218
|
end
|
225
219
|
|
@@ -229,12 +223,12 @@ module BibTeX
|
|
229
223
|
end
|
230
224
|
|
231
225
|
it 'includes type and all defined fields' do
|
232
|
-
assert_equal 'book', Entry.new(:
|
233
|
-
assert_equal 'book|title:foo', Entry.new(:
|
226
|
+
assert_equal 'book', Entry.new(bibtex_type: 'book').digest
|
227
|
+
assert_equal 'book|title:foo', Entry.new(bibtex_type: 'book', title: 'foo').digest
|
234
228
|
end
|
235
229
|
|
236
230
|
it 'accepts a filter' do
|
237
|
-
assert_equal 'book|year:2012', Entry.new(:
|
231
|
+
assert_equal 'book|year:2012', Entry.new(bibtex_type: 'book', title: 'foo', year: 2012).digest([:year])
|
238
232
|
end
|
239
233
|
end
|
240
234
|
|
@@ -254,13 +248,13 @@ module BibTeX
|
|
254
248
|
end
|
255
249
|
|
256
250
|
it 'supports renaming! of field attributes' do
|
257
|
-
@entry.rename!(:
|
251
|
+
@entry.rename!(title: :foo)
|
258
252
|
refute @entry.has_field?(:title)
|
259
253
|
assert_equal 'Moby Dick', @entry[:foo]
|
260
254
|
end
|
261
255
|
|
262
256
|
it 'supports renaming of field attributes' do
|
263
|
-
e = @entry.rename(:
|
257
|
+
e = @entry.rename(title: :foo)
|
264
258
|
|
265
259
|
assert @entry.has_field?(:title)
|
266
260
|
refute @entry.has_field?(:foo)
|
@@ -277,54 +271,54 @@ module BibTeX
|
|
277
271
|
e = @entry.to_citeproc
|
278
272
|
assert_equal 'book', e['type']
|
279
273
|
assert_equal 'New York', e['publisher-place']
|
280
|
-
assert_equal [1993,11], e['issued']['date-parts'][0]
|
274
|
+
assert_equal [1993, 11], e['issued']['date-parts'][0]
|
281
275
|
assert_equal 1, e['author'].length
|
282
276
|
assert_equal 'Herman', e['author'][0]['given']
|
283
277
|
assert_equal 'Melville', e['author'][0]['family']
|
284
278
|
end
|
285
279
|
|
286
280
|
it 'sets both issue and number in techreports' do
|
287
|
-
report = Entry.new
|
281
|
+
report = Entry.new do |r|
|
288
282
|
r.type = :techreport
|
289
283
|
r.number = 1
|
290
|
-
|
284
|
+
end.to_citeproc
|
291
285
|
|
292
286
|
assert_equal '1', report['number']
|
293
287
|
assert_equal '1', report['issue']
|
294
288
|
end
|
295
289
|
|
296
290
|
it 'uses authority and publisher for proceedings' do
|
297
|
-
proceedings = Entry.new
|
291
|
+
proceedings = Entry.new do |p|
|
298
292
|
p.type = :inproceedings
|
299
293
|
p.publisher = 'Publisher'
|
300
294
|
p.organization = 'Organization'
|
301
|
-
|
295
|
+
end.to_citeproc
|
302
296
|
|
303
297
|
assert_equal 'Publisher', proceedings['publisher']
|
304
298
|
assert_equal 'Organization', proceedings['authority']
|
305
299
|
|
306
|
-
proceedings = Entry.new
|
300
|
+
proceedings = Entry.new do |p|
|
307
301
|
p.type = :inproceedings
|
308
302
|
p.organization = 'Organization'
|
309
|
-
|
303
|
+
end.to_citeproc
|
310
304
|
|
311
305
|
assert_equal 'Organization', proceedings['publisher']
|
312
306
|
refute proceedings.key?('authority')
|
313
307
|
|
314
|
-
proceedings = Entry.new
|
308
|
+
proceedings = Entry.new do |p|
|
315
309
|
p.type = :inproceedings
|
316
310
|
p.publisher = 'Publisher'
|
317
|
-
|
311
|
+
end.to_citeproc
|
318
312
|
|
319
313
|
assert_equal 'Publisher', proceedings['publisher']
|
320
314
|
refute proceedings.key?('authority')
|
321
315
|
end
|
322
316
|
|
323
317
|
it 'uses event_place for conferences' do
|
324
|
-
conference = Entry.new
|
318
|
+
conference = Entry.new do |p|
|
325
319
|
p.type = :conference
|
326
320
|
p.address = 'Place'
|
327
|
-
|
321
|
+
end.to_citeproc
|
328
322
|
|
329
323
|
assert_equal 'Place', conference['event-place']
|
330
324
|
end
|
@@ -336,30 +330,29 @@ module BibTeX
|
|
336
330
|
end
|
337
331
|
|
338
332
|
it 'combines year, month and day in issued date' do
|
339
|
-
@entry.update :
|
333
|
+
@entry.update year: 2005, month: 5, day: 31
|
340
334
|
assert_equal [[2005, 5, 31]], @entry.to_citeproc['issued']['date-parts']
|
341
335
|
end
|
342
336
|
|
343
337
|
it 'prefers biblatex syntax' do
|
344
338
|
@entry.date = '2014-07-13'
|
345
|
-
assert_equal [[2014,7,13]], @entry.to_citeproc['issued']['date-parts']
|
339
|
+
assert_equal [[2014, 7, 13]], @entry.to_citeproc['issued']['date-parts']
|
346
340
|
end
|
347
341
|
|
348
342
|
it 'supports biblatex date ranges' do
|
349
343
|
@entry.date = '2014-06-12/2014-07-13'
|
350
344
|
|
351
|
-
assert_equal [[2014,6,12],[2014,7,13]],
|
352
|
-
|
345
|
+
assert_equal [[2014, 6, 12], [2014, 7, 13]],
|
346
|
+
@entry.to_citeproc['issued']['date-parts']
|
353
347
|
end
|
354
348
|
|
355
349
|
it 'supports biblatex partial dates' do
|
356
350
|
@entry.date = '2014-07'
|
357
|
-
assert_equal [[2014,7]], @entry.to_citeproc['issued']['date-parts']
|
351
|
+
assert_equal [[2014, 7]], @entry.to_citeproc['issued']['date-parts']
|
358
352
|
end
|
359
353
|
end
|
360
354
|
|
361
355
|
describe 'given a filter object or a filter name' do
|
362
|
-
|
363
356
|
class SuffixB < BibTeX::Filter
|
364
357
|
def apply(value)
|
365
358
|
value.is_a?(::String) ? "#{value}b" : value
|
@@ -368,7 +361,9 @@ module BibTeX
|
|
368
361
|
|
369
362
|
before do
|
370
363
|
@filter = Object.new
|
371
|
-
def @filter.apply
|
364
|
+
def @filter.apply(value)
|
365
|
+
value.is_a?(::String) ? value.upcase : value
|
366
|
+
end
|
372
367
|
end
|
373
368
|
|
374
369
|
it 'supports arbitrary conversion' do
|
@@ -386,18 +381,17 @@ module BibTeX
|
|
386
381
|
end
|
387
382
|
|
388
383
|
it 'supports conditional arbitrary in-place conversion' do
|
389
|
-
@entry.convert!(@filter) { |k,
|
384
|
+
@entry.convert!(@filter) { |k, _v| k.to_s =~ /publisher/i }
|
390
385
|
assert_equal 'Moby Dick', @entry.title
|
391
386
|
assert_equal 'PENGUIN', @entry.publisher
|
392
387
|
end
|
393
388
|
|
394
389
|
it 'supports conditional arbitrary conversion' do
|
395
|
-
e = @entry.convert(@filter) { |k,
|
390
|
+
e = @entry.convert(@filter) { |k, _v| k.to_s =~ /publisher/i }
|
396
391
|
assert_equal 'Moby Dick', e.title
|
397
392
|
assert_equal 'PENGUIN', e.publisher
|
398
393
|
assert_equal 'Penguin', @entry.publisher
|
399
394
|
end
|
400
|
-
|
401
395
|
end
|
402
396
|
|
403
397
|
describe 'LaTeX filter' do
|
@@ -436,7 +430,6 @@ module BibTeX
|
|
436
430
|
e.title.to_s.length.must_be :==, @entry.title.to_s.length
|
437
431
|
end
|
438
432
|
end
|
439
|
-
|
440
433
|
end
|
441
434
|
end
|
442
435
|
|
@@ -455,12 +448,12 @@ module BibTeX
|
|
455
448
|
end
|
456
449
|
|
457
450
|
it 'should accept option to use non-dropping-particle' do
|
458
|
-
assert_equal 'van', @entry.to_citeproc(:
|
451
|
+
assert_equal 'van', @entry.to_citeproc(particle: 'non-dropping-particle')['author'][0]['non-dropping-particle']
|
459
452
|
end
|
460
453
|
end
|
461
454
|
|
462
455
|
def test_simple
|
463
|
-
bib = BibTeX::Bibliography.open(Test.fixtures(:entry), :
|
456
|
+
bib = BibTeX::Bibliography.open(Test.fixtures(:entry), debug: false)
|
464
457
|
refute_nil(bib)
|
465
458
|
assert_equal(BibTeX::Bibliography, bib.class)
|
466
459
|
assert_equal(4, bib.data.length)
|
@@ -482,7 +475,7 @@ module BibTeX
|
|
482
475
|
end
|
483
476
|
|
484
477
|
def test_ghost_methods
|
485
|
-
bib = BibTeX::Bibliography.open(Test.fixtures(:entry), :
|
478
|
+
bib = BibTeX::Bibliography.open(Test.fixtures(:entry), debug: false)
|
486
479
|
|
487
480
|
assert_equal 'Poe, Edgar A.', bib[0].author.to_s
|
488
481
|
|
@@ -506,12 +499,12 @@ module BibTeX
|
|
506
499
|
end
|
507
500
|
|
508
501
|
def test_creation_from_hash
|
509
|
-
entry = BibTeX::Entry.new(
|
510
|
-
:
|
511
|
-
:
|
512
|
-
:
|
513
|
-
:
|
514
|
-
|
502
|
+
entry = BibTeX::Entry.new(
|
503
|
+
bibtex_type: 'book',
|
504
|
+
bibtex_key: :raven,
|
505
|
+
author: 'Poe, Edgar A.',
|
506
|
+
title: 'The Raven'
|
507
|
+
)
|
515
508
|
|
516
509
|
assert_equal :book, entry.type
|
517
510
|
assert_equal 'raven', entry.key
|
@@ -535,27 +528,26 @@ module BibTeX
|
|
535
528
|
|
536
529
|
def test_sorting
|
537
530
|
entries = []
|
538
|
-
entries << Entry.new(
|
539
|
-
entries << Entry.new(
|
540
|
-
entries << Entry.new(
|
541
|
-
entries << Entry.new(
|
531
|
+
entries << Entry.new(bibtex_type: 'book', bibtex_key: 'raven3', author: 'Poe, Edgar A.', title: 'The Raven')
|
532
|
+
entries << Entry.new(bibtex_type: 'book', bibtex_key: 'raven2', author: 'Poe, Edgar A.', title: 'The Raven')
|
533
|
+
entries << Entry.new(bibtex_type: 'book', bibtex_key: 'raven1', author: 'Poe, Edgar A.', title: 'The Raven')
|
534
|
+
entries << Entry.new(bibtex_type: 'book', bibtex_key: 'raven1', author: 'Poe, Edgar A.', title: 'The Aven')
|
542
535
|
|
543
536
|
entries.sort!
|
544
537
|
|
545
|
-
assert_equal [
|
546
|
-
assert_equal ['The Aven', 'The Raven'], entries.map(&:title)[0,2]
|
547
|
-
|
538
|
+
assert_equal %w[raven1 raven1 raven2 raven3], entries.map(&:key)
|
539
|
+
assert_equal ['The Aven', 'The Raven'], entries.map(&:title)[0, 2]
|
548
540
|
end
|
549
541
|
|
550
542
|
describe 'default keys' do
|
551
|
-
before
|
552
|
-
@e1 = Entry.new(:
|
553
|
-
@e2 = Entry.new(:
|
554
|
-
@e3 = Entry.new(:
|
555
|
-
@e4 = Entry.new(:
|
556
|
-
@e5 = Entry.new(:
|
557
|
-
@e6 = Entry.new(:
|
558
|
-
|
543
|
+
before do
|
544
|
+
@e1 = Entry.new(bibtex_type: 'book', author: 'Poe, Edgar A.', title: 'The Raven', editor: 'John Hopkins', year: 1996)
|
545
|
+
@e2 = Entry.new(bibtex_type: 'book', title: 'The Raven', editor: 'John Hopkins', year: 1996)
|
546
|
+
@e3 = Entry.new(bibtex_type: 'book', author: 'Poe, Edgar A.', title: 'The Raven', editor: 'John Hopkins')
|
547
|
+
@e4 = Entry.new(bibtex_type: 'book', author: 'Poe, Edgar A.', title: 'The Raven', editor: 'John Hopkins', date: '2003-09')
|
548
|
+
@e5 = Entry.new(bibtex_type: 'book', author: 'Poe, Edgar A.', title: 'The Raven', editor: 'John Hopkins', year: 'n.d.')
|
549
|
+
@e6 = Entry.new(bibtex_type: 'book', author: 'Poe, Edgar A.', title: 'The Raven', editor: 'John Hopkins', year: '[2009]')
|
550
|
+
end
|
559
551
|
|
560
552
|
it 'should return "unknown-a" for an empty Entry' do
|
561
553
|
Entry.new.key.must_be :==, 'unknown-a'
|
@@ -591,10 +583,10 @@ module BibTeX
|
|
591
583
|
end
|
592
584
|
|
593
585
|
describe 'when the entry is added to a Bibliography' do
|
594
|
-
before
|
586
|
+
before do
|
595
587
|
@e = Entry.new
|
596
588
|
@bib = Bibliography.new
|
597
|
-
|
589
|
+
end
|
598
590
|
|
599
591
|
it 'should register itself with its key' do
|
600
592
|
@bib << @e
|
@@ -604,13 +596,12 @@ module BibTeX
|
|
604
596
|
describe "when there is already an element registered with the entry's key" do
|
605
597
|
before { @bib << Entry.new }
|
606
598
|
|
607
|
-
it
|
599
|
+
it 'should find a suitable key' do
|
608
600
|
k = @e.key
|
609
601
|
@bib << @e
|
610
602
|
@bib.entries.keys.must_include @e.key
|
611
603
|
k.wont_be :==, @e.key
|
612
604
|
end
|
613
|
-
|
614
605
|
end
|
615
606
|
end
|
616
607
|
|
@@ -645,11 +636,11 @@ module BibTeX
|
|
645
636
|
end
|
646
637
|
|
647
638
|
describe '#valid?' do
|
648
|
-
before
|
639
|
+
before do
|
649
640
|
@misc = Entry.new
|
650
|
-
@book = Entry.new(
|
651
|
-
@article = Entry.new(
|
652
|
-
|
641
|
+
@book = Entry.new(bibtex_type: :book)
|
642
|
+
@article = Entry.new(bibtex_type: :article)
|
643
|
+
end
|
653
644
|
|
654
645
|
it 'is true by default' do
|
655
646
|
assert @misc.valid?
|
@@ -661,12 +652,12 @@ module BibTeX
|
|
661
652
|
end
|
662
653
|
|
663
654
|
it 'is true only if all mandatory fields are present' do
|
664
|
-
@book.update(
|
665
|
-
:
|
666
|
-
:
|
667
|
-
:
|
668
|
-
:
|
669
|
-
|
655
|
+
@book.update(
|
656
|
+
author: 'Henry James',
|
657
|
+
title: 'What Maisie Knew',
|
658
|
+
year: 1897,
|
659
|
+
publisher: 'Heineman'
|
660
|
+
)
|
670
661
|
|
671
662
|
assert @book.valid?
|
672
663
|
|
@@ -682,11 +673,11 @@ module BibTeX
|
|
682
673
|
end
|
683
674
|
|
684
675
|
describe '#fetch' do
|
685
|
-
let(:pages){ '1--2' }
|
686
|
-
let(:entry)
|
676
|
+
let(:pages) { '1--2' }
|
677
|
+
let(:entry) do
|
687
678
|
e = Entry.new
|
688
679
|
e.add(:pages, pages)
|
689
|
-
|
680
|
+
end
|
690
681
|
|
691
682
|
describe '(:pages)' do
|
692
683
|
it 'should fetch pages' do
|