shinmun 0.9.2 → 1.0
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/README.md +30 -67
- data/lib/shinmun.rb +2 -0
- data/lib/shinmun/blog.rb +0 -1
- data/lib/shinmun/post.rb +1 -0
- data/public/{stylesheets/styles.css → styles.css} +0 -20
- data/templates/index.rxml +1 -1
- data/templates/layout.rhtml +9 -10
- metadata +65 -31
- data/.gems +0 -1
- data/public/stylesheets/print.css +0 -76
data/README.md
CHANGED
@@ -1,26 +1,24 @@
|
|
1
|
-
Shinmun - a
|
1
|
+
Shinmun - a file based blog engine
|
2
2
|
=================================
|
3
3
|
|
4
|
-
Shinmun is a small
|
5
|
-
editor, git
|
4
|
+
Shinmun is a small file based blog engine. Write posts in your favorite
|
5
|
+
editor, track them with git and deploy to Heroku. Small, fast and simple.
|
6
6
|
|
7
7
|
### Features
|
8
8
|
|
9
9
|
* Posts are text files formatted with [Markdown][8], [Textile][9] or [HTML][10]
|
10
|
-
* Runs on [Rack][6], [Kontrol][3] and [GitStore][7]
|
11
10
|
* Deploy via [git-push][11]
|
11
|
+
* Easy and fast deploying on Heroku
|
12
12
|
* Index, category and archive listings
|
13
13
|
* RSS feeds
|
14
14
|
* Syntax highlighting provided by [CodeRay][4]
|
15
|
-
* Markdown comments
|
16
15
|
|
17
16
|
|
18
17
|
### Quickstart
|
19
18
|
|
20
19
|
Install the gems:
|
21
20
|
|
22
|
-
$ gem
|
23
|
-
$ gem install rack BlueCloth rubypants coderay georgi-git_store georgi-kontrol georgi-shinmun
|
21
|
+
$ gem install shinmun
|
24
22
|
|
25
23
|
Create a sample blog:
|
26
24
|
|
@@ -47,14 +45,13 @@ folder:
|
|
47
45
|
shinmun post 'The title of the post'
|
48
46
|
|
49
47
|
Shinmun will then create a post file in the right place, for example
|
50
|
-
in `posts/2008/9/the-title-of-the-post.md
|
48
|
+
in `posts/2008/9/the-title-of-the-post.md`.
|
51
49
|
|
52
50
|
|
53
51
|
### Post Format
|
54
52
|
|
55
53
|
Each blog post is just a text file with a YAML header and a body. The
|
56
|
-
YAML header is surrounded with 2 lines of 3 dashes.
|
57
|
-
compatible with [Jekyll][13] and [Github Pages][14].
|
54
|
+
YAML header is surrounded with 2 lines of 3 dashes.
|
58
55
|
|
59
56
|
The YAML header has following attributes:
|
60
57
|
|
@@ -97,9 +94,6 @@ in lower case:
|
|
97
94
|
|
98
95
|
### Directory layout
|
99
96
|
|
100
|
-
+ assets
|
101
|
-
+ print.css
|
102
|
-
+ styles.css
|
103
97
|
+ config.ru
|
104
98
|
+ pages
|
105
99
|
+ about.md
|
@@ -108,16 +102,14 @@ in lower case:
|
|
108
102
|
+ 2008
|
109
103
|
+ 9
|
110
104
|
+ my-article.md
|
105
|
+
+ public
|
106
|
+
+ styles.css
|
111
107
|
+ templates
|
112
108
|
+ 404.rhtml
|
113
109
|
+ archive.rhtml
|
114
110
|
+ category.rhtml
|
115
|
-
+ category.rxml
|
116
|
-
+ _comments.rhtml
|
117
|
-
+ _comment_form.rhtml
|
118
111
|
+ index.rhtml
|
119
112
|
+ index.rxml
|
120
|
-
+ index.rhtml
|
121
113
|
+ layout.rhtml
|
122
114
|
+ page.rhtml
|
123
115
|
+ post.rhtml
|
@@ -168,67 +160,38 @@ The attributes of a post are accessible via the @post variable:
|
|
168
160
|
</div>
|
169
161
|
|
170
162
|
|
171
|
-
###
|
172
|
-
|
173
|
-
Comments are stored as flat files and encoded as YAML objects. Each
|
174
|
-
post has a corresponding comment file located at `comments/<path to
|
175
|
-
post>`. So administration of comments is possible by editing the YAML
|
176
|
-
file, which can be done on your local machine, as you can just pull
|
177
|
-
the comments from your live server.
|
178
|
-
|
179
|
-
|
180
|
-
### Deployment
|
181
|
-
|
182
|
-
Shinmun can server the blog straight from the git repository. So on
|
183
|
-
your webserver initialize a new git repo like:
|
184
|
-
|
185
|
-
$ cd /var/www
|
186
|
-
$ mkdir myblog
|
187
|
-
$ cd myblog
|
188
|
-
$ git init
|
189
|
-
|
190
|
-
Now on your local machine, you add a new remote repository and push
|
191
|
-
your blog to your server:
|
192
|
-
|
193
|
-
$ cd ~/myblog
|
194
|
-
$ git remote add live ssh://myserver.com/var/www/myblog
|
195
|
-
$ git push live
|
196
|
-
|
163
|
+
### Deployment on Heroku
|
197
164
|
|
198
|
-
|
199
|
-
to run the blog:
|
165
|
+
Install the Heroku gem:
|
200
166
|
|
201
|
-
$
|
167
|
+
$ gem install heroku
|
202
168
|
|
203
|
-
|
204
|
-
Passenger. Anytime you want to publish a post on your blog, you
|
205
|
-
just write, commit and finally push a post by:
|
169
|
+
Installing your public key:
|
206
170
|
|
207
|
-
$
|
208
|
-
$ git push live
|
171
|
+
$ heroku keys:add
|
209
172
|
|
173
|
+
Enter your Heroku credentials.
|
174
|
+
Email: joe@example.com
|
175
|
+
Password:
|
176
|
+
Uploading ssh public key /Users/joe/.ssh/id_rsa.pub
|
210
177
|
|
211
|
-
|
178
|
+
Create an app on Heroku.
|
212
179
|
|
213
|
-
|
214
|
-
|
180
|
+
$ heroku create myblog
|
181
|
+
Created http://myblog.heroku.com/ | git@heroku.com:mybblog.git
|
182
|
+
Git remote heroku added
|
215
183
|
|
216
|
-
|
217
|
-
|
184
|
+
Now on your local machine, you create a new remote repository and push
|
185
|
+
your blog to Heroku:
|
218
186
|
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
Enable the new virtual host:
|
225
|
-
|
226
|
-
$ a2ensite myapp
|
187
|
+
$ cd ~/myblog
|
188
|
+
$ git init
|
189
|
+
$ git add .
|
190
|
+
$ git commit -m 'initial commit'
|
191
|
+
$ git push heroku
|
227
192
|
|
228
|
-
|
229
|
-
domain:
|
193
|
+
That's it. Your blog is deployed.
|
230
194
|
|
231
|
-
$ /etc/init.d/apache2 restart
|
232
195
|
|
233
196
|
|
234
197
|
### GitHub Project
|
data/lib/shinmun.rb
CHANGED
data/lib/shinmun/blog.rb
CHANGED
data/lib/shinmun/post.rb
CHANGED
@@ -69,23 +69,3 @@ hr {
|
|
69
69
|
color: #69c;
|
70
70
|
text-decoration: none;
|
71
71
|
}
|
72
|
-
|
73
|
-
.comments {
|
74
|
-
margin-bottom: 2em;
|
75
|
-
}
|
76
|
-
|
77
|
-
.comments .comment, .preview .comment {
|
78
|
-
margin-top: 2em;
|
79
|
-
border: 1px solid #ccc;
|
80
|
-
}
|
81
|
-
|
82
|
-
.comments .comment .top, .preview .comment .top {
|
83
|
-
background: #F0F0F0;
|
84
|
-
color: #333;
|
85
|
-
padding: 3px 5px;
|
86
|
-
}
|
87
|
-
|
88
|
-
.comments .comment .body, .preview .comment .body {
|
89
|
-
background: #F8F8F8;
|
90
|
-
padding: 3px 5px;
|
91
|
-
}
|
data/templates/index.rxml
CHANGED
@@ -12,7 +12,7 @@
|
|
12
12
|
<title><%= post.title %></title>
|
13
13
|
<category><%= post.category %></category>
|
14
14
|
<description><%= strip_tags post.summary %></description>
|
15
|
-
<author><%= @blog.author %></author>
|
15
|
+
<author><%= @author || @blog.author %></author>
|
16
16
|
<link><%= @blog.url %><%= post_path post %></link>
|
17
17
|
<pubDate><%= rfc822 post.date %></pubDate>
|
18
18
|
</item>
|
data/templates/layout.rhtml
CHANGED
@@ -5,8 +5,7 @@
|
|
5
5
|
<meta http-equiv="Content-Language" content="English" />
|
6
6
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
7
7
|
<link rel="alternate" type="application/rss+xml" title="RSS" href="/index.rss" />
|
8
|
-
<link rel="stylesheet" media="screen" type="text/css" href="/
|
9
|
-
<link rel="stylesheet" media="print" type="text/css" href="/assets/print.css" />
|
8
|
+
<link rel="stylesheet" media="screen" type="text/css" href="/styles.css" />
|
10
9
|
</head>
|
11
10
|
<body>
|
12
11
|
<div class="container">
|
@@ -23,20 +22,20 @@
|
|
23
22
|
<hr/>
|
24
23
|
|
25
24
|
<p>
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
25
|
+
<h4>Categories</h4>
|
26
|
+
<ul>
|
27
|
+
<li><%= link_to 'Ruby', '/categories/ruby' %></li>
|
28
|
+
<li><%= link_to 'Javascript', '/categories/javascript' %></li>
|
29
|
+
</ul>
|
31
30
|
</p>
|
32
31
|
|
33
32
|
<p>
|
34
|
-
|
35
|
-
|
33
|
+
<h4>Archive</h4>
|
34
|
+
<ul>
|
36
35
|
<% for year, month in @blog.archives %>
|
37
36
|
<li><%= archive_link year, month %></li>
|
38
37
|
<% end %>
|
39
|
-
|
38
|
+
</ul>
|
40
39
|
</p>
|
41
40
|
|
42
41
|
</div>
|
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shinmun
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 15
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 1
|
8
|
+
- 0
|
9
|
+
version: "1.0"
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- Matthias Georgi
|
@@ -9,60 +14,85 @@ autorequire:
|
|
9
14
|
bindir: bin
|
10
15
|
cert_chain: []
|
11
16
|
|
12
|
-
date:
|
17
|
+
date: 2011-06-06 00:00:00 +02:00
|
13
18
|
default_executable:
|
14
19
|
dependencies:
|
15
20
|
- !ruby/object:Gem::Dependency
|
16
21
|
name: BlueCloth
|
17
|
-
|
18
|
-
|
19
|
-
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
20
25
|
requirements:
|
21
26
|
- - ">="
|
22
27
|
- !ruby/object:Gem::Version
|
28
|
+
hash: 3
|
29
|
+
segments:
|
30
|
+
- 0
|
23
31
|
version: "0"
|
24
|
-
|
32
|
+
type: :runtime
|
33
|
+
version_requirements: *id001
|
25
34
|
- !ruby/object:Gem::Dependency
|
26
35
|
name: rubypants
|
27
|
-
|
28
|
-
|
29
|
-
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
38
|
+
none: false
|
30
39
|
requirements:
|
31
40
|
- - ">="
|
32
41
|
- !ruby/object:Gem::Version
|
42
|
+
hash: 3
|
43
|
+
segments:
|
44
|
+
- 0
|
33
45
|
version: "0"
|
34
|
-
|
46
|
+
type: :runtime
|
47
|
+
version_requirements: *id002
|
35
48
|
- !ruby/object:Gem::Dependency
|
36
49
|
name: rack
|
37
|
-
|
38
|
-
|
39
|
-
|
50
|
+
prerelease: false
|
51
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
52
|
+
none: false
|
40
53
|
requirements:
|
41
54
|
- - ">="
|
42
55
|
- !ruby/object:Gem::Version
|
56
|
+
hash: 15
|
57
|
+
segments:
|
58
|
+
- 1
|
59
|
+
- 0
|
43
60
|
version: "1.0"
|
44
|
-
|
61
|
+
type: :runtime
|
62
|
+
version_requirements: *id003
|
45
63
|
- !ruby/object:Gem::Dependency
|
46
64
|
name: coderay
|
47
|
-
|
48
|
-
|
49
|
-
|
65
|
+
prerelease: false
|
66
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
67
|
+
none: false
|
50
68
|
requirements:
|
51
69
|
- - ">="
|
52
70
|
- !ruby/object:Gem::Version
|
71
|
+
hash: 57
|
72
|
+
segments:
|
73
|
+
- 0
|
74
|
+
- 9
|
75
|
+
- 1
|
53
76
|
version: 0.9.1
|
54
|
-
|
77
|
+
type: :runtime
|
78
|
+
version_requirements: *id004
|
55
79
|
- !ruby/object:Gem::Dependency
|
56
80
|
name: kontrol
|
57
|
-
|
58
|
-
|
59
|
-
|
81
|
+
prerelease: false
|
82
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
83
|
+
none: false
|
60
84
|
requirements:
|
61
85
|
- - ">="
|
62
86
|
- !ruby/object:Gem::Version
|
63
|
-
|
64
|
-
|
65
|
-
|
87
|
+
hash: 17
|
88
|
+
segments:
|
89
|
+
- 0
|
90
|
+
- 3
|
91
|
+
- 1
|
92
|
+
version: 0.3.1
|
93
|
+
type: :runtime
|
94
|
+
version_requirements: *id005
|
95
|
+
description: file based blog engine.
|
66
96
|
email: matti.georgi@gmail.com
|
67
97
|
executables:
|
68
98
|
- shinmun
|
@@ -71,12 +101,10 @@ extensions: []
|
|
71
101
|
extra_rdoc_files:
|
72
102
|
- README.md
|
73
103
|
files:
|
74
|
-
- .gems
|
75
104
|
- README.md
|
76
105
|
- LICENSE
|
77
106
|
- Rakefile
|
78
|
-
- public/
|
79
|
-
- public/stylesheets/styles.css
|
107
|
+
- public/styles.css
|
80
108
|
- bin/shinmun
|
81
109
|
- config.ru
|
82
110
|
- lib/shinmun.rb
|
@@ -106,23 +134,29 @@ rdoc_options: []
|
|
106
134
|
require_paths:
|
107
135
|
- lib
|
108
136
|
required_ruby_version: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
109
138
|
requirements:
|
110
139
|
- - ">="
|
111
140
|
- !ruby/object:Gem::Version
|
141
|
+
hash: 3
|
142
|
+
segments:
|
143
|
+
- 0
|
112
144
|
version: "0"
|
113
|
-
version:
|
114
145
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
146
|
+
none: false
|
115
147
|
requirements:
|
116
148
|
- - ">="
|
117
149
|
- !ruby/object:Gem::Version
|
150
|
+
hash: 3
|
151
|
+
segments:
|
152
|
+
- 0
|
118
153
|
version: "0"
|
119
|
-
version:
|
120
154
|
requirements: []
|
121
155
|
|
122
156
|
rubyforge_project:
|
123
|
-
rubygems_version: 1.
|
157
|
+
rubygems_version: 1.4.2
|
124
158
|
signing_key:
|
125
159
|
specification_version: 3
|
126
|
-
summary:
|
160
|
+
summary: file based blog engine
|
127
161
|
test_files: []
|
128
162
|
|
data/.gems
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
shinmun --version 0.9.2
|
@@ -1,76 +0,0 @@
|
|
1
|
-
body {
|
2
|
-
line-height:1.5;
|
3
|
-
font-family:"Helvetica Neue", "Lucida Grande", Arial, Verdana, sans-serif;
|
4
|
-
color:#000;
|
5
|
-
background:none;
|
6
|
-
font-size:10pt;
|
7
|
-
}
|
8
|
-
|
9
|
-
.container {
|
10
|
-
background:none;
|
11
|
-
}
|
12
|
-
|
13
|
-
h1,h2,h3,h4,h5,h6 {
|
14
|
-
font-family:"Helvetica Neue", Arial, "Lucida Grande", sans-serif;
|
15
|
-
}
|
16
|
-
|
17
|
-
code {
|
18
|
-
font:.9em "Courier New", Monaco, Courier, monospace;
|
19
|
-
}
|
20
|
-
|
21
|
-
img {
|
22
|
-
float:left;
|
23
|
-
margin:1.5em 1.5em 1.5em 0;
|
24
|
-
}
|
25
|
-
|
26
|
-
a img {
|
27
|
-
border:none;
|
28
|
-
}
|
29
|
-
|
30
|
-
p img.top {
|
31
|
-
margin-top:0;
|
32
|
-
}
|
33
|
-
|
34
|
-
hr {
|
35
|
-
background:#ccc;
|
36
|
-
color:#ccc;
|
37
|
-
width:100%;
|
38
|
-
height:2px;
|
39
|
-
border:none;
|
40
|
-
margin:2em 0;
|
41
|
-
padding:0;
|
42
|
-
}
|
43
|
-
|
44
|
-
blockquote {
|
45
|
-
font-style:italic;
|
46
|
-
font-size:.9em;
|
47
|
-
margin:1.5em;
|
48
|
-
padding:1em;
|
49
|
-
}
|
50
|
-
|
51
|
-
.small {
|
52
|
-
font-size:.9em;
|
53
|
-
}
|
54
|
-
|
55
|
-
.large {
|
56
|
-
font-size:1.1em;
|
57
|
-
}
|
58
|
-
|
59
|
-
.quiet {
|
60
|
-
color:#999;
|
61
|
-
}
|
62
|
-
|
63
|
-
.hide {
|
64
|
-
display:none;
|
65
|
-
}
|
66
|
-
|
67
|
-
a:link,a:visited {
|
68
|
-
background:transparent;
|
69
|
-
font-weight:700;
|
70
|
-
text-decoration:underline;
|
71
|
-
}
|
72
|
-
|
73
|
-
a:link:after,a:visited:after {
|
74
|
-
content:" (" attr(href) ") ";
|
75
|
-
font-size:90%;
|
76
|
-
}
|