Sha256: 4e56025c154d2d8e9939dfea0dd043e197f95600491a11cb2e6da57f62bd1d44

Contents?: true

Size: 1.52 KB

Versions: 2

Compression:

Stored size: 1.52 KB

Contents

require 'middleman-blog/uri_templates'

module Middleman
  module Blog

    # This adds new summary pages for arbitrarily defined blog article properties
    class CustomPages
      include UriTemplates

      attr_reader :property

      def initialize(property, app, controller, options)
        @property = property
        @sitemap = app.sitemap
        @blog_controller = controller
        @blog_data = controller.data
        @link_template = uri_template options[:link]
        @page_template = options[:template]
      end

      # Return a path to the page for this property value.
      #
      # @param [String] value
      def link(value)
        apply_uri_template @link_template, property => safe_parameterize(value)
      end

      def manipulate_resource_list(resources)
        articles_by_property = @blog_data.articles.
          select {|a| a.data[property] }.
          group_by {|a| a.data[property] }
        resources + articles_by_property.map do |property_value, articles|
          build_resource(link(property_value), property_value, articles)
        end
      end

      private

      def build_resource(path, value, articles)
        articles = articles.sort_by(&:date).reverse
        Sitemap::ProxyResource.new(@sitemap, path, @page_template).tap do |p|
          p.add_metadata locals: {
            "page_type"       => property.to_s,
            property          => value,
            "articles"        => articles,
            "blog_controller" => @blog_controller
          }
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
middleman-blog-4.0.1 lib/middleman-blog/custom_pages.rb
middleman-blog-4.0.0 lib/middleman-blog/custom_pages.rb