Class: Middleman::Blog::BlogData

Inherits:
Object
  • Object
show all
Extended by:
Gem::Deprecate
Includes:
UriTemplates
Defined in:
lib/middleman-blog/blog_data.rb

Overview

A store of all the blog articles in the site, with accessors for the articles by various dimensions. Accessed via “blog” in templates.

Constant Summary

DEFAULT_FILTER =
proc {|a| a}

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from UriTemplates

apply_uri_template, date_to_params, extract_directory_path, extract_params, safe_parameterize, uri_template

Instance Attribute Details

#controllerObject (readonly)

Returns the value of attribute controller



25
26
27
# File 'lib/middleman-blog/blog_data.rb', line 25

def controller
  @controller
end

#optionsThor::CoreExt::HashWithIndifferentAccess (readonly)

The configured options for this blog

Returns:

  • (Thor::CoreExt::HashWithIndifferentAccess)


23
24
25
# File 'lib/middleman-blog/blog_data.rb', line 23

def options
  @options
end

#source_templateURITemplate (readonly)

A URITemplate for the source file path relative to :source_dir

Returns:

  • (URITemplate)


19
20
21
# File 'lib/middleman-blog/blog_data.rb', line 19

def source_template
  @source_template
end

Instance Method Details

#articlesArray<Middleman::Sitemap::Resource>

A list of all blog articles, sorted by descending date

Returns:

  • (Array<Middleman::Sitemap::Resource>)


50
51
52
# File 'lib/middleman-blog/blog_data.rb', line 50

def articles
  @_articles.select(&(options.filter || DEFAULT_FILTER)).sort_by( &:date ).reverse
end

#articles_by_locale(locale = ::I18n.locale) ⇒ Array<Middleman::Sitemap::Resource>

A list of all blog articles with the given language, sorted by descending date

Parameters:

  • locale (Symbol) (defaults to: ::I18n.locale)

    Language to match (optional, defaults to I18n.locale).

Returns:

  • (Array<Middleman::Sitemap::Resource>)


75
76
77
78
# File 'lib/middleman-blog/blog_data.rb', line 75

def articles_by_locale( locale = ::I18n.locale )
    locale = locale.to_sym if locale.kind_of? String
    articles.select { | article | article.locale == locale }
end

#extract_source_params(path) ⇒ Object



101
102
103
# File 'lib/middleman-blog/blog_data.rb', line 101

def extract_source_params(path)
  @_parsed_url_cache[:source][path] ||= extract_params(@source_template, path)
end

#extract_subdir_params(path) ⇒ Object



105
106
107
# File 'lib/middleman-blog/blog_data.rb', line 105

def extract_subdir_params(path)
  @_parsed_url_cache[:subdir][path] ||= extract_params(@subdir_template, path)
end

#inspectObject



167
168
169
# File 'lib/middleman-blog/blog_data.rb', line 167

def inspect
  "#<Middleman::Blog::BlogData: #{articles.inspect}>"
end

#local_articles(locale = ::I18n.locale) ⇒ Array<Middleman::Sitemap::Resource>

Deprecated.

Use #articles_by_locale instead.

A list of all blog articles with the given language, sorted by descending date

Parameters:

  • locale (Symbol) (defaults to: ::I18n.locale)

    Language to match (optional, defaults to I18n.locale).

Returns:

  • (Array<Middleman::Sitemap::Resource>)


63
64
65
# File 'lib/middleman-blog/blog_data.rb', line 63

def local_articles( locale = ::I18n.locale )
    articles_by_locale( locale )
end

#manipulate_resource_list(resources)

This method returns an undefined value.

Updates' blog articles destination paths to be the permalink.



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
# File 'lib/middleman-blog/blog_data.rb', line 112

def manipulate_resource_list(resources)
  @_articles = []
  used_resources = []

  resources.each do |resource|
    if resource.ignored?
      # Don't bother blog-processing ignored stuff
      used_resources << resource
      next
    end

    if (params = extract_source_params(resource.path))
      article = convert_to_article(resource)
      next unless publishable?(article)

      # Add extra parameters from the URL to the page metadata
      extra_data = params.except *%w(year month day title lang locale)
      article. page: extra_data unless extra_data.empty?

      # compute output path:
      #   substitute date parts to path pattern
      article.destination_path = template_path @permalink_template, article, extra_data

      @_articles << article

    elsif (params = extract_subdir_params(resource.path))
      # It's not an article, but it's thhe companion files for an article
      # (in a subdirectory named after the article)
      # figure out the matching article for this subdirectory file

      article_path = @source_template.expand(params).to_s

      if article = @app.sitemap.find_resource_by_path(article_path)
        # The article may not yet have been processed, so convert it here.
        article = convert_to_article(article)
        next unless publishable?(article)

        # Add extra parameters from the URL to the page metadata
        extra_data = params.except *%w(year month day title lang locale)
        article. page: extra_data unless extra_data.empty?

        # The subdir path is the article path with the index file name
        # or file extension stripped off.
        new_destination_path = template_path @subdir_permalink_template, article, extra_data

        resource.destination_path = Middleman::Util.normalize_path(new_destination_path)
      end
    end

    used_resources << resource
  end

  used_resources
end

#publishable?(article) ⇒ Boolean

Whether or not a given article should be included in the sitemap. Skip articles that are not published unless the environment is :development.

Parameters:

Returns:

  • (Boolean)

    whether it should be published



175
176
177
# File 'lib/middleman-blog/blog_data.rb', line 175

def publishable?(article)
  @app.environment == :development || article.published?
end

#tagsHash<String, Array<Middleman::Sitemap::Resource>>

Returns a map from tag name to an array of BlogArticles associated with that tag.

Returns:

  • (Hash<String, Array<Middleman::Sitemap::Resource>>)


83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/middleman-blog/blog_data.rb', line 83

def tags
  tags = {}

  @_articles.each do |article|
    article.tags.each do |tag|
      tags[tag] ||= []
      tags[tag] << article
    end
  end

  # Sort each tag's list of articles
  tags.each do |tag, articles|
    tags[tag] = articles.sort_by(&:date).reverse
  end

  tags
end