middleman-blog 3.6.0.beta.2 → 4.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +18 -2
- data/CHANGELOG.md +6 -1
- data/Gemfile +13 -10
- data/README.md +6 -6
- data/Rakefile +1 -15
- data/features/calendar.feature +23 -0
- data/features/calendar_multiblog.feature +0 -2
- data/features/language.feature +1 -13
- data/features/multiblog.feature +0 -2
- data/features/paginate_multiblog.feature +0 -2
- data/features/tags.feature +14 -0
- data/features/tags_multiblog.feature +0 -2
- data/fixtures/blog-sources-subdirs-app/config.rb +1 -1
- data/fixtures/blog-sources-subdirs-app/source/blog.html.erb +1 -1
- data/fixtures/blog-sources-subdirs-app/source/blog/{another-post.md.erb → another-post.html.md.erb} +0 -0
- data/fixtures/blog-sources-subdirs-app/source/blog/subdir/{yet-another-post.md.erb → yet-another-post.html.md.erb} +0 -0
- data/fixtures/calendar-app/config-only-year.rb +9 -0
- data/fixtures/custom-collections-sources-app/source/index.html.erb +3 -3
- data/fixtures/layouts-app/source/2011/01/02/{article-in-normal-layout.markdown → article-in-normal-layout.html.markdown} +0 -0
- data/fixtures/layouts-app/source/2011/01/03/{article-without-layout.markdown → article-without-layout.html.markdown} +0 -0
- data/fixtures/permalink-data-app/source/layout.erb +1 -1
- data/fixtures/tags-app/config-no-tags.rb +6 -0
- data/lib/middleman-blog.rb +0 -9
- data/lib/middleman-blog/blog_article.rb +11 -9
- data/lib/middleman-blog/blog_data.rb +17 -13
- data/lib/middleman-blog/calendar_pages.rb +9 -12
- data/lib/middleman-blog/custom_pages.rb +3 -4
- data/lib/middleman-blog/extension.rb +24 -8
- data/lib/middleman-blog/helpers.rb +10 -17
- data/lib/middleman-blog/paginator.rb +9 -7
- data/lib/middleman-blog/tag_pages.rb +5 -3
- data/lib/middleman-blog/version.rb +1 -1
- data/middleman-blog.gemspec +3 -3
- data/spec/uri_templates_spec.rb +17 -17
- metadata +22 -31
- data/features/article_cli.feature +0 -16
- data/lib/middleman-blog/commands/article.rb +0 -58
- data/lib/middleman-blog/commands/article.tt +0 -6
- data/lib/middleman-blog/template.rb +0 -37
- data/lib/middleman-blog/template/config.tt +0 -118
- data/lib/middleman-blog/template/shared/Gemfile.tt +0 -9
- data/lib/middleman-blog/template/source/2012-01-01-example-article.html.markdown +0 -7
- data/lib/middleman-blog/template/source/calendar.html.erb +0 -33
- data/lib/middleman-blog/template/source/feed.xml.builder +0 -24
- data/lib/middleman-blog/template/source/index.html.erb +0 -24
- data/lib/middleman-blog/template/source/layout.erb +0 -38
- data/lib/middleman-blog/template/source/tag.html.erb +0 -25
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a954456dd37131a13ebabbdb3cb2cd2876f31c83
|
4
|
+
data.tar.gz: 9fe2db291d746b24bef90d3acfd16e966f1381c0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 97feb50f6597a1123b1e9f06d5a95d7a1479997b921da68ff15d84ba484607bb664de385f7fef4f6547dd972871bc3ff62521f346dcc2d00e4e48f88b7e4248a
|
7
|
+
data.tar.gz: 6be516bced8dba93bd1320f5b00e69d31466fd41286cb71422e3afc1a03fbda4814ff23f512e610bb27698f056ea3d0ec77ad70c7c39f9299a711f8eb6d73ffc
|
data/.travis.yml
CHANGED
@@ -1,7 +1,23 @@
|
|
1
1
|
rvm:
|
2
|
-
-
|
3
|
-
-
|
2
|
+
- ruby-head
|
3
|
+
- jruby-head
|
4
4
|
- jruby-19mode
|
5
|
+
- 2.2.2
|
6
|
+
- 2.1
|
7
|
+
- 2.0
|
8
|
+
os:
|
9
|
+
- linux
|
10
|
+
- osx
|
11
|
+
sudo: false
|
12
|
+
matrix:
|
13
|
+
fast_finish: true
|
14
|
+
allow_failures:
|
15
|
+
- rvm: ruby-head
|
16
|
+
- rvm: jruby-19mode
|
17
|
+
- rvm: jruby-head
|
18
|
+
|
19
|
+
gemfile:
|
20
|
+
- Gemfile
|
5
21
|
|
6
22
|
script: "bundle exec rake test"
|
7
23
|
|
data/CHANGELOG.md
CHANGED
data/Gemfile
CHANGED
@@ -1,27 +1,30 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
|
3
|
-
gem "middleman-
|
3
|
+
gem "middleman-cli", github: "middleman/middleman", branch: 'master'
|
4
|
+
gem "middleman-core", github: "middleman/middleman", branch: 'master'
|
4
5
|
|
5
6
|
# Specify your gem's dependencies in middleman-blog.gemspec
|
6
7
|
gemspec
|
7
8
|
|
8
|
-
|
9
|
-
gem
|
9
|
+
# Build and doc tools
|
10
|
+
gem 'rake', '~> 10.3', require: false
|
11
|
+
gem 'yard', '~> 0.8', require: false
|
10
12
|
|
11
13
|
# Test tools
|
12
|
-
gem
|
13
|
-
gem
|
14
|
-
gem
|
15
|
-
gem
|
16
|
-
gem "simplecov"
|
14
|
+
gem 'pry', '~> 0.10', group: :development, require: false
|
15
|
+
gem 'aruba', '~> 0.7.4', require: false
|
16
|
+
gem 'rspec', '~> 3.0', require: false
|
17
|
+
gem 'cucumber', '~> 2.0', require: false
|
17
18
|
|
18
19
|
gem "timecop", "~> 0.6.3"
|
19
20
|
gem "nokogiri"
|
20
21
|
gem "kramdown"
|
21
22
|
|
22
23
|
# Code Quality
|
23
|
-
gem
|
24
|
-
gem '
|
24
|
+
gem 'rubocop', '~> 0.24', require: false
|
25
|
+
gem 'simplecov', '~> 0.9', require: false
|
26
|
+
gem 'coveralls', '~> 0.8', require: false
|
27
|
+
gem 'codeclimate-test-reporter', '~> 0.3', require: false, group: :test
|
25
28
|
|
26
29
|
platforms :ruby do
|
27
30
|
gem "redcarpet", "~> 3.0"
|
data/README.md
CHANGED
@@ -8,7 +8,7 @@ If you're just getting started, install the `middleman` gem and generate a new p
|
|
8
8
|
|
9
9
|
```
|
10
10
|
gem install middleman
|
11
|
-
middleman init MY_PROJECT
|
11
|
+
middleman init MY_PROJECT --template=blog
|
12
12
|
```
|
13
13
|
|
14
14
|
If you already have a Middleman project: Add `gem "middleman-blog"` to your `Gemfile` and run `bundle install`
|
@@ -27,11 +27,11 @@ Additionally, up-to-date generated code documentation is available on [RubyDoc].
|
|
27
27
|
|
28
28
|
## Build & Dependency Status
|
29
29
|
|
30
|
-
[![Gem Version](https://badge.fury.io/rb/middleman-blog.
|
31
|
-
[![Build Status](https://travis-ci.org/middleman/middleman-blog.
|
32
|
-
[![Dependency Status](https://gemnasium.com/middleman/middleman-blog.
|
33
|
-
[![Code Quality](https://codeclimate.com/github/middleman/middleman-blog.
|
34
|
-
[![Code Coverage](https://coveralls.io/repos/middleman/middleman-blog/badge.
|
30
|
+
[![Gem Version](https://badge.fury.io/rb/middleman-blog.svg)][gem]
|
31
|
+
[![Build Status](https://travis-ci.org/middleman/middleman-blog.svg)][travis]
|
32
|
+
[![Dependency Status](https://gemnasium.com/middleman/middleman-blog.svg?travis)][gemnasium]
|
33
|
+
[![Code Quality](https://codeclimate.com/github/middleman/middleman-blog.svg)][codeclimate]
|
34
|
+
[![Code Coverage](https://coveralls.io/repos/middleman/middleman-blog/badge.svg?branch=master)][coveralls]
|
35
35
|
## Community
|
36
36
|
|
37
37
|
The official community forum is available at: http://forum.middlemanapp.com
|
data/Rakefile
CHANGED
@@ -10,7 +10,6 @@ Cucumber::Rake::Task.new(:cucumber, 'Run features that should pass') do |t|
|
|
10
10
|
|
11
11
|
exempt_tags = ""
|
12
12
|
exempt_tags << "--tags ~@nojava " if RUBY_PLATFORM == "java"
|
13
|
-
exempt_tags << "--tags ~@three_one " unless ::Middleman::VERSION.match(/^3\.1\./)
|
14
13
|
|
15
14
|
t.cucumber_opts = "--color --tags ~@wip #{exempt_tags} --strict --format #{ENV['CUCUMBER_FORMAT'] || 'pretty'}"
|
16
15
|
end
|
@@ -24,20 +23,7 @@ require 'rspec/core/rake_task'
|
|
24
23
|
desc "Run RSpec"
|
25
24
|
RSpec::Core::RakeTask.new do |spec|
|
26
25
|
spec.pattern = 'spec/**/*_spec.rb'
|
27
|
-
spec.rspec_opts = ['--color', '--format
|
28
|
-
end
|
29
|
-
|
30
|
-
begin
|
31
|
-
require 'cane/rake_task'
|
32
|
-
|
33
|
-
desc "Run cane to check quality metrics"
|
34
|
-
Cane::RakeTask.new(:quality) do |cane|
|
35
|
-
cane.no_style = true
|
36
|
-
cane.no_doc = true
|
37
|
-
cane.abc_glob = "lib/middleman-blog/**/*.rb"
|
38
|
-
end
|
39
|
-
rescue LoadError
|
40
|
-
# warn "cane not available, quality task not provided."
|
26
|
+
spec.rspec_opts = ['--color', '--format documentation']
|
41
27
|
end
|
42
28
|
|
43
29
|
desc "Build HTML documentation"
|
data/features/calendar.feature
CHANGED
@@ -87,3 +87,26 @@ Feature: Calendar pages
|
|
87
87
|
And the file "index.html" should contain "Month Path: '/2011/01.html'"
|
88
88
|
And the file "index.html" should contain "Day Path: '/2011/01/01.html'"
|
89
89
|
|
90
|
+
Scenario: Calendar pages for months and days are not added when disabled in the config
|
91
|
+
Given a fixture app "calendar-app"
|
92
|
+
And app "calendar-app" is using config "only-year"
|
93
|
+
And I run `middleman build`
|
94
|
+
And was successfully built
|
95
|
+
|
96
|
+
When I cd to "build"
|
97
|
+
Then the following files should exist:
|
98
|
+
| 2011.html |
|
99
|
+
And the following files should not exist:
|
100
|
+
| 2011/01.html |
|
101
|
+
| 2011/01/01.html |
|
102
|
+
| 2011/01/02.html |
|
103
|
+
|
104
|
+
And the file "2011.html" should contain "/2011-01-01-new-article.html"
|
105
|
+
And the file "2011.html" should contain "/2011-01-02-another-article.html"
|
106
|
+
And the file "2011.html" should contain "Year: '2011'"
|
107
|
+
And the file "2011.html" should contain "Month: ''"
|
108
|
+
And the file "2011.html" should contain "Day: ''"
|
109
|
+
|
110
|
+
And the file "index.html" should contain "Year Path: '/2011.html'"
|
111
|
+
And the file "index.html" should contain "Month Path: ''"
|
112
|
+
And the file "index.html" should contain "Day Path: ''"
|
data/features/language.feature
CHANGED
@@ -42,7 +42,7 @@ Feature: Internationalized articles
|
|
42
42
|
When I go to "/index.html"
|
43
43
|
Then I should see "Some text in English. All is OK."
|
44
44
|
When I go to "/ru/index.html"
|
45
|
-
Then I should see "Некоторый текст на русском языке. Всё
|
45
|
+
Then I should see "Некоторый текст на русском языке. Всё отлично."
|
46
46
|
|
47
47
|
Scenario: Layout's locale match article's locale on article page
|
48
48
|
Given a fixture app "language-app"
|
@@ -76,15 +76,3 @@ Feature: Internationalized articles
|
|
76
76
|
Then I should see "Hello, world!"
|
77
77
|
Then I should not see "Язык: ru"
|
78
78
|
Then I should not see "Привет, мир!"
|
79
|
-
|
80
|
-
Scenario: Creating article with lang from CLI
|
81
|
-
Given a fixture app "language-app"
|
82
|
-
And a file named "config.rb" with:
|
83
|
-
"""
|
84
|
-
activate :i18n
|
85
|
-
activate :blog, prefix: ":lang"
|
86
|
-
"""
|
87
|
-
And I run `middleman article "My New Article" --date 2013-09-07 --lang ru`
|
88
|
-
Then the exit status should be 0
|
89
|
-
Then the following files should exist:
|
90
|
-
| source/ru/2013-09-07-my-new-article.html.markdown |
|
data/features/multiblog.feature
CHANGED
data/features/tags.feature
CHANGED
@@ -81,3 +81,17 @@ Feature: Tag pages
|
|
81
81
|
"""
|
82
82
|
When I go to "/tags/☆☆☆.html"
|
83
83
|
Then I should see "/2011-01-01-new-article.html"
|
84
|
+
|
85
|
+
Scenario: Tag pages are not added when disabled in configuration
|
86
|
+
Given a fixture app "tags-app"
|
87
|
+
And app "tags-app" is using config "no-tags"
|
88
|
+
And I run `middleman build`
|
89
|
+
And was successfully built
|
90
|
+
|
91
|
+
When I cd to "build"
|
92
|
+
Then the following files should not exist:
|
93
|
+
| tags.html |
|
94
|
+
| tags/foo.html |
|
95
|
+
| tags/bar.html |
|
96
|
+
|
97
|
+
And the file "index.html" should contain "Tag Path: ''"
|
data/fixtures/blog-sources-subdirs-app/source/blog/{another-post.md.erb → another-post.html.md.erb}
RENAMED
File without changes
|
File without changes
|
@@ -0,0 +1,9 @@
|
|
1
|
+
Time.zone = "Pacific Time (US & Canada)"
|
2
|
+
|
3
|
+
activate :blog do |blog|
|
4
|
+
blog.sources = "blog/:year-:month-:day-:title.html"
|
5
|
+
blog.permalink = "blog/:year-:month-:day-:title.html"
|
6
|
+
blog.calendar_template = 'calendar.html'
|
7
|
+
blog.generate_month_pages = false
|
8
|
+
blog.generate_day_pages = false
|
9
|
+
end
|
@@ -1,5 +1,5 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
<% blog.articles[0...12].each do |article| %>
|
2
|
+
<li><a href="<%= article.url %>"><%= article.title %></a> <time><%= article.date.strftime('%b %e') %></time></li>
|
3
|
+
<% end %>
|
4
4
|
|
5
5
|
Category Path: '<%= category_path("articles") %>'
|
File without changes
|
File without changes
|
data/lib/middleman-blog.rb
CHANGED
@@ -1,15 +1,6 @@
|
|
1
1
|
require "middleman-core"
|
2
|
-
|
3
2
|
require "middleman-blog/version"
|
4
3
|
|
5
|
-
begin
|
6
|
-
require "middleman-blog/template"
|
7
|
-
rescue LoadError
|
8
|
-
# v4
|
9
|
-
end
|
10
|
-
|
11
|
-
require "middleman-blog/commands/article"
|
12
|
-
|
13
4
|
::Middleman::Extensions.register(:blog) do
|
14
5
|
require "middleman-blog/extension"
|
15
6
|
::Middleman::BlogExtension
|
@@ -30,7 +30,7 @@ module Middleman
|
|
30
30
|
# Called automatically by Middleman.
|
31
31
|
# @return [String]
|
32
32
|
def render(opts={}, locs={}, &block)
|
33
|
-
|
33
|
+
unless opts.has_key?(:layout)
|
34
34
|
opts[:layout] = metadata[:options][:layout]
|
35
35
|
opts[:layout] = blog_options.layout if opts[:layout].nil?
|
36
36
|
# Convert to a string unless it's a boolean
|
@@ -136,20 +136,22 @@ module Middleman
|
|
136
136
|
# activated at all, +nil+ will be returned.
|
137
137
|
#
|
138
138
|
# @return [Symbol] Language code (for example, +:en+ or +:de+)
|
139
|
-
def
|
140
|
-
|
141
|
-
|
139
|
+
def locale
|
140
|
+
frontmatter_locale = data['locale'] || data['lang']
|
141
|
+
filename_locale = path_part('locale') || path_part('lang')
|
142
142
|
|
143
|
-
if
|
144
|
-
raise "The
|
143
|
+
if frontmatter_locale && filename_locale && frontmatter_locale != filename_locale
|
144
|
+
raise "The locale in #{path}'s filename (#{filename_locale.inspect}) doesn't match the lang in its frontmatter (#{frontmatter_locale.inspect})"
|
145
145
|
end
|
146
146
|
|
147
|
-
|
147
|
+
default_locale = I18n.default_locale if defined? ::I18n
|
148
148
|
|
149
|
-
|
150
|
-
|
149
|
+
found_locale = frontmatter_locale || filename_locale || default_locale
|
150
|
+
found_locale && found_locale.to_sym
|
151
151
|
end
|
152
152
|
|
153
|
+
alias_method :lang, :locale
|
154
|
+
|
153
155
|
# Attempt to figure out the date of the post. The date should be
|
154
156
|
# present in the source path, but users may also provide a date
|
155
157
|
# in the frontmatter in order to provide a time of day for sorting
|
@@ -42,12 +42,11 @@ module Middleman
|
|
42
42
|
# A list of all blog articles with the given language,
|
43
43
|
# sorted by descending date
|
44
44
|
#
|
45
|
-
# @param [Symbol]
|
45
|
+
# @param [Symbol] locale Language to match (optional, defaults to I18n.locale).
|
46
46
|
# @return [Array<Middleman::Sitemap::Resource>]
|
47
|
-
def local_articles(
|
48
|
-
|
49
|
-
|
50
|
-
articles.select {|article| article.lang == lang }
|
47
|
+
def local_articles(locale=::I18n.locale)
|
48
|
+
locale = locale.to_sym if locale.kind_of? String
|
49
|
+
articles.select {|article| article.locale == locale }
|
51
50
|
end
|
52
51
|
|
53
52
|
# Returns a map from tag name to an array
|
@@ -55,6 +54,7 @@ module Middleman
|
|
55
54
|
# @return [Hash<String, Array<Middleman::Sitemap::Resource>>]
|
56
55
|
def tags
|
57
56
|
tags = {}
|
57
|
+
|
58
58
|
@_articles.each do |article|
|
59
59
|
article.tags.each do |tag|
|
60
60
|
tags[tag] ||= []
|
@@ -89,12 +89,12 @@ module Middleman
|
|
89
89
|
next unless publishable?(article)
|
90
90
|
|
91
91
|
# Add extra parameters from the URL to the page metadata
|
92
|
-
extra_data = params.except *%w(year month day title lang)
|
92
|
+
extra_data = params.except *%w(year month day title lang locale)
|
93
93
|
article.add_metadata page: extra_data unless extra_data.empty?
|
94
94
|
|
95
95
|
# compute output path:
|
96
96
|
# substitute date parts to path pattern
|
97
|
-
article.destination_path = template_path @permalink_template, article
|
97
|
+
article.destination_path = template_path @permalink_template, article, extra_data
|
98
98
|
|
99
99
|
@_articles << article
|
100
100
|
|
@@ -110,10 +110,13 @@ module Middleman
|
|
110
110
|
article = convert_to_article(article)
|
111
111
|
next unless publishable?(article)
|
112
112
|
|
113
|
+
# Add extra parameters from the URL to the page metadata
|
114
|
+
extra_data = params.except *%w(year month day title lang locale)
|
115
|
+
article.add_metadata page: extra_data unless extra_data.empty?
|
116
|
+
|
113
117
|
# The subdir path is the article path with the index file name
|
114
118
|
# or file extension stripped off.
|
115
|
-
|
116
|
-
new_destination_path = template_path @subdir_permalink_template, article, path: path
|
119
|
+
new_destination_path = template_path @subdir_permalink_template, article, extra_data
|
117
120
|
|
118
121
|
resource.destination_path = Middleman::Util.normalize_path(new_destination_path)
|
119
122
|
end
|
@@ -145,14 +148,15 @@ module Middleman
|
|
145
148
|
# @return [Hash] options
|
146
149
|
def permalink_options(resource, extra={})
|
147
150
|
# Allow any frontmatter data to be substituted into the permalink URL
|
148
|
-
params = resource.metadata[:page].slice *@permalink_template.variables
|
151
|
+
params = resource.metadata[:page].slice *@permalink_template.variables.map(&:to_sym)
|
152
|
+
|
149
153
|
params.each do |k, v|
|
150
154
|
params[k] = safe_parameterize(v)
|
151
155
|
end
|
152
156
|
|
153
157
|
params.
|
154
158
|
merge(date_to_params(resource.date)).
|
155
|
-
merge(lang: resource.lang.to_s, title: resource.slug).
|
159
|
+
merge(lang: resource.lang.to_s, locale: resource.locale.to_s, title: resource.slug).
|
156
160
|
merge(extra)
|
157
161
|
end
|
158
162
|
|
@@ -162,8 +166,8 @@ module Middleman
|
|
162
166
|
resource.extend BlogArticle
|
163
167
|
resource.blog_controller = controller
|
164
168
|
|
165
|
-
if !options.preserve_locale && (
|
166
|
-
resource.add_metadata options: { lang: lang }, locals: { lang:
|
169
|
+
if !options.preserve_locale && (locale = resource.locale || resource.lang)
|
170
|
+
resource.add_metadata options: { lang: locale, lang: locale }, locals: { lang: locale, locale: locale }
|
167
171
|
end
|
168
172
|
|
169
173
|
resource
|