middleman-blog 0.1.5 → 3.0.0.beta.3
Sign up to get free protection for your applications and to get access to all the features.
- data/.gemtest +0 -0
- data/.gitignore +5 -0
- data/.travis.yml +9 -0
- data/.yardopts +3 -0
- data/Gemfile +19 -0
- data/LICENSE +20 -0
- data/README.md +62 -0
- data/Rakefile +15 -0
- data/features/article_cli.feature +7 -0
- data/features/blog_sources.feature +9 -0
- data/features/calendar.feature +30 -0
- data/features/directory_indexes.feature +6 -0
- data/features/encoding.feature +0 -0
- data/features/filename_date.feature +9 -0
- data/features/next_previous.feature +8 -0
- data/features/preview.feature +29 -0
- data/features/support/env.rb +4 -0
- data/features/tags.feature +50 -0
- data/fixtures/blog-sources-app/config.rb +3 -0
- data/fixtures/blog-sources-app/source/_article_template.erb +1 -0
- data/fixtures/blog-sources-app/source/blog/2011-01-01-new-article.html.markdown +6 -0
- data/fixtures/blog-sources-app/source/index.html.erb +9 -0
- data/fixtures/blog-sources-app/source/layout.erb +13 -0
- data/fixtures/calendar-app/config.rb +5 -0
- data/fixtures/calendar-app/source/blog/2011-01-01-new-article.html.markdown +7 -0
- data/fixtures/calendar-app/source/blog/2011-01-02-another-article.html.markdown +8 -0
- data/fixtures/calendar-app/source/calendar.html.erb +13 -0
- data/fixtures/calendar-app/source/index.html.erb +3 -0
- data/fixtures/calendar-app/source/layout.erb +15 -0
- data/fixtures/filename-date-app/config.rb +1 -0
- data/fixtures/filename-date-app/source/2011-01-01-new-article.html.markdown +5 -0
- data/fixtures/filename-date-app/source/2011-01-03-filename-and-frontmatter.html.markdown +6 -0
- data/fixtures/filename-date-app/source/layout.erb +14 -0
- data/fixtures/indexes-app/config.rb +5 -0
- data/fixtures/indexes-app/source/2011/01/01/new-article.html.markdown +6 -0
- data/fixtures/indexes-app/source/_article_template.erb +1 -0
- data/fixtures/indexes-app/source/index.html.erb +9 -0
- data/fixtures/indexes-app/source/layout.erb +13 -0
- data/fixtures/preview-app/config.rb +3 -0
- data/fixtures/preview-app/source/2011/01/01/new-article.html.markdown +6 -0
- data/fixtures/preview-app/source/_article_template.erb +10 -0
- data/fixtures/preview-app/source/index.html.erb +9 -0
- data/fixtures/preview-app/source/layout.erb +22 -0
- data/fixtures/tags-app/config.rb +6 -0
- data/fixtures/tags-app/source/blog/2011-01-01-new-article.html.markdown +7 -0
- data/fixtures/tags-app/source/blog/2011-01-02-another-article.html.markdown +8 -0
- data/fixtures/tags-app/source/index.html.erb +3 -0
- data/fixtures/tags-app/source/layout.erb +13 -0
- data/fixtures/tags-app/source/tag.html.erb +7 -0
- data/fixtures/utf8ouch/config.rb +17 -0
- data/fixtures/utf8ouch/source/2010/11/13/telling-time.html.markdown +73 -0
- data/fixtures/utf8ouch/source/2011/01/01/new-article.html.markdown +6 -0
- data/{lib/middleman-blog/template → fixtures/utf8ouch}/source/_article_template.erb +0 -0
- data/{lib/middleman-blog/template → fixtures/utf8ouch}/source/archives/index.html.erb +0 -0
- data/fixtures/utf8ouch/source/feed.xml.builder +23 -0
- data/fixtures/utf8ouch/source/index.html.erb +9 -0
- data/fixtures/utf8ouch/source/layout.erb +30 -0
- data/lib/middleman-blog.rb +10 -2
- data/lib/middleman-blog/blog_article.rb +123 -0
- data/lib/middleman-blog/blog_data.rb +94 -0
- data/lib/middleman-blog/calendar_pages.rb +85 -0
- data/lib/middleman-blog/commands/article.rb +52 -0
- data/lib/middleman-blog/commands/article.tt +6 -0
- data/lib/middleman-blog/extension.rb +170 -0
- data/lib/middleman-blog/tag_pages.rb +33 -0
- data/lib/middleman-blog/template.rb +19 -8
- data/lib/middleman-blog/template/config.tt +101 -5
- data/lib/middleman-blog/template/shared/Gemfile.tt +4 -0
- data/lib/middleman-blog/template/source/2012-01-01-example-article.html.markdown +7 -0
- data/lib/middleman-blog/template/source/calendar.html.erb +15 -0
- data/lib/middleman-blog/template/source/feed.xml.builder +2 -2
- data/lib/middleman-blog/template/source/index.html.erb +8 -9
- data/lib/middleman-blog/template/source/layout.erb +18 -12
- data/lib/middleman-blog/template/source/tag.html.erb +7 -0
- data/lib/middleman-blog/version.rb +1 -1
- data/lib/{middleman_init.rb → middleman_extension.rb} +0 -0
- data/middleman-blog.gemspec +1 -2
- metadata +110 -63
- data/lib/middleman-blog/feature.rb +0 -162
- data/lib/middleman-blog/template/config.ru +0 -9
- data/lib/middleman-blog/template/source/2011/01/01/new-article.html.markdown +0 -6
@@ -0,0 +1,94 @@
|
|
1
|
+
module Middleman
|
2
|
+
module Blog
|
3
|
+
# A store of all the blog articles in the site, with accessors
|
4
|
+
# for the articles by various dimensions. Accessed via "blog" in
|
5
|
+
# templates.
|
6
|
+
class BlogData
|
7
|
+
# A regex for matching blog article source paths
|
8
|
+
# @return [Regex]
|
9
|
+
attr_reader :path_matcher
|
10
|
+
|
11
|
+
# The configured options for this blog
|
12
|
+
# @return [Thor::CoreExt::HashWithIndifferentAccess]
|
13
|
+
attr_reader :options
|
14
|
+
|
15
|
+
# @private
|
16
|
+
def initialize(app, options={})
|
17
|
+
@app = app
|
18
|
+
@options = options
|
19
|
+
|
20
|
+
# A list of resources corresponding to blog articles
|
21
|
+
@_articles = []
|
22
|
+
|
23
|
+
matcher = Regexp.escape(options.sources).
|
24
|
+
sub(/^\//, "").
|
25
|
+
sub(":year", "(\\d{4})").
|
26
|
+
sub(":month", "(\\d{2})").
|
27
|
+
sub(":day", "(\\d{2})").
|
28
|
+
sub(":title", "(.*)")
|
29
|
+
|
30
|
+
@path_matcher = /^#{matcher}/
|
31
|
+
end
|
32
|
+
|
33
|
+
# A list of all blog articles, sorted by date
|
34
|
+
# @return [Array<Middleman::Sitemap::Resource>]
|
35
|
+
def articles
|
36
|
+
@_articles.sort do |a,b|
|
37
|
+
b.date <=> a.date
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
# The BlogArticle for the given path, or nil if one doesn't exist.
|
42
|
+
# @return [Middleman::Sitemap::Resource]
|
43
|
+
def article(path)
|
44
|
+
article = @app.sitemap.find_resource_by_path(path.to_s)
|
45
|
+
if article && article.is_a?(BlogArticle)
|
46
|
+
article
|
47
|
+
else
|
48
|
+
nil
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
# Returns a map from tag name to an array
|
53
|
+
# of BlogArticles associated with that tag.
|
54
|
+
# @return [Hash<String, Array<Middleman::Sitemap::Resource>>]
|
55
|
+
def tags
|
56
|
+
tags = {}
|
57
|
+
@_articles.each do |article|
|
58
|
+
article.tags.each do |tag|
|
59
|
+
tags[tag] ||= []
|
60
|
+
tags[tag] << article
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
tags
|
65
|
+
end
|
66
|
+
|
67
|
+
# Updates' blog articles destination paths to be the
|
68
|
+
# permalink.
|
69
|
+
# @return [void]
|
70
|
+
def manipulate_resource_list(resources)
|
71
|
+
@_articles = []
|
72
|
+
|
73
|
+
resources.each do |resource|
|
74
|
+
if resource.path =~ path_matcher
|
75
|
+
resource.extend BlogArticle
|
76
|
+
resource.slug = $4
|
77
|
+
|
78
|
+
# compute output path:
|
79
|
+
# substitute date parts to path pattern
|
80
|
+
resource.destination_path = options.permalink.
|
81
|
+
sub(':year', resource.date.year.to_s).
|
82
|
+
sub(':month', resource.date.month.to_s.rjust(2,'0')).
|
83
|
+
sub(':day', resource.date.day.to_s.rjust(2,'0')).
|
84
|
+
sub(':title', resource.slug)
|
85
|
+
|
86
|
+
resource.destination_path = Middleman::Util.normalize_path(resource.destination_path)
|
87
|
+
|
88
|
+
@_articles << resource
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
module Middleman
|
2
|
+
module Blog
|
3
|
+
|
4
|
+
# A sitemap plugin that adds month/day/year pages to the sitemap
|
5
|
+
# based on the dates of blog articles.
|
6
|
+
class CalendarPages
|
7
|
+
def initialize(app)
|
8
|
+
@app = app
|
9
|
+
end
|
10
|
+
|
11
|
+
# Update the main sitemap resource list
|
12
|
+
# @return [void]
|
13
|
+
def manipulate_resource_list(resources)
|
14
|
+
new_resources = []
|
15
|
+
# Set up date pages if the appropriate templates have been specified
|
16
|
+
@app.blog.articles.group_by {|a| a.date.year }.each do |year, year_articles|
|
17
|
+
if @app.blog.options.year_template
|
18
|
+
@app.ignore @app.blog.options.year_template
|
19
|
+
|
20
|
+
path = Middleman::Util.normalize_path(@app.blog_year_path(year))
|
21
|
+
|
22
|
+
p = ::Middleman::Sitemap::Resource.new(
|
23
|
+
@app.sitemap,
|
24
|
+
path
|
25
|
+
)
|
26
|
+
p.proxy_to(@app.blog.options.year_template)
|
27
|
+
|
28
|
+
p.add_metadata do
|
29
|
+
@year = year
|
30
|
+
@articles = year_articles
|
31
|
+
end
|
32
|
+
|
33
|
+
new_resources << p
|
34
|
+
end
|
35
|
+
|
36
|
+
year_articles.group_by {|a| a.date.month }.each do |month, month_articles|
|
37
|
+
if @app.blog.options.month_template
|
38
|
+
@app.ignore @app.blog.options.month_template
|
39
|
+
|
40
|
+
path = Middleman::Util.normalize_path(@app.blog_month_path(year, month))
|
41
|
+
|
42
|
+
p = ::Middleman::Sitemap::Resource.new(
|
43
|
+
@app.sitemap,
|
44
|
+
path
|
45
|
+
)
|
46
|
+
p.proxy_to(@app.blog.options.month_template)
|
47
|
+
|
48
|
+
p.add_metadata do
|
49
|
+
@year = year
|
50
|
+
@month = month
|
51
|
+
@articles = month_articles
|
52
|
+
end
|
53
|
+
|
54
|
+
new_resources << p
|
55
|
+
end
|
56
|
+
|
57
|
+
month_articles.group_by {|a| a.date.day }.each do |day, day_articles|
|
58
|
+
if @app.blog.options.day_template
|
59
|
+
@app.ignore @app.blog.options.day_template
|
60
|
+
|
61
|
+
path = Middleman::Util.normalize_path(@app.blog_day_path(year, month, day))
|
62
|
+
p = ::Middleman::Sitemap::Resource.new(
|
63
|
+
@app.sitemap,
|
64
|
+
path
|
65
|
+
)
|
66
|
+
p.proxy_to(@app.blog.options.month_template)
|
67
|
+
|
68
|
+
p.add_metadata do
|
69
|
+
@year = year
|
70
|
+
@month = month
|
71
|
+
@day = day
|
72
|
+
@articles = day_articles
|
73
|
+
end
|
74
|
+
|
75
|
+
new_resources << p
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
resources + new_resources
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'middleman-core/cli'
|
2
|
+
require 'date'
|
3
|
+
|
4
|
+
module Middleman
|
5
|
+
module Cli
|
6
|
+
# This class provides an "article" command for the middleman CLI.
|
7
|
+
class Article < Thor
|
8
|
+
include Thor::Actions
|
9
|
+
|
10
|
+
check_unknown_options!
|
11
|
+
|
12
|
+
namespace :article
|
13
|
+
|
14
|
+
# Template files are relative to this file
|
15
|
+
# @return [String]
|
16
|
+
def self.source_root
|
17
|
+
File.dirname(__FILE__)
|
18
|
+
end
|
19
|
+
|
20
|
+
# Tell Thor to exit with a nonzero exit code on failure
|
21
|
+
def self.exit_on_failure?
|
22
|
+
true
|
23
|
+
end
|
24
|
+
|
25
|
+
desc "article TITLE", "Create a new blog article"
|
26
|
+
method_option "date",
|
27
|
+
:aliases => "-d",
|
28
|
+
:desc => "The date to create the post with (defaults to now)"
|
29
|
+
def article(title)
|
30
|
+
shared_instance = ::Middleman::Application.server.inst
|
31
|
+
|
32
|
+
# This only exists when the config.rb sets it!
|
33
|
+
if shared_instance.respond_to? :blog
|
34
|
+
@title = title
|
35
|
+
@slug = title.parameterize
|
36
|
+
@date = options[:date] ? DateTime.parse(options[:date]) : DateTime.now
|
37
|
+
|
38
|
+
article_path = shared_instance.blog.options.sources.
|
39
|
+
sub(':year', @date.year.to_s).
|
40
|
+
sub(':month', @date.month.to_s.rjust(2,'0')).
|
41
|
+
sub(':day', @date.day.to_s.rjust(2,'0')).
|
42
|
+
sub(':title', @slug)
|
43
|
+
|
44
|
+
template "article.tt", File.join(shared_instance.source_dir, article_path + shared_instance.blog.options.default_extension)
|
45
|
+
else
|
46
|
+
raise Thor::Error.new "You need to activate the blog extension in config.rb before you can create an article"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
@@ -0,0 +1,170 @@
|
|
1
|
+
module Middleman
|
2
|
+
module Blog
|
3
|
+
class Options
|
4
|
+
KEYS = [
|
5
|
+
:prefix,
|
6
|
+
:permalink,
|
7
|
+
:sources,
|
8
|
+
:taglink,
|
9
|
+
:layout,
|
10
|
+
:summary_separator,
|
11
|
+
:summary_length,
|
12
|
+
:year_link,
|
13
|
+
:month_link,
|
14
|
+
:day_link,
|
15
|
+
:default_extension,
|
16
|
+
:calendar_template,
|
17
|
+
:year_template,
|
18
|
+
:month_template,
|
19
|
+
:day_template,
|
20
|
+
:tag_template
|
21
|
+
]
|
22
|
+
|
23
|
+
KEYS.each do |name|
|
24
|
+
attr_accessor name
|
25
|
+
end
|
26
|
+
|
27
|
+
def initialize(options={})
|
28
|
+
options.each do |k,v|
|
29
|
+
self.send(:"#{k}=", v)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
class << self
|
35
|
+
def registered(app, options_hash={}, &block)
|
36
|
+
require 'middleman-blog/blog_data'
|
37
|
+
require 'middleman-blog/blog_article'
|
38
|
+
|
39
|
+
app.send :include, Helpers
|
40
|
+
|
41
|
+
options = Options.new(options_hash)
|
42
|
+
yield options if block_given?
|
43
|
+
|
44
|
+
options.permalink ||= "/:year/:month/:day/:title.html"
|
45
|
+
options.sources ||= ":year-:month-:day-:title.html"
|
46
|
+
options.taglink ||= "tags/:tag.html"
|
47
|
+
options.layout ||= "layout"
|
48
|
+
options.summary_separator ||= /(READMORE)/
|
49
|
+
options.summary_length ||= 250
|
50
|
+
options.year_link ||= "/:year.html"
|
51
|
+
options.month_link ||= "/:year/:month.html"
|
52
|
+
options.day_link ||= "/:year/:month/:day.html"
|
53
|
+
options.default_extension ||= ".markdown"
|
54
|
+
|
55
|
+
# optional: :tag_template
|
56
|
+
# optional: :year_template
|
57
|
+
# optional: :month_template
|
58
|
+
# optional: :day_template
|
59
|
+
# Allow one setting to set all the calendar templates
|
60
|
+
if options.calendar_template
|
61
|
+
options.year_template ||= options.calendar_template
|
62
|
+
options.month_template ||= options.calendar_template
|
63
|
+
options.day_template ||= options.calendar_template
|
64
|
+
end
|
65
|
+
|
66
|
+
# If "prefix" option is specified, all other paths are relative to it.
|
67
|
+
if options.prefix
|
68
|
+
options.prefix = "/#{options.prefix}" unless options.prefix.start_with? '/'
|
69
|
+
options.permalink = File.join(options.prefix, options.permalink)
|
70
|
+
options.sources = File.join(options.prefix, options.sources)
|
71
|
+
options.taglink = File.join(options.prefix, options.taglink)
|
72
|
+
options.year_link = File.join(options.prefix, options.year_link)
|
73
|
+
options.month_link = File.join(options.prefix, options.month_link)
|
74
|
+
options.day_link = File.join(options.prefix, options.day_link)
|
75
|
+
end
|
76
|
+
|
77
|
+
app.after_configuration do
|
78
|
+
# Initialize blog with options
|
79
|
+
blog(options)
|
80
|
+
|
81
|
+
sitemap.register_resource_list_manipulator(
|
82
|
+
:blog_articles,
|
83
|
+
blog,
|
84
|
+
false
|
85
|
+
)
|
86
|
+
|
87
|
+
if options.tag_template
|
88
|
+
ignore options.tag_template
|
89
|
+
|
90
|
+
require 'middleman-blog/tag_pages'
|
91
|
+
sitemap.register_resource_list_manipulator(
|
92
|
+
:blog_tags,
|
93
|
+
TagPages.new(self),
|
94
|
+
false
|
95
|
+
)
|
96
|
+
end
|
97
|
+
|
98
|
+
if options.year_template ||
|
99
|
+
options.month_template ||
|
100
|
+
options.day_template
|
101
|
+
|
102
|
+
require 'middleman-blog/calendar_pages'
|
103
|
+
sitemap.register_resource_list_manipulator(
|
104
|
+
:blog_calendar,
|
105
|
+
CalendarPages.new(self),
|
106
|
+
false
|
107
|
+
)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
alias :included :registered
|
112
|
+
end
|
113
|
+
|
114
|
+
# Helpers for use within templates and layouts.
|
115
|
+
module Helpers
|
116
|
+
# Get the {BlogData} for this site.
|
117
|
+
# @return [BlogData]
|
118
|
+
def blog(options=nil)
|
119
|
+
@_blog ||= BlogData.new(self, options)
|
120
|
+
end
|
121
|
+
|
122
|
+
# Determine whether the currently rendering template is a blog article.
|
123
|
+
# This can be useful in layouts.
|
124
|
+
# @return [Boolean]
|
125
|
+
def is_blog_article?
|
126
|
+
!current_article.nil?
|
127
|
+
end
|
128
|
+
|
129
|
+
# Get a {Resource} with mixed in {BlogArticle} methods representing the current article.
|
130
|
+
# @return [Middleman::Sitemap::Resource]
|
131
|
+
def current_article
|
132
|
+
blog.article(current_page.path)
|
133
|
+
end
|
134
|
+
|
135
|
+
# Get a path to the given tag, based on the :taglink setting.
|
136
|
+
# @param [String] tag
|
137
|
+
# @return [String]
|
138
|
+
def tag_path(tag)
|
139
|
+
blog.options.taglink.sub(':tag', tag.parameterize)
|
140
|
+
end
|
141
|
+
|
142
|
+
# Get a path to the given year-based calendar page, based on the :year_link setting.
|
143
|
+
# @param [Number] year
|
144
|
+
# @return [String]
|
145
|
+
def blog_year_path(year)
|
146
|
+
blog.options.year_link.sub(':year', year.to_s)
|
147
|
+
end
|
148
|
+
|
149
|
+
# Get a path to the given month-based calendar page, based on the :month_link setting.
|
150
|
+
# @param [Number] year
|
151
|
+
# @param [Number] month
|
152
|
+
# @return [String]
|
153
|
+
def blog_month_path(year, month)
|
154
|
+
blog.options.month_link.sub(':year', year.to_s).
|
155
|
+
sub(':month', month.to_s.rjust(2,'0'))
|
156
|
+
end
|
157
|
+
|
158
|
+
# Get a path to the given day-based calendar page, based on the :day_link setting.
|
159
|
+
# @param [Number] year
|
160
|
+
# @param [Number] month
|
161
|
+
# @param [Number] day
|
162
|
+
# @return [String]
|
163
|
+
def blog_day_path(year, month, day)
|
164
|
+
blog.options.day_link.sub(':year', year.to_s).
|
165
|
+
sub(':month', month.to_s.rjust(2,'0')).
|
166
|
+
sub(':day', day.to_s.rjust(2,'0'))
|
167
|
+
end
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Middleman
|
2
|
+
module Blog
|
3
|
+
|
4
|
+
# A sitemap plugin that adds tag pages to the sitemap
|
5
|
+
# based on the tags of blog articles.
|
6
|
+
class TagPages
|
7
|
+
def initialize(app)
|
8
|
+
@app = app
|
9
|
+
end
|
10
|
+
|
11
|
+
# Update the main sitemap resource list
|
12
|
+
# @return [void]
|
13
|
+
def manipulate_resource_list(resources)
|
14
|
+
resources + @app.blog.tags.map do |tag, articles|
|
15
|
+
path = Middleman::Util.normalize_path(@app.tag_path(tag))
|
16
|
+
|
17
|
+
p = ::Middleman::Sitemap::Resource.new(
|
18
|
+
@app.sitemap,
|
19
|
+
path
|
20
|
+
)
|
21
|
+
p.proxy_to(@app.blog.options.tag_template)
|
22
|
+
|
23
|
+
p.add_metadata do
|
24
|
+
@tag = tag
|
25
|
+
@articles = articles
|
26
|
+
end
|
27
|
+
|
28
|
+
p
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -1,24 +1,35 @@
|
|
1
|
+
require "middleman-core/templates"
|
2
|
+
|
1
3
|
module Middleman
|
2
4
|
module Blog
|
5
|
+
|
6
|
+
# A template that generates a blog-specific config.rb
|
7
|
+
# and a set of example templates for index, layout, tags, and calendar.
|
3
8
|
class Template < Middleman::Templates::Base
|
9
|
+
class_option "css_dir",
|
10
|
+
:default => "stylesheets",
|
11
|
+
:desc => 'The path to the css files'
|
12
|
+
class_option "js_dir",
|
13
|
+
:default => "javascripts",
|
14
|
+
:desc => 'The path to the javascript files'
|
15
|
+
class_option "images_dir",
|
16
|
+
:default => "images",
|
17
|
+
:desc => 'The path to the image files'
|
18
|
+
|
4
19
|
def self.source_root
|
5
|
-
File.dirname(__FILE__)
|
20
|
+
File.join(File.dirname(__FILE__), 'template')
|
6
21
|
end
|
7
22
|
|
8
23
|
def build_scaffold
|
9
|
-
template "
|
10
|
-
directory "
|
24
|
+
template "config.tt", File.join(location, "config.rb")
|
25
|
+
directory "source", File.join(location, "source")
|
11
26
|
|
12
27
|
empty_directory File.join(location, "source", options[:css_dir])
|
13
28
|
empty_directory File.join(location, "source", options[:js_dir])
|
14
29
|
empty_directory File.join(location, "source", options[:images_dir])
|
15
30
|
end
|
16
|
-
|
17
|
-
def generate_rack
|
18
|
-
template "template/config.ru", File.join(location, "config.ru")
|
19
|
-
end
|
20
31
|
end
|
21
32
|
end
|
22
33
|
end
|
23
34
|
|
24
|
-
Middleman::Templates.register(:blog, Middleman::Blog::Template)
|
35
|
+
Middleman::Templates.register(:blog, Middleman::Blog::Template)
|