serverside 0.1.59 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. data/CHANGELOG +21 -1
  2. data/Rakefile +69 -40
  3. data/bin/serverside +7 -15
  4. data/doc/rdoc/classes/Daemon.html +18 -18
  5. data/doc/rdoc/classes/Daemon/Base.html +8 -6
  6. data/doc/rdoc/classes/Daemon/Cluster.html +36 -36
  7. data/doc/rdoc/classes/Daemon/Cluster/PidFile.html +20 -18
  8. data/doc/rdoc/classes/Daemon/PidFile.html +12 -12
  9. data/doc/rdoc/classes/Object.html +151 -0
  10. data/doc/rdoc/classes/Proc.html +151 -0
  11. data/doc/rdoc/classes/ServerSide.html +69 -0
  12. data/doc/rdoc/classes/ServerSide/Application.html +43 -11
  13. data/doc/rdoc/classes/ServerSide/Application/Base.html +30 -30
  14. data/doc/rdoc/classes/ServerSide/Application/Static.html +20 -18
  15. data/doc/rdoc/classes/ServerSide/Connection.html +3 -3
  16. data/doc/rdoc/classes/ServerSide/Connection/Base.html +142 -99
  17. data/doc/rdoc/classes/ServerSide/Connection/Const.html +11 -13
  18. data/doc/rdoc/classes/ServerSide/Connection/Router.html +464 -0
  19. data/doc/rdoc/classes/ServerSide/Server.html +8 -6
  20. data/doc/rdoc/classes/ServerSide/StaticFiles.html +75 -43
  21. data/doc/rdoc/classes/ServerSide/StaticFiles/Const.html +5 -0
  22. data/doc/rdoc/classes/String.html +20 -18
  23. data/doc/rdoc/classes/Symbol.html +2 -0
  24. data/doc/rdoc/created.rid +1 -1
  25. data/doc/rdoc/files/CHANGELOG.html +32 -2
  26. data/doc/rdoc/files/lib/serverside/application_rb.html +1 -1
  27. data/doc/rdoc/files/lib/serverside/connection_rb.html +1 -1
  28. data/doc/rdoc/files/lib/serverside/core_ext_rb.html +1 -1
  29. data/doc/rdoc/files/lib/serverside/daemon_rb.html +1 -1
  30. data/doc/rdoc/files/lib/serverside/routing_rb.html +101 -0
  31. data/doc/rdoc/files/lib/serverside/static_rb.html +1 -1
  32. data/doc/rdoc/fr_class_index.html +3 -1
  33. data/doc/rdoc/fr_file_index.html +1 -0
  34. data/doc/rdoc/fr_method_index.html +49 -33
  35. data/lib/serverside/application.rb +17 -4
  36. data/lib/serverside/connection.rb +23 -3
  37. data/lib/serverside/core_ext.rb +16 -1
  38. data/lib/serverside/routing.rb +119 -0
  39. data/lib/serverside/static.rb +9 -23
  40. data/test/functional/routing_server.rb +14 -0
  41. data/test/functional/routing_server_test.rb +41 -0
  42. data/test/functional/static_server_test.rb +8 -2
  43. data/test/unit/connection_test.rb +13 -0
  44. data/test/unit/core_ext_test.rb +14 -0
  45. data/test/unit/routing_test.rb +171 -0
  46. data/test/unit/static_test.rb +34 -1
  47. metadata +10 -3
  48. data/doc/rdoc/classes/ServerSide/Connection/Static.html +0 -172
@@ -65,7 +65,9 @@
65
65
  <tr class="top-aligned-row">
66
66
  <td><strong>Parent:</strong></td>
67
67
  <td>
68
+ <a href="../Object.html">
68
69
  Object
70
+ </a>
69
71
  </td>
70
72
  </tr>
71
73
  </table>
@@ -95,7 +97,7 @@ techniques.
95
97
  <h3 class="section-bar">Methods</h3>
96
98
 
97
99
  <div class="name-list">
98
- <a href="#M000034">new</a>&nbsp;&nbsp;
100
+ <a href="#M000050">new</a>&nbsp;&nbsp;
99
101
  </div>
100
102
  </div>
101
103
 
@@ -117,11 +119,11 @@ techniques.
117
119
  <div id="methods">
118
120
  <h3 class="section-bar">Public Class methods</h3>
119
121
 
120
- <div id="method-M000034" class="method-detail">
121
- <a name="M000034"></a>
122
+ <div id="method-M000050" class="method-detail">
123
+ <a name="M000050"></a>
122
124
 
123
125
  <div class="method-heading">
124
- <a href="#M000034" class="method-signature">
126
+ <a href="#M000050" class="method-signature">
125
127
  <span class="method-name">new</span><span class="method-args">(host, port, connection_class)</span>
126
128
  </a>
127
129
  </div>
@@ -133,8 +135,8 @@ loop. When a new connection is accepted, a new instance of the the supplied
133
135
  connection class is instantiated and passed the connection for processing.
134
136
  </p>
135
137
  <p><a class="source-toggle" href="#"
136
- onclick="toggleCode('M000034-source');return false;">[Source]</a></p>
137
- <div class="method-source-code" id="M000034-source">
138
+ onclick="toggleCode('M000050-source');return false;">[Source]</a></p>
139
+ <div class="method-source-code" id="M000050-source">
138
140
  <pre>
139
141
  <span class="ruby-comment cmt"># File lib/serverside/server.rb, line 12</span>
140
142
  12: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">host</span>, <span class="ruby-identifier">port</span>, <span class="ruby-identifier">connection_class</span>)
@@ -75,8 +75,7 @@
75
75
  <div id="description">
76
76
  <p>
77
77
  This module provides functionality for serving files and directory listings
78
- over HTTP. It is mainly used by <a
79
- href="Connection/Static.html">ServerSide::Connection::Static</a>.
78
+ over HTTP. It is mainly used by ServerSide::Connection::Static.
80
79
  </p>
81
80
 
82
81
  </div>
@@ -88,8 +87,9 @@ href="Connection/Static.html">ServerSide::Connection::Static</a>.
88
87
  <h3 class="section-bar">Methods</h3>
89
88
 
90
89
  <div class="name-list">
91
- <a href="#M000021">serve_dir</a>&nbsp;&nbsp;
92
- <a href="#M000020">serve_file</a>&nbsp;&nbsp;
90
+ <a href="#M000025">serve_dir</a>&nbsp;&nbsp;
91
+ <a href="#M000024">serve_file</a>&nbsp;&nbsp;
92
+ <a href="#M000026">serve_static</a>&nbsp;&nbsp;
93
93
  </div>
94
94
  </div>
95
95
 
@@ -117,11 +117,11 @@ href="Connection/Static.html">ServerSide::Connection::Static</a>.
117
117
  <div id="methods">
118
118
  <h3 class="section-bar">Public Instance methods</h3>
119
119
 
120
- <div id="method-M000021" class="method-detail">
121
- <a name="M000021"></a>
120
+ <div id="method-M000025" class="method-detail">
121
+ <a name="M000025"></a>
122
122
 
123
123
  <div class="method-heading">
124
- <a href="#M000021" class="method-signature">
124
+ <a href="#M000025" class="method-signature">
125
125
  <span class="method-name">serve_dir</span><span class="method-args">(dir)</span>
126
126
  </a>
127
127
  </div>
@@ -131,27 +131,27 @@ href="Connection/Static.html">ServerSide::Connection::Static</a>.
131
131
  Serves a directory listing over HTTP in the form of an HTML page.
132
132
  </p>
133
133
  <p><a class="source-toggle" href="#"
134
- onclick="toggleCode('M000021-source');return false;">[Source]</a></p>
135
- <div class="method-source-code" id="M000021-source">
134
+ onclick="toggleCode('M000025-source');return false;">[Source]</a></p>
135
+ <div class="method-source-code" id="M000025-source">
136
136
  <pre>
137
- <span class="ruby-comment cmt"># File lib/serverside/static.rb, line 62</span>
138
- 62: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">serve_dir</span>(<span class="ruby-identifier">dir</span>)
139
- 63: <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
- 64: <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
- 65: (<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
- 66: } <span class="ruby-operator">+</span> <span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">DirListingStop</span>
143
- 67: <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
- 68: <span class="ruby-keyword kw">end</span>
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>
145
145
  </pre>
146
146
  </div>
147
147
  </div>
148
148
  </div>
149
149
 
150
- <div id="method-M000020" class="method-detail">
151
- <a name="M000020"></a>
150
+ <div id="method-M000024" class="method-detail">
151
+ <a name="M000024"></a>
152
152
 
153
153
  <div class="method-heading">
154
- <a href="#M000020" class="method-signature">
154
+ <a href="#M000024" class="method-signature">
155
155
  <span class="method-name">serve_file</span><span class="method-args">(fn)</span>
156
156
  </a>
157
157
  </div>
