mongrel 0.3.13 → 0.3.13.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (179) hide show
  1. data/Rakefile +1 -1
  2. data/bin/mongrel_rails +1 -1
  3. data/doc/rdoc/classes/Mongrel.html +1 -0
  4. data/doc/rdoc/classes/Mongrel/CGIWrapper.html +49 -49
  5. data/doc/rdoc/classes/Mongrel/CGIWrapper.src/M000098.html +11 -21
  6. data/doc/rdoc/classes/Mongrel/CGIWrapper.src/M000099.html +34 -14
  7. data/doc/rdoc/classes/Mongrel/CGIWrapper.src/M000100.html +21 -12
  8. data/doc/rdoc/classes/Mongrel/CGIWrapper.src/M000101.html +14 -5
  9. data/doc/rdoc/classes/Mongrel/CGIWrapper.src/M000102.html +12 -5
  10. data/doc/rdoc/classes/Mongrel/CGIWrapper.src/M000103.html +5 -5
  11. data/doc/rdoc/classes/Mongrel/CGIWrapper.src/M000104.html +5 -6
  12. data/doc/rdoc/classes/Mongrel/{URIClassifier.src/M000088.html → CGIWrapper.src/M000105.html} +5 -5
  13. data/doc/rdoc/classes/Mongrel/CGIWrapper.src/M000106.html +19 -0
  14. data/doc/rdoc/classes/Mongrel/Camping.html +5 -5
  15. data/doc/rdoc/classes/Mongrel/Camping.src/{M000046.html → M000047.html} +0 -0
  16. data/doc/rdoc/classes/Mongrel/Camping/CampingHandler.html +10 -10
  17. data/doc/rdoc/classes/Mongrel/Camping/CampingHandler.src/M000048.html +5 -38
  18. data/doc/rdoc/classes/Mongrel/Camping/CampingHandler.src/M000049.html +51 -0
  19. data/doc/rdoc/classes/Mongrel/Command/Base.html +65 -65
  20. data/doc/rdoc/classes/Mongrel/Command/Base.src/M000025.html +11 -29
  21. data/doc/rdoc/classes/Mongrel/Command/Base.src/M000026.html +29 -5
  22. data/doc/rdoc/classes/Mongrel/Command/Base.src/M000027.html +5 -5
  23. data/doc/rdoc/classes/Mongrel/Command/Base.src/M000028.html +5 -5
  24. data/doc/rdoc/classes/Mongrel/Command/Base.src/M000029.html +5 -5
  25. data/doc/rdoc/classes/Mongrel/Command/Base.src/M000030.html +5 -9
  26. data/doc/rdoc/classes/Mongrel/Command/Base.src/M000031.html +9 -5
  27. data/doc/rdoc/classes/Mongrel/Command/Base.src/M000032.html +5 -5
  28. data/doc/rdoc/classes/Mongrel/Command/Base.src/M000033.html +5 -5
  29. data/doc/rdoc/classes/Mongrel/Command/Base.src/M000034.html +5 -11
  30. data/doc/rdoc/classes/Mongrel/Command/Base.src/M000035.html +11 -11
  31. data/doc/rdoc/classes/Mongrel/Command/Base.src/M000036.html +11 -5
  32. data/doc/rdoc/classes/Mongrel/Command/Base.src/M000037.html +18 -0
  33. data/doc/rdoc/classes/Mongrel/Command/Registry.html +15 -15
  34. data/doc/rdoc/classes/Mongrel/Command/Registry.src/M000038.html +7 -12
  35. data/doc/rdoc/classes/Mongrel/Command/Registry.src/M000039.html +12 -37
  36. data/doc/rdoc/classes/Mongrel/Command/Registry.src/M000040.html +50 -0
  37. data/doc/rdoc/classes/Mongrel/Configurator.html +143 -107
  38. data/doc/rdoc/classes/Mongrel/Configurator.src/M000107.html +16 -7
  39. data/doc/rdoc/classes/Mongrel/Configurator.src/M000108.html +18 -7
  40. data/doc/rdoc/classes/Mongrel/Configurator.src/M000109.html +7 -10
  41. data/doc/rdoc/classes/Mongrel/Configurator.src/M000110.html +7 -5
  42. data/doc/rdoc/classes/Mongrel/Configurator.src/M000111.html +10 -21
  43. data/doc/rdoc/classes/Mongrel/Configurator.src/M000112.html +5 -6
  44. data/doc/rdoc/classes/Mongrel/Configurator.src/M000113.html +21 -17
  45. data/doc/rdoc/classes/Mongrel/Configurator.src/M000114.html +6 -20
  46. data/doc/rdoc/classes/Mongrel/Configurator.src/M000115.html +17 -5
  47. data/doc/rdoc/classes/Mongrel/Configurator.src/M000116.html +20 -11
  48. data/doc/rdoc/classes/Mongrel/Configurator.src/M000117.html +5 -6
  49. data/doc/rdoc/classes/Mongrel/Configurator.src/M000118.html +11 -9
  50. data/doc/rdoc/classes/Mongrel/Configurator.src/M000119.html +6 -12
  51. data/doc/rdoc/classes/Mongrel/Configurator.src/M000120.html +5 -5
  52. data/doc/rdoc/classes/Mongrel/Configurator.src/M000121.html +9 -22
  53. data/doc/rdoc/classes/Mongrel/Configurator.src/M000122.html +12 -5
  54. data/doc/rdoc/classes/Mongrel/Configurator.src/M000123.html +5 -20
  55. data/doc/rdoc/classes/Mongrel/Configurator.src/M000124.html +22 -5
  56. data/doc/rdoc/classes/Mongrel/Configurator.src/M000125.html +18 -0
  57. data/doc/rdoc/classes/Mongrel/Configurator.src/M000126.html +33 -0
  58. data/doc/rdoc/classes/Mongrel/Configurator.src/M000127.html +18 -0
  59. data/doc/rdoc/classes/Mongrel/Const.html +6 -1
  60. data/doc/rdoc/classes/Mongrel/DeflateFilter.html +10 -10
  61. data/doc/rdoc/classes/Mongrel/DeflateFilter.src/{M000094.html → M000096.html} +5 -5
  62. data/doc/rdoc/classes/Mongrel/DeflateFilter.src/{M000095.html → M000097.html} +14 -14
  63. data/doc/rdoc/classes/Mongrel/DirHandler.html +31 -31
  64. data/doc/rdoc/classes/Mongrel/DirHandler.src/M000057.html +8 -30
  65. data/doc/rdoc/classes/Mongrel/DirHandler.src/M000058.html +30 -29
  66. data/doc/rdoc/classes/Mongrel/DirHandler.src/M000059.html +29 -50
  67. data/doc/rdoc/classes/Mongrel/DirHandler.src/M000060.html +50 -26
  68. data/doc/rdoc/classes/Mongrel/DirHandler.src/M000061.html +26 -5
  69. data/doc/rdoc/classes/Mongrel/DirHandler.src/M000062.html +18 -0
  70. data/doc/rdoc/classes/Mongrel/Error404Handler.html +10 -10
  71. data/doc/rdoc/classes/Mongrel/Error404Handler.src/{M000125.html → M000128.html} +4 -4
  72. data/doc/rdoc/classes/Mongrel/Error404Handler.src/{M000126.html → M000129.html} +4 -4
  73. data/doc/rdoc/classes/Mongrel/HeaderOut.html +10 -10
  74. data/doc/rdoc/classes/Mongrel/HeaderOut.src/M000070.html +5 -5
  75. data/doc/rdoc/classes/Mongrel/HeaderOut.src/M000071.html +18 -0
  76. data/doc/rdoc/classes/Mongrel/HttpHandler.html +31 -9
  77. data/doc/rdoc/classes/Mongrel/{URIClassifier.src/M000089.html → HttpHandler.src/M000076.html} +4 -5
  78. data/doc/rdoc/classes/Mongrel/HttpHandler.src/{M000075.html → M000077.html} +3 -3
  79. data/doc/rdoc/classes/Mongrel/HttpHandlerPlugin.html +30 -15
  80. data/doc/rdoc/classes/Mongrel/HttpHandlerPlugin.src/M000022.html +4 -6
  81. data/doc/rdoc/classes/Mongrel/HttpHandlerPlugin.src/M000023.html +6 -4
  82. data/doc/rdoc/classes/Mongrel/HttpHandlerPlugin.src/M000024.html +17 -0
  83. data/doc/rdoc/classes/Mongrel/HttpParser.html +35 -35
  84. data/doc/rdoc/classes/Mongrel/HttpParser.src/M000050.html +5 -6
  85. data/doc/rdoc/classes/Mongrel/HttpParser.src/M000051.html +7 -7
  86. data/doc/rdoc/classes/Mongrel/HttpParser.src/M000052.html +7 -37
  87. data/doc/rdoc/classes/Mongrel/HttpParser.src/M000053.html +37 -5
  88. data/doc/rdoc/classes/Mongrel/HttpParser.src/M000054.html +5 -5
  89. data/doc/rdoc/classes/Mongrel/HttpParser.src/M000055.html +5 -6
  90. data/doc/rdoc/classes/Mongrel/HttpParser.src/{M000049.html → M000056.html} +6 -6
  91. data/doc/rdoc/classes/Mongrel/HttpRequest.html +20 -20
  92. data/doc/rdoc/classes/Mongrel/HttpRequest.src/{M000130.html → M000135.html} +38 -38
  93. data/doc/rdoc/classes/Mongrel/HttpRequest.src/{M000131.html → M000136.html} +6 -6
  94. data/doc/rdoc/classes/Mongrel/HttpRequest.src/{M000132.html → M000137.html} +6 -6
  95. data/doc/rdoc/classes/Mongrel/HttpRequest.src/{M000133.html → M000138.html} +18 -18
  96. data/doc/rdoc/classes/Mongrel/HttpResponse.html +61 -61
  97. data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000078.html +12 -12
  98. data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000079.html +7 -9
  99. data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000080.html +12 -9
  100. data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000081.html +9 -9
  101. data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000082.html +9 -18
  102. data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000083.html +9 -8
  103. data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000084.html +18 -7
  104. data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000085.html +8 -7
  105. data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000086.html +7 -7
  106. data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000087.html +7 -5
  107. data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000088.html +20 -0
  108. data/doc/rdoc/classes/Mongrel/{HeaderOut.src/M000069.html → HttpResponse.src/M000089.html} +5 -5
  109. data/doc/rdoc/classes/Mongrel/HttpServer.html +38 -38
  110. data/doc/rdoc/classes/Mongrel/HttpServer.src/M000063.html +12 -70
  111. data/doc/rdoc/classes/Mongrel/HttpServer.src/M000064.html +76 -13
  112. data/doc/rdoc/classes/Mongrel/HttpServer.src/M000065.html +13 -50
  113. data/doc/rdoc/classes/Mongrel/HttpServer.src/M000066.html +50 -21
  114. data/doc/rdoc/classes/Mongrel/HttpServer.src/M000067.html +20 -4
  115. data/doc/rdoc/classes/Mongrel/HttpServer.src/M000068.html +5 -9
  116. data/doc/rdoc/classes/Mongrel/HttpServer.src/M000069.html +22 -0
  117. data/doc/rdoc/classes/Mongrel/Rails/RailsConfigurator.html +15 -15
  118. data/doc/rdoc/classes/Mongrel/Rails/RailsConfigurator.src/M000041.html +26 -12
  119. data/doc/rdoc/classes/Mongrel/Rails/RailsConfigurator.src/M000042.html +12 -13
  120. data/doc/rdoc/classes/Mongrel/Rails/RailsConfigurator.src/M000043.html +26 -0
  121. data/doc/rdoc/classes/Mongrel/Rails/RailsHandler.html +15 -15
  122. data/doc/rdoc/classes/Mongrel/Rails/RailsHandler.src/M000044.html +9 -38
  123. data/doc/rdoc/classes/Mongrel/Rails/RailsHandler.src/M000045.html +38 -10
  124. data/doc/rdoc/classes/Mongrel/Rails/RailsHandler.src/M000046.html +23 -0
  125. data/doc/rdoc/classes/Mongrel/RedirectHandler.html +187 -0
  126. data/doc/rdoc/classes/Mongrel/RedirectHandler.src/M000133.html +22 -0
  127. data/doc/rdoc/classes/Mongrel/RedirectHandler.src/M000134.html +27 -0
  128. data/doc/rdoc/classes/Mongrel/StatisticsFilter.html +16 -16
  129. data/doc/rdoc/classes/Mongrel/StatisticsFilter.src/{M000127.html → M000130.html} +10 -10
  130. data/doc/rdoc/classes/Mongrel/StatisticsFilter.src/{M000128.html → M000131.html} +10 -10
  131. data/doc/rdoc/classes/Mongrel/StatisticsFilter.src/{M000129.html → M000132.html} +4 -4
  132. data/doc/rdoc/classes/Mongrel/StatusHandler.html +20 -20
  133. data/doc/rdoc/classes/Mongrel/StatusHandler.src/M000072.html +5 -11
  134. data/doc/rdoc/classes/Mongrel/StatusHandler.src/M000073.html +11 -29
  135. data/doc/rdoc/classes/Mongrel/StatusHandler.src/M000074.html +29 -7
  136. data/doc/rdoc/classes/Mongrel/StatusHandler.src/M000075.html +20 -0
  137. data/doc/rdoc/classes/Mongrel/URIClassifier.html +30 -30
  138. data/doc/rdoc/classes/Mongrel/URIClassifier.src/M000090.html +5 -26
  139. data/doc/rdoc/classes/Mongrel/URIClassifier.src/M000091.html +5 -38
  140. data/doc/rdoc/classes/Mongrel/URIClassifier.src/M000092.html +18 -15
  141. data/doc/rdoc/classes/Mongrel/URIClassifier.src/M000093.html +25 -57
  142. data/doc/rdoc/classes/Mongrel/URIClassifier.src/M000094.html +36 -0
  143. data/doc/rdoc/classes/Mongrel/URIClassifier.src/M000095.html +83 -0
  144. data/doc/rdoc/classes/RequestLog/Access.html +5 -5
  145. data/doc/rdoc/classes/RequestLog/Access.src/{M000134.html → M000139.html} +0 -0
  146. data/doc/rdoc/classes/RequestLog/Files.html +5 -5
  147. data/doc/rdoc/classes/RequestLog/Files.src/{M000135.html → M000140.html} +0 -0
  148. data/doc/rdoc/classes/RequestLog/Objects.html +5 -5
  149. data/doc/rdoc/classes/RequestLog/Objects.src/{M000137.html → M000142.html} +0 -0
  150. data/doc/rdoc/classes/RequestLog/Params.html +5 -5
  151. data/doc/rdoc/classes/RequestLog/Params.src/{M000138.html → M000143.html} +0 -0
  152. data/doc/rdoc/classes/RequestLog/Threads.html +5 -5
  153. data/doc/rdoc/classes/RequestLog/Threads.src/{M000136.html → M000141.html} +0 -0
  154. data/doc/rdoc/created.rid +1 -1
  155. data/doc/rdoc/files/ext/http11/http11_c.html +1 -1
  156. data/doc/rdoc/files/lib/mongrel/handlers_rb.html +1 -1
  157. data/doc/rdoc/files/lib/mongrel_rb.html +1 -1
  158. data/doc/rdoc/fr_class_index.html +1 -0
  159. data/doc/rdoc/fr_method_index.html +124 -119
  160. data/examples/simpletest.rb +2 -0
  161. data/ext/http11/http11.c +1 -1
  162. data/lib/mongrel.rb +30 -5
  163. data/lib/mongrel/handlers.rb +57 -2
  164. data/test/test_redirect_handler.rb +40 -0
  165. metadata +47 -38
  166. data/doc/rdoc/classes/Mongrel/CGIWrapper.src/M000096.html +0 -24
  167. data/doc/rdoc/classes/Mongrel/CGIWrapper.src/M000097.html +0 -47
  168. data/doc/rdoc/classes/Mongrel/Camping/CampingHandler.src/M000047.html +0 -18
  169. data/doc/rdoc/classes/Mongrel/Command/Base.src/M000024.html +0 -24
  170. data/doc/rdoc/classes/Mongrel/Command/Registry.src/M000037.html +0 -20
  171. data/doc/rdoc/classes/Mongrel/Configurator.src/M000105.html +0 -29
  172. data/doc/rdoc/classes/Mongrel/Configurator.src/M000106.html +0 -31
  173. data/doc/rdoc/classes/Mongrel/DirHandler.src/M000056.html +0 -21
  174. data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000076.html +0 -25
  175. data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000077.html +0 -20
  176. data/doc/rdoc/classes/Mongrel/HttpServer.src/M000062.html +0 -25
  177. data/doc/rdoc/classes/Mongrel/Rails/RailsConfigurator.src/M000040.html +0 -39
  178. data/doc/rdoc/classes/Mongrel/Rails/RailsHandler.src/M000043.html +0 -22
  179. data/doc/rdoc/classes/Mongrel/StatusHandler.src/M000071.html +0 -18
