nitro 0.17.0 → 0.18.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (161) hide show
  1. data/CHANGELOG +124 -0
  2. data/README +2 -2
  3. data/Rakefile +4 -12
  4. data/bin/nitro +1 -1
  5. data/bin/nitrogen +47 -31
  6. data/doc/AUTHORS +3 -3
  7. data/doc/RELEASES +50 -1
  8. data/examples/README +7 -0
  9. data/lib/nitro.rb +5 -4
  10. data/lib/nitro/{adapters → adapter}/cgi.rb +2 -4
  11. data/lib/nitro/{adapters → adapter}/fastcgi.rb +1 -1
  12. data/lib/nitro/{adapters → adapter}/webrick.rb +5 -10
  13. data/lib/nitro/buffering.rb +6 -0
  14. data/lib/nitro/{builders → builder}/atom.rb +1 -5
  15. data/lib/nitro/{builders → builder}/form.rb +1 -5
  16. data/lib/nitro/{builders → builder}/rss.rb +3 -1
  17. data/lib/nitro/{builders → builder}/table.rb +2 -4
  18. data/lib/nitro/{builders → builder}/xhtml.rb +3 -5
  19. data/lib/nitro/{builders → builder}/xml.rb +2 -4
  20. data/lib/nitro/caching.rb +6 -4
  21. data/lib/nitro/caching/output.rb +18 -11
  22. data/lib/nitro/context.rb +3 -1
  23. data/lib/nitro/controller.rb +29 -18
  24. data/lib/nitro/dispatcher.rb +2 -4
  25. data/lib/nitro/element.rb +2 -0
  26. data/lib/nitro/environment.rb +2 -4
  27. data/lib/nitro/errors.rb +69 -0
  28. data/lib/nitro/mail.rb +2 -4
  29. data/lib/nitro/markup.rb +20 -3
  30. data/lib/nitro/output.rb +5 -9
  31. data/lib/nitro/part.rb +2 -3
  32. data/lib/nitro/render.rb +49 -30
  33. data/lib/nitro/request.rb +2 -1
  34. data/lib/nitro/runner.rb +23 -12
  35. data/lib/nitro/scaffold.rb +5 -3
  36. data/lib/nitro/service.rb +22 -0
  37. data/lib/nitro/service/xmlrpc.rb +42 -0
  38. data/lib/nitro/session.rb +2 -4
  39. data/lib/nitro/template.rb +8 -10
  40. data/lib/nitro/testing.rb +0 -4
  41. data/proto/public/error.xhtml +27 -2
  42. data/test/nitro/{adapters → adapter}/raw_post1.bin +0 -0
  43. data/test/nitro/{adapters → adapter}/tc_cgi.rb +1 -1
  44. data/test/nitro/{adapters → adapter}/tc_webrick.rb +1 -1
  45. data/test/nitro/{builders → builder}/tc_atom.rb +1 -1
  46. data/test/nitro/{builders → builder}/tc_rss.rb +1 -1
  47. data/test/nitro/{builders → builder}/tc_table.rb +1 -1
  48. data/test/nitro/{builders → builder}/tc_xhtml.rb +1 -1
  49. data/test/nitro/{builders → builder}/tc_xml.rb +1 -1
  50. data/test/nitro/tc_caching.rb +18 -0
  51. data/test/nitro/tc_controller.rb +1 -1
  52. data/test/nitro/tc_mail.rb +3 -1
  53. metadata +33 -168
  54. data/examples/README.windows +0 -9
  55. data/examples/ajax/controller.rb +0 -21
  56. data/examples/ajax/public/index.xhtml +0 -72
  57. data/examples/ajax/public/js/ajax.js +0 -64
  58. data/examples/ajax/run.rb +0 -14
  59. data/examples/blog/README +0 -70
  60. data/examples/blog/conf/apache.conf +0 -30
  61. data/examples/blog/conf/apache.conf.new +0 -53
  62. data/examples/blog/conf/lhttpd.conf +0 -79
  63. data/examples/blog/conf/locales/de.yml +0 -4
  64. data/examples/blog/conf/locales/en.yml +0 -4
  65. data/examples/blog/log/README +0 -3
  66. data/examples/blog/log/apache.error_log +0 -6647
  67. data/examples/blog/log/rewrite_log +0 -161
  68. data/examples/blog/public/base.xsl +0 -153
  69. data/examples/blog/public/fcgi.rb +0 -5
  70. data/examples/blog/public/m/bubbles.gif +0 -0
  71. data/examples/blog/public/m/comments_curve.gif +0 -0
  72. data/examples/blog/public/m/down.gif +0 -0
  73. data/examples/blog/public/m/footer_bg.gif +0 -0
  74. data/examples/blog/public/m/garrow.gif +0 -0
  75. data/examples/blog/public/m/gbull.gif +0 -0
  76. data/examples/blog/public/m/grbull.gif +0 -0
  77. data/examples/blog/public/m/h1_bg.gif +0 -0
  78. data/examples/blog/public/m/header_bg.gif +0 -0
  79. data/examples/blog/public/m/nitro.gif +0 -0
  80. data/examples/blog/public/m/obull.gif +0 -0
  81. data/examples/blog/public/m/page_bg.gif +0 -0
  82. data/examples/blog/public/m/rss.gif +0 -0
  83. data/examples/blog/public/m/side_title_bg.gif +0 -0
  84. data/examples/blog/public/m/sidebar_bg.gif +0 -0
  85. data/examples/blog/public/style.css +0 -305
  86. data/examples/blog/run.rb +0 -43
  87. data/examples/blog/src/blog.rb +0 -21
  88. data/examples/blog/src/controller.rb +0 -151
  89. data/examples/blog/src/mailer.rb +0 -23
  90. data/examples/blog/src/models/blog.rb +0 -33
  91. data/examples/blog/src/models/content.rb +0 -18
  92. data/examples/blog/src/views/blog_entry_email.xhtml +0 -16
  93. data/examples/blog/src/views/comments.xhtml +0 -36
  94. data/examples/blog/src/views/entry_form.xhtml +0 -22
  95. data/examples/blog/src/views/error.xhtml +0 -56
  96. data/examples/blog/src/views/index.xhtml +0 -49
  97. data/examples/blog/src/views/login.xhtml +0 -26
  98. data/examples/blog/src/views/recent_posts.xhtml +0 -14
  99. data/examples/blog/src/views/view_entry.xhtml +0 -37
  100. data/examples/blog/src/views/view_entry.xml +0 -12
  101. data/examples/blog/src/xsl/base.xsl +0 -160
  102. data/examples/blog/src/xsl/style.xsl +0 -143
  103. data/examples/blog/test/tc_blog.rb +0 -43
  104. data/examples/flash/log/README +0 -3
  105. data/examples/flash/root/index.xhtml +0 -16
  106. data/examples/flash/root/show_inline_text.xhtml +0 -17
  107. data/examples/flash/run.rb +0 -7
  108. data/examples/no_xsl_blog/README +0 -24
  109. data/examples/no_xsl_blog/conf/apache.conf +0 -30
  110. data/examples/no_xsl_blog/conf/lhttpd.conf +0 -79
  111. data/examples/no_xsl_blog/conf/locales/de.yml +0 -4
  112. data/examples/no_xsl_blog/conf/locales/en.yml +0 -4
  113. data/examples/no_xsl_blog/lib/blog.rb +0 -16
  114. data/examples/no_xsl_blog/lib/blog/controller.rb +0 -116
  115. data/examples/no_xsl_blog/lib/blog/model.rb +0 -35
  116. data/examples/no_xsl_blog/lib/blog/template.rb +0 -138
  117. data/examples/no_xsl_blog/lib/content.rb +0 -47
  118. data/examples/no_xsl_blog/log/README +0 -3
  119. data/examples/no_xsl_blog/log/apache.error_log +0 -473
  120. data/examples/no_xsl_blog/public/comments.xhtml +0 -36
  121. data/examples/no_xsl_blog/public/entry_form.xhtml +0 -22
  122. data/examples/no_xsl_blog/public/fcgi.rb +0 -5
  123. data/examples/no_xsl_blog/public/index.xhtml +0 -39
  124. data/examples/no_xsl_blog/public/login.xhtml +0 -21
  125. data/examples/no_xsl_blog/public/m/bubbles.gif +0 -0
  126. data/examples/no_xsl_blog/public/m/comments_curve.gif +0 -0
  127. data/examples/no_xsl_blog/public/m/down.gif +0 -0
  128. data/examples/no_xsl_blog/public/m/footer_bg.gif +0 -0
  129. data/examples/no_xsl_blog/public/m/garrow.gif +0 -0
  130. data/examples/no_xsl_blog/public/m/gbull.gif +0 -0
  131. data/examples/no_xsl_blog/public/m/grbull.gif +0 -0
  132. data/examples/no_xsl_blog/public/m/h1_bg.gif +0 -0
  133. data/examples/no_xsl_blog/public/m/header_bg.gif +0 -0
  134. data/examples/no_xsl_blog/public/m/nitro.gif +0 -0
  135. data/examples/no_xsl_blog/public/m/obull.gif +0 -0
  136. data/examples/no_xsl_blog/public/m/page_bg.gif +0 -0
  137. data/examples/no_xsl_blog/public/m/rss.gif +0 -0
  138. data/examples/no_xsl_blog/public/m/side_title_bg.gif +0 -0
  139. data/examples/no_xsl_blog/public/m/sidebar_bg.gif +0 -0
  140. data/examples/no_xsl_blog/public/recent_posts.xhtml +0 -14
  141. data/examples/no_xsl_blog/public/style.css +0 -299
  142. data/examples/no_xsl_blog/public/view_entry.xhtml +0 -25
  143. data/examples/no_xsl_blog/public/view_entry.xml +0 -12
  144. data/examples/no_xsl_blog/run.rb +0 -35
  145. data/examples/tiny/README +0 -14
  146. data/examples/tiny/conf/apache.conf +0 -30
  147. data/examples/tiny/conf/lhttpd.conf +0 -79
  148. data/examples/tiny/log/README +0 -3
  149. data/examples/tiny/log/apache.error_log +0 -154
  150. data/examples/tiny/public/deep/dir/hello.xhtml +0 -3
  151. data/examples/tiny/public/fcgi.rb +0 -5
  152. data/examples/tiny/public/include.xhtml +0 -3
  153. data/examples/tiny/public/index.xhtml +0 -55
  154. data/examples/tiny/public/nitro.png +0 -0
  155. data/examples/tiny/public/upload.xhtml +0 -21
  156. data/examples/tiny/run.rb +0 -7
  157. data/examples/wee_style/README +0 -10
  158. data/examples/wee_style/run.rb +0 -50
  159. data/examples/why_wiki/README +0 -5
  160. data/examples/why_wiki/run.rb +0 -59
  161. data/proto/public/js/ajax.js +0 -63
