asciidoctor-bibliography 0.2.1 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.codeclimate.yml +5 -0
- data/.gitignore +8 -2
- data/.hound.yml +3 -0
- data/.oss-guides.rubocop.yml +1076 -0
- data/.rubocop.yml +4 -10
- data/.travis.yml +2 -1
- data/Gemfile +1 -1
- data/README.adoc +224 -24
- data/Rakefile +2 -2
- data/asciidoctor-bibliography.gemspec +23 -23
- data/lib/asciidoctor-bibliography.rb +2 -2
- data/lib/asciidoctor-bibliography/asciidoctor.rb +4 -4
- data/lib/asciidoctor-bibliography/asciidoctor/bibliographer_preprocessor.rb +9 -56
- data/lib/asciidoctor-bibliography/bibliographer.rb +6 -7
- data/lib/asciidoctor-bibliography/citation.rb +56 -53
- data/lib/asciidoctor-bibliography/citation_item.rb +19 -10
- data/lib/asciidoctor-bibliography/database.rb +18 -6
- data/lib/asciidoctor-bibliography/databases/bibtex.rb +10 -10
- data/lib/asciidoctor-bibliography/errors.rb +16 -0
- data/lib/asciidoctor-bibliography/formatters/csl.rb +13 -2
- data/lib/asciidoctor-bibliography/formatters/tex.rb +42 -44
- data/lib/asciidoctor-bibliography/helpers.rb +9 -9
- data/lib/asciidoctor-bibliography/index.rb +17 -13
- data/lib/asciidoctor-bibliography/options.rb +97 -0
- data/lib/asciidoctor-bibliography/version.rb +1 -1
- data/samples/latex_macros_in_bibtex/sample.adoc +1 -1
- data/samples/standard/sample-default.adoc +3 -3
- data/samples/standard/sample-default.html +9 -8
- data/samples/standard/sample-din.adoc +1 -1
- data/samples/standard/sample-din.html +4 -3
- data/samples/standard/sample-ieee.adoc +1 -1
- data/samples/standard/sample-ieee.html +4 -3
- data/samples/tex/sample-authoryear.adoc +7 -17
- data/samples/tex/sample-authoryear.html +10 -32
- data/samples/tex/sample-numbers.adoc +7 -18
- data/samples/tex/sample-numbers.html +7 -29
- data/samples/tex/{sample-ordering.adoc → sample-sort.adoc} +6 -4
- data/spec/citation_item_spec.rb +67 -19
- data/spec/database_spec.rb +21 -16
- data/spec/helpers_spec.rb +46 -44
- data/spec/options_spec.rb +43 -0
- data/spec/spec_helper.rb +53 -55
- metadata +9 -7
- data/lib/asciidoctor-bibliography/exceptions.rb +0 -5
- data/samples/tex/sample-din.adoc +0 -74
- data/samples/tex/sample-din.html +0 -556
- data/samples/tex/sample-ordering.html +0 -467
@@ -1,26 +1,11 @@
|
|
1
1
|
= Sample usage of asciidoctor-bibliography
|
2
2
|
:bibliography-database: biblio.bib
|
3
|
-
:bibliography-
|
4
|
-
:bibliography-
|
5
|
-
:bibliography-reference-style: ieee
|
3
|
+
:bibliography-tex-style: numbers
|
4
|
+
:bibliography-style: ieee
|
6
5
|
|
7
|
-
## Standard
|
8
6
|
|
9
|
-
|
7
|
+
## Citations
|
10
8
|
|
11
|
-
cite:[Anderson04, page=10]
|
12
|
-
|
13
|
-
cite:[Anderson04, chapter=10]
|
14
|
-
|
15
|
-
cite:[Anderson04, page=10, chapter=12]
|
16
|
-
|
17
|
-
cite:[Lane12a]+[Lane12b]
|
18
|
-
|
19
|
-
cite:[Lane12b]+[Lane12a]
|
20
|
-
|
21
|
-
## TeX-compatible
|
22
|
-
|
23
|
-
fullcite:[Anderson04] (fullcite, single)
|
24
9
|
|
25
10
|
citet:[Anderson04] (citet, single)
|
26
11
|
|
@@ -70,7 +55,11 @@ citeyearpar:[Anderson04] (citeyearpar, single)
|
|
70
55
|
|
71
56
|
citeyearpar:[Lane12a]+[Lane12b] (citeyearpar, multiple)
|
72
57
|
|
58
|
+
fullcite:[Anderson04] (fullcite)
|
59
|
+
|
60
|
+
|
73
61
|
## Bibliography
|
74
62
|
|
63
|
+
|
75
64
|
bibliography::[]
|
76
65
|
|
@@ -5,7 +5,7 @@
|
|
5
5
|
<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]-->
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
7
7
|
<meta name="generator" content="Asciidoctor 1.5.6.1">
|
8
|
-
<title>
|
8
|
+
<title>Sample usage of asciidoctor-bibliography</title>
|
9
9
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
|
10
10
|
<style>
|
11
11
|
/* Asciidoctor default stylesheet | MIT License | http://asciidoctor.org */
|
@@ -427,38 +427,13 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
|
|
427
427
|
</head>
|
428
428
|
<body class="article">
|
429
429
|
<div id="header">
|
430
|
+
<h1>Sample usage of asciidoctor-bibliography</h1>
|
430
431
|
</div>
|
431
432
|
<div id="content">
|
432
433
|
<div class="sect1">
|
433
|
-
<h2 id="
|
434
|
+
<h2 id="_citations">Citations</h2>
|
434
435
|
<div class="sectionbody">
|
435
436
|
<div class="paragraph">
|
436
|
-
<p><a href="#bibliography-Anderson04">[1]</a></p>
|
437
|
-
</div>
|
438
|
-
<div class="paragraph">
|
439
|
-
<p><a href="#bibliography-Anderson04">[1, P. 10]</a></p>
|
440
|
-
</div>
|
441
|
-
<div class="paragraph">
|
442
|
-
<p><a href="#bibliography-Anderson04">[1, Ch. 10]</a></p>
|
443
|
-
</div>
|
444
|
-
<div class="paragraph">
|
445
|
-
<p><a href="#bibliography-Anderson04">[1, Ch. 12]</a></p>
|
446
|
-
</div>
|
447
|
-
<div class="paragraph">
|
448
|
-
<p><a href="#bibliography-Lane12a">[2]</a>, <a href="#bibliography-Lane12b">[3]</a></p>
|
449
|
-
</div>
|
450
|
-
<div class="paragraph">
|
451
|
-
<p><a href="#bibliography-Lane12a">[2]</a>, <a href="#bibliography-Lane12b">[3]</a></p>
|
452
|
-
</div>
|
453
|
-
</div>
|
454
|
-
</div>
|
455
|
-
<div class="sect1">
|
456
|
-
<h2 id="_tex_compatible">TeX-compatible</h2>
|
457
|
-
<div class="sectionbody">
|
458
|
-
<div class="paragraph">
|
459
|
-
<p>J. R. Anderson, D. Bothell, M. D. Byrne, S. Douglass, C. Lebiere, and Y. L. Qin, “An integrated theory of the mind,” <em>Psychological Review</em>, vol. 111, no. 4, pp. 1036–1060, 2004. (fullcite, single)</p>
|
460
|
-
</div>
|
461
|
-
<div class="paragraph">
|
462
437
|
<p><a href="#bibliography-Anderson04">Anderson et al. [1]</a> (citet, single)</p>
|
463
438
|
</div>
|
464
439
|
<div class="paragraph">
|
@@ -530,6 +505,9 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
|
|
530
505
|
<div class="paragraph">
|
531
506
|
<p>[<a href="#bibliography-Lane12a">2000</a>, <a href="#bibliography-Lane12b">2000</a>] (citeyearpar, multiple)</p>
|
532
507
|
</div>
|
508
|
+
<div class="paragraph">
|
509
|
+
<p>J. R. Anderson, D. Bothell, M. D. Byrne, S. Douglass, C. Lebiere, and Y. L. Qin, “An integrated theory of the mind,” <em>Psychological Review</em>, vol. 111, no. 4, pp. 1036–1060, 2004. (fullcite)</p>
|
510
|
+
</div>
|
533
511
|
</div>
|
534
512
|
</div>
|
535
513
|
<div class="sect1">
|
@@ -549,7 +527,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
|
|
549
527
|
</div>
|
550
528
|
<div id="footer">
|
551
529
|
<div id="footer-text">
|
552
|
-
Last updated 2017-09-
|
530
|
+
Last updated 2017-09-17 18:31:26 CEST
|
553
531
|
</div>
|
554
532
|
</div>
|
555
533
|
</body>
|
@@ -1,10 +1,11 @@
|
|
1
1
|
= Sample usage of asciidoctor-bibliography
|
2
2
|
:bibliography-database: biblio.bib
|
3
|
-
:bibliography-
|
4
|
-
:bibliography-
|
5
|
-
:bibliography-
|
3
|
+
:bibliography-tex-style: numbers
|
4
|
+
:bibliography-style: ieee
|
5
|
+
:bibliography-sort: { macro: author, sort: descending }
|
6
6
|
|
7
|
-
|
7
|
+
|
8
|
+
## Citations
|
8
9
|
|
9
10
|
|
10
11
|
cite:[Lane12a]
|
@@ -16,5 +17,6 @@ cite:[Anderson04]
|
|
16
17
|
|
17
18
|
## Bibliography
|
18
19
|
|
20
|
+
|
19
21
|
bibliography::[]
|
20
22
|
|
data/spec/citation_item_spec.rb
CHANGED
@@ -1,52 +1,100 @@
|
|
1
|
-
require
|
1
|
+
require "asciidoctor-bibliography/helpers"
|
2
2
|
|
3
3
|
describe AsciidoctorBibliography::CitationItem do
|
4
|
-
describe
|
5
|
-
it
|
4
|
+
describe ".new" do
|
5
|
+
it "can be mutely initialized" do
|
6
6
|
expect { described_class.new }.to_not raise_exception
|
7
7
|
end
|
8
8
|
|
9
|
-
it
|
9
|
+
it "can be initialized with a block operating on itself" do
|
10
10
|
itself = nil
|
11
11
|
expect(described_class.new { |ci| itself = ci }).to be(itself)
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
|
-
describe
|
15
|
+
describe "#parse_attribute_list" do
|
16
16
|
subject { described_class.new }
|
17
17
|
|
18
18
|
before do
|
19
|
-
subject.parse_attribute_list
|
19
|
+
subject.parse_attribute_list "foo, lol=bar, baz, qux, zod=13"
|
20
20
|
end
|
21
21
|
|
22
|
-
it
|
23
|
-
expect(subject.key).to eq
|
22
|
+
it "treats the first positional attribute as the id" do
|
23
|
+
expect(subject.key).to eq "foo"
|
24
24
|
end
|
25
25
|
|
26
|
-
it
|
27
|
-
expect(subject.positional_attributes).to eq [
|
26
|
+
it "extracts the positional attributes in order, except the first one" do
|
27
|
+
expect(subject.positional_attributes).to eq ["baz", "qux"]
|
28
28
|
end
|
29
29
|
|
30
|
-
it
|
31
|
-
expect(subject.named_attributes).to eq(
|
30
|
+
it "extracts all named attributes" do
|
31
|
+
expect(subject.named_attributes).to eq("lol" => "bar", "zod" => "13")
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
|
-
describe
|
35
|
+
describe "#locators" do
|
36
36
|
subject { described_class.new }
|
37
37
|
|
38
|
-
it
|
39
|
-
subject.parse_attribute_list
|
40
|
-
expect(subject.
|
38
|
+
it "returns no locator if none are present" do
|
39
|
+
subject.parse_attribute_list "foo, lol=bar, baz, qux, zod=42"
|
40
|
+
expect(subject.locator).to be_nil
|
41
41
|
end
|
42
42
|
|
43
|
-
it
|
44
|
-
locators = %w[book chapter column figure folio issue line note opus
|
43
|
+
it "recognizes all CSL locators" do
|
44
|
+
locators = %w[book chapter column figure folio issue line note opus
|
45
|
+
page paragraph part section sub-verbo verse volume]
|
45
46
|
locators_hash = locators.map { |l| [l, rand(10).to_s] }.to_h
|
46
|
-
locators_string = locators_hash.to_a.map { |a| a.join
|
47
|
+
locators_string = locators_hash.to_a.map { |a| a.join "=" }.join(", ")
|
47
48
|
|
48
49
|
subject.parse_attribute_list "foo, #{locators_string}"
|
49
50
|
expect(subject.locators).to eq locators_hash
|
50
51
|
end
|
52
|
+
|
53
|
+
it "recognizes non standard locator" do
|
54
|
+
subject.parse_attribute_list "foo, locator=' somewhere'"
|
55
|
+
expect(subject.locators).to eq("locator" => " somewhere")
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
describe "#locator" do
|
60
|
+
subject { described_class.new }
|
61
|
+
|
62
|
+
it "returns the first locator if existing" do
|
63
|
+
subject.parse_attribute_list("foo, page=42, locator=bar, chapter=24")
|
64
|
+
expect(subject.locator).to eq(%w[page 42])
|
65
|
+
end
|
66
|
+
|
67
|
+
it "returns nil if no loctor exist" do
|
68
|
+
subject.parse_attribute_list("foo, bar, zod=quz")
|
69
|
+
expect(subject.locator).to be_nil
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
describe "#prefix" do
|
74
|
+
subject { described_class.new }
|
75
|
+
|
76
|
+
it "returns the prefix if it exist" do
|
77
|
+
subject.parse_attribute_list("foo, prefix=bar")
|
78
|
+
expect(subject.prefix).to eq("bar")
|
79
|
+
end
|
80
|
+
|
81
|
+
it "returns nil if no prefix exists" do
|
82
|
+
subject.parse_attribute_list("foo, bar, zod=quz")
|
83
|
+
expect(subject.prefix).to be_nil
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
describe "#suffix" do
|
88
|
+
subject { described_class.new }
|
89
|
+
|
90
|
+
it "returns the suffix if it exist" do
|
91
|
+
subject.parse_attribute_list("foo, suffix=bar")
|
92
|
+
expect(subject.suffix).to eq("bar")
|
93
|
+
end
|
94
|
+
|
95
|
+
it "returns nil if no suffix exists" do
|
96
|
+
subject.parse_attribute_list("foo, bar, zod=quz")
|
97
|
+
expect(subject.suffix).to be_nil
|
98
|
+
end
|
51
99
|
end
|
52
100
|
end
|
data/spec/database_spec.rb
CHANGED
@@ -1,39 +1,44 @@
|
|
1
|
-
require
|
1
|
+
require "asciidoctor-bibliography/helpers"
|
2
2
|
|
3
3
|
describe AsciidoctorBibliography::Database do
|
4
|
-
describe
|
5
|
-
it
|
4
|
+
describe ".new" do
|
5
|
+
it "is by default an empty array" do
|
6
6
|
expect(described_class.new).to eq([])
|
7
7
|
end
|
8
8
|
|
9
|
-
it
|
9
|
+
it "can be initialized with a single database" do
|
10
10
|
expect(described_class.new("spec/fixtures/database.bib")).to_not eq([])
|
11
11
|
end
|
12
12
|
|
13
|
-
it
|
13
|
+
it "can be initialized with a list of databases" do
|
14
14
|
expect(described_class.new("spec/fixtures/database.bib", "spec/fixtures/database.bibtex")).to_not eq([])
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
|
-
describe
|
18
|
+
describe "#append" do
|
19
19
|
let(:db) { described_class.new }
|
20
20
|
|
21
|
-
it
|
21
|
+
it "can load and concatenate databases after initialization" do
|
22
22
|
expect(db.length).to eq(0)
|
23
|
-
expect { db.append("spec/fixtures/database.bib") }.to
|
24
|
-
expect { db.append("spec/fixtures/database.bibtex") }.to
|
23
|
+
expect { db.append("spec/fixtures/database.bib") }.to(change { db.length })
|
24
|
+
expect { db.append("spec/fixtures/database.bibtex") }.to(change { db.length })
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
|
-
describe
|
29
|
-
it
|
30
|
-
expect { described_class.load
|
31
|
-
|
28
|
+
describe ".load" do
|
29
|
+
it "raises error if given non existing file" do
|
30
|
+
expect { described_class.load "spec/fixtures/database.xxx" }.
|
31
|
+
to raise_exception AsciidoctorBibliography::Errors::Database::FileNotFound
|
32
32
|
end
|
33
33
|
|
34
|
-
it
|
35
|
-
expect { described_class.load
|
36
|
-
|
34
|
+
it "raises error if given unknown format" do
|
35
|
+
expect { described_class.load "spec/fixtures/database.unk" }.
|
36
|
+
to raise_exception AsciidoctorBibliography::Errors::Database::UnsupportedFormat
|
37
|
+
end
|
38
|
+
|
39
|
+
it "recognizes Bib(La)Tex databases" do
|
40
|
+
expect { described_class.load "spec/fixtures/database.bib" }.to_not raise_exception
|
41
|
+
expect { described_class.load "spec/fixtures/database.bibtex" }.to_not raise_exception
|
37
42
|
end
|
38
43
|
end
|
39
44
|
end
|
data/spec/helpers_spec.rb
CHANGED
@@ -1,71 +1,73 @@
|
|
1
|
-
require
|
1
|
+
require "asciidoctor-bibliography/helpers"
|
2
2
|
|
3
3
|
describe AsciidoctorBibliography::Helpers do
|
4
|
-
describe
|
5
|
-
it
|
6
|
-
expect(subject.slice({ foo:
|
7
|
-
expect(subject.slice({ foo:
|
4
|
+
describe ".slice" do
|
5
|
+
it "finds one or more existing keys" do
|
6
|
+
expect(subject.slice({ foo: "bar", baz: "qux" }, :foo)).to eq(foo: "bar")
|
7
|
+
expect(subject.slice({ foo: "bar", baz: "qux" }, :foo, :baz)).to eq(foo: "bar", baz: "qux")
|
8
8
|
end
|
9
9
|
|
10
|
-
it
|
11
|
-
expect(subject.slice({}, :foo)).to eq(
|
12
|
-
expect(subject.slice({ foo:
|
13
|
-
expect(subject.slice({ foo:
|
10
|
+
it "returns nil for missing keys" do
|
11
|
+
expect(subject.slice({}, :foo)).to eq(foo: nil)
|
12
|
+
expect(subject.slice({ foo: "bar" }, :bar)).to eq(bar: nil)
|
13
|
+
expect(subject.slice({ foo: "bar" }, :foo, :baz)).to eq(foo: "bar", baz: nil)
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
-
describe
|
18
|
-
it
|
19
|
-
expect(subject.join_nonempty([nil],
|
20
|
-
expect(subject.join_nonempty([
|
21
|
-
expect(subject.join_nonempty([nil,
|
22
|
-
expect(subject.join_nonempty([
|
17
|
+
describe ".join_nonempty" do
|
18
|
+
it "ignores nils" do
|
19
|
+
expect(subject.join_nonempty([nil], "-")).to eq("")
|
20
|
+
expect(subject.join_nonempty(["foo", nil], "-")).to eq("foo")
|
21
|
+
expect(subject.join_nonempty([nil, "bar"], "-")).to eq("bar")
|
22
|
+
expect(subject.join_nonempty(["foo", nil, "bar"], "-")).to eq("foo-bar")
|
23
23
|
end
|
24
24
|
|
25
|
-
it
|
26
|
-
expect(subject.join_nonempty([
|
27
|
-
expect(subject.join_nonempty([
|
28
|
-
expect(subject.join_nonempty([
|
29
|
-
expect(subject.join_nonempty([
|
25
|
+
it "ignores empty strings" do
|
26
|
+
expect(subject.join_nonempty([""], "-")).to eq("")
|
27
|
+
expect(subject.join_nonempty(["foo", ""], "-")).to eq("foo")
|
28
|
+
expect(subject.join_nonempty(["", "bar"], "-")).to eq("bar")
|
29
|
+
expect(subject.join_nonempty(["foo", "", "bar"], "-")).to eq("foo-bar")
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
|
-
describe
|
34
|
-
it
|
35
|
-
expect(subject.html_to_asciidoc(
|
33
|
+
describe ".html_to_asciidoc" do
|
34
|
+
it "converts italic" do
|
35
|
+
expect(subject.html_to_asciidoc("This is <i>italic</i>.")).to eq("This is _italic_.")
|
36
36
|
end
|
37
37
|
|
38
|
-
it
|
39
|
-
expect(subject.html_to_asciidoc(
|
38
|
+
it "converts bold" do
|
39
|
+
expect(subject.html_to_asciidoc("This is <b>bold</b>.")).to eq("This is *bold*.")
|
40
40
|
end
|
41
41
|
|
42
|
-
it
|
43
|
-
expect(subject.html_to_asciidoc('This is a <span attribute="value">span</span>.'))
|
44
|
-
|
42
|
+
it "drops spans" do
|
43
|
+
expect(subject.html_to_asciidoc('This is a <span attribute="value">span</span>.')).
|
44
|
+
to eq("This is a span.")
|
45
45
|
end
|
46
46
|
|
47
|
-
it
|
48
|
-
expect(subject.html_to_asciidoc(
|
49
|
-
|
47
|
+
it "drops curly brackets" do
|
48
|
+
expect(subject.html_to_asciidoc("This is {bracketed}.")).
|
49
|
+
to eq("This is bracketed.")
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
53
|
-
describe
|
54
|
-
let(:new_options)
|
55
|
-
|
56
|
-
|
53
|
+
describe ".to_sentence" do
|
54
|
+
let(:new_options) do
|
55
|
+
{ words_connector: "1",
|
56
|
+
two_words_connector: "2",
|
57
|
+
last_word_connector: "3" }
|
58
|
+
end
|
57
59
|
|
58
|
-
it
|
59
|
-
expect(subject.to_sentence([])).to eq(
|
60
|
-
expect(subject.to_sentence([
|
61
|
-
expect(subject.to_sentence([
|
62
|
-
expect(subject.to_sentence([
|
63
|
-
expect(subject.to_sentence([
|
60
|
+
it "concatenates arbitrary arrays" do
|
61
|
+
expect(subject.to_sentence([])).to eq("")
|
62
|
+
expect(subject.to_sentence(["foo"])).to eq("foo")
|
63
|
+
expect(subject.to_sentence(["foo", "bar"])).to eq("foo and bar")
|
64
|
+
expect(subject.to_sentence(["foo", "bar", "baz"])).to eq("foo, bar, and baz")
|
65
|
+
expect(subject.to_sentence(["foo", "bar", "baz", "qux"])).to eq("foo, bar, baz, and qux")
|
64
66
|
end
|
65
67
|
|
66
|
-
it
|
67
|
-
expect(subject.to_sentence([
|
68
|
-
expect(subject.to_sentence([
|
68
|
+
it "accepts custom separators" do
|
69
|
+
expect(subject.to_sentence(["foo", "bar"], new_options)).to eq("foo2bar")
|
70
|
+
expect(subject.to_sentence(["foo", "bar", "baz"], new_options)).to eq("foo1bar3baz")
|
69
71
|
end
|
70
72
|
end
|
71
73
|
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require "asciidoctor-bibliography/helpers"
|
2
|
+
|
3
|
+
describe AsciidoctorBibliography::Options do
|
4
|
+
describe "#database" do
|
5
|
+
it "has no default" do
|
6
|
+
expect { described_class.new.database }.
|
7
|
+
to raise_exception AsciidoctorBibliography::Errors::Options::Missing
|
8
|
+
end
|
9
|
+
|
10
|
+
it "returns the provided database name" do
|
11
|
+
expect(described_class.new.merge("bibliography-database" => "foobar").database).to eq("foobar")
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "#hyperlinks?" do
|
16
|
+
it "defaults to true" do
|
17
|
+
expect(described_class.new.hyperlinks?).to be true
|
18
|
+
end
|
19
|
+
|
20
|
+
it "returns true when provided option is true" do
|
21
|
+
expect(described_class.new.merge("bibliography-hyperlinks" => "false").hyperlinks?).to be false
|
22
|
+
end
|
23
|
+
|
24
|
+
it "returns true when provided option is true" do
|
25
|
+
expect(described_class.new.merge("bibliography-hyperlinks" => "true").hyperlinks?).to be true
|
26
|
+
end
|
27
|
+
|
28
|
+
it "raises an error when provided option is invalid" do
|
29
|
+
expect { described_class.new.merge("bibliography-hyperlinks" => "foo").hyperlinks? }.
|
30
|
+
to raise_exception AsciidoctorBibliography::Errors::Options::Invalid
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe "#style" do
|
35
|
+
it "defaults to apa" do
|
36
|
+
expect(described_class.new.style).to eq "apa"
|
37
|
+
end
|
38
|
+
|
39
|
+
it "returns the provided style name" do
|
40
|
+
expect(described_class.new.merge("bibliography-style" => "foobar").style).to eq("foobar")
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|