mongrel 0.2.2 → 0.3

Sign up to get free protection for your applications and to get access to all the features.
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>