@@ -5,55 +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, start) -&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.
25
- *
26
- * The third argument allows for parsing a partial request and then continuing
27
- * the parsing from that position. It needs all of the original data as well
28
- * so you have to append to the data buffer as you read.
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.
29
19
  */
30
- VALUE HttpParser_execute(VALUE self, VALUE req_hash, VALUE data, VALUE start)
20
+ VALUE HttpParser_finish(VALUE self)
31
21
  {
32
22
  http_parser *http = NULL;
33
- int from = 0;
34
- char *dptr = NULL;
35
- long dlen = 0;
36
-
37
23
  DATA_GET(self, http_parser, http);
38
-
39
- from = FIX2INT(start);
40
- dptr = RSTRING(data)-&gt;ptr;
41
- dlen = RSTRING(data)-&gt;len;
24
+ http_parser_finish(http);
42
25
 
43
- if(from &gt;= dlen) {
44
- rb_raise(eHttpParserError, &quot;Requested start is after data buffer end.&quot;);
45
- } else {
46
- http-&gt;data = (void *)req_hash;
47
- http_parser_execute(http, dptr, dlen, from);
48
-
49
- VALIDATE_MAX_LENGTH(http_parser_nread(http), HEADER);
50
-
51
- if(http_parser_has_error(http)) {
52
- rb_raise(eHttpParserError, &quot;Invalid HTTP format, parsing fails.&quot;);
53
- } else {
54
- return INT2FIX(http_parser_nread(http));
55
- }
56
- }
26
+ return http_parser_is_finished(http) ? Qtrue : Qfalse;
57
27
  }</pre>
