class Middleman::Blog::CalendarPages

A sitemap plugin that adds month/day/year pages to the sitemap based on the dates of blog articles.

Public Class Methods

new(app, blog_controller) click to toggle source
# File lib/middleman-blog/calendar_pages.rb, line 10
def initialize(app, blog_controller)
  @sitemap = app.sitemap
  @blog_controller = blog_controller
  @blog_data = blog_controller.data

  blog_options = blog_controller.options
  @day_link_template = uri_template blog_options.day_link
  @month_link_template = uri_template blog_options.month_link
  @year_link_template = uri_template blog_options.year_link
  @day_template = blog_options.day_template
  @month_template = blog_options.month_template
  @year_template = blog_options.year_template
  @generate_year_pages = blog_options.generate_year_pages
  @generate_month_pages = blog_options.generate_month_pages
  @generate_day_pages = blog_options.generate_day_pages
end

Public Instance Methods

manipulate_resource_list(resources) click to toggle source

Update the main sitemap resource list @return [Array<Middleman::Sitemap::Resource>]

# File lib/middleman-blog/calendar_pages.rb, line 46
def manipulate_resource_list(resources)
  new_resources = []

  # Set up date pages if the appropriate templates have been specified
  @blog_data.articles.group_by { |a| a.date.year }.each do |year, year_articles|
    new_resources << year_page_resource(year, year_articles) if @generate_year_pages && @year_template

    year_articles.group_by { |a| a.date.month }.each do |month, month_articles|
      new_resources << month_page_resource(year, month, month_articles) if @generate_month_pages && @month_template

      month_articles.group_by { |a| a.date.day }.each do |day, day_articles|
        new_resources << day_page_resource(year, month, day, day_articles) if @generate_day_pages && @day_template
      end
    end
  end

  resources + new_resources
end

Private Instance Methods

day_page_resource(year, month, day, day_articles) click to toggle source
# File lib/middleman-blog/calendar_pages.rb, line 92
def day_page_resource(year, month, day, day_articles)
  Sitemap::ProxyResource.new(@sitemap, link(year, month, day), @day_template).tap do |p|
    p.add_metadata locals: {
      'page_type' => 'day',
      'year' => year,
      'month' => month,
      'day' => day,
      'articles' => day_articles,
      'blog_controller' => @blog_controller
    }
  end
end
month_page_resource(year, month, month_articles) click to toggle source
# File lib/middleman-blog/calendar_pages.rb, line 80
def month_page_resource(year, month, month_articles)
  Sitemap::ProxyResource.new(@sitemap, link(year, month), @month_template).tap do |p|
    p.add_metadata locals: {
      'page_type' => 'month',
      'year' => year,
      'month' => month,
      'articles' => month_articles,
      'blog_controller' => @blog_controller
    }
  end
end
year_page_resource(year, year_articles) click to toggle source
# File lib/middleman-blog/calendar_pages.rb, line 67
def year_page_resource(year, year_articles)
  Sitemap::ProxyResource.new(@sitemap, link(year), @year_template).tap do |p|
    # Add metadata in local variables so it's accessible to
    # later extensions
    p.add_metadata locals: {
      'page_type' => 'year',
      'year' => year,
      'articles' => year_articles,
      'blog_controller' => @blog_controller
    }
  end
end