From 1211f23b53af69f5ce31bd1e7eec747294f12e78 Mon Sep 17 00:00:00 2001 From: Nick Quaranto Date: Wed, 28 Jan 2009 09:22:46 -0500 Subject: [PATCH] Adding support for setting post categories through YAML if not specified by directory structure --- .gitignore | 2 ++ lib/jekyll/post.rb | 8 ++++++++ test/helper.rb | 3 ++- test/test_generated_site.rb | 10 +++++++--- test/test_post.rb | 14 +++++++++++++- test/test_site.rb | 17 ++++++++++------- 6 files changed, 42 insertions(+), 12 deletions(-) diff --git a/.gitignore b/.gitignore index 92e4ce11..de43f334 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ test/dest/ *.gem pkg/ +*.swp +*~ diff --git a/lib/jekyll/post.rb b/lib/jekyll/post.rb index 07068184..81213b3f 100644 --- a/lib/jekyll/post.rb +++ b/lib/jekyll/post.rb @@ -38,6 +38,14 @@ module Jekyll self.process(name) self.read_yaml(@base, name) + + 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 # Spaceship is based on Post#date diff --git a/test/helper.rb b/test/helper.rb index 9aabcdd2..611d6d60 100644 --- a/test/helper.rb +++ b/test/helper.rb @@ -1,6 +1,7 @@ require File.join(File.dirname(__FILE__), *%w[.. lib jekyll]) require 'test/unit' +require 'redgreen' include Jekyll @@ -10,4 +11,4 @@ end def clear_dest FileUtils.rm_rf(dest_dir) -end \ No newline at end of file +end diff --git a/test/test_generated_site.rb b/test/test_generated_site.rb index 56e5e422..373545d4 100644 --- a/test/test_generated_site.rb +++ b/test/test_generated_site.rb @@ -3,8 +3,8 @@ require File.dirname(__FILE__) + '/helper' class TestGeneratedSite < Test::Unit::TestCase def setup clear_dest - source = File.join(File.dirname(__FILE__), *%w[source]) - @s = Site.new(source, dest_dir) + @source = File.join(File.dirname(__FILE__), *%w[source]) + @s = Site.new(@source, dest_dir) @s.process @index = File.read(File.join(dest_dir, 'index.html')) end @@ -16,6 +16,10 @@ class TestGeneratedSite < Test::Unit::TestCase def test_post_content_in_index # confirm that the {{ post.content }} is rendered OK - assert @index.include?('

This is cool

') + 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 end diff --git a/test/test_post.rb b/test/test_post.rb index 713eec02..202ea55f 100644 --- a/test/test_post.rb +++ b/test/test_post.rb @@ -70,6 +70,18 @@ class TestPost < Test::Unit::TestCase assert_equal "

{{ page.title }}

\n

Best post ever

", p.content 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 p = Post.new(File.join(File.dirname(__FILE__), *%w[source]), '', "2008-10-18-foo-bar.textile") @@ -110,4 +122,4 @@ class TestPost < Test::Unit::TestCase assert_equal "<<<
\n

Tom Preston-Werner github.com/mojombo

\n\n

This is cool

>>>", p.output end -end \ No newline at end of file +end diff --git a/test/test_site.rb b/test/test_site.rb index 03bf1669..7bcf6dee 100644 --- a/test/test_site.rb +++ b/test/test_site.rb @@ -2,8 +2,8 @@ require File.dirname(__FILE__) + '/helper' class TestSite < Test::Unit::TestCase def setup - source = File.join(File.dirname(__FILE__), *%w[source]) - @s = Site.new(source, dest_dir) + @source = File.join(File.dirname(__FILE__), *%w[source]) + @s = Site.new(@source, dest_dir) end def test_site_init @@ -18,16 +18,19 @@ class TestSite < Test::Unit::TestCase def test_read_posts @s.read_posts('') - - assert_equal 4, @s.posts.size + posts = Dir[File.join(@source, '_posts/*')] + assert_equal posts.size, @s.posts.size end def test_site_payload clear_dest @s.process - assert_equal 7, @s.posts.length - assert_equal ["category", "foo", "z_category"].sort, @s.categories.keys.sort - assert_equal 1, @s.categories['foo'].length + posts = Dir[File.join(@source, "**", "_posts/*")] + categories = %w(bar baz category foo z_category).sort + + assert_equal posts.size, @s.posts.size + assert_equal categories, @s.categories.keys.sort + assert_equal 3, @s.categories['foo'].size end end