58
28
  </body>
59
29
  </html>
@@ -5,23 +5,55 @@
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, start) -&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.
25
+ *
26
+ * The third argument allows for parsing a partial request and then continuing
27
+ * the parsing from that position. It needs all of the original data as well
28
+ * so you have to append to the data buffer as you read.
18
29
  */
19
- VALUE HttpParser_has_error(VALUE self)
30
+ VALUE HttpParser_execute(VALUE self, VALUE req_hash, VALUE data, VALUE start)
20
31
  {
21
32
  http_parser *http = NULL;
33
+ int from = 0;
34
+ char *dptr = NULL;
35
+ long dlen = 0;
36
+
22
37
  DATA_GET(self, http_parser, http);
38
+
39
+ from = FIX2INT(start);
40
+ dptr = RSTRING(data)-&gt;ptr;
41
+ dlen = RSTRING(data)-&gt;len;
23
42
 
24
- return http_parser_has_error(http) ? Qtrue : Qfalse;
43
+ if(from &gt;= dlen) {
44
+ rb_raise(eHttpParserError, &quot;Requested start is after data buffer end.&quot;);
45
+ } else {
46
+ http-&gt;data = (void *)req_hash;
47
+ http_parser_execute(http, dptr, dlen, from);
48
+
49
+ VALIDATE_MAX_LENGTH(http_parser_nread(http), HEADER);
50
+
51
+ if(http_parser_has_error(http)) {
52
+ rb_raise(eHttpParserError, &quot;Invalid HTTP format, parsing fails.&quot;);
53
+ } else {
54
+ return INT2FIX(http_parser_nread(http));
55
+ }
56
+ }
25
57
  }</pre>
