Merge commit '60709da7067fbe1d106fbdfadb3a84b35d07d721' into qrush

This commit is contained in:
Tom Preston-Werner 2009-02-12 11:49:50 -08:00
commit 0168581a82
12 changed files with 111 additions and 17 deletions

2
.gitignore vendored
View File

@ -1,3 +1,5 @@
test/dest/ test/dest/
*.gem *.gem
pkg/ pkg/
*.swp
*~

View File

@ -255,6 +255,15 @@ h3. Predefined Post Variables
/year/month/day/title.html then you can set this variable and it will /year/month/day/title.html then you can set this variable and it will
be used as the final URL. be used as the final URL.
published
Set to false if you don't want a post to show up when the site is
generated.
category/categories
Instead of placing posts inside of folders, you can specify one or more
categories that the post belongs to. When the site is generated the post
will act as though it had been set with these categories normally.
h3. Custom Variables h3. Custom Variables
Any variables in the front matter that are not predefined are mixed into the Any variables in the front matter that are not predefined are mixed into the

View File

@ -18,7 +18,7 @@ module Jekyll
name =~ MATCHER name =~ MATCHER
end end
attr_accessor :date, :slug, :ext, :categories, :topics attr_accessor :date, :slug, :ext, :categories, :topics, :published
attr_accessor :data, :content, :output attr_accessor :data, :content, :output
# Initialize this Post instance. # Initialize this Post instance.
@ -38,6 +38,20 @@ module Jekyll
self.process(name) self.process(name)
self.read_yaml(@base, name) self.read_yaml(@base, name)
if self.data.has_key?('published') && self.data['published'] == false
self.published = false
else
self.published = true
end
if self.categories.empty?
if self.data.has_key?('category')
self.categories << self.data['category']
elsif self.data.has_key?('categories')
self.categories = self.data['categories'].split
end
end
end end
# Spaceship is based on Post#date # Spaceship is based on Post#date

View File

@ -63,10 +63,13 @@ module Jekyll
entries.each do |f| entries.each do |f|
if Post.valid?(f) if Post.valid?(f)
post = Post.new(self.source, dir, f) post = Post.new(self.source, dir, f)
if post.published
self.posts << post self.posts << post
post.categories.each { |c| self.categories[c] << post } post.categories.each { |c| self.categories[c] << post }
end end
end end
end
# second pass renders each post now that full site payload is available # second pass renders each post now that full site payload is available
self.posts.each do |post| self.posts.each do |post|

View File

@ -1,6 +1,7 @@
require File.join(File.dirname(__FILE__), *%w[.. lib jekyll]) require File.join(File.dirname(__FILE__), *%w[.. lib jekyll])
require 'test/unit' require 'test/unit'
require 'redgreen'
include Jekyll include Jekyll

View File

@ -0,0 +1,8 @@
---
layout: default
title: Not published!
published: false
category: publish_test
---
This should *not* be published!

View File

@ -0,0 +1,8 @@
---
layout: default
title: Publish
category: publish_test
---
This should be published.

View File

@ -0,0 +1,7 @@
---
layout: default
title: Categories in YAML
categories: foo bar baz
---
Best *post* ever

View File

@ -0,0 +1,7 @@
---
layout: default
title: Category in YAML
category: foo
---
Best *post* ever

View File

