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.
Files changed (198) hide show
  1. data/AUTHORS +3 -4
  2. data/ChangeLog +418 -0
  3. data/LICENSE +1 -1
  4. data/README +157 -89
  5. data/RELEASES +50 -0
  6. data/Rakefile +5 -7
  7. data/benchmark/nitro/bench.rb +5 -0
  8. data/benchmark/nitro/simple-webrick-n-200.txt +44 -0
  9. data/benchmark/nitro/static-webrick-n-200.txt +43 -0
  10. data/benchmark/nitro/tiny-lhttpd-n-200-c-5.txt +43 -0
  11. data/benchmark/nitro/tiny-webrick-n-200-c-5.txt +44 -0
  12. data/benchmark/nitro/tiny-webrick-n-200.txt +44 -0
  13. data/benchmark/nitro/tiny2-webrick-n-200.txt +44 -0
  14. data/{lib/nitro/server/cluster.rb → bin/cluster} +26 -30
  15. data/bin/proto/README +2 -2
  16. data/bin/proto/{apache.conf → conf/apache.conf} +0 -0
  17. data/bin/proto/conf/app.conf.rb +22 -0
  18. data/bin/proto/conf/lhttpd.conf +236 -0
  19. data/bin/proto/ctl +4 -0
  20. data/bin/proto/lib/README +5 -0
  21. data/bin/proto/log/README +3 -0
  22. data/bin/proto/root/fcgi.rb +6 -0
  23. data/bin/proto/root/index.xhtml +65 -7
  24. data/bin/proto/root/m/nitro.png +0 -0
  25. data/examples/blog/README +7 -5
  26. data/examples/blog/{apache.conf → conf/apache.conf} +0 -0
  27. data/examples/blog/conf/app.conf.rb +56 -0
  28. data/examples/blog/conf/lhttpd.conf +236 -0
  29. data/examples/blog/ctl +4 -0
  30. data/examples/blog/lib/blog.rb +11 -136
  31. data/examples/blog/lib/blog/controller.rb +99 -0
  32. data/examples/blog/lib/blog/model.rb +39 -0
  33. data/examples/blog/log/README +3 -0
  34. data/examples/blog/root/comments.xhtml +2 -2
  35. data/examples/blog/root/fcgi.rb +6 -0
  36. data/examples/blog/root/index.xhtml +4 -5
  37. data/examples/blog/root/login.xhtml +2 -2
  38. data/examples/blog/root/style.xsl +9 -9
  39. data/examples/blog/root/view_entry.xhtml +2 -2
  40. data/examples/flash/conf/app.conf.rb +23 -0
  41. data/examples/flash/ctl +4 -0
  42. data/examples/flash/log/README +3 -0
  43. data/examples/flash/root/index.xhtml +0 -9
  44. data/examples/flash/root/show_inline_text.xhtml +10 -5
  45. data/examples/no_xsl_blog/README +12 -0
  46. data/examples/no_xsl_blog/conf/apache.conf +0 -0
  47. data/examples/no_xsl_blog/conf/app.conf.rb +57 -0
  48. data/examples/no_xsl_blog/conf/lhttpd.conf +236 -0
  49. data/examples/no_xsl_blog/ctl +4 -0
  50. data/examples/no_xsl_blog/lib/blog.rb +20 -0
  51. data/examples/no_xsl_blog/lib/blog/controller.rb +102 -0
  52. data/examples/no_xsl_blog/lib/blog/model.rb +39 -0
  53. data/examples/no_xsl_blog/lib/blog/template.rb +134 -0
  54. data/examples/no_xsl_blog/log/README +3 -0
  55. data/examples/no_xsl_blog/root/comments.xhtml +41 -0
  56. data/examples/no_xsl_blog/root/entry_form.xhtml +22 -0
  57. data/examples/no_xsl_blog/root/fcgi.rb +6 -0
  58. data/examples/no_xsl_blog/root/index.xhtml +39 -0
  59. data/examples/no_xsl_blog/root/login.xhtml +21 -0
  60. data/examples/no_xsl_blog/root/m/bubbles.gif +0 -0
  61. data/examples/no_xsl_blog/root/m/comments_curve.gif +0 -0
  62. data/examples/no_xsl_blog/root/m/down.gif +0 -0
  63. data/examples/no_xsl_blog/root/m/footer_bg.gif +0 -0
  64. data/examples/no_xsl_blog/root/m/garrow.gif +0 -0
  65. data/examples/no_xsl_blog/root/m/gbull.gif +0 -0
  66. data/examples/no_xsl_blog/root/m/grbull.gif +0 -0
  67. data/examples/no_xsl_blog/root/m/h1_bg.gif +0 -0
  68. data/examples/no_xsl_blog/root/m/header_bg.gif +0 -0
  69. data/examples/no_xsl_blog/root/m/nitro.gif +0 -0
  70. data/examples/no_xsl_blog/root/m/obull.gif +0 -0
  71. data/examples/no_xsl_blog/root/m/page_bg.gif +0 -0
  72. data/examples/no_xsl_blog/root/m/rss.gif +0 -0
  73. data/examples/no_xsl_blog/root/m/side_title_bg.gif +0 -0
  74. data/examples/no_xsl_blog/root/m/sidebar_bg.gif +0 -0
  75. data/examples/no_xsl_blog/root/recent_posts.xhtml +14 -0
  76. data/examples/no_xsl_blog/root/style.css +301 -0
  77. data/examples/no_xsl_blog/root/view_entry.xhtml +25 -0
  78. data/examples/no_xsl_blog/root/view_entry.xml +12 -0
  79. data/examples/og/run.rb +2 -2
  80. data/examples/tiny/README +2 -2
  81. data/examples/tiny/conf/apache.conf +5 -0
  82. data/examples/tiny/conf/app.conf.rb +21 -0
  83. data/examples/tiny/conf/lhttpd.conf +236 -0
  84. data/examples/tiny/ctl +4 -0
  85. data/examples/tiny/log/README +3 -0
  86. data/examples/tiny/root/fcgi.rb +6 -0
  87. data/examples/tiny/root/index.xhtml +7 -4
  88. data/examples/tiny/root/nitro.png +0 -0
  89. data/lib/glue.rb +13 -9
  90. data/lib/glue/array.rb +1 -1
  91. data/lib/glue/cache.rb +1 -1
  92. data/lib/glue/flexob.rb +12 -0
  93. data/lib/glue/hash.rb +1 -1
  94. data/lib/glue/inflector.rb +2 -2
  95. data/lib/glue/logger.rb +4 -8
  96. data/lib/glue/misc.rb +14 -0
  97. data/lib/glue/number.rb +1 -1
  98. data/lib/glue/object.rb +26 -0
  99. data/lib/glue/pool.rb +1 -1
  100. data/lib/glue/property.rb +84 -91
  101. data/lib/glue/string.rb +1 -1
  102. data/lib/glue/time.rb +1 -1
  103. data/lib/glue/validation.rb +1 -1
  104. data/lib/nitro.rb +18 -6
  105. data/lib/nitro/adaptors/cgi.rb +291 -0
  106. data/lib/nitro/adaptors/fastcgi.rb +42 -0
  107. data/lib/nitro/adaptors/runner.rb +123 -0
  108. data/lib/nitro/adaptors/webrick.rb +110 -0
  109. data/lib/nitro/buffering.rb +43 -0
  110. data/lib/nitro/builders/form.rb +1 -1
  111. data/lib/nitro/builders/rss.rb +1 -1
  112. data/{bin → lib/nitro}/cluster.rb +26 -30
  113. data/lib/nitro/context.rb +82 -0
  114. data/lib/nitro/controller.rb +50 -0
  115. data/lib/nitro/cookie.rb +46 -0
  116. data/lib/nitro/dispatcher.rb +105 -0
  117. data/lib/nitro/filters.rb +9 -10
  118. data/lib/nitro/localization.rb +42 -0
  119. data/lib/nitro/mail.rb +11 -14
  120. data/lib/nitro/render.rb +275 -0
  121. data/lib/nitro/request.rb +128 -0
  122. data/lib/nitro/response.rb +38 -0
  123. data/lib/nitro/scaffold.rb +11 -11
  124. data/lib/nitro/session.rb +84 -0
  125. data/lib/nitro/{server/shaders.rb → shaders.rb} +56 -36
  126. data/lib/nitro/ui/pager.rb +23 -26
  127. data/lib/nitro/{sitemap.rb → ui/sitemap.rb} +4 -12
  128. data/lib/nitro/uri.rb +1 -1
  129. data/lib/nitro/version.rb +10 -8
  130. data/lib/og.rb +66 -65
  131. data/lib/og/backend.rb +1 -1
  132. data/lib/og/backends/mysql.rb +48 -52
  133. data/lib/og/backends/psql.rb +34 -37
  134. data/lib/og/connection.rb +15 -15
  135. data/lib/og/enchant.rb +16 -9
  136. data/lib/og/meta.rb +127 -54
  137. data/lib/og/mock.rb +18 -18
  138. data/lib/og/version.rb +6 -4
  139. data/lib/parts/content.rb +4 -8
  140. data/test/glue/tc_logger.rb +3 -0
  141. data/test/glue/tc_property.rb +19 -3
  142. data/test/nitro/adaptors/tc_cgi.rb +63 -0
  143. data/test/nitro/adaptors/tc_webrick.rb +15 -0
  144. data/test/nitro/builders/tc_xml.rb +2 -2
  145. data/test/nitro/tc_context.rb +13 -0
  146. data/test/nitro/tc_controller.rb +47 -0
  147. data/test/nitro/tc_dispatcher.rb +64 -0
  148. data/test/nitro/tc_session.rb +20 -0
  149. data/test/nitro/{tc_sitemap.rb → ui/tc_sitemap.rb} +1 -1
  150. data/test/root/blog/list.xhtml +6 -0
  151. data/test/tc_og.rb +41 -4
  152. metadata +115 -59
  153. data/bin/proto/app.rb +0 -20
  154. data/bin/proto/config.rb +0 -77
  155. data/examples/blog/app.rb +0 -21
  156. data/examples/blog/config.rb +0 -95
  157. data/examples/blog/env.rb +0 -22
  158. data/examples/flash/README +0 -34
  159. data/examples/flash/app.rb +0 -20
  160. data/examples/flash/config.rb +0 -38
  161. data/examples/flash/lib/flash.rb +0 -40
  162. data/examples/flash/tmp.swf +0 -0
  163. data/examples/tiny/app.rb +0 -19
  164. data/examples/tiny/config.rb +0 -29
  165. data/examples/tiny/root/nitro-small.png +0 -0
  166. data/lib/nitro/application.rb +0 -217
  167. data/lib/nitro/config.rb +0 -128
  168. data/lib/nitro/events.rb +0 -122
  169. data/lib/nitro/html.rb +0 -151
  170. data/lib/nitro/http.rb +0 -102
  171. data/lib/nitro/l10n.rb +0 -30
  172. data/lib/nitro/server.rb +0 -59
  173. data/lib/nitro/server/appserver.rb +0 -67
  174. data/lib/nitro/server/cookie.rb +0 -87
  175. data/lib/nitro/server/dispatcher.rb +0 -62
  176. data/lib/nitro/server/filters.rb +0 -75
  177. data/lib/nitro/server/filters/autologin.rb +0 -51
  178. data/lib/nitro/server/fragment.rb +0 -70
  179. data/lib/nitro/server/handlers.rb +0 -127
  180. data/lib/nitro/server/render.rb +0 -426
  181. data/lib/nitro/server/request.rb +0 -658
  182. data/lib/nitro/server/requestpart.rb +0 -54
  183. data/lib/nitro/server/script.rb +0 -387
  184. data/lib/nitro/server/server.rb +0 -57
  185. data/lib/nitro/server/session.rb +0 -220
  186. data/lib/nitro/server/user.rb +0 -46
  187. data/lib/nitro/server/webrick.rb +0 -180
  188. data/lib/nitro/service.rb +0 -26
  189. data/lib/xsl/ui.xsl +0 -51
  190. data/lib/xsl/xforms.xsl +0 -28
  191. data/test/nitro/server/tc_cookie.rb +0 -34
  192. data/test/nitro/server/tc_filters.rb +0 -38
  193. data/test/nitro/server/tc_request.rb +0 -70
  194. data/test/nitro/server/tc_requestpart.rb +0 -28
  195. data/test/nitro/server/tc_session.rb +0 -34
  196. data/test/nitro/tc_events.rb +0 -44
  197. data/test/nitro/tc_html.rb +0 -79
  198. 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"
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift File.join(File.dirname(__FILE__), '..', '..', 'lib')
4
+ require 'nitro/adaptors/runner'
@@ -1,145 +1,20 @@
1
- # George Moschovitis <gm@navel.gr>
2
- #
3
- # (c) 2004 Navel, all rights reserved.
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
- require 'nitro/service'
7
- require 'nitro/builders/rss'
8
- require 'nitro/ui/pager'
5
+ # A simple blog to demonstrate the power of Nitro.
9
6
 
10
- require 'parts/content'
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
- def new_entry
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
- def new_comment
92
- comment = request.fill(N::Comment.new)
11
+ cattr_accessor :username, 'George Moschovitis'
93
12
 
94
- unless comment.valid?
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
- def logout
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
- end
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