From 33dbb781375846c7b9cb8c6df18f662d7a403557 Mon Sep 17 00:00:00 2001 From: Tom Preston-Werner Date: Sun, 19 Oct 2008 22:46:08 -0700 Subject: [PATCH] got pages working --- lib/autoblog.rb | 1 + lib/autoblog/page.rb | 63 ++++++++++++++++++++++++++++++++++++++++++++ lib/autoblog/site.rb | 18 +++++++++++++ 3 files changed, 82 insertions(+) create mode 100644 lib/autoblog/page.rb diff --git a/lib/autoblog.rb b/lib/autoblog.rb index cea9bf05..2e3ab13b 100644 --- a/lib/autoblog.rb +++ b/lib/autoblog.rb @@ -16,6 +16,7 @@ require 'redcloth' # internal requires require 'autoblog/site' require 'autoblog/post' +require 'autoblog/page' module AutoBlog VERSION = '1.0.0' diff --git a/lib/autoblog/page.rb b/lib/autoblog/page.rb new file mode 100644 index 00000000..07b419b4 --- /dev/null +++ b/lib/autoblog/page.rb @@ -0,0 +1,63 @@ +module AutoBlog + + class Page + attr_accessor :ext + attr_accessor :data, :content + + def initialize(base, dir, name) + @base = base + @dir = dir + @name = name + + self.process(name) + self.read_yaml(base, dir, name) + self.set_defaults + self.transform + end + + def process(name) + self.ext = File.extname(name) + end + + def read_yaml(base, dir, name) + self.content = File.read(File.join(base, dir, name)) + + if self.content =~ /^(---\n.*?)\n---\n/ + self.content = self.content[($1.size + 5)..-1] + + self.data = YAML.load($1) + end + end + + def set_defaults + self.data["layout"] ||= "default" + end + + def transform + if self.ext == "textile" + self.ext = "html" + self.content = RedCloth.new(self.content).to_html + end + end + + def add_layout(layouts) + payload = {"page" => self.data} + self.content = Liquid::Template.parse(self.content).render(payload) + + layout = layouts[self.data["layout"]] || self.content + payload = {"content" => self.content, "page" => self.data} + + self.content = Liquid::Template.parse(layout).render(payload) + end + + def write(dest) + FileUtils.mkdir_p(File.join(dest, @dir)) + + path = File.join(dest, @dir, @name) + File.open(path, 'w') do |f| + f.write(self.content) + end + end + end + +end \ No newline at end of file diff --git a/lib/autoblog/site.rb b/lib/autoblog/site.rb index cae52899..d57e0c9f 100644 --- a/lib/autoblog/site.rb +++ b/lib/autoblog/site.rb @@ -15,6 +15,7 @@ module AutoBlog self.read_layouts self.read_posts self.write_posts + self.transform_pages end def read_layouts @@ -50,6 +51,23 @@ module AutoBlog post.write(self.dest) end end + + def transform_pages(dir = '') + base = File.join(self.source, dir) + entries = Dir.entries(base) + entries = entries.reject { |e| %w{_layouts posts}.include?(e) } + entries = entries.reject { |e| e[0..0] == '.' } + + entries.each do |f| + if File.directory?(File.join(base, f)) + transform_pages(File.join(dir, f)) + else + page = Page.new(self.source, dir, f) + page.add_layout(self.layouts) + page.write(self.dest) + end + end + end end end \ No newline at end of file