jekyll-scholar 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -4,36 +4,36 @@ Feature: BibTeX
4
4
  In order to have control over the references that go up on my website
5
5
 
6
6
  @tags @filters
7
- Scenario: Filter by Year
7
+ Scenario: Filter by Year
8
8
  Given I have a scholar configuration with:
9
- | key | value |
10
- | source | ./_bibliography |
11
- | query | "@*[year=2009]" |
12
- And I have a "_bibliography" directory
13
- And I have a file "_bibliography/references.bib":
14
- """
15
- @book{ruby,
16
- title = {The Ruby Programming Language},
17
- author = {Flanagan, David and Matsumoto, Yukihiro},
18
- year = {2008},
19
- publisher = {O'Reilly Media}
20
- }
21
- @book{pickaxe,
22
- title = {Programming Ruby 1.9: The Pragmatic Programmer's Guide},
23
- author = {Thomas, Dave and Fowler, Chad and Hunt, Andy},
24
- year = {2009},
25
- edition = 3,
26
- publisher = {Pragmatic Bookshelf}
27
- }
28
- """
29
- And I have a page "scholar.html":
30
- """
31
- ---
32
- ---
33
- {% bibliography %}
34
- """
35
- When I run jekyll
36
- Then the _site directory should exist
37
- And the "_site/scholar.html" file should exist
38
- And I should see "Programming Ruby" in "_site/scholar.html"
39
- And I should not see "The Ruby Programming Language" in "_site/scholar.html"
9
+ | key | value |
10
+ | source | ./_bibliography |
11
+ | query | "@*[year=2009]" |
12
+ And I have a "_bibliography" directory
13
+ And I have a file "_bibliography/references.bib":
14
+ """
15
+ @book{ruby,
16
+ title = {The Ruby Programming Language},
17
+ author = {Flanagan, David and Matsumoto, Yukihiro},
18
+ year = {2008},
19
+ publisher = {O'Reilly Media}
20
+ }
21
+ @book{pickaxe,
22
+ title = {Programming Ruby 1.9: The Pragmatic Programmer's Guide},
23
+ author = {Thomas, Dave and Fowler, Chad and Hunt, Andy},
24
+ year = {2009},
25
+ edition = 3,
26
+ publisher = {Pragmatic Bookshelf}
27
+ }
28
+ """
29
+ And I have a page "scholar.html":
30
+ """
31
+ ---
32
+ ---
33
+ {% bibliography %}
34
+ """
35
+ When I run jekyll
36
+ Then the _site directory should exist
37
+ And the "_site/scholar.html" file should exist
38
+ And I should see "Programming Ruby" in "_site/scholar.html"
39
+ And I should not see "The Ruby Programming Language" in "_site/scholar.html"
@@ -29,7 +29,7 @@ Feature: Formatted References
29
29
  And the "_site/scholar.html" file should exist
30
30
  And I should see "Matsumoto, Y. \(2008\). <i>The Ruby" in "_site/scholar.html"
31
31
 
32
- @tags @reference
32
+ @tags @reference @missing
33
33
  Scenario: Missing references
34
34
  Given I have a scholar configuration with:
35
35
  | key | value |
@@ -54,4 +54,33 @@ Feature: Formatted References
54
54
  When I run jekyll
55
55
  Then the _site directory should exist
56
56
  And the "_site/scholar.html" file should exist
57
- And I should see "missing reference" in "_site/scholar.html"
57
+ And I should see "(missing reference)" in "_site/scholar.html"
58
+
59
+ @tags @reference @missing
60
+ Scenario: Missing references with a custom text
61
+ Given I have a scholar configuration with:
62
+ | key | value |
63
+ | source | ./_bibliography |
64
+ | bibliography | my_references |
65
+ | missing_reference | not found! |
66
+ And I have a "_bibliography" directory
67
+ And I have a file "_bibliography/my_references.bib":
68
+ """
69
+ @book{ruby,
70
+ title = {The Ruby Programming Language},
71
+ author = {Flanagan, David and Matsumoto, Yukihiro},
72
+ year = {2008},
73
+ publisher = {O'Reilly Media}
74
+ }
75
+ """
76
+ And I have a page "scholar.html":
77
+ """
78
+ ---
79
+ ---
80
+ {% reference java %}
81
+ """
82
+ When I run jekyll
83
+ Then the _site directory should exist
84
+ And the "_site/scholar.html" file should exist
85
+ And I should see "not found!" in "_site/scholar.html"
86
+ And I should not see "(missing reference)" in "_site/scholar.html"
@@ -3,67 +3,67 @@ Feature: Sorting BibTeX Bibliographies
3
3
  I want to sort my bibliographies according to configurable parameters
