Skip to content

Commit

Permalink
Use category in downcase only for URL (Resolves jekyll#1739)
Browse files Browse the repository at this point in the history
  • Loading branch information
yous committed Aug 2, 2014
1 parent 9a6dc7b commit 7b294bb
Show file tree
Hide file tree
Showing 10 changed files with 66 additions and 19 deletions.
8 changes: 4 additions & 4 deletions features/post_data.feature
Expand Up @@ -141,7 +141,7 @@ Feature: Post data
And I have a simple layout that contains "Post categories: {{ page.categories | array_to_sentence_string }}"
When I run jekyll build
Then the _site directory should exist
And I should see "Post categories: scifi and movies" in "_site/scifi/movies/2009/03/27/star-wars.html"
And I should see "Post categories: scifi and Movies" in "_site/scifi/movies/2009/03/27/star-wars.html"

Scenario: Use post.categories variable when category is in YAML
Given I have a _posts directory
Expand All @@ -163,7 +163,7 @@ Feature: Post data
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/2009/03/27/star-wars.html"
And I should see "Post category: Movies" in "_site/movies/2009/03/27/star-wars.html"

Scenario: Use post.categories variable when categories are in YAML
Given I have a _posts directory
Expand Down Expand Up @@ -197,8 +197,8 @@ Feature: Post data
And I have a simple layout that contains "Post categories: {{ page.categories | array_to_sentence_string }}"
When I run jekyll build
Then the _site directory should exist
And I should see "Post categories: scifi and movies" in "_site/scifi/movies/2009/03/27/star-wars.html"
And I should see "Post categories: scifi and movies" in "_site/scifi/movies/2013/03/17/star-trek.html"
And I should see "Post categories: scifi and Movies" in "_site/scifi/movies/2009/03/27/star-wars.html"
And I should see "Post categories: SciFi and movies" in "_site/scifi/movies/2013/03/17/star-trek.html"

Scenario Outline: Use page.path variable
Given I have a <dir>/_posts directory
Expand Down
6 changes: 3 additions & 3 deletions lib/jekyll/post.rb
Expand Up @@ -52,7 +52,7 @@ def initialize(site, source, dir, name)
@base = containing_dir(source, dir)
@name = name

self.categories = dir.downcase.split('/').reject { |x| x.empty? }
self.categories = dir.split('/').reject { |x| x.empty? }
process(name)
read_yaml(@base, name)

Expand Down Expand Up @@ -87,7 +87,7 @@ def populate_categories
categories_from_data = Utils.pluralized_array_from_hash(data, 'category', 'categories')
self.categories = (
Array(categories) + categories_from_data
).map {|c| c.to_s.downcase}.flatten.uniq
).map { |c| c.to_s }.flatten.uniq
end

def populate_tags
Expand Down Expand Up @@ -232,7 +232,7 @@ def url_placeholders
:title => slug,
:i_day => date.strftime("%-d"),
:i_month => date.strftime("%-m"),
:categories => (categories || []).map { |c| c.to_s }.join('/'),
:categories => (categories || []).map { |c| c.to_s.downcase }.join('/'),
:short_month => date.strftime("%b"),
:short_year => date.strftime("%y"),
:y_day => date.strftime("%j"),
Expand Down
Expand Up @@ -5,6 +5,7 @@ categories:
- bar
- baz
- z_category
- MixedCase
tags:
- first
- second
Expand Down
2 changes: 1 addition & 1 deletion test/source/_posts/2013-12-20-properties.text
@@ -1,5 +1,5 @@
---
categories: foo bar baz
categories: foo bar baz MixedCase
foo: bar
layout: default
tags: ay bee cee
Expand Down
@@ -0,0 +1,7 @@
---
layout: default
title: Another Mixed Case Category in YAML
category: Mixedcase
---

Best *post* ever
7 changes: 7 additions & 0 deletions test/source/_posts/2014-07-05-mixed-case-category.markdown
@@ -0,0 +1,7 @@
---
layout: default
title: Mixed Case Category in YAML
category: MixedCase
---

Best *post* ever
4 changes: 2 additions & 2 deletions test/test_excerpt.rb
Expand Up @@ -80,9 +80,9 @@ def do_render(post)
context "#to_liquid" do
should "contain the proper page data to mimick the post liquid" do
assert_equal "Post Excerpt with Layout", @excerpt.to_liquid["title"]
assert_equal "/bar/baz/z_category/2013/07/22/post-excerpt-with-layout.html", @excerpt.to_liquid["url"]
assert_equal "/bar/baz/z_category/mixedcase/2013/07/22/post-excerpt-with-layout.html", @excerpt.to_liquid["url"]
assert_equal Time.parse("2013-07-22"), @excerpt.to_liquid["date"]
assert_equal %w[bar baz z_category], @excerpt.to_liquid["categories"]
assert_equal %w[bar baz z_category MixedCase], @excerpt.to_liquid["categories"]
assert_equal %w[first second third jekyllrb.com], @excerpt.to_liquid["tags"]
assert_equal "_posts/2013-07-22-post-excerpt-with-layout.markdown", @excerpt.to_liquid["path"]
end
Expand Down
2 changes: 1 addition & 1 deletion test/test_generated_site.rb
Expand Up @@ -14,7 +14,7 @@ class TestGeneratedSite < Test::Unit::TestCase
end

