Sha256: cb373755ad1626147d3160433ce7789c768815f278b1ed97c8c8e169c9a18c5e

Contents?: true

Size: 1.8 KB

Versions: 3

Compression:

Stored size: 1.8 KB

Contents

require 'tilt/jbuilder'
# Rabl.register!

module Alula
  class FeedJSON < 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("feedjson.recent_posts", locale: lang)]}]
      posts = Hash[
        @languages.collect do |lang, posts|
          [ lang, posts.slice(0, self.options.items) ]
        end
      ]
      
      @feedjson = 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.json",
      },
      :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 << @feedjson
      
      # Add link to head
      Alula::Plugin.addon(:head, ->(context) {
        "<link rel=\"alternate\" type=\"application/json\" title=\"FeedJSON\" href=\"#{context.url_for(@feedjson.url(context.locale))}\">"
      })
    end
  end
end

Alula::Generator.register :feedjson, Alula::FeedJSON

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
alula-0.4.27 lib/alula/generators/feedjson.rb
alula-0.4.26 lib/alula/generators/feedjson.rb
alula-0.4.25 lib/alula/generators/feedjson.rb