/
user.rb
113 lines (93 loc) · 2.7 KB
/
user.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
module Roam
class UserApp < App
# Require mustache views
Dir["views/user/*.rb"].sort.each {|req| require req}
not_found do
mustache(:missing, {})
end
error do
mustache(:error, {})
end
after do
cache
end
helpers do
def site
@site ||= Site.default
end
def tags
@tags ||= Post.tags
end
def design
@design ||= site.design
end
def cache
if site.cache && site.cache > 0
response.headers['Cache-Control'] = "public, max-age=#{site.cache}"
end
end
##
# Render a mustache template
#
# Pass in the view name and the init arguments for that view
# Pass layout=false if you do not wish to render the layout template
#
# The site variable is added automatically as it is required
# mustache(:page, :page => page)
# User::Views::Page.new(:site => site, :page => page).render
def mustache(template, args={}, layout=true)
args = args.update(:site => site, :site_tags => tags)
layout_class = UserApp::Views::Layout
layout_class.template = design.layout
view_class = UserApp::Views.const_get(template.to_s.classify)
view_class.template = design.send(template)
view_initialized = view_class.new(args)
view_rendered = view_initialized.render
if layout
if view_initialized.respond_to?(:title)
args.update(:page_title => view_initialized.title)
end
layout_class.new(args).render(:yield => view_rendered)
else
view_rendered
end
end
end
before do
UserApp::Views::Layout.template = design.layout
end
get '/index.xml' do
content_type :xml
updated = Post.recent_update
posts = Post.recent(params[:limit])
mustache(:feed, {:updated => updated, :posts => posts}, false)
end
get '/style.css' do
content_type :css
mustache(:style, {}, false)
end
get '/application.js' do
content_type :js
mustache(:script, {}, false)
end
get '/' do
posts = Post.recent(5).to_a
post = posts.first
posts.delete(post)
mustache(:home, {:posts => posts, :post => post})
end
get '/blog' do
posts = Post.active(params[:tag]).to_a
mustache(:blog, {:posts => posts, :tag => params[:tag]})
end
get '/blog/:id' do
not_found unless post = Post.by_slug(params[:id])
posts = Post.near(post,2)
mustache(:post, {:post => post, :posts => posts})
end
get '/:id' do
not_found unless page = Page.by_slug(params[:id])
mustache(:page, {:page => page})
end
end
end