26
58
  </body>
27
59
  </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>
@@ -102,10 +102,10 @@ uses a StringIO object. To be safe, you should assume it works like a file.
102
102
  <h3 class="section-bar">Methods</h3>
103
103
 
104
104
  <div class="name-list">
105
- <a href="#M000131">escape</a>&nbsp;&nbsp;
106
- <a href="#M000130">new</a>&nbsp;&nbsp;
107
- <a href="#M000133">query_parse</a>&nbsp;&nbsp;
108
- <a href="#M000132">unescape</a>&nbsp;&nbsp;
105
+ <a href="#M000136">escape</a>&nbsp;&nbsp;
106
+ <a href="#M000135">new</a>&nbsp;&nbsp;
107
+ <a href="#M000138">query_parse</a>&nbsp;&nbsp;
108
+ <a href="#M000137">unescape</a>&nbsp;&nbsp;
109
109
  </div>
110
110
  </div>
111
111
 
@@ -145,12 +145,12 @@ uses a StringIO object. To be safe, you should assume it works like a file.
145
145
  <div id="methods">
146
146
  <h3 class="section-bar">Public Class methods</h3>
147
147
 
148
- <div id="method-M000131" class="method-detail">
149
- <a name="M000131"></a>
148
+ <div id="method-M000136" class="method-detail">
149
+ <a name="M000136"></a>
150
150
 
