mongrel 0.2.2 → 0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. data/README +27 -25
  2. data/Rakefile +2 -3
  3. data/bin/mongrel_rails +114 -0
  4. data/doc/rdoc/classes/Mongrel.html +30 -0
  5. data/doc/rdoc/classes/Mongrel.src/M000001.html +18 -0
  6. data/doc/rdoc/classes/Mongrel/Const.html +2 -2
  7. data/doc/rdoc/classes/Mongrel/DirHandler.html +84 -21
  8. data/doc/rdoc/classes/Mongrel/DirHandler.src/M000009.html +7 -18
  9. data/doc/rdoc/classes/Mongrel/DirHandler.src/M000010.html +26 -9
  10. data/doc/rdoc/classes/Mongrel/DirHandler.src/M000011.html +27 -26
  11. data/doc/rdoc/classes/Mongrel/DirHandler.src/M000012.html +31 -0
  12. data/doc/rdoc/classes/Mongrel/DirHandler.src/M000013.html +38 -0
  13. data/doc/rdoc/classes/Mongrel/Error404Handler.html +10 -10
  14. data/doc/rdoc/classes/Mongrel/Error404Handler.src/{M000028.html → M000033.html} +4 -4
  15. data/doc/rdoc/classes/Mongrel/Error404Handler.src/{M000029.html → M000034.html} +4 -4
  16. data/doc/rdoc/classes/Mongrel/HeaderOut.html +10 -10
  17. data/doc/rdoc/classes/Mongrel/HeaderOut.src/{M000017.html → M000019.html} +4 -4
  18. data/doc/rdoc/classes/Mongrel/HeaderOut.src/{M000018.html → M000020.html} +7 -7
  19. data/doc/rdoc/classes/Mongrel/HttpHandler.html +5 -5
  20. data/doc/rdoc/classes/Mongrel/HttpHandler.src/{M000023.html → M000025.html} +3 -3
  21. data/doc/rdoc/classes/Mongrel/HttpParser.html +35 -35
  22. data/doc/rdoc/classes/Mongrel/HttpParser.src/M000002.html +5 -6
  23. data/doc/rdoc/classes/Mongrel/HttpParser.src/M000003.html +7 -7
  24. data/doc/rdoc/classes/Mongrel/HttpParser.src/M000004.html +8 -20
  25. data/doc/rdoc/classes/Mongrel/HttpParser.src/M000005.html +20 -6
  26. data/doc/rdoc/classes/Mongrel/HttpParser.src/M000006.html +5 -5
  27. data/doc/rdoc/classes/Mongrel/HttpParser.src/M000007.html +5 -6
  28. data/doc/rdoc/classes/Mongrel/HttpParser.src/{M000001.html → M000008.html} +6 -6
  29. data/doc/rdoc/classes/Mongrel/HttpRequest.html +5 -5
  30. data/doc/rdoc/classes/Mongrel/HttpRequest.src/{M000030.html → M000035.html} +17 -17
  31. data/doc/rdoc/classes/Mongrel/HttpResponse.html +66 -21
  32. data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000026.html +8 -6
  33. data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000027.html +7 -12
  34. data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000028.html +19 -0
  35. data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000029.html +18 -0
  36. data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000030.html +20 -0
  37. data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000031.html +21 -0
  38. data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000032.html +20 -0
  39. data/doc/rdoc/classes/Mongrel/HttpServer.html +28 -28
  40. data/doc/rdoc/classes/Mongrel/HttpServer.src/M000014.html +18 -10
  41. data/doc/rdoc/classes/Mongrel/HttpServer.src/M000015.html +51 -5
  42. data/doc/rdoc/classes/Mongrel/HttpServer.src/M000016.html +9 -4
  43. data/doc/rdoc/classes/Mongrel/HttpServer.src/M000017.html +18 -0
  44. data/doc/rdoc/classes/Mongrel/HttpServer.src/M000018.html +18 -0
  45. data/doc/rdoc/classes/Mongrel/URIClassifier.html +31 -21
  46. data/doc/rdoc/classes/Mongrel/URIClassifier.src/M000021.html +18 -15
  47. data/doc/rdoc/classes/Mongrel/URIClassifier.src/M000022.html +25 -42
  48. data/doc/rdoc/classes/Mongrel/URIClassifier.src/M000023.html +36 -0
  49. data/doc/rdoc/classes/Mongrel/URIClassifier.src/M000024.html +84 -0
  50. data/doc/rdoc/created.rid +1 -1
  51. data/doc/rdoc/files/README.html +32 -42
  52. data/doc/rdoc/files/ext/http11/http11_c.html +1 -1
  53. data/doc/rdoc/files/lib/mongrel_rb.html +1 -1
  54. data/doc/rdoc/fr_method_index.html +35 -30
  55. data/examples/simpletest.rb +16 -6
  56. data/ext/http11/http11.c +19 -3
  57. data/ext/http11/tst_search.c +2 -3
  58. data/lib/mongrel.rb +108 -20
  59. data/test/test_uriclassifier.rb +22 -1
  60. metadata +25 -19
  61. data/doc/rdoc/classes/Mongrel/DirHandler.src/M000008.html +0 -20
  62. data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000024.html +0 -21
  63. data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000025.html +0 -20
  64. data/doc/rdoc/classes/Mongrel/HttpServer.src/M000012.html +0 -31
  65. data/doc/rdoc/classes/Mongrel/HttpServer.src/M000013.html +0 -64
  66. data/doc/rdoc/classes/Mongrel/URIClassifier.src/M000019.html +0 -39
  67. data/doc/rdoc/classes/Mongrel/URIClassifier.src/M000020.html +0 -51
  68. data/lib/#mongrel.rb# +0 -493
