middleman-blog-authors 0.0.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.
- data/.gitignore +7 -0
- data/Gemfile +19 -0
- data/README.md +46 -0
- data/Rakefile +14 -0
- data/features/support/env.rb +4 -0
- data/lib/author.rb +22 -0
- data/lib/author_pages.rb +63 -0
- data/lib/blog_article.rb +17 -0
- data/lib/blog_data.rb +12 -0
- data/lib/middleman-blog-authors.rb +35 -0
- data/lib/middleman_extension.rb +1 -0
- data/middleman-blog-authors.gemspec +21 -0
- metadata +81 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# If you have OpenSSL installed, we recommend updating
|
2
|
+
# the following line to use "https"
|
3
|
+
source 'http://rubygems.org'
|
4
|
+
|
5
|
+
# Specify your gem's dependencies in middleman-blog-authors.gemspec
|
6
|
+
gemspec
|
7
|
+
|
8
|
+
group :development do
|
9
|
+
gem "rake"
|
10
|
+
gem "rdoc"
|
11
|
+
gem "yard"
|
12
|
+
end
|
13
|
+
|
14
|
+
group :test do
|
15
|
+
gem "cucumber"
|
16
|
+
gem "fivemat"
|
17
|
+
gem "aruba"
|
18
|
+
gem "rspec"
|
19
|
+
end
|
data/README.md
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
# Middleman-Blog-Authors
|
2
|
+
|
3
|
+
## Installation
|
4
|
+
|
5
|
+
In your Gemfile:
|
6
|
+
|
7
|
+
```
|
8
|
+
gem "middleman-blog-authors", :git => "git@github.com:bellycard/middleman-blog-authors.git"
|
9
|
+
```
|
10
|
+
|
11
|
+
## Configuration
|
12
|
+
|
13
|
+
In your config.rb:
|
14
|
+
|
15
|
+
```
|
16
|
+
activate :authors
|
17
|
+
```
|
18
|
+
|
19
|
+
In your blog posts, add authors to the metadata:
|
20
|
+
|
21
|
+
```
|
22
|
+
---
|
23
|
+
title: Building Middleman Addons
|
24
|
+
date: 2013-07-17
|
25
|
+
authors: Darby Frey
|
26
|
+
---
|
27
|
+
```
|
28
|
+
|
29
|
+
Create a template for the author page:
|
30
|
+
|
31
|
+
`author.html.haml`
|
32
|
+
|
33
|
+
```
|
34
|
+
---
|
35
|
+
title: #{author.name}
|
36
|
+
pageable: true
|
37
|
+
per_page: 10
|
38
|
+
---
|
39
|
+
|
40
|
+
%h1= author.name
|
41
|
+
|
42
|
+
%ul
|
43
|
+
- page_articles.each do |article|
|
44
|
+
%li= link_to article.title, article
|
45
|
+
|
46
|
+
```
|
data/Rakefile
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'bundler'
|
2
|
+
Bundler::GemHelper.install_tasks
|
3
|
+
|
4
|
+
require 'cucumber/rake/task'
|
5
|
+
|
6
|
+
Cucumber::Rake::Task.new(:cucumber, 'Run features that should pass') do |t|
|
7
|
+
t.cucumber_opts = "--color --tags ~@wip --strict --format #{ENV['CUCUMBER_FORMAT'] || 'Fivemat'}"
|
8
|
+
end
|
9
|
+
|
10
|
+
require 'rake/clean'
|
11
|
+
|
12
|
+
task :test => ["cucumber"]
|
13
|
+
|
14
|
+
task :default => :test
|
data/lib/author.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
module Middleman
|
2
|
+
class BlogAuthors
|
3
|
+
class Author
|
4
|
+
attr_accessor :attributes, :articles
|
5
|
+
def initialize(name, local_data = nil)
|
6
|
+
@articles = []
|
7
|
+
@attributes = {
|
8
|
+
"name" => name,
|
9
|
+
"permalink" => BlogAuthors::AuthorPages.permalink(name)
|
10
|
+
}
|
11
|
+
|
12
|
+
if local_data.try(:authors)
|
13
|
+
@attributes.merge!(local_data.authors[@attributes["permalink"]]) if local_data.authors[@attributes["permalink"]]
|
14
|
+
end
|
15
|
+
|
16
|
+
@attributes.each do |attribute|
|
17
|
+
eval "def #{attribute[0]}; @attributes['#{attribute[0]}']; end"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/author_pages.rb
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
module Middleman
|
2
|
+
class BlogAuthors
|
3
|
+
|
4
|
+
# A sitemap plugin that adds author pages to the sitemap
|
5
|
+
# based on the authors of blog articles.
|
6
|
+
class AuthorPages
|
7
|
+
class << self
|
8
|
+
def permalink(author_name)
|
9
|
+
author_name.parameterize
|
10
|
+
end
|
11
|
+
|
12
|
+
def link(blog_authors_options, author)
|
13
|
+
::Middleman::Util.normalize_path(blog_authors_options.author_path.sub(':author', AuthorPages.permalink(author.name)))
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def initialize(app, controller=nil)
|
18
|
+
@app = app
|
19
|
+
@blog_controller = controller
|
20
|
+
end
|
21
|
+
|
22
|
+
def blog_data
|
23
|
+
@app.blog
|
24
|
+
end
|
25
|
+
|
26
|
+
def blog_authors_options
|
27
|
+
@app.blog_authors_options
|
28
|
+
end
|
29
|
+
|
30
|
+
def manipulate_resource_list(resources)
|
31
|
+
# collect authors
|
32
|
+
@app.set :blog_authors_data, {}
|
33
|
+
@app.blog.articles.each do |article|
|
34
|
+
article.author_names.each do |author|
|
35
|
+
permalink = Middleman::BlogAuthors::AuthorPages.permalink(author)
|
36
|
+
if @app.blog_authors_data[permalink].nil?
|
37
|
+
@app.blog_authors_data[permalink] = ::Middleman::BlogAuthors::Author.new(author, @app.data)
|
38
|
+
end
|
39
|
+
@app.blog_authors_data[permalink].articles << article
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
resources + self.blog_data.authors.map do |author|
|
44
|
+
path = AuthorPages.link(self.blog_authors_options, author)
|
45
|
+
|
46
|
+
p = ::Middleman::Sitemap::Resource.new(
|
47
|
+
@app.sitemap,
|
48
|
+
path
|
49
|
+
)
|
50
|
+
p.proxy_to(self.blog_authors_options.author_template)
|
51
|
+
|
52
|
+
p.add_metadata :locals => {
|
53
|
+
'page_type' => 'author',
|
54
|
+
'author' => author,
|
55
|
+
'articles' => author.articles,
|
56
|
+
}
|
57
|
+
|
58
|
+
p
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
data/lib/blog_article.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
module Middleman
|
2
|
+
module Blog
|
3
|
+
module BlogArticle
|
4
|
+
def authors
|
5
|
+
author_permalinks.map{|permalink| @app.blog_authors_data[permalink]}
|
6
|
+
end
|
7
|
+
|
8
|
+
def author_permalinks
|
9
|
+
data.authors ? data.authors.split(',').map{|author| Middleman::BlogAuthors::AuthorPages.permalink(author)} : []
|
10
|
+
end
|
11
|
+
|
12
|
+
def author_names
|
13
|
+
data.authors ? data.authors.split(',').map{|author| author.strip} : []
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/blog_data.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
# Require core library
|
2
|
+
require "middleman-core"
|
3
|
+
|
4
|
+
class BlogAuthors < ::Middleman::Extension
|
5
|
+
option :author_path, "authors/:author.html", 'Path to the individual author pages'
|
6
|
+
option :author_template, "author.html", 'Template for the individual author pages'
|
7
|
+
|
8
|
+
def initialize(app, options_hash={}, &block)
|
9
|
+
super
|
10
|
+
require 'blog_article'
|
11
|
+
require 'blog_data'
|
12
|
+
require 'author_pages'
|
13
|
+
require 'author'
|
14
|
+
|
15
|
+
app.set :blog_authors_options, options
|
16
|
+
app.set :blog_authors_data, {}
|
17
|
+
end
|
18
|
+
|
19
|
+
def after_configuration
|
20
|
+
@app.sitemap.register_resource_list_manipulator(
|
21
|
+
:author_pages,
|
22
|
+
::Middleman::BlogAuthors::AuthorPages.new(@app, self),
|
23
|
+
false
|
24
|
+
)
|
25
|
+
end
|
26
|
+
|
27
|
+
helpers do
|
28
|
+
def link_to_author(author)
|
29
|
+
author_path = ::Middleman::BlogAuthors::AuthorPages.link(self.blog_authors_options, author)
|
30
|
+
link_to author.name, "/#{author_path}"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
::Middleman::Extensions.register(:authors, BlogAuthors)
|
@@ -0,0 +1 @@
|
|
1
|
+
require "middleman-blog-authors"
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |s|
|
5
|
+
s.name = "middleman-blog-authors"
|
6
|
+
s.version = "0.0.1"
|
7
|
+
s.platform = Gem::Platform::RUBY
|
8
|
+
s.authors = ["Darby Frey"]
|
9
|
+
s.email = ["darby@bellycard.com"]
|
10
|
+
# s.homepage = "http://example.com"
|
11
|
+
s.summary = %q{A Middleman extension to add author profile pages to a blog}
|
12
|
+
s.description = %q{A Middleman extension to add author profile pages to a blog}
|
13
|
+
|
14
|
+
s.files = `git ls-files`.split("\n")
|
15
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
16
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
17
|
+
s.require_paths = ["lib"]
|
18
|
+
|
19
|
+
# The version of middleman-core your extension depends on
|
20
|
+
s.add_runtime_dependency("middleman-core", [">= 3.1.3"])
|
21
|
+
end
|
metadata
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: middleman-blog-authors
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Darby Frey
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-09-12 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: middleman-core
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 3.1.3
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 3.1.3
|
30
|
+
description: A Middleman extension to add author profile pages to a blog
|
31
|
+
email:
|
32
|
+
- darby@bellycard.com
|
33
|
+
executables: []
|
34
|
+
extensions: []
|
35
|
+
extra_rdoc_files: []
|
36
|
+
files:
|
37
|
+
- .gitignore
|
38
|
+
- Gemfile
|
39
|
+
- README.md
|
40
|
+
- Rakefile
|
41
|
+
- features/support/env.rb
|
42
|
+
- lib/author.rb
|
43
|
+
- lib/author_pages.rb
|
44
|
+
- lib/blog_article.rb
|
45
|
+
- lib/blog_data.rb
|
46
|
+
- lib/middleman-blog-authors.rb
|
47
|
+
- lib/middleman_extension.rb
|
48
|
+
- middleman-blog-authors.gemspec
|
49
|
+
homepage:
|
50
|
+
licenses: []
|
51
|
+
post_install_message:
|
52
|
+
rdoc_options: []
|
53
|
+
require_paths:
|
54
|
+
- lib
|
55
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
56
|
+
none: false
|
57
|
+
requirements:
|
58
|
+
- - ! '>='
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '0'
|
61
|
+
segments:
|
62
|
+
- 0
|
63
|
+
hash: -3201365490752007184
|
64
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
segments:
|
71
|
+
- 0
|
72
|
+
hash: -3201365490752007184
|
73
|
+
requirements: []
|
74
|
+
rubyforge_project:
|
75
|
+
rubygems_version: 1.8.25
|
76
|
+
signing_key:
|
77
|
+
specification_version: 3
|
78
|
+
summary: A Middleman extension to add author profile pages to a blog
|
79
|
+
test_files:
|
80
|
+
- features/support/env.rb
|
81
|
+
has_rdoc:
|