Module: Middleman::Blog

Defined in:
lib/middleman-blog/version.rb,
lib/middleman-blog/template.rb,
lib/middleman-blog/blog_data.rb,
lib/middleman-blog/paginator.rb,
lib/middleman-blog/tag_pages.rb,
lib/middleman-blog/blog_article.rb,
lib/middleman-blog/custom_pages.rb,
lib/middleman-blog/extension_3_0.rb,
lib/middleman-blog/calendar_pages.rb

Defined Under Namespace

Modules: BlogArticle, Helpers Classes: BlogData, CalendarPages, CustomPages, Options, Paginator, TagPages, Template

Constant Summary collapse

VERSION =
"3.4.1"

Class Method Summary collapse

Class Method Details

.registered(app, options_hash = {}) {|options| ... } ⇒ Object Also known as: included

Yields:

  • (options)


41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
# File 'lib/middleman-blog/extension_3_0.rb', line 41

def registered(app, options_hash={}, &block)
  require 'middleman-blog/blog_data'
  require 'middleman-blog/blog_article'
  require 'active_support/core_ext/time/zones'

  app.send :include, Helpers

  options = Options.new(options_hash)
  yield options if block_given?

  options.permalink            ||= "/:year/:month/:day/:title.html"
  options.sources              ||= ":year-:month-:day-:title.html"
  options.taglink              ||= "tags/:tag.html"
  options.layout               ||= "layout"
  options.summary_separator    ||= /(READMORE)/
  options.summary_length       ||= 250
  options.year_link            ||= "/:year.html"
  options.month_link           ||= "/:year/:month.html"
  options.day_link             ||= "/:year/:month/:day.html"
  options.default_extension    ||= ".markdown"
  options.paginate             ||= false
  options.per_page             ||= 10
  options.page_link            ||= "page/:num"
  options.publish_future_dated ||= false
  options.custom_collections   ||= {}

  # optional: :tag_template
  # optional: :year_template
  # optional: :month_template
  # optional: :day_template
  # 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

  app.after_configuration do
    # 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 = self.time_zone if self.respond_to?(:time_zone)
    time_zone = Time.zone if Time.zone
    zone_default = Time.find_zone!(time_zone || 'UTC')
    unless zone_default
      raise 'Value assigned to time_zone not recognized.'
    end
    Time.zone_default = zone_default

    ignore(options.calendar_template) if options.calendar_template
    ignore(options.year_template) if options.year_template
    ignore(options.month_template) if options.month_template
    ignore(options.day_template) if options.day_template

    # Initialize blog with options
    blog(options)

    sitemap.register_resource_list_manipulator(
                                               :blog_articles,
                                               blog,
                                               false
                                               )

    if options.tag_template
      ignore options.tag_template

      require 'middleman-blog/tag_pages'
      sitemap.register_resource_list_manipulator(
                                                 :blog_tags,
                                                 TagPages.new(self),
                                                 false
                                                 )
    end

    if options.year_template ||
        options.month_template ||
        options.day_template

      require 'middleman-blog/calendar_pages'
      sitemap.register_resource_list_manipulator(
                                                 :blog_calendar,
                                                 CalendarPages.new(self),
                                                 false
                                                 )
    end

    if options.paginate
      require 'middleman-blog/paginator'
      sitemap.register_resource_list_manipulator(
                                                 :blog_paginate,
                                                 Paginator.new(self),
                                                 false
                                                 )
    end

    if options.custom_collections
      require 'middleman-blog/custom_pages'
      options.custom_collections.each do |property, options|
        ignore options[:template]
        sitemap.register_resource_list_manipulator(
                                                    :"blog_#{property}",
                                                    CustomPages.new(property, self),
                                                    false
                                                    )

        m = Module.new
        m.module_eval(%Q{
          def #{property}_path(value, key = nil)
            sitemap.find_resource_by_path(CustomPages.link(self.blog.options, :#{property}, value)).try(:url)
          end
        })

        self.class.send(:include, m)
      end
    end
  end
end