Merge branch 'fix_tags_and_categories_issues_73_and_84' into updates_20100110

This commit is contained in:
Kris Brown 2010-01-10 21:54:01 +00:00
commit db03bcac8f
10 changed files with 145 additions and 25 deletions

View File

@ -3,6 +3,10 @@
# #
# Requires # Requires
# self.site -> Jekyll::Site # self.site -> Jekyll::Site
# self.content=
# self.data=
# self.ext=
# self.output=
module Jekyll module Jekyll
module Convertible module Convertible
# Return the contents as a string # Return the contents as a string

View File

@ -19,6 +19,28 @@ class Hash
target target
end end
# Read array from the supplied hash favouring the singular key
# and then the plural key, and handling any nil entries.
# +hash+ the hash to read from
# +singular_key+ the singular key
# +plural_key+ the singular key
#
# Returns an array
def pluralized_array(singular_key, plural_key)
hash = self
if hash.has_key?(singular_key)
array = [hash[singular_key]] if hash[singular_key]
elsif hash.has_key?(plural_key)
case hash[plural_key]
when String
array = hash[plural_key].split
when Array
array = hash[plural_key].compact
end
end
array || []
end
end end
# Thanks, ActiveSupport! # Thanks, ActiveSupport!

View File

@ -18,12 +18,9 @@ module Jekyll
name =~ MATCHER name =~ MATCHER
end end
attr_accessor :site, :date, :slug, :ext, :published, :data, :content, :output, :tags attr_accessor :site
attr_writer :categories attr_accessor :data, :content, :output, :ext
attr_accessor :date, :slug, :published, :tags, :categories
def categories
@categories ||= []
end
# Initialize this Post instance. # Initialize this Post instance.
# +site+ is the Site # +site+ is the Site
@ -47,26 +44,10 @@ module Jekyll
self.published = true self.published = true
end end
if self.data.has_key?("tag") self.tags = self.data.pluralized_array("tag", "tags")
self.tags = [self.data["tag"]]
elsif self.data.has_key?("tags")
self.tags = self.data['tags']
else
self.tags = []
end
if self.categories.empty? if self.categories.empty?
if self.data.has_key?('category') self.categories = self.data.pluralized_array('category', 'categories')
self.categories << self.data['category']
elsif self.data.has_key?('categories')
# Look for categories in the YAML-header, either specified as
# an array or a string.
if self.data['categories'].kind_of? String
self.categories = self.data['categories'].split
else
self.categories = self.data['categories']
end
end
end end
end end

View File

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

View File

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

View File

@ -0,0 +1,6 @@
---
title: A Tag
tag:
---
Whoa.

View File

@ -0,0 +1,6 @@
---
title: Some Tags
tags:
---
Awesome!

66
test/test_core_ext.rb Normal file
View File

@ -0,0 +1,66 @@
require File.dirname(__FILE__) + '/helper'
class TestCoreExt < Test::Unit::TestCase
context "hash" do
context "pluralized_array" do
should "return empty array with no values" do
data = {}
assert_equal [], data.pluralized_array('tag', 'tags')
end
should "return empty array with no matching values" do
data = { 'foo' => 'bar' }
assert_equal [], data.pluralized_array('tag', 'tags')
end
should "return empty array with matching nil singular" do
data = { 'foo' => 'bar', 'tag' => nil, 'tags' => ['dog', 'cat'] }
assert_equal [], data.pluralized_array('tag', 'tags')
end
should "return single value array with matching singular" do
data = { 'foo' => 'bar', 'tag' => 'dog', 'tags' => ['dog', 'cat'] }
assert_equal ['dog'], data.pluralized_array('tag', 'tags')
end
should "return single value array with matching singular with spaces" do
data = { 'foo' => 'bar', 'tag' => 'dog cat', 'tags' => ['dog', 'cat'] }
assert_equal ['dog cat'], data.pluralized_array('tag', 'tags')
end
should "return empty array with matching nil plural" do
data = { 'foo' => 'bar', 'tags' => nil }
assert_equal [], data.pluralized_array('tag', 'tags')
end
should "return empty array with matching empty array" do
data = { 'foo' => 'bar', 'tags' => [] }
assert_equal [], data.pluralized_array('tag', 'tags')
end
should "return single value array with matching plural with single string value" do
data = { 'foo' => 'bar', 'tags' => 'dog' }
assert_equal ['dog'], data.pluralized_array('tag', 'tags')
end
should "return multiple value array with matching plural with single string value with spaces" do
data = { 'foo' => 'bar', 'tags' => 'dog cat' }
assert_equal ['dog', 'cat'], data.pluralized_array('tag', 'tags')
end
should "return single value array with matching plural with single value array" do
data = { 'foo' => 'bar', 'tags' => ['dog'] }
assert_equal ['dog'], data.pluralized_array('tag', 'tags')
end
should "return multiple value array with matching plural with multiple value array" do
data = { 'foo' => 'bar', 'tags' => ['dog', 'cat'] }
assert_equal ['dog', 'cat'], data.pluralized_array('tag', 'tags')
end
end
end
end

View File

@ -14,7 +14,7 @@ class TestGeneratedSite < Test::Unit::TestCase
end end
should "ensure post count is as expected" do should "ensure post count is as expected" do
assert_equal 18, @site.posts.size assert_equal 22, @site.posts.size
end end
should "insert site.posts into the index" do should "insert site.posts into the index" do

View File

@ -36,6 +36,7 @@ class TestPost < Test::Unit::TestCase
end end
should "keep date, title, and markup type" do should "keep date, title, and markup type" do
@post.categories = []
@post.process(@fake_file) @post.process(@fake_file)
assert_equal Time.parse("2008-10-19"), @post.date assert_equal Time.parse("2008-10-19"), @post.date
@ -236,6 +237,16 @@ class TestPost < Test::Unit::TestCase
assert post.categories.include?('baz') assert post.categories.include?('baz')
end end
should "recognize empty category in yaml" do
post = setup_post("2009-01-27-empty-category.textile")
assert_equal [], post.categories
end
should "recognize empty categories in yaml" do
post = setup_post("2009-01-27-empty-categories.textile")
assert_equal [], post.categories
end
should "recognize tag in yaml" do should "recognize tag in yaml" do
post = setup_post("2009-05-18-tag.textile") post = setup_post("2009-05-18-tag.textile")
assert post.tags.include?('code') assert post.tags.include?('code')
@ -248,6 +259,16 @@ class TestPost < Test::Unit::TestCase
assert post.tags.include?('pizza') assert post.tags.include?('pizza')
end end
should "recognize empty tag in yaml" do
post = setup_post("2009-05-18-empty-tag.textile")
assert_equal [], post.tags
end
should "recognize empty tags in yaml" do
post = setup_post("2009-05-18-empty-tags.textile")
assert_equal [], post.tags
end
should "allow no yaml" do should "allow no yaml" do
post = setup_post("2009-06-22-no-yaml.textile") post = setup_post("2009-06-22-no-yaml.textile")
assert_equal "No YAML.", post.content assert_equal "No YAML.", post.content