nitro 0.8.0 → 0.9.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/AUTHORS +3 -4
- data/ChangeLog +418 -0
- data/LICENSE +1 -1
- data/README +157 -89
- data/RELEASES +50 -0
- data/Rakefile +5 -7
- data/benchmark/nitro/bench.rb +5 -0
- data/benchmark/nitro/simple-webrick-n-200.txt +44 -0
- data/benchmark/nitro/static-webrick-n-200.txt +43 -0
- data/benchmark/nitro/tiny-lhttpd-n-200-c-5.txt +43 -0
- data/benchmark/nitro/tiny-webrick-n-200-c-5.txt +44 -0
- data/benchmark/nitro/tiny-webrick-n-200.txt +44 -0
- data/benchmark/nitro/tiny2-webrick-n-200.txt +44 -0
- data/{lib/nitro/server/cluster.rb → bin/cluster} +26 -30
- data/bin/proto/README +2 -2
- data/bin/proto/{apache.conf → conf/apache.conf} +0 -0
- data/bin/proto/conf/app.conf.rb +22 -0
- data/bin/proto/conf/lhttpd.conf +236 -0
- data/bin/proto/ctl +4 -0
- data/bin/proto/lib/README +5 -0
- data/bin/proto/log/README +3 -0
- data/bin/proto/root/fcgi.rb +6 -0
- data/bin/proto/root/index.xhtml +65 -7
- data/bin/proto/root/m/nitro.png +0 -0
- data/examples/blog/README +7 -5
- data/examples/blog/{apache.conf → conf/apache.conf} +0 -0
- data/examples/blog/conf/app.conf.rb +56 -0
- data/examples/blog/conf/lhttpd.conf +236 -0
- data/examples/blog/ctl +4 -0
- data/examples/blog/lib/blog.rb +11 -136
- data/examples/blog/lib/blog/controller.rb +99 -0
- data/examples/blog/lib/blog/model.rb +39 -0
- data/examples/blog/log/README +3 -0
- data/examples/blog/root/comments.xhtml +2 -2
- data/examples/blog/root/fcgi.rb +6 -0
- data/examples/blog/root/index.xhtml +4 -5
- data/examples/blog/root/login.xhtml +2 -2
- data/examples/blog/root/style.xsl +9 -9
- data/examples/blog/root/view_entry.xhtml +2 -2
- data/examples/flash/conf/app.conf.rb +23 -0
- data/examples/flash/ctl +4 -0
- data/examples/flash/log/README +3 -0
- data/examples/flash/root/index.xhtml +0 -9
- data/examples/flash/root/show_inline_text.xhtml +10 -5
- data/examples/no_xsl_blog/README +12 -0
- data/examples/no_xsl_blog/conf/apache.conf +0 -0
- data/examples/no_xsl_blog/conf/app.conf.rb +57 -0
- data/examples/no_xsl_blog/conf/lhttpd.conf +236 -0
- data/examples/no_xsl_blog/ctl +4 -0
- data/examples/no_xsl_blog/lib/blog.rb +20 -0
- data/examples/no_xsl_blog/lib/blog/controller.rb +102 -0
- data/examples/no_xsl_blog/lib/blog/model.rb +39 -0
- data/examples/no_xsl_blog/lib/blog/template.rb +134 -0
- data/examples/no_xsl_blog/log/README +3 -0
- data/examples/no_xsl_blog/root/comments.xhtml +41 -0
- data/examples/no_xsl_blog/root/entry_form.xhtml +22 -0
- data/examples/no_xsl_blog/root/fcgi.rb +6 -0
- data/examples/no_xsl_blog/root/index.xhtml +39 -0
- data/examples/no_xsl_blog/root/login.xhtml +21 -0
- data/examples/no_xsl_blog/root/m/bubbles.gif +0 -0
- data/examples/no_xsl_blog/root/m/comments_curve.gif +0 -0
- data/examples/no_xsl_blog/root/m/down.gif +0 -0
- data/examples/no_xsl_blog/root/m/footer_bg.gif +0 -0
- data/examples/no_xsl_blog/root/m/garrow.gif +0 -0
- data/examples/no_xsl_blog/root/m/gbull.gif +0 -0
- data/examples/no_xsl_blog/root/m/grbull.gif +0 -0
- data/examples/no_xsl_blog/root/m/h1_bg.gif +0 -0
- data/examples/no_xsl_blog/root/m/header_bg.gif +0 -0
- data/examples/no_xsl_blog/root/m/nitro.gif +0 -0
- data/examples/no_xsl_blog/root/m/obull.gif +0 -0
- data/examples/no_xsl_blog/root/m/page_bg.gif +0 -0
- data/examples/no_xsl_blog/root/m/rss.gif +0 -0
- data/examples/no_xsl_blog/root/m/side_title_bg.gif +0 -0
- data/examples/no_xsl_blog/root/m/sidebar_bg.gif +0 -0
- data/examples/no_xsl_blog/root/recent_posts.xhtml +14 -0
- data/examples/no_xsl_blog/root/style.css +301 -0
- data/examples/no_xsl_blog/root/view_entry.xhtml +25 -0
- data/examples/no_xsl_blog/root/view_entry.xml +12 -0
- data/examples/og/run.rb +2 -2
- data/examples/tiny/README +2 -2
- data/examples/tiny/conf/apache.conf +5 -0
- data/examples/tiny/conf/app.conf.rb +21 -0
- data/examples/tiny/conf/lhttpd.conf +236 -0
- data/examples/tiny/ctl +4 -0
- data/examples/tiny/log/README +3 -0
- data/examples/tiny/root/fcgi.rb +6 -0
- data/examples/tiny/root/index.xhtml +7 -4
- data/examples/tiny/root/nitro.png +0 -0
- data/lib/glue.rb +13 -9
- data/lib/glue/array.rb +1 -1
- data/lib/glue/cache.rb +1 -1
- data/lib/glue/flexob.rb +12 -0
- data/lib/glue/hash.rb +1 -1
- data/lib/glue/inflector.rb +2 -2
- data/lib/glue/logger.rb +4 -8
- data/lib/glue/misc.rb +14 -0
- data/lib/glue/number.rb +1 -1
- data/lib/glue/object.rb +26 -0
- data/lib/glue/pool.rb +1 -1
- data/lib/glue/property.rb +84 -91
- data/lib/glue/string.rb +1 -1
- data/lib/glue/time.rb +1 -1
- data/lib/glue/validation.rb +1 -1
- data/lib/nitro.rb +18 -6
- data/lib/nitro/adaptors/cgi.rb +291 -0
- data/lib/nitro/adaptors/fastcgi.rb +42 -0
- data/lib/nitro/adaptors/runner.rb +123 -0
- data/lib/nitro/adaptors/webrick.rb +110 -0
- data/lib/nitro/buffering.rb +43 -0
- data/lib/nitro/builders/form.rb +1 -1
- data/lib/nitro/builders/rss.rb +1 -1
- data/{bin → lib/nitro}/cluster.rb +26 -30
- data/lib/nitro/context.rb +82 -0
- data/lib/nitro/controller.rb +50 -0
- data/lib/nitro/cookie.rb +46 -0
- data/lib/nitro/dispatcher.rb +105 -0
- data/lib/nitro/filters.rb +9 -10
- data/lib/nitro/localization.rb +42 -0
- data/lib/nitro/mail.rb +11 -14
- data/lib/nitro/render.rb +275 -0
- data/lib/nitro/request.rb +128 -0
- data/lib/nitro/response.rb +38 -0
- data/lib/nitro/scaffold.rb +11 -11
- data/lib/nitro/session.rb +84 -0
- data/lib/nitro/{server/shaders.rb → shaders.rb} +56 -36
- data/lib/nitro/ui/pager.rb +23 -26
- data/lib/nitro/{sitemap.rb → ui/sitemap.rb} +4 -12
- data/lib/nitro/uri.rb +1 -1
- data/lib/nitro/version.rb +10 -8
- data/lib/og.rb +66 -65
- data/lib/og/backend.rb +1 -1
- data/lib/og/backends/mysql.rb +48 -52
- data/lib/og/backends/psql.rb +34 -37
- data/lib/og/connection.rb +15 -15
- data/lib/og/enchant.rb +16 -9
- data/lib/og/meta.rb +127 -54
- data/lib/og/mock.rb +18 -18
- data/lib/og/version.rb +6 -4
- data/lib/parts/content.rb +4 -8
- data/test/glue/tc_logger.rb +3 -0
- data/test/glue/tc_property.rb +19 -3
- data/test/nitro/adaptors/tc_cgi.rb +63 -0
- data/test/nitro/adaptors/tc_webrick.rb +15 -0
- data/test/nitro/builders/tc_xml.rb +2 -2
- data/test/nitro/tc_context.rb +13 -0
- data/test/nitro/tc_controller.rb +47 -0
- data/test/nitro/tc_dispatcher.rb +64 -0
- data/test/nitro/tc_session.rb +20 -0
- data/test/nitro/{tc_sitemap.rb → ui/tc_sitemap.rb} +1 -1
- data/test/root/blog/list.xhtml +6 -0
- data/test/tc_og.rb +41 -4
- metadata +115 -59
- data/bin/proto/app.rb +0 -20
- data/bin/proto/config.rb +0 -77
- data/examples/blog/app.rb +0 -21
- data/examples/blog/config.rb +0 -95
- data/examples/blog/env.rb +0 -22
- data/examples/flash/README +0 -34
- data/examples/flash/app.rb +0 -20
- data/examples/flash/config.rb +0 -38
- data/examples/flash/lib/flash.rb +0 -40
- data/examples/flash/tmp.swf +0 -0
- data/examples/tiny/app.rb +0 -19
- data/examples/tiny/config.rb +0 -29
- data/examples/tiny/root/nitro-small.png +0 -0
- data/lib/nitro/application.rb +0 -217
- data/lib/nitro/config.rb +0 -128
- data/lib/nitro/events.rb +0 -122
- data/lib/nitro/html.rb +0 -151
- data/lib/nitro/http.rb +0 -102
- data/lib/nitro/l10n.rb +0 -30
- data/lib/nitro/server.rb +0 -59
- data/lib/nitro/server/appserver.rb +0 -67
- data/lib/nitro/server/cookie.rb +0 -87
- data/lib/nitro/server/dispatcher.rb +0 -62
- data/lib/nitro/server/filters.rb +0 -75
- data/lib/nitro/server/filters/autologin.rb +0 -51
- data/lib/nitro/server/fragment.rb +0 -70
- data/lib/nitro/server/handlers.rb +0 -127
- data/lib/nitro/server/render.rb +0 -426
- data/lib/nitro/server/request.rb +0 -658
- data/lib/nitro/server/requestpart.rb +0 -54
- data/lib/nitro/server/script.rb +0 -387
- data/lib/nitro/server/server.rb +0 -57
- data/lib/nitro/server/session.rb +0 -220
- data/lib/nitro/server/user.rb +0 -46
- data/lib/nitro/server/webrick.rb +0 -180
- data/lib/nitro/service.rb +0 -26
- data/lib/xsl/ui.xsl +0 -51
- data/lib/xsl/xforms.xsl +0 -28
- data/test/nitro/server/tc_cookie.rb +0 -34
- data/test/nitro/server/tc_filters.rb +0 -38
- data/test/nitro/server/tc_request.rb +0 -70
- data/test/nitro/server/tc_requestpart.rb +0 -28
- data/test/nitro/server/tc_session.rb +0 -34
- data/test/nitro/tc_events.rb +0 -44
- data/test/nitro/tc_html.rb +0 -79
- data/test/nitro/tc_http.rb +0 -18
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
# lighttpd configuration file
|
|
2
|
+
# $Id$
|
|
3
|
+
|
|
4
|
+
############ Options you really have to take care of ####################
|
|
5
|
+
|
|
6
|
+
## modules to load
|
|
7
|
+
# at least mod_access and mod_accesslog should be loaded
|
|
8
|
+
# all other module should only be loaded if really neccesary
|
|
9
|
+
# - saves some time
|
|
10
|
+
# - saves memory
|
|
11
|
+
|
|
12
|
+
server.modules = (
|
|
13
|
+
"mod_rewrite",
|
|
14
|
+
# "mod_redirect",
|
|
15
|
+
"mod_access",
|
|
16
|
+
# "mod_auth",
|
|
17
|
+
# "mod_status",
|
|
18
|
+
"mod_fastcgi",
|
|
19
|
+
# "mod_simple_vhost",
|
|
20
|
+
# "mod_evhost",
|
|
21
|
+
# "mod_cgi",
|
|
22
|
+
# "mod_compress",
|
|
23
|
+
# "mod_ssi",
|
|
24
|
+
# "mod_usertrack",
|
|
25
|
+
# "mod_rrdtool",
|
|
26
|
+
"mod_accesslog"
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
## a static document-root, for virtual-hosting take look at the
|
|
30
|
+
## server.virtual-* options
|
|
31
|
+
server.document-root = "/home/gmosx/navel/nitro/examples/blog/root/"
|
|
32
|
+
|
|
33
|
+
## where to send error-messages to
|
|
34
|
+
server.errorlog = "/home/gmosx/navel/nitro/examples/blog/log/lighttpd.error.log"
|
|
35
|
+
|
|
36
|
+
# files to check for if .../ is requested
|
|
37
|
+
server.indexfiles = ( "index.html" )
|
|
38
|
+
|
|
39
|
+
# mimetype mapping
|
|
40
|
+
mimetype.assign = (
|
|
41
|
+
".pdf" => "application/pdf",
|
|
42
|
+
".sig" => "application/pgp-signature",
|
|
43
|
+
".spl" => "application/futuresplash",
|
|
44
|
+
".class" => "application/octet-stream",
|
|
45
|
+
".ps" => "application/postscript",
|
|
46
|
+
".torrent" => "application/x-bittorrent",
|
|
47
|
+
".dvi" => "application/x-dvi",
|
|
48
|
+
".gz" => "application/x-gzip",
|
|
49
|
+
".pac" => "application/x-ns-proxy-autoconfig",
|
|
50
|
+
".swf" => "application/x-shockwave-flash",
|
|
51
|
+
".tar.gz" => "application/x-tgz",
|
|
52
|
+
".tgz" => "application/x-tgz",
|
|
53
|
+
".tar" => "application/x-tar",
|
|
54
|
+
".zip" => "application/zip",
|
|
55
|
+
".mp3" => "audio/mpeg",
|
|
56
|
+
".m3u" => "audio/x-mpegurl",
|
|
57
|
+
".wma" => "audio/x-ms-wma",
|
|
58
|
+
".wax" => "audio/x-ms-wax",
|
|
59
|
+
".ogg" => "audio/x-wav",
|
|
60
|
+
".wav" => "audio/x-wav",
|
|
61
|
+
".gif" => "image/gif",
|
|
62
|
+
".jpg" => "image/jpeg",
|
|
63
|
+
".jpeg" => "image/jpeg",
|
|
64
|
+
".png" => "image/png",
|
|
65
|
+
".xbm" => "image/x-xbitmap",
|
|
66
|
+
".xpm" => "image/x-xpixmap",
|
|
67
|
+
".xwd" => "image/x-xwindowdump",
|
|
68
|
+
".css" => "text/css",
|
|
69
|
+
".html" => "text/html",
|
|
70
|
+
".htm" => "text/html",
|
|
71
|
+
".js" => "text/javascript",
|
|
72
|
+
".asc" => "text/plain",
|
|
73
|
+
".c" => "text/plain",
|
|
74
|
+
".conf" => "text/plain",
|
|
75
|
+
".text" => "text/plain",
|
|
76
|
+
".txt" => "text/plain",
|
|
77
|
+
".dtd" => "text/xml",
|
|
78
|
+
".xml" => "text/xml",
|
|
79
|
+
".mpeg" => "video/mpeg",
|
|
80
|
+
".mpg" => "video/mpeg",
|
|
81
|
+
".mov" => "video/quicktime",
|
|
82
|
+
".qt" => "video/quicktime",
|
|
83
|
+
".avi" => "video/x-msvideo",
|
|
84
|
+
".asf" => "video/x-ms-asf",
|
|
85
|
+
".asx" => "video/x-ms-asf",
|
|
86
|
+
".wmv" => "video/x-ms-wmv"
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
# Use the "Content-Type" extended attribute to obtain mime type if possible
|
|
90
|
+
# mimetypes.use-xattr = "enable"
|
|
91
|
+
|
|
92
|
+
#### accesslog module
|
|
93
|
+
accesslog.filename = "/home/gmosx/navel/nitro/examples/blog/log/access.log"
|
|
94
|
+
|
|
95
|
+
## deny access the file-extensions
|
|
96
|
+
#
|
|
97
|
+
# ~ is for backupfiles from vi, emacs, joe, ...
|
|
98
|
+
# .inc is often used for code includes which should in general not be part
|
|
99
|
+
# of the document-root
|
|
100
|
+
url.access-deny = ( "~", ".inc" )
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
######### Options that are good to be but not neccesary to be changed #######
|
|
105
|
+
|
|
106
|
+
## bind to port (default: 80)
|
|
107
|
+
server.port = 8080
|
|
108
|
+
|
|
109
|
+
## bind to localhost (default: all interfaces)
|
|
110
|
+
#server.bind = "grisu.home.kneschke.de"
|
|
111
|
+
|
|
112
|
+
## error-handler for status 404
|
|
113
|
+
#server.error-handler-404 = "/error-handler.html"
|
|
114
|
+
#server.error-handler-404 = "/error-handler.php"
|
|
115
|
+
|
|
116
|
+
## to help the rc.scripts
|
|
117
|
+
# server.pid-file = "/var/run/lighttpd.pid"
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
###### virtual hosts
|
|
121
|
+
##
|
|
122
|
+
## If you want name-based virtual hosting add the next three settings and load
|
|
123
|
+
## mod_simple_vhost
|
|
124
|
+
##
|
|
125
|
+
## document-root =
|
|
126
|
+
## virtual-server-root + virtual-server-default-host + virtual-server-docroot or
|
|
127
|
+
## virtual-server-root + http-host + virtual-server-docroot
|
|
128
|
+
##
|
|
129
|
+
#simple-vhost.server-root = "/home/weigon/wwwroot/servers/"
|
|
130
|
+
#simple-vhost.default-host = "grisu.home.kneschke.de"
|
|
131
|
+
#simple-vhost.document-root = "/pages/"
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
##
|
|
135
|
+
## Format: <errorfile-prefix><status>.html
|
|
136
|
+
## -> ..../status-404.html for 'File not found'
|
|
137
|
+
#server.errorfile-prefix = "/home/weigon/projects/lighttpd/doc/status-"
|
|
138
|
+
|
|
139
|
+
## virtual directory listings
|
|
140
|
+
#server.dir-listing = "enable"
|
|
141
|
+
|
|
142
|
+
## send unhandled HTTP-header headers to error-log
|
|
143
|
+
#debug.dump-unknown-headers = "enable"
|
|
144
|
+
|
|
145
|
+
### only root can use these options
|
|
146
|
+
#
|
|
147
|
+
# chroot() to directory (default: no chroot() )
|
|
148
|
+
#server.chroot = "/"
|
|
149
|
+
|
|
150
|
+
## change uid to <uid> (default: don't care)
|
|
151
|
+
#server.username = "wwwrun"
|
|
152
|
+
|
|
153
|
+
## change uid to <uid> (default: don't care)
|
|
154
|
+
#server.groupname = "wwwrun"
|
|
155
|
+
|
|
156
|
+
#### compress module
|
|
157
|
+
#compress.cache-dir = "/tmp/lighttpd/cache/compress/"
|
|
158
|
+
#compress.filetype = ("text/plain", "text/html")
|
|
159
|
+
|
|
160
|
+
#### fastcgi module
|
|
161
|
+
## read fastcgi.txt for more info
|
|
162
|
+
fastcgi.server = ( ".rb" =>
|
|
163
|
+
( "localhost" =>
|
|
164
|
+
(
|
|
165
|
+
"socket" => "/tmp/nitro-fcgi.socket",
|
|
166
|
+
"bin-path" => "/home/gmosx/navel/nitro/examples/blog/root/fcgi.rb"
|
|
167
|
+
)
|
|
168
|
+
)
|
|
169
|
+
)
|
|
170
|
+
|
|
171
|
+
#### CGI module
|
|
172
|
+
#cgi.assign = ( ".pl" => "/usr/bin/perl",
|
|
173
|
+
# ".cgi" => "/usr/bin/perl" )
|
|
174
|
+
#
|
|
175
|
+
|
|
176
|
+
#### SSL engine
|
|
177
|
+
#ssl.engine = "enable"
|
|
178
|
+
#ssl.pemfile = "server.pem"
|
|
179
|
+
|
|
180
|
+
#### status module
|
|
181
|
+
# status.status-url = "/server-status"
|
|
182
|
+
# status.config-url = "/server-config"
|
|
183
|
+
|
|
184
|
+
#### auth module
|
|
185
|
+
## read authentification.txt for more info
|
|
186
|
+
# auth.backend = "plain"
|
|
187
|
+
# auth.backend.plain.userfile = "lighttpd.user"
|
|
188
|
+
# auth.backend.plain.groupfile = "lighttpd.group"
|
|
189
|
+
|
|
190
|
+
# auth.backend.ldap.hostname = "localhost"
|
|
191
|
+
# auth.backend.ldap.base-dn = "dc=my-domain,dc=com"
|
|
192
|
+
# auth.backend.ldap.filter = "(uid=$)"
|
|
193
|
+
|
|
194
|
+
# auth.require = ( "/server-status" =>
|
|
195
|
+
# (
|
|
196
|
+
# "method" => "digest",
|
|
197
|
+
# "realm" => "download archiv",
|
|
198
|
+
# "require" => "group=www|user=jan|host=192.168.2.10"
|
|
199
|
+
# ),
|
|
200
|
+
# "/server-info" =>
|
|
201
|
+
# (
|
|
202
|
+
# "method" => "digest",
|
|
203
|
+
# "realm" => "download archiv",
|
|
204
|
+
# "require" => "group=www|user=jan|host=192.168.2.10"
|
|
205
|
+
# )
|
|
206
|
+
# )
|
|
207
|
+
|
|
208
|
+
#### url handling modules (rewrite, redirect, access)
|
|
209
|
+
|
|
210
|
+
url.rewrite = (
|
|
211
|
+
"^/([\/\-_a-zA-Z0-9]+)?$" => "/fcgi.rb",
|
|
212
|
+
"^/([\/\-_a-zA-Z0-9]+)?\?([\-_a-zA-Z0-9=;&%]*)$" => "/fcgi.rb?$2"
|
|
213
|
+
)
|
|
214
|
+
|
|
215
|
+
# url.redirect = ( "^/wishlist/(.+)" => "http://www.123.org/$1" )
|
|
216
|
+
|
|
217
|
+
#
|
|
218
|
+
# define a pattern for the host url finding
|
|
219
|
+
# %% => % sign
|
|
220
|
+
# %0 => domain name + tld
|
|
221
|
+
# %1 => tld
|
|
222
|
+
# %2 => domain name without tld
|
|
223
|
+
# %3 => subdomain 1 name
|
|
224
|
+
# %4 => subdomain 2 name
|
|
225
|
+
#
|
|
226
|
+
# evhost.path-pattern = "/home/storage/dev/www/%3/htdocs/"
|
|
227
|
+
|
|
228
|
+
#### expire module
|
|
229
|
+
# expire.url = ( "/buggy/" => "access 2 hours", "/asdhas/" => "access plus 1 seconds 2 minutes")
|
|
230
|
+
|
|
231
|
+
#### ssi
|
|
232
|
+
# ssi.extension = ( ".shtml" )
|
|
233
|
+
|
|
234
|
+
#### rrdtool
|
|
235
|
+
# rrdtool.binary = "/usr/bin/rrdtool"
|
|
236
|
+
# rrdtool.db-name = "/var/www/lighttpd.rrd"
|
data/examples/blog/ctl
ADDED
data/examples/blog/lib/blog.rb
CHANGED
|
@@ -1,145 +1,20 @@
|
|
|
1
|
-
# George Moschovitis <gm@navel.gr>
|
|
2
|
-
#
|
|
3
|
-
#
|
|
4
|
-
# $Id: blog.rb 185 2004-12-10 13:29:09Z gmosx $
|
|
1
|
+
# * George Moschovitis <gm@navel.gr>
|
|
2
|
+
# (c) 2004-2005 Navel, all rights reserved.
|
|
3
|
+
# $Id: blog.rb 223 2005-01-26 17:07:40Z gmosx $
|
|
5
4
|
|
|
6
|
-
|
|
7
|
-
require 'nitro/builders/rss'
|
|
8
|
-
require 'nitro/ui/pager'
|
|
5
|
+
# A simple blog to demonstrate the power of Nitro.
|
|
9
6
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
$blog_username = 'George Moschovitis'
|
|
13
|
-
$blog_password = 'mypassword'
|
|
14
|
-
|
|
15
|
-
module N
|
|
16
|
-
|
|
17
|
-
# = Common
|
|
18
|
-
#
|
|
19
|
-
# Common properties/methods for the other classes.
|
|
20
|
-
# Since markup is required, automatically handles
|
|
21
|
-
# the markup expanding/compacting for the body.
|
|
22
|
-
|
|
23
|
-
module Common
|
|
24
|
-
include N::BaseContent
|
|
25
|
-
include N::CreateTime
|
|
26
|
-
|
|
27
|
-
prop_accessor :author, String
|
|
28
|
-
validate_value :body
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
# Forward reference to the Comment definition.
|
|
33
|
-
|
|
34
|
-
class Comment; end
|
|
35
|
-
|
|
36
|
-
# = BlogEntry
|
|
37
|
-
|
|
38
|
-
class BlogEntry
|
|
39
|
-
include N::Common
|
|
40
|
-
has_many :comments, N::Comment, :linkback => 'entry_oid'
|
|
41
|
-
validate_value :title, :msg => 'Please provide a title'
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
# = Comment
|
|
45
|
-
|
|
46
|
-
class Comment
|
|
47
|
-
include N::Common
|
|
48
|
-
belongs_to :entry, N::BlogEntry
|
|
49
|
-
validate_value :author, :msg => 'Please enter your name'
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
# = BlogService
|
|
53
|
-
#
|
|
54
|
-
# Implements the Blog service. This encapsulates
|
|
55
|
-
# the action controller.
|
|
56
|
-
|
|
57
|
-
class BlogService < N::Service
|
|
58
|
-
SOURCE_FILE = __FILE__
|
|
59
|
-
|
|
60
|
-
before_filter :get_errors
|
|
61
|
-
# after_filter :cache
|
|
62
|
-
|
|
63
|
-
scaffold N::BlogEntry, :name => 'entry', :index => true
|
|
64
|
-
scaffold N::Comment
|
|
65
|
-
|
|
66
|
-
def list_entry
|
|
67
|
-
@pager = N::UI::Pager.new('entries', @request, 3)
|
|
68
|
-
@entries = N::BlogEntry.all("ORDER BY oid DESC #{@pager.sql_limit}")
|
|
69
|
-
@pager.set(N::BlogEntry.count)
|
|
70
|
-
|
|
71
|
-
puts N::Common.__meta[:validations]
|
|
72
|
-
end
|
|
7
|
+
class Blog
|
|
73
8
|
|
|
74
|
-
|
|
75
|
-
entry = request.fill(N::BlogEntry.new)
|
|
76
|
-
entry.author = session['username']
|
|
77
|
-
|
|
78
|
-
unless entry.valid?
|
|
79
|
-
session[:errors] = entry.errors
|
|
80
|
-
redirect_referer '#new_entry'
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
entry.save!
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
# example of generated view
|
|
87
|
-
def list_entry__xml
|
|
88
|
-
@out << N::RssBuilder.render(@entries)
|
|
89
|
-
end
|
|
9
|
+
# The administrator username.
|
|
90
10
|
|
|
91
|
-
|
|
92
|
-
comment = request.fill(N::Comment.new)
|
|
11
|
+
cattr_accessor :username, 'George Moschovitis'
|
|
93
12
|
|
|
94
|
-
|
|
95
|
-
session[:errors] = comment.errors
|
|
96
|
-
redirect_referer '#new_comment'
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
comment.save!
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
# example of generated view
|
|
103
|
-
def list_comment__xml
|
|
104
|
-
@out << N::RssBuilder.render(@comments)
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
def login
|
|
108
|
-
if password = params['password']
|
|
109
|
-
if password == $blog_password
|
|
110
|
-
session['owner'] = true
|
|
111
|
-
session['username'] = $blog_username
|
|
112
|
-
redirect '/'
|
|
113
|
-
else
|
|
114
|
-
@error = 'Invalid password'
|
|
115
|
-
end
|
|
116
|
-
end
|
|
117
|
-
end
|
|
13
|
+
# The administrator password.
|
|
118
14
|
|
|
119
|
-
|
|
120
|
-
session['owner'] = session['username'] = nil
|
|
121
|
-
end
|
|
122
|
-
|
|
123
|
-
private
|
|
124
|
-
|
|
125
|
-
# A helper prefilter, autocleans session errors.
|
|
126
|
-
# Used as an example.
|
|
127
|
-
|
|
128
|
-
def get_errors
|
|
129
|
-
# gmosx: should better implement top-level filters!
|
|
130
|
-
if errors = session.delete(:errors)
|
|
131
|
-
@errors = errors
|
|
132
|
-
end
|
|
133
|
-
end
|
|
134
|
-
|
|
135
|
-
# Just an example
|
|
136
|
-
|
|
137
|
-
def cache
|
|
138
|
-
# Call the automatically configured logger.
|
|
139
|
-
|
|
140
|
-
Logger.info "cache (after filter example)"
|
|
141
|
-
end
|
|
15
|
+
cattr_accessor :password, 'mypassword'
|
|
142
16
|
|
|
143
17
|
end
|
|
144
18
|
|
|
145
|
-
|
|
19
|
+
require 'blog/model'
|
|
20
|
+
require 'blog/controller'
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# * George Moschovitis <gm@navel.gr>
|
|
2
|
+
# (c) 2004-2005 Navel, all rights reserved.
|
|
3
|
+
# $Id$
|
|
4
|
+
|
|
5
|
+
require 'nitro/controller'
|
|
6
|
+
require 'nitro/builders/rss'
|
|
7
|
+
require 'nitro/ui/pager'
|
|
8
|
+
|
|
9
|
+
require 'blog/model'
|
|
10
|
+
|
|
11
|
+
# The controller of the Blog part.
|
|
12
|
+
|
|
13
|
+
class BlogController < N::Controller
|
|
14
|
+
|
|
15
|
+
before_filter :get_errors
|
|
16
|
+
# after_filter :cache
|
|
17
|
+
|
|
18
|
+
scaffold BlogEntry, :name => 'entry', :index => true
|
|
19
|
+
scaffold Comment
|
|
20
|
+
|
|
21
|
+
def list_entry
|
|
22
|
+
@pager = UI::Pager.new('entries', context, 3)
|
|
23
|
+
@entries = BlogEntry.all("ORDER BY oid DESC #{@pager.sql_limit}")
|
|
24
|
+
@pager.set(BlogEntry.count)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def new_entry
|
|
28
|
+
entry = context.fill(BlogEntry.new)
|
|
29
|
+
entry.author = session[:username]
|
|
30
|
+
|
|
31
|
+
unless entry.valid?
|
|
32
|
+
session[:errors] = entry.errors
|
|
33
|
+
redirect_referer '#new_entry'
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
entry.save!
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# example of generated view
|
|
40
|
+
|
|
41
|
+
def list_entry__xml
|
|
42
|
+
@out << RssBuilder.render(@entries)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def new_comment
|
|
46
|
+
comment = context.fill(Comment.new)
|
|
47
|
+
|
|
48
|
+
unless comment.valid?
|
|
49
|
+
session[:errors] = comment.errors
|
|
50
|
+
redirect_referer '#new_comment'
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
comment.save!
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# example of generated view
|
|
57
|
+
|
|
58
|
+
def list_comment__xml
|
|
59
|
+
@out << RssBuilder.render(@comments)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def login
|
|
63
|
+
if password = context['password']
|
|
64
|
+
if password == Blog.password
|
|
65
|
+
session[:owner] = true
|
|
66
|
+
session[:username] = Blog.username
|
|
67
|
+
redirect '/'
|
|
68
|
+
else
|
|
69
|
+
@error = 'Invalid password'
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def logout
|
|
75
|
+
session.delete(:owner)
|
|
76
|
+
session.delete(:username)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
private
|
|
80
|
+
|
|
81
|
+
# A helper prefilter, autocleans session errors.
|
|
82
|
+
# Used as an example.
|
|
83
|
+
|
|
84
|
+
def get_errors
|
|
85
|
+
# gmosx: should better implement top-level filters!
|
|
86
|
+
if errors = session.delete(:errors)
|
|
87
|
+
@errors = errors
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
# Just an example.
|
|
92
|
+
|
|
93
|
+
def cache
|
|
94
|
+
# Call the automatically configured logger.
|
|
95
|
+
|
|
96
|
+
Logger.info "cache (after filter example)"
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
end
|