@@ -5,25 +5,24 @@
5
5
 
6
6
  <html>
7
7
  <head>
8
- <title>reset (Mongrel::HttpParser)</title>
8
+ <title>new (Mongrel::HttpParser)</title>
9
9
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
10
  <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
11
11
  </head>
12
12
  <body class="standalone-code">
13
13
  <pre>/**
14
14
  * call-seq:
15
- * parser.reset -&gt; nil
15
+ * parser.new -&gt; parser
16
16
  *
17
- * Resets the parser to it's initial state so that you can reuse it
18
- * rather than making new ones.
17
+ * Creates a new parser.
19
18
  */
20
- VALUE HttpParser_reset(VALUE self)
19
+ VALUE HttpParser_init(VALUE self)
21
20
  {
22
21
  http_parser *http = NULL;
23
22
  DATA_GET(self, http_parser, http);
24
23
  http_parser_init(http);
25
24
 
26
- return Qnil;
25
+ return self;
27
26
  }</pre>
28
27
  </body>
29
28
  </html>
@@ -5,25 +5,25 @@
5
5
 
6
6
  <html>
7
7
  <head>
8
- <title>finish (Mongrel::HttpParser)</title>
8
+ <title>reset (Mongrel::HttpParser)</title>
9
9
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
10
  <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
11
11
  </head>
12
12
  <body class="standalone-code">
13
13
  <pre>/**
14
14
  * call-seq:
15
- * parser.finish -&gt; true/false
15
+ * parser.reset -&gt; nil
16
16
  *
17
- * Finishes a parser early which could put in a &quot;good&quot; or bad state.
18
- * You should call reset after finish it or bad things will happen.
17
+ * Resets the parser to it's initial state so that you can reuse it
18
+ * rather than making new ones.
19
19
  */
20
- VALUE HttpParser_finish(VALUE self)
20
+ VALUE HttpParser_reset(VALUE self)
21
21
  {
22
22
  http_parser *http = NULL;
23
23
  DATA_GET(self, http_parser, http);
24
- http_parser_finish(http);
24
+ http_parser_init(http);
25
25
 
26
- return http_parser_is_finished(http) ? Qtrue : Qfalse;
26
+ return Qnil;
27
27
  }</pre>
28
28
  </body>
29
29
  </html>
