middleman-blog 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 +5 -0
- data/.rvmrc +1 -0
- data/Gemfile +4 -0
- data/README.rdoc +123 -0
- data/Rakefile +2 -0
- data/lib/middleman-blog.rb +3 -0
- data/lib/middleman-blog/blog_engine.rb +108 -0
- data/lib/middleman-blog/separator.rb +5 -0
- data/lib/middleman-blog/tilt.rb +54 -0
- data/lib/middleman-blog/version.rb +5 -0
- data/middleman-blog.gemspec +23 -0
- metadata +77 -0
data/.gitignore
ADDED
data/.rvmrc
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
rvm ruby-1.9.2-p180@middleman-blog
|
data/Gemfile
ADDED
data/README.rdoc
ADDED
@@ -0,0 +1,123 @@
|
|
1
|
+
= middleman-blog
|
2
|
+
|
3
|
+
Create a blog with Middleman
|
4
|
+
|
5
|
+
== Features
|
6
|
+
|
7
|
+
- metadata (yaml) for your post templates (similar to https://github.com/mojombo/jekyll/wiki/YAML-Front-Matter)
|
8
|
+
- helper methods to access the metadata from every template/layout file
|
9
|
+
- template languages: markdown, textile, rdoc
|
10
|
+
|
11
|
+
== TODO
|
12
|
+
|
13
|
+
- test suite
|
14
|
+
- better documentation
|
15
|
+
- installer/generator
|
16
|
+
- more helpers
|
17
|
+
- more build-in features (releated posts, tags etc.)
|
18
|
+
|
19
|
+
== Usage
|
20
|
+
|
21
|
+
Example: https://github.com/matt-hh/middleman-blog-example
|
22
|
+
|
23
|
+
1. Install
|
24
|
+
|
25
|
+
gem install middleman-blog
|
26
|
+
|
27
|
+
Additionally you need one of the following gems for your post templates: Kramdown, Maruku, RedCloth, BlueCloth, RDiscount ...
|
28
|
+
|
29
|
+
2. Create your project
|
30
|
+
|
31
|
+
mm-init your-middleman-project
|
32
|
+
|
33
|
+
3. Create config/blogs.yml with default values
|
34
|
+
|
35
|
+
blog:
|
36
|
+
title: My Blog
|
37
|
+
author: your name
|
38
|
+
mail: your mail
|
39
|
+
whatever: a value
|
40
|
+
another-blog:
|
41
|
+
title: My second Blog
|
42
|
+
|
43
|
+
Yes, you can define default values for more than one blog...
|
44
|
+
|
45
|
+
4. Create layout files:
|
46
|
+
|
47
|
+
blog_index.haml:
|
48
|
+
|
49
|
+
%h1= current_blog_value('title')
|
50
|
+
= yield
|
51
|
+
|
52
|
+
blog_post.haml:
|
53
|
+
|
54
|
+
%h1= current_post_value('title')
|
55
|
+
= yield
|
56
|
+
|
57
|
+
5. Activate feature in config.rb
|
58
|
+
|
59
|
+
require "middleman-blog"
|
60
|
+
activate :blog_engine
|
61
|
+
|
62
|
+
page "/blog/index.html", :layout => :blog_index, :layout_engine => 'haml'
|
63
|
+
page "/blog/*", :layout => :blog_post, :layout_engine => 'haml'
|
64
|
+
|
65
|
+
page "/another-blog/index.html", :blog_post => :blog_index, :layout_engine => 'haml'
|
66
|
+
page "/another-blog/*", :blog_post => :blog_post, :layout_engine => 'haml'
|
67
|
+
|
68
|
+
6. Create directories in your source folder
|
69
|
+
|
70
|
+
mkdir blog
|
71
|
+
mkdir my-second-blog
|
72
|
+
|
73
|
+
In these folders you can create your posts.
|
74
|
+
|
75
|
+
blog/my-first-post.html.md
|
76
|
+
|
77
|
+
title: Title of my first post
|
78
|
+
date: 2011-06-05
|
79
|
+
----
|
80
|
+
|
81
|
+
|
82
|
+
My first blog post...
|
83
|
+
|
84
|
+
Important: 2 newlines between "----" and "My first..."
|
85
|
+
|
86
|
+
== Metadata
|
87
|
+
|
88
|
+
- "----\n\n\n" separates the metadata from your post data.
|
89
|
+
- metadata supports ERB
|
90
|
+
- you can define whatever you want
|
91
|
+
- special keys for blogs.yml:
|
92
|
+
sort_by: name of another key (default is date)
|
93
|
+
sort_direction: normal | reverse (default is reverse)
|
94
|
+
- special keys for yaml header:
|
95
|
+
date: default is mtime for template file
|
96
|
+
|
97
|
+
== Helper methods
|
98
|
+
|
99
|
+
- current_blog
|
100
|
+
- current_blog_meta(key) or current_blog[key]
|
101
|
+
- current_post
|
102
|
+
- current_post_meta(key) or current_post[key]
|
103
|
+
- next_post
|
104
|
+
- prev_post
|
105
|
+
- current_blog_ident
|
106
|
+
- current_post_ident
|
107
|
+
- current_post_index
|
108
|
+
|
109
|
+
=== Examples
|
110
|
+
|
111
|
+
- Link to the next post
|
112
|
+
|
113
|
+
link_to next_post['title'], next_post['link']
|
114
|
+
|
115
|
+
- List of 10 last posts
|
116
|
+
|
117
|
+
%ul
|
118
|
+
- current_blog["posts"][0,10].each do |post|
|
119
|
+
%li= link_to post['title'], post['link']
|
120
|
+
|
121
|
+
== Links
|
122
|
+
|
123
|
+
* https://github.com/tdreyno/middleman
|
data/Rakefile
ADDED
@@ -0,0 +1,108 @@
|
|
1
|
+
module Middleman
|
2
|
+
module Features
|
3
|
+
module BlogEngine
|
4
|
+
|
5
|
+
class << self
|
6
|
+
def registered(app)
|
7
|
+
app.helpers BlogEngine::Helpers
|
8
|
+
end
|
9
|
+
alias :included :registered
|
10
|
+
end
|
11
|
+
|
12
|
+
module Helpers
|
13
|
+
def blog(blog_ident)
|
14
|
+
blogs[blog_ident] || {"posts" => []}
|
15
|
+
end
|
16
|
+
def current_blog
|
17
|
+
blog(current_blog_ident)
|
18
|
+
end
|
19
|
+
def blog_meta(blog_ident, key)
|
20
|
+
blog(blog_ident)[key] || no_value
|
21
|
+
end
|
22
|
+
def current_blog_meta(key)
|
23
|
+
blog_meta(current_blog_ident,key)
|
24
|
+
end
|
25
|
+
def blog_post(blog_ident, post_ident)
|
26
|
+
blog(blog_ident)["posts"].find {|post| post["ident"] == post_ident } || {}
|
27
|
+
end
|
28
|
+
def current_post
|
29
|
+
blog_post(current_blog_ident, current_post_ident)
|
30
|
+
end
|
31
|
+
def blog_post_meta(blog_ident, post_ident, key)
|
32
|
+
blog_post(blog_ident, post_ident)[key] || blog_meta(blog_ident, key) || no_value
|
33
|
+
end
|
34
|
+
def current_post_meta(key)
|
35
|
+
blog_post_meta(current_blog_ident, current_post_ident, key)
|
36
|
+
end
|
37
|
+
def next_post
|
38
|
+
current_blog["posts"][current_post_index + 1]
|
39
|
+
end
|
40
|
+
def prev_post
|
41
|
+
current_blog["posts"][current_post_index - 1]
|
42
|
+
end
|
43
|
+
def current_blog_ident
|
44
|
+
(File.dirname request_path).gsub(%r{^/}, '') || "blog"
|
45
|
+
end
|
46
|
+
def current_post_ident
|
47
|
+
File.basename(request_path).split(".", 2)[0]
|
48
|
+
end
|
49
|
+
def current_post_index
|
50
|
+
current_blog["posts"].index current_post
|
51
|
+
end
|
52
|
+
|
53
|
+
def blogs
|
54
|
+
Middleman::Features::BlogEngine::Meta.new(self).data
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
def request_path
|
59
|
+
self.env['REQUEST_PATH'] || ""
|
60
|
+
end
|
61
|
+
def no_value
|
62
|
+
"-- no value --"
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
class Meta
|
68
|
+
attr_reader :data
|
69
|
+
|
70
|
+
def initialize(app)
|
71
|
+
@app = app
|
72
|
+
|
73
|
+
config_file = File.join(@app.class.root, "config", "blogs.yml")
|
74
|
+
raise "could not find \"#{config_file}\" " unless File.exists?(config_file)
|
75
|
+
blog_config = YAML.load_file(config_file)
|
76
|
+
@data = blog_config
|
77
|
+
|
78
|
+
blog_config.each do |blog_ident,blog_values|
|
79
|
+
blog_source_dir = File.join(@app.class.views, blog_ident)
|
80
|
+
@data[blog_ident]["posts"] = []
|
81
|
+
Dir["#{blog_source_dir}/*.html.*"].each do |file|
|
82
|
+
if file =~ /.*\.html\.(markdown|mkd|md|textile|rdoc)$/
|
83
|
+
post_ident = File.basename(file).split(".", 2)[0]
|
84
|
+
|
85
|
+
post_meta_yml = ERB.new( (File.read(file).split(/#{Middleman::Blog::SEPARATOR}/, 2))[0] || "" ).result
|
86
|
+
post_meta = YAML.load(post_meta_yml) || {}
|
87
|
+
post_meta["ident"] = post_ident
|
88
|
+
post_meta["link"] = "/%s" % File.join( blog_ident, File.basename(file, '.*') )
|
89
|
+
post_meta["date"] = File.mtime(file).to_s unless post_meta["date"]
|
90
|
+
@data[blog_ident]["posts"] << post_meta
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
sort_key = @data[blog_ident]["sort_key"] || "date"
|
95
|
+
@data[blog_ident]["posts"].sort_by! { |post| post[sort_key] }
|
96
|
+
sort_direction = @data[blog_ident]["sort_direction"] || "reverse"
|
97
|
+
@data[blog_ident]["posts"].reverse! if sort_direction == "reverse"
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|
101
|
+
|
102
|
+
end
|
103
|
+
|
104
|
+
|
105
|
+
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module Tilt
|
2
|
+
|
3
|
+
module MiddlemanBlogTemplate
|
4
|
+
def prepare
|
5
|
+
@data = data.gsub(/^.*?#{Middleman::Blog::SEPARATOR}/m, '')
|
6
|
+
super
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
|
11
|
+
# MARKDOWN
|
12
|
+
|
13
|
+
class MarukuMiddlemanBlogTemplate < MarukuTemplate
|
14
|
+
include Tilt::MiddlemanBlogTemplate
|
15
|
+
end
|
16
|
+
register MarukuMiddlemanBlogTemplate, 'markdown', 'mkd', 'md'
|
17
|
+
|
18
|
+
class KramdownMiddlemanBlogTemplate < KramdownTemplate
|
19
|
+
include Tilt::MiddlemanBlogTemplate
|
20
|
+
end
|
21
|
+
register KramdownMiddlemanBlogTemplate, 'markdown', 'mkd', 'md'
|
22
|
+
|
23
|
+
class BlueClothMiddlemanBlogTemplate < BlueClothTemplate
|
24
|
+
include Tilt::MiddlemanBlogTemplate
|
25
|
+
end
|
26
|
+
register BlueClothMiddlemanBlogTemplate, 'markdown', 'mkd', 'md'
|
27
|
+
|
28
|
+
class RedcarpetMiddlemanBlogTemplate < RedcarpetTemplate
|
29
|
+
include Tilt::MiddlemanBlogTemplate
|
30
|
+
end
|
31
|
+
register RedcarpetMiddlemanBlogTemplate, 'markdown', 'mkd', 'md'
|
32
|
+
|
33
|
+
class RDiscountMiddlemanBlogTemplate < RDiscountTemplate
|
34
|
+
include Tilt::MiddlemanBlogTemplate
|
35
|
+
end
|
36
|
+
register RDiscountMiddlemanBlogTemplate, 'markdown', 'mkd', 'md'
|
37
|
+
|
38
|
+
# TEXTILE
|
39
|
+
|
40
|
+
class RedClothMiddlemanBlogTemplate < RedClothTemplate
|
41
|
+
include Tilt::MiddlemanBlogTemplate
|
42
|
+
end
|
43
|
+
register RedClothMiddlemanBlogTemplate, 'textile'
|
44
|
+
|
45
|
+
# RDOC
|
46
|
+
|
47
|
+
class RDocMiddlemanBlogTemplate < RDocTemplate
|
48
|
+
include Tilt::MiddlemanBlogTemplate
|
49
|
+
end
|
50
|
+
register RDocMiddlemanBlogTemplate, 'rdoc'
|
51
|
+
|
52
|
+
|
53
|
+
|
54
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "middleman-blog/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "middleman-blog"
|
7
|
+
s.version = Middleman::Blog::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Matthias Döring"]
|
10
|
+
s.email = ["matt@foryourcontent.de"]
|
11
|
+
s.homepage = "http://rubygems.org/gems/middleman-blog"
|
12
|
+
s.summary = %q{Create a blog with Middleman}
|
13
|
+
s.description = %q{Create a blog with Middleman}
|
14
|
+
|
15
|
+
s.rubyforge_project = "middleman-blog"
|
16
|
+
|
17
|
+
s.add_dependency "middleman", "~> 1.2.0"
|
18
|
+
|
19
|
+
s.files = `git ls-files`.split("\n")
|
20
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
21
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
22
|
+
s.require_paths = ["lib"]
|
23
|
+
end
|
metadata
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: middleman-blog
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.0.1
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- "Matthias D\xC3\xB6ring"
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2011-06-06 00:00:00 +02:00
|
14
|
+
default_executable:
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: middleman
|
18
|
+
prerelease: false
|
19
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
|
+
none: false
|
21
|
+
requirements:
|
22
|
+
- - ~>
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: 1.2.0
|
25
|
+
type: :runtime
|
26
|
+
version_requirements: *id001
|
27
|
+
description: Create a blog with Middleman
|
28
|
+
email:
|
29
|
+
- matt@foryourcontent.de
|
30
|
+
executables: []
|
31
|
+
|
32
|
+
extensions: []
|
33
|
+
|
34
|
+
extra_rdoc_files: []
|
35
|
+
|
36
|
+
files:
|
37
|
+
- .gitignore
|
38
|
+
- .rvmrc
|
39
|
+
- Gemfile
|
40
|
+
- README.rdoc
|
41
|
+
- Rakefile
|
42
|
+
- lib/middleman-blog.rb
|
43
|
+
- lib/middleman-blog/blog_engine.rb
|
44
|
+
- lib/middleman-blog/separator.rb
|
45
|
+
- lib/middleman-blog/tilt.rb
|
46
|
+
- lib/middleman-blog/version.rb
|
47
|
+
- middleman-blog.gemspec
|
48
|
+
has_rdoc: true
|
49
|
+
homepage: http://rubygems.org/gems/middleman-blog
|
50
|
+
licenses: []
|
51
|
+
|
52
|
+
post_install_message:
|
53
|
+
rdoc_options: []
|
54
|
+
|
55
|
+
require_paths:
|
56
|
+
- lib
|
57
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
59
|
+
requirements:
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: "0"
|
63
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
64
|
+
none: false
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: "0"
|
69
|
+
requirements: []
|
70
|
+
|
71
|
+
rubyforge_project: middleman-blog
|
72
|
+
rubygems_version: 1.6.2
|
73
|
+
signing_key:
|
74
|
+
specification_version: 3
|
75
|
+
summary: Create a blog with Middleman
|
76
|
+
test_files: []
|
77
|
+
|