should "ensure post count is as expected" do
assert_equal 42, @site.posts.size
assert_equal 44, @site.posts.size
end

should "insert site.posts into the index" do
Expand Down
46 changes: 39 additions & 7 deletions test/test_post.rb
Expand Up @@ -31,21 +31,21 @@ def do_render(post)
post = setup_post('2013-12-20-properties.text')

attrs = {
categories: %w(foo bar baz),
categories: %w(foo bar baz MixedCase),
content: "All the properties.\n\nPlus an excerpt.\n",
date: Time.new(2013, 12, 20),
dir: "/foo/bar/baz/2013/12/20",
dir: "/foo/bar/baz/mixedcase/2013/12/20",
excerpt: "All the properties.\n\n",
foo: 'bar',
id: "/foo/bar/baz/2013/12/20/properties",
id: "/foo/bar/baz/mixedcase/2013/12/20/properties",
layout: 'default',
name: nil,
path: "_posts/2013-12-20-properties.text",
permalink: nil,
published: nil,
tags: %w(ay bee cee),
title: 'Properties Post',
url: "/foo/bar/baz/2013/12/20/properties.html"
url: "/foo/bar/baz/mixedcase/2013/12/20/properties.html"
}

attrs.each do |attr, val|
Expand Down Expand Up @@ -250,14 +250,26 @@ def do_render(post)

context "with space (categories)" do
setup do
@post.categories << "French cuisine"
@post.categories << "Belgian beer"
@post.categories << "french cuisine"
@post.categories << "belgian beer"
@post.process(@fake_file)
end

should "process the url correctly" do
assert_equal "/:categories/:year/:month/:day/:title.html", @post.template
assert_equal "/French%20cuisine/Belgian%20beer/2008/09/09/foo-bar.html", @post.url
assert_equal "/french%20cuisine/belgian%20beer/2008/09/09/foo-bar.html", @post.url
end
end

context "with mixed case (category)" do
setup do
@post.categories << "MixedCase"
@post.process(@fake_file)
end

should "process the url correctly" do
assert_equal "/:categories/:year/:month/:day/:title.html", @post.template
assert_equal "/mixedcase/2008/09/09/foo-bar.html", @post.url
end
end

Expand Down Expand Up @@ -514,6 +526,12 @@ def do_render(post)
assert !post.categories.include?(2013)
end

should "recognize mixed case category in yaml" do
post = setup_post("2014-07-05-mixed-case-category.markdown")
assert post.categories.include?('MixedCase')
assert !post.categories.include?('mixedcase')
end

should "recognize tag in yaml" do
post = setup_post("2009-05-18-tag.textile")
assert post.tags.include?('code')
Expand Down Expand Up @@ -586,6 +604,20 @@ def do_render(post)
'escape-+ %20[].html'))
end

should "write properly when category has different letter case" do
%w(2014-07-05-mixed-case-category.markdown 2014-07-05-another-mixed-case-category.markdown).each do |file|
post = setup_post(file)
do_render(post)
post.write(dest_dir)
end

assert File.directory?(dest_dir)
assert File.exist?(File.join(dest_dir, 'mixedcase', '2014', '07', '05',
'mixed-case-category.html'))
assert File.exist?(File.join(dest_dir, 'mixedcase', '2014', '07', '05',
'another-mixed-case-category.html'))
end

should "write properly without html extension" do
post = setup_post("2008-10-18-foo-bar.textile")
post.site.permalink_style = ":title"
Expand Down
2 changes: 1 addition & 1 deletion test/test_site.rb
Expand Up @@ -212,7 +212,7 @@ def generate(site)

posts = Dir[source_dir("**", "_posts", "**", "*")]
posts.delete_if { |post| File.directory?(post) && !Post.valid?(post) }
categories = %w(2013 bar baz category es foo z_category publish_test win).sort
categories = %w(2013 bar baz category es foo z_category MixedCase Mixedcase publish_test win).sort

assert_equal posts.size - @num_invalid_posts, @site.posts.size
assert_equal categories, @site.categories.keys.sort
Expand Down

0 comments on commit 7b294bb

Please sign in to comment.