@@ -5,37 +5,25 @@
5
5
 
6
6
  <html>
7
7
  <head>
8
- <title>execute (Mongrel::HttpParser)</title>
8
+ <title>finish (Mongrel::HttpParser)</title>
9
9
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
10
  <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
11
11
  </head>
12
12
  <body class="standalone-code">
13
13
  <pre>/**
14
14
  * call-seq:
15
- * parser.execute(req_hash, data) -&gt; Integer
15
+ * parser.finish -&gt; true/false
16
16
  *
17
- * Takes a Hash and a String of data, parses the String of data filling in the Hash
18
- * returning an Integer to indicate how much of the data has been read. No matter
19
- * what the return value, you should call HttpParser#finished? and HttpParser#error?
20
- * to figure out if it's done parsing or there was an error.
21
- *
22
- * This function now throws an exception when there is a parsing error. This makes
23
- * the logic for working with the parser much easier. You can still test for an
24
- * error, but now you need to wrap the parser with an exception handling block.
17
+ * Finishes a parser early which could put in a &quot;good&quot; or bad state.
18
+ * You should call reset after finish it or bad things will happen.
25
19
  */
26
- VALUE HttpParser_execute(VALUE self, VALUE req_hash, VALUE data)
20
+ VALUE HttpParser_finish(VALUE self)
27
21
  {
28
22
  http_parser *http = NULL;
29
23
  DATA_GET(self, http_parser, http);
30
-
31
- http-&gt;data = (void *)req_hash;
32
- http_parser_execute(http, RSTRING(data)-&gt;ptr, RSTRING(data)-&gt;len);
33
-
34
- if(http_parser_has_error(http)) {
35
- rb_raise(rb_eStandardError, &quot;HTTP Parsing failure&quot;);
36
- } else {
37
- return INT2FIX(http_parser_nread(http));
38
- }
24
+ http_parser_finish(http);
25
+
26
+ return http_parser_is_finished(http) ? Qtrue : Qfalse;
39
27
  }</pre>
40
28
  </body>
41
29
  </html>
@@ -5,23 +5,37 @@
5
5
 
6
6
  <html>
7
7
  <head>
8
- <title>error? (Mongrel::HttpParser)</title>
8
+ <title>execute (Mongrel::HttpParser)</title>
9
9
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
10
  <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
11
11
  </head>
12
12
  <body class="standalone-code">
13
13
  <pre>/**
14
14
  * call-seq:
15
- * parser.error? -&gt; true/false
15
+ * parser.execute(req_hash, data) -&gt; Integer
16
16
  *
17
- * Tells you whether the parser is in an error state.
17
+ * Takes a Hash and a String of data, parses the String of data filling in the Hash
18
+ * returning an Integer to indicate how much of the data has been read. No matter
19
+ * what the return value, you should call HttpParser#finished? and HttpParser#error?
20
+ * to figure out if it's done parsing or there was an error.
21
+ *
22
+ * This function now throws an exception when there is a parsing error. This makes
23
+ * the logic for working with the parser much easier. You can still test for an
24
+ * error, but now you need to wrap the parser with an exception handling block.
18
25
  */
19
- VALUE HttpParser_has_error(VALUE self)
26
+ VALUE HttpParser_execute(VALUE self, VALUE req_hash, VALUE data)
20
27
  {
21
28
  http_parser *http = NULL;
22
29
  DATA_GET(self, http_parser, http);
23
-
24
- return http_parser_has_error(http) ? Qtrue : Qfalse;
30
+
31
+ http-&gt;data = (void *)req_hash;
32
+ http_parser_execute(http, RSTRING(data)-&gt;ptr, RSTRING(data)-&gt;len);
33
+
34
+ if(http_parser_has_error(http)) {
35
+ rb_raise(rb_eStandardError, &quot;HTTP Parsing failure&quot;);
36
+ } else {
37
+ return INT2FIX(http_parser_nread(http));
38
+ }
25
39
  }</pre>
26
40
  </body>
27
41
  </html>
