From 66916f57a71b3d7aeb1465b049ed701fbf65a68c Mon Sep 17 00:00:00 2001
From: Mikkel Hoegh <mikkel@hoegh.org>
Date: Wed, 5 Oct 2011 00:24:13 +0200
Subject: First attempt at creating per-category Atom feeds.

---
 plugins/category_generator.rb | 36 ++++++++++++++++++++++++++++++++++++
 1 file changed, 36 insertions(+)

(limited to 'plugins')

diff --git a/plugins/category_generator.rb b/plugins/category_generator.rb
index d9357bc8..bb5fd329 100644
--- a/plugins/category_generator.rb
+++ b/plugins/category_generator.rb
@@ -48,6 +48,35 @@ module Jekyll
 
   end
 
+  # The CategoryFeed class creates an Atom feed for the specified category.
+  class CategoryFeed < Page
+
+    # Initializes a new CategoryFeed.
+    #
+    #  +base+         is the String path to the <source>.
+    #  +category_dir+ is the String path between <source> and the category folder.
+    #  +category+     is the category currently being processed.
+    def initialize(site, base, category_dir, category)
+      @site = site
+      @base = base
+      @dir  = category_dir
+      @name = 'atom.xml'
+      self.process(@name)
+      # Read the YAML data from the layout page.
+      self.read_yaml(File.join(base, '_includes/custom'), 'category_feed.xml')
+      self.data['category']    = category
+      # Set the title for this page.
+      title_prefix             = site.config['category_title_prefix'] || 'Category: '
+      self.data['title']       = "#{title_prefix}#{category}"
+      # Set the meta-description for this page.
+      meta_description_prefix  = site.config['category_meta_description_prefix'] || 'Category: '
+      self.data['description'] = "#{meta_description_prefix}#{category}"
+
+      # Set the correct feed URL.
+      self.data['feed_url'] = "#{category_dir}/#{name}"
+    end
+
+  end
 
   # The Site class is a built-in Jekyll class with access to global site config information.
   class Site
@@ -63,6 +92,13 @@ module Jekyll
       index.write(self.dest)
       # Record the fact that this page has been added, otherwise Site::cleanup will remove it.
       self.pages << index
+
+      # Create an Atom-feed for each index.
+      feed = CategoryFeed.new(self, self.source, category_dir, category)
+      feed.render(self.layouts, site_payload)
+      feed.write(self.dest)
+      # Record the fact that this page has been added, otherwise Site::cleanup will remove it.
+      self.pages << feed
     end
 
     # Loops through the list of category pages and processes each one.
-- 
cgit v1.2.1