4
4
 
5
5
  @tags @sorting
6
- Scenario: Sort By Year
6
+ Scenario: Sort By Year
7
7
  Given I have a scholar configuration with:
8
- | key | value |
9
- | sort_by | year |
10
- And I have a "_bibliography" directory
11
- And I have a file "_bibliography/references.bib":
12
- """
13
- @book{ruby1,
14
- title = {The Ruby Programming Language},
15
- author = {Flanagan, David and Matsumoto, Yukihiro},
16
- year = {2008},
17
- publisher = {O'Reilly Media}
18
- }
19
- @book{ruby2,
20
- title = {The Ruby Programming Language},
21
- author = {Flanagan, David and Matsumoto, Yukihiro},
22
- year = {2007},
23
- publisher = {O'Reilly Media}
24
- }
25
- """
26
- And I have a page "scholar.html":
27
- """
28
- ---
29
- ---
30
- {% bibliography -f references %}
31
- """
32
- When I run jekyll
33
- Then the _site directory should exist
34
- And the "_site/scholar.html" file should exist
8
+ | key | value |
9
+ | sort_by | year |
10
+ And I have a "_bibliography" directory
11
+ And I have a file "_bibliography/references.bib":
12
+ """
13
+ @book{ruby1,
14
+ title = {The Ruby Programming Language},
15
+ author = {Flanagan, David and Matsumoto, Yukihiro},
16
+ year = {2008},
17
+ publisher = {O'Reilly Media}
18
+ }
19
+ @book{ruby2,
20
+ title = {The Ruby Programming Language},
21
+ author = {Flanagan, David and Matsumoto, Yukihiro},
22
+ year = {2007},
23
+ publisher = {O'Reilly Media}
24
+ }
25
+ """
26
+ And I have a page "scholar.html":
27
+ """
28
+ ---
29
+ ---
30
+ {% bibliography -f references %}
31
+ """
32
+ When I run jekyll
33
+ Then the _site directory should exist
34
+ And the "_site/scholar.html" file should exist
35
35
  Then "2007" should come before "2008" in "_site/scholar.html"
36
36
 
37
37
  @tags @sorting
38
- Scenario: Reverse Sort Order
38
+ Scenario: Reverse Sort Order
39
39
  Given I have a scholar configuration with:
40
- | key | value |
41
- | sort_by | year |
42
- | order | descending |
43
- And I have a "_bibliography" directory
44
- And I have a file "_bibliography/references.bib":
45
- """
46
- @book{ruby1,
47
- title = {The Ruby Programming Language},
48
- author = {Flanagan, David and Matsumoto, Yukihiro},
49
- year = {2008},
50
- publisher = {O'Reilly Media}
51
- }
52
- @book{ruby2,
53
- title = {The Ruby Programming Language},
54
- author = {Flanagan, David and Matsumoto, Yukihiro},
55
- year = {2007},
56
- publisher = {O'Reilly Media}
57
- }
58
- """
59
- And I have a page "scholar.html":
60
- """
61
- ---
62
- ---
63
- {% bibliography -f references %}
64
- """
65
- When I run jekyll
66
- Then the _site directory should exist
67
- And the "_site/scholar.html" file should exist
40
+ | key | value |
41
+ | sort_by | year |
42
+ | order | descending |
43
+ And I have a "_bibliography" directory
44
+ And I have a file "_bibliography/references.bib":
45
+ """
46
+ @book{ruby1,
47
+ title = {The Ruby Programming Language},
48
+ author = {Flanagan, David and Matsumoto, Yukihiro},
49
+ year = {2008},
50
+ publisher = {O'Reilly Media}
51
+ }
52
+ @book{ruby2,
53
+ title = {The Ruby Programming Language},
54
+ author = {Flanagan, David and Matsumoto, Yukihiro},
55
+ year = {2007},
56
+ publisher = {O'Reilly Media}
57
+ }
58
+ """
59
+ And I have a page "scholar.html":
60
+ """
61
+ ---
62
+ ---
63
+ {% bibliography -f references %}
64
+ """
65
+ When I run jekyll
66
+ Then the _site directory should exist
67
+ And the "_site/scholar.html" file should exist
68
68
  Then "2008" should come before "2007" in "_site/scholar.html"