151
151
  <div class="method-heading">
152
- <a href="HttpRequest.src/M000131.html" target="Code" class="method-signature"
153
- onclick="popupCode('HttpRequest.src/M000131.html');return false;">
152
+ <a href="HttpRequest.src/M000136.html" target="Code" class="method-signature"
153
+ onclick="popupCode('HttpRequest.src/M000136.html');return false;">
154
154
  <span class="method-name">escape</span><span class="method-args">(s)</span>
155
155
  </a>
156
156
  </div>
@@ -164,12 +164,12 @@ faster. Use this rather than the cgi.rb version since it&#8217;s faster.
164
164
  </div>
165
165
  </div>
166
166
 
167
- <div id="method-M000130" class="method-detail">
168
- <a name="M000130"></a>
167
+ <div id="method-M000135" class="method-detail">
168
+ <a name="M000135"></a>
169
169
 
170
170
  <div class="method-heading">
171
- <a href="HttpRequest.src/M000130.html" target="Code" class="method-signature"
172
- onclick="popupCode('HttpRequest.src/M000130.html');return false;">
171
+ <a href="HttpRequest.src/M000135.html" target="Code" class="method-signature"
172
+ onclick="popupCode('HttpRequest.src/M000135.html');return false;">
173
173
  <span class="method-name">new</span><span class="method-args">(params, initial_body, socket)</span>
174
174
  </a>
175
175
  </div>
@@ -186,12 +186,12 @@ TODO: Implement tempfile removal when the request is done.
186
186
  </div>
187
187
  </div>
188
188
 
189
- <div id="method-M000133" class="method-detail">
190
- <a name="M000133"></a>
189
+ <div id="method-M000138" class="method-detail">
190
+ <a name="M000138"></a>
191
191
 
192
192
  <div class="method-heading">
193
- <a href="HttpRequest.src/M000133.html" target="Code" class="method-signature"
194
- onclick="popupCode('HttpRequest.src/M000133.html');return false;">
193
+ <a href="HttpRequest.src/M000138.html" target="Code" class="method-signature"
194
+ onclick="popupCode('HttpRequest.src/M000138.html');return false;">
195
195
  <span class="method-name">query_parse</span><span class="method-args">(qs, d = '&amp;;')</span>
196
196
  </a>
197
197
  </div>
