cameroncox-git-blog 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/LICENSE ADDED
File without changes
data/README ADDED
@@ -0,0 +1,105 @@
1
+ git-blog
2
+ ========
3
+
4
+ git-blog intends to be blogging, simplified. You'll write your posts in your
5
+ favorite text editor, with your favorite markup. Then save the post's file,
6
+ `git-add` the post, and then `git-push origin master`. git-blog, running on
7
+ your server, will catch the push and parse the post to your static HTML blog.
8
+ Fast, no dynamic code being run on every load, free post versioning (git
9
+ revisions), free sections (git branches), freedom of mind.
10
+
11
+ Philosophy & goals
12
+ ------------------
13
+
14
+ git-blog will never be featureful, but it will also never be bloated. I doubt
15
+ I will ever do anything more than parsing the posts to static HTML on every
16
+ git-push.
17
+
18
+ Preparing git-blog
19
+ ------------------
20
+
21
+ To prepare a new git-blog, run this task from the cloned git-blog repository, replacing `~/Documents/Blog` (my personal favorite location) the name of the folder where you want your blog to exist locally:
22
+
23
+ rake create[~/Documents/Blog]
24
+
25
+ After this is complete, move to that folder (something along the lines of `cd ~/Documents/Blog`), and then add any remote repositories to which you wish to push your blog. Most likely, this will include the server hosting your blog to the web. The simplest setup to push to this server is an SSH connection - if you have SSH access to your server/host, you can run this to set up git-blog for pushing:
26
+
27
+ git-remote add blog username@host.tld:/path/to/server/blog/folder
28
+
29
+ This will prepare a remote named 'blog' to which you can push your changes. In addition, if you use [GitHub](http://github.com "GitHub - free Git repository hosting"), you can also push your blog there. Create a new repository on GitHub, and then use this to automatically set up that remote for you:
30
+
31
+ rake github[github_username,github_repo]
32
+
33
+ Now, you'll want to set up the server to host git-blog - this is fairly simple, about equable to setting up git-blog locally. The only addition, after creating the blog's directory on the server the same as you did locally (`rake create[/path/to/server/blog/folder]`, from within the git-blog clone dir on your server), is preparing the post-receive hook. It's really simple - change directory to your new blog's folder on the server, and run this:
34
+
35
+ rake servable
36
+
37
+ Using git-blog
38
+ --------------
39
+
40
+ Once your new blog is prepared, you'll want to write a post. Writing a new post is quite simple - run `rake post`, and it will open your favorite `$EDITOR` with a post prepared to edit.
41
+
42
+ You're free to format your blog posts however you want - at the moment there are parsers set up for Markdown, Textile, and Haml - and support for plain text and plain X)HTML. The only restriction when formatting, is that your post's title is on the very first line, formatted plainly in whatever way your parser supports. This title will not appear in the final post, and will instead be sent to the post template.
43
+
44
+ Once you've finished editing your post, save it, and close the window or exit the editor (whatever is appropriate for your editor of choice) - it will automatically add the new post to the index, and then commit it. You can repeat this process if you want to post more posts before pushing them to the server.
45
+
46
+ Now just push your beautiful new post(s) to the server:
47
+
48
+ git-push blog
49
+
50
+ I suggest you run `rake deploy` before comitting any new posts / changes to post - if you have a syntax error in one of your posts, the parser may not like it, and it's preferable to catch this before you commit the changes and push them to your blog.
51
+
52
+ git-blog will automatically re-parse all of your posts, and create an index file for your blog, after you git-push to the server. They're going to end up as simple static HTML, so there's nearly no load on your server when a page is visited - this makes a git-blog inherently faster and cheaper to run than any dynamic blog (such as Wordpress or Expression Engine) could ever be.
53
+
54
+ Customizing git-blog
55
+ --------------------
56
+
57
+ Your git-blog's design is all stored in the same repository as your posts - it consists of, simply, two Haml files that are rendered with the posts. One, `post.haml`, is the layout framework into which your posts' content will be pushed; and the other, `index.haml`, is the framework for the index page of your blog. Customizing the look and feel of your blog is as simple as modifying these two files to your liking, see the defaults for an example.
58
+
59
+ The git-blog rakefile itself is meant to be very hackable, and if you want to add further functionality - a different parsing system for your favorite markup, or extensions to the existing parsers for your frequently-used markup, or new blog features such as comments, trackbacks, feeds, and so on... it's as simple as fiddling around with git-blog's core. Don't be afraid, it's meant to be broken! If you *do* end up adding something cool to git-blog, I would very much appreciate it if you told me, I'll gladly link to your github fork from this README for other users to see.
60
+
61
+ Getting
62
+ -------
63
+
64
+ The authoritative source for this project is available at
65
+ <http://github.com/elliottcable/git-blog>. You can clone your own copy with the
66
+ following command:
67
+
68
+ git clone git://github.com/elliottcable/git-blog.git
69
+
70
+ If you want to make changes to the codebase, you need to fork your own github
71
+ repository for said changes. Send a pullrequest to [elliottcable][5]
72
+ when you've got something ready for the master that you think should be
73
+ integrated into the root source.
74
+
75
+ Bugs or feature requests can be submitted by forking a repository as
76
+ previously described, and then using [ditz][6] to add an issue.
77
+
78
+ [5]: <http://github.com/elliottcable> (elliottcable on GitHub)
79
+ [6]: <http://ditz.rubyforge.org/> (Ditz issue tracking)
80
+
81
+ Requirements
82
+ ------------
83
+
84
+ To run git-blog, you need git (obviously) - on a Macintosh, you can install it using MacPorts as follows:
85
+
86
+ sudo port install git-core
87
+
88
+ On a Linux or Windows machine, you're a bit more on your own, as I don't know how to install it on Windows, and I'm assuming a person using a Linux distrib is proficient enough to figure it out. In addition, you need the following gems:
89
+
90
+ * `gem install git`
91
+ * `gem install haml` (if you wish to create your templates or write your posts in haml)
92
+ * `gem install RedCloth` (if you wish to write your posts in Textile)
93
+ * One of the following Markdown libraries (if you wish to write your posts in Markdown)
94
+ ** `sudo gem install rdiscount`
95
+ ** `sudo gem install rpeg-markdown`
96
+ ** `sudo gem install maruku`
97
+ ** `sudo gem install BlueCloth`
98
+
99
+
100
+ To develop and contribute to git-blog, you also need:
101
+
102
+ * `gem install rspec`
103
+ * `gem install rake`
104
+ * `gem install rcov`
105
+ * `gem install technomancy-ditz --source=http://gems.github.com`z
@@ -0,0 +1,31 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'rake/gempackagetask'
4
+
5
+ gem_spec = Gem::Specification.new do |s|
6
+ s.name = %q{git-blog}
7
+ s.version = "0.0.1"
8
+
9
+ s.specification_version = 2 if s.respond_to? :specification_version=
10
+
11
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
+ s.authors = ["Cameron Cox", "Elliot Cable"]
13
+ s.date = %q{2008-06-30}
14
+ s.description = %q{yet another git-blog}
15
+ s.email = %q{cameroncox@gmail.com}
16
+ s.executables = ["git-blog"]
17
+ s.extra_rdoc_files = ["README", "LICENSE"]
18
+ s.files = ["LICENSE", "README", "Rakefile", "bin/git-blog", "lib/git-blog.rb", "lib/git-blog/application.rb", "lib/git-blog/parser.rb", "lib/git-blog/parser.rb", "lib/git-blog/extlib.rb", "lib/git-blog/extlib/file.rb", "lib/git-blog/extlib/string.rb", "lib/git-blog/extlib/symbol.rb", "lib/git-blog/parser/haml.rb", "lib/git-blog/parser/textile.rb", "lib/git-blog/parser/markdown.rb", "lib/git-blog/parser/html.rb", "prepped/.gitignore", "prepped/design/index.html.haml", "prepped/design/post.html.haml", "prepped/design/style.sass", "prepped/post-receive.hook", "prepped/posts/welcome_to_your_git_blog.markdown", "prepped/posts/.gitignore"]
19
+ s.has_rdoc = false
20
+ s.homepage = %q{http://github.com/cameroncox/git-blog/}
21
+ s.require_paths = ["lib", "prepped"]
22
+ s.rubyforge_project = %q{git-blog}
23
+ s.rubygems_version = %q{1.1.1}
24
+ s.summary = %q{yet another git-blog}
25
+ end
26
+
27
+ Rake::GemPackageTask.new(gem_spec) do |p|
28
+ p.gem_spec = gem_spec
29
+ p.need_tar = true
30
+ p.need_zip = true
31
+ end
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ $: << File.expand_path(File.join(File.dirname(__FILE__), "..", "lib"))
3
+ require 'git-blog'
4
+ GitBlog::Application.start
@@ -0,0 +1,24 @@
1
+ %w( git-blog/extlib git-blog/application ).each { |dep| require dep }
2
+
3
+ require 'git'
4
+ require 'haml'
5
+ require 'sass'
6
+
7
+ module GitBlog
8
+ class << self
9
+ def title_regex
10
+ {
11
+ 'xhtml' => /^<[^>]+>(.*)<[^>]+>$/,
12
+ 'haml' => /^%[^\s\{]+(?:\{[^\}]\})? (.*)$/,
13
+ 'textile' => /^h\d(?:[^\s\{]|\{[^\}]*\})*\. (.*)$/,
14
+ 'markdown' => /^(.*)$/ # Also works for other
15
+ }
16
+ end
17
+
18
+ def root
19
+ File.expand_path( File.dirname(__FILE__) / '..' )
20
+ end
21
+ end
22
+ end
23
+
24
+ require 'git-blog/parser'
@@ -0,0 +1,251 @@
1
+ %w( rubygems fileutils thor ).each { |dep| require dep }
2
+
3
+ include FileUtils
4
+
5
+ module GitBlog
6
+ class Application < Thor
7
+ def initialize(*args)
8
+ self.path = File.expand_path('.')
9
+ super(*args)
10
+ end
11
+
12
+ def path=(path)
13
+ @path = path
14
+ end
15
+
16
+ def path
17
+ @path
18
+ end
19
+
20
+ def git_blog(path)
21
+ until (@blog = Git.open path rescue false)
22
+ Git.init path
23
+ end
24
+
25
+ @blog
26
+ end
27
+
28
+ desc "bootstrap [PATH]", "bootstrap the given directory"
29
+ def bootstrap(path = nil)
30
+ self.path = path unless path.nil?
31
+ blog = git_blog(self.path)
32
+
33
+ cd path
34
+ mkdir 'posts'
35
+ mkdir 'design'
36
+ mkdir 'output'
37
+
38
+ cp GitBlog.root / :prepped / '.gitignore', path
39
+ %w( welcome_to_your_git_blog.markdown .gitignore ).each do |file|
40
+ cp GitBlog.root / :prepped / :posts / file, 'posts'
41
+ end
42
+
43
+ %w( index.html.haml post.html.haml style.sass ).each do |file|
44
+ cp GitBlog.root / :prepped / :design / file, 'design'
45
+ end
46
+
47
+ Dir['**/**'].each do |file|
48
+ if File.directory? file
49
+ chmod 0775, file
50
+ else
51
+ chmod 0664, file
52
+ end
53
+ end
54
+
55
+ chmod 0775, '.git'
56
+ chmod 0664, '.gitignore'
57
+ chmod 0664, :posts / '.gitignore'
58
+
59
+ blog.add
60
+ blog.commit_all 'A bird... a plan... no, a git-blog'
61
+ end # bootstrap
62
+
63
+ desc "github [USERNAME] [REPO]", "attach the blog to a github repository, can also clone an existing git-blog repository"
64
+ def github(username, repo)
65
+ github_url = "git@github.com:#{username.downcase}/#{repo.downcase}.git"
66
+
67
+ if File.directory? File.join(self.path, 'posts') &&
68
+ (blog = git_blog(self.path))
69
+
70
+ github = blog.add_remote 'github', github_url
71
+ blog.push github
72
+ else
73
+ system 'git-init'
74
+ system "git-remote add -f github #{github_url}"
75
+ system 'git checkout -b master github/master'
76
+ end
77
+ end # github
78
+
79
+ desc "post [OPT TITLE]", "create and open for editting a new post"
80
+ def post(title = nil)
81
+ @resume = false # don't resume and overwrite by default
82
+ temporary_post = :post_in_progress.markdown
83
+
84
+ unless title.nil?
85
+ temporary_post = title.slugify.to_sym.markdown
86
+ end
87
+
88
+ if File.file? temporary_post
89
+ puts '** You have an unfinished post from before, do you want to '
90
+ puts '(r)esume it, or overwrite it with a (n) one?'
91
+ case STDIN.gets
92
+ when /r/i
93
+ @resume = true
94
+ when /n/i
95
+ # do nothing
96
+ else
97
+ raise 'Invalid choice, aborting'
98
+ end
99
+ end # if
100
+
101
+ unless @resume
102
+ File.open( temporary_post, File::RDWR|File::TRUNC|File::CREAT, 0664 ) do |p|
103
+ p.puts 'Replace this text with your title!'
104
+ p.puts '=================================='
105
+ p.print "\n"
106
+ p.close
107
+ end
108
+ end
109
+
110
+ if ENV['VISUAL']
111
+ system "#{ENV['VISUAL']} #{temporary_post}"
112
+ elsif File.file? '/usr/bin/mate'
113
+ system "/usr/bin/mate -w #{temporary_post}"
114
+ end
115
+
116
+ first_line = File.open( temporary_post, File::RDONLY).gets.chomp
117
+ markup = case first_line
118
+ when /^\</ then 'xhtml'
119
+ when /^\%/ then 'haml'
120
+ when /^\#|h\d\./ then 'textile'
121
+ else 'markdown'
122
+ end
123
+
124
+ title = (first_line.match GitBlog.title_regex[markup])[1]
125
+ path = :posts / title.slugify.send(markup.to_sym)
126
+ mv temporary_post, path
127
+
128
+ blog = Git.open File.expand_path('.')
129
+ blog.add path
130
+ blog.commit "New post: #{title}"
131
+
132
+ end # post
133
+
134
+ desc "clobber", "remove all generated xhtml files"
135
+ def clobber
136
+ Dir['output/**/*.xhtml'].each do |file|
137
+ rm_f file
138
+ end
139
+ end # clobber
140
+
141
+ desc "build", "build the index, and all posts, along with any sass files"
142
+ def build
143
+ clobber
144
+ build_posts
145
+ build_index
146
+
147
+ Dir[:design / '*.sass'].each do |sass|
148
+ template = IO.read sass
149
+ parsed = Sass::Engine.new(template).render
150
+
151
+ destination = :output / sass.gsub(/design/, '').gsub(/.sass/, '.css')
152
+ File.open(destination, File::RDWR|File::TRUNC|File::CREAT, 0664) do |f|
153
+ f.puts parsed
154
+ f.close
155
+
156
+ puts "~ #{sass} -> #{destination}"
157
+ end
158
+ end
159
+ end # build
160
+
161
+ desc "push_changes [REMOTE]", "push changes to the remote"
162
+ def push_changes(remote_name = nil)
163
+ remote_name = remote.nil?? 'github' : remote_name
164
+ blog = git_blog(self.path)
165
+ remote = blog.remote remote_name
166
+ blog.push remote
167
+ puts "Changes pushed to #{remote_name}"
168
+ end # push_changes
169
+
170
+ desc "make_servable", "prepare the blog to be served (configures hooks)"
171
+ def make_servable
172
+ mv '.git' / :hooks / 'post-receive', '.git' / :hooks / 'post-receive.old'
173
+ cp GitBlog.root / :prepped / 'post-receive.hook', '.git' / :hooks / 'post-receive'
174
+ chmod 0775, '.git' / :hooks / 'post-receive'
175
+
176
+ puts "~ git-blog is prepared for serving (git post-receive hook prepared)"
177
+ end
178
+
179
+ def force_checkout
180
+ puts 'Forcing update of working copy...'
181
+ system 'git-checkout -f master'
182
+ end # force_checkout
183
+
184
+ def post_receieve
185
+ force_checkout
186
+ build
187
+ end # post_receieve
188
+
189
+ protected
190
+
191
+ def build_posts
192
+ unless File.directory? 'output/archive'
193
+ mkdir 'output/archive'
194
+ end
195
+
196
+ Dir['posts/*.*'].each do |path|
197
+ markup = File.extname(path).downcase.gsub(/^\./, '')
198
+ content = IO.read path
199
+ first_line = content.match(/^(.*)\n/)[1]
200
+
201
+ post_title = (first_line.match GitBlog.title_regex[markup])[1]
202
+ parsed = begin
203
+ require "git-blog" / "parser" / markup.downcase
204
+ parser = GitBlog::Parser.const_get(markup.gsub(/\b\w/){$&.upcase})
205
+ parser.send :parse, content
206
+ end
207
+
208
+ template = IO.read :design / 'post.html'.haml
209
+
210
+ completed = Haml::Engine.new(template, :filename => :design / 'post.html'.haml).
211
+ to_html(Object.new, { :content => parsed, :title => post_title })
212
+
213
+ completed = GitBlog::Parser.fix_pres(completed)
214
+
215
+ destination = :output / :archive / path.gsub(/posts/, '').gsub(/.#{markup}$/, '.xhtml')
216
+ File.open(destination, File::RDWR|File::TRUNC|File::CREAT, 0664) do |f|
217
+ f.puts completed
218
+ f.close
219
+ end
220
+
221
+ puts "~ #{path} => #{destination} (as #{markup})"
222
+ end
223
+ end
224
+
225
+ def build_index
226
+ blog = git_blog(self.path)
227
+
228
+ entries = blog.log.select { |e| e.message =~ /New post: / }
229
+ posts = []
230
+ entries.map do |entry|
231
+ title = entry.message.match(/New post: (.*)$/)[1]
232
+ posts << { :title => title, :slug => title.slugify }
233
+ end
234
+
235
+ template = IO.read :design / 'index.html'.haml
236
+
237
+ completed = Haml::Engine.new(template, :filename => :design / 'index.html'.haml).
238
+ to_html(Object.new, :posts => posts)
239
+
240
+ destination = :output / :index.xhtml
241
+
242
+ File.open destination, File::RDWR|File::TRUNC|File::CREAT, 0664 do |f|
243
+ f.puts completed
244
+ f.close
245
+ end
246
+
247
+ puts "~ index.xhtml compiled"
248
+ end # build_index
249
+
250
+ end # Application
251
+ end #GitBlog
@@ -0,0 +1,3 @@
1
+ require 'git-blog/extlib/file'
2
+ require 'git-blog/extlib/symbol'
3
+ require 'git-blog/extlib/string'
@@ -0,0 +1,12 @@
1
+ class File
2
+ Extensions = %r=^(markdown|textile|haml|sass|css|html|xhtml|rb|txt|text|atom|rss|xml)$=i
3
+ module Extension
4
+ def method_missing(meth, *args)
5
+ if Extensions =~ meth.to_s
6
+ [self, '.', meth.to_s].join
7
+ else
8
+ super
9
+ end # if
10
+ end # method_missing
11
+ end # Extension
12
+ end # File
@@ -0,0 +1,18 @@
1
+ module GitBlog
2
+ module Extlib
3
+ module String
4
+ def slugify
5
+ self.gsub(/([\s]+)/, '_').gsub(/([^a-z0-9_]+)/i, '').downcase
6
+ end
7
+
8
+ def /(path)
9
+ File.join(self, path.to_s)
10
+ end
11
+ end
12
+ end
13
+ end
14
+
15
+ class String
16
+ include File::Extension
17
+ include GitBlog::Extlib::String
18
+ end
@@ -0,0 +1,14 @@
1
+ module GitBlog
2
+ module Extlib
3
+ module Symbol
4
+ def /(path)
5
+ File.join(self.to_s, path.to_s)
6
+ end # def
7
+ end # Symbol
8
+ end # Extlib
9
+ end # GitBlog
10
+
11
+ class Symbol
12
+ include File::Extension
13
+ include GitBlog::Extlib::Symbol
14
+ end
@@ -0,0 +1,9 @@
1
+ module GitBlog
2
+ module Parser
3
+ def self.fix_pres(string)
4
+ string.gsub %r!([ \t]*)<pre>(.*?)</pre>!m do |match|
5
+ match.gsub(/^#{$1}/, '')
6
+ end
7
+ end # self.fix_pres
8
+ end # Parser
9
+ end # GitBlog
@@ -0,0 +1,12 @@
1
+ require 'haml'
2
+
3
+ module GitBlog
4
+ module Parser
5
+ module Haml
6
+ def self.parse input
7
+ input.gsub!(/^(.*)(\n\s+)*\n/m, '')
8
+ ::Haml::Engine.new(input).render
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,10 @@
1
+ module GitBlog
2
+ module Parser
3
+ module HTML
4
+ def self.parse input
5
+ input.gsub!(/^(.*)(\n\s+)*\n/m, '')
6
+ input
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,34 @@
1
+ # Maruku
2
+ begin
3
+ require 'maruku'
4
+ Markdown = Maruku
5
+
6
+ # rpeg-markdown
7
+ rescue LoadError
8
+ begin
9
+ require 'markdown'
10
+
11
+ # Discount
12
+ rescue LoadError
13
+ begin
14
+ require 'rdiscount'
15
+ Markdown = RDiscount
16
+
17
+ # BlueCloth
18
+ rescue LoadError
19
+ require 'bluecloth'
20
+ Markdown = BlueCloth
21
+ end
22
+ end
23
+ end
24
+
25
+ module GitBlog
26
+ module Parser
27
+ module Markdown
28
+ def self.parse input
29
+ input.gsub!(/^(.*)\n=+(\n\s+)*\n/m, '')
30
+ ::Markdown.new(input).to_html
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,12 @@
1
+ require 'redcloth'
2
+
3
+ module GitBlog
4
+ module Parser
5
+ module Textile
6
+ def self.parse(input)
7
+ input.gsub!(/^(.*)(\n\s+)*\n/m, '')
8
+ ::RedCloth.new(input).to_html
9
+ end
10
+ end
11
+ end
12
+ end
File without changes
@@ -0,0 +1,18 @@
1
+ !!! xml
2
+ !!! 1.1
3
+ %html{:xmlns => 'http://www.w3.org/1999/xhtml', 'xml:lang' => 'en', 'xml:dir' => 'ltr'}
4
+ %head
5
+ %meta{ :'http-equiv' => 'Content-Type', :content => 'application/xhtml+xml; charset=utf-8' }
6
+ %title yet another git-blog
7
+ %link{ :rel => 'stylesheet', :href => '/style.css', :type => 'text/css; charset=utf-8' }
8
+ / %link{ :rel => 'alternate', :href => '/index.rss', :type => 'application/rss+xml', :title => 'Feed (RSS 2.0)' }
9
+ %body
10
+ %h1 yet another git-blog
11
+ %ol#posts
12
+ - posts.each do |post|
13
+ %li
14
+ %a{ :href => "/archive/#{post[:slug]}.html", :title => post[:title] }= post[:title]
15
+
16
+ #footer
17
+ :markdown
18
+ powered by [git-blog](http://github.com/elliottcable/git-blog "elliottcable's git-blog on GitHub"), by [elliottcable](http://elliottcable.name "elliottcable")
@@ -0,0 +1,17 @@
1
+ !!! xml
2
+ !!! 1.1
3
+ %html{ :xmlns => 'http://www.w3.org/1999/xhtml', :'xml:lang' => 'en' :'xml:dir' => 'ltr' }
4
+ %head
5
+ %meta{ :'http-equiv' => 'Content-Type', :content => 'application/xhtml+xml; charset=utf-8' }
6
+ %title= title
7
+ %link{ :rel => 'stylesheet', :href => '/style.css', :type => 'text/css; charset=utf-8' }
8
+ / %link{ :rel => 'alternate', :href => '/index.rss', :type => 'application/rss+xml', :title => 'Feed (RSS 2.0)' }
9
+ %body
10
+
11
+ %h1= title
12
+ #content
13
+ = content
14
+
15
+ #footer
16
+ :markdown
17
+ return [home](../ "blog root") | powered by [git-blog](http://github.com/elliottcable/git-blog "elliottcable's git-blog on GitHub"), by [elliottcable](http://elliottcable.name "elliottcable")
@@ -0,0 +1,31 @@
1
+ body
2
+ :width 45em
3
+ :margin auto
4
+ :font
5
+ :family "Georiga", "Times New Roman", "Times", "Serif";
6
+ :size 11pt/1.6
7
+
8
+ h1
9
+ :text-align center
10
+ :font
11
+ :family "Helvetica Neue", Arial, Helvetica, Geneva, sans-serif
12
+ :text-transform uppercase
13
+
14
+ #posts
15
+
16
+ li
17
+ :list-style-type none
18
+ :text-align center
19
+ :font-size 150%
20
+
21
+ #footer
22
+ :padding auto 5px
23
+ :background #FFF
24
+ :position fixed
25
+ :bottom 0
26
+ :right 0
27
+ :font-size 85%
28
+
29
+ p
30
+ :margin 0 !important
31
+ :padding 0 !important
@@ -0,0 +1,4 @@
1
+ #!/bin/bash
2
+ GIT_DIR=$(pwd) # I do not know, for the life of me, why this is necessary.
3
+ cd ../
4
+ git-blog post_receive
File without changes
@@ -0,0 +1,4 @@
1
+ Welcome to your git-blog
2
+ ========================
3
+
4
+ Welcome to your [git-blog](http://github.com/elliottcable/git-blog "elliottcable's git-blog - GitHub") powered blog! Type `rake -T` in your local blog directory to get started *(-:*
metadata ADDED
@@ -0,0 +1,77 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cameroncox-git-blog
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Cameron Cox
8
+ - Elliot Cable
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2008-06-30 00:00:00 -07:00
14
+ default_executable:
15
+ dependencies: []
16
+
17
+ description: yet another git-blog
18
+ email: cameroncox@gmail.com
19
+ executables:
20
+ - git-blog
21
+ extensions: []
22
+
23
+ extra_rdoc_files:
24
+ - README
25
+ - LICENSE
26
+ files:
27
+ - LICENSE
28
+ - README
29
+ - Rakefile
30
+ - bin/git-blog
31
+ - lib/git-blog.rb
32
+ - lib/git-blog/application.rb
33
+ - lib/git-blog/parser.rb
34
+ - lib/git-blog/extlib.rb
35
+ - lib/git-blog/extlib/file.rb
36
+ - lib/git-blog/extlib/string.rb
37
+ - lib/git-blog/extlib/symbol.rb
38
+ - lib/git-blog/parser/haml.rb
39
+ - lib/git-blog/parser/textile.rb
40
+ - lib/git-blog/parser/markdown.rb
41
+ - lib/git-blog/parser/html.rb
42
+ - prepped/.gitignore
43
+ - prepped/design/index.html.haml
44
+ - prepped/design/post.html.haml
45
+ - prepped/design/style.sass
46
+ - prepped/post-receive.hook
47
+ - prepped/posts/welcome_to_your_git_blog.markdown
48
+ - prepped/posts/.gitignore
49
+ has_rdoc: false
50
+ homepage: http://github.com/cameroncox/git-blog/
51
+ post_install_message:
52
+ rdoc_options: []
53
+
54
+ require_paths:
55
+ - lib
56
+ - prepped
57
+ required_ruby_version: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: "0"
62
+ version:
63
+ required_rubygems_version: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: "0"
68
+ version:
69
+ requirements: []
70
+
71
+ rubyforge_project: git-blog
72
+ rubygems_version: 1.2.0
73
+ signing_key:
74
+ specification_version: 2
75
+ summary: yet another git-blog
76
+ test_files: []
77
+