monad 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/CONTRIBUTING.markdown +91 -0
- data/Gemfile +1 -1
- data/History.markdown +772 -0
- data/{README.md → README.markdown} +5 -2
- data/Rakefile +163 -1
- data/bin/monad +86 -30
- data/features/create_sites.feature +54 -25
- data/features/data.feature +65 -0
- data/features/data_sources.feature +10 -10
- data/features/drafts.feature +5 -5
- data/features/embed_filters.feature +10 -10
- data/features/include_tag.feature +48 -0
- data/features/markdown.feature +5 -5
- data/features/pagination.feature +38 -10
- data/features/permalinks.feature +31 -11
- data/features/post_data.feature +41 -41
- data/features/post_excerpts.feature +50 -0
- data/features/site_configuration.feature +47 -26
- data/features/site_data.feature +30 -24
- data/features/step_definitions/{monad_steps.rb → jekyll_steps.rb} +66 -52
- data/features/support/env.rb +27 -8
- data/lib/jekyll.rb +99 -0
- data/lib/jekyll/cleaner.rb +73 -0
- data/lib/{monad → jekyll}/command.rb +6 -6
- data/lib/{monad → jekyll}/commands/build.rb +9 -9
- data/lib/jekyll/commands/doctor.rb +67 -0
- data/lib/jekyll/commands/new.rb +67 -0
- data/lib/jekyll/commands/serve.rb +65 -0
- data/lib/{monad → jekyll}/configuration.rb +60 -18
- data/lib/{monad → jekyll}/converter.rb +1 -1
- data/lib/{monad → jekyll}/converters/identity.rb +1 -1
- data/lib/{monad → jekyll}/converters/markdown.rb +2 -2
- data/lib/jekyll/converters/markdown/kramdown_parser.rb +29 -0
- data/lib/{monad → jekyll}/converters/markdown/maruku_parser.rb +12 -8
- data/lib/{monad → jekyll}/converters/markdown/rdiscount_parser.rb +4 -2
- data/lib/{monad → jekyll}/converters/markdown/redcarpet_parser.rb +1 -1
- data/lib/{monad → jekyll}/converters/textile.rb +1 -1
- data/lib/{monad → jekyll}/convertible.rb +39 -17
- data/lib/{monad → jekyll}/core_ext.rb +22 -4
- data/lib/jekyll/deprecator.rb +36 -0
- data/lib/{monad → jekyll}/draft.rb +1 -1
- data/lib/{monad → jekyll}/drivers/json_driver.rb +1 -1
- data/lib/{monad → jekyll}/drivers/yaml_driver.rb +1 -1
- data/lib/{monad → jekyll}/errors.rb +1 -1
- data/lib/jekyll/excerpt.rb +113 -0
- data/lib/{monad → jekyll}/filters.rb +16 -6
- data/lib/{monad → jekyll}/generator.rb +1 -1
- data/lib/jekyll/generators/pagination.rb +214 -0
- data/lib/{monad → jekyll}/layout.rb +4 -1
- data/lib/{monad → jekyll}/mime.types +0 -0
- data/lib/{monad → jekyll}/page.rb +36 -39
- data/lib/{monad → jekyll}/plugin.rb +1 -1
- data/lib/{monad → jekyll}/post.rb +58 -123
- data/lib/jekyll/related_posts.rb +59 -0
- data/lib/{monad → jekyll}/site.rb +120 -123
- data/lib/{monad → jekyll}/static_file.rb +1 -1
- data/lib/jekyll/stevenson.rb +89 -0
- data/lib/jekyll/tags/gist.rb +48 -0
- data/lib/{monad → jekyll}/tags/highlight.rb +3 -3
- data/lib/jekyll/tags/include.rb +135 -0
- data/lib/{monad → jekyll}/tags/post_url.rb +8 -6
- data/lib/jekyll/url.rb +67 -0
- data/lib/monad.rb +36 -27
- data/lib/site_template/_config.yml +2 -1
- data/lib/site_template/_layouts/default.html +21 -23
- data/lib/site_template/_layouts/post.html +1 -1
- data/lib/site_template/_posts/{0000-00-00-welcome-to-monad.markdown.erb → 0000-00-00-welcome-to-jekyll.markdown.erb} +6 -6
- data/lib/site_template/css/main.css +22 -27
- data/lib/site_template/index.html +2 -2
- data/monad.gemspec +153 -52
- data/site/.gitignore +4 -0
- data/site/CNAME +1 -0
- data/site/README +1 -0
- data/site/_config.yml +6 -0
- data/site/_includes/analytics.html +32 -0
- data/site/_includes/docs_contents.html +16 -0
- data/site/_includes/docs_contents_mobile.html +23 -0
- data/site/_includes/docs_option.html +11 -0
- data/site/_includes/docs_ul.html +20 -0
- data/site/_includes/footer.html +15 -0
- data/site/_includes/header.html +18 -0
- 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 +14 -0
- data/site/_includes/section_nav.html +22 -0
- data/site/_includes/top.html +17 -0
- data/site/_layouts/default.html +12 -0
- data/site/_layouts/docs.html +23 -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/_posts/2013-07-25-jekyll-1-0-4-released.markdown +20 -0
- data/site/_posts/2013-07-25-jekyll-1-1-2-released.markdown +20 -0
- data/site/_posts/2013-09-06-jekyll-1-2-0-released.markdown +23 -0
- data/site/_posts/2013-09-14-jekyll-1-2-1-released.markdown +19 -0
- data/site/css/gridism.css +110 -0
- data/site/css/normalize.css +1 -0
- data/site/css/pygments.css +70 -0
- data/site/css/style.css +946 -0
- data/site/docs/configuration.md +373 -0
- data/site/docs/contributing.md +128 -0
- data/site/docs/datafiles.md +63 -0
- data/site/docs/deployment-methods.md +109 -0
- data/site/docs/drafts.md +20 -0
- data/site/docs/extras.md +56 -0
- data/site/docs/frontmatter.md +180 -0
- data/site/docs/github-pages.md +91 -0
- data/site/docs/heroku.md +9 -0
- data/site/docs/history.md +722 -0
- data/site/docs/index.md +52 -0
- data/site/docs/installation.md +76 -0
- data/site/docs/migrations.md +257 -0
- data/site/docs/pages.md +86 -0
- data/site/docs/pagination.md +211 -0
- data/site/docs/permalinks.md +180 -0
- data/site/docs/plugins.md +508 -0
- data/site/docs/posts.md +181 -0
- data/site/docs/quickstart.md +32 -0
- data/site/docs/resources.md +46 -0
- data/site/docs/sites.md +29 -0
- data/site/docs/structure.md +190 -0
- data/site/docs/templates.md +319 -0
- data/site/docs/troubleshooting.md +150 -0
- data/site/docs/upgrading.md +146 -0
- data/site/docs/usage.md +63 -0
- data/site/docs/variables.md +322 -0
- data/site/favicon.png +0 -0
- 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 +90 -0
- data/site/js/modernizr-2.5.3.min.js +4 -0
- data/site/news/index.html +10 -0
- data/site/news/releases/index.html +10 -0
- data/test/helper.rb +6 -3
- data/test/source/+/foo.md +7 -0
- data/test/source/_data/languages.yml +2 -0
- data/test/source/_data/members.yaml +7 -0
- data/test/source/_data/products.yml +4 -0
- data/test/source/_includes/params.html +7 -0
- data/test/source/_layouts/default.html +1 -1
- data/test/source/_layouts/post/simple.html +1 -0
- data/test/source/_plugins/dummy.rb +1 -1
- data/test/source/_posts/2013-01-02-post-excerpt.markdown +1 -1
- data/test/source/_posts/2013-07-22-post-excerpt-with-layout.markdown +23 -0
- data/test/source/_posts/2013-08-01-mkdn-extension.mkdn +0 -0
- data/test/source/deal.with.dots.html +1 -1
- data/test/source/products.yml +4 -0
- data/test/test_configuration.rb +46 -11
- data/test/test_convertible.rb +2 -2
- data/test/test_excerpt.rb +78 -0
- data/test/test_filters.rb +4 -4
- data/test/test_generated_site.rb +13 -13
- data/test/test_json_driver.rb +9 -9
- data/test/test_kramdown.rb +32 -5
- data/test/test_new_command.rb +8 -8
- data/test/test_page.rb +12 -3
- data/test/test_pager.rb +34 -33
- data/test/test_post.rb +34 -26
- data/test/test_redcloth.rb +3 -3
- data/test/test_related_posts.rb +47 -0
- data/test/test_site.rb +102 -44
- data/test/test_tags.rb +168 -23
- data/test/test_url.rb +28 -0
- data/test/test_yaml_driver.rb +6 -6
- metadata +215 -137
- data/lib/monad/commands/doctor.rb +0 -29
- data/lib/monad/commands/new.rb +0 -50
- data/lib/monad/commands/serve.rb +0 -33
- data/lib/monad/converters/markdown/kramdown_parser.rb +0 -44
- data/lib/monad/deprecator.rb +0 -32
- data/lib/monad/generators/pagination.rb +0 -143
- data/lib/monad/logger.rb +0 -54
- data/lib/monad/tags/gist.rb +0 -30
- data/lib/monad/tags/include.rb +0 -37
@@ -12,6 +12,9 @@ The main feature it adds is as follows:
|
|
12
12
|
Data Source enables you to load data from external sources, such as web, file system,
|
13
13
|
databases and then use them inside views.
|
14
14
|
|
15
|
+
Note that Jekyll now automatically load yaml files under `_data` directory.
|
16
|
+
You're recommended to use that [feature](https://github.com/mojombo/jekyll/pull/1003)) unless it can't fulfill your requirements.
|
17
|
+
|
15
18
|
Monad supports two built-in data sources:
|
16
19
|
|
17
20
|
- `YAML` from local file system
|
@@ -44,7 +47,7 @@ To define a yaml data source, set following in `_config.yml` file:
|
|
44
47
|
data_sources:
|
45
48
|
- name: products # will be used as site.products to access data, no spaces allowed
|
46
49
|
type: yaml
|
47
|
-
path:
|
50
|
+
path: _database/products.yml # must be on local file system
|
48
51
|
```
|
49
52
|
|
50
53
|
Then, inside html you can access the data as following:
|
@@ -58,7 +61,7 @@ Then, inside html you can access the data as following:
|
|
58
61
|
The skeleton of your driver should be as follows:
|
59
62
|
|
60
63
|
``` ruby
|
61
|
-
module
|
64
|
+
module Jekyll
|
62
65
|
module Drivers
|
63
66
|
class XxxDriver
|
64
67
|
# source options are passed in as an Hash
|
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
|
|
@@ -24,6 +25,10 @@ def date
|
|
24
25
|
Date.today.to_s
|
25
26
|
end
|
26
27
|
|
28
|
+
def file_date
|
29
|
+
Date.today.strftime("%F")
|
30
|
+
end
|
31
|
+
|
27
32
|
def rubyforge_project
|
28
33
|
name
|
29
34
|
end
|
@@ -40,13 +45,53 @@ def replace_header(head, header_name)
|
|
40
45
|
head.sub!(/(\.#{header_name}\s*= ').*'/) { "#{$1}#{send(header_name)}'"}
|
41
46
|
end
|
42
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}]({{ site.repository }}/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
|
+
|
43
81
|
#############################################################################
|
44
82
|
#
|
45
83
|
# Standard tasks
|
46
84
|
#
|
47
85
|
#############################################################################
|
48
86
|
|
49
|
-
|
87
|
+
if RUBY_VERSION > '1.9' && ENV["TRAVIS"] == "true"
|
88
|
+
require 'coveralls/rake/task'
|
89
|
+
Coveralls::RakeTask.new
|
90
|
+
|
91
|
+
task :default => [:test, :features, 'coveralls:push']
|
92
|
+
else
|
93
|
+
task :default => [:test, :features]
|
94
|
+
end
|
50
95
|
|
51
96
|
require 'rake/testtask'
|
52
97
|
Rake::TestTask.new(:test) do |test|
|
@@ -83,6 +128,123 @@ task :console do
|
|
83
128
|
sh "irb -rubygems -r ./lib/#{name}.rb"
|
84
129
|
end
|
85
130
|
|
131
|
+
#############################################################################
|
132
|
+
#
|
133
|
+
# Site tasks - http://jekyllrb.com
|
134
|
+
#
|
135
|
+
#############################################################################
|
136
|
+
|
137
|
+
namespace :site do
|
138
|
+
desc "Generate and view the site locally"
|
139
|
+
task :preview do
|
140
|
+
require "launchy"
|
141
|
+
|
142
|
+
# Yep, it's a hack! Wait a few seconds for the Jekyll site to generate and
|
143
|
+
# then open it in a browser. Someday we can do better than this, I hope.
|
144
|
+
Thread.new do
|
145
|
+
sleep 4
|
146
|
+
puts "Opening in browser..."
|
147
|
+
Launchy.open("http://localhost:4000")
|
148
|
+
end
|
149
|
+
|
150
|
+
# Generate the site in server mode.
|
151
|
+
puts "Running Jekyll..."
|
152
|
+
Dir.chdir("site") do
|
153
|
+
sh "#{File.expand_path('bin/jekyll', File.dirname(__FILE__))} serve --watch"
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
desc "Update normalize.css library to the latest version and minify"
|
158
|
+
task :update_normalize_css do
|
159
|
+
Dir.chdir("site/css") do
|
160
|
+
sh 'curl "http://necolas.github.io/normalize.css/latest/normalize.css" -o "normalize.scss"'
|
161
|
+
sh 'sass "normalize.scss":"normalize.css" --style compressed'
|
162
|
+
sh 'rm "normalize.scss"'
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
desc "Commit the local site to the gh-pages branch and publish to GitHub Pages"
|
167
|
+
task :publish => [:history] do
|
168
|
+
# Ensure the gh-pages dir exists so we can generate into it.
|
169
|
+
puts "Checking for gh-pages dir..."
|
170
|
+
unless File.exist?("./gh-pages")
|
171
|
+
puts "No gh-pages directory found. Run the following commands first:"
|
172
|
+
puts " `git clone git@github.com:mojombo/jekyll gh-pages"
|
173
|
+
puts " `cd gh-pages"
|
174
|
+
puts " `git checkout gh-pages`"
|
175
|
+
exit(1)
|
176
|
+
end
|
177
|
+
|
178
|
+
# Ensure gh-pages branch is up to date.
|
179
|
+
Dir.chdir('gh-pages') do
|
180
|
+
sh "git pull origin gh-pages"
|
181
|
+
end
|
182
|
+
|
183
|
+
# Copy to gh-pages dir.
|
184
|
+
puts "Copying site to gh-pages branch..."
|
185
|
+
Dir.glob("site/*") do |path|
|
186
|
+
next if path.include? "_site"
|
187
|
+
sh "cp -R #{path} gh-pages/"
|
188
|
+
end
|
189
|
+
|
190
|
+
# Commit and push.
|
191
|
+
puts "Committing and pushing to GitHub Pages..."
|
192
|
+
sha = `git log`.match(/[a-z0-9]{40}/)[0]
|
193
|
+
Dir.chdir('gh-pages') do
|
194
|
+
sh "git add ."
|
195
|
+
sh "git commit -m 'Updating to #{sha}.'"
|
196
|
+
sh "git push origin gh-pages"
|
197
|
+
end
|
198
|
+
puts 'Done.'
|
199
|
+
end
|
200
|
+
|
201
|
+
desc "Create a nicely formatted history page for the jekyll site based on the repo history."
|
202
|
+
task :history do
|
203
|
+
if File.exist?("History.markdown")
|
204
|
+
history_file = File.read("History.markdown")
|
205
|
+
front_matter = {
|
206
|
+
"layout" => "docs",
|
207
|
+
"title" => "History",
|
208
|
+
"permalink" => "/docs/history/",
|
209
|
+
"prev_section" => "contributing"
|
210
|
+
}
|
211
|
+
Dir.chdir('site/docs/') do
|
212
|
+
File.open("history.md", "w") do |file|
|
213
|
+
file.write("#{front_matter.to_yaml}---\n\n")
|
214
|
+
file.write(converted_history(history_file))
|
215
|
+
end
|
216
|
+
end
|
217
|
+
else
|
218
|
+
abort "You seem to have misplaced your History.markdown file. I can haz?"
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
222
|
+
namespace :releases do
|
223
|
+
desc "Create new release post"
|
224
|
+
task :new, :version do |t, args|
|
225
|
+
raise "Specify a version: rake site:releases:new['1.2.3']" unless args.version
|
226
|
+
today = Time.new.strftime('%Y-%m-%d')
|
227
|
+
release = args.version.to_s
|
228
|
+
filename = "site/_posts/#{today}-jekyll-#{release.split('.').join('-')}-released.markdown"
|
229
|
+
|
230
|
+
File.open(filename, "wb") do |post|
|
231
|
+
post.puts("---")
|
232
|
+
post.puts("layout: news_item")
|
233
|
+
post.puts("title: 'Jekyll #{release} Released'")
|
234
|
+
post.puts("date: #{Time.new.strftime('%Y-%m-%d %H:%M:%S %z')}")
|
235
|
+
post.puts("author: ")
|
236
|
+
post.puts("version: #{version}")
|
237
|
+
post.puts("categories: [release]")
|
238
|
+
post.puts("---")
|
239
|
+
post.puts
|
240
|
+
post.puts
|
241
|
+
end
|
242
|
+
|
243
|
+
puts "Created #{filename}"
|
244
|
+
end
|
245
|
+
end
|
246
|
+
end
|
247
|
+
|
86
248
|
#############################################################################
|
87
249
|
#
|
88
250
|
# Packaging tasks
|
data/bin/monad
CHANGED
@@ -4,24 +4,24 @@ STDOUT.sync = true
|
|
4
4
|
$:.unshift File.join(File.dirname(__FILE__), *%w{ .. lib })
|
5
5
|
|
6
6
|
require 'commander/import'
|
7
|
-
require '
|
7
|
+
require 'jekyll'
|
8
8
|
|
9
|
-
|
9
|
+
Jekyll::Deprecator.process(ARGV)
|
10
10
|
|
11
11
|
program :name, 'monad'
|
12
|
-
program :version,
|
13
|
-
program :description, 'Monad is a blog
|
12
|
+
program :version, Jekyll::VERSION
|
13
|
+
program :description, 'Monad is a simple, blog aware, static site generator based on Jekyll'
|
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)'
|
19
19
|
global_option '--safe', 'Safe mode (defaults to false)'
|
20
|
-
global_option '--plugins PLUGINS_DIR1[,PLUGINS_DIR2[,...]]', Array, 'Plugins directory (defaults to ./_plugins)'
|
21
|
-
global_option '--layouts', 'Layouts directory (defaults to ./_layouts)'
|
20
|
+
global_option '-p', '--plugins PLUGINS_DIR1[,PLUGINS_DIR2[,...]]', Array, 'Plugins directory (defaults to ./_plugins)'
|
21
|
+
global_option '--layouts DIR', String, 'Layouts directory (defaults to ./_layouts)'
|
22
22
|
|
23
23
|
# Option names don't always directly match the configuration value we'd like.
|
24
|
-
# This method will rename options to match what
|
24
|
+
# This method will rename options to match what Jekyll configuration expects.
|
25
25
|
#
|
26
26
|
# options - The Hash of options from Commander.
|
27
27
|
#
|
@@ -33,12 +33,35 @@ def normalize_options(options)
|
|
33
33
|
options
|
34
34
|
end
|
35
35
|
|
36
|
+
def add_build_options(c)
|
37
|
+
c.option '--config CONFIG_FILE[,CONFIG_FILE2,...]', Array, 'Custom configuration file'
|
38
|
+
c.option '--future', 'Publishes posts with a future date'
|
39
|
+
c.option '--limit_posts MAX_POSTS', Integer, 'Limits the number of posts to parse and publish'
|
40
|
+
c.option '-w', '--watch', 'Watch for changes and rebuild'
|
41
|
+
c.option '--lsi', 'Use LSI for improved related posts'
|
42
|
+
c.option '-D', '--drafts', 'Render posts in the _drafts folder'
|
43
|
+
c.option '-v', '--verbose', 'Print verbose output.'
|
44
|
+
end
|
45
|
+
|
46
|
+
command :default do |c|
|
47
|
+
c.action do |args, options|
|
48
|
+
if args.empty?
|
49
|
+
command(:help).run
|
50
|
+
else
|
51
|
+
Jekyll.logger.abort_with "Invalid command. Use --help for more information"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
36
56
|
command :new do |c|
|
37
57
|
c.syntax = 'monad new PATH'
|
38
58
|
c.description = 'Creates a new Monad site scaffold in PATH'
|
39
59
|
|
60
|
+
c.option '--force', 'Force creation even if PATH already exists'
|
61
|
+
c.option '--blank', 'Creates scaffolding but with empty files'
|
62
|
+
|
40
63
|
c.action do |args, options|
|
41
|
-
|
64
|
+
Jekyll::Commands::New.process(args, options.__hash__)
|
42
65
|
end
|
43
66
|
end
|
44
67
|
|
@@ -46,17 +69,12 @@ command :build do |c|
|
|
46
69
|
c.syntax = 'monad build [options]'
|
47
70
|
c.description = 'Build your site'
|
48
71
|
|
49
|
-
c
|
50
|
-
c.option '--future', 'Publishes posts with a future date'
|
51
|
-
c.option '--limit_posts MAX_POSTS', Integer, 'Limits the number of posts to parse and publish'
|
52
|
-
c.option '-w', '--watch', 'Watch for changes and rebuild'
|
53
|
-
c.option '--lsi', 'Use LSI for improved related posts'
|
54
|
-
c.option '--drafts', 'Render posts in the _drafts folder'
|
72
|
+
add_build_options(c)
|
55
73
|
|
56
74
|
c.action do |args, options|
|
57
75
|
options = normalize_options(options.__hash__)
|
58
|
-
options =
|
59
|
-
|
76
|
+
options = Jekyll.configuration(options)
|
77
|
+
Jekyll::Commands::Build.process(options)
|
60
78
|
end
|
61
79
|
end
|
62
80
|
|
@@ -64,24 +82,20 @@ command :serve do |c|
|
|
64
82
|
c.syntax = 'monad serve [options]'
|
65
83
|
c.description = 'Serve your site locally'
|
66
84
|
|
67
|
-
c
|
68
|
-
c.option '--future', 'Publishes posts with a future date'
|
69
|
-
c.option '--limit_posts MAX_POSTS', Integer, 'Limits the number of posts to parse and publish'
|
70
|
-
c.option '-w', '--watch', 'Watch for changes and rebuild'
|
71
|
-
c.option '--lsi', 'Use LSI for improved related posts'
|
72
|
-
c.option '--drafts', 'Render posts in the _drafts folder'
|
85
|
+
add_build_options(c)
|
73
86
|
|
74
|
-
c.option '-
|
75
|
-
c.option '-
|
87
|
+
c.option '-B', '--detach', 'Run the server in the background (detach)'
|
88
|
+
c.option '-P', '--port [PORT]', 'Port to listen on'
|
89
|
+
c.option '-H', '--host [HOST]', 'Host to bind to'
|
76
90
|
c.option '-b', '--baseurl [URL]', 'Base URL'
|
77
91
|
|
78
92
|
c.action do |args, options|
|
79
93
|
options.default :serving => true
|
80
94
|
|
81
95
|
options = normalize_options(options.__hash__)
|
82
|
-
options =
|
83
|
-
|
84
|
-
|
96
|
+
options = Jekyll.configuration(options)
|
97
|
+
Jekyll::Commands::Build.process(options)
|
98
|
+
Jekyll::Commands::Serve.process(options)
|
85
99
|
end
|
86
100
|
end
|
87
101
|
alias_command :server, :serve
|
@@ -94,9 +108,51 @@ command :doctor do |c|
|
|
94
108
|
|
95
109
|
c.action do |args, options|
|
96
110
|
options = normalize_options(options.__hash__)
|
97
|
-
options =
|
98
|
-
|
111
|
+
options = Jekyll.configuration(options)
|
112
|
+
Jekyll::Commands::Doctor.process(options)
|
99
113
|
end
|
100
114
|
end
|
101
115
|
alias_command :hyde, :doctor
|
102
116
|
|
117
|
+
command :docs do |c|
|
118
|
+
c.syntax = 'monad docs'
|
119
|
+
c.description = "Launch local server with docs for Jekyll v#{Jekyll::VERSION}"
|
120
|
+
|
121
|
+
c.option '-p', '--port [PORT]', 'Port to listen on'
|
122
|
+
c.option '-u', '--host [HOST]', 'Host to bind to'
|
123
|
+
|
124
|
+
c.action do |args, options|
|
125
|
+
options = normalize_options(options.__hash__)
|
126
|
+
options = Jekyll.configuration(options.merge!({
|
127
|
+
'source' => File.expand_path("../site", File.dirname(__FILE__)),
|
128
|
+
'destination' => File.expand_path("../site/_site", File.dirname(__FILE__))
|
129
|
+
}))
|
130
|
+
puts options
|
131
|
+
Jekyll::Commands::Build.process(options)
|
132
|
+
Jekyll::Commands::Serve.process(options)
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
command :import do |c|
|
137
|
+
c.syntax = 'monad import <platform> [options]'
|
138
|
+
c.description = 'Import your old blog to Monad'
|
139
|
+
|
140
|
+
c.option '--source STRING', 'Source file or URL to migrate from'
|
141
|
+
c.option '--file STRING', 'File to migrate from'
|
142
|
+
c.option '--dbname STRING', 'Database name to migrate from'
|
143
|
+
c.option '--user STRING', 'Username to use when migrating'
|
144
|
+
c.option '--pass STRING', 'Password to use when migrating'
|
145
|
+
c.option '--host STRING', 'Host address to use when migrating'
|
146
|
+
|
147
|
+
c.action do |args, options|
|
148
|
+
begin
|
149
|
+
require 'jekyll-import'
|
150
|
+
rescue LoadError
|
151
|
+
msg = "You must install the 'jekyll-import' gem before continuing.\n"
|
152
|
+
msg += "* Do this by running `gem install jekyll-import`.\n"
|
153
|
+
msg += "* Or if you need root privileges, run `sudo gem install jekyll-import`."
|
154
|
+
abort msg
|
155
|
+
end
|
156
|
+
Jekyll::Commands::Import.process(args.first, options)
|
157
|
+
end
|
158
|
+
end
|
@@ -3,9 +3,16 @@ 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
|
-
When I run
|
15
|
+
When I run jekyll
|
9
16
|
Then the _site directory should exist
|
10
17
|
And I should see "Basic Site" in "_site/index.html"
|
11
18
|
|
@@ -13,8 +20,8 @@ Feature: Create sites
|
|
13
20
|
Given I have a _posts directory
|
14
21
|
And I have the following post:
|
15
22
|
| title | date | content |
|
16
|
-
| Hackers |
|
17
|
-
When I run
|
23
|
+
| Hackers | 2009-03-27 | My First Exploit |
|
24
|
+
When I run jekyll
|
18
25
|
Then the _site directory should exist
|
19
26
|
And I should see "My First Exploit" in "_site/2009/03/27/hackers.html"
|
20
27
|
|
@@ -22,7 +29,7 @@ Feature: Create sites
|
|
22
29
|
Given I have a _layouts directory
|
23
30
|
And I have an "index.html" page with layout "default" that contains "Basic Site with Layout"
|
24
31
|
And I have a default layout that contains "Page Layout: {{ content }}"
|
25
|
-
When I run
|
32
|
+
When I run jekyll
|
26
33
|
Then the _site directory should exist
|
27
34
|
And I should see "Page Layout: Basic Site with Layout" in "_site/index.html"
|
28
35
|
|
@@ -31,9 +38,20 @@ Feature: Create sites
|
|
31
38
|
And I have a _posts directory
|
32
39
|
And I have the following posts:
|
33
40
|
| title | date | layout | content |
|
34
|
-
| Wargames |
|
41
|
+
| Wargames | 2009-03-27 | default | The only winning move is not to play. |
|
35
42
|
And I have a default layout that contains "Post Layout: {{ content }}"
|
36
|
-
When I run
|
43
|
+
When I run jekyll
|
44
|
+
Then the _site directory should exist
|
45
|
+
And I should see "Post Layout: <p>The only winning move is not to play.</p>" in "_site/2009/03/27/wargames.html"
|
46
|
+
|
47
|
+
Scenario: Basic site with layout inside a subfolder and a post
|
48
|
+
Given I have a _layouts directory
|
49
|
+
And I have a _posts directory
|
50
|
+
And I have the following posts:
|
51
|
+
| title | date | layout | content |
|
52
|
+
| Wargames | 2009-03-27 | post/simple | The only winning move is not to play. |
|
53
|
+
And I have a post/simple layout that contains "Post Layout: {{ content }}"
|
54
|
+
When I run jekyll
|
37
55
|
Then the _site directory should exist
|
38
56
|
And I should see "Post Layout: <p>The only winning move is not to play.</p>" in "_site/2009/03/27/wargames.html"
|
39
57
|
|
@@ -49,14 +67,14 @@ Feature: Create sites
|
|
49
67
|
And I have a _posts directory
|
50
68
|
And I have the following posts:
|
51
69
|
| title | date | layout | content |
|
52
|
-
| entry1 |
|
53
|
-
| entry2 |
|
70
|
+
| entry1 | 2009-03-27 | post | content for entry1. |
|
71
|
+
| entry2 | 2009-04-27 | post | content for entry2. |
|
54
72
|
And I have a category/_posts directory
|
55
73
|
And I have the following posts in "category":
|
56
74
|
| title | date | layout | content |
|
57
|
-
| entry3 |
|
58
|
-
| entry4 |
|
59
|
-
When I run
|
75
|
+
| entry3 | 2009-05-27 | post | content for entry3. |
|
76
|
+
| entry4 | 2009-06-27 | post | content for entry4. |
|
77
|
+
When I run jekyll
|
60
78
|
Then the _site directory should exist
|
61
79
|
And I should see "Page : Site contains 2 pages and 4 posts" in "_site/index.html"
|
62
80
|
And I should see "No replacement \{\{ site.posts.size \}\}" in "_site/about.html"
|
@@ -70,28 +88,28 @@ Feature: Create sites
|
|
70
88
|
Scenario: Basic site with include tag
|
71
89
|
Given I have a _includes directory
|
72
90
|
And I have an "index.html" page that contains "Basic Site with include tag: {% include about.textile %}"
|
73
|
-
And I have an "_includes/about.textile" file that contains "Generated by
|
74
|
-
When I run
|
91
|
+
And I have an "_includes/about.textile" file that contains "Generated by Jekyll"
|
92
|
+
When I run jekyll
|
75
93
|
Then the _site directory should exist
|
76
|
-
And I should see "Basic Site with include tag: Generated by
|
94
|
+
And I should see "Basic Site with include tag: Generated by Jekyll" in "_site/index.html"
|
77
95
|
|
78
96
|
Scenario: Basic site with subdir include tag
|
79
97
|
Given I have a _includes directory
|
80
|
-
And I have an "_includes/about.textile" file that contains "Generated by
|
98
|
+
And I have an "_includes/about.textile" file that contains "Generated by Jekyll"
|
81
99
|
And I have an info directory
|
82
100
|
And I have an "info/index.html" page that contains "Basic Site with subdir include tag: {% include about.textile %}"
|
83
|
-
When I run
|
101
|
+
When I run jekyll
|
84
102
|
Then the _site directory should exist
|
85
|
-
And I should see "Basic Site with subdir include tag: Generated by
|
103
|
+
And I should see "Basic Site with subdir include tag: Generated by Jekyll" in "_site/info/index.html"
|
86
104
|
|
87
105
|
Scenario: Basic site with nested include tag
|
88
106
|
Given I have a _includes directory
|
89
|
-
And I have an "_includes/about.textile" file that contains "Generated by {% include
|
90
|
-
And I have an "_includes/
|
107
|
+
And I have an "_includes/about.textile" file that contains "Generated by {% include jekyll.textile %}"
|
108
|
+
And I have an "_includes/jekyll.textile" file that contains "Jekyll"
|
91
109
|
And I have an "index.html" page that contains "Basic Site with include tag: {% include about.textile %}"
|
92
|
-
When I run
|
110
|
+
When I run jekyll
|
93
111
|
Then the _site directory should exist
|
94
|
-
And I should see "Basic Site with include tag: Generated by
|
112
|
+
And I should see "Basic Site with include tag: Generated by Jekyll" in "_site/index.html"
|
95
113
|
|
96
114
|
Scenario: Basic site with internal post linking
|
97
115
|
Given I have an "index.html" page that contains "URL: {% post_url 2020-01-31-entry2 %}"
|
@@ -99,14 +117,25 @@ Feature: Create sites
|
|
99
117
|
And I have a _posts directory
|
100
118
|
And I have the following posts:
|
101
119
|
| title | date | layout | content |
|
102
|
-
| entry1 | 12
|
103
|
-
| entry2 | 01
|
104
|
-
When I run
|
120
|
+
| entry1 | 2007-12-31 | post | content for entry1. |
|
121
|
+
| entry2 | 2020-01-31 | post | content for entry2. |
|
122
|
+
When I run jekyll
|
105
123
|
Then the _site directory should exist
|
106
124
|
And I should see "URL: /2020/01/31/entry2/" in "_site/index.html"
|
107
125
|
|
108
126
|
Scenario: Basic site with whitelisted dotfile
|
109
127
|
Given I have an ".htaccess" file that contains "SomeDirective"
|
110
|
-
When I run
|
128
|
+
When I run jekyll
|
111
129
|
Then the _site directory should exist
|
112
130
|
And I should see "SomeDirective" in "_site/.htaccess"
|
131
|
+
|
132
|
+
Scenario: File was replaced by a directory
|
133
|
+
Given I have a "test" file that contains "some stuff"
|
134
|
+
When I run jekyll
|
135
|
+
Then the _site directory should exist
|
136
|
+
When I delete the file "test"
|
137
|
+
Given I have a test directory
|
138
|
+
And I have a "test/index.html" file that contains "some other stuff"
|
139
|
+
When I run jekyll
|
140
|
+
Then the _site/test directory should exist
|
141
|
+
And I should see "some other stuff" in "_site/test/index.html"
|