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.

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



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



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



54
55
56
# File 'lib/middleman-blog/blog_data.rb', line 54

def articles
  @_articles.select( &( options.filter || proc { | a | a } ) ).sort_by( &:date ).reverse
end

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

TODO:

should use the @_articles if represented in this method.

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



81
82
83
84
# File 'lib/middleman-blog/blog_data.rb', line 81

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



115
116
117
# File 'lib/middleman-blog/blog_data.rb', line 115

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

#extract_subdir_params(path) ⇒ Object



122
123
124
# File 'lib/middleman-blog/blog_data.rb', line 122

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

#inspectObject



187
188
189
# File 'lib/middleman-blog/blog_data.rb', line 187

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



67
68
69
# File 'lib/middleman-blog/blog_data.rb', line 67

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.



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
173
174
175
176
177
178
179
180
181
182
# File 'lib/middleman-blog/blog_data.rb', line 131

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 the 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.



198
199
200
# File 'lib/middleman-blog/blog_data.rb', line 198

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 and assigns the tag array back into it.



92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/middleman-blog/blog_data.rb', line 92

def tags

  tags = {}

  # Reference the filtered articles
  articles.each do |article|

    # Reference the tags assigned to an article
    article.tags.each do |tag|
      # tag = safe_parameterize(tag)
      tags[tag] ||= []
      tags[tag] << article
    end

  end

  # Return tags
  tags
end