@@ -206,12 +206,12 @@ changing the characters used in the second parameter (which defaults to
206
206
  </div>
207
207
  </div>
208
208
 
209
- <div id="method-M000132" class="method-detail">
210
- <a name="M000132"></a>
209
+ <div id="method-M000137" class="method-detail">
210
+ <a name="M000137"></a>
211
211
 
212
212
  <div class="method-heading">
213
- <a href="HttpRequest.src/M000132.html" target="Code" class="method-signature"
214
- onclick="popupCode('HttpRequest.src/M000132.html');return false;">
213
+ <a href="HttpRequest.src/M000137.html" target="Code" class="method-signature"
214
+ onclick="popupCode('HttpRequest.src/M000137.html');return false;">
215
215
  <span class="method-name">unescape</span><span class="method-args">(s)</span>
216
216
  </a>
217
217
  </div>
@@ -10,43 +10,43 @@
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 194</span>
14
- 194: <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
- 195: <span class="ruby-ivar">@params</span> = <span class="ruby-identifier">params</span>
16
- 196: <span class="ruby-ivar">@socket</span> = <span class="ruby-identifier">socket</span>
17
- 197:
18
- 198: <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">CONTENT_LENGTH</span>].<span class="ruby-identifier">to_i</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">initial_body</span>.<span class="ruby-identifier">length</span>
19
- 199:
20
- 200: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">clen</span> <span class="ruby-operator">&gt;</span> <span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">MAX_BODY</span>
21
- 201: <span class="ruby-ivar">@body</span> = <span class="ruby-constant">Tempfile</span>.<span class="ruby-identifier">new</span>(<span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">MONGREL_TMP_BASE</span>)
22
- 202: <span class="ruby-ivar">@body</span>.<span class="ruby-identifier">binmode</span>
23
- 203: <span class="ruby-keyword kw">else</span>
24
- 204: <span class="ruby-ivar">@body</span> = <span class="ruby-constant">StringIO</span>.<span class="ruby-identifier">new</span>
25
- 205: <span class="ruby-keyword kw">end</span>
26
- 206:
27
- 207: <span class="ruby-keyword kw">begin</span>
28
- 208: <span class="ruby-ivar">@body</span>.<span class="ruby-identifier">write</span>(<span class="ruby-identifier">initial_body</span>)
29
- 209:
30
- 210: <span class="ruby-comment cmt"># write the odd sized chunk first</span>
31
- 211: <span class="ruby-identifier">clen</span> <span class="ruby-operator">-=</span> <span class="ruby-ivar">@body</span>.<span class="ruby-identifier">write</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-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">CHUNK_SIZE</span>))
32
- 212:
33
- 213: <span class="ruby-comment cmt"># then stream out nothing but perfectly sized chunks</span>
34
- 214: <span class="ruby-keyword kw">while</span> <span class="ruby-identifier">clen</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
35
- 215: <span class="ruby-identifier">data</span> = <span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">read</span>(<span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">CHUNK_SIZE</span>)
36
- 216: <span class="ruby-comment cmt"># have to do it this way since @socket.eof? causes it to block</span>
37
- 217: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Socket closed or read failure&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-keyword kw">not</span> <span class="ruby-identifier">data</span> <span class="ruby-keyword kw">or</span> <span class="ruby-identifier">data</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">!=</span> <span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">CHUNK_SIZE</span>
38
- 218: <span class="ruby-identifier">clen</span> <span class="ruby-operator">-=</span> <span class="ruby-ivar">@body</span>.<span class="ruby-identifier">write</span>(<span class="ruby-identifier">data</span>)
39
- 219: <span class="ruby-comment cmt"># ASSUME: we are writing to a disk and these writes always write the requested amount</span>
40
- 220: <span class="ruby-keyword kw">end</span>
41
- 221:
42
- 222: <span class="ruby-comment cmt"># rewind to keep the world happy</span>
43
- 223: <span class="ruby-ivar">@body</span>.<span class="ruby-identifier">rewind</span>
44
- 224: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">Object</span>
45
- 225: <span class="ruby-comment cmt"># any errors means we should delete the file, including if the file is dumped</span>
46
- 226: <span class="ruby-constant">STDERR</span>.<span class="ruby-identifier">puts</span> <span class="ruby-value str">&quot;Error reading request: #$!&quot;</span>
47
- 227: <span class="ruby-ivar">@body</span>.<span class="ruby-identifier">delete</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@body</span>.<span class="ruby-identifier">class</span> <span class="ruby-operator">==</span> <span class="ruby-constant">Tempfile</span>
48
- 228: <span class="ruby-ivar">@body</span> = <span class="ruby-keyword kw">nil</span> <span class="ruby-comment cmt"># signals that there was a problem</span>
49
- 229: <span class="ruby-keyword kw">end</span>
50
- 230: <span class="ruby-keyword kw">end</span></pre>
13
+ <pre> <span class="ruby-comment cmt"># File lib/mongrel.rb, line 195</span>
14
+ 195: <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
+ 196: <span class="ruby-ivar">@params</span> = <span class="ruby-identifier">params</span>
16
+ 197: <span class="ruby-ivar">@socket</span> = <span class="ruby-identifier">socket</span>
17
+ 198:
18
+ 199: <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">CONTENT_LENGTH</span>].<span class="ruby-identifier">to_i</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">initial_body</span>.<span class="ruby-identifier">length</span>
19
+ 200:
20
+ 201: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">clen</span> <span class="ruby-operator">&gt;</span> <span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">MAX_BODY</span>
21
+ 202: <span class="ruby-ivar">@body</span> = <span class="ruby-constant">Tempfile</span>.<span class="ruby-identifier">new</span>(<span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">MONGREL_TMP_BASE</span>)
22
+ 203: <span class="ruby-ivar">@body</span>.<span class="ruby-identifier">binmode</span>
23
+ 204: <span class="ruby-keyword kw">else</span>
24
+ 205: <span class="ruby-ivar">@body</span> = <span class="ruby-constant">StringIO</span>.<span class="ruby-identifier">new</span>
25
+ 206: <span class="ruby-keyword kw">end</span>
26
+ 207:
27
+ 208: <span class="ruby-keyword kw">begin</span>
28
+ 209: <span class="ruby-ivar">@body</span>.<span class="ruby-identifier">write</span>(<span class="ruby-identifier">initial_body</span>)
29
+ 210:
30
+ 211: <span class="ruby-comment cmt"># write the odd sized chunk first</span>
31
+ 212: <span class="ruby-identifier">clen</span> <span class="ruby-operator">-=</span> <span class="ruby-ivar">@body</span>.<span class="ruby-identifier">write</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-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">CHUNK_SIZE</span>))
32
+ 213:
33
+ 214: <span class="ruby-comment cmt"># then stream out nothing but perfectly sized chunks</span>
34
+ 215: <span class="ruby-keyword kw">while</span> <span class="ruby-identifier">clen</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
35
+ 216: <span class="ruby-identifier">data</span> = <span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">read</span>(<span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">CHUNK_SIZE</span>)
36
+ 217: <span class="ruby-comment cmt"># have to do it this way since @socket.eof? causes it to block</span>
37
+ 218: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Socket closed or read failure&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-keyword kw">not</span> <span class="ruby-identifier">data</span> <span class="ruby-keyword kw">or</span> <span class="ruby-identifier">data</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">!=</span> <span class="ruby-constant">Const</span><span class="ruby-operator">::</span><span class="ruby-constant">CHUNK_SIZE</span>
38
+ 219: <span class="ruby-identifier">clen</span> <span class="ruby-operator">-=</span> <span class="ruby-ivar">@body</span>.<span class="ruby-identifier">write</span>(<span class="ruby-identifier">data</span>)
39
+ 220: <span class="ruby-comment cmt"># ASSUME: we are writing to a disk and these writes always write the requested amount</span>
40
+ 221: <span class="ruby-keyword kw">end</span>
41
+ 222:
42
+ 223: <span class="ruby-comment cmt"># rewind to keep the world happy</span>
43
+ 224: <span class="ruby-ivar">@body</span>.<span class="ruby-identifier">rewind</span>
44
+ 225: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">Object</span>
45
+ 226: <span class="ruby-comment cmt"># any errors means we should delete the file, including if the file is dumped</span>
46
+ 227: <span class="ruby-constant">STDERR</span>.<span class="ruby-identifier">puts</span> <span class="ruby-value str">&quot;Error reading request: #$!&quot;</span>
47
+ 228: <span class="ruby-ivar">@body</span>.<span class="ruby-identifier">delete</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@body</span>.<span class="ruby-identifier">class</span> <span class="ruby-operator">==</span> <span class="ruby-constant">Tempfile</span>
48
+ 229: <span class="ruby-ivar">@body</span> = <span class="ruby-keyword kw">nil</span> <span class="ruby-comment cmt"># signals that there was a problem</span>
49
+ 230: <span class="ruby-keyword kw">end</span>
50
+ 231: <span class="ruby-keyword kw">end</span></pre>
51
51
  </body>
52
52
  </html>
@@ -10,11 +10,11 @@
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 235</span>
14
- 235: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">escape</span>(<span class="ruby-identifier">s</span>)
15
- 236: <span class="ruby-identifier">s</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">/([^ a-zA-Z0-9_.-]+)/n</span>) {
16
- 237: <span class="ruby-value str">'%'</span><span class="ruby-operator">+</span><span class="ruby-identifier">$1</span>.<span class="ruby-identifier">unpack</span>(<span class="ruby-value str">'H2'</span><span class="ruby-operator">*</span><span class="ruby-identifier">$1</span>.<span class="ruby-identifier">size</span>).<span class="ruby-identifier">join</span>(<span class="ruby-value str">'%'</span>).<span class="ruby-identifier">upcase</span>
17
- 238: }.<span class="ruby-identifier">tr</span>(<span class="ruby-value str">' '</span>, <span class="ruby-value str">'+'</span>)
18
- 239: <span class="ruby-keyword kw">end</span></pre>
13
+ <pre> <span class="ruby-comment cmt"># File lib/mongrel.rb, line 236</span>
14
+ 236: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">escape</span>(<span class="ruby-identifier">s</span>)
15
+ 237: <span class="ruby-identifier">s</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">/([^ a-zA-Z0-9_.-]+)/n</span>) {
16
+ 238: <span class="ruby-value str">'%'</span><span class="ruby-operator">+</span><span class="ruby-identifier">$1</span>.<span class="ruby-identifier">unpack</span>(<span class="ruby-value str">'H2'</span><span class="ruby-operator">*</span><span class="ruby-identifier">$1</span>.<span class="ruby-identifier">size</span>).<span class="ruby-identifier">join</span>(<span class="ruby-value str">'%'</span>).<span class="ruby-identifier">upcase</span>
17
+ 239: }.<span class="ruby-identifier">tr</span>(<span class="ruby-value str">' '</span>, <span class="ruby-value str">'+'</span>)
18
+ 240: <span class="ruby-keyword kw">end</span></pre>
19
19
  </body>
