jekyll 1.0.4 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of jekyll might be problematic. Click here for more details.
- checksums.yaml +14 -6
- data/{CONTRIBUTING.md → CONTRIBUTING.markdown} +19 -1
- data/History.markdown +172 -85
- data/README.markdown +45 -0
- data/Rakefile +43 -18
- data/bin/jekyll +31 -1
- data/features/create_sites.feature +18 -0
- data/features/include_tag.feature +35 -0
- data/features/pagination.feature +28 -0
- data/features/post_excerpts.feature +50 -0
- data/features/step_definitions/jekyll_steps.rb +27 -11
- data/features/support/env.rb +9 -0
- data/jekyll.gemspec +32 -7
- data/lib/jekyll.rb +2 -1
- data/lib/jekyll/commands/new.rb +15 -3
- data/lib/jekyll/configuration.rb +23 -22
- data/lib/jekyll/converters/markdown/kramdown_parser.rb +4 -15
- data/lib/jekyll/convertible.rb +4 -0
- data/lib/jekyll/core_ext.rb +11 -0
- data/lib/jekyll/excerpt.rb +113 -0
- data/lib/jekyll/generators/pagination.rb +93 -23
- data/lib/jekyll/page.rb +1 -3
- data/lib/jekyll/post.rb +15 -55
- data/lib/jekyll/related_posts.rb +2 -1
- data/lib/jekyll/site.rb +33 -41
- data/lib/jekyll/stevenson.rb +25 -4
- data/lib/jekyll/tags/include.rb +46 -2
- data/lib/site_template/_config.yml +1 -0
- data/lib/site_template/css/main.css +0 -5
- data/site/_config.yml +1 -0
- data/site/_includes/docs_contents.html +12 -3
- data/site/_includes/docs_contents_mobile.html +7 -1
- data/site/_includes/news_contents.html +23 -0
- data/site/_includes/news_contents_mobile.html +11 -0
- data/site/_includes/news_item.html +24 -0
- data/site/_includes/primary-nav-items.html +4 -1
- data/site/_includes/top.html +2 -0
- data/site/_layouts/news.html +19 -0
- data/site/_layouts/news_item.html +27 -0
- data/site/_posts/2013-05-06-jekyll-1-0-0-released.markdown +23 -0
- data/site/_posts/2013-05-08-jekyll-1-0-1-released.markdown +27 -0
- data/site/_posts/2013-05-12-jekyll-1-0-2-released.markdown +28 -0
- data/site/_posts/2013-06-07-jekyll-1-0-3-released.markdown +25 -0
- data/site/_posts/2013-07-14-jekyll-1-1-0-released.markdown +27 -0
- data/site/_posts/2013-07-24-jekyll-1-1-1-released.markdown +31 -0
- data/site/css/style.css +125 -17
- data/site/docs/configuration.md +10 -1
- data/site/docs/contributing.md +21 -3
- data/site/docs/deployment-methods.md +2 -2
- data/site/docs/drafts.md +20 -0
- data/site/docs/extras.md +24 -3
- data/site/docs/github-pages.md +25 -0
- data/site/docs/history.md +150 -85
- data/site/docs/index.md +1 -17
- data/site/docs/installation.md +3 -2
- data/site/docs/migrations.md +2 -2
- data/site/docs/pagination.md +12 -0
- data/site/docs/plugins.md +97 -76
- data/site/docs/quickstart.md +32 -0
- data/site/docs/resources.md +0 -1
- data/site/docs/structure.md +15 -0
- data/site/docs/templates.md +26 -4
- data/site/docs/troubleshooting.md +22 -7
- data/site/docs/upgrading.md +6 -1
- data/site/docs/variables.md +12 -2
- data/site/feed.xml +36 -0
- data/site/freenode.txt +1 -0
- data/site/img/article-footer.png +0 -0
- data/site/img/footer-arrow.png +0 -0
- data/site/img/footer-logo.png +0 -0
- data/site/img/logo-2x.png +0 -0
- data/site/img/octojekyll.png +0 -0
- data/site/img/tube.png +0 -0
- data/site/img/tube1x.png +0 -0
- data/site/index.html +1 -1
- data/site/news/index.md +10 -0
- data/site/news/releases/index.md +10 -0
- data/test/source/+/foo.md +7 -0
- data/test/source/_includes/params.html +7 -0
- data/test/source/_posts/2013-07-22-post-excerpt-with-layout.markdown +23 -0
- data/test/test_configuration.rb +9 -0
- data/test/test_excerpt.rb +62 -0
- data/test/test_generated_site.rb +1 -1
- data/test/test_page.rb +9 -0
- data/test/test_pager.rb +31 -37
- data/test/test_post.rb +2 -1
- data/test/test_related_posts.rb +6 -1
- data/test/test_tags.rb +90 -0
- metadata +62 -23
- data/README.textile +0 -45
data/Rakefile
CHANGED
@@ -2,6 +2,7 @@ require 'rubygems'
|
|
2
2
|
require 'rake'
|
3
3
|
require 'rdoc'
|
4
4
|
require 'date'
|
5
|
+
require 'yaml'
|
5
6
|
|
6
7
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), *%w[lib]))
|
7
8
|
|
@@ -44,6 +45,39 @@ def replace_header(head, header_name)
|
|
44
45
|
head.sub!(/(\.#{header_name}\s*= ').*'/) { "#{$1}#{send(header_name)}'"}
|
45
46
|
end
|
46
47
|
|
48
|
+
def normalize_bullets(markdown)
|
49
|
+
markdown.gsub(/\s{2}\*{1}/, "-")
|
50
|
+
end
|
51
|
+
|
52
|
+
def linkify_prs(markdown)
|
53
|
+
markdown.gsub(/#(\d+)/) do |word|
|
54
|
+
"[#{word}](https://github.com/mojombo/jekyll/issues/#{word.delete("#")})"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def linkify_users(markdown)
|
59
|
+
markdown.gsub(/(@\w+)/) do |username|
|
60
|
+
"[#{username}](https://github.com/#{username.delete("@")})"
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def linkify(markdown)
|
65
|
+
linkify_users(linkify_prs(markdown))
|
66
|
+
end
|
67
|
+
|
68
|
+
def liquid_escape(markdown)
|
69
|
+
markdown.gsub(/(`{[{%].+[}%]}`)/, "{% raw %}\\1{% endraw %}")
|
70
|
+
end
|
71
|
+
|
72
|
+
def remove_head_from_history(markdown)
|
73
|
+
index = markdown =~ /^##\s+\d+\.\d+\.\d+/
|
74
|
+
markdown[index..-1]
|
75
|
+
end
|
76
|
+
|
77
|
+
def converted_history(markdown)
|
78
|
+
remove_head_from_history(liquid_escape(linkify(normalize_bullets(markdown))))
|
79
|
+
end
|
80
|
+
|
47
81
|
#############################################################################
|
48
82
|
#
|
49
83
|
# Standard tasks
|
@@ -150,32 +184,23 @@ namespace :site do
|
|
150
184
|
|
151
185
|
desc "Create a nicely formatted history page for the jekyll site based on the repo history."
|
152
186
|
task :history do
|
153
|
-
# First lets go ahead and format the file correctly (mainly bullet points)
|
154
|
-
puts "Generating the History doc"
|
155
|
-
# Checking to make sure the History file exists in the root of the repo
|
156
187
|
if File.exist?("History.markdown")
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
"
|
163
|
-
|
164
|
-
# Create a hash for the front matter that is to be included
|
165
|
-
front_matter = {"layout" => "docs", "title" => "History",
|
166
|
-
"permalink" => "/docs/history/",
|
167
|
-
"prev_section" => "upgrading"}
|
168
|
-
# Finally we need to copy the file to the /history directory
|
188
|
+
history_file = File.read("History.markdown")
|
189
|
+
front_matter = {
|
190
|
+
"layout" => "docs",
|
191
|
+
"title" => "History",
|
192
|
+
"permalink" => "/docs/history/",
|
193
|
+
"prev_section" => "contributing"
|
194
|
+
}
|
169
195
|
Dir.chdir('site/docs/') do
|
170
196
|
File.open("history.md", "w") do |file|
|
171
197
|
file.write("#{front_matter.to_yaml}---\n\n")
|
172
|
-
file.write(
|
198
|
+
file.write(converted_history(history_file))
|
173
199
|
end
|
174
200
|
end
|
175
201
|
else
|
176
|
-
|
202
|
+
abort "You seem to have misplaced your History.markdown file. I can haz?"
|
177
203
|
end
|
178
|
-
puts "Done"
|
179
204
|
end
|
180
205
|
end
|
181
206
|
|
data/bin/jekyll
CHANGED
@@ -12,7 +12,7 @@ program :name, 'jekyll'
|
|
12
12
|
program :version, Jekyll::VERSION
|
13
13
|
program :description, 'Jekyll is a blog-aware, static site generator in Ruby'
|
14
14
|
|
15
|
-
default_command :
|
15
|
+
default_command :default
|
16
16
|
|
17
17
|
global_option '-s', '--source [DIR]', 'Source directory (defaults to ./)'
|
18
18
|
global_option '-d', '--destination [DIR]', 'Destination directory (defaults to ./_site)'
|
@@ -33,11 +33,22 @@ def normalize_options(options)
|
|
33
33
|
options
|
34
34
|
end
|
35
35
|
|
36
|
+
command :default do |c|
|
37
|
+
c.action do |args, options|
|
38
|
+
if args.empty?
|
39
|
+
command(:help).run
|
40
|
+
else
|
41
|
+
Jekyll.logger.abort_with "Invalid command. Use --help for more information"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
36
46
|
command :new do |c|
|
37
47
|
c.syntax = 'jekyll new PATH'
|
38
48
|
c.description = 'Creates a new Jekyll site scaffold in PATH'
|
39
49
|
|
40
50
|
c.option '--force', 'Force creation even if PATH already exists'
|
51
|
+
c.option '--blank', 'Creates scaffolding but with empty files'
|
41
52
|
|
42
53
|
c.action do |args, options|
|
43
54
|
Jekyll::Commands::New.process(args, options.__hash__)
|
@@ -102,6 +113,25 @@ command :doctor do |c|
|
|
102
113
|
end
|
103
114
|
alias_command :hyde, :doctor
|
104
115
|
|
116
|
+
command :docs do |c|
|
117
|
+
c.syntax = 'jekyll docs'
|
118
|
+
c.description = "Launch local server with docs for Jekyll v#{Jekyll::VERSION}"
|
119
|
+
|
120
|
+
c.option '-p', '--port [PORT]', 'Port to listen on'
|
121
|
+
c.option '-u', '--host [HOST]', 'Host to bind to'
|
122
|
+
|
123
|
+
c.action do |args, options|
|
124
|
+
options = normalize_options(options.__hash__)
|
125
|
+
options = Jekyll.configuration(options).merge({
|
126
|
+
'source' => File.expand_path("../site", File.dirname(__FILE__)),
|
127
|
+
'destination' => File.expand_path("../site/_site", File.dirname(__FILE__))
|
128
|
+
})
|
129
|
+
puts options
|
130
|
+
Jekyll::Commands::Build.process(options)
|
131
|
+
Jekyll::Commands::Serve.process(options)
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
105
135
|
command :import do |c|
|
106
136
|
c.syntax = 'jekyll import <platform> [options]'
|
107
137
|
c.description = 'Import your old blog to Jekyll'
|
@@ -3,6 +3,13 @@ Feature: Create sites
|
|
3
3
|
I want to be able to make a static site
|
4
4
|
In order to share my awesome ideas with the interwebs
|
5
5
|
|
6
|
+
Scenario: Blank site
|
7
|
+
Given I do not have a "test_blank" directory
|
8
|
+
When I call jekyll new with test_blank --blank
|
9
|
+
Then the test_blank/_layouts directory should exist
|
10
|
+
And the test_blank/_posts directory should exist
|
11
|
+
And the "test_blank/index.html" file should exist
|
12
|
+
|
6
13
|
Scenario: Basic site
|
7
14
|
Given I have an "index.html" file that contains "Basic Site"
|
8
15
|
When I run jekyll
|
@@ -110,3 +117,14 @@ Feature: Create sites
|
|
110
117
|
When I run jekyll
|
111
118
|
Then the _site directory should exist
|
112
119
|
And I should see "SomeDirective" in "_site/.htaccess"
|
120
|
+
|
121
|
+
Scenario: File was replaced by a directory
|
122
|
+
Given I have a "test" file that contains "some stuff"
|
123
|
+
When I run jekyll
|
124
|
+
Then the _site directory should exist
|
125
|
+
When I delete the file "test"
|
126
|
+
Given I have a test directory
|
127
|
+
And I have a "test/index.html" file that contains "some other stuff"
|
128
|
+
When I run jekyll
|
129
|
+
Then the _site/test directory should exist
|
130
|
+
And I should see "some other stuff" in "_site/test/index.html"
|
@@ -0,0 +1,35 @@
|
|
1
|
+
Feature: Include tags
|
2
|
+
In order to share their content across several pages
|
3
|
+
As a hacker who likes to blog
|
4
|
+
I want to be able to include files in my blog posts
|
5
|
+
|
6
|
+
Scenario: Include a file with parameters
|
7
|
+
Given I have an _includes directory
|
8
|
+
And I have an "_includes/header.html" file that contains "<header>My awesome blog header: {{include.param}}</header>"
|
9
|
+
And I have an "_includes/params.html" file that contains "Parameters:<ul>{% for param in include %}<li>{{param[0]}} = {{param[1]}}</li>{% endfor %}</ul>"
|
10
|
+
And I have an "_includes/ignore.html" file that contains "<footer>My blog footer</footer>"
|
11
|
+
And I have a _posts directory
|
12
|
+
And I have the following post:
|
13
|
+
| title | date | layout | content |
|
14
|
+
| Include Files | 2013-03-21 | default | {% include header.html param="myparam" %} |
|
15
|
+
| Ignore params if unused | 2013-03-21 | default | {% include ignore.html date="today" %} |
|
16
|
+
| List multiple parameters | 2013-03-21 | default | {% include params.html date="today" start="tomorrow" %} |
|
17
|
+
| Dont keep parameters | 2013-03-21 | default | {% include ignore.html param="test" %}\n{% include header.html %} |
|
18
|
+
| Allow params with spaces and quotes | 2013-04-07 | default | {% include params.html cool="param with spaces" super="\"quoted\"" single='has "quotes"' escaped='\'single\' quotes' %} |
|
19
|
+
| Parameter syntax | 2013-04-12 | default | {% include params.html param1_or_2="value" %} |
|
20
|
+
| Pass a variable | 2013-06-22 | default | {% assign var = 'some text' %}{% include params.html local=var layout=page.layout %} |
|
21
|
+
When I run jekyll
|
22
|
+
Then the _site directory should exist
|
23
|
+
And I should see "<header>My awesome blog header: myparam</header>" in "_site/2013/03/21/include-files.html"
|
24
|
+
And I should not see "myparam" in "_site/2013/03/21/ignore-params-if-unused.html"
|
25
|
+
And I should see "<li>date = today</li>" in "_site/2013/03/21/list-multiple-parameters.html"
|
26
|
+
And I should see "<li>start = tomorrow</li>" in "_site/2013/03/21/list-multiple-parameters.html"
|
27
|
+
And I should not see "<header>My awesome blog header: myparam</header>" in "_site/2013/03/21/dont-keep-parameters.html"
|
28
|
+
But I should see "<header>My awesome blog header: </header>" in "_site/2013/03/21/dont-keep-parameters.html"
|
29
|
+
And I should see "<li>cool = param with spaces</li>" in "_site/2013/04/07/allow-params-with-spaces-and-quotes.html"
|
30
|
+
And I should see "<li>super = “quoted”</li>" in "_site/2013/04/07/allow-params-with-spaces-and-quotes.html"
|
31
|
+
And I should see "<li>single = has “quotes”</li>" in "_site/2013/04/07/allow-params-with-spaces-and-quotes.html"
|
32
|
+
And I should see "<li>escaped = ‘single’ quotes</li>" in "_site/2013/04/07/allow-params-with-spaces-and-quotes.html"
|
33
|
+
And I should see "<li>param1_or_2 = value</li>" in "_site/2013/04/12/parameter-syntax.html"
|
34
|
+
And I should see "<li>local = some text</li>" in "_site/2013/06/22/pass-a-variable.html"
|
35
|
+
And I should see "<li>layout = default</li>" in "_site/2013/06/22/pass-a-variable.html"
|
data/features/pagination.feature
CHANGED
@@ -52,3 +52,31 @@ Feature: Site pagination
|
|
52
52
|
| 2 | 1 | 5 |
|
53
53
|
| 3 | 1 | 6 |
|
54
54
|
| 4 | 1 | 7 |
|
55
|
+
|
56
|
+
Scenario Outline: Setting a custom pagination path without an index.html in it
|
57
|
+
Given I have a configuration file with:
|
58
|
+
| key | value |
|
59
|
+
| paginate | 1 |
|
60
|
+
| paginate_path | /blog/page/:num |
|
61
|
+
| permalink | /blog/:year/:month/:day/:title |
|
62
|
+
And I have a blog directory
|
63
|
+
And I have an "blog/index.html" page that contains "{{ paginator.posts.size }}"
|
64
|
+
And I have an "index.html" page that contains "Don't pick me!"
|
65
|
+
And I have a _posts directory
|
66
|
+
And I have the following posts:
|
67
|
+
| title | date | layout | content |
|
68
|
+
| Wargames | 2009-03-27 | default | The only winning move is not to play. |
|
69
|
+
| Wargames2 | 2009-04-27 | default | The only winning move is not to play2. |
|
70
|
+
| Wargames3 | 2009-05-27 | default | The only winning move is not to play3. |
|
71
|
+
| Wargames4 | 2009-06-27 | default | The only winning move is not to play4. |
|
72
|
+
When I run jekyll
|
73
|
+
Then the _site/blog/page/<exist> directory should exist
|
74
|
+
And the "_site/blog/page/<exist>/index.html" file should exist
|
75
|
+
And I should see "<posts>" in "_site/blog/page/<exist>/index.html"
|
76
|
+
And the "_site/blog/page/<not_exist>/index.html" file should not exist
|
77
|
+
|
78
|
+
Examples:
|
79
|
+
| exist | posts | not_exist |
|
80
|
+
| 2 | 1 | 5 |
|
81
|
+
| 3 | 1 | 6 |
|
82
|
+
| 4 | 1 | 7 |
|
@@ -0,0 +1,50 @@
|
|
1
|
+
Feature: Post excerpts
|
2
|
+
As a hacker who likes to blog
|
3
|
+
I want to be able to make a static site
|
4
|
+
In order to share my awesome ideas with the interwebs
|
5
|
+
But some people can only focus for a few moments
|
6
|
+
So just give them a taste
|
7
|
+
|
8
|
+
Scenario: An excerpt without a layout
|
9
|
+
Given I have an "index.html" page that contains "{% for post in site.posts %}{{ post.excerpt }}{% endfor %}"
|
10
|
+
And I have a _posts directory
|
11
|
+
And I have the following posts:
|
12
|
+
| title | date | layout | content |
|
13
|
+
| entry1 | 2007-12-31 | post | content for entry1. |
|
14
|
+
When I run jekyll
|
15
|
+
Then the _site directory should exist
|
16
|
+
And I should see exactly "<p>content for entry1.</p>" in "_site/index.html"
|
17
|
+
|
18
|
+
Scenario: An excerpt from a post with a layout
|
19
|
+
Given I have an "index.html" page that contains "{% for post in site.posts %}{{ post.excerpt }}{% endfor %}"
|
20
|
+
And I have a _posts directory
|
21
|
+
And I have a _layouts directory
|
22
|
+
And I have a post layout that contains "{{ page.excerpt }}"
|
23
|
+
And I have the following posts:
|
24
|
+
| title | date | layout | content |
|
25
|
+
| entry1 | 2007-12-31 | post | content for entry1. |
|
26
|
+
When I run jekyll
|
27
|
+
Then the _site directory should exist
|
28
|
+
And the _site/2007 directory should exist
|
29
|
+
And the _site/2007/12 directory should exist
|
30
|
+
And the _site/2007/12/31 directory should exist
|
31
|
+
And the "_site/2007/12/31/entry1.html" file should exist
|
32
|
+
And I should see exactly "<p>content for entry1.</p>" in "_site/2007/12/31/entry1.html"
|
33
|
+
And I should see exactly "<p>content for entry1.</p>" in "_site/index.html"
|
34
|
+
|
35
|
+
Scenario: An excerpt from a post with a layout which has context
|
36
|
+
Given I have an "index.html" page that contains "{% for post in site.posts %}{{ post.excerpt }}{% endfor %}"
|
37
|
+
And I have a _posts directory
|
38
|
+
And I have a _layouts directory
|
39
|
+
And I have a post layout that contains "<html><head></head><body>{{ page.excerpt }}</body></html>"
|
40
|
+
And I have the following posts:
|
41
|
+
| title | date | layout | content |
|
42
|
+
| entry1 | 2007-12-31 | post | content for entry1. |
|
43
|
+
When I run jekyll
|
44
|
+
Then the _site directory should exist
|
45
|
+
And the _site/2007 directory should exist
|
46
|
+
And the _site/2007/12 directory should exist
|
47
|
+
And the _site/2007/12/31 directory should exist
|
48
|
+
And the "_site/2007/12/31/entry1.html" file should exist
|
49
|
+
And I should see exactly "<p>content for entry1.</p>" in "_site/index.html"
|
50
|
+
And I should see exactly "<html><head></head><body><p>content for entry1.</p></body></html>" in "_site/2007/12/31/entry1.html"
|
@@ -4,15 +4,16 @@ Before do
|
|
4
4
|
Dir.chdir(TEST_DIR)
|
5
5
|
end
|
6
6
|
|
7
|
-
|
8
|
-
Dir.chdir(File.expand_path("..", TEST_DIR))
|
9
|
-
FileUtils.rm_rf(TEST_DIR)
|
10
|
-
end
|
7
|
+
World(Test::Unit::Assertions)
|
11
8
|
|
12
9
|
Given /^I have a blank site in "(.*)"$/ do |path|
|
13
10
|
FileUtils.mkdir(path)
|
14
11
|
end
|
15
12
|
|
13
|
+
Given /^I do not have a "(.*)" directory$/ do |path|
|
14
|
+
File.directory?("#{TEST_DIR}/#{path}")
|
15
|
+
end
|
16
|
+
|
16
17
|
# Like "I have a foo file" but gives a yaml front matter so jekyll actually processes it
|
17
18
|
Given /^I have an? "(.*)" page(?: with (.*) "(.*)")? that contains "(.*)"$/ do |file, key, value, text|
|
18
19
|
File.open(file, 'w') do |f|
|
@@ -31,14 +32,13 @@ Given /^I have an? "(.*)" file that contains "(.*)"$/ do |file, text|
|
|
31
32
|
end
|
32
33
|
end
|
33
34
|
|
34
|
-
Given /^I have
|
35
|
-
|
36
|
-
|
35
|
+
Given /^I have an? (.*) (layout|theme) that contains "(.*)"$/ do |name, type, text|
|
36
|
+
folder = if type == 'layout'
|
37
|
+
'_layouts'
|
38
|
+
else
|
39
|
+
'_theme'
|
37
40
|
end
|
38
|
-
|
39
|
-
|
40
|
-
Given /^I have a (.*) theme that contains "(.*)"$/ do |layout, text|
|
41
|
-
File.open(File.join('_theme', layout + '.html'), 'w') do |f|
|
41
|
+
File.open(File.join(folder, name + '.html'), 'w') do |f|
|
42
42
|
f.write(text)
|
43
43
|
end
|
44
44
|
end
|
@@ -119,6 +119,10 @@ When /^I run jekyll with drafts$/ do
|
|
119
119
|
run_jekyll(:drafts => true)
|
120
120
|
end
|
121
121
|
|
122
|
+
When /^I call jekyll new with test_blank --blank$/ do
|
123
|
+
call_jekyll_new(:path => "test_blank", :blank => true)
|
124
|
+
end
|
125
|
+
|
122
126
|
When /^I debug jekyll$/ do
|
123
127
|
run_jekyll(:debug => true)
|
124
128
|
end
|
@@ -129,6 +133,10 @@ When /^I change "(.*)" to contain "(.*)"$/ do |file, text|
|
|
129
133
|
end
|
130
134
|
end
|
131
135
|
|
136
|
+
When /^I delete the file "(.*)"$/ do |file|
|
137
|
+
File.delete(file)
|
138
|
+
end
|
139
|
+
|
132
140
|
Then /^the (.*) directory should exist$/ do |dir|
|
133
141
|
assert File.directory?(dir), "The directory \"#{dir}\" does not exist"
|
134
142
|
end
|
@@ -137,6 +145,14 @@ Then /^I should see "(.*)" in "(.*)"$/ do |text, file|
|
|
137
145
|
assert Regexp.new(text).match(File.open(file).readlines.join)
|
138
146
|
end
|
139
147
|
|
148
|
+
Then /^I should see exactly "(.*)" in "(.*)"$/ do |text, file|
|
149
|
+
assert_equal text, File.open(file).readlines.join.strip
|
150
|
+
end
|
151
|
+
|
152
|
+
Then /^I should not see "(.*)" in "(.*)"$/ do |text, file|
|
153
|
+
assert_no_match Regexp.new(text), File.read(file)
|
154
|
+
end
|
155
|
+
|
140
156
|
Then /^I should see escaped "(.*)" in "(.*)"$/ do |text, file|
|
141
157
|
assert Regexp.new(Regexp.escape(text)).match(File.open(file).readlines.join)
|
142
158
|
end
|
data/features/support/env.rb
CHANGED
@@ -14,6 +14,15 @@ def run_jekyll(opts = {})
|
|
14
14
|
system command
|
15
15
|
end
|
16
16
|
|
17
|
+
def call_jekyll_new(opts = {})
|
18
|
+
command = JEKYLL_PATH.clone
|
19
|
+
command << " new"
|
20
|
+
command << " #{opts[:path]}" if opts[:path]
|
21
|
+
command << " --blank" if opts[:blank]
|
22
|
+
command << " >> /dev/null 2>&1" if opts[:debug].nil?
|
23
|
+
system command
|
24
|
+
end
|
25
|
+
|
17
26
|
def slug(title)
|
18
27
|
title.downcase.gsub(/[^\w]/, " ").strip.gsub(/\s+/, '-')
|
19
28
|
end
|
data/jekyll.gemspec
CHANGED
@@ -4,9 +4,9 @@ Gem::Specification.new do |s|
|
|
4
4
|
s.rubygems_version = '1.3.5'
|
5
5
|
|
6
6
|
s.name = 'jekyll'
|
7
|
-
s.version = '1.
|
7
|
+
s.version = '1.1.1'
|
8
8
|
s.license = 'MIT'
|
9
|
-
s.date = '2013-07-
|
9
|
+
s.date = '2013-07-24'
|
10
10
|
s.rubyforge_project = 'jekyll'
|
11
11
|
|
12
12
|
s.summary = "A simple, blog aware, static site generator."
|
@@ -21,9 +21,9 @@ Gem::Specification.new do |s|
|
|
21
21
|
s.executables = ["jekyll"]
|
22
22
|
|
23
23
|
s.rdoc_options = ["--charset=UTF-8"]
|
24
|
-
s.extra_rdoc_files = %w[README.
|
24
|
+
s.extra_rdoc_files = %w[README.markdown LICENSE]
|
25
25
|
|
26
|
-
s.add_runtime_dependency('liquid', "~> 2.
|
26
|
+
s.add_runtime_dependency('liquid', "~> 2.3")
|
27
27
|
s.add_runtime_dependency('classifier', "~> 1.3")
|
28
28
|
s.add_runtime_dependency('directory_watcher', "~> 1.4.1")
|
29
29
|
s.add_runtime_dependency('maruku', "~> 0.5")
|
@@ -32,6 +32,7 @@ Gem::Specification.new do |s|
|
|
32
32
|
s.add_runtime_dependency('commander', "~> 4.1.3")
|
33
33
|
s.add_runtime_dependency('safe_yaml', "~> 0.7.0")
|
34
34
|
s.add_runtime_dependency('colorator', "~> 0.1")
|
35
|
+
s.add_runtime_dependency('redcarpet', "~> 2.2.2")
|
35
36
|
|
36
37
|
s.add_development_dependency('rake', "~> 10.0.3")
|
37
38
|
s.add_development_dependency('rdoc', "~> 3.11")
|
@@ -41,28 +42,30 @@ Gem::Specification.new do |s|
|
|
41
42
|
s.add_development_dependency('cucumber', "~> 1.2.1", '!= 1.2.4')
|
42
43
|
s.add_development_dependency('RedCloth', "~> 4.2")
|
43
44
|
s.add_development_dependency('rdiscount', "~> 1.6")
|
44
|
-
s.add_development_dependency('redcarpet', "~> 2.2.2")
|
45
45
|
s.add_development_dependency('launchy', "~> 2.1.2")
|
46
46
|
s.add_development_dependency('simplecov', "~> 0.7")
|
47
47
|
s.add_development_dependency('simplecov-gem-adapter', "~> 1.0.1")
|
48
|
+
s.add_development_dependency('activesupport', '~> 3.2.13')
|
48
49
|
|
49
50
|
# = MANIFEST =
|
50
51
|
s.files = %w[
|
51
|
-
CONTRIBUTING.
|
52
|
+
CONTRIBUTING.markdown
|
52
53
|
Gemfile
|
53
54
|
History.markdown
|
54
55
|
LICENSE
|
55
|
-
README.
|
56
|
+
README.markdown
|
56
57
|
Rakefile
|
57
58
|
bin/jekyll
|
58
59
|
cucumber.yml
|
59
60
|
features/create_sites.feature
|
60
61
|
features/drafts.feature
|
61
62
|
features/embed_filters.feature
|
63
|
+
features/include_tag.feature
|
62
64
|
features/markdown.feature
|
63
65
|
features/pagination.feature
|
64
66
|
features/permalinks.feature
|
65
67
|
features/post_data.feature
|
68
|
+
features/post_excerpts.feature
|
66
69
|
features/site_configuration.feature
|
67
70
|
features/site_data.feature
|
68
71
|
features/step_definitions/jekyll_steps.rb
|
@@ -88,6 +91,7 @@ Gem::Specification.new do |s|
|
|
88
91
|
lib/jekyll/deprecator.rb
|
89
92
|
lib/jekyll/draft.rb
|
90
93
|
lib/jekyll/errors.rb
|
94
|
+
lib/jekyll/excerpt.rb
|
91
95
|
lib/jekyll/filters.rb
|
92
96
|
lib/jekyll/generator.rb
|
93
97
|
lib/jekyll/generators/pagination.rb
|
@@ -122,11 +126,22 @@ Gem::Specification.new do |s|
|
|
122
126
|
site/_includes/docs_contents_mobile.html
|
123
127
|
site/_includes/footer.html
|
124
128
|
site/_includes/header.html
|
129
|
+
site/_includes/news_contents.html
|
130
|
+
site/_includes/news_contents_mobile.html
|
131
|
+
site/_includes/news_item.html
|
125
132
|
site/_includes/primary-nav-items.html
|
126
133
|
site/_includes/section_nav.html
|
127
134
|
site/_includes/top.html
|
128
135
|
site/_layouts/default.html
|
129
136
|
site/_layouts/docs.html
|
137
|
+
site/_layouts/news.html
|
138
|
+
site/_layouts/news_item.html
|
139
|
+
site/_posts/2013-05-06-jekyll-1-0-0-released.markdown
|
140
|
+
site/_posts/2013-05-08-jekyll-1-0-1-released.markdown
|
141
|
+
site/_posts/2013-05-12-jekyll-1-0-2-released.markdown
|
142
|
+
site/_posts/2013-06-07-jekyll-1-0-3-released.markdown
|
143
|
+
site/_posts/2013-07-14-jekyll-1-1-0-released.markdown
|
144
|
+
site/_posts/2013-07-24-jekyll-1-1-1-released.markdown
|
130
145
|
site/css/gridism.css
|
131
146
|
site/css/normalize.css
|
132
147
|
site/css/pygments.css
|
@@ -134,6 +149,7 @@ Gem::Specification.new do |s|
|
|
134
149
|
site/docs/configuration.md
|
135
150
|
site/docs/contributing.md
|
136
151
|
site/docs/deployment-methods.md
|
152
|
+
site/docs/drafts.md
|
137
153
|
site/docs/extras.md
|
138
154
|
site/docs/frontmatter.md
|
139
155
|
site/docs/github-pages.md
|
@@ -147,6 +163,7 @@ Gem::Specification.new do |s|
|
|
147
163
|
site/docs/permalinks.md
|
148
164
|
site/docs/plugins.md
|
149
165
|
site/docs/posts.md
|
166
|
+
site/docs/quickstart.md
|
150
167
|
site/docs/resources.md
|
151
168
|
site/docs/sites.md
|
152
169
|
site/docs/structure.md
|
@@ -156,6 +173,8 @@ Gem::Specification.new do |s|
|
|
156
173
|
site/docs/usage.md
|
157
174
|
site/docs/variables.md
|
158
175
|
site/favicon.png
|
176
|
+
site/feed.xml
|
177
|
+
site/freenode.txt
|
159
178
|
site/img/article-footer.png
|
160
179
|
site/img/footer-arrow.png
|
161
180
|
site/img/footer-logo.png
|
@@ -165,13 +184,17 @@ Gem::Specification.new do |s|
|
|
165
184
|
site/img/tube1x.png
|
166
185
|
site/index.html
|
167
186
|
site/js/modernizr-2.5.3.min.js
|
187
|
+
site/news/index.md
|
188
|
+
site/news/releases/index.md
|
168
189
|
test/fixtures/broken_front_matter1.erb
|
169
190
|
test/fixtures/broken_front_matter2.erb
|
170
191
|
test/fixtures/broken_front_matter3.erb
|
171
192
|
test/fixtures/exploit_front_matter.erb
|
172
193
|
test/fixtures/front_matter.erb
|
173
194
|
test/helper.rb
|
195
|
+
test/source/+/foo.md
|
174
196
|
test/source/.htaccess
|
197
|
+
test/source/_includes/params.html
|
175
198
|
test/source/_includes/sig.markdown
|
176
199
|
test/source/_layouts/default.html
|
177
200
|
test/source/_layouts/simple.html
|
@@ -207,6 +230,7 @@ Gem::Specification.new do |s|
|
|
207
230
|
test/source/_posts/2013-03-19-not-a-post.markdown/.gitkeep
|
208
231
|
test/source/_posts/2013-04-11-custom-excerpt.markdown
|
209
232
|
test/source/_posts/2013-05-10-number-category.textile
|
233
|
+
test/source/_posts/2013-07-22-post-excerpt-with-layout.markdown
|
210
234
|
test/source/_posts/es/2008-11-21-nested.textile
|
211
235
|
test/source/about.html
|
212
236
|
test/source/category/_posts/2008-9-23-categories.textile
|
@@ -227,6 +251,7 @@ Gem::Specification.new do |s|
|
|
227
251
|
test/test_configuration.rb
|
228
252
|
test/test_convertible.rb
|
229
253
|
test/test_core_ext.rb
|
254
|
+
test/test_excerpt.rb
|
230
255
|
test/test_filters.rb
|
231
256
|
test/test_generated_site.rb
|
232
257
|
test/test_kramdown.rb
|