schreihals 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +20 -0
- data/.rspec +2 -0
- data/Gemfile +4 -0
- data/LICENSE +22 -0
- data/README.md +34 -0
- data/Rakefile +7 -0
- data/example/Gemfile +5 -0
- data/example/config.ru +8 -0
- data/example/posts/2010-06-17-pythton-is-great.md +9 -0
- data/example/posts/2011-12-22-ruby-is-great.md +16 -0
- data/lib/public/.gitkeep +0 -0
- data/lib/public/favicon.ico +0 -0
- data/lib/schreihals/version.rb +3 -0
- data/lib/schreihals.rb +148 -0
- data/lib/views/atom.haml +21 -0
- data/lib/views/index.haml +4 -0
- data/lib/views/layout.haml +21 -0
- data/lib/views/partials/_disqus.haml +17 -0
- data/lib/views/partials/_google_analytics.haml +10 -0
- data/lib/views/partials/_post.haml +31 -0
- data/lib/views/post.haml +10 -0
- data/lib/views/schreihals.scss +49 -0
- data/schreihals.gemspec +31 -0
- data/spec/spec_helper.rb +7 -0
- metadata +202 -0
data/.gitignore
ADDED
data/.rspec
ADDED
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2011 Hendrik Mans
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
# Schreihals
|
2
|
+
|
3
|
+
Everybody should be developing their own blogging engine for hackers, so here's mine.
|
4
|
+
Documentation is pretty minimal at the moment, so for now, how about a list of
|
5
|
+
overall design goals?
|
6
|
+
|
7
|
+
## Overall Design Goals
|
8
|
+
|
9
|
+
* Minimal code design.
|
10
|
+
* Author your blog through git, using Markdown and friends.
|
11
|
+
* Near-zero boilerplate code in your blog project. (It's all in the gem.)
|
12
|
+
* Theme support through gems.
|
13
|
+
* No static document generation. (Not interested, there are enough engines out there that do this.)
|
14
|
+
* HAML and SASS support out of the box.
|
15
|
+
|
16
|
+
## Usage
|
17
|
+
|
18
|
+
TODO: soon
|
19
|
+
|
20
|
+
## Stuff
|
21
|
+
|
22
|
+
Just a list of keywords I need to write about:
|
23
|
+
|
24
|
+
* Configuration
|
25
|
+
* Automatic `date` and `slug` recognition
|
26
|
+
* `status` attribute and drafts
|
27
|
+
* `disqus` and `disqus_identifier` attributes
|
28
|
+
* Using different post formats (markdown, textile, haml etc.)
|
29
|
+
* pages (= posts without dates)
|
30
|
+
* deployment (Heroku!)
|
31
|
+
* code highlighting
|
32
|
+
* `google_analytics_id`
|
33
|
+
* `link`
|
34
|
+
* `read_more`
|
data/Rakefile
ADDED
data/example/Gemfile
ADDED
data/example/config.ru
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
---
|
2
|
+
id: 1
|
3
|
+
title: Ruby is great
|
4
|
+
tags: [programming, ruby]
|
5
|
+
slug: ruby-is-great
|
6
|
+
status: published
|
7
|
+
---
|
8
|
+
|
9
|
+
Bacon ipsum dolor sit amet shank sirloin pork belly, filet mignon ground round hamburger capicola brisket corned beef short ribs salami venison pork drumstick prosciutto. Strip steak ground round ribeye, jerky pig meatball fatback beef ribs brisket kielbasa. Tail biltong sausage, brisket pork belly beef rump fatback shoulder kielbasa beef ribs. Capicola prosciutto swine, t-bone turkey spare ribs biltong venison fatback beef ribs brisket strip steak pork meatball andouille. Meatball turducken salami pastrami leberkäse capicola chuck ball tip bacon kielbasa shoulder cow, pork chop pork belly. Prosciutto chuck meatball, hamburger andouille ribeye rump drumstick ham hock corned beef short loin. Short loin shankle strip steak kielbasa.
|
10
|
+
|
11
|
+
* This is what unordered lists look like.
|
12
|
+
* I hope they look nice.
|
13
|
+
* Lorem to the ipsum.
|
14
|
+
|
15
|
+
So, yeah, Ruby is great. But this is really just a demo
|
16
|
+
post to see how the Markdown is being formatted.
|
data/lib/public/.gitkeep
ADDED
File without changes
|
Binary file
|
data/lib/schreihals.rb
ADDED
@@ -0,0 +1,148 @@
|
|
1
|
+
require 'schreihals/version'
|
2
|
+
require 'sinatra'
|
3
|
+
require 'haml'
|
4
|
+
require 'sass'
|
5
|
+
require 'redcarpet'
|
6
|
+
require 'schnitzelstyle'
|
7
|
+
require 'document_mapper'
|
8
|
+
require 'rack-cache'
|
9
|
+
require 'coderay'
|
10
|
+
require 'rack/codehighlighter'
|
11
|
+
|
12
|
+
require 'active_support/core_ext/string/inflections'
|
13
|
+
|
14
|
+
module Schreihals
|
15
|
+
class Post
|
16
|
+
include DocumentMapper::Document
|
17
|
+
|
18
|
+
def after_load
|
19
|
+
# Set some defaults
|
20
|
+
#
|
21
|
+
self.attributes = {
|
22
|
+
disqus: true,
|
23
|
+
status: 'published'
|
24
|
+
}.merge(attributes)
|
25
|
+
|
26
|
+
# Set slug
|
27
|
+
#
|
28
|
+
if !attributes.has_key? :slug
|
29
|
+
begin
|
30
|
+
match = attributes[:file_name_without_extension].match(/(\d{4}-\d{1,2}-\d{1,2}[-_])?(.*)/)
|
31
|
+
attributes[:slug] = match[2]
|
32
|
+
rescue NoMethodError => err
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def to_url
|
38
|
+
date.present? ? "/#{year}/#{month}/#{day}/#{slug}/" : "/#{slug}/"
|
39
|
+
end
|
40
|
+
|
41
|
+
def disqus_identifier
|
42
|
+
attributes[:disqus_identifier] || file_name_without_extension
|
43
|
+
end
|
44
|
+
|
45
|
+
def disqus?
|
46
|
+
disqus && published?
|
47
|
+
end
|
48
|
+
|
49
|
+
def published?
|
50
|
+
status == 'published'
|
51
|
+
end
|
52
|
+
|
53
|
+
def post?
|
54
|
+
date.present?
|
55
|
+
end
|
56
|
+
|
57
|
+
def page?
|
58
|
+
!post?
|
59
|
+
end
|
60
|
+
|
61
|
+
# load all posts.
|
62
|
+
self.directory = 'posts'
|
63
|
+
end
|
64
|
+
|
65
|
+
class App < Sinatra::Application
|
66
|
+
set :blog_title, "My Schreihals Blog"
|
67
|
+
set :blog_url, ""
|
68
|
+
set :author_name, "Author"
|
69
|
+
set :disqus_name, nil
|
70
|
+
set :google_analytics_id, nil
|
71
|
+
set :read_more, "Read Complete Article"
|
72
|
+
|
73
|
+
use Rack::ShowExceptions
|
74
|
+
use Rack::Cache
|
75
|
+
use Rack::Static, :urls => ["/media"], :root => "public"
|
76
|
+
use Rack::Codehighlighter, :coderay, :markdown => true, :element => "pre>code", :pattern => /\A:::(\w+)\s*\n/
|
77
|
+
|
78
|
+
helpers do
|
79
|
+
def partial(thing, locals = {})
|
80
|
+
name = case thing
|
81
|
+
when String then thing
|
82
|
+
else thing.class.to_s.demodulize.underscore
|
83
|
+
end
|
84
|
+
|
85
|
+
haml :"partials/_#{name}", :locals => { name.to_sym => thing }.merge(locals)
|
86
|
+
end
|
87
|
+
|
88
|
+
def set_page_title(title)
|
89
|
+
@page_title = title
|
90
|
+
end
|
91
|
+
|
92
|
+
def link_to(title, thing)
|
93
|
+
haml "%a{href: '#{url_for thing}'} #{title}"
|
94
|
+
end
|
95
|
+
|
96
|
+
def url_for(thing, options = {})
|
97
|
+
url = thing.respond_to?(:to_url) ? thing.to_url : thing.to_s
|
98
|
+
url = "#{settings.blog_url}#{url}" if options[:absolute]
|
99
|
+
url
|
100
|
+
end
|
101
|
+
|
102
|
+
def show_disqus?
|
103
|
+
settings.disqus_name.present?
|
104
|
+
end
|
105
|
+
|
106
|
+
def production?
|
107
|
+
settings.environment.to_sym == :production
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
before do
|
112
|
+
cache_control :public, :must_revalidate, :max_age => 60
|
113
|
+
end
|
114
|
+
|
115
|
+
get '/' do
|
116
|
+
@posts = Post.order_by(:date => :desc)
|
117
|
+
@posts = @posts.where(:status => 'published') if production?
|
118
|
+
@posts = @posts.limit(10).all
|
119
|
+
haml :index
|
120
|
+
end
|
121
|
+
|
122
|
+
get '/schreihals.css' do
|
123
|
+
scss :schreihals
|
124
|
+
end
|
125
|
+
|
126
|
+
get '/atom.xml' do
|
127
|
+
@posts = Post.where(:status => 'published').order_by(:date => :desc).limit(10).all
|
128
|
+
content_type 'application/xml+atom'
|
129
|
+
haml :atom, :layout => false
|
130
|
+
end
|
131
|
+
|
132
|
+
get '/:year/:month/:day/:slug/?' do |year, month, day, slug|
|
133
|
+
render_page(slug)
|
134
|
+
end
|
135
|
+
|
136
|
+
get '/:slug/?' do |slug|
|
137
|
+
render_page(slug)
|
138
|
+
end
|
139
|
+
|
140
|
+
def render_page(slug)
|
141
|
+
if @post = Post.where(:slug => slug).first
|
142
|
+
haml :post
|
143
|
+
else
|
144
|
+
"not found :("
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
data/lib/views/atom.haml
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
!!! XML
|
2
|
+
%feed{xmlns: 'http://www.w3.org/2005/Atom'}
|
3
|
+
%title= settings.blog_title
|
4
|
+
%link{href: url_for(',', absolute: true)}
|
5
|
+
%link{href: url_for('/atom.xml', absolute: true), rel: 'self'}
|
6
|
+
%id= "http://hmans.net/"
|
7
|
+
- if @posts.any?
|
8
|
+
%updated= @posts.first.date
|
9
|
+
%author
|
10
|
+
%name= settings.author_name
|
11
|
+
- @posts.each do |post|
|
12
|
+
%entry
|
13
|
+
%title= post.title
|
14
|
+
%link{rel: 'alternate', href: url_for(post, absolute: true)}
|
15
|
+
%id urn:uuid:#{post.disqus_identifier}
|
16
|
+
%published= post.date
|
17
|
+
%updated= post.date
|
18
|
+
%author
|
19
|
+
%name= settings.author_name
|
20
|
+
%content{type: 'html'}
|
21
|
+
~ post.to_html
|
@@ -0,0 +1,21 @@
|
|
1
|
+
!!!
|
2
|
+
%html
|
3
|
+
%head
|
4
|
+
%title= [@page_title, settings.blog_title].compact.join(" | ")
|
5
|
+
%link{href: '/schreihals.css', media: "screen", rel: "stylesheet", type: "text/css"}
|
6
|
+
%link{ href: '/atom.xml', title: "Subscribe via Atom Feed", rel: 'alternate', type: 'application/atom+xml' }
|
7
|
+
/ %script{ src: asset_path('application.js') }
|
8
|
+
%body
|
9
|
+
%header
|
10
|
+
.container
|
11
|
+
%h1
|
12
|
+
= link_to settings.blog_title, '/'
|
13
|
+
|
14
|
+
= yield
|
15
|
+
|
16
|
+
%footer
|
17
|
+
.container
|
18
|
+
~ markdown settings.blog_description
|
19
|
+
|
20
|
+
- if production? && settings.google_analytics_id.present?
|
21
|
+
= partial 'google_analytics'
|
@@ -0,0 +1,17 @@
|
|
1
|
+
#disqus_thread
|
2
|
+
|
3
|
+
:javascript
|
4
|
+
/* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * * */
|
5
|
+
var disqus_shortname = '#{settings.disqus_name}';
|
6
|
+
var disqus_developer = #{production? ? 0 : 1};
|
7
|
+
var disqus_identifier = '#{disqus_identifier}';
|
8
|
+
|
9
|
+
/* * * DON'T EDIT BELOW THIS LINE * * */
|
10
|
+
(function() {
|
11
|
+
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
|
12
|
+
dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
|
13
|
+
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
|
14
|
+
})();
|
15
|
+
|
16
|
+
%noscript
|
17
|
+
Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
:javascript
|
2
|
+
var _gaq = _gaq || [];
|
3
|
+
_gaq.push(['_setAccount', '#{settings.google_analytics_id}']);
|
4
|
+
_gaq.push(['_trackPageview']);
|
5
|
+
|
6
|
+
(function() {
|
7
|
+
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
8
|
+
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
9
|
+
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
10
|
+
})();
|
@@ -0,0 +1,31 @@
|
|
1
|
+
- complete ||= false
|
2
|
+
- show_title ||= post.title.present?
|
3
|
+
- show_summary ||= post.summary.present?
|
4
|
+
- show_body ||= complete || !show_summary
|
5
|
+
- show_read_more ||= !complete && post.summary.present?
|
6
|
+
- show_permalink ||= post.post? && !show_read_more
|
7
|
+
|
8
|
+
%article.post{class: post.status}
|
9
|
+
%header
|
10
|
+
- if show_title
|
11
|
+
%h2
|
12
|
+
%a{href: post.link.present? ? post.link : post.to_url}
|
13
|
+
= post.title
|
14
|
+
= "→" if post.link.present?
|
15
|
+
.info
|
16
|
+
- if post.date.present?
|
17
|
+
#{post.date}
|
18
|
+
|
19
|
+
- if show_summary
|
20
|
+
.summary
|
21
|
+
~ markdown post.summary
|
22
|
+
- if show_read_more
|
23
|
+
%p
|
24
|
+
= link_to (post.read_more || settings.read_more), post
|
25
|
+
→
|
26
|
+
|
27
|
+
- if show_body
|
28
|
+
~ post.to_html
|
29
|
+
|
30
|
+
- if show_permalink
|
31
|
+
%p.permalink= link_to '∞', post
|
data/lib/views/post.haml
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
@import url(http://fonts.googleapis.com/css?family=Inder|PT+Serif);
|
2
|
+
@import 'schnitzelstyle';
|
3
|
+
@import 'schnitzelstyle/coderay';
|
4
|
+
|
5
|
+
$font-default: 16px "PT Serif";
|
6
|
+
$font-headlines: 15px "Inder";
|
7
|
+
$font-footer: 11px "Inder";
|
8
|
+
|
9
|
+
@include schnitzel-complete;
|
10
|
+
|
11
|
+
section.disqus {
|
12
|
+
background-color: #eee !important;
|
13
|
+
}
|
14
|
+
|
15
|
+
article.post {
|
16
|
+
margin: 5em 0;
|
17
|
+
header {
|
18
|
+
margin-bottom: 1em;
|
19
|
+
.info { display: inline; margin-left: 1em; color: #999 }
|
20
|
+
}
|
21
|
+
|
22
|
+
&.draft header h2 { background-color: #ccc; }
|
23
|
+
|
24
|
+
div.summary p {
|
25
|
+
font: 18px "Inder";
|
26
|
+
line-height: 150%;
|
27
|
+
color: #000;
|
28
|
+
}
|
29
|
+
|
30
|
+
p.permalink {
|
31
|
+
a {
|
32
|
+
color: lighten($color-text, 30%);
|
33
|
+
border: none;
|
34
|
+
}
|
35
|
+
}
|
36
|
+
}
|
37
|
+
|
38
|
+
#dsq-content {
|
39
|
+
a {
|
40
|
+
border: 0;
|
41
|
+
}
|
42
|
+
#dsq-reply {
|
43
|
+
margin-bottom: 2em;
|
44
|
+
}
|
45
|
+
h3 {
|
46
|
+
margin-top: 1em;
|
47
|
+
@include clearfix;
|
48
|
+
}
|
49
|
+
}
|
data/schreihals.gemspec
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../lib/schreihals/version', __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.authors = ["Hendrik Mans"]
|
6
|
+
gem.email = ["hendrik@mans.de"]
|
7
|
+
gem.description = %q{A simple blog engine for hackers.}
|
8
|
+
gem.summary = %q{A simple blog engine for hackers.}
|
9
|
+
gem.homepage = "http://hmans.net"
|
10
|
+
|
11
|
+
gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
12
|
+
gem.files = `git ls-files`.split("\n")
|
13
|
+
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
14
|
+
gem.name = "schreihals"
|
15
|
+
gem.require_paths = ["lib"]
|
16
|
+
gem.version = Schreihals::VERSION
|
17
|
+
|
18
|
+
gem.add_dependency 'sinatra'
|
19
|
+
gem.add_dependency 'activesupport'
|
20
|
+
gem.add_dependency 'shotgun'
|
21
|
+
gem.add_dependency 'haml'
|
22
|
+
gem.add_dependency 'sass'
|
23
|
+
gem.add_dependency 'document_mapper'
|
24
|
+
gem.add_dependency 'coderay'
|
25
|
+
gem.add_dependency 'redcarpet'
|
26
|
+
gem.add_dependency 'rack-cache'
|
27
|
+
gem.add_dependency 'rack-codehighlighter'
|
28
|
+
gem.add_dependency 'schnitzelstyle', '>= 0.0.1'
|
29
|
+
|
30
|
+
gem.add_development_dependency 'rspec', '>= 2.0.0'
|
31
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,202 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: schreihals
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Hendrik Mans
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-12-24 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: sinatra
|
16
|
+
requirement: &70235432785300 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70235432785300
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: activesupport
|
27
|
+
requirement: &70235432784480 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70235432784480
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: shotgun
|
38
|
+
requirement: &70235432783340 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :runtime
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *70235432783340
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: haml
|
49
|
+
requirement: &70235432780880 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
type: :runtime
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *70235432780880
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: sass
|
60
|
+
requirement: &70235432779440 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
type: :runtime
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *70235432779440
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: document_mapper
|
71
|
+
requirement: &70235432778420 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
type: :runtime
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: *70235432778420
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: coderay
|
82
|
+
requirement: &70235432777820 !ruby/object:Gem::Requirement
|
83
|
+
none: false
|
84
|
+
requirements:
|
85
|
+
- - ! '>='
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '0'
|
88
|
+
type: :runtime
|
89
|
+
prerelease: false
|
90
|
+
version_requirements: *70235432777820
|
91
|
+
- !ruby/object:Gem::Dependency
|
92
|
+
name: redcarpet
|
93
|
+
requirement: &70235432777320 !ruby/object:Gem::Requirement
|
94
|
+
none: false
|
95
|
+
requirements:
|
96
|
+
- - ! '>='
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
99
|
+
type: :runtime
|
100
|
+
prerelease: false
|
101
|
+
version_requirements: *70235432777320
|
102
|
+
- !ruby/object:Gem::Dependency
|
103
|
+
name: rack-cache
|
104
|
+
requirement: &70235432776660 !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
type: :runtime
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: *70235432776660
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: rack-codehighlighter
|
115
|
+
requirement: &70235432776080 !ruby/object:Gem::Requirement
|
116
|
+
none: false
|
117
|
+
requirements:
|
118
|
+
- - ! '>='
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: '0'
|
121
|
+
type: :runtime
|
122
|
+
prerelease: false
|
123
|
+
version_requirements: *70235432776080
|
124
|
+
- !ruby/object:Gem::Dependency
|
125
|
+
name: schnitzelstyle
|
126
|
+
requirement: &70235432775280 !ruby/object:Gem::Requirement
|
127
|
+
none: false
|
128
|
+
requirements:
|
129
|
+
- - ! '>='
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: 0.0.1
|
132
|
+
type: :runtime
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: *70235432775280
|
135
|
+
- !ruby/object:Gem::Dependency
|
136
|
+
name: rspec
|
137
|
+
requirement: &70235432774640 !ruby/object:Gem::Requirement
|
138
|
+
none: false
|
139
|
+
requirements:
|
140
|
+
- - ! '>='
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: 2.0.0
|
143
|
+
type: :development
|
144
|
+
prerelease: false
|
145
|
+
version_requirements: *70235432774640
|
146
|
+
description: A simple blog engine for hackers.
|
147
|
+
email:
|
148
|
+
- hendrik@mans.de
|
149
|
+
executables: []
|
150
|
+
extensions: []
|
151
|
+
extra_rdoc_files: []
|
152
|
+
files:
|
153
|
+
- .gitignore
|
154
|
+
- .rspec
|
155
|
+
- Gemfile
|
156
|
+
- LICENSE
|
157
|
+
- README.md
|
158
|
+
- Rakefile
|
159
|
+
- example/Gemfile
|
160
|
+
- example/config.ru
|
161
|
+
- example/posts/2010-06-17-pythton-is-great.md
|
162
|
+
- example/posts/2011-12-22-ruby-is-great.md
|
163
|
+
- lib/public/.gitkeep
|
164
|
+
- lib/public/favicon.ico
|
165
|
+
- lib/schreihals.rb
|
166
|
+
- lib/schreihals/version.rb
|
167
|
+
- lib/views/atom.haml
|
168
|
+
- lib/views/index.haml
|
169
|
+
- lib/views/layout.haml
|
170
|
+
- lib/views/partials/_disqus.haml
|
171
|
+
- lib/views/partials/_google_analytics.haml
|
172
|
+
- lib/views/partials/_post.haml
|
173
|
+
- lib/views/post.haml
|
174
|
+
- lib/views/schreihals.scss
|
175
|
+
- schreihals.gemspec
|
176
|
+
- spec/spec_helper.rb
|
177
|
+
homepage: http://hmans.net
|
178
|
+
licenses: []
|
179
|
+
post_install_message:
|
180
|
+
rdoc_options: []
|
181
|
+
require_paths:
|
182
|
+
- lib
|
183
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
184
|
+
none: false
|
185
|
+
requirements:
|
186
|
+
- - ! '>='
|
187
|
+
- !ruby/object:Gem::Version
|
188
|
+
version: '0'
|
189
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
190
|
+
none: false
|
191
|
+
requirements:
|
192
|
+
- - ! '>='
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '0'
|
195
|
+
requirements: []
|
196
|
+
rubyforge_project:
|
197
|
+
rubygems_version: 1.8.11
|
198
|
+
signing_key:
|
199
|
+
specification_version: 3
|
200
|
+
summary: A simple blog engine for hackers.
|
201
|
+
test_files:
|
202
|
+
- spec/spec_helper.rb
|