@@ -5,23 +5,23 @@
5
5
 
6
6
  <html>
7
7
  <head>
8
- <title>finished? (Mongrel::HttpParser)</title>
8
+ <title>error? (Mongrel::HttpParser)</title>
9
9
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
10
  <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
11
11
  </head>
12
12
  <body class="standalone-code">
13
13
  <pre>/**
14
14
  * call-seq:
15
- * parser.finished? -&gt; true/false
15
+ * parser.error? -&gt; true/false
16
16
  *
17
- * Tells you whether the parser is finished or not and in a good state.
17
+ * Tells you whether the parser is in an error state.
18
18
  */
19
- VALUE HttpParser_is_finished(VALUE self)
19
+ VALUE HttpParser_has_error(VALUE self)
20
20
  {
21
21
  http_parser *http = NULL;
22
22
  DATA_GET(self, http_parser, http);
23
23
 
24
- return http_parser_is_finished(http) ? Qtrue : Qfalse;
24
+ return http_parser_has_error(http) ? Qtrue : Qfalse;
25
25
  }</pre>
26
26
  </body>
27
27
  </html>
@@ -5,24 +5,23 @@
5
5
 
6
6
  <html>
7
7
  <head>
8
- <title>nread (Mongrel::HttpParser)</title>
8
+ <title>finished? (Mongrel::HttpParser)</title>
9
9
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
10
  <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
11
11
  </head>
12
12
  <body class="standalone-code">
13
13
  <pre>/**
14
14
  * call-seq:
15
- * parser.nread -&gt; Integer
15
+ * parser.finished? -&gt; true/false
16
16
  *
17
- * Returns the amount of data processed so far during this processing cycle. It is
18
- * set to 0 on initialize or reset calls and is incremented each time execute is called.
17
+ * Tells you whether the parser is finished or not and in a good state.
19
18
  */
20
- VALUE HttpParser_nread(VALUE self)
19
+ VALUE HttpParser_is_finished(VALUE self)
21
20
  {
22
21
  http_parser *http = NULL;
23
22
  DATA_GET(self, http_parser, http);
24
23
 
25
- return INT2FIX(http-&gt;nread);
24
+ return http_parser_is_finished(http) ? Qtrue : Qfalse;
26
25
  }</pre>
27
26
  </body>
28
27
  </html>
@@ -5,24 +5,24 @@
5
5
 
6
6
  <html>
7
7
  <head>
8
- <title>new (Mongrel::HttpParser)</title>
8
+ <title>nread (Mongrel::HttpParser)</title>
9
9
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
10
  <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
11
11
  </head>
12
12
  <body class="standalone-code">
13
13
  <pre>/**
14
14
  * call-seq:
15
- * parser.new -&gt; parser
15
+ * parser.nread -&gt; Integer
16
16
  *
17
- * Creates a new parser.
17
+ * Returns the amount of data processed so far during this processing cycle. It is
18
+ * set to 0 on initialize or reset calls and is incremented each time execute is called.
18
19
  */
19
- VALUE HttpParser_init(VALUE self)
20
+ VALUE HttpParser_nread(VALUE self)
20
21
  {
21
22
  http_parser *http = NULL;
22
23
  DATA_GET(self, http_parser, http);
23
- http_parser_init(http);
24
24
 
25
- return self;
25
+ return INT2FIX(http-&gt;nread);
26
26
  }</pre>
27
27
  </body>
28
28
  </html>
@@ -103,7 +103,7 @@ efficiently handling large file uploads.
103
103
  <h3 class="section-bar">Methods</h3>
104
104
 
105
105
  <div class="name-list">
106
- <a href="#M000030">new</a>&nbsp;&nbsp;
106
+ <a href="#M000035">new</a>&nbsp;&nbsp;
107
107
  </div>
108
108
  </div>
109
109
 
@@ -143,12 +143,12 @@ efficiently handling large file uploads.
143
143
  <div id="methods">
144
144
  <h3 class="section-bar">Public Class methods</h3>
145
145
 