20
20
  </html>
@@ -10,11 +10,11 @@
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 243</span>
14
- 243: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">unescape</span>(<span class="ruby-identifier">s</span>)
15
- 244: <span class="ruby-identifier">s</span>.<span class="ruby-identifier">tr</span>(<span class="ruby-value str">'+'</span>, <span class="ruby-value str">' '</span>).<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">/((?:%[0-9a-fA-F]{2})+)/n</span>){
16
- 245: [<span class="ruby-identifier">$1</span>.<span class="ruby-identifier">delete</span>(<span class="ruby-value str">'%'</span>)].<span class="ruby-identifier">pack</span>(<span class="ruby-value str">'H*'</span>)
17
- 246: }
18
- 247: <span class="ruby-keyword kw">end</span></pre>
13
+ <pre> <span class="ruby-comment cmt"># File lib/mongrel.rb, line 244</span>
14
+ 244: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">unescape</span>(<span class="ruby-identifier">s</span>)
15
+ 245: <span class="ruby-identifier">s</span>.<span class="ruby-identifier">tr</span>(<span class="ruby-value str">'+'</span>, <span class="ruby-value str">' '</span>).<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">/((?:%[0-9a-fA-F]{2})+)/n</span>){
16
+ 246: [<span class="ruby-identifier">$1</span>.<span class="ruby-identifier">delete</span>(<span class="ruby-value str">'%'</span>)].<span class="ruby-identifier">pack</span>(<span class="ruby-value str">'H*'</span>)
17
+ 247: }
18
+ 248: <span class="ruby-keyword kw">end</span></pre>
19
19
  </body>
