Sha256: d577786b7ded0ee5c6177bd91097bb9e4eddb58a369af64856f1692e69b20df7

Contents?: true

Size: 1.55 KB

Versions: 3

Compression:

Stored size: 1.55 KB

Contents

module JekyllFeed
  class Generator < Jekyll::Generator
    safe true
    priority :lowest

    # Main plugin action, called by Jekyll-core
    def generate(site)
      @site = site
      return if file_exists?(feed_path)
      @site.pages << content_for_file(feed_path, feed_source_path)
    end

    private

    # Matches all whitespace that follows
    #   1. A '>', which closes an XML tag or
    #   2. A '}', which closes a Liquid tag
    # We will strip all of this whitespace to minify the template
    MINIFY_REGEX = %r!(?<=>|})\s+!

    # Path to feed from config, or feed.xml for default
    def feed_path
      if @site.config["feed"] && @site.config["feed"]["path"]
        @site.config["feed"]["path"]
      else
        "feed.xml"
      end
    end

    # Path to feed.xml template file
    def feed_source_path
      File.expand_path "./feed.xml", File.dirname(__FILE__)
    end

    # Checks if a file already exists in the site source
    def file_exists?(file_path)
      if @site.respond_to?(:in_source_dir)
        File.exist? @site.in_source_dir(file_path)
      else
        File.exist? Jekyll.sanitized_path(@site.source, file_path)
      end
    end

    # Generates contents for a file
    def content_for_file(file_path, file_source_path)
      file = PageWithoutAFile.new(@site, File.dirname(__FILE__), "", file_path)
      file.content = File.read(file_source_path).gsub(MINIFY_REGEX, "")
      file.data["layout"] = nil
      file.data["sitemap"] = false
      file.data["xsl"] = file_exists?("feed.xslt.xml")
      file.output
      file
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
jekyll-feed-0.9.2 lib/jekyll-feed/generator.rb
jekyll-feed-0.9.1 lib/jekyll-feed/generator.rb
jekyll-feed-0.9.0 lib/jekyll-feed/generator.rb