Getting there, prefixes work great
This commit is contained in:
parent
288d5045d2
commit
9da140fcb2
|
@ -31,7 +31,7 @@ Feature: Fancy permalinks
|
||||||
And I have a configuration file with "permalink" set to "blog/:year/:month/:day/:title"
|
And I have a configuration file with "permalink" set to "blog/:year/:month/:day/:title"
|
||||||
When I run jekyll
|
When I run jekyll
|
||||||
Then the _site directory should exist
|
Then the _site directory should exist
|
||||||
And I should see "Totally custom." in "_site/posts/2009/03/27/custom-permalink-scheme/index.html"
|
And I should see "Totally custom." in "_site/blog/2009/03/27/custom-permalink-schema/index.html"
|
||||||
|
|
||||||
Scenario: Use custom permalink schema with category
|
Scenario: Use custom permalink schema with category
|
||||||
Given I have a _posts directory
|
Given I have a _posts directory
|
||||||
|
@ -41,7 +41,7 @@ Feature: Fancy permalinks
|
||||||
And I have a configuration file with "permalink" set to ":category/:title.html"
|
And I have a configuration file with "permalink" set to ":category/:title.html"
|
||||||
When I run jekyll
|
When I run jekyll
|
||||||
Then the _site directory should exist
|
Then the _site directory should exist
|
||||||
And I should see "Totally custom." in "_site/stuff/custom-permalink-scheme.html"
|
And I should see "Totally custom." in "_site/stuff/custom-permalink-schema.html"
|
||||||
|
|
||||||
Scenario: Use custom permalink schema with squished date
|
Scenario: Use custom permalink schema with squished date
|
||||||
Given I have a _posts directory
|
Given I have a _posts directory
|
||||||
|
@ -51,4 +51,4 @@ Feature: Fancy permalinks
|
||||||
And I have a configuration file with "permalink" set to ":month-:day-:year/:title.html"
|
And I have a configuration file with "permalink" set to ":month-:day-:year/:title.html"
|
||||||
When I run jekyll
|
When I run jekyll
|
||||||
Then the _site directory should exist
|
Then the _site directory should exist
|
||||||
And I should see "Totally custom." in "_site/03-27-2009/custom-permalink-scheme.html"
|
And I should see "Totally custom." in "_site/03-27-2009/custom-permalink-schema.html"
|
||||||
|
|
|
@ -14,5 +14,5 @@ def run_jekyll(opts = {})
|
||||||
bg = '&'
|
bg = '&'
|
||||||
end
|
end
|
||||||
|
|
||||||
system "#{JEKYLL_PATH} >> /dev/null"
|
system "#{JEKYLL_PATH}" #>> /dev/null"
|
||||||
end
|
end
|
||||||
|
|
|
@ -18,9 +18,12 @@ module Jekyll
|
||||||
name =~ MATCHER
|
name =~ MATCHER
|
||||||
end
|
end
|
||||||
|
|
||||||
attr_accessor :site
|
attr_accessor :site, :date, :slug, :ext, :topics, :published, :data, :content, :output
|
||||||
attr_accessor :date, :slug, :ext, :categories, :topics, :published
|
attr_writer :categories
|
||||||
attr_accessor :data, :content, :output
|
|
||||||
|
def categories
|
||||||
|
@categories ||= []
|
||||||
|
end
|
||||||
|
|
||||||
# Initialize this Post instance.
|
# Initialize this Post instance.
|
||||||
# +site+ is the Site
|
# +site+ is the Site
|
||||||
|
@ -88,16 +91,7 @@ module Jekyll
|
||||||
#
|
#
|
||||||
# Returns <String>
|
# Returns <String>
|
||||||
def dir
|
def dir
|
||||||
if permalink
|
File.dirname(url)
|
||||||
permalink.to_s.split("/")[0..-2].join("/") + '/'
|
|
||||||
else
|
|
||||||
prefix = self.categories.empty? ? '' : '/' + self.categories.join('/')
|
|
||||||
if [:date, :pretty].include?(self.site.permalink_style)
|
|
||||||
prefix + date.strftime("/%Y/%m/%d/")
|
|
||||||
else
|
|
||||||
prefix + '/'
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# The full path and filename of the post.
|
# The full path and filename of the post.
|
||||||
|
@ -112,13 +106,13 @@ module Jekyll
|
||||||
def template
|
def template
|
||||||
case self.site.permalink_style
|
case self.site.permalink_style
|
||||||
when :pretty
|
when :pretty
|
||||||
"/:year/:month/:day/:title"
|
"/:categories/:year/:month/:day/:title"
|
||||||
when :none
|
when :none
|
||||||
"/:title.html"
|
"/:categories/:title.html"
|
||||||
when :date
|
when :date
|
||||||
"/:year/:month/:day/:title.html"
|
"/:categories/:year/:month/:day/:title.html"
|
||||||
else
|
else
|
||||||
self.site.permalink_style
|
self.site.permalink_style.to_s
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -130,13 +124,14 @@ module Jekyll
|
||||||
return permalink if permalink
|
return permalink if permalink
|
||||||
|
|
||||||
{
|
{
|
||||||
"year" => date.strftime("%Y"),
|
"year" => date.strftime("%Y"),
|
||||||
"month" => date.strftime("%m"),
|
"month" => date.strftime("%m"),
|
||||||
"day" => date.strftime("%d"),
|
"day" => date.strftime("%d"),
|
||||||
"title" => slug
|
"title" => slug,
|
||||||
|
"categories" => categories.sort.join('/')
|
||||||
}.inject(template) { |result, token|
|
}.inject(template) { |result, token|
|
||||||
result.gsub(/:#{token.first}/, token.last)
|
result.gsub(/:#{token.first}/, token.last)
|
||||||
}
|
}.gsub(/\/\//, "/")
|
||||||
end
|
end
|
||||||
|
|
||||||
# The UID for this post (useful in feeds)
|
# The UID for this post (useful in feeds)
|
||||||
|
@ -144,7 +139,7 @@ module Jekyll
|
||||||
#
|
#
|
||||||
# Returns <String>
|
# Returns <String>
|
||||||
def id
|
def id
|
||||||
self.dir + self.slug
|
File.join(self.dir, self.slug)
|
||||||
end
|
end
|
||||||
|
|
||||||
# Calculate related posts.
|
# Calculate related posts.
|
||||||
|
@ -195,7 +190,7 @@ module Jekyll
|
||||||
|
|
||||||
path = File.join(dest, self.url)
|
path = File.join(dest, self.url)
|
||||||
|
|
||||||
if self.site.permalink_style == :pretty
|
if template[/\.html$/].nil?
|
||||||
FileUtils.mkdir_p(path)
|
FileUtils.mkdir_p(path)
|
||||||
path = File.join(path, "index.html")
|
path = File.join(path, "index.html")
|
||||||
end
|
end
|
||||||
|
|
|
@ -25,6 +25,7 @@ class TestPost < Test::Unit::TestCase
|
||||||
assert !Post.valid?("blah")
|
assert !Post.valid?("blah")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
context "processing posts" do
|
context "processing posts" do
|
||||||
setup do
|
setup do
|
||||||
@post = Post.allocate
|
@post = Post.allocate
|
||||||
|
@ -41,6 +42,8 @@ class TestPost < Test::Unit::TestCase
|
||||||
assert_equal Time.parse("2008-10-19"), @post.date
|
assert_equal Time.parse("2008-10-19"), @post.date
|
||||||
assert_equal "foo-bar", @post.slug
|
assert_equal "foo-bar", @post.slug
|
||||||
assert_equal ".textile", @post.ext
|
assert_equal ".textile", @post.ext
|
||||||
|
assert_equal "/2008/10/19", @post.dir
|
||||||
|
assert_equal "/2008/10/19/foo-bar", @post.id
|
||||||
end
|
end
|
||||||
|
|
||||||
should "create url based on date and title" do
|
should "create url based on date and title" do
|
||||||
|
@ -55,11 +58,10 @@ class TestPost < Test::Unit::TestCase
|
||||||
@post.read_yaml(@source, file)
|
@post.read_yaml(@source, file)
|
||||||
|
|
||||||
assert_equal "my_category/permalinked-post", @post.permalink
|
assert_equal "my_category/permalinked-post", @post.permalink
|
||||||
assert_equal "my_category/", @post.dir
|
assert_equal "my_category", @post.dir
|
||||||
assert_equal "my_category/permalinked-post", @post.url
|
assert_equal "my_category/permalinked-post", @post.url
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
context "with site wide permalink" do
|
context "with site wide permalink" do
|
||||||
setup do
|
setup do
|
||||||
@post.categories = []
|
@post.categories = []
|
||||||
|
@ -71,11 +73,36 @@ class TestPost < Test::Unit::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
should "process the url correctly" do
|
should "process the url correctly" do
|
||||||
assert_equal "/:year/:month/:day/:title.html", @post.template
|
assert_equal "/:categories/:year/:month/:day/:title.html", @post.template
|
||||||
assert_equal "/2008/10/19/foo-bar.html", @post.url
|
assert_equal "/2008/10/19/foo-bar.html", @post.url
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context "with unspecified (date) style and a category" do
|
||||||
|
setup do
|
||||||
|
@post.categories << "beer"
|
||||||
|
@post.process(@fake_file)
|
||||||
|
end
|
||||||
|
|
||||||
|
should "process the url correctly" do
|
||||||
|
assert_equal "/:categories/:year/:month/:day/:title.html", @post.template
|
||||||
|
assert_equal "/beer/2008/10/19/foo-bar.html", @post.url
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "with unspecified (date) style and categories" do
|
||||||
|
setup do
|
||||||
|
@post.categories << "food"
|
||||||
|
@post.categories << "beer"
|
||||||
|
@post.process(@fake_file)
|
||||||
|
end
|
||||||
|
|
||||||
|
should "process the url correctly" do
|
||||||
|
assert_equal "/:categories/:year/:month/:day/:title.html", @post.template
|
||||||
|
assert_equal "/beer/food/2008/10/19/foo-bar.html", @post.url
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context "with none style" do
|
context "with none style" do
|
||||||
setup do
|
setup do
|
||||||
@post.site.permalink_style = :none
|
@post.site.permalink_style = :none
|
||||||
|
@ -83,7 +110,7 @@ class TestPost < Test::Unit::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
should "process the url correctly" do
|
should "process the url correctly" do
|
||||||
assert_equal "/:title.html", @post.template
|
assert_equal "/:categories/:title.html", @post.template
|
||||||
assert_equal "/foo-bar.html", @post.url
|
assert_equal "/foo-bar.html", @post.url
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -95,7 +122,7 @@ class TestPost < Test::Unit::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
should "process the url correctly" do
|
should "process the url correctly" do
|
||||||
assert_equal "/:year/:month/:day/:title", @post.template
|
assert_equal "/:categories/:year/:month/:day/:title", @post.template
|
||||||
assert_equal "/2008/10/19/foo-bar", @post.url
|
assert_equal "/2008/10/19/foo-bar", @post.url
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -198,6 +225,16 @@ class TestPost < Test::Unit::TestCase
|
||||||
assert File.exists?(File.join(dest_dir, '2008', '10', '18', 'foo-bar.html'))
|
assert File.exists?(File.join(dest_dir, '2008', '10', '18', 'foo-bar.html'))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
should "write properly without html extension" do
|
||||||
|
post = setup_post("2008-10-18-foo-bar.textile")
|
||||||
|
post.site.permalink_style = ":title"
|
||||||
|
do_render(post)
|
||||||
|
post.write(dest_dir)
|
||||||
|
|
||||||
|
assert File.directory?(dest_dir)
|
||||||
|
assert File.exists?(File.join(dest_dir, 'foo-bar', 'index.html'))
|
||||||
|
end
|
||||||
|
|
||||||
should "insert data" do
|
should "insert data" do
|
||||||
post = setup_post("2008-11-21-complex.textile")
|
post = setup_post("2008-11-21-complex.textile")
|
||||||
do_render(post)
|
do_render(post)
|
||||||
|
|
Loading…
Reference in New Issue