diff --git a/features/post_data.feature b/features/post_data.feature index 6d92b19e..c72f52fa 100644 --- a/features/post_data.feature +++ b/features/post_data.feature @@ -70,6 +70,18 @@ Feature: Post data Then the _site directory should exist And I should see "Post category: movies" in "_site/movies/2009/03/27/star-wars.html" + Scenario: Use post.categories variable when category is in a folder and has categories in YAML + Given I have a movies directory + And I have a movies/_posts directory + And I have a _layouts directory + And I have the following post in "movies": + | title | date | layout | categories | content | + | Star Wars | 2009-03-27 | simple | [film] | Luke, I am your father. | + And I have a simple layout that contains "Post category: {{ page.categories }}" + When I run jekyll build + Then the _site directory should exist + And I should see "Post category: movies" in "_site/movies/film/2009/03/27/star-wars.html" + Scenario: Use post.tags variable Given I have a _posts directory And I have a _layouts directory diff --git a/lib/jekyll/post.rb b/lib/jekyll/post.rb index 9c75efc6..6cd6e938 100644 --- a/lib/jekyll/post.rb +++ b/lib/jekyll/post.rb @@ -77,9 +77,8 @@ module Jekyll end def populate_categories - if categories.empty? - self.categories = Utils.pluralized_array_from_hash(data, 'category', 'categories').map {|c| c.to_s.downcase} - end + categories_from_data = Utils.pluralized_array_from_hash(data, 'category', 'categories') + self.categories = (Array(categories) + categories_from_data).map {|c| c.to_s.downcase} categories.flatten! end diff --git a/test/test_post.rb b/test/test_post.rb index 610fb918..5e264ea7 100644 --- a/test/test_post.rb +++ b/test/test_post.rb @@ -666,7 +666,7 @@ class TestPost < Test::Unit::TestCase end end - + context "site config with category" do setup do config = Jekyll::Configuration::DEFAULTS.merge({ @@ -686,7 +686,7 @@ class TestPost < Test::Unit::TestCase post = setup_post("2009-01-27-no-category.textile") assert post.categories.include?('article'), "Expected post.categories to include 'article' but did not." end - + should "override site category if set on post" do post = setup_post("2009-01-27-category.textile") assert post.categories.include?('foo'), "Expected post.categories to include 'foo' but did not." @@ -713,7 +713,7 @@ class TestPost < Test::Unit::TestCase post = setup_post("2009-01-27-no-category.textile") assert post.categories.include?('article'), "Expected post.categories to include 'article' but did not." end - + should "override site categories if set on post" do post = setup_post("2009-01-27-categories.textile") ['foo', 'bar', 'baz'].each do |category|