asciidoctor-bibliography 0.2.1 → 0.3.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/.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
|