middleman-blog 3.3.0 → 3.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -2
  3. data/Gemfile-3.0 +1 -1
  4. data/features/custom_collections.feature +70 -0
  5. data/features/custom_collections_multiblog.feature +58 -0
  6. data/features/custom_permalinks_feature.feature +33 -0
  7. data/features/tags_multiblog.feature +28 -2
  8. data/fixtures/calendar-and-tag-app/config-directory-indexes.rb +0 -1
  9. data/fixtures/calendar-app/config-directory-indexes.rb +0 -1
  10. data/fixtures/custom-collections-app/config-blog-prefix.rb +13 -0
  11. data/fixtures/custom-collections-app/config-directory-indexes.rb +13 -0
  12. data/fixtures/custom-collections-app/config.rb +12 -0
  13. data/fixtures/custom-collections-app/source/blog/2011-01-01-new-article.html.markdown +8 -0
  14. data/fixtures/custom-collections-app/source/blog/2011-01-02-another-article.html.markdown +9 -0
  15. data/fixtures/custom-collections-app/source/category.html.erb +7 -0
  16. data/fixtures/custom-collections-app/source/index.html.erb +5 -0
  17. data/fixtures/custom-collections-app/source/layout.erb +13 -0
  18. data/fixtures/custom-collections-multiblog-app/config.rb +27 -0
  19. data/fixtures/custom-collections-multiblog-app/source/blog1/2011-01-01-new-article.html.markdown +7 -0
  20. data/fixtures/custom-collections-multiblog-app/source/blog1/2011-01-02-another-article.html.markdown +7 -0
  21. data/fixtures/custom-collections-multiblog-app/source/blog2/2011-01-01-new-article.html.markdown +7 -0
  22. data/fixtures/custom-collections-multiblog-app/source/blog2/2011-01-02-another-article.html.markdown +7 -0
  23. data/fixtures/custom-collections-multiblog-app/source/category1.html.erb +7 -0
  24. data/fixtures/custom-collections-multiblog-app/source/category2.html.erb +7 -0
  25. data/fixtures/custom-collections-multiblog-app/source/index.html.erb +8 -0
  26. data/fixtures/custom-collections-multiblog-app/source/layout.erb +13 -0
  27. data/fixtures/custom-permalinks-app/config-directory-indexes.rb +7 -0
  28. data/fixtures/custom-permalinks-app/config.rb +5 -0
  29. data/fixtures/custom-permalinks-app/source/blog/2011-01-01-new-article.html.markdown +7 -0
  30. data/fixtures/custom-permalinks-app/source/blog/2011-01-02-another-article.html.markdown +7 -0
  31. data/fixtures/custom-permalinks-app/source/blog/2011-01-03-third-article.html.markdown +7 -0
  32. data/fixtures/custom-permalinks-app/source/index.html.erb +3 -0
  33. data/fixtures/custom-permalinks-app/source/layout.erb +13 -0
  34. data/fixtures/indexes-app/config.rb +0 -1
  35. data/fixtures/layouts-app/config.rb +0 -2
  36. data/fixtures/multiblog-app/source/index.html.erb +1 -3
  37. data/fixtures/paginate-app/config-directory-indexes.rb +0 -1
  38. data/fixtures/tags-app/config-directory-indexes.rb +0 -1
  39. data/fixtures/tags-app/config.rb +1 -1
  40. data/fixtures/tags-multiblog-app/config.rb +1 -1
  41. data/fixtures/tags-multiblog-app/source/blog1/frontmatter_blog_tags.html.erb +9 -0
  42. data/fixtures/tags-multiblog-app/source/blog1/named_blog_tags.html.erb +5 -0
  43. data/fixtures/tags-multiblog-app/source/blog2/frontmatter_blog_tags.html.erb +9 -0
  44. data/fixtures/tags-multiblog-app/source/blog2/named_blog_tags.html.erb +5 -0
  45. data/lib/middleman-blog/blog_article.rb +7 -2
  46. data/lib/middleman-blog/blog_data.rb +37 -20
  47. data/lib/middleman-blog/custom_pages.rb +85 -0
  48. data/lib/middleman-blog/extension_3_0.rb +28 -1
  49. data/lib/middleman-blog/extension_3_1.rb +71 -1
  50. data/lib/middleman-blog/paginator.rb +2 -2
  51. data/lib/middleman-blog/template/source/feed.xml.builder +1 -1
  52. data/lib/middleman-blog/template/source/layout.erb +1 -0
  53. data/lib/middleman-blog/version.rb +1 -1
  54. data/middleman-blog.gemspec +1 -2
  55. metadata +67 -18
