gitstuff-preview 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in gitstuff-preview.gemspec
4
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,36 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ gitstuff-preview (0.0.1)
5
+ hashie
6
+ liquid
7
+ rdiscount
8
+ sinatra
9
+ thin
10
+
11
+ GEM
12
+ remote: http://rubygems.org/
13
+ specs:
14
+ daemons (1.1.4)
15
+ eventmachine (0.12.10)
16
+ hashie (1.2.0)
17
+ liquid (2.3.0)
18
+ rack (1.3.5)
19
+ rack-protection (1.1.4)
20
+ rack
21
+ rdiscount (1.6.8)
22
+ sinatra (1.3.1)
23
+ rack (>= 1.3.4, ~> 1.3)
24
+ rack-protection (>= 1.1.2, ~> 1.1)
25
+ tilt (>= 1.3.3, ~> 1.3)
26
+ thin (1.3.1)
27
+ daemons (>= 1.0.9)
28
+ eventmachine (>= 0.12.6)
29
+ rack (>= 1.0.0)
30
+ tilt (1.3.3)
31
+
32
+ PLATFORMS
33
+ ruby
34
+
35
+ DEPENDENCIES
36
+ gitstuff-preview!
data/README.markdown ADDED
File without changes
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+ require 'rubygems'
3
+ require 'thin'
4
+ require 'gitstuff-preview'
5
+
6
+ args = ARGV + ["start", "-R", File.join(File.dirname(__FILE__),'..','config.ru')]
7
+ Thin::Runner.new(args).run!
data/config.ru ADDED
@@ -0,0 +1,2 @@
1
+ require File.join(File.dirname(__FILE__), "/lib/gitstuff-preview")
2
+ run Server
@@ -0,0 +1,31 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "gitstuff-preview/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "gitstuff-preview"
7
+ s.version = Gitstuff::Preview::VERSION
8
+ s.authors = ["Jesse Kriss"]
9
+ s.email = ["jesse@jklabs.net"]
10
+ s.homepage = "http://github.com/jkriss/gitstuff-preview"
11
+ s.summary = %q{Handy gem for previewing Gitstuff sites}
12
+ s.description = %q{gitstuff-preview runs a local web server to preview Gitstuff templates}
13
+
14
+ s.rubyforge_project = "gitstuff-preview"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ # s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ # s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ # s.files = `ls`.split("\n")
20
+ s.executables = ["gitstuff-preview"]
21
+ s.require_paths = ["lib"]
22
+
23
+ # specify any dependencies here; for example:
24
+ # s.add_development_dependency "rspec"
25
+ # s.add_runtime_dependency "rest-client"
26
+ s.add_runtime_dependency "sinatra"
27
+ s.add_runtime_dependency "liquid"
28
+ s.add_runtime_dependency "rdiscount"
29
+ s.add_runtime_dependency "hashie"
30
+ s.add_runtime_dependency "thin"
31
+ end
@@ -0,0 +1,93 @@
1
+ ENV['RACK_ENV'] ||= 'production'
2
+
3
+ require 'rubygems'
4
+ require 'sinatra/base'
5
+ require 'hashie'
6
+ require 'liquid'
7
+ require 'rdiscount'
8
+
9
+ BASE_PATH = ENV['BASE_PATH'] || "./"
10
+
11
+ class Server < Sinatra::Base
12
+
13
+ def render_index(context={})
14
+ posts_html = ""
15
+ Dir["#{BASE_PATH}/posts/*.yml"][0,10].each do |file|
16
+ slug = File.basename(file, ".yml")
17
+ post = get_post_content(slug, file)
18
+ post[:url] = "/#{slug}"
19
+ posts_html += render_raw_post(post, context)
20
+ end
21
+ render_page(posts_html, context)
22
+ end
23
+
24
+ def render_post(slug, context={})
25
+ post_html = render_raw_post(get_post_content(slug), context)
26
+ render_page(post_html, context.merge(:single_post => true))
27
+ end
28
+
29
+ def render_raw_post(post, context={})
30
+ post.content = RDiscount.new(post.content).to_html
31
+ template = Liquid::Template.parse(File.read File.join(BASE_PATH, 'layouts', 'post.html.liquid'))
32
+ template.render Hashie::Mash.new(context.merge(post.to_hash))
33
+ end
34
+
35
+ def get_post_content(slug, path=nil)
36
+ path ||= File.join(BASE_PATH, 'posts', slug) + ".yml"
37
+ begin
38
+ post_data = Hashie::Mash.new YAML.load_file(path)
39
+ post_data['content'] = File.read(path).sub /---.*---\n/m, ''
40
+ post_data
41
+ rescue => e
42
+ puts "!! Error loading #{path}"
43
+ # raise e
44
+ Hashie::Mash.new :content => "Error in #{slug}.yml: #{e.message}"
45
+ end
46
+ end
47
+
48
+ def render_page(content, context={})
49
+ layout = Liquid::Template.parse(File.read File.join(BASE_PATH, 'layouts', 'page.html.liquid'))
50
+ layout.render Hashie::Mash.new context.merge(:content => content)
51
+ end
52
+
53
+ def search_form
54
+ '<form action="/search" method="get"><input class="search" type="text" name="q"/></form>'
55
+ end
56
+
57
+ def basic_metadata
58
+ {
59
+ :root_path => '',
60
+ :asset_path => '/assets',
61
+ :search_form => search_form
62
+ }
63
+ end
64
+
65
+ def default_metadata
66
+ hash = {
67
+ :author => { :name => "Author Name", :email => "author@example.com" },
68
+ :created_at => Time.now,
69
+ :modified_at => Time.now,
70
+ :previous_page => '#',
71
+ :next_page => '#',
72
+ }
73
+ hash['gravatar'] = "http://www.gravatar.com/avatar/#{Digest::MD5.hexdigest(hash[:author][:email])}"
74
+ hash.merge(basic_metadata)
75
+ end
76
+
77
+ get '/' do
78
+ render_index default_metadata
79
+ end
80
+
81
+ get '/assets/*' do
82
+ asset_path = params[:splat].join "/"
83
+ send_file "#{BASE_PATH}/assets/#{asset_path}"
84
+ end
85
+
86
+ get '/search' do
87
+ render_page '', basic_metadata.merge({ :no_results => true, :query => params[:q] || 'some search query' })
88
+ end
89
+
90
+ get '/:slug' do
91
+ render_post params[:slug], default_metadata
92
+ end
93
+ end
@@ -0,0 +1,5 @@
1
+ module Gitstuff
2
+ module Preview
3
+ VERSION = "0.0.1"
4
+ end
5
+ end
@@ -0,0 +1,2 @@
1
+ require "gitstuff-preview/version"
2
+ require "gitstuff-preview/server"
metadata ADDED
@@ -0,0 +1,145 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gitstuff-preview
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Jesse Kriss
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-11-26 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: sinatra
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ hash: 3
29
+ segments:
30
+ - 0
31
+ version: "0"
32
+ type: :runtime
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
35
+ name: liquid
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ hash: 3
43
+ segments:
44
+ - 0
45
+ version: "0"
46
+ type: :runtime
47
+ version_requirements: *id002
48
+ - !ruby/object:Gem::Dependency
49
+ name: rdiscount
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ hash: 3
57
+ segments:
58
+ - 0
59
+ version: "0"
60
+ type: :runtime
61
+ version_requirements: *id003
62
+ - !ruby/object:Gem::Dependency
63
+ name: hashie
64
+ prerelease: false
65
+ requirement: &id004 !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ hash: 3
71
+ segments:
72
+ - 0
73
+ version: "0"
74
+ type: :runtime
75
+ version_requirements: *id004
76
+ - !ruby/object:Gem::Dependency
77
+ name: thin
78
+ prerelease: false
79
+ requirement: &id005 !ruby/object:Gem::Requirement
80
+ none: false
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ hash: 3
85
+ segments:
86
+ - 0
87
+ version: "0"
88
+ type: :runtime
89
+ version_requirements: *id005
90
+ description: gitstuff-preview runs a local web server to preview Gitstuff templates
91
+ email:
92
+ - jesse@jklabs.net
93
+ executables:
94
+ - gitstuff-preview
95
+ extensions: []
96
+
97
+ extra_rdoc_files: []
98
+
99
+ files:
100
+ - .gitignore
101
+ - Gemfile
102
+ - Gemfile.lock
103
+ - README.markdown
104
+ - Rakefile
105
+ - bin/gitstuff-preview
106
+ - config.ru
107
+ - gitstuff-preview.gemspec
108
+ - lib/gitstuff-preview.rb
109
+ - lib/gitstuff-preview/server.rb
110
+ - lib/gitstuff-preview/version.rb
111
+ homepage: http://github.com/jkriss/gitstuff-preview
112
+ licenses: []
113
+
114
+ post_install_message:
115
+ rdoc_options: []
116
+
117
+ require_paths:
118
+ - lib
119
+ required_ruby_version: !ruby/object:Gem::Requirement
120
+ none: false
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ hash: 3
125
+ segments:
126
+ - 0
127
+ version: "0"
128
+ required_rubygems_version: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ">="
132
+ - !ruby/object:Gem::Version
133
+ hash: 3
134
+ segments:
135
+ - 0
136
+ version: "0"
137
+ requirements: []
138
+
139
+ rubyforge_project: gitstuff-preview
140
+ rubygems_version: 1.8.11
141
+ signing_key:
142
+ specification_version: 3
143
+ summary: Handy gem for previewing Gitstuff sites
144
+ test_files: []
145
+