gitstuff-preview 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- gitstuff-preview (0.0.1)
4
+ gitstuff-preview (0.0.2)
5
5
  hashie
6
6
  liquid
7
7
  rdiscount
data/README.markdown CHANGED
@@ -0,0 +1,9 @@
1
+ # gitstuff-preview
2
+
3
+ This is a handy gem for previewing [Gitstuff](http://gitstuff.com) site templates.
4
+
5
+ ## Usage
6
+
7
+ `gem install gitstuff-preview`, then run `gitstuff-preview` in the directory that has your Gitstuff files.
8
+
9
+ If you'd like it on a port other than 3000, run it with `gitstuff-preview -p <port>`.
data/config.ru CHANGED
@@ -1,2 +1,3 @@
1
+ puts File.join(File.dirname(__FILE__), "/lib/gitstuff-preview")
1
2
  require File.join(File.dirname(__FILE__), "/lib/gitstuff-preview")
2
3
  run Server
@@ -10,33 +10,35 @@ BASE_PATH = ENV['BASE_PATH'] || "./"
10
10
 
11
11
  class Server < Sinatra::Base
12
12
 
13
- def render_index(context={})
14
- posts_html = ""
13
+ def render_index(context={}, options={})
14
+ context[:posts] = []
15
15
  Dir["#{BASE_PATH}/posts/*.yml"][0,10].each do |file|
16
16
  slug = File.basename(file, ".yml")
17
17
  post = get_post_content(slug, file)
18
- post[:url] = "/#{slug}"
19
- posts_html += render_raw_post(post, context)
18
+ post.url = "/#{slug}"
19
+ post.content = RDiscount.new(post.content).to_html
20
+ context[:posts] << post.to_hash
20
21
  end
21
- render_page(posts_html, context)
22
+ render_page(context, options)
22
23
  end
23
24
 
24
25
  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))
26
+ post = get_post_content(slug)
27
+ post.content = RDiscount.new(post.content).to_html
28
+ context[:posts] = [post.to_hash]
29
+ context[:single_post] = true
30
+ render_page(context)
33
31
  end
34
32
 
35
33
  def get_post_content(slug, path=nil)
36
- path ||= File.join(BASE_PATH, 'posts', slug) + ".yml"
34
+ path ||= File.join("#{BASE_PATH}posts", slug) + ".yml"
37
35
  begin
38
36
  post_data = Hashie::Mash.new YAML.load_file(path)
39
- post_data['content'] = File.read(path).sub /---.*---\n/m, ''
37
+ post_data[:content] = File.read(path).sub /---.*---\n/m, ''
38
+ post_data[:author] = Hashie::Mash.new :name => "Author Name", :email => "author@example.com"
39
+ post_data[:gravatar] = "http://www.gravatar.com/avatar/#{Digest::MD5.hexdigest(post_data.author.email)}"
40
+ post_data.created_at = Time.now
41
+ post_data.modified_at = Time.now
40
42
  post_data
41
43
  rescue => e
42
44
  puts "!! Error loading #{path}"
@@ -45,9 +47,10 @@ class Server < Sinatra::Base
45
47
  end
46
48
  end
47
49
 
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)
50
+ def render_page(context, options={})
51
+ layout = options[:layout] || 'index.html.liquid'
52
+ layout = Liquid::Template.parse(File.read File.join(BASE_PATH, 'templates', layout))
53
+ layout.render Hashie::Mash.new context
51
54
  end
52
55
 
53
56
  def search_form
@@ -55,22 +58,18 @@ class Server < Sinatra::Base
55
58
  end
56
59
 
57
60
  def basic_metadata
58
- {
59
- :root_path => '',
61
+ Hashie::Mash.new({
62
+ :root_path => request.url.match(/(^.*\/{2}[^\/]*)/)[1],
60
63
  :asset_path => '/assets',
61
64
  :search_form => search_form
62
- }
65
+ })
63
66
  end
64
67
 
65
68
  def default_metadata
66
69
  hash = {
67
- :author => { :name => "Author Name", :email => "author@example.com" },
68
- :created_at => Time.now,
69
- :modified_at => Time.now,
70
70
  :previous_page => '#',
71
71
  :next_page => '#',
72
72
  }
73
- hash['gravatar'] = "http://www.gravatar.com/avatar/#{Digest::MD5.hexdigest(hash[:author][:email])}"
74
73
  hash.merge(basic_metadata)
75
74
  end
76
75
 
@@ -86,6 +85,11 @@ class Server < Sinatra::Base
86
85
  get '/search' do
87
86
  render_page '', basic_metadata.merge({ :no_results => true, :query => params[:q] || 'some search query' })
88
87
  end
88
+
89
+ get '/atom.xml' do
90
+ content_type 'application/atom+xml'
91
+ render_index default_metadata, :layout => 'atom.xml.liquid'
92
+ end
89
93
 
90
94
  get '/:slug' do
91
95
  render_post params[:slug], default_metadata
@@ -1,5 +1,5 @@
1
1
  module Gitstuff
2
2
  module Preview
3
- VERSION = "0.0.1"
3
+ VERSION = "0.0.2"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gitstuff-preview
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 27
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 1
10
- version: 0.0.1
9
+ - 2
10
+ version: 0.0.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Jesse Kriss
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-11-26 00:00:00 Z
18
+ date: 2011-11-27 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: sinatra