class Middleman::BlogExtension

Attributes

calendar_pages[R]

@return [CalendarPages] calendar page handler for this blog

custom_pages[R]

@return [Hash<CustomPages>] custom pages handlers for this blog, indexed by property name

data[R]

@return [BlogData] blog data for this blog, which has all information about the blog articles

name[R]

@return [Symbol] the name of this blog (autogenerated if not provided).

paginator[R]

@return [Paginator] pagination handler for this blog

tag_pages[R]

@return [TagPages] tag page handler for this blog

Public Class Methods

new(app, options_hash = {}, &block) click to toggle source
Calls superclass method
# File lib/middleman-blog/extension.rb, line 66
def initialize(app, options_hash = {}, &block)
  super

  @custom_pages = {}

  # NAME is the name of this particular blog, and how you reference it from #blog_controller or frontmatter.
  @name = options.name.to_sym if options.name

  # Allow one setting to set all the calendar templates
  if options.calendar_template
    options.year_template  ||= options.calendar_template
    options.month_template ||= options.calendar_template
    options.day_template   ||= options.calendar_template
  end

  # If "prefix" option is specified, all other paths are relative to it.
  if options.prefix
    options.prefix = "/#{options.prefix}" unless options.prefix.start_with? '/'
    options.permalink = File.join(options.prefix, options.permalink)
    options.sources = File.join(options.prefix, options.sources)
    options.taglink = File.join(options.prefix, options.taglink)
    options.year_link = File.join(options.prefix, options.year_link)
    options.month_link = File.join(options.prefix, options.month_link)
    options.day_link = File.join(options.prefix, options.day_link)

    options.custom_collections.each do |_key, opts|
      opts[:link] = File.join(options.prefix, opts[:link])
    end
  end
end

Public Instance Methods

after_configuration() click to toggle source
# File lib/middleman-blog/extension.rb, line 97
def after_configuration
  @name ||= begin
    found_name = nil

    app.extensions[:blog].values.each_with_index do |ext, i|
      found_name = "blog#{i + 1}" if ext == self
    end

    found_name
  end

  # TODO: break up into private methods?

  @app.ignore(options.calendar_template) if options.calendar_template
  @app.ignore(options.year_template) if options.year_template
  @app.ignore(options.month_template) if options.month_template
  @app.ignore(options.day_template) if options.day_template
  @app.ignore options.tag_template if options.tag_template

  # Make sure ActiveSupport's TimeZone stuff has something to work with,
  # allowing people to set their desired time zone via Time.zone or
  # set :time_zone
  Time.zone = app.config[:time_zone] if app.config[:time_zone]
  time_zone = Time.zone || 'UTC'
  zone_default = Time.find_zone!(time_zone)
  raise 'Value assigned to time_zone not recognized.' unless zone_default

  Time.zone_default = zone_default

  # Initialize blog with options
  @data = Blog::BlogData.new(@app, self, options)

  @app.sitemap.register_resource_list_manipulator(:"blog_#{name}_articles", @data)

  if options.tag_template
    @app.ignore options.tag_template

    require 'middleman-blog/tag_pages'
    @tag_pages = Blog::TagPages.new(@app, self)
    @app.sitemap.register_resource_list_manipulator(:"blog_#{name}_tags", @tag_pages)
  end

  if options.year_template || options.month_template || options.day_template
    require 'middleman-blog/calendar_pages'
    @calendar_pages = Blog::CalendarPages.new(@app, self)
    @app.sitemap.register_resource_list_manipulator(:"blog_#{name}_calendar", @calendar_pages)
  end

  if options.custom_collections
    require 'middleman-blog/custom_pages'
    register_custom_pages
  end

  if options.paginate
    require 'middleman-blog/paginator'
    @paginator = Blog::Paginator.new(@app, self)
    @app.sitemap.register_resource_list_manipulator(:"blog_#{name}_paginate", @paginator)
  end

  logger.info "== Blog Sources: #{options.sources} (:prefix + :sources)"
end

Private Instance Methods

register_custom_pages() click to toggle source

Register any custom page collections that may be set in the config

A custom resource list manipulator will be generated for each key in the custom collections hash.

The following will collect posts on the “category” frontmatter property:

```
activate :blog do |blog|
  blog.custom_collections = {
    category: {
      link: "/categories/:category.html",
      template: "/category.html"
    }
  }
end
```

Category pages in the example above will use the category.html as a template file and it will be ignored when building.

# File lib/middleman-blog/extension.rb, line 180
def register_custom_pages
  options.custom_collections.each do |property, options|
    @app.ignore options[:template]

    @custom_pages[property] = Blog::CustomPages.new(property, @app, self, options)
    @app.sitemap.register_resource_list_manipulator(:"blog_#{name}_#{property}", @custom_pages[property])

    Blog::Helpers.generate_custom_helper(property)
  end
end