@ -3,20 +3,30 @@ require File.dirname(__FILE__) + '/helper'
class TestGeneratedSite < Test::Unit::TestCase class TestGeneratedSite < Test::Unit::TestCase
def setup def setup
clear_dest clear_dest
source = File.join(File.dirname(__FILE__), *%w[source]) @source = File.join(File.dirname(__FILE__), *%w[source])
@s = Site.new(source, dest_dir) @s = Site.new(@source, dest_dir)
@s.process @s.process
@index = File.read(File.join(dest_dir, 'index.html')) @index = File.read(File.join(dest_dir, 'index.html'))
end end
def test_site_posts_in_index def test_site_posts_in_index
# confirm that {{ site.posts }} is working # confirm that {{ site.posts }} is working
puts @s.posts.size
assert @index.include?("#{@s.posts.size} Posts") assert @index.include?("#{@s.posts.size} Posts")
end end
def test_post_content_in_index def test_post_content_in_index
# confirm that the {{ post.content }} is rendered OK # confirm that the {{ post.content }} is rendered OK
assert @index.include?('<p>This <em>is</em> cool</p>') latest_post = Dir[File.join(@source, '_posts/*')].last
post = Post.new(@source, '', File.basename(latest_post))
Jekyll.content_type = post.determine_content_type
post.transform
assert @index.include?(post.content)
end
def test_unpublished_posts_are_hidden
published = Dir[File.join(dest_dir, 'publish_test/2008/02/02/*.html')].map {|f| File.basename(f)}
assert_equal 1, published.size
assert_equal "published.html", published.first
end end
end end

View File

@ -71,6 +71,28 @@ class TestPost < Test::Unit::TestCase
assert_equal "<h1>{{ page.title }}</h1>\n<p>Best <strong>post</strong> ever</p>", p.content assert_equal "<h1>{{ page.title }}</h1>\n<p>Best <strong>post</strong> ever</p>", p.content
end end
def test_published
p = Post.new(File.join(File.dirname(__FILE__), *%w[source]), '', "2008-02-02-published.textile")
assert_equal true, p.published
end
def test_not_published
p = Post.new(File.join(File.dirname(__FILE__), *%w[source]), '', "2008-02-02-not-published.textile")
assert_equal false, p.published
end
def test_yaml_category
p = Post.new(File.join(File.dirname(__FILE__), *%w[source]), '', "2009-01-27-category.textile")
assert p.categories.include?('foo')
end
def test_yaml_categories
p = Post.new(File.join(File.dirname(__FILE__), *%w[source]), '', "2009-01-27-categories.textile")
assert p.categories.include?('foo')
assert p.categories.include?('bar')
assert p.categories.include?('baz')
end
def test_render def test_render
p = Post.new(File.join(File.dirname(__FILE__), *%w[source]), '', "2008-10-18-foo-bar.textile") p = Post.new(File.join(File.dirname(__FILE__), *%w[source]), '', "2008-10-18-foo-bar.textile")
layouts = {"default" => Layout.new(File.join(File.dirname(__FILE__), *%w[source _layouts]), "simple.html")} layouts = {"default" => Layout.new(File.join(File.dirname(__FILE__), *%w[source _layouts]), "simple.html")}

View File

@ -2,8 +2,8 @@ require File.dirname(__FILE__) + '/helper'
class TestSite < Test::Unit::TestCase class TestSite < Test::Unit::TestCase
def setup def setup
source = File.join(File.dirname(__FILE__), *%w[source]) @source = File.join(File.dirname(__FILE__), *%w[source])
@s = Site.new(source, dest_dir) @s = Site.new(@source, dest_dir)
end end
def test_site_init def test_site_init
@ -18,16 +18,19 @@ class TestSite < Test::Unit::TestCase
def test_read_posts def test_read_posts
@s.read_posts('') @s.read_posts('')
posts = Dir[File.join(@source, '_posts/*')]
assert_equal 4, @s.posts.size assert_equal posts.size - 1, @s.posts.size
end end
def test_site_payload def test_site_payload
clear_dest clear_dest
@s.process @s.process
assert_equal 7, @s.posts.length posts = Dir[File.join(@source, "**", "_posts/*")]
assert_equal ["category", "foo", "z_category"].sort, @s.categories.keys.sort categories = %w(bar baz category foo z_category publish_test).sort
assert_equal 1, @s.categories['foo'].length
assert_equal posts.size - 1, @s.posts.size
assert_equal categories, @s.categories.keys.sort
assert_equal 3, @s.categories['foo'].size
end end
end end