@@ -24,6 +24,7 @@ module Middleman
24
24
  option :per_page, 10, 'Articles per page when paginating'
25
25
  option :page_link, "page/:num", 'HTTP path for paging'
26
26
  option :publish_future_dated, false, 'Whether to pubish articles dated in the future'
27
+ option :custom_collections, {}, 'Hash of custom frontmatter properties to collect articles on and their options'
27
28
 
28
29
  attr_accessor :data, :uid
29
30
 
@@ -58,6 +59,10 @@ module Middleman
58
59
  options.year_link = File.join(options.prefix, options.year_link)
59
60
  options.month_link = File.join(options.prefix, options.month_link)
60
61
  options.day_link = File.join(options.prefix, options.day_link)
62
+
63
+ options.custom_collections.each do |key, opts|
64
+ opts[:link] = File.join(options.prefix, opts[:link])
65
+ end
61
66
  end
62
67
  end
63
68
 
@@ -120,6 +125,58 @@ module Middleman
120
125
  false
121
126
  )
122
127
  end
128
+
129
+ if options.custom_collections
130
+ require 'middleman-blog/custom_pages'
131
+ register_custom_pages
132
+ end
133
+ end
134
+
135
+ # Register any custom page collections that may be set in the config
136
+ #
137
+ # A custom resource list manipulator will be generated for each key in the
138
+ # custom collections hash.
139
+ #
140
+ # The following will collect posts on the "category" frontmatter property:
141
+ # ```
142
+ # activate :blog do |blog|
143
+ # blog.custom_collections = {
144
+ # link: "/categories/:category.html",
145
+ # template: "/category.html"
146
+ # }
147
+ # end
148
+ # ```
149
+ #
150
+ # Category pages in the example above will use the category.html as a template file
151
+ # and it will be ignored when building.
152
+ def register_custom_pages
153
+ options.custom_collections.each do |property, options|
154
+ @app.ignore options[:template]
155
+ @app.sitemap.register_resource_list_manipulator(
156
+ :"blog_#{uid}_#{property}",
157
+ ::Middleman::Blog::CustomPages.new(property, @app, self),
158
+ false
159
+ )
160
+
161
+ generate_custom_helper(property)
162
+ end
163
+ end
164
+
165
+ # Generate helpers to access the path to a custom collection.
166
+ #
167
+ # For example, when using a custom property called "category" to collect articles on
168
+ # the method **category_path** will be generated.
169
+ #
170
+ # @param [Symbol] custom_property Custom property which is being used to collect articles on
171
+ def generate_custom_helper(custom_property)
172
+ m = Module.new
173
+ m.module_eval(%Q{
174
+ def #{custom_property}_path(value, key = nil)
175
+ sitemap.find_resource_by_path(::Middleman::Blog::CustomPages.link(blog_controller(key).options, :#{custom_property}, value)).try(:url)
176
+ end
177
+ })
178
+
179
+ app.class.send(:include, m)
123
180
  end
124
181
 
125
182
  # Helpers for use within templates and layouts.
@@ -129,7 +186,20 @@ module Middleman
129
186
  end
130
187
 
131
188
  def blog_controller(key=nil)
132
- key ||= (current_resource && current_resource.metadata[:page]["blog"]) || blog_instances.keys.first
189
+ if !key && current_resource
190
+ key = current_resource.metadata[:page]["blog"]
191
+
192
+ if !key && current_resource.respond_to?(:blog_controller) && current_resource.blog_controller
193
+ return current_resource.blog_controller
194
+ end
195
+ end
196
+
197
+ # In multiblog situations, force people to specify the blog
198
+ if !key && blog_instances.size > 1
199
+ raise "You must either specify the blog name in calling this method or in your page frontmatter (using the 'blog' key)"
200
+ end
201
+
202
+ key ||= blog_instances.keys.first
133
203
  blog_instances[key.to_sym]
134
204
  end
135
205
 
@@ -49,11 +49,11 @@ module Middleman
49
49
 
50
50
  resources.each do |res|
51
51
  next if res.ignored?
52
-
52
+
53
53
  md = res.metadata
54
54
 
55
55
  # Skip other blogs' resources
56
- res_controller = md[:locals]["blog_controller"] || res.blog_controller
56
+ res_controller = md[:locals]["blog_controller"] || (res.respond_to?(:blog_controller) && res.blog_controller)
57
57
  next if @blog_controller && res_controller && (res_controller != @blog_controller)
58
58
  override_controller = md[:page]["blog"]
59
59
  next if @blog_controller && override_controller && override_controller != @blog_controller.uid
@@ -6,7 +6,7 @@ xml.feed "xmlns" => "http://www.w3.org/2005/Atom" do
6
6
  xml.id URI.join(site_url, blog.options.prefix.to_s)
7
7
  xml.link "href" => URI.join(site_url, blog.options.prefix.to_s)
8
8
  xml.link "href" => URI.join(site_url, current_page.path), "rel" => "self"
9
- xml.updated blog.articles.first.date.to_time.iso8601
9
+ xml.updated(blog.articles.first.date.to_time.iso8601) unless blog.articles.empty?
10
10
  xml.author { xml.name "Blog Author" }
11
11
 
12
12
  blog.articles[0..5].each do |article|
@@ -3,6 +3,7 @@
3
3
  <head>
4
4
  <meta charset="utf-8" />
5
5
  <meta http-equiv='X-UA-Compatible' content='IE=edge;chrome=1' />
6
+ <title>Blog Title<%= ' - ' + current_article.title unless current_article.nil? %></title>
6
7
  </head>
7
8
  <body>
8
9
 
@@ -1,5 +1,5 @@
1
1
  module Middleman
2
2
  module Blog
3
- VERSION = "3.3.0"
3
+ VERSION = "3.4.1"
4
4
  end
5
5
  end
@@ -15,7 +15,6 @@ Gem::Specification.new do |s|
15
15
  s.files = `git ls-files -z`.split("\0")
16
16
  s.test_files = `git ls-files -z -- {fixtures,features}/*`.split("\0")
17
17
  s.require_paths = ["lib"]
18
- s.add_dependency("middleman-core", ["~> 3.0"])
19
- s.add_dependency("middleman-more", ["~> 3.0"])
18
+ s.add_dependency("middleman-core", ["~> 3.2"])
20
19
  s.add_dependency("tzinfo", ["~> 0.3.0"])
21
20
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: middleman-blog
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.3.0
4
+ version: 3.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas Reynolds
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-09-08 00:00:00.000000000 Z
12
+ date: 2013-11-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: middleman-core
@@ -17,28 +17,14 @@ dependencies:
17
17
  requirements:
18
18
  - - ~>
19
19
  - !ruby/object:Gem::Version
20
- version: '3.0'
20
+ version: '3.2'
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - ~>
26
26
  - !ruby/object:Gem::Version
27
- version: '3.0'
28
- - !ruby/object:Gem::Dependency
29
- name: middleman-more
30
- requirement: !ruby/object:Gem::Requirement
31
- requirements:
32
- - - ~>
33
- - !ruby/object:Gem::Version
34
- version: '3.0'
35
- type: :runtime
36
- prerelease: false
37
- version_requirements: !ruby/object:Gem::Requirement
38
- requirements:
39
- - - ~>
40
- - !ruby/object:Gem::Version
41
- version: '3.0'
27
+ version: '3.2'
42
28
  - !ruby/object:Gem::Dependency
43
29
  name: tzinfo
44
30
  requirement: !ruby/object:Gem::Requirement
@@ -78,6 +64,9 @@ files:
78
64
  - features/calendar-and-tag.feature
79
65
  - features/calendar.feature
80
66
  - features/calendar_multiblog.feature
67
+ - features/custom_collections.feature
68
+ - features/custom_collections_multiblog.feature
69
+ - features/custom_permalinks_feature.feature
81
70
  - features/directory_indexes.feature
82
71
  - features/filename_date.feature
83
72
  - features/future_date.feature
@@ -129,6 +118,30 @@ files:
129
118
  - fixtures/calendar-multiblog-app/source/calendar2.html.erb
130
119
  - fixtures/calendar-multiblog-app/source/index.html.erb
131
120
  - fixtures/calendar-multiblog-app/source/layout.erb
121
+ - fixtures/custom-collections-app/config-blog-prefix.rb
122
+ - fixtures/custom-collections-app/config-directory-indexes.rb
123
+ - fixtures/custom-collections-app/config.rb
124
+ - fixtures/custom-collections-app/source/blog/2011-01-01-new-article.html.markdown
125
+ - fixtures/custom-collections-app/source/blog/2011-01-02-another-article.html.markdown
126
+ - fixtures/custom-collections-app/source/category.html.erb
127
+ - fixtures/custom-collections-app/source/index.html.erb
128
+ - fixtures/custom-collections-app/source/layout.erb
129
+ - fixtures/custom-collections-multiblog-app/config.rb
130
+ - fixtures/custom-collections-multiblog-app/source/blog1/2011-01-01-new-article.html.markdown
131
+ - fixtures/custom-collections-multiblog-app/source/blog1/2011-01-02-another-article.html.markdown
132
+ - fixtures/custom-collections-multiblog-app/source/blog2/2011-01-01-new-article.html.markdown
133
+ - fixtures/custom-collections-multiblog-app/source/blog2/2011-01-02-another-article.html.markdown
134
+ - fixtures/custom-collections-multiblog-app/source/category1.html.erb
135
+ - fixtures/custom-collections-multiblog-app/source/category2.html.erb
136
+ - fixtures/custom-collections-multiblog-app/source/index.html.erb
137
+ - fixtures/custom-collections-multiblog-app/source/layout.erb
138
+ - fixtures/custom-permalinks-app/config-directory-indexes.rb
139
+ - fixtures/custom-permalinks-app/config.rb
140
+ - fixtures/custom-permalinks-app/source/blog/2011-01-01-new-article.html.markdown
141
+ - fixtures/custom-permalinks-app/source/blog/2011-01-02-another-article.html.markdown
142
+ - fixtures/custom-permalinks-app/source/blog/2011-01-03-third-article.html.markdown
143
+ - fixtures/custom-permalinks-app/source/index.html.erb
144
+ - fixtures/custom-permalinks-app/source/layout.erb
132
145
  - fixtures/default-template-app/Gemfile
133
146
  - fixtures/default-template-app/config.rb
134
147
  - fixtures/default-template-app/source/2013-04-01-new-article.html.markdown
@@ -252,8 +265,12 @@ files:
252
265
  - fixtures/tags-multiblog-app/config.rb
253
266
  - fixtures/tags-multiblog-app/source/blog1/2011-01-01-new-article.html.markdown
254
267
  - fixtures/tags-multiblog-app/source/blog1/2011-01-02-another-article.html.markdown
268
+ - fixtures/tags-multiblog-app/source/blog1/frontmatter_blog_tags.html.erb
269
+ - fixtures/tags-multiblog-app/source/blog1/named_blog_tags.html.erb
255
270
  - fixtures/tags-multiblog-app/source/blog2/2011-01-01-new-article.html.markdown
256
271
  - fixtures/tags-multiblog-app/source/blog2/2011-01-02-another-article.html.markdown
272
+ - fixtures/tags-multiblog-app/source/blog2/frontmatter_blog_tags.html.erb
273
+ - fixtures/tags-multiblog-app/source/blog2/named_blog_tags.html.erb
257
274
  - fixtures/tags-multiblog-app/source/index.html.erb
258
275
  - fixtures/tags-multiblog-app/source/layout.erb
259
276
  - fixtures/tags-multiblog-app/source/tag1.html.erb
@@ -266,6 +283,7 @@ files:
266
283
  - lib/middleman-blog/calendar_pages.rb
267
284
  - lib/middleman-blog/commands/article.rb
268
285
  - lib/middleman-blog/commands/article.tt
286
+ - lib/middleman-blog/custom_pages.rb
269
287
  - lib/middleman-blog/extension_3_0.rb
270
288
  - lib/middleman-blog/extension_3_1.rb
271
289
  - lib/middleman-blog/paginator.rb
@@ -314,6 +332,9 @@ test_files:
314
332
  - features/calendar-and-tag.feature
315
333
  - features/calendar.feature
316
334
  - features/calendar_multiblog.feature
335
+ - features/custom_collections.feature
336
+ - features/custom_collections_multiblog.feature
337
+ - features/custom_permalinks_feature.feature
317
338
  - features/directory_indexes.feature
318
339
  - features/filename_date.feature
319
340
  - features/future_date.feature
@@ -365,6 +386,30 @@ test_files:
365
386
  - fixtures/calendar-multiblog-app/source/calendar2.html.erb
366
387
  - fixtures/calendar-multiblog-app/source/index.html.erb
367
388
  - fixtures/calendar-multiblog-app/source/layout.erb
389
+ - fixtures/custom-collections-app/config-blog-prefix.rb
390
+ - fixtures/custom-collections-app/config-directory-indexes.rb
391
+ - fixtures/custom-collections-app/config.rb
392
+ - fixtures/custom-collections-app/source/blog/2011-01-01-new-article.html.markdown
393
+ - fixtures/custom-collections-app/source/blog/2011-01-02-another-article.html.markdown
394
+ - fixtures/custom-collections-app/source/category.html.erb
395
+ - fixtures/custom-collections-app/source/index.html.erb
396
+ - fixtures/custom-collections-app/source/layout.erb
397
+ - fixtures/custom-collections-multiblog-app/config.rb
398
+ - fixtures/custom-collections-multiblog-app/source/blog1/2011-01-01-new-article.html.markdown
399
+ - fixtures/custom-collections-multiblog-app/source/blog1/2011-01-02-another-article.html.markdown
400
+ - fixtures/custom-collections-multiblog-app/source/blog2/2011-01-01-new-article.html.markdown
401
+ - fixtures/custom-collections-multiblog-app/source/blog2/2011-01-02-another-article.html.markdown
402
+ - fixtures/custom-collections-multiblog-app/source/category1.html.erb
403
+ - fixtures/custom-collections-multiblog-app/source/category2.html.erb
404
+ - fixtures/custom-collections-multiblog-app/source/index.html.erb
405
+ - fixtures/custom-collections-multiblog-app/source/layout.erb
406
+ - fixtures/custom-permalinks-app/config-directory-indexes.rb
407
+ - fixtures/custom-permalinks-app/config.rb
408
+ - fixtures/custom-permalinks-app/source/blog/2011-01-01-new-article.html.markdown
409
+ - fixtures/custom-permalinks-app/source/blog/2011-01-02-another-article.html.markdown
410
+ - fixtures/custom-permalinks-app/source/blog/2011-01-03-third-article.html.markdown
411
+ - fixtures/custom-permalinks-app/source/index.html.erb
412
+ - fixtures/custom-permalinks-app/source/layout.erb
368
413
  - fixtures/default-template-app/Gemfile
369
414
  - fixtures/default-template-app/config.rb
370
415
  - fixtures/default-template-app/source/2013-04-01-new-article.html.markdown
@@ -488,8 +533,12 @@ test_files:
488
533
  - fixtures/tags-multiblog-app/config.rb
489
534
  - fixtures/tags-multiblog-app/source/blog1/2011-01-01-new-article.html.markdown
490
535
  - fixtures/tags-multiblog-app/source/blog1/2011-01-02-another-article.html.markdown
536
+ - fixtures/tags-multiblog-app/source/blog1/frontmatter_blog_tags.html.erb
537
+ - fixtures/tags-multiblog-app/source/blog1/named_blog_tags.html.erb
491
538
  - fixtures/tags-multiblog-app/source/blog2/2011-01-01-new-article.html.markdown
492
539
  - fixtures/tags-multiblog-app/source/blog2/2011-01-02-another-article.html.markdown
540
+ - fixtures/tags-multiblog-app/source/blog2/frontmatter_blog_tags.html.erb
541
+ - fixtures/tags-multiblog-app/source/blog2/named_blog_tags.html.erb
493
542
  - fixtures/tags-multiblog-app/source/index.html.erb
494
543
  - fixtures/tags-multiblog-app/source/layout.erb
495
544
  - fixtures/tags-multiblog-app/source/tag1.html.erb