@@ -1,36 +0,0 @@
1
- <?xml version="1.0"?>
2
-
3
- <root xmlns:x="http://www.navel.gr/xml/shader.xsd">
4
-
5
- <h2>#{@entry.comments.size} Comments:</h2>
6
- <?r if @entry.comments.each do |comment| ?>
7
- <div class="comment">
8
- #{comment.body}
9
- <div class="footer">
10
- by #{comment.author} at #{comment.create_time.strftime('%R %p')}
11
- <?r if session[:owner] ?>
12
- [<a href="del_comment?oid=#{comment.oid}">del</a>]
13
- <?r end ?>
14
- </div>
15
- </div>
16
- <?r end.empty? then ?>
17
- no comments.
18
- <?r end ?>
19
-
20
- <form id="new_comment" action="new_comment" method="post">
21
- <input type="hidden" name="entry_oid" value="#{@entry.oid}" />
22
- <p>
23
- <b>Your name:</b><br />
24
- <input type="text" name="author" value="#{session[:username]}" />
25
- <x:error attr="author" />
26
- <x:error attr="title" />
27
- </p>
28
- <p>
29
- <b>Write your thoughts:</b><br />
30
- <textarea name="body" style="width: 90%; height: 100px">#{}</textarea>
31
- <x:error attr="body"><br /></x:error>
32
- </p>
33
- <input type="submit" value="Add comment" />
34
- </form>
35
-
36
- </root>
@@ -1,22 +0,0 @@
1
- <?xml version="1.0"?>
2
-
3
- <div id="comments" xmlns:x="http://www.navel.gr/xml/shader.xsd">
4
-
5
- <?r errors = session[:errors] ?>
6
-
7
- <h2>Post new entry:</h2>
8
-
9
- <form id="new_entry" action="new_entry" method="post">
10
- <p>
11
- <b>Title:</b><br />
12
- <input type="text" name="title" />
13
- <x:error attr="title" />
14
- </p>
15
- <p>
16
- <b>Body:</b><br />
17
- <textarea name="body" style="width: 90%; height: 100px">#{}</textarea>
18
- <x:error attr="body"><br /></x:error>
19
- </p>
20
- <input type="submit" value="Post" />
21
- </form>
22
- </div>
@@ -1,5 +0,0 @@
1
- #!/usr/local/bin/ruby
2
-
3
- ENV['NITRO_INVOKE'] = 'fcgi_proc'
4
- $0 = File.join(File.dirname(__FILE__), '..', 'run.rb')
5
- require $0
@@ -1,39 +0,0 @@
1
- <?xml version="1.0"?>
2
-
3
- #{s_page}
4
-
5
- <?r
6
- if @entries
7
- for entry in @entries
8
- ?>
9
- <div class="entry">
10
- <h2 class="date">#{entry.create_time.strftime('%B %e, %G')}</h2>
11
- <div class="post">
12
- <h3 class="title">#{entry.title}</h3>
13
- #{entry.body}
14
- <div class="footer">
15
- [[posted by]] #{entry.author} at <a href="#{entry.to_href}">#{entry.create_time.strftime('%R %p')}</a> |
16
- <a href="#{entry.to_href}#comments">#{entry.comments.size} comments</a>.
17
- <?r if session[:owner] ?>
18
- [<a href="del_entry?oid=#{entry.oid}">del</a>]
19
- <?r end ?>
20
- </div>
21
- </div>
22
- </div>
23
- <?r
24
- end
25
- else
26
- ?>
27
- no entries
28
- <?r end ?>
29
-
30
- <div class="pager">
31
- #{@pager.navigation}
32
- <div class="clear">.</div>
33
- </div>
34
-
35
- <?r if session[:owner] ?>
36
- <render href="entry_form" />
37
- <?r end ?>
38
-
39
- #{e_page}
@@ -1,21 +0,0 @@
1
- <?xml version="1.0"?>
2
-
3
- #{s_page}
4
-
5
- <p>
6
- Please login as an author by entering the blog password.
7
- <br />
8
- The password is: <b>#{Blog.password}</b>.
9
- </p>
10
-
11
- <div class="error">#@error</div>
12
-
13
- <form action="login" method="post">
14
- <p>
15
- <b>Password:</b><br />
16
- <input type="password" name="password" value="#{Blog.password}" />
17
- </p>
18
- <input type="submit" value="Login" />
19
- </form>
20
-
21
- #{e_page}
Binary file
Binary file
@@ -1,14 +0,0 @@
1
- <?xml version="1.0"?>
2
-
3
- <span>
4
- <h2>Recent posts</h2>
5
- <?r if @entries ?>
6
- <ul>
7
- <?r for entry in @entries ?>
8
- <li><a href="#{entry.to_href}">#{entry.title}</a></li>
9
- <?r end ?>
10
- </ul>
11
- <?r else ?>
12
- no entries
13
- <?r end ?>
14
- </span>
@@ -1,299 +0,0 @@
1
- body {
2
- margin: 0;
3
- padding: 0;
4
- font-family: Verdana, sans-serif;
5
- font-size: small;
6
- color: #333;
7
- background: #e0e0e0;
8
- }
9
-
10
- a:link {
11
- color: #69c;
12
- }
13
-
14
- a:visited {
15
- color: #666699;
16
- }
17
-
18
- a:hover {
19
- color: #693;
20
- }
21
-
22
- a:active {
23
- color: #cc3333;
24
- text-decoration: none;
25
- }
26
-
27
- input, textarea {
28
- font-family: Verdana, sans-serif;
29
- font-size: small;
30
- }
31
-
32
- #page {
33
- width: 847px;
34
- background: url(m/page_bg.gif) repeat-y;
35
- }
36
-
37
- #header {
38
- margin: 0px;
39
- color: #fff;
40
- font-family: "Lucida Grande", "Trebuchet MS";
41
- background: url(m/header_bg.gif) no-repeat top left;
42
- }
43
-
44
- #header h1 {
45
- margin: 0px;
46
- padding: 45px 60px 50px 160px;
47
- background: url(m/h1_bg.gif) no-repeat bottom left;
48
- }
49
-
50
- #header h1 a {
51
- color: #fff;
52
- text-decoration: none;
53
- }
54
-
55
- #footer {
56
- height: 40px;
57
- color: #fff;
58
- font-size: 80%;
59
- background: url(m/footer_bg.gif) repeat-y;
60
- padding-top: 15px; padding-left: 90px;
61
- }
62
-
63
- #footer a {
64
- color: #fff;
65
- }
66
-
67
- #footer a:hover {
68
- color: #fc0;
69
- }
70
-
71
- .main {
72
- float: left;
73
- margin: 10px; margin-left: 60px;
74
- padding-left: 2px;
75
- margin-bottom: 20px;
76
- width: 460px;
77
- }
78
-
79
- .main li {
80
- list-style: none;
81
- padding-left: 14px;
82
- margin-bottom: 3px;
83
- background: url(m/obull.gif) no-repeat 0 6px;
84
- }
85
-
86
- .side {
87
- color: #999;
88
- margin: 0 41px 0px 547px;
89
- padding-top: 25px; padding-left: 20px; padding-right: 20px;
90
- font-size: 85%;
91
- line-height: 1.4em;
92
- background: url(m/sidebar_bg.gif) no-repeat 0 0;
93
- }
94
-
95
- .side h2 {
96
- margin: 0 0 0 0;
97
- padding: 25px 0 0 30px;
98
- color: #666;
99
- height: 32px !important;
100
- height /**/:57px; /* for IE5/Win */
101
- font-family: "Lucida Grande", "Trebuchet MS";
102
- font-size: 130%;
103
- background: url(m/side_title_bg.gif) no-repeat 0px 15px;
104
- }
105
-
106
- .side ul {
107
- margin-top: 0px;
108
- padding: 0px;
109
- }
110
-
111
- .side li {
112
- list-style: none;
113
- margin-left: 0px; margin-bottom: 3px;
114
- padding-left: 14px;
115
- background: url(m/gbull.gif) no-repeat 0 6px;
116
- }
117
-
118
- .entry {
119
- border-bottom: 1px solid #eee;
120
- margin-top: 15px; margin-bottom: 15px;
121
- }
122
-
123
- .full-entry {
124
- margin-top: 15px; margin-bottom: 15px;
125
- }
126
-
127
- h2.date {
128
- margin-top: 0;
129
- padding-left: 14px;
130
- font-size: 90%;
131
- color: #f93;
132
- background: url(m/down.gif) no-repeat 0 50%;
133
- }
134
-
135
- .post {
136
- padding-left: 15px;
137
- padding-bottom: 15px;
138
- }
139
-
140
- .post h3.title {
141
- margin-top: 0;
142
- font-family: "Lucida Grande", "Trebuchet MS";
143
- font-size: 130%;
144
- letter-spacing: -1px;
145
- color: #f63;
146
- }
147
-
148
- .post .footer {
149
- margin: 0; margin-top: 10px;
150
- padding: 0 0 0 14px;
151
- font-size: 88%;
152
- color: #999;
153
- background: url(m/grbull.gif) no-repeat 0 6px;
154
- }
155
-
156
- #comments {
157
- margin-top: 30px;
158
- padding-top: 10px;
159
- font-size: 85%;
160
- line-height: 1.5em;
161
- color: #666;
162
- background: #eee url(m/comments_curve.gif) no-repeat top left;
163
- }
164
-
165
- #comments h2 {
166
- margin: 20px 0 15px 0;
167
- padding: 8px 0 0 40px;
168
- font-family: "Lucida Grande", "Trebuchet MS";
169
- font-size: 130%;
170
- color: #666;
171
- background: url(m/bubbles.gif) no-repeat 10px 0;
172
- height: 29px !important; /* for most browsers */
173
- height /**/:37px; /* for IE5/Win */
174
- }
175
-
176
- #comments form {
177
- margin: 10px;
178
- padding-bottom: 10px;
179
- }
180
-
181
- .comment {
182
- padding: 10px;
183
- border-bottom: 1px solid #ddd;
184
- }
185
-
186
- .comment .footer {
187
- margin: 4px 0 0 0;
188
- padding: 0 0 0 60px;
189
- color: #999;
190
- background: url(m/garrow.gif) no-repeat 44px 2px;
191
- }
192
-
193
- .error {
194
- color: #f00;
195
- }
196
-
197
- .clear {
198
- clear: both;
199
- height: 0px;
200
- line-height: 0px;
201
- font-size: 0px;
202
- overflow: hidden;
203
- background-color: #f00;
204
- }
205
-
206
- #rendering-errors {
207
- float: left;
208
- border: 1px solid red;
209
- background: white;
210
- padding: 10px;
211
- margin: 20px;
212
- }
213
-
214
- .rss li {
215
- list-style: none;
216
- padding-left: 34px; padding-top: 3px;
217
- margin-bottom: 3px;
218
- height: 18px;
219
- background: url(m/rss.gif) no-repeat 0 6px;
220
- }
221
-
222
- /* --- pager --- */
223
-
224
- .pager {
225
- margin-top: 40px; margin-bottom: 50px;
226
- border-top: 1px solid #ccc;
227
- background-color: #f0f0f0;
228
- }
229
-
230
- .pager .first {
231
- float: left;
232
- padding: 5px;
233
- }
234
-
235
- .pager .previous {
236
- float: left;
237
- padding: 5px;
238
- margin-left: 5px;
239
- }
240
-
241
- .pager .next {
242
- float: right;
243
- padding: 5px;
244
- margin-right: 5px;
245
- }
246
-
247
- .pager .last {
248
- float: right;
249
- padding: 5px;
250
- }
251
-
252
- .pager ul {
253
- float: left;
254
- margin: 0px;
255
- padding: 0px;
256
- }
257
-
258
- .pager li {
259
- float: left;
260
- display: inline;
261
- padding: 5px;
262
- padding-left: 10px;
263
- padding-right: 10px;
264
- background: none;
265
- }
266
-
267
- .pager li.active {
268
- background-color: #ffa;
269
- }
270
-
271
- .noitems {
272
- padding: 5px;
273
- text-align: center;
274
- }
275
-
276
- /* --- forms --- */
277
-
278
- dl {
279
- margin: 0px;
280
- }
281
-
282
- dt {
283
- display: block;
284
- margin: 0px;
285
- margin-right: 10px;
286
- padding-bottom: 10px;
287
- font-weight: bold;
288
- }
289
-
290
- dd {
291
- display: block;
292
- margin: 0px;
293
- padding-bottom: 10px;
294
- }
295
-
296
- textarea {
297
- width: 90%;
298
- height: 150px;
299
- }