Module: Middleman::Blog::Helpers

Defined in:
lib/middleman-blog/helpers.rb

Overview

Blog-related helpers that are available to the Middleman application in config.rb and in templates.

Instance Method Summary collapse

Instance Method Details

#blog(blog_name = nil) ⇒ BlogData

Get a BlogData instance for the given blog. Follows the same rules as #blog_controller.

Parameters:

  • blog_name (Symbol, String) (defaults to: nil)

    Optional name of the blog to get data for. Blogs can be named as an option or will default to 'blog0', 'blog1', etc..

Returns:



59
60
61
# File 'lib/middleman-blog/helpers.rb', line 59

def blog(blog_name=nil)
  blog_controller(blog_name).data
end

#blog_controller(blog_name = nil) ⇒ BlogExtension

Retrieve a Middleman::BlogExtension instance. If blog_name is provided, the instance with that name will be returned. Otherwise, an attempt is made to find the appropriate blog controller for the current resource. For articles this is always available, but for other pages it may be necessary to name the blog in frontmatter using the “blog” blog_name. If there is only one blog, this method will always return that blog.

Parameters:

  • blog_name (Symbol, String) (defaults to: nil)

    Optional name of the blog to get a controller for.

Returns:



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/middleman-blog/helpers.rb', line 29

def blog_controller(blog_name=nil)
  if !blog_name && current_resource
    blog_name = current_resource.[:page][:blog]

    if !blog_name
      blog_controller = current_resource.blog_controller if current_resource.respond_to?(:blog_controller)
      return blog_controller if blog_controller
    end
  end

  # In multiblog situations, force people to specify the blog
  if !blog_name && blog_instances.size > 1
    raise "You have more than one blog so you must either use the flag --blog (ex. --blog 'myBlog') when calling this method, or add blog: [blog_name] to your page's frontmatter"
  end

  # Warn if a non-existent blog name provided
  if blog_name && !blog_instances.keys.include?(blog_name.to_sym)
    raise "Non-existent blog name provided: #{blog_name}."
  end

  blog_name ||= blog_instances.keys.first
  blog_instances[blog_name.to_sym]
end

#blog_day_path(year, month, day, blog_name = nil) ⇒ String

Get a path to the given day-based calendar page, based on the day_link blog setting.

Parameters:

  • year (Number)
  • month (Number)
  • day (Number)
  • blog_name (Symbol, String) (defaults to: nil)

    Optional name of the blog to use.

Returns:

  • (String)


112
113
114
# File 'lib/middleman-blog/helpers.rb', line 112

def blog_day_path(year, month, day, blog_name=nil)
  build_url blog_controller(blog_name).calendar_pages.link(year, month, day)
end

#blog_instancesHash<Symbol,BlogExtension>

All the blog instances known to this Middleman app, keyed by name. A new blog is added every time the blog extension is activated. Name them by setting the :name option when activating - otherwise they get an automatic name like 'blog0', 'blog1', etc.

Returns:

  • (Hash<Symbol,BlogExtension>)

    a hash of all blog instances by name



10
11
12
13
14
15
16
17
# File 'lib/middleman-blog/helpers.rb', line 10

def blog_instances
  return nil unless app.extensions[:blog]

  app.extensions[:blog].keys.each_with_object({}) do |k, sum|
    ext = app.extensions[:blog][k]
    sum[ext.name.to_sym] = ext
  end
end

#blog_month_path(year, month, blog_name = nil) ⇒ String

Get a path to the given month-based calendar page, based on the month_link blog setting.

Parameters:

  • year (Number)
  • month (Number)
  • blog_name (Symbol, String) (defaults to: nil)

    Optional name of the blog to use.

Returns:

  • (String)


102
103
104
# File 'lib/middleman-blog/helpers.rb', line 102

def blog_month_path(year, month, blog_name=nil)
  build_url blog_controller(blog_name).calendar_pages.link(year, month)
end

#blog_year_path(year, blog_name = nil) ⇒ String

Get a path to the given year-based calendar page, based on the year_link blog setting.

Parameters:

  • year (Number)
  • blog_name (Symbol, String) (defaults to: nil)

    Optional name of the blog to use.

Returns:

  • (String)


93
94
95
# File 'lib/middleman-blog/helpers.rb', line 93

def blog_year_path(year, blog_name=nil)
  build_url blog_controller(blog_name).calendar_pages.link(year)
end

#current_articleBlogArticle

Get a BlogArticle representing the current article.

Returns:



72
73
74
75
76
77
78
79
# File 'lib/middleman-blog/helpers.rb', line 72

def current_article
  article = current_resource
  if article && article.is_a?(BlogArticle)
    article
  else
    nil
  end
end

#is_blog_article?Boolean

Determine whether the currently rendering template is a BlogArticle. This can be useful in layouts and helpers.

Returns:

  • (Boolean)


66
67
68
# File 'lib/middleman-blog/helpers.rb', line 66

def is_blog_article?
  !current_article.nil?
end

#page_articles(blog_name = nil) ⇒ Array<Middleman::Sitemap::Resource>

Returns the list of articles to display on this particular page (when using pagination).

Parameters:

  • blog_name (Symbol, String) (defaults to: nil)

    Optional name of the blog to use.

Returns:

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


126
127
128
129
130
131
132
133
134
135
# File 'lib/middleman-blog/helpers.rb', line 126

def page_articles(blog_name=nil)
  meta = current_resource.
  limit = current_resource.data[:per_page]

  # "articles" local variable is populated by Calendar and Tag page generators
  # If it's not set then use the complete list of articles
  articles = meta[:locals]["articles"] || blog(blog_name).articles

  limit ? articles.first(limit) : articles
end

#paginateBoolean

Whether or not pagination is enabled for this template. This can be used to allow a single template to work in both paginating and non-paginating modes.

Returns:

  • (Boolean)


119
120
121
# File 'lib/middleman-blog/helpers.rb', line 119

def paginate
  false
end

#tag_path(tag, blog_name = nil) ⇒ String

Get a path to the given tag page, based on the taglink blog setting.

Parameters:

  • tag (String)
  • blog_name (Symbol, String) (defaults to: nil)

    Optional name of the blog to use.

Returns:

  • (String)


85
86
87
# File 'lib/middleman-blog/helpers.rb', line 85

def tag_path(tag, blog_name=nil)
  build_url blog_controller(blog_name).tag_pages.link(tag)
end