monad 0.0.2 → 0.0.3
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 +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"
|