middleman-blog 3.5.0 → 3.5.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -1
- data/README.md +1 -1
- data/Rakefile +9 -1
- data/lib/middleman-blog/blog_data.rb +12 -13
- data/lib/middleman-blog/template/source/layout.erb +1 -1
- data/lib/middleman-blog/uri_templates.rb +46 -6
- data/lib/middleman-blog/version.rb +1 -1
- data/spec/spec_helper.rb +5 -0
- data/spec/uri_templates_spec.rb +60 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9607656cf709f1ad3a4cc7ec060e3c3cd5e73ae3
|
4
|
+
data.tar.gz: 169bd0122267d51e7768885fdfa3a782d6a7f9af
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0bacecc695f007c53ba6df3b8dd259768b151b2b783f16a19762dad8fe5a90014c62c453e3c26c31614ebac8c58feb79cdaf85eeecc2eed8daeff8ec48ebe5cb
|
7
|
+
data.tar.gz: fbc3ce009ad08ccce6c644b4741dde9e36cdb1d4a00ca10514d4bd9afd1fa0218af78ad70f788a3d6d7eb783e2136c6f37d6ff08e5150a509a09b9719ec5351a
|
data/CHANGELOG.md
CHANGED
@@ -1,4 +1,12 @@
|
|
1
|
-
|
1
|
+
3.5.1
|
2
|
+
===
|
3
|
+
|
4
|
+
* Remove a broken bracket in the blog template. #181
|
5
|
+
* Fix transliteration of strings into URL slugs to still transliterate when it can but not smash multibyte chars. #183
|
6
|
+
* Only match source URI templates if the date components match what a date would look like, and avoid throwing when companion files do not have an article. #184
|
7
|
+
* Re-support spaces in blog article source paths. #185
|
8
|
+
|
9
|
+
3.5.0
|
2
10
|
===
|
3
11
|
|
4
12
|
* Add support for internationalization and locale-specific articles. #156
|
data/README.md
CHANGED
@@ -21,7 +21,7 @@ activate :blog
|
|
21
21
|
|
22
22
|
## Learn More
|
23
23
|
|
24
|
-
See [the blog extension guide](http://middlemanapp.com/blogging/) for detailed information on configuring and using the blog extension.
|
24
|
+
See [the blog extension guide](http://middlemanapp.com/basics/blogging/) for detailed information on configuring and using the blog extension.
|
25
25
|
|
26
26
|
Additionally, up-to-date generated code documentation is available on [RubyDoc].
|
27
27
|
|
data/Rakefile
CHANGED
@@ -17,7 +17,15 @@ end
|
|
17
17
|
|
18
18
|
require 'rake/clean'
|
19
19
|
|
20
|
-
|
20
|
+
desc "Run tests, both RSpec and Cucumber"
|
21
|
+
task :test => [:spec, :cucumber]
|
22
|
+
|
23
|
+
require 'rspec/core/rake_task'
|
24
|
+
desc "Run RSpec"
|
25
|
+
RSpec::Core::RakeTask.new do |spec|
|
26
|
+
spec.pattern = 'spec/**/*_spec.rb'
|
27
|
+
spec.rspec_opts = ['--color', '--format nested']
|
28
|
+
end
|
21
29
|
|
22
30
|
begin
|
23
31
|
require 'cane/rake_task'
|
@@ -78,7 +78,7 @@ module Middleman
|
|
78
78
|
used_resources = []
|
79
79
|
|
80
80
|
resources.each do |resource|
|
81
|
-
if (params = @source_template
|
81
|
+
if (params = extract_params(@source_template, resource.path))
|
82
82
|
article = convert_to_article(resource)
|
83
83
|
next unless publishable?(article)
|
84
84
|
|
@@ -92,26 +92,25 @@ module Middleman
|
|
92
92
|
|
93
93
|
@_articles << article
|
94
94
|
|
95
|
-
elsif (params = @subdir_template
|
95
|
+
elsif (params = extract_params(@subdir_template, resource.path))
|
96
96
|
# It's not an article, but it's thhe companion files for an article
|
97
97
|
# (in a subdirectory named after the article)
|
98
98
|
# figure out the matching article for this subdirectory file
|
99
99
|
|
100
100
|
article_path = @source_template.expand(params).to_s
|
101
101
|
|
102
|
-
article = @app.sitemap.find_resource_by_path(article_path)
|
103
|
-
|
102
|
+
if article = @app.sitemap.find_resource_by_path(article_path)
|
103
|
+
# The article may not yet have been processed, so convert it here.
|
104
|
+
article = convert_to_article(article)
|
105
|
+
next unless publishable?(article)
|
104
106
|
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
# The subdir path is the article path with the index file name
|
110
|
-
# or file extension stripped off.
|
111
|
-
path = params.fetch('path')
|
112
|
-
new_destination_path = template_path @subdir_permalink_template, article, path: path
|
107
|
+
# The subdir path is the article path with the index file name
|
108
|
+
# or file extension stripped off.
|
109
|
+
path = params.fetch('path')
|
110
|
+
new_destination_path = template_path @subdir_permalink_template, article, path: path
|
113
111
|
|
114
|
-
|
112
|
+
resource.destination_path = Middleman::Util.normalize_path(new_destination_path)
|
113
|
+
end
|
115
114
|
end
|
116
115
|
|
117
116
|
used_resources << resource
|
@@ -4,7 +4,7 @@
|
|
4
4
|
<meta charset="utf-8" />
|
5
5
|
<meta http-equiv='X-UA-Compatible' content='IE=edge;chrome=1' />
|
6
6
|
<title>Blog Title<%= ' - ' + current_article.title unless current_article.nil? %></title>
|
7
|
-
<%= feed_tag :atom, "#{blog.options.prefix.to_s}/feed.xml"
|
7
|
+
<%= feed_tag :atom, "#{blog.options.prefix.to_s}/feed.xml", title: "Atom Feed" %>
|
8
8
|
</head>
|
9
9
|
<body>
|
10
10
|
|
@@ -1,4 +1,7 @@
|
|
1
1
|
require 'addressable/template'
|
2
|
+
require 'middleman-core/util'
|
3
|
+
require 'active_support/inflector'
|
4
|
+
require 'active_support/inflector/transliterate'
|
2
5
|
|
3
6
|
module Middleman
|
4
7
|
module Blog
|
@@ -32,14 +35,36 @@ module Middleman
|
|
32
35
|
::Middleman::Util.normalize_path Addressable::URI.unencode(template.expand(data)).to_s
|
33
36
|
end
|
34
37
|
|
35
|
-
#
|
38
|
+
# Use a template to extract parameters from a path, and validate some special (date)
|
39
|
+
# keys. Returns nil if the special keys don't match.
|
40
|
+
#
|
41
|
+
# @param [Addressable::Template] template
|
42
|
+
# @param [String] path
|
43
|
+
def extract_params(template, path)
|
44
|
+
params = template.extract(path, BlogTemplateProcessor)
|
45
|
+
end
|
46
|
+
|
47
|
+
# Parameterize a string preserving any multibyte characters
|
36
48
|
def safe_parameterize(str)
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
49
|
+
sep = '-'
|
50
|
+
|
51
|
+
# Reimplementation of http://api.rubyonrails.org/classes/ActiveSupport/Inflector.html#method-i-parameterize that preserves un-transliterate-able multibyte chars.
|
52
|
+
parameterized_string = ActiveSupport::Inflector.transliterate(str).downcase
|
53
|
+
parameterized_string.gsub!(/[^a-z0-9\-_\?]+/, sep)
|
54
|
+
|
55
|
+
parameterized_string.chars.to_a.each_with_index do |char, i|
|
56
|
+
if char == '?' && str[i].bytes.count != 1
|
57
|
+
parameterized_string[i] = str[i]
|
58
|
+
end
|
42
59
|
end
|
60
|
+
|
61
|
+
re_sep = Regexp.escape(sep)
|
62
|
+
# No more than one of the separator in a row.
|
63
|
+
parameterized_string.gsub!(/#{re_sep}{2,}/, sep)
|
64
|
+
# Remove leading/trailing separator.
|
65
|
+
parameterized_string.gsub!(/^#{re_sep}|#{re_sep}$/, '')
|
66
|
+
|
67
|
+
parameterized_string
|
43
68
|
end
|
44
69
|
|
45
70
|
# Convert a date into a hash of components to strings
|
@@ -54,5 +79,20 @@ module Middleman
|
|
54
79
|
}
|
55
80
|
end
|
56
81
|
end
|
82
|
+
|
83
|
+
# A special template processor that validates date fields
|
84
|
+
# and has an extra-permissive default regex.
|
85
|
+
#
|
86
|
+
# See https://github.com/sporkmonger/addressable/blob/master/lib/addressable/template.rb#L279
|
87
|
+
class BlogTemplateProcessor
|
88
|
+
def self.match(name)
|
89
|
+
case name
|
90
|
+
when 'year' then '\d{4}'
|
91
|
+
when 'month' then '\d{2}'
|
92
|
+
when 'day' then '\d{2}'
|
93
|
+
else '.*?'
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
57
97
|
end
|
58
98
|
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'middleman-blog/uri_templates'
|
4
|
+
|
5
|
+
describe 'Middleman::Blog::UriTemplates' do
|
6
|
+
include Middleman::Blog::UriTemplates
|
7
|
+
|
8
|
+
describe 'safe_parameterize' do
|
9
|
+
it 'can parameterize normal strings' do
|
10
|
+
safe_parameterize('Some FUN stuff!').should == 'some-fun-stuff'
|
11
|
+
end
|
12
|
+
|
13
|
+
it "doesn't mangle unicode strings" do
|
14
|
+
safe_parameterize('☆☆☆').should == '☆☆☆'
|
15
|
+
safe_parameterize('明日がある').should == '明日がある'
|
16
|
+
end
|
17
|
+
|
18
|
+
it "still transliterates when it's safe" do
|
19
|
+
safe_parameterize('Schlagwörter').should == 'schlagworter'
|
20
|
+
end
|
21
|
+
|
22
|
+
it "can handle mixed strings" do
|
23
|
+
safe_parameterize('What ☆☆☆!').should == 'what-☆☆☆'
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe 'extract_params' do
|
28
|
+
it 'matches correctly' do
|
29
|
+
template = uri_template('{year}/{month}/{day}/{title}/{+path}')
|
30
|
+
params = extract_params(template, '2013/12/13/foo-bar/foo/bar.html')
|
31
|
+
|
32
|
+
params['year'].should == '2013'
|
33
|
+
params['month'].should == '12'
|
34
|
+
params['day'].should == '13'
|
35
|
+
params['title'].should == 'foo-bar'
|
36
|
+
params['path'].should == 'foo/bar.html'
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'returns nil if there is no match' do
|
40
|
+
template = uri_template('{year}/{month}/{day}/{title}/{+path}')
|
41
|
+
extract_params(template, 'foo/bar.html').should == nil
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'returns nil if there is no match in the date bits' do
|
45
|
+
template = uri_template('{year}/{month}/{day}/{title}/{+path}')
|
46
|
+
params = extract_params(template, '2a13/1a2/1s3/foo-bar/foo/bar.html')
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'matches even when the path contains spaces' do
|
50
|
+
template = uri_template('{year}/{month}/{day}/{title}/{+path}')
|
51
|
+
params = extract_params(template, '2013/12/13/foo - bar/foo/bar.html')
|
52
|
+
|
53
|
+
params['year'].should == '2013'
|
54
|
+
params['month'].should == '12'
|
55
|
+
params['day'].should == '13'
|
56
|
+
params['title'].should == 'foo - bar'
|
57
|
+
params['path'].should == 'foo/bar.html'
|
58
|
+
end
|
59
|
+
end
|
60
|
+
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.5.
|
4
|
+
version: 3.5.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-
|
12
|
+
date: 2013-12-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: middleman-core
|
@@ -341,6 +341,8 @@ files:
|
|
341
341
|
- lib/middleman-blog/version.rb
|
342
342
|
- lib/middleman_extension.rb
|
343
343
|
- middleman-blog.gemspec
|
344
|
+
- spec/spec_helper.rb
|
345
|
+
- spec/uri_templates_spec.rb
|
344
346
|
homepage: https://github.com/middleman/middleman-blog
|
345
347
|
licenses:
|
346
348
|
- MIT
|