Fix site payload available to files

This commit is contained in:
Chad Ingram 2009-01-23 04:48:43 -08:00
parent 4b2fa43642
commit d9b183f998
4 changed files with 36 additions and 17 deletions

View File

@ -2,7 +2,7 @@ module Jekyll
class Site
attr_accessor :source, :dest
attr_accessor :layouts, :posts
attr_accessor :layouts, :posts, :categories
# Initialize the site
# +source+ is String path to the source directory containing
@ -16,6 +16,7 @@ module Jekyll
self.dest = dest
self.layouts = {}
self.posts = []
self.categories = Hash.new { |hash, key| hash[key] = Array.new }
end
# Do the actual work of processing the site and generating the
@ -63,6 +64,7 @@ module Jekyll
if Post.valid?(f)
post = Post.new(self.source, dir, f)
self.posts << post
post.categories.each { |c| self.categories[c] << post }
end
end
@ -72,6 +74,7 @@ module Jekyll
end
self.posts.sort!
self.categories.values.map { |cats| cats.sort! { |a, b| b <=> a} }
rescue Errno::ENOENT => e
# ignore missing layout dir
end
@ -101,6 +104,8 @@ module Jekyll
entries = entries.reject do |e|
(e != '_posts') and ['.', '_'].include?(e[0..0]) unless ['.htaccess'].include?(e)
end
directories = entries.select { |e| File.directory?(File.join(base, e)) }
files = entries.reject { |e| File.directory?(File.join(base, e)) }
# we need to make sure to process _posts *first* otherwise they
# might not be available yet to other templates as {{ site.posts }}
@ -108,23 +113,24 @@ module Jekyll
entries.delete('_posts')
read_posts(dir)
end
entries.each do |f|
if File.directory?(File.join(base, f))
next if self.dest.sub(/\/$/, '') == File.join(base, f)
transform_pages(File.join(dir, f))
else
first3 = File.open(File.join(self.source, dir, f)) { |fd| fd.read(3) }
if first3 == "---"
# file appears to have a YAML header so process it as a page
page = Page.new(self.source, dir, f)
page.render(self.layouts, site_payload)
page.write(self.dest)
[directories, files].each do |entries|
entries.each do |f|
if File.directory?(File.join(base, f))
next if self.dest.sub(/\/$/, '') == File.join(base, f)
transform_pages(File.join(dir, f))
else
# otherwise copy the file without transforming it
FileUtils.mkdir_p(File.join(self.dest, dir))
FileUtils.cp(File.join(self.source, dir, f), File.join(self.dest, dir, f))
first3 = File.open(File.join(self.source, dir, f)) { |fd| fd.read(3) }
if first3 == "---"
# file appears to have a YAML header so process it as a page
page = Page.new(self.source, dir, f)
page.render(self.layouts, site_payload)
page.write(self.dest)
else
# otherwise copy the file without transforming it
FileUtils.mkdir_p(File.join(self.dest, dir))
FileUtils.cp(File.join(self.source, dir, f), File.join(self.dest, dir, f))
end
end
end
end

View File

@ -0,0 +1,6 @@
---
layout: default
title: Categories
---
Categories _should_ work

View File

@ -0,0 +1,6 @@
---
layout: default
title: Categories
---
Categories _should_ work. Even if ordered after index.

View File

@ -11,6 +11,7 @@ class TestGeneratedSite < Test::Unit::TestCase
def test_site_posts_in_index
# confirm that {{ site.posts }} is working
puts @s.posts.size
assert @index.include?("#{@s.posts.size} Posts")
end