20
20
  </html>
@@ -10,23 +10,23 @@
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 253</span>
14
- 253: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">query_parse</span>(<span class="ruby-identifier">qs</span>, <span class="ruby-identifier">d</span> = <span class="ruby-value str">'&amp;;'</span>)
15
- 254: <span class="ruby-identifier">params</span> = {}
16
- 255: (<span class="ruby-identifier">qs</span><span class="ruby-operator">||</span><span class="ruby-value str">''</span>).<span class="ruby-identifier">split</span>(<span class="ruby-node">/[#{d}] */n</span>).<span class="ruby-identifier">inject</span>(<span class="ruby-identifier">params</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">h</span>,<span class="ruby-identifier">p</span><span class="ruby-operator">|</span>
17
- 256: <span class="ruby-identifier">k</span>, <span class="ruby-identifier">v</span>=<span class="ruby-identifier">unescape</span>(<span class="ruby-identifier">p</span>).<span class="ruby-identifier">split</span>(<span class="ruby-value str">'='</span>,<span class="ruby-value">2</span>)
18
- 257: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">cur</span> = <span class="ruby-identifier">params</span>[<span class="ruby-identifier">k</span>]
19
- 258: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">cur</span>.<span class="ruby-identifier">class</span> <span class="ruby-operator">==</span> <span class="ruby-constant">Array</span>
20
- 259: <span class="ruby-identifier">params</span>[<span class="ruby-identifier">k</span>] <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">v</span>
21
- 260: <span class="ruby-keyword kw">else</span>
22
- 261: <span class="ruby-identifier">params</span>[<span class="ruby-identifier">k</span>] = [<span class="ruby-identifier">cur</span>, <span class="ruby-identifier">v</span>]
23
- 262: <span class="ruby-keyword kw">end</span>
24
- 263: <span class="ruby-keyword kw">else</span>
25
- 264: <span class="ruby-identifier">params</span>[<span class="ruby-identifier">k</span>] = <span class="ruby-identifier">v</span>
26
- 265: <span class="ruby-keyword kw">end</span>
27
- 266: }
28
- 267:
29
- 268: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">params</span>
30
- 269: <span class="ruby-keyword kw">end</span></pre>
13
+ <pre> <span class="ruby-comment cmt"># File lib/mongrel.rb, line 254</span>
14
+ 254: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">query_parse</span>(<span class="ruby-identifier">qs</span>, <span class="ruby-identifier">d</span> = <span class="ruby-value str">'&amp;;'</span>)
15
+ 255: <span class="ruby-identifier">params</span> = {}
16
+ 256: (<span class="ruby-identifier">qs</span><span class="ruby-operator">||</span><span class="ruby-value str">''</span>).<span class="ruby-identifier">split</span>(<span class="ruby-node">/[#{d}] */n</span>).<span class="ruby-identifier">inject</span>(<span class="ruby-identifier">params</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">h</span>,<span class="ruby-identifier">p</span><span class="ruby-operator">|</span>
17
+ 257: <span class="ruby-identifier">k</span>, <span class="ruby-identifier">v</span>=<span class="ruby-identifier">unescape</span>(<span class="ruby-identifier">p</span>).<span class="ruby-identifier">split</span>(<span class="ruby-value str">'='</span>,<span class="ruby-value">2</span>)
18
+ 258: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">cur</span> = <span class="ruby-identifier">params</span>[<span class="ruby-identifier">k</span>]
19
+ 259: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">cur</span>.<span class="ruby-identifier">class</span> <span class="ruby-operator">==</span> <span class="ruby-constant">Array</span>
20
+ 260: <span class="ruby-identifier">params</span>[<span class="ruby-identifier">k</span>] <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">v</span>
21
+ 261: <span class="ruby-keyword kw">else</span>
22
+ 262: <span class="ruby-identifier">params</span>[<span class="ruby-identifier">k</span>] = [<span class="ruby-identifier">cur</span>, <span class="ruby-identifier">v</span>]
23
+ 263: <span class="ruby-keyword kw">end</span>
24
+ 264: <span class="ruby-keyword kw">else</span>
25
+ 265: <span class="ruby-identifier">params</span>[<span class="ruby-identifier">k</span>] = <span class="ruby-identifier">v</span>
26
+ 266: <span class="ruby-keyword kw">end</span>
27
+ 267: }
28
+ 268:
29
+ 269: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">params</span>
30
+ 270: <span class="ruby-keyword kw">end</span></pre>
31
31
  </body>
32
32
  </html>