module Jekyll class FeedsGenerator < Generator safe true def gen_categories_index(site) categories_index = {} site.collections.each do |collection| collection_name, collection_documents = collection collection_documents.docs.each do |document| lang = document.data["lang"] categories = document.data["eu_categories"] if categories != nil categories.split(",").each do |category| categories_index[collection_name] ||= {} categories_index[collection_name][lang] ||= {} categories_index[collection_name][lang][category] ||= [] categories_index[collection_name][lang][category] << document end end end end categories_index end def feeds_by_category(site) feed_pages = [] gen_categories_index(site).each do |collection_name, langs| langs.each do |lang, categories| categories.each do |category_name, articles| category = category_name.gsub(/ /, '-') feed_name = "feed.#{collection_name}-by-category.#{lang}.#{category}.atom" page = PageWithoutAFile.new(site, site.source, "", feed_name) page.content = <<-EOF {% include feed.atom entries=site.#{collection_name} kind="#{collection_name}" lang="#{lang}" categories_filter="#{category_name}" %} EOF feed_pages << page end end end feed_pages end def global_feeds(site) feed_pages = [] langs = site.config['langs'] collections = site.config['collections'].keys langs.each do |lang| collections.each do |collection| feed_name = "feed.#{collection}.#{lang}.atom" page = PageWithoutAFile.new(site, site.source, "", feed_name) page.content = <<-EOF {% include feed.atom entries=site.#{collection} kind="#{collection}" lang="#{lang}" %} EOF feed_pages << page end end feed_pages end def generate(site) site.pages.concat(feeds_by_category(site)) site.pages.concat(global_feeds(site)) end end class PageWithoutAFile < Jekyll::Page def read_yaml(*) @data ||= {} end end end