Sha256: 8a6e21983ffa9d3ad70dc0cd0c30922b753418f94bdee5237fd48ab9291599dc

Contents?: true

Size: 1.88 KB

Versions: 13

Compression:

Stored size: 1.88 KB

Contents

require 'builder'

module Alula
  class FeedBuilder < Generator
    def allow_compressing?
      :normal
    end
    
    def generate
      # Loop all languages and count posts per language
      @languages = {}
      (self.site.content.posts + self.site.content.pages).each do |post|
        post.languages.each do |lang|
          @languages[lang] ||= []
          @languages[lang] << post
        end
      end
      titles = Hash[@languages.collect {|lang, x| [lang, I18n.t("feedbuilder.recent_posts", locale: lang)]}]
      posts = Hash[
        @languages.collect do |lang, posts|
          [ lang, posts.slice(0, self.options.items) ]
        end
      ]
      
      @feed_page = Alula::Content::Page.new({
        generator: self,
        posts: posts,
        title: titles,
        name: self.options.name,
        slug: self.options.slug,
        sidebar: false,
        template: self.options.template,
        site: self.site,
        layout: "feed",
      },
      :previous => ->(hook, locale = nil) { nil },
      :next => ->(hook, locale = nil) { nil },
      :navigation => ->(hook, locale = nil) { nil },
      :write => ->(hook, locale = nil) {
        begin
          _old_renderer = self.posts.collect{|p| p.metadata.renderer}
          self.posts.cycle(1) { |p| p.flush; p.metadata.renderer = self.generator;}
          hook.call
        ensure
          self.posts.cycle(1) {|p| p.metadata.renderer = _old_renderer.shift }
        end
      },
      )
      self.site.content.pages << @feed_page
      
      # Add link to head
      Alula::Plugin.addon(:head, ->(context) {
        "<link rel=\"alternate\" type=\"application/rss+xml\" title=\"RSS\" href=\"#{context.url_for(@feed_page.url(context.locale))}\">"
      })
      # -# %link{rel: "alternate", type: "application/rss+xml", title: "RSS", href: "/feed.xml"}
    end
  end
end

Alula::Generator.register :feedbuilder, Alula::FeedBuilder

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
alula-0.4.18 lib/alula/generators/feedbuilder.rb
alula-0.4.17 lib/alula/generators/feedbuilder.rb
alula-0.4.16 lib/alula/generators/feedbuilder.rb
alula-0.4.15 lib/alula/generators/feedbuilder.rb
alula-0.4.14 lib/alula/generators/feedbuilder.rb
alula-0.4.13 lib/alula/generators/feedbuilder.rb
alula-0.4.12 lib/alula/generators/feedbuilder.rb
alula-0.4.11 lib/alula/generators/feedbuilder.rb
alula-0.4.11a lib/alula/generators/feedbuilder.rb
alula-0.4.10 lib/alula/generators/feedbuilder.rb
alula-0.4.9 lib/alula/generators/feedbuilder.rb
alula-0.4.8 lib/alula/generators/feedbuilder.rb
alula-0.4.7 lib/alula/generators/feedbuilder.rb