nitro 0.8.0 → 0.9.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|