69
69
 
@@ -3,7 +3,11 @@ require 'test/unit'
3
3
 
4
4
  require 'jekyll/scholar'
5
5
 
6
- require 'debugger'
6
+ begin
7
+ require 'debugger'
8
+ rescue LoadError
9
+ # ignore
10
+ end
7
11
 
8
12
 
9
13
  World do
@@ -26,17 +26,7 @@ Gem::Specification.new do |s|
26
26
 
27
27
  s.add_runtime_dependency('jekyll', '~> 0.10')
28
28
  s.add_runtime_dependency('citeproc-ruby', '~> 0.0.6')
29
- s.add_runtime_dependency('bibtex-ruby', '~> 2.2')
30
-
31
- s.add_development_dependency('rake', "~> 0.9")
32
- s.add_development_dependency('rdoc', "~> 3.11")
33
- s.add_development_dependency('redgreen', "~> 1.2")
34
- s.add_development_dependency('shoulda', "~> 2.11")
35
- s.add_development_dependency('rr', "~> 1.0")
36
- s.add_development_dependency('cucumber', "1.1")
37
- s.add_development_dependency('RedCloth', "~> 4.2")
38
- s.add_development_dependency('rdiscount', "~> 1.6")
39
- s.add_development_dependency('redcarpet', "~> 1.9")
29
+ s.add_runtime_dependency('bibtex-ruby', '~> 2.3')
40
30
 
41
31
  s.files = `git ls-files`.split("\n")
42
32
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
@@ -1,26 +1,33 @@
1
1
  module Jekyll
2
2
  class Scholar
3
- @defaults = Hash[*%w{
3
+ @defaults = {
4
+ 'style' => 'apa',
5
+ 'locale' => 'en',
4
6
 
5
- style apa
6
- locale en
7
+ 'sort_by' => 'none',
8
+ 'order' => 'ascending',
7
9
 
8
- sort_by none
9
- order ascending
10
+ 'source' => './_bibliography',
11
+ 'bibliography' => 'references.bib',
10
12
 
11
- source ./_bibliography
12
- bibliography references.bib
13
+ 'bibtex_options' => { :strip => false },
14
+ 'bibtex_filters' => [ :latex ],
13
15
 
14
- details_dir bibliography
15
- details_layout bibtex.html
16
- details_link Details
17
-
18
- bibliography_class bibliography
19
- details_link_class details
16
+ 'details_dir' => 'bibliography',
17
+ 'details_layout' => 'bibtex.html',
18
+ 'details_link' => 'Details',
20
19
 
21
- query @*
22
-
23
- }].freeze
20
+ 'bibliography_class' => 'bibliography',
21
+ 'bibliography_template' => '%{reference}',
22
+
23
+ 'reference_tagname' => 'span',
24
+ 'missing_reference' => '(missing reference)',
25
+
26
+ 'details_link_class' => 'details',
27
+
28
+ 'query' => '@*'
29
+
30
+ }.freeze
24
31
 
25
32
  class << self
26
33
  attr_reader :defaults
@@ -25,11 +25,13 @@ module Jekyll
25
25
  data['entry']['key'] = entry.key
26
26
  data['entry']['type'] = entry.type
27
27
 
28
+ data['entry']['bibtex'] = entry.to_s
29
+
28
30
  entry.fields.each do |key, value|
31
+ value = value.convert(*bibtex_filters) unless bibtex_filters.empty?
29
32
  data['entry'][key.to_s] = value.to_s
30
33
  end
31
34
 
32
- data['entry']['bibtex'] = entry.to_s
33
35
  end
34
36
 
35
37
  end
@@ -23,8 +23,8 @@ module Jekyll
23
23
  end
24
24
  end
25
25
 
26
- references.map! do |entry|
27
- reference = reference_tag entry
26
+ bibliography = references.map.with_index { |entry, index|
27
+ reference = bibliography_tag(entry, index + 1)
28
28
 
29
29
  if generate_details?
30
30
  reference << link_to(details_link_for(entry),
@@ -32,9 +32,9 @@ module Jekyll
32
32
  end
33
33
 
34
34
  content_tag :li, reference
35
- end
35
+ }.join("\n")
36
36
 
37
- content_tag :ol, references.join("\n"), :class => config['bibliography_class']
37
+ content_tag :ol, bibliography, :class => config['bibliography_class']
38
38
  end
39
39
  end
40
40
 
@@ -40,7 +40,11 @@ module Jekyll
40
40
  end
41
41
 
42
42
  def bibtex_options
43
- @bibtex_options ||= { :filter => :latex }
43
+ config['bibtex_options'] ||= {}
44
+ end
45
+
46
+ def bibtex_filters
47
+ config['bibtex_filters'] ||= []
44
48
  end
45
49
 
46
50
  def bibtex_path
@@ -80,12 +84,37 @@ module Jekyll
80
84
  end
81
85
 
82
86
  def reference_tag(entry)
83
- return '(missing reference)' unless entry
87
+ return missing_reference unless entry
84
88
 
89
+ entry = entry.convert(*bibtex_filters) unless bibtex_filters.empty?
85
90
  reference = CiteProc.process entry.to_citeproc,
86
91
  :style => config['style'], :locale => config['locale'], :format => 'html'
87
92
 
88
- content_tag :span, reference, :id => [prefix, entry.key].compact.join('-')
93
+ content_tag reference_tagname, reference,
94
+ :id => [prefix, entry.key].compact.join('-')
95
+ end
96
+
97
+ def missing_reference
98
+ config['missing_reference']
99
+ end
100
+
101
+ def reference_tagname
102
+ config['reference_tagname'] || :span
103
+ end
104
+
105
+ def bibliography_template
106
+ config['bibliography_template'] || '%{reference}'
107
+ end
108
+
109
+ def bibliography_tag(entry, index)
110
+ return missing_reference unless entry
111
+
112
+ bibliography_template % {
113
+ :reference => reference_tag(entry),
114
+ :key => entry.key,
115
+ :type => entry.type,
116
+ :index => index
117
+ }
89
118
  end
90
119
 
91
120
  def generate_details?
@@ -113,18 +142,19 @@ module Jekyll
113
142
  end
114
143
 
115
144
  def cite(key)
116
- entry = bibliography[key]
117
-
118
145
  context['cited'] ||= []
119
146
  context['cited'] << key
120
147
 
121
148
  if bibliography.key?(key)
149
+ entry = bibliography[key]
150
+ entry = entry.convert(*bibtex_filters) unless bibtex_filters.empty?
151
+
122
152
  citation = CiteProc.process entry.to_citeproc, :style => config['style'],
123
153
  :locale => config['locale'], :format => 'html', :mode => :citation
124
154
 
125
155
  link_to "##{[prefix, entry.key].compact.join('-')}", citation.join
126
156
  else
127
- '(missing reference)'
157
+ missing_reference
128
158
  end
129
159
  rescue
130
160
  "(#{key})"
@@ -134,7 +164,7 @@ module Jekyll
134
164
  if bibliography.key?(key)
135
165
  link_to details_link_for(bibliography[key]), text || config['details_link']
136
166
  else
137
- '(missing reference)'
167
+ missing_reference
138
168
  end
139
169
  end
140
170
 
@@ -1,5 +1,5 @@
1
1
  module Jekyll
2
2
  class Scholar
3
- VERSION = '1.0.0'.freeze
3
+ VERSION = '1.1.0'.freeze
4
4
  end
5
5
  end