serverside 0.2.0 → 0.2.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. data/CHANGELOG +26 -0
  2. data/README +39 -22
  3. data/Rakefile +18 -2
  4. data/bin/serverside +21 -5
  5. data/doc/rdoc/classes/ServerSide/Application.html +12 -19
  6. data/doc/rdoc/classes/ServerSide/Connection/Base.html +203 -116
  7. data/doc/rdoc/classes/ServerSide/Connection/Const.html +35 -5
  8. data/doc/rdoc/classes/ServerSide/Connection/Router.html +107 -78
  9. data/doc/rdoc/classes/ServerSide/Server.html +1 -1
  10. data/doc/rdoc/classes/ServerSide/StaticFiles/Const.html +10 -0
  11. data/doc/rdoc/classes/ServerSide/StaticFiles.html +73 -43
  12. data/doc/rdoc/classes/ServerSide/Template.html +200 -0
  13. data/doc/rdoc/classes/ServerSide.html +13 -8
  14. data/doc/rdoc/created.rid +1 -1
  15. data/doc/rdoc/files/CHANGELOG.html +44 -1
  16. data/doc/rdoc/files/README.html +63 -35
  17. data/doc/rdoc/files/lib/serverside/application_rb.html +1 -1
  18. data/doc/rdoc/files/lib/serverside/connection_rb.html +1 -1
  19. data/doc/rdoc/files/lib/serverside/routing_rb.html +1 -1
  20. data/doc/rdoc/files/lib/serverside/server_rb.html +1 -1
  21. data/doc/rdoc/files/lib/serverside/static_rb.html +1 -1
  22. data/doc/rdoc/files/lib/serverside/template_rb.html +108 -0
  23. data/doc/rdoc/fr_class_index.html +1 -2
  24. data/doc/rdoc/fr_file_index.html +1 -0
  25. data/doc/rdoc/fr_method_index.html +18 -16
  26. data/lib/serverside/application.rb +0 -28
  27. data/lib/serverside/connection.rb +38 -12
  28. data/lib/serverside/routing.rb +23 -2
  29. data/lib/serverside/server.rb +1 -1
  30. data/lib/serverside/static.rb +12 -0
  31. data/lib/serverside/template.rb +36 -0
  32. data/test/functional/primitive_static_server_test.rb +26 -2
  33. data/test/functional/static_rfuzz.rb +3 -39
  34. data/test/spec/core_ext_spec.rb +68 -0
  35. data/test/unit/connection_test.rb +37 -1
  36. data/test/unit/template_test.rb +78 -0
  37. metadata +8 -6
  38. data/doc/rdoc/classes/ServerSide/Application/Base.html +0 -196
  39. data/doc/rdoc/classes/ServerSide/Application/Static.html +0 -156
  40. data/test/unit/application_test.rb +0 -16
@@ -84,8 +84,32 @@
84
84
  <p>
85
85
  The <a href="Router.html">Router</a> class defines a kind of connection
86
86
  that can route requests to different handlers based on rules that can be
87
- specified either by lambdas or by hashes containing keys corresponding to
88
- patterns.
87
+ specified either by lambdas or by hashes that contain variable names
88
+ corresponding to patterns.
89
+ </p>
90
+ <p>
91
+ The simplest form of a routing rule specifies a path pattern:
92
+ </p>
93
+ <pre>
94
+ ServerSide.route('/static') {serve_static('.'/@path)}
95
+ </pre>
96
+ <p>
97
+ But you can also check for other attributes of the request:
98
+ </p>
99
+ <pre>
100
+ ServerSide.route(:path =&gt; '/static', :host =&gt; '^:subdomain\.mydomain') {
101
+ serve_static(@parameters[:subdomain]/@path)
102
+ }
103
+ </pre>
104
+ <p>
105
+ It also possible to pass a lambda as a rule:
106
+ </p>
107
+ <pre>
108
+ ServerSide.route(lambda {@headers['Agent'] =~ /Moz/}) {serve_static('moz'/@path)}
109
+ </pre>
110
+ <p>
111
+ Routing rules are evaluated in backwards, so the rules should be ordered
112
+ from the general to the specific.
89
113
  </p>
90
114
 
91
115
  </div>
@@ -171,12 +195,12 @@ constant&#8217;s tag name
171
195
  onclick="toggleCode('M000046-source');return false;">[Source]</a></p>
172
196
  <div class="method-source-code" id="M000046-source">
173
197
  <pre>
174
- <span class="ruby-comment cmt"># File lib/serverside/routing.rb, line 90</span>
175
- 90: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">cache_constant</span>(<span class="ruby-identifier">value</span>)
176
- 91: <span class="ruby-identifier">tag</span> = <span class="ruby-identifier">value</span>.<span class="ruby-identifier">const_tag</span>
177
- 92: <span class="ruby-identifier">class_eval</span> <span class="ruby-node">&quot;#{tag} = #{value.inspect}.freeze&quot;</span> <span class="ruby-keyword kw">rescue</span> <span class="ruby-keyword kw">nil</span>
178
- 93: <span class="ruby-identifier">tag</span>
179
- 94: <span class="ruby-keyword kw">end</span>
198
+ <span class="ruby-comment cmt"># File lib/serverside/routing.rb, line 111</span>
199
+ 111: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">cache_constant</span>(<span class="ruby-identifier">value</span>)
200
+ 112: <span class="ruby-identifier">tag</span> = <span class="ruby-identifier">value</span>.<span class="ruby-identifier">const_tag</span>
201
+ 113: <span class="ruby-identifier">class_eval</span> <span class="ruby-node">&quot;#{tag} = #{value.inspect}.freeze&quot;</span> <span class="ruby-keyword kw">rescue</span> <span class="ruby-keyword kw">nil</span>
202
+ 114: <span class="ruby-identifier">tag</span>
203
+ 115: <span class="ruby-keyword kw">end</span>
180
204
  </pre>
181
205
  </div>
182
206
  </div>
@@ -200,13 +224,13 @@ received.
200
224
  onclick="toggleCode('M000042-source');return false;">[Source]</a></p>
201
225
  <div class="method-source-code" id="M000042-source">
202
226
  <pre>
203
- <span class="ruby-comment cmt"># File lib/serverside/routing.rb, line 25</span>
204
- 25: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">compile_rules</span>
205
- 26: <span class="ruby-ivar">@@rules</span> <span class="ruby-operator">||=</span> []
206
- 27: <span class="ruby-identifier">code</span> = <span class="ruby-ivar">@@rules</span>.<span class="ruby-identifier">inject</span>(<span class="ruby-value str">'lambda {'</span>) {<span class="ruby-operator">|</span><span class="ruby-identifier">m</span>, <span class="ruby-identifier">r</span><span class="ruby-operator">|</span> <span class="ruby-identifier">m</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">rule_to_statement</span>(<span class="ruby-identifier">r</span>[<span class="ruby-value">0</span>], <span class="ruby-identifier">r</span>[<span class="ruby-value">1</span>])}
207
- 28: <span class="ruby-identifier">code</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">'default_handler}'</span>
208
- 29: <span class="ruby-identifier">define_method</span>(<span class="ruby-identifier">:respond</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">eval</span>(<span class="ruby-identifier">code</span>))
209
- 30: <span class="ruby-keyword kw">end</span>
227
+ <span class="ruby-comment cmt"># File lib/serverside/routing.rb, line 46</span>
228
+ 46: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">compile_rules</span>
229
+ 47: <span class="ruby-ivar">@@rules</span> <span class="ruby-operator">||=</span> []
230
+ 48: <span class="ruby-identifier">code</span> = <span class="ruby-ivar">@@rules</span>.<span class="ruby-identifier">inject</span>(<span class="ruby-value str">'lambda {'</span>) {<span class="ruby-operator">|</span><span class="ruby-identifier">m</span>, <span class="ruby-identifier">r</span><span class="ruby-operator">|</span> <span class="ruby-identifier">m</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">rule_to_statement</span>(<span class="ruby-identifier">r</span>[<span class="ruby-value">0</span>], <span class="ruby-identifier">r</span>[<span class="ruby-value">1</span>])}
231
+ 49: <span class="ruby-identifier">code</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">'default_handler}'</span>
232
+ 50: <span class="ruby-identifier">define_method</span>(<span class="ruby-identifier">:respond</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">eval</span>(<span class="ruby-identifier">code</span>))
233
+ 51: <span class="ruby-keyword kw">end</span>
210
234
  </pre>
211
235
  </div>
212
236
  </div>
@@ -232,25 +256,25 @@ method creates a lambda for extracting the parameter values.
232
256
  onclick="toggleCode('M000044-source');return false;">[Source]</a></p>
233
257
  <div class="method-source-code" id="M000044-source">
234
258
  <pre>
235
- <span class="ruby-comment cmt"># File lib/serverside/routing.rb, line 62</span>
236
- 62: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">condition_part</span>(<span class="ruby-identifier">key</span>, <span class="ruby-identifier">value</span>)
237
- 63: <span class="ruby-identifier">p_parse</span>, <span class="ruby-identifier">p_count</span> = <span class="ruby-value str">''</span>, <span class="ruby-value">0</span>
238
- 64: <span class="ruby-keyword kw">while</span> (<span class="ruby-constant">String</span> <span class="ruby-operator">===</span> <span class="ruby-identifier">value</span>) <span class="ruby-operator">&amp;&amp;</span> (<span class="ruby-identifier">value</span> <span class="ruby-operator">=~</span> <span class="ruby-constant">ParamRegexp</span>)
239
- 65: <span class="ruby-identifier">value</span> = <span class="ruby-identifier">value</span>.<span class="ruby-identifier">dup</span>
240
- 66: <span class="ruby-identifier">p_name</span> = <span class="ruby-identifier">$1</span>
241
- 67: <span class="ruby-identifier">p_count</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
242
- 68: <span class="ruby-identifier">value</span>.<span class="ruby-identifier">sub!</span>(<span class="ruby-constant">ParamRegexp</span>, <span class="ruby-value str">'(.+)'</span>)
243
- 69: <span class="ruby-identifier">p_parse</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;@parameters[:#{p_name}] = $#{p_count}\n&quot;</span>
244
- 70: <span class="ruby-keyword kw">end</span>
245
- 71: <span class="ruby-identifier">cond</span> = <span class="ruby-node">&quot;(@#{key} =~ #{cache_constant(Regexp.new(value))})&quot;</span>
246
- 72: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">p_count</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
247
- 73: <span class="ruby-identifier">cond</span>
248
- 74: <span class="ruby-keyword kw">else</span>
249
- 75: <span class="ruby-identifier">tag</span> = <span class="ruby-identifier">define_proc</span>(<span class="ruby-operator">&amp;</span><span class="ruby-identifier">eval</span>(
250
- 76: <span class="ruby-node">&quot;lambda {if #{cond}\n#{p_parse}true\nelse\nfalse\nend}&quot;</span>))
251
- 77: <span class="ruby-node">&quot;(#{tag})&quot;</span>
252
- 78: <span class="ruby-keyword kw">end</span>
253
- 79: <span class="ruby-keyword kw">end</span>
259
+ <span class="ruby-comment cmt"># File lib/serverside/routing.rb, line 83</span>
260
+ 83: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">condition_part</span>(<span class="ruby-identifier">key</span>, <span class="ruby-identifier">value</span>)
261
+ 84: <span class="ruby-identifier">p_parse</span>, <span class="ruby-identifier">p_count</span> = <span class="ruby-value str">''</span>, <span class="ruby-value">0</span>
262
+ 85: <span class="ruby-keyword kw">while</span> (<span class="ruby-constant">String</span> <span class="ruby-operator">===</span> <span class="ruby-identifier">value</span>) <span class="ruby-operator">&amp;&amp;</span> (<span class="ruby-identifier">value</span> <span class="ruby-operator">=~</span> <span class="ruby-constant">ParamRegexp</span>)
263
+ 86: <span class="ruby-identifier">value</span> = <span class="ruby-identifier">value</span>.<span class="ruby-identifier">dup</span>
264
+ 87: <span class="ruby-identifier">p_name</span> = <span class="ruby-identifier">$1</span>
265
+ 88: <span class="ruby-identifier">p_count</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
266
+ 89: <span class="ruby-identifier">value</span>.<span class="ruby-identifier">sub!</span>(<span class="ruby-constant">ParamRegexp</span>, <span class="ruby-value str">'(.+)'</span>)
267
+ 90: <span class="ruby-identifier">p_parse</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;@parameters[:#{p_name}] = $#{p_count}\n&quot;</span>
268
+ 91: <span class="ruby-keyword kw">end</span>
269
+ 92: <span class="ruby-identifier">cond</span> = <span class="ruby-node">&quot;(@#{key} =~ #{cache_constant(Regexp.new(value))})&quot;</span>
270
+ 93: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">p_count</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
271
+ 94: <span class="ruby-identifier">cond</span>
272
+ 95: <span class="ruby-keyword kw">else</span>
273
+ 96: <span class="ruby-identifier">tag</span> = <span class="ruby-identifier">define_proc</span>(<span class="ruby-operator">&amp;</span><span class="ruby-identifier">eval</span>(
274
+ 97: <span class="ruby-node">&quot;lambda {if #{cond}\n#{p_parse}true\nelse\nfalse\nend}&quot;</span>))
275
+ 98: <span class="ruby-node">&quot;(#{tag})&quot;</span>
276
+ 99: <span class="ruby-keyword kw">end</span>
277
+ 100: <span class="ruby-keyword kw">end</span>
254
278
  </pre>
255
279
  </div>
256
280
  </div>
@@ -274,12 +298,12 @@ symbol)
274
298
  onclick="toggleCode('M000045-source');return false;">[Source]</a></p>
275
299
  <div class="method-source-code" id="M000045-source">
276
300
  <pre>
277
- <span class="ruby-comment cmt"># File lib/serverside/routing.rb, line 82</span>
278
- 82: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">define_proc</span>(<span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
279
- 83: <span class="ruby-identifier">tag</span> = <span class="ruby-identifier">block</span>.<span class="ruby-identifier">proc_tag</span>
280
- 84: <span class="ruby-identifier">define_method</span>(<span class="ruby-identifier">tag</span>.<span class="ruby-identifier">to_sym</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">instance_methods</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">tag</span>)
281
- 85: <span class="ruby-identifier">tag</span>.<span class="ruby-identifier">to_sym</span>
282
- 86: <span class="ruby-keyword kw">end</span>
301
+ <span class="ruby-comment cmt"># File lib/serverside/routing.rb, line 103</span>
302
+ 103: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">define_proc</span>(<span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
303
+ 104: <span class="ruby-identifier">tag</span> = <span class="ruby-identifier">block</span>.<span class="ruby-identifier">proc_tag</span>
304
+ 105: <span class="ruby-identifier">define_method</span>(<span class="ruby-identifier">tag</span>.<span class="ruby-identifier">to_sym</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">instance_methods</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">tag</span>)
305
+ 106: <span class="ruby-identifier">tag</span>.<span class="ruby-identifier">to_sym</span>
306
+ 107: <span class="ruby-keyword kw">end</span>
283
307
  </pre>
284
308
  </div>
285
309
  </div>
@@ -302,10 +326,10 @@ Returns true if routes were defined.
302
326
  onclick="toggleCode('M000040-source');return false;">[Source]</a></p>
303
327
  <div class="method-source-code" id="M000040-source">
304
328
  <pre>
305
- <span class="ruby-comment cmt"># File lib/serverside/routing.rb, line 8</span>
306
- 8: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">has_routes?</span>
307
- 9: <span class="ruby-ivar">@@rules</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@@rules</span>.<span class="ruby-identifier">empty?</span> <span class="ruby-keyword kw">rescue</span> <span class="ruby-keyword kw">false</span>
308
- 10: <span class="ruby-keyword kw">end</span>
329
+ <span class="ruby-comment cmt"># File lib/serverside/routing.rb, line 25</span>
330
+ 25: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">has_routes?</span>
331
+ 26: <span class="ruby-ivar">@@rules</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@@rules</span>.<span class="ruby-identifier">empty?</span> <span class="ruby-keyword kw">rescue</span> <span class="ruby-keyword kw">false</span>
332
+ 27: <span class="ruby-keyword kw">end</span>
309
333
  </pre>
310
334
  </div>
311
335
  </div>
@@ -325,20 +349,25 @@ Returns true if routes were defined.
325
349
  Adds a routing rule. The normalized rule is a hash containing keys (acting
326
350
  as instance variable names) with patterns as values. If the rule is not a
327
351
  hash, it is normalized into a pattern checked against the request path.
328
- Pattern values can also be arrays, in any array member is checked as a
329
- pattern.
352
+ Pattern values can also be arrays, any member of which is checked as a
353
+ pattern. The rule can also be a <a href="../../Proc.html">Proc</a> or
354
+ lambda which is run with the connection object&#8217;s binding. A contrived
355
+ example:
330
356
  </p>
357
+ <pre>
358
+ ServerSide.route(lambda{path = 'mypage'}) {serve_static('mypage.html')}
359
+ </pre>
331
360
  <p><a class="source-toggle" href="#"
332
361
  onclick="toggleCode('M000041-source');return false;">[Source]</a></p>
333
362
  <div class="method-source-code" id="M000041-source">
334
363
  <pre>
335
- <span class="ruby-comment cmt"># File lib/serverside/routing.rb, line 16</span>
336
- 16: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">route</span>(<span class="ruby-identifier">rule</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
337
- 17: <span class="ruby-ivar">@@rules</span> <span class="ruby-operator">||=</span> []
338
- 18: <span class="ruby-identifier">rule</span> = {<span class="ruby-identifier">:path</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">rule</span>} <span class="ruby-keyword kw">unless</span> (<span class="ruby-constant">Hash</span> <span class="ruby-operator">===</span> <span class="ruby-identifier">rule</span>) <span class="ruby-operator">||</span> (<span class="ruby-constant">Proc</span> <span class="ruby-operator">===</span> <span class="ruby-identifier">rule</span>)
339
- 19: <span class="ruby-ivar">@@rules</span>.<span class="ruby-identifier">unshift</span> [<span class="ruby-identifier">rule</span>, <span class="ruby-identifier">block</span>]
340
- 20: <span class="ruby-identifier">compile_rules</span>
341
- 21: <span class="ruby-keyword kw">end</span>
364
+ <span class="ruby-comment cmt"># File lib/serverside/routing.rb, line 37</span>
365
+ 37: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">route</span>(<span class="ruby-identifier">rule</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
366
+ 38: <span class="ruby-ivar">@@rules</span> <span class="ruby-operator">||=</span> []
367
+ 39: <span class="ruby-identifier">rule</span> = {<span class="ruby-identifier">:path</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">rule</span>} <span class="ruby-keyword kw">unless</span> (<span class="ruby-constant">Hash</span> <span class="ruby-operator">===</span> <span class="ruby-identifier">rule</span>) <span class="ruby-operator">||</span> (<span class="ruby-constant">Proc</span> <span class="ruby-operator">===</span> <span class="ruby-identifier">rule</span>)
368
+ 40: <span class="ruby-ivar">@@rules</span>.<span class="ruby-identifier">unshift</span> [<span class="ruby-identifier">rule</span>, <span class="ruby-identifier">block</span>]
369
+ 41: <span class="ruby-identifier">compile_rules</span>
370
+ 42: <span class="ruby-keyword kw">end</span>
342
371
  </pre>
343
372
  </div>
344
373
  </div>
@@ -361,11 +390,11 @@ Sets the default handler for incoming requests.
361
390
  onclick="toggleCode('M000047-source');return false;">[Source]</a></p>
362
391
  <div class="method-source-code" id="M000047-source">
363
392
  <pre>
364
- <span class="ruby-comment cmt"># File lib/serverside/routing.rb, line 97</span>
365
- 97: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">route_default</span>(<span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
366
- 98: <span class="ruby-identifier">define_method</span>(<span class="ruby-identifier">:default_handler</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
367
- 99: <span class="ruby-identifier">compile_rules</span>
368
- 100: <span class="ruby-keyword kw">end</span>
393
+ <span class="ruby-comment cmt"># File lib/serverside/routing.rb, line 118</span>
394
+ 118: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">route_default</span>(<span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
395
+ 119: <span class="ruby-identifier">define_method</span>(<span class="ruby-identifier">:default_handler</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
396
+ 120: <span class="ruby-identifier">compile_rules</span>
397
+ 121: <span class="ruby-keyword kw">end</span>
369
398
  </pre>
370
399
  </div>
371
400
  </div>
@@ -389,22 +418,22 @@ against their respective values.
389
418
  onclick="toggleCode('M000043-source');return false;">[Source]</a></p>
390
419
  <div class="method-source-code" id="M000043-source">
391
420
  <pre>
392
- <span class="ruby-comment cmt"># File lib/serverside/routing.rb, line 34</span>
393
- 34: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">rule_to_statement</span>(<span class="ruby-identifier">rule</span>, <span class="ruby-identifier">block</span>)
394
- 35: <span class="ruby-identifier">proc_tag</span> = <span class="ruby-identifier">define_proc</span>(<span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
395
- 36: <span class="ruby-keyword kw">if</span> <span class="ruby-constant">Proc</span> <span class="ruby-operator">===</span> <span class="ruby-identifier">rule</span>
396
- 37: <span class="ruby-identifier">cond</span> = <span class="ruby-identifier">define_proc</span>(<span class="ruby-operator">&amp;</span><span class="ruby-identifier">rule</span>).<span class="ruby-identifier">to_s</span>
397
- 38: <span class="ruby-keyword kw">else</span>
398
- 39: <span class="ruby-identifier">cond</span> = <span class="ruby-identifier">rule</span>.<span class="ruby-identifier">to_a</span>.<span class="ruby-identifier">map</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">kv</span><span class="ruby-operator">|</span>
399
- 40: <span class="ruby-keyword kw">if</span> <span class="ruby-constant">Array</span> <span class="ruby-operator">===</span> <span class="ruby-identifier">kv</span>[<span class="ruby-value">1</span>]
400
- 41: <span class="ruby-value str">'('</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">kv</span>[<span class="ruby-value">1</span>].<span class="ruby-identifier">map</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">v</span><span class="ruby-operator">|</span> <span class="ruby-identifier">condition_part</span>(<span class="ruby-identifier">kv</span>[<span class="ruby-value">0</span>], <span class="ruby-identifier">v</span>)}.<span class="ruby-identifier">join</span>(<span class="ruby-value str">'||'</span>) <span class="ruby-operator">+</span> <span class="ruby-value str">')'</span>
401
- 42: <span class="ruby-keyword kw">else</span>
402
- 43: <span class="ruby-identifier">condition_part</span>(<span class="ruby-identifier">kv</span>[<span class="ruby-value">0</span>], <span class="ruby-identifier">kv</span>[<span class="ruby-value">1</span>])
403
- 44: <span class="ruby-keyword kw">end</span>
404
- 45: }.<span class="ruby-identifier">join</span>(<span class="ruby-value str">'&amp;&amp;'</span>)
405
- 46: <span class="ruby-keyword kw">end</span>
406
- 47: <span class="ruby-node">&quot;return #{proc_tag} if #{cond}\n&quot;</span>
407
- 48: <span class="ruby-keyword kw">end</span>
421
+ <span class="ruby-comment cmt"># File lib/serverside/routing.rb, line 55</span>
422
+ 55: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">rule_to_statement</span>(<span class="ruby-identifier">rule</span>, <span class="ruby-identifier">block</span>)
423
+ 56: <span class="ruby-identifier">proc_tag</span> = <span class="ruby-identifier">define_proc</span>(<span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
424
+ 57: <span class="ruby-keyword kw">if</span> <span class="ruby-constant">Proc</span> <span class="ruby-operator">===</span> <span class="ruby-identifier">rule</span>
425
+ 58: <span class="ruby-identifier">cond</span> = <span class="ruby-identifier">define_proc</span>(<span class="ruby-operator">&amp;</span><span class="ruby-identifier">rule</span>).<span class="ruby-identifier">to_s</span>
426
+ 59: <span class="ruby-keyword kw">else</span>
427
+ 60: <span class="ruby-identifier">cond</span> = <span class="ruby-identifier">rule</span>.<span class="ruby-identifier">to_a</span>.<span class="ruby-identifier">map</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">kv</span><span class="ruby-operator">|</span>
428
+ 61: <span class="ruby-keyword kw">if</span> <span class="ruby-constant">Array</span> <span class="ruby-operator">===</span> <span class="ruby-identifier">kv</span>[<span class="ruby-value">1</span>]
429
+ 62: <span class="ruby-value str">'('</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">kv</span>[<span class="ruby-value">1</span>].<span class="ruby-identifier">map</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">v</span><span class="ruby-operator">|</span> <span class="ruby-identifier">condition_part</span>(<span class="ruby-identifier">kv</span>[<span class="ruby-value">0</span>], <span class="ruby-identifier">v</span>)}.<span class="ruby-identifier">join</span>(<span class="ruby-value str">'||'</span>) <span class="ruby-operator">+</span> <span class="ruby-value str">')'</span>
430
+ 63: <span class="ruby-keyword kw">else</span>
431
+ 64: <span class="ruby-identifier">condition_part</span>(<span class="ruby-identifier">kv</span>[<span class="ruby-value">0</span>], <span class="ruby-identifier">kv</span>[<span class="ruby-value">1</span>])
432
+ 65: <span class="ruby-keyword kw">end</span>
433
+ 66: }.<span class="ruby-identifier">join</span>(<span class="ruby-value str">'&amp;&amp;'</span>)
434
+ 67: <span class="ruby-keyword kw">end</span>
435
+ 68: <span class="ruby-node">&quot;return #{proc_tag} if #{cond}\n&quot;</span>
436
+ 69: <span class="ruby-keyword kw">end</span>
408
437
  </pre>
409
438
  </div>
410
439
  </div>
@@ -440,10 +469,10 @@ Alias for <a href="Router.html#M000048">unhandled</a>
440
469
  onclick="toggleCode('M000048-source');return false;">[Source]</a></p>
441
470
  <div class="method-source-code" id="M000048-source">
442
471
  <pre>
443
- <span class="ruby-comment cmt"># File lib/serverside/routing.rb, line 102</span>
444
- 102: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">unhandled</span>
445
- 103: <span class="ruby-identifier">send_response</span>(<span class="ruby-value">403</span>, <span class="ruby-value str">'text'</span>, <span class="ruby-value str">'No handler found.'</span>)
446
- 104: <span class="ruby-keyword kw">end</span>
472
+ <span class="ruby-comment cmt"># File lib/serverside/routing.rb, line 123</span>
473
+ 123: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">unhandled</span>
474
+ 124: <span class="ruby-identifier">send_response</span>(<span class="ruby-value">403</span>, <span class="ruby-value str">'text'</span>, <span class="ruby-value str">'No handler found.'</span>)
475
+ 125: <span class="ruby-keyword kw">end</span>
447
476
  </pre>
448
477
  </div>
449
478
  </div>
@@ -131,7 +131,7 @@ techniques.
131
131
  <div class="method-description">
132
132
  <p>
133
133
  Creates a new server by opening a listening socket and starting an accept
134
- loop. When a new connection is accepted, a new instance of the the supplied
134
+ loop. When a new connection is accepted, a new instance of the supplied
135
135
  connection class is instantiated and passed the connection for processing.
136
136
  </p>
137
137
  <p><a class="source-toggle" href="#"
@@ -136,6 +136,11 @@ Frozen constants to be used by the module.
136
136
  <td>=</td>
137
137
  <td class="context-item-value">'text/plain'.freeze</td>
138
138
  </tr>
139
+ <tr class="top-aligned-row context-row">
140
+ <td class="context-item-name">TextHTML</td>
141
+ <td>=</td>
142
+ <td class="context-item-value">'text/html'.freeze</td>
143
+ </tr>
139
144
  <tr class="top-aligned-row context-row">
140
145
  <td class="context-item-name">MaxCacheFileSize</td>
141
146
  <td>=</td>
@@ -161,6 +166,11 @@ Frozen constants to be used by the module.
161
166
  <td>=</td>
162
167
  <td class="context-item-value">'File not found.'.freeze</td>
163
168
  </tr>
169
+ <tr class="top-aligned-row context-row">
170
+ <td class="context-item-name">RHTML</td>
171
+ <td>=</td>
172
+ <td class="context-item-value">/\.rhtml$/.freeze</td>
173
+ </tr>
164
174
  </table>
165
175
  </div>
166
176
  </div>
@@ -89,7 +89,8 @@ over HTTP. It is mainly used by ServerSide::Connection::Static.
89
89
  <div class="name-list">
90
90
  <a href="#M000025">serve_dir</a>&nbsp;&nbsp;
91
91
  <a href="#M000024">serve_file</a>&nbsp;&nbsp;
92
- <a href="#M000026">serve_static</a>&nbsp;&nbsp;
92
+ <a href="#M000027">serve_static</a>&nbsp;&nbsp;
93
+ <a href="#M000026">serve_template</a>&nbsp;&nbsp;
93
94
  </div>
94
95
  </div>
95
96
 
@@ -134,14 +135,14 @@ Serves a directory listing over HTTP in the form of an HTML page.
134
135
  onclick="toggleCode('M000025-source');return false;">[Source]</a></p>
135
136
  <div class="method-source-code" id="M000025-source">
136
137
  <pre>
137
- <span class="ruby-comment cmt"># File lib/serverside/static.rb, line 63</span>
138
- 63: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">serve_dir</span>(<span class="ruby-identifier">dir</span>)
139
- 64: <span class="ruby-identifier">html</span> = (<span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">DirListingStart</span> <span class="ruby-operator">%</span> [<span class="ruby-ivar">@path</span>, <span class="ruby-ivar">@path</span>]) <span class="ruby-operator">+</span>
140
- 65: <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">entries</span>(<span class="ruby-identifier">dir</span>).<span class="ruby-identifier">inject</span>(<span class="ruby-value str">''</span>) {<span class="ruby-operator">|</span><span class="ruby-identifier">m</span>, <span class="ruby-identifier">fn</span><span class="ruby-operator">|</span>
141
- 66: (<span class="ruby-identifier">fn</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span>) <span class="ruby-operator">?</span> <span class="ruby-identifier">m</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">m</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">DirListing</span> <span class="ruby-operator">%</span> [<span class="ruby-ivar">@path</span><span class="ruby-operator">/</span><span class="ruby-identifier">fn</span>, <span class="ruby-identifier">fn</span>]
142
- 67: } <span class="ruby-operator">+</span> <span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">DirListingStop</span>
143
- 68: <span class="ruby-identifier">send_response</span>(<span class="ruby-value">200</span>, <span class="ruby-value str">'text/html'</span>, <span class="ruby-identifier">html</span>)
144
- 69: <span class="ruby-keyword kw">end</span>
138
+ <span class="ruby-comment cmt"># File lib/serverside/static.rb, line 65</span>
139
+ 65: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">serve_dir</span>(<span class="ruby-identifier">dir</span>)
140
+ 66: <span class="ruby-identifier">html</span> = (<span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">DirListingStart</span> <span class="ruby-operator">%</span> [<span class="ruby-ivar">@path</span>, <span class="ruby-ivar">@path</span>]) <span class="ruby-operator">+</span>
141
+ 67: <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">entries</span>(<span class="ruby-identifier">dir</span>).<span class="ruby-identifier">inject</span>(<span class="ruby-value str">''</span>) {<span class="ruby-operator">|</span><span class="ruby-identifier">m</span>, <span class="ruby-identifier">fn</span><span class="ruby-operator">|</span>
142
+ 68: (<span class="ruby-identifier">fn</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span>) <span class="ruby-operator">?</span> <span class="ruby-identifier">m</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">m</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">DirListing</span> <span class="ruby-operator">%</span> [<span class="ruby-ivar">@path</span><span class="ruby-operator">/</span><span class="ruby-identifier">fn</span>, <span class="ruby-identifier">fn</span>]
143
+ 69: } <span class="ruby-operator">+</span> <span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">DirListingStop</span>
144
+ 70: <span class="ruby-identifier">send_response</span>(<span class="ruby-value">200</span>, <span class="ruby-value str">'text/html'</span>, <span class="ruby-identifier">html</span>)
145
+ 71: <span class="ruby-keyword kw">end</span>
145
146
  </pre>
146
147
  </div>
147
148
  </div>
@@ -167,37 +168,37 @@ rendered.
167
168
  onclick="toggleCode('M000024-source');return false;">[Source]</a></p>
168
169
  <div class="method-source-code" id="M000024-source">
169
170
  <pre>
170
- <span class="ruby-comment cmt"># File lib/serverside/static.rb, line 41</span>
171
- 41: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">serve_file</span>(<span class="ruby-identifier">fn</span>)
172
- 42: <span class="ruby-identifier">stat</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">stat</span>(<span class="ruby-identifier">fn</span>)
173
- 43: <span class="ruby-identifier">etag</span> = (<span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">ETagFormat</span> <span class="ruby-operator">%</span> [<span class="ruby-identifier">stat</span>.<span class="ruby-identifier">mtime</span>.<span class="ruby-identifier">to_i</span>, <span class="ruby-identifier">stat</span>.<span class="ruby-identifier">size</span>, <span class="ruby-identifier">stat</span>.<span class="ruby-identifier">ino</span>]).<span class="ruby-identifier">freeze</span>
174
- 44: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">etag</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@headers</span>[<span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">IfNoneMatch</span>]
175
- 45: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@@static_files</span>[<span class="ruby-identifier">fn</span>] <span class="ruby-operator">&amp;&amp;</span> (<span class="ruby-ivar">@@static_files</span>[<span class="ruby-identifier">fn</span>][<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-identifier">etag</span>)
176
- 46: <span class="ruby-identifier">content</span> = <span class="ruby-ivar">@@static_files</span>[<span class="ruby-identifier">fn</span>][<span class="ruby-value">1</span>]
177
- 47: <span class="ruby-keyword kw">else</span>
178
- 48: <span class="ruby-identifier">content</span> = <span class="ruby-constant">IO</span>.<span class="ruby-identifier">read</span>(<span class="ruby-identifier">fn</span>).<span class="ruby-identifier">freeze</span>
179
- 49: <span class="ruby-ivar">@@static_files</span>[<span class="ruby-identifier">fn</span>] = [<span class="ruby-identifier">etag</span>.<span class="ruby-identifier">freeze</span>, <span class="ruby-identifier">content</span>]
180
- 50: <span class="ruby-keyword kw">end</span>
181
- 51:
182
- 52: <span class="ruby-identifier">send_response</span>(<span class="ruby-value">200</span>, <span class="ruby-ivar">@@mime_types</span>[<span class="ruby-constant">File</span>.<span class="ruby-identifier">extname</span>(<span class="ruby-identifier">fn</span>)], <span class="ruby-identifier">content</span>, <span class="ruby-identifier">stat</span>.<span class="ruby-identifier">size</span>,
183
- 53: {<span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">ETag</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">etag</span>, <span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">CacheControl</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">MaxAge</span>})
184
- 54: <span class="ruby-keyword kw">else</span>
185
- 55: <span class="ruby-ivar">@conn</span> <span class="ruby-operator">&lt;&lt;</span> ((<span class="ruby-ivar">@persistent</span> <span class="ruby-operator">?</span> <span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">NotModifiedPersist</span> <span class="ruby-operator">:</span>
186
- 56: <span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">NotModifiedClose</span>) <span class="ruby-operator">%</span> <span class="ruby-identifier">etag</span>)
187
- 57: <span class="ruby-keyword kw">end</span>
188
- 58: <span class="ruby-keyword kw">rescue</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
189
- 59: <span class="ruby-identifier">send_response</span>(<span class="ruby-value">404</span>, <span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">TextPlain</span>, <span class="ruby-value str">'Error reading file.'</span>)
190
- 60: <span class="ruby-keyword kw">end</span>
171
+ <span class="ruby-comment cmt"># File lib/serverside/static.rb, line 43</span>
172
+ 43: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">serve_file</span>(<span class="ruby-identifier">fn</span>)
173
+ 44: <span class="ruby-identifier">stat</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">stat</span>(<span class="ruby-identifier">fn</span>)
174
+ 45: <span class="ruby-identifier">etag</span> = (<span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">ETagFormat</span> <span class="ruby-operator">%</span> [<span class="ruby-identifier">stat</span>.<span class="ruby-identifier">mtime</span>.<span class="ruby-identifier">to_i</span>, <span class="ruby-identifier">stat</span>.<span class="ruby-identifier">size</span>, <span class="ruby-identifier">stat</span>.<span class="ruby-identifier">ino</span>]).<span class="ruby-identifier">freeze</span>
175
+ 46: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">etag</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@headers</span>[<span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">IfNoneMatch</span>]
176
+ 47: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@@static_files</span>[<span class="ruby-identifier">fn</span>] <span class="ruby-operator">&amp;&amp;</span> (<span class="ruby-ivar">@@static_files</span>[<span class="ruby-identifier">fn</span>][<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-identifier">etag</span>)
177
+ 48: <span class="ruby-identifier">content</span> = <span class="ruby-ivar">@@static_files</span>[<span class="ruby-identifier">fn</span>][<span class="ruby-value">1</span>]
178
+ 49: <span class="ruby-keyword kw">else</span>
179
+ 50: <span class="ruby-identifier">content</span> = <span class="ruby-constant">IO</span>.<span class="ruby-identifier">read</span>(<span class="ruby-identifier">fn</span>).<span class="ruby-identifier">freeze</span>
180
+ 51: <span class="ruby-ivar">@@static_files</span>[<span class="ruby-identifier">fn</span>] = [<span class="ruby-identifier">etag</span>.<span class="ruby-identifier">freeze</span>, <span class="ruby-identifier">content</span>]
181
+ 52: <span class="ruby-keyword kw">end</span>
182
+ 53:
183
+ 54: <span class="ruby-identifier">send_response</span>(<span class="ruby-value">200</span>, <span class="ruby-ivar">@@mime_types</span>[<span class="ruby-constant">File</span>.<span class="ruby-identifier">extname</span>(<span class="ruby-identifier">fn</span>)], <span class="ruby-identifier">content</span>, <span class="ruby-identifier">stat</span>.<span class="ruby-identifier">size</span>,
184
+ 55: {<span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">ETag</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">etag</span>, <span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">CacheControl</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">MaxAge</span>})
185
+ 56: <span class="ruby-keyword kw">else</span>
186
+ 57: <span class="ruby-ivar">@conn</span> <span class="ruby-operator">&lt;&lt;</span> ((<span class="ruby-ivar">@persistent</span> <span class="ruby-operator">?</span> <span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">NotModifiedPersist</span> <span class="ruby-operator">:</span>
187
+ 58: <span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">NotModifiedClose</span>) <span class="ruby-operator">%</span> <span class="ruby-identifier">etag</span>)
188
+ 59: <span class="ruby-keyword kw">end</span>
189
+ 60: <span class="ruby-keyword kw">rescue</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
190
+ 61: <span class="ruby-identifier">send_response</span>(<span class="ruby-value">404</span>, <span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">TextPlain</span>, <span class="ruby-value str">'Error reading file.'</span>)
191
+ 62: <span class="ruby-keyword kw">end</span>
191
192
  </pre>
192
193
  </div>
193
194
  </div>
194
195
  </div>
195
196
 
196
- <div id="method-M000026" class="method-detail">
197
- <a name="M000026"></a>
197
+ <div id="method-M000027" class="method-detail">
198
+ <a name="M000027"></a>
198
199
 
199
200
  <div class="method-heading">
200
- <a href="#M000026" class="method-signature">
201
+ <a href="#M000027" class="method-signature">
201
202
  <span class="method-name">serve_static</span><span class="method-args">(path)</span>
202
203
  </a>
203
204
  </div>
@@ -206,20 +207,49 @@ rendered.
206
207
  <p>
207
208
  Serves static files and directory listings.
208
209
  </p>
210
+ <p><a class="source-toggle" href="#"
211
+ onclick="toggleCode('M000027-source');return false;">[Source]</a></p>
212
+ <div class="method-source-code" id="M000027-source">
213
+ <pre>
214
+ <span class="ruby-comment cmt"># File lib/serverside/static.rb, line 80</span>
215
+ 80: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">serve_static</span>(<span class="ruby-identifier">path</span>)
216
+ 81: <span class="ruby-keyword kw">if</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">file?</span>(<span class="ruby-identifier">path</span>)
217
+ 82: <span class="ruby-identifier">serve_file</span>(<span class="ruby-identifier">path</span>)
218
+ 83: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">serve_template</span>(<span class="ruby-identifier">path</span>)
219
+ 84: <span class="ruby-keyword kw">return</span>
220
+ 85: <span class="ruby-keyword kw">elsif</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">directory?</span>(<span class="ruby-identifier">path</span>)
221
+ 86: <span class="ruby-identifier">serve_dir</span>(<span class="ruby-identifier">path</span>)
222
+ 87: <span class="ruby-keyword kw">else</span>
223
+ 88: <span class="ruby-identifier">send_response</span>(<span class="ruby-value">404</span>, <span class="ruby-value str">'text'</span>, <span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">FileNotFound</span>)
224
+ 89: <span class="ruby-keyword kw">end</span>
225
+ 90: <span class="ruby-keyword kw">rescue</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
226
+ 91: <span class="ruby-identifier">send_response</span>(<span class="ruby-value">500</span>, <span class="ruby-value str">'text'</span>, <span class="ruby-identifier">e</span>.<span class="ruby-identifier">message</span>)
227
+ 92: <span class="ruby-keyword kw">end</span>
228
+ </pre>
229
+ </div>
230
+ </div>
231
+ </div>
232
+
233
+ <div id="method-M000026" class="method-detail">
234
+ <a name="M000026"></a>
235
+
236
+ <div class="method-heading">
237
+ <a href="#M000026" class="method-signature">
238
+ <span class="method-name">serve_template</span><span class="method-args">(fn, b = nil)</span>
239
+ </a>
240
+ </div>
241
+
242
+ <div class="method-description">
209
243
  <p><a class="source-toggle" href="#"
210
244
  onclick="toggleCode('M000026-source');return false;">[Source]</a></p>
211
245
  <div class="method-source-code" id="M000026-source">
212
246
  <pre>
213
- <span class="ruby-comment cmt"># File lib/serverside/static.rb, line 72</span>
214
- 72: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">serve_static</span>(<span class="ruby-identifier">path</span>)
215
- 73: <span class="ruby-keyword kw">if</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">file?</span>(<span class="ruby-identifier">path</span>)
216
- 74: <span class="ruby-identifier">serve_file</span>(<span class="ruby-identifier">path</span>)
217
- 75: <span class="ruby-keyword kw">elsif</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">directory?</span>(<span class="ruby-identifier">path</span>)
218
- 76: <span class="ruby-identifier">serve_dir</span>(<span class="ruby-identifier">path</span>)
219
- 77: <span class="ruby-keyword kw">else</span>
220
- 78: <span class="ruby-identifier">send_response</span>(<span class="ruby-value">404</span>, <span class="ruby-value str">'text'</span>, <span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">FileNotFound</span>)
221
- 79: <span class="ruby-keyword kw">end</span>
222
- 80: <span class="ruby-keyword kw">end</span>
247
+ <span class="ruby-comment cmt"># File lib/serverside/static.rb, line 73</span>
248
+ 73: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">serve_template</span>(<span class="ruby-identifier">fn</span>, <span class="ruby-identifier">b</span> = <span class="ruby-keyword kw">nil</span>)
249
+ 74: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">fn</span> <span class="ruby-operator">=~</span> <span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">RHTML</span>) <span class="ruby-operator">||</span> (<span class="ruby-constant">File</span>.<span class="ruby-identifier">file?</span>(<span class="ruby-identifier">fn</span> = <span class="ruby-identifier">fn</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'.rhtml'</span>))
250
+ 75: <span class="ruby-identifier">send_response</span>(<span class="ruby-value">200</span>, <span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">TextHTML</span>, <span class="ruby-constant">Template</span>.<span class="ruby-identifier">render</span>(<span class="ruby-identifier">fn</span>, <span class="ruby-identifier">b</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">binding</span>))
251
+ 76: <span class="ruby-keyword kw">end</span>
252
+ 77: <span class="ruby-keyword kw">end</span>
223
253
  </pre>
224
254
  </div>
225
255
  </div>