146
- <div id="method-M000030" class="method-detail">
147
- <a name="M000030"></a>
146
+ <div id="method-M000035" class="method-detail">
147
+ <a name="M000035"></a>
148
148
 
149
149
  <div class="method-heading">
150
- <a href="HttpRequest.src/M000030.html" target="Code" class="method-signature"
151
- onclick="popupCode('HttpRequest.src/M000030.html');return false;">
150
+ <a href="HttpRequest.src/M000035.html" target="Code" class="method-signature"
151
+ onclick="popupCode('HttpRequest.src/M000035.html');return false;">
152
152
  <span class="method-name">new</span><span class="method-args">(params, initial_body, socket)</span>
153
153
  </a>
154
154
  </div>
@@ -10,22 +10,22 @@
10
10
  <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
11
11
  </head>
12
12
  <body class="standalone-code">
13
- <pre> <span class="ruby-comment cmt"># File lib/mongrel.rb, line 140</span>
14
- 140: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">params</span>, <span class="ruby-identifier">initial_body</span>, <span class="ruby-identifier">socket</span>)
15
- 141: <span class="ruby-ivar">@body</span> = <span class="ruby-identifier">initial_body</span> <span class="ruby-operator">||</span> <span class="ruby-value str">&quot;&quot;</span>
16
- 142: <span class="ruby-ivar">@params</span> = <span class="ruby-identifier">params</span>
17
- 143: <span class="ruby-ivar">@socket</span> = <span class="ruby-identifier">socket</span>
18
- 144:
19
- 145: <span class="ruby-comment cmt"># fix up the CGI requirements</span>
20
- 146: <span class="ruby-identifier">params</span>[<span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">CONTENT_LENGTH</span>] = <span class="ruby-identifier">params</span>[<span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">HTTP_CONTENT_LENGTH</span>] <span class="ruby-operator">||</span> <span class="ruby-value">0</span>
21
- 147: <span class="ruby-identifier">params</span>[<span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">CONTENT_TYPE</span>] <span class="ruby-operator">||=</span> <span class="ruby-identifier">params</span>[<span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">HTTP_CONTENT_TYPE</span>]
22
- 148:
23
- 149: <span class="ruby-comment cmt"># now, if the initial_body isn't long enough for the content length we have to fill it</span>
24
- 150: <span class="ruby-comment cmt"># TODO: adapt for big ass stuff by writing to a temp file</span>
25
- 151: <span class="ruby-identifier">clen</span> = <span class="ruby-identifier">params</span>[<span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">HTTP_CONTENT_LENGTH</span>].<span class="ruby-identifier">to_i</span>
26
- 152: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@body</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">clen</span>
27
- 153: <span class="ruby-ivar">@body</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">read</span>(<span class="ruby-identifier">clen</span> <span class="ruby-operator">-</span> <span class="ruby-ivar">@body</span>.<span class="ruby-identifier">length</span>)
28
- 154: <span class="ruby-keyword kw">end</span>
29
- 155: <span class="ruby-keyword kw">end</span></pre>
13
+ <pre> <span class="ruby-comment cmt"># File lib/mongrel.rb, line 142</span>
14
+ 142: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">params</span>, <span class="ruby-identifier">initial_body</span>, <span class="ruby-identifier">socket</span>)
15
+ 143: <span class="ruby-ivar">@body</span> = <span class="ruby-identifier">initial_body</span> <span class="ruby-operator">||</span> <span class="ruby-value str">&quot;&quot;</span>
16
+ 144: <span class="ruby-ivar">@params</span> = <span class="ruby-identifier">params</span>
17
+ 145: <span class="ruby-ivar">@socket</span> = <span class="ruby-identifier">socket</span>
18
+ 146:
19
+ 147: <span class="ruby-comment cmt"># fix up the CGI requirements</span>
20
+ 148: <span class="ruby-identifier">params</span>[<span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">CONTENT_LENGTH</span>] = <span class="ruby-identifier">params</span>[<span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">HTTP_CONTENT_LENGTH</span>] <span class="ruby-operator">||</span> <span class="ruby-value">0</span>
21
+ 149: <span class="ruby-identifier">params</span>[<span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">CONTENT_TYPE</span>] <span class="ruby-operator">||=</span> <span class="ruby-identifier">params</span>[<span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">HTTP_CONTENT_TYPE</span>]
22
+ 150:
23
+ 151: <span class="ruby-comment cmt"># now, if the initial_body isn't long enough for the content length we have to fill it</span>
24
+ 152: <span class="ruby-comment cmt"># TODO: adapt for big ass stuff by writing to a temp file</span>
25
+ 153: <span class="ruby-identifier">clen</span> = <span class="ruby-identifier">params</span>[<span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">HTTP_CONTENT_LENGTH</span>].<span class="ruby-identifier">to_i</span>
26
+ 154: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@body</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">clen</span>
27
+ 155: <span class="ruby-ivar">@body</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">read</span>(<span class="ruby-identifier">clen</span> <span class="ruby-operator">-</span> <span class="ruby-ivar">@body</span>.<span class="ruby-identifier">length</span>)
28
+ 156: <span class="ruby-keyword kw">end</span>
29
+ 157: <span class="ruby-keyword kw">end</span></pre>
30
30
  </body>
31
31
  </html>
@@ -94,7 +94,7 @@ The parameter to start is the response code&#8212;which <a
94
94
  href="../Mongrel.html">Mongrel</a> will translate for you based on
95
95
  HTTP_STATUS_CODES. The head parameter is how you write custom headers. The
96
96
  out parameter is where you write your body. The default status code for <a
97
- href="HttpResponse.html#M000025">HttpResponse.start</a> is 200 so the above
97
+ href="HttpResponse.html#M000027">HttpResponse.start</a> is 200 so the above
98
98
  example is redundant.
99
99
  </p>
100
100
  <p>
@@ -131,10 +131,13 @@ will write this for you based on the out length.
131
131
  <h3 class="section-bar">Methods</h3>
132
132
 
133
133
  <div class="name-list">
134
- <a href="#M000027">finished</a>&nbsp;&nbsp;
135
- <a href="#M000024">new</a>&nbsp;&nbsp;
136
- <a href="#M000026">reset</a>&nbsp;&nbsp;
137
- <a href="#M000025">start</a>&nbsp;&nbsp;
134
+ <a href="#M000032">finished</a>&nbsp;&nbsp;
135
+ <a href="#M000026">new</a>&nbsp;&nbsp;
136
+ <a href="#M000028">reset</a>&nbsp;&nbsp;
137
+ <a href="#M000031">send_body</a>&nbsp;&nbsp;
138
+ <a href="#M000030">send_header</a>&nbsp;&nbsp;
139
+ <a href="#M000029">send_status</a>&nbsp;&nbsp;
140
+ <a href="#M000027">start</a>&nbsp;&nbsp;
138
141
  </div>
139
142
  </div>
140
143
 
@@ -189,12 +192,12 @@ will write this for you based on the out length.
189
192
  <div id="methods">
190
193
  <h3 class="section-bar">Public Class methods</h3>
191
194
 
192
- <div id="method-M000024" class="method-detail">
193
- <a name="M000024"></a>
195
+ <div id="method-M000026" class="method-detail">
196
+ <a name="M000026"></a>
194
197
 
195
198
  <div class="method-heading">
196
- <a href="HttpResponse.src/M000024.html" target="Code" class="method-signature"
197
- onclick="popupCode('HttpResponse.src/M000024.html');return false;">
199
+ <a href="HttpResponse.src/M000026.html" target="Code" class="method-signature"
200
+ onclick="popupCode('HttpResponse.src/M000026.html');return false;">
198
201
  <span class="method-name">new</span><span class="method-args">(socket)</span>
199
202
  </a>
200
203
  </div>
@@ -205,12 +208,12 @@ will write this for you based on the out length.
205
208
 
206
209
  <h3 class="section-bar">Public Instance methods</h3>
207
210
 
208
- <div id="method-M000027" class="method-detail">
209
- <a name="M000027"></a>
211
+ <div id="method-M000032" class="method-detail">
212
+ <a name="M000032"></a>
210
213
 
211
214
  <div class="method-heading">
212
- <a href="HttpResponse.src/M000027.html" target="Code" class="method-signature"
213
- onclick="popupCode('HttpResponse.src/M000027.html');return false;">
215
+ <a href="HttpResponse.src/M000032.html" target="Code" class="method-signature"
216
+ onclick="popupCode('HttpResponse.src/M000032.html');return false;">
214
217
  <span class="method-name">finished</span><span class="method-args">()</span>
215
218
  </a>
216
219
  </div>
@@ -223,12 +226,12 @@ the proper format to make an HTTP/1.1 response.
223
226
  </div>
224
227
  </div>
225
228
 
226
- <div id="method-M000026" class="method-detail">
227
- <a name="M000026"></a>
229
+ <div id="method-M000028" class="method-detail">
230
+ <a name="M000028"></a>
228
231
 
229
232
  <div class="method-heading">
230
- <a href="HttpResponse.src/M000026.html" target="Code" class="method-signature"
231
- onclick="popupCode('HttpResponse.src/M000026.html');return false;">
233
+ <a href="HttpResponse.src/M000028.html" target="Code" class="method-signature"
234
+ onclick="popupCode('HttpResponse.src/M000028.html');return false;">
232
235
  <span class="method-name">reset</span><span class="method-args">()</span>
233
236
  </a>
234
237
  </div>
@@ -241,12 +244,54 @@ to write an alternative response.
241
244
  </div>
242
245
  </div>
243
246
 
244
- <div id="method-M000025" class="method-detail">
245
- <a name="M000025"></a>
247
+ <div id="method-M000031" class="method-detail">
248
+ <a name="M000031"></a>
246
249
 
247
250
  <div class="method-heading">
248
- <a href="HttpResponse.src/M000025.html" target="Code" class="method-signature"
249
- onclick="popupCode('HttpResponse.src/M000025.html');return false;">
251
+ <a href="HttpResponse.src/M000031.html" target="Code" class="method-signature"
252
+ onclick="popupCode('HttpResponse.src/M000031.html');return false;">
253
+ <span class="method-name">send_body</span><span class="method-args">()</span>
254
+ </a>
255
+ </div>
256
+
257
+ <div class="method-description">
258
+ </div>
259
+ </div>
260
+
261
+ <div id="method-M000030" class="method-detail">
262
+ <a name="M000030"></a>
263
+
264
+ <div class="method-heading">
265
+ <a href="HttpResponse.src/M000030.html" target="Code" class="method-signature"
266
+ onclick="popupCode('HttpResponse.src/M000030.html');return false;">
267
+ <span class="method-name">send_header</span><span class="method-args">()</span>
268
+ </a>
269
+ </div>
270
+
271
+ <div class="method-description">
272
+ </div>
273
+ </div>
274
+
275
+ <div id="method-M000029" class="method-detail">
276
+ <a name="M000029"></a>
277
+
278
+ <div class="method-heading">
279
+ <a href="HttpResponse.src/M000029.html" target="Code" class="method-signature"
280
+ onclick="popupCode('HttpResponse.src/M000029.html');return false;">
281
+ <span class="method-name">send_status</span><span class="method-args">()</span>
282
+ </a>
283
+ </div>
284
+
285
+ <div class="method-description">
286
+ </div>
287
+ </div>
288
+
289
+ <div id="method-M000027" class="method-detail">
290
+ <a name="M000027"></a>
291
+
292
+ <div class="method-heading">
293
+ <a href="HttpResponse.src/M000027.html" target="Code" class="method-signature"
294
+ onclick="popupCode('HttpResponse.src/M000027.html');return false;">
250
295
  <span class="method-name">start</span><span class="method-args">(status=200) {|@header, @body| ...}</span>
251
296
  </a>
252
297
  </div>