@@ -164,30 +164,62 @@ the file&#8217;s current ETag. If there&#8217;s a match, a 304 response is
164
164
  rendered.
165
165
  </p>
166
166
  <p><a class="source-toggle" href="#"
167
- onclick="toggleCode('M000020-source');return false;">[Source]</a></p>
168
- <div class="method-source-code" id="M000020-source">
167
+ onclick="toggleCode('M000024-source');return false;">[Source]</a></p>
168
+ <div class="method-source-code" id="M000024-source">
169
169
  <pre>
170
- <span class="ruby-comment cmt"># File lib/serverside/static.rb, line 40</span>
171
- 40: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">serve_file</span>(<span class="ruby-identifier">fn</span>)
172
- 41: <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
- 42: <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
- 43: <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
- 44: <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
- 45: <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
- 46: <span class="ruby-keyword kw">else</span>
178
- 47: <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
- 48: <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
- 49: <span class="ruby-keyword kw">end</span>
181
- 50:
182
- 51: <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
- 52: {<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
- 53: <span class="ruby-keyword kw">else</span>
185
- 54: <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
- 55: <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
- 56: <span class="ruby-keyword kw">end</span>
188
- 57: <span class="ruby-keyword kw">rescue</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
189
- 58: <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
- 59: <span class="ruby-keyword kw">end</span>
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>
191
+ </pre>
192
+ </div>
193
+ </div>
194
+ </div>
195
+
196
+ <div id="method-M000026" class="method-detail">
197
+ <a name="M000026"></a>
198
+
199
+ <div class="method-heading">
200
+ <a href="#M000026" class="method-signature">
201
+ <span class="method-name">serve_static</span><span class="method-args">(path)</span>
202
+ </a>
203
+ </div>
204
+
205
+ <div class="method-description">
206
+ <p>
207
+ Serves static files and directory listings.
208
+ </p>
209
+ <p><a class="source-toggle" href="#"
210
+ onclick="toggleCode('M000026-source');return false;">[Source]</a></p>
211
+ <div class="method-source-code" id="M000026-source">
212
+ <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>
191
223
  </pre>
192
224
  </div>
193
225
  </div>
@@ -156,6 +156,11 @@ Frozen constants to be used by the module.
156
156
  <td>=</td>
157
157
  <td class="context-item-value">'&lt;/body&gt;&lt;/html&gt;'.freeze</td>
158
158
  </tr>
159
+ <tr class="top-aligned-row context-row">
160
+ <td class="context-item-name">FileNotFound</td>
161
+ <td>=</td>
162
+ <td class="context-item-value">'File not found.'.freeze</td>
163
+ </tr>
159
164
  </table>
160
165
  </div>
161
166
  </div>
@@ -65,7 +65,9 @@
65
65
  <tr class="top-aligned-row">
66
66
  <td><strong>Parent:</strong></td>
67
67
  <td>
68
+ <a href="Object.html">
68
69
  Object
70
+ </a>
69
71
  </td>
70
72
  </tr>
71
73
  </table>
@@ -92,9 +94,9 @@
92
94
  <h3 class="section-bar">Methods</h3>
93
95
 
94
96
  <div class="name-list">
95
- <a href="#M000004">/</a>&nbsp;&nbsp;
96
- <a href="#M000002">uri_escape</a>&nbsp;&nbsp;
97
- <a href="#M000003">uri_unescape</a>&nbsp;&nbsp;
97
+ <a href="#M000006">/</a>&nbsp;&nbsp;
98
+ <a href="#M000004">uri_escape</a>&nbsp;&nbsp;
99
+ <a href="#M000005">uri_unescape</a>&nbsp;&nbsp;
98
100
  </div>
99
101
  </div>
100
102
 
@@ -116,11 +118,11 @@
116
118
  <div id="methods">
117
119
  <h3 class="section-bar">Public Instance methods</h3>
118
120
 
119
- <div id="method-M000004" class="method-detail">
120
- <a name="M000004"></a>
121
+ <div id="method-M000006" class="method-detail">
122
+ <a name="M000006"></a>
121
123
 
122
124
  <div class="method-heading">
123
- <a href="#M000004" class="method-signature">
125
+ <a href="#M000006" class="method-signature">
124
126
  <span class="method-name">/</span><span class="method-args">(o)</span>
125
127
  </a>
126
128
  </div>
@@ -130,8 +132,8 @@
130
132
  Concatenates a path (do we really need this sugar?)
131
133
  </p>
132
134
  <p><a class="source-toggle" href="#"
133
- onclick="toggleCode('M000004-source');return false;">[Source]</a></p>
134
- <div class="method-source-code" id="M000004-source">
135
+ onclick="toggleCode('M000006-source');return false;">[Source]</a></p>
136
+ <div class="method-source-code" id="M000006-source">
135
137
  <pre>
136
138
  <span class="ruby-comment cmt"># File lib/serverside/core_ext.rb, line 15</span>
137
139
  15: <span class="ruby-keyword kw">def</span> <span class="ruby-operator">/</span>(<span class="ruby-identifier">o</span>)
@@ -142,11 +144,11 @@ Concatenates a path (do we really need this sugar?)
142
144
  </div>
143
145
  </div>
144
146
 
145
- <div id="method-M000002" class="method-detail">
146
- <a name="M000002"></a>
147
+ <div id="method-M000004" class="method-detail">
148
+ <a name="M000004"></a>
147
149
 
148
150
  <div class="method-heading">
149
- <a href="#M000002" class="method-signature">
151
+ <a href="#M000004" class="method-signature">
150
152
  <span class="method-name">uri_escape</span><span class="method-args">()</span>
151
153
  </a>
152
154
  </div>
@@ -156,8 +158,8 @@ Concatenates a path (do we really need this sugar?)
156
158
  Encodes a normal string to a URI string.
157
159
  </p>
158
160
  <p><a class="source-toggle" href="#"
159
- onclick="toggleCode('M000002-source');return false;">[Source]</a></p>
160
- <div class="method-source-code" id="M000002-source">
161
+ onclick="toggleCode('M000004-source');return false;">[Source]</a></p>
162
+ <div class="method-source-code" id="M000004-source">
161
163
  <pre>
162
164
  <span class="ruby-comment cmt"># File lib/serverside/core_ext.rb, line 4</span>
163
165
  4: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">uri_escape</span>
@@ -169,11 +171,11 @@ Encodes a normal string to a URI string.
169
171
  </div>
170
172
  </div>
171
173
 
172
- <div id="method-M000003" class="method-detail">
173
- <a name="M000003"></a>
174
+ <div id="method-M000005" class="method-detail">
175
+ <a name="M000005"></a>
174
176
 
175
177
  <div class="method-heading">
176
- <a href="#M000003" class="method-signature">
178
+ <a href="#M000005" class="method-signature">
177
179
  <span class="method-name">uri_unescape</span><span class="method-args">()</span>
178
180
  </a>
179
181
  </div>
@@ -183,8 +185,8 @@ Encodes a normal string to a URI string.
183
185
  Decodes a URI string to a normal string.
184
186
  </p>
185
187
  <p><a class="source-toggle" href="#"
186
- onclick="toggleCode('M000003-source');return false;">[Source]</a></p>
187
- <div class="method-source-code" id="M000003-source">
188
+ onclick="toggleCode('M000005-source');return false;">[Source]</a></p>
189
+ <div class="method-source-code" id="M000005-source">
188
190
  <pre>
189
191
  <span class="ruby-comment cmt"># File lib/serverside/core_ext.rb, line 10</span>
190
192
  10: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">uri_unescape</span>
@@ -65,7 +65,9 @@
65
65
  <tr class="top-aligned-row">
66
66
  <td><strong>Parent:</strong></td>
67
67
  <td>
68
+ <a href="Object.html">
68
69
  Object
70
+ </a>
69
71
  </td>
70
72
  </tr>
71
73
  </table>
data/doc/rdoc/created.rid CHANGED
@@ -1 +1 @@
1
- Tue Aug 22 15:21:30 IDT 2006
1
+ Mon Aug 28 10:58:48 IDT 2006
@@ -56,7 +56,7 @@
56
56
  </tr>
57
57
  <tr class="top-aligned-row">
58
58
  <td><strong>Last Update:</strong></td>
59
- <td>Mon Aug 21 12:45:07 IDT 2006</td>
59
+ <td>Mon Aug 28 10:58:09 IDT 2006</td>
60
60
  </tr>
61
61
  </table>
62
62
  </div>
@@ -70,9 +70,39 @@
70
70
 
71
71
  <div id="description">
72
72
  <p>
73
- <b>SVN</b>
73
+ *0.2.0*
74
74
  </p>
75
75
  <ul>
76
+ <li>Changed substition of embedded parameters from (.*) to (.+).
77
+
78
+ </li>
79
+ <li>Added rule compilation after setting the default handler.
80
+
81
+ </li>
82
+ <li>Added doc_rforge rake task (for updating the docs on rubyforge.org).
83
+
84
+ </li>
85
+ <li>Added stats and svn_add rake tasks.
86
+
87
+ </li>
88
+ <li>Fixed routing unit tests.
89
+
90
+ </li>
91
+ <li>Added Router.has_routes? method.
92
+
93
+ </li>
94
+ <li>Finished unit tests for routing.
95
+
96
+ </li>
97
+ <li>Added Connection::Base.redirect.
98
+
99
+ </li>
100
+ <li>Added routing code from /research/routing, implemented functional test.
101
+
102
+ </li>
103
+ <li>Learned about the (?:) modifier and fixed the request parsing regexp.
104
+
105
+ </li>
76
106
  <li>Added a profiled version of a static server -
77
107
  /test/functional/static_profile.rb.
78
108
 
@@ -56,7 +56,7 @@
56
56
  </tr>
57
57
  <tr class="top-aligned-row">
58
58
  <td><strong>Last Update:</strong></td>
59
- <td>Sun Aug 20 11:03:02 IDT 2006</td>
59
+ <td>Mon Aug 28 10:19:06 IDT 2006</td>
60
60
  </tr>
61
61
  </table>
62
62
  </div>
@@ -56,7 +56,7 @@
56
56
  </tr>
57
57
  <tr class="top-aligned-row">
58
58
  <td><strong>Last Update:</strong></td>
59
- <td>Mon Aug 21 11:23:54 IDT 2006</td>
59
+ <td>Sun Aug 27 10:06:32 IDT 2006</td>
60
60
  </tr>
61
61
  </table>
62
62
  </div>
@@ -56,7 +56,7 @@
56
56
  </tr>
57
57
  <tr class="top-aligned-row">
58
58
  <td><strong>Last Update:</strong></td>
59
- <td>Sun Aug 20 08:47:12 IDT 2006</td>
59
+ <td>Sun Aug 27 10:06:32 IDT 2006</td>
60
60
  </tr>
61
61
  </table>
62
62
  </div>
@@ -56,7 +56,7 @@
56
56
  </tr>
57
57
  <tr class="top-aligned-row">
58
58
  <td><strong>Last Update:</strong></td>
59
- <td>Sun Aug 20 14:48:52 IDT 2006</td>
59
+ <td>Mon Aug 28 10:38:28 IDT 2006</td>
60
60
  </tr>
61
61
  </table>
62
62
  </div>
@@ -0,0 +1,101 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7
+ <head>
8
+ <title>File: routing.rb</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
+ <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
12
+ <script type="text/javascript">
13
+ // <![CDATA[
14
+
15
+ function popupCode( url ) {
16
+ window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
17
+ }
18
+
19
+ function toggleCode( id ) {
20
+ if ( document.getElementById )
21
+ elem = document.getElementById( id );
22
+ else if ( document.all )
23
+ elem = eval( "document.all." + id );
24
+ else
25
+ return false;
26
+
27
+ elemStyle = elem.style;
28
+
29
+ if ( elemStyle.display != "block" ) {
30
+ elemStyle.display = "block"
31
+ } else {
32
+ elemStyle.display = "none"
33
+ }
34
+
35
+ return true;
36
+ }
37
+
38
+ // Make codeblocks hidden by default
39
+ document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
40
+
41
+ // ]]>
42
+ </script>
43
+
44
+ </head>
45
+ <body>
46
+
47
+
48
+
49
+ <div id="fileHeader">
50
+ <h1>routing.rb</h1>
51
+ <table class="header-table">
52
+ <tr class="top-aligned-row">
53
+ <td><strong>Path:</strong></td>
54
+ <td>lib/serverside/routing.rb
55
+ </td>
56
+ </tr>
57
+ <tr class="top-aligned-row">
58
+ <td><strong>Last Update:</strong></td>
59
+ <td>Mon Aug 28 10:43:50 IDT 2006</td>
60
+ </tr>
61
+ </table>
62
+ </div>
63
+ <!-- banner header -->
64
+
65
+ <div id="bodyContent">
66
+
67
+
68
+
69
+ <div id="contextContent">
70
+
71
+
72
+
73
+ </div>
74
+
75
+
76
+ </div>
77
+
78
+
79
+ <!-- if includes -->
80
+
81
+ <div id="section">
82
+
83
+
84
+
85
+
86
+
87
+
88
+
89
+
90
+ <!-- if method_list -->
91
+
92
+
93
+ </div>
94
+
95
+
96
+ <div id="validator-badges">
97
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
98
+ </div>
99
+
100
+ </body>
101
+ </html>