narf 0.6.2 → 0.6.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 (424) hide show
  1. data/ChangeLog +22 -0
  2. data/lib/web/htmltools/xmltree.rb +2 -2
  3. data/lib/web/htmltools/xpath.rb +1 -1
  4. data/narf.gemspec +1 -1
  5. metadata +2 -460
  6. data/InstalledFiles +0 -2227
  7. data/config.save +0 -12
  8. data/doc/apache_cgi.txt~ +0 -17
  9. data/doc/fastcgi.txt~ +0 -19
  10. data/doc/rdoc/classes/Web.html +0 -369
  11. data/doc/rdoc/classes/Web.src/M000002.html +0 -15
  12. data/doc/rdoc/classes/Web.src/M000003.html +0 -15
  13. data/doc/rdoc/classes/Web.src/M000004.html +0 -15
  14. data/doc/rdoc/classes/Web.src/M000005.html +0 -15
  15. data/doc/rdoc/classes/Web.src/M000006.html +0 -20
  16. data/doc/rdoc/classes/Web.src/M000007.html +0 -18
  17. data/doc/rdoc/classes/Web.src/M000008.html +0 -18
  18. data/doc/rdoc/classes/Web.src/M000009.html +0 -18
  19. data/doc/rdoc/classes/Web.src/M000010.html +0 -15
  20. data/doc/rdoc/classes/Web.src/M000011.html +0 -15
  21. data/doc/rdoc/classes/Web.src/M000012.html +0 -15
  22. data/doc/rdoc/classes/Web/CGD.html +0 -173
  23. data/doc/rdoc/classes/Web/CGD.src/M000037.html +0 -24
  24. data/doc/rdoc/classes/Web/CGD.src/M000038.html +0 -24
  25. data/doc/rdoc/classes/Web/CGD.src/M000039.html +0 -15
  26. data/doc/rdoc/classes/Web/CGD.src/M000040.html +0 -15
  27. data/doc/rdoc/classes/Web/CGD.src/M000041.html +0 -23
  28. data/doc/rdoc/classes/Web/CGI.html +0 -946
  29. data/doc/rdoc/classes/Web/CGI.src/M000051.html +0 -15
  30. data/doc/rdoc/classes/Web/CGI.src/M000052.html +0 -24
  31. data/doc/rdoc/classes/Web/CGI.src/M000053.html +0 -15
  32. data/doc/rdoc/classes/Web/CGI.src/M000054.html +0 -15
  33. data/doc/rdoc/classes/Web/CGI.src/M000055.html +0 -15
  34. data/doc/rdoc/classes/Web/CGI.src/M000056.html +0 -15
  35. data/doc/rdoc/classes/Web/CGI.src/M000057.html +0 -17
  36. data/doc/rdoc/classes/Web/CGI.src/M000058.html +0 -34
  37. data/doc/rdoc/classes/Web/CGI.src/M000059.html +0 -22
  38. data/doc/rdoc/classes/Web/CGI.src/M000060.html +0 -15
  39. data/doc/rdoc/classes/Web/CGI.src/M000061.html +0 -15
  40. data/doc/rdoc/classes/Web/CGI.src/M000062.html +0 -19
  41. data/doc/rdoc/classes/Web/CGI.src/M000063.html +0 -18
  42. data/doc/rdoc/classes/Web/CGI.src/M000064.html +0 -19
  43. data/doc/rdoc/classes/Web/CGI.src/M000065.html +0 -15
  44. data/doc/rdoc/classes/Web/CGI.src/M000066.html +0 -15
  45. data/doc/rdoc/classes/Web/CGI.src/M000067.html +0 -15
  46. data/doc/rdoc/classes/Web/CGI.src/M000068.html +0 -13
  47. data/doc/rdoc/classes/Web/CGI.src/M000069.html +0 -13
  48. data/doc/rdoc/classes/Web/CGI.src/M000070.html +0 -13
  49. data/doc/rdoc/classes/Web/CGI.src/M000071.html +0 -13
  50. data/doc/rdoc/classes/Web/CGI.src/M000072.html +0 -19
  51. data/doc/rdoc/classes/Web/CGI.src/M000073.html +0 -15
  52. data/doc/rdoc/classes/Web/CGI.src/M000074.html +0 -19
  53. data/doc/rdoc/classes/Web/CGI.src/M000075.html +0 -15
  54. data/doc/rdoc/classes/Web/CGI.src/M000076.html +0 -15
  55. data/doc/rdoc/classes/Web/CGI.src/M000077.html +0 -15
  56. data/doc/rdoc/classes/Web/CGI.src/M000078.html +0 -20
  57. data/doc/rdoc/classes/Web/CGI.src/M000079.html +0 -36
  58. data/doc/rdoc/classes/Web/CGI.src/M000080.html +0 -19
  59. data/doc/rdoc/classes/Web/CGI.src/M000081.html +0 -18
  60. data/doc/rdoc/classes/Web/CGI.src/M000082.html +0 -15
  61. data/doc/rdoc/classes/Web/CGI.src/M000083.html +0 -17
  62. data/doc/rdoc/classes/Web/CGI.src/M000084.html +0 -15
  63. data/doc/rdoc/classes/Web/CGI.src/M000085.html +0 -16
  64. data/doc/rdoc/classes/Web/CGI.src/M000086.html +0 -15
  65. data/doc/rdoc/classes/Web/CGI.src/M000087.html +0 -15
  66. data/doc/rdoc/classes/Web/CGI.src/M000088.html +0 -15
  67. data/doc/rdoc/classes/Web/CGI.src/M000089.html +0 -16
  68. data/doc/rdoc/classes/Web/CGI.src/M000090.html +0 -15
  69. data/doc/rdoc/classes/Web/CGI.src/M000091.html +0 -15
  70. data/doc/rdoc/classes/Web/CGI.src/M000092.html +0 -15
  71. data/doc/rdoc/classes/Web/CGI.src/M000093.html +0 -15
  72. data/doc/rdoc/classes/Web/CGI.src/M000094.html +0 -15
  73. data/doc/rdoc/classes/Web/CGI.src/M000095.html +0 -15
  74. data/doc/rdoc/classes/Web/CGI.src/M000096.html +0 -19
  75. data/doc/rdoc/classes/Web/CGI.src/M000097.html +0 -15
  76. data/doc/rdoc/classes/Web/CGI.src/M000098.html +0 -15
  77. data/doc/rdoc/classes/Web/CGI.src/M000099.html +0 -43
  78. data/doc/rdoc/classes/Web/CGI.src/M000100.html +0 -18
  79. data/doc/rdoc/classes/Web/CGI.src/M000101.html +0 -20
  80. data/doc/rdoc/classes/Web/CGI.src/M000102.html +0 -15
  81. data/doc/rdoc/classes/Web/CGI.src/M000103.html +0 -15
  82. data/doc/rdoc/classes/Web/CGI.src/M000104.html +0 -15
  83. data/doc/rdoc/classes/Web/CGI.src/M000105.html +0 -24
  84. data/doc/rdoc/classes/Web/CGI.src/M000106.html +0 -24
  85. data/doc/rdoc/classes/Web/CGI.src/M000107.html +0 -22
  86. data/doc/rdoc/classes/Web/CaseInsensitiveHash.html +0 -104
  87. data/doc/rdoc/classes/Web/CaseInsensitiveHash.src/M000118.html +0 -15
  88. data/doc/rdoc/classes/Web/CaseInsensitiveHash.src/M000119.html +0 -15
  89. data/doc/rdoc/classes/Web/CaseInsensitiveHash.src/M000120.html +0 -15
  90. data/doc/rdoc/classes/Web/Mime.html +0 -122
  91. data/doc/rdoc/classes/Web/Mime.src/M000118.html +0 -15
  92. data/doc/rdoc/classes/Web/Mime.src/M000119.html +0 -15
  93. data/doc/rdoc/classes/Web/Mime.src/M000120.html +0 -23
  94. data/doc/rdoc/classes/Web/Mime.src/M000121.html +0 -15
  95. data/doc/rdoc/classes/Web/Mime.src/M000122.html +0 -15
  96. data/doc/rdoc/classes/Web/Mime.src/M000123.html +0 -23
  97. data/doc/rdoc/classes/Web/Mime.src/M000124.html +0 -15
  98. data/doc/rdoc/classes/Web/Narflates.html +0 -134
  99. data/doc/rdoc/classes/Web/Parser.html +0 -219
  100. data/doc/rdoc/classes/Web/Parser.src/M000013.html +0 -21
  101. data/doc/rdoc/classes/Web/Parser.src/M000014.html +0 -19
  102. data/doc/rdoc/classes/Web/Parser.src/M000015.html +0 -21
  103. data/doc/rdoc/classes/Web/Parser.src/M000016.html +0 -15
  104. data/doc/rdoc/classes/Web/Parser.src/M000017.html +0 -30
  105. data/doc/rdoc/classes/Web/Parser.src/M000018.html +0 -15
  106. data/doc/rdoc/classes/Web/Parser.src/M000019.html +0 -19
  107. data/doc/rdoc/classes/Web/Parser.src/M000020.html +0 -27
  108. data/doc/rdoc/classes/Web/Parser.src/M000021.html +0 -15
  109. data/doc/rdoc/classes/Web/Parser.src/M000022.html +0 -16
  110. data/doc/rdoc/classes/Web/Parser.src/M000023.html +0 -18
  111. data/doc/rdoc/classes/Web/Session.html +0 -178
  112. data/doc/rdoc/classes/Web/Session.src/M000042.html +0 -20
  113. data/doc/rdoc/classes/Web/Session.src/M000043.html +0 -19
  114. data/doc/rdoc/classes/Web/Session.src/M000044.html +0 -21
  115. data/doc/rdoc/classes/Web/Session.src/M000045.html +0 -21
  116. data/doc/rdoc/classes/Web/Session.src/M000046.html +0 -15
  117. data/doc/rdoc/classes/Web/Session.src/M000047.html +0 -17
  118. data/doc/rdoc/classes/Web/Session.src/M000048.html +0 -15
  119. data/doc/rdoc/classes/Web/Session.src/M000049.html +0 -15
  120. data/doc/rdoc/classes/Web/Session.src/M000050.html +0 -16
  121. data/doc/rdoc/classes/Web/Testing.html +0 -474
  122. data/doc/rdoc/classes/Web/Testing.src/M000024.html +0 -15
  123. data/doc/rdoc/classes/Web/Testing.src/M000025.html +0 -25
  124. data/doc/rdoc/classes/Web/Testing.src/M000026.html +0 -15
  125. data/doc/rdoc/classes/Web/Testing.src/M000027.html +0 -25
  126. data/doc/rdoc/classes/Web/Testing.src/M000028.html +0 -57
  127. data/doc/rdoc/classes/Web/Testing.src/M000029.html +0 -15
  128. data/doc/rdoc/classes/Web/Testing.src/M000030.html +0 -15
  129. data/doc/rdoc/classes/Web/Testing.src/M000031.html +0 -15
  130. data/doc/rdoc/classes/Web/Testing.src/M000032.html +0 -15
  131. data/doc/rdoc/classes/Web/Testing.src/M000033.html +0 -15
  132. data/doc/rdoc/classes/Web/Testing.src/M000034.html +0 -15
  133. data/doc/rdoc/classes/Web/Testing.src/M000035.html +0 -15
  134. data/doc/rdoc/classes/Web/Testing.src/M000036.html +0 -18
  135. data/doc/rdoc/classes/Web/Upload.html +0 -160
  136. data/doc/rdoc/classes/Web/Upload.src/M000108.html +0 -25
  137. data/doc/rdoc/classes/Web/Upload.src/M000109.html +0 -18
  138. data/doc/rdoc/classes/Web/Upload.src/M000110.html +0 -16
  139. data/doc/rdoc/classes/Web/Upload.src/M000111.html +0 -16
  140. data/doc/rdoc/classes/Web/Wiki.html +0 -249
  141. data/doc/rdoc/classes/Web/Wiki.src/M000112.html +0 -25
  142. data/doc/rdoc/classes/Web/Wiki.src/M000113.html +0 -15
  143. data/doc/rdoc/classes/Web/Wiki.src/M000114.html +0 -26
  144. data/doc/rdoc/classes/Web/Wiki.src/M000115.html +0 -21
  145. data/doc/rdoc/classes/Web/Wiki.src/M000116.html +0 -18
  146. data/doc/rdoc/classes/Web/Wiki.src/M000117.html +0 -19
  147. data/doc/rdoc/created.rid +0 -1
  148. data/doc/rdoc/files/README.html +0 -230
  149. data/doc/rdoc/files/doc/apache_cgi_txt.html +0 -76
  150. data/doc/rdoc/files/doc/fastcgi_txt.html +0 -82
  151. data/doc/rdoc/files/doc/mod_ruby_txt.html +0 -62
  152. data/doc/rdoc/files/doc/webrick_txt.html +0 -79
  153. data/doc/rdoc/files/examples/examples_rdoc.html +0 -73
  154. data/doc/rdoc/files/lib/web/cgi_rb.html +0 -75
  155. data/doc/rdoc/files/lib/web/mime_rb.html +0 -67
  156. data/doc/rdoc/files/lib/web/parser_rb.html +0 -73
  157. data/doc/rdoc/files/lib/web/session_rb.html +0 -73
  158. data/doc/rdoc/files/lib/web/template_rb.html +0 -73
  159. data/doc/rdoc/files/lib/web/testing_rb.html +0 -67
  160. data/doc/rdoc/files/lib/web/upload_rb.html +0 -73
  161. data/doc/rdoc/files/lib/web/wiki_rb.html +0 -79
  162. data/doc/rdoc/files/lib/web_rb.html +0 -116
  163. data/doc/rdoc/files/lib/web_rb.src/M000001.html +0 -15
  164. data/doc/rdoc/fr_class_index.html +0 -47
  165. data/doc/rdoc/fr_file_index.html +0 -52
  166. data/doc/rdoc/fr_method_index.html +0 -158
  167. data/doc/rdoc/index.html +0 -22
  168. data/doc/rdoc/rdoc-style.css +0 -99
  169. data/examples/admin.rb~ +0 -5
  170. data/examples/cookbook.rdoc~ +0 -238
  171. data/examples/examples.rdoc~ +0 -17
  172. data/examples/hello.world.rb~ +0 -3
  173. data/examples/session.rb~ +0 -31
  174. data/examples/test/test.hello.world.rb~ +0 -9
  175. data/examples/test/test.session.rb~ +0 -37
  176. data/examples/wiki.rb~ +0 -5
  177. data/lib/web.rb~ +0 -290
  178. data/lib/web/#assertinclude.rb# +0 -110
  179. data/lib/web/assertinclude.rb~ +0 -110
  180. data/lib/web/cgi.rb~ +0 -640
  181. data/lib/web/htmlparser/html-parser.rb~ +0 -429
  182. data/lib/web/htmlparser/sgml-parser.rb~ +0 -332
  183. data/lib/web/htmltools/element.rb~ +0 -296
  184. data/lib/web/htmltools/stparser.rb~ +0 -276
  185. data/lib/web/htmltools/tags.rb~ +0 -286
  186. data/lib/web/htmltools/tree.rb~ +0 -139
  187. data/lib/web/htmltools/xmltree.rb~ +0 -160
  188. data/lib/web/htmltools/xpath.rb~ +0 -71
  189. data/lib/web/parser.rb~ +0 -288
  190. data/lib/web/request.rb~ +0 -238
  191. data/lib/web/runner.rb~ +0 -26
  192. data/lib/web/sapi/fastcgi.rb~ +0 -25
  193. data/lib/web/sapi/mod_ruby.rb~ +0 -46
  194. data/lib/web/sapi/webrick.rb~ +0 -89
  195. data/lib/web/session.rb~ +0 -75
  196. data/lib/web/tagparser.rb~ +0 -96
  197. data/lib/web/template.rb~ +0 -613
  198. data/lib/web/testing.rb~ +0 -546
  199. data/lib/web/unit/response.rb~ +0 -461
  200. data/lib/web/unit/ui/cui/testrunner.rb~ +0 -50
  201. data/lib/web/upload.rb~ +0 -262
  202. data/lib/web/wiki.rb~ +0 -517
  203. data/lib/web/wiki/linker.rb~ +0 -72
  204. data/lib/web/wiki/mime.rb~ +0 -68
  205. data/lib/web/wiki/page.rb~ +0 -192
  206. data/lib/web/wiki/resources/#edit.html# +0 -65
  207. data/lib/web/wiki/resources/admin.html~ +0 -13
  208. data/lib/web/wiki/resources/default-content_editor.html~ +0 -1
  209. data/lib/web/wiki/resources/edit.html~ +0 -2
  210. data/lib/web/wiki/resources/home.html~ +0 -10
  211. data/lib/web/wiki/resources/htmlarea/ChangeLog +0 -1185
  212. data/lib/web/wiki/resources/htmlarea/dialog.js +0 -72
  213. data/lib/web/wiki/resources/htmlarea/examples/2-areas.cgi +0 -16
  214. data/lib/web/wiki/resources/htmlarea/examples/2-areas.html +0 -158
  215. data/lib/web/wiki/resources/htmlarea/examples/context-menu.html +0 -95
  216. data/lib/web/wiki/resources/htmlarea/examples/core.html +0 -184
  217. data/lib/web/wiki/resources/htmlarea/examples/css.html +0 -88
  218. data/lib/web/wiki/resources/htmlarea/examples/custom.css +0 -29
  219. data/lib/web/wiki/resources/htmlarea/examples/full-page.html +0 -75
  220. data/lib/web/wiki/resources/htmlarea/examples/fully-loaded.html +0 -248
  221. data/lib/web/wiki/resources/htmlarea/examples/index.html +0 -40
  222. data/lib/web/wiki/resources/htmlarea/examples/spell-checker.html +0 -132
  223. data/lib/web/wiki/resources/htmlarea/examples/table-operations.html +0 -116
  224. data/lib/web/wiki/resources/htmlarea/examples/test.cgi +0 -21
  225. data/lib/web/wiki/resources/htmlarea/htmlarea.css +0 -180
  226. data/lib/web/wiki/resources/htmlarea/htmlarea.js +0 -2175
  227. data/lib/web/wiki/resources/htmlarea/images/ed_about.gif +0 -0
  228. data/lib/web/wiki/resources/htmlarea/images/ed_align_center.gif +0 -0
  229. data/lib/web/wiki/resources/htmlarea/images/ed_align_justify.gif +0 -0
  230. data/lib/web/wiki/resources/htmlarea/images/ed_align_left.gif +0 -0
  231. data/lib/web/wiki/resources/htmlarea/images/ed_align_right.gif +0 -0
  232. data/lib/web/wiki/resources/htmlarea/images/ed_blank.gif +0 -0
  233. data/lib/web/wiki/resources/htmlarea/images/ed_charmap.gif +0 -0
  234. data/lib/web/wiki/resources/htmlarea/images/ed_color_bg.gif +0 -0
  235. data/lib/web/wiki/resources/htmlarea/images/ed_color_fg.gif +0 -0
  236. data/lib/web/wiki/resources/htmlarea/images/ed_copy.gif +0 -0
  237. data/lib/web/wiki/resources/htmlarea/images/ed_custom.gif +0 -0
  238. data/lib/web/wiki/resources/htmlarea/images/ed_cut.gif +0 -0
  239. data/lib/web/wiki/resources/htmlarea/images/ed_delete.gif +0 -0
  240. data/lib/web/wiki/resources/htmlarea/images/ed_format_bold.gif +0 -0
  241. data/lib/web/wiki/resources/htmlarea/images/ed_format_italic.gif +0 -0
  242. data/lib/web/wiki/resources/htmlarea/images/ed_format_strike.gif +0 -0
  243. data/lib/web/wiki/resources/htmlarea/images/ed_format_sub.gif +0 -0
  244. data/lib/web/wiki/resources/htmlarea/images/ed_format_sup.gif +0 -0
  245. data/lib/web/wiki/resources/htmlarea/images/ed_format_underline.gif +0 -0
  246. data/lib/web/wiki/resources/htmlarea/images/ed_help.gif +0 -0
  247. data/lib/web/wiki/resources/htmlarea/images/ed_hr.gif +0 -0
  248. data/lib/web/wiki/resources/htmlarea/images/ed_html.gif +0 -0
  249. data/lib/web/wiki/resources/htmlarea/images/ed_image.gif +0 -0
  250. data/lib/web/wiki/resources/htmlarea/images/ed_indent_less.gif +0 -0
  251. data/lib/web/wiki/resources/htmlarea/images/ed_indent_more.gif +0 -0
  252. data/lib/web/wiki/resources/htmlarea/images/ed_left_to_right.gif +0 -0
  253. data/lib/web/wiki/resources/htmlarea/images/ed_link.gif +0 -0
  254. data/lib/web/wiki/resources/htmlarea/images/ed_list_bullet.gif +0 -0
  255. data/lib/web/wiki/resources/htmlarea/images/ed_list_num.gif +0 -0
  256. data/lib/web/wiki/resources/htmlarea/images/ed_paste.gif +0 -0
  257. data/lib/web/wiki/resources/htmlarea/images/ed_redo.gif +0 -0
  258. data/lib/web/wiki/resources/htmlarea/images/ed_right_to_left.gif +0 -0
  259. data/lib/web/wiki/resources/htmlarea/images/ed_save.gif +0 -0
  260. data/lib/web/wiki/resources/htmlarea/images/ed_show_border.gif +0 -0
  261. data/lib/web/wiki/resources/htmlarea/images/ed_splitcel.gif +0 -0
  262. data/lib/web/wiki/resources/htmlarea/images/ed_undo.gif +0 -0
  263. data/lib/web/wiki/resources/htmlarea/images/fullscreen_maximize.gif +0 -0
  264. data/lib/web/wiki/resources/htmlarea/images/fullscreen_minimize.gif +0 -0
  265. data/lib/web/wiki/resources/htmlarea/images/insert_table.gif +0 -0
  266. data/lib/web/wiki/resources/htmlarea/index.html +0 -199
  267. data/lib/web/wiki/resources/htmlarea/lang/b5.js +0 -36
  268. data/lib/web/wiki/resources/htmlarea/lang/cz.js +0 -63
  269. data/lib/web/wiki/resources/htmlarea/lang/da.js +0 -38
  270. data/lib/web/wiki/resources/htmlarea/lang/de.js +0 -54
  271. data/lib/web/wiki/resources/htmlarea/lang/ee.js +0 -63
  272. data/lib/web/wiki/resources/htmlarea/lang/el.js +0 -75
  273. data/lib/web/wiki/resources/htmlarea/lang/en.js +0 -88
  274. data/lib/web/wiki/resources/htmlarea/lang/es.js +0 -51
  275. data/lib/web/wiki/resources/htmlarea/lang/fi.js +0 -46
  276. data/lib/web/wiki/resources/htmlarea/lang/fr.js +0 -61
  277. data/lib/web/wiki/resources/htmlarea/lang/gb.js +0 -36
  278. data/lib/web/wiki/resources/htmlarea/lang/he.js +0 -63
  279. data/lib/web/wiki/resources/htmlarea/lang/hu.js +0 -63
  280. data/lib/web/wiki/resources/htmlarea/lang/it.js +0 -54
  281. data/lib/web/wiki/resources/htmlarea/lang/ja-euc.js +0 -37
  282. data/lib/web/wiki/resources/htmlarea/lang/ja-jis.js +0 -37
  283. data/lib/web/wiki/resources/htmlarea/lang/ja-sjis.js +0 -37
  284. data/lib/web/wiki/resources/htmlarea/lang/ja-utf8.js +0 -37
  285. data/lib/web/wiki/resources/htmlarea/lang/lt.js +0 -55
  286. data/lib/web/wiki/resources/htmlarea/lang/lv.js +0 -55
  287. data/lib/web/wiki/resources/htmlarea/lang/nb.js +0 -36
  288. data/lib/web/wiki/resources/htmlarea/lang/nl.js +0 -90
  289. data/lib/web/wiki/resources/htmlarea/lang/no.js +0 -79
  290. data/lib/web/wiki/resources/htmlarea/lang/pl.js +0 -36
  291. data/lib/web/wiki/resources/htmlarea/lang/pt_br.js +0 -37
  292. data/lib/web/wiki/resources/htmlarea/lang/ro.js +0 -80
  293. data/lib/web/wiki/resources/htmlarea/lang/ru.js +0 -63
  294. data/lib/web/wiki/resources/htmlarea/lang/se.js +0 -38
  295. data/lib/web/wiki/resources/htmlarea/lang/si.js +0 -63
  296. data/lib/web/wiki/resources/htmlarea/lang/vn.js +0 -51
  297. data/lib/web/wiki/resources/htmlarea/license.txt +0 -30
  298. data/lib/web/wiki/resources/htmlarea/plugins/CSS/css.js +0 -116
  299. data/lib/web/wiki/resources/htmlarea/plugins/CSS/lang/en.js +0 -2
  300. data/lib/web/wiki/resources/htmlarea/plugins/ContextMenu/context-menu.js +0 -416
  301. data/lib/web/wiki/resources/htmlarea/plugins/ContextMenu/lang/de.js +0 -59
  302. data/lib/web/wiki/resources/htmlarea/plugins/ContextMenu/lang/el.js +0 -57
  303. data/lib/web/wiki/resources/htmlarea/plugins/ContextMenu/lang/en.js +0 -66
  304. data/lib/web/wiki/resources/htmlarea/plugins/ContextMenu/lang/nl.js +0 -66
  305. data/lib/web/wiki/resources/htmlarea/plugins/ContextMenu/menu.css +0 -64
  306. data/lib/web/wiki/resources/htmlarea/plugins/FullPage/full-page.js +0 -143
  307. data/lib/web/wiki/resources/htmlarea/plugins/FullPage/img/docprop.gif +0 -0
  308. data/lib/web/wiki/resources/htmlarea/plugins/FullPage/lang/en.js +0 -25
  309. data/lib/web/wiki/resources/htmlarea/plugins/FullPage/lang/ro.js +0 -25
  310. data/lib/web/wiki/resources/htmlarea/plugins/FullPage/popups/docprop.html +0 -131
  311. data/lib/web/wiki/resources/htmlarea/plugins/FullPage/test.html +0 -89
  312. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/img/spell-check.gif +0 -0
  313. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/cz.js +0 -37
  314. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/da.js +0 -37
  315. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/de.js +0 -28
  316. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/en.js +0 -38
  317. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/hu.js +0 -37
  318. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/it.js +0 -28
  319. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/ro.js +0 -37
  320. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/readme-tech.html +0 -114
  321. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/spell-check-logic.cgi +0 -210
  322. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/spell-check-style.css +0 -10
  323. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/spell-check-ui.html +0 -122
  324. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/spell-check-ui.js +0 -397
  325. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/spell-checker.js +0 -79
  326. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/cell-delete.gif +0 -0
  327. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/cell-insert-after.gif +0 -0
  328. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/cell-insert-before.gif +0 -0
  329. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/cell-merge.gif +0 -0
  330. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/cell-prop.gif +0 -0
  331. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/cell-split.gif +0 -0
  332. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/col-delete.gif +0 -0
  333. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/col-insert-after.gif +0 -0
  334. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/col-insert-before.gif +0 -0
  335. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/col-split.gif +0 -0
  336. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/row-delete.gif +0 -0
  337. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/row-insert-above.gif +0 -0
  338. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/row-insert-under.gif +0 -0
  339. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/row-prop.gif +0 -0
  340. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/row-split.gif +0 -0
  341. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/table-prop.gif +0 -0
  342. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/cz.js +0 -90
  343. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/da.js +0 -90
  344. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/de.js +0 -81
  345. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/el.js +0 -81
  346. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/en.js +0 -90
  347. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/fi.js +0 -66
  348. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/hu.js +0 -63
  349. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/it.js +0 -81
  350. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/nl.js +0 -90
  351. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/no.js +0 -91
  352. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/ro.js +0 -90
  353. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/table-operations.js +0 -1160
  354. data/lib/web/wiki/resources/htmlarea/popupdiv.js +0 -369
  355. data/lib/web/wiki/resources/htmlarea/popups/about.html +0 -378
  356. data/lib/web/wiki/resources/htmlarea/popups/blank.html +0 -2
  357. data/lib/web/wiki/resources/htmlarea/popups/custom2.html +0 -35
  358. data/lib/web/wiki/resources/htmlarea/popups/editor_help.html +0 -16
  359. data/lib/web/wiki/resources/htmlarea/popups/fullscreen.html +0 -133
  360. data/lib/web/wiki/resources/htmlarea/popups/insert_image.html +0 -191
  361. data/lib/web/wiki/resources/htmlarea/popups/insert_table.html +0 -174
  362. data/lib/web/wiki/resources/htmlarea/popups/link.html +0 -142
  363. data/lib/web/wiki/resources/htmlarea/popups/old-fullscreen.html +0 -131
  364. data/lib/web/wiki/resources/htmlarea/popups/old_insert_image.html +0 -206
  365. data/lib/web/wiki/resources/htmlarea/popups/popup.js +0 -109
  366. data/lib/web/wiki/resources/htmlarea/popups/select_color.html +0 -347
  367. data/lib/web/wiki/resources/htmlarea/popupwin.js +0 -139
  368. data/lib/web/wiki/resources/htmlarea/reference.html +0 -523
  369. data/lib/web/wiki/resources/htmlarea/release-notes.html +0 -165
  370. data/lib/web/wiki/resources/illustration.html~ +0 -1
  371. data/lib/web/wiki/resources/index.html~ +0 -4
  372. data/lib/web/wiki/resources/more_news.html~ +0 -5
  373. data/lib/web/wiki/resources/more_news_rss_0.91.html +0 -23
  374. data/lib/web/wiki/resources/page_history.html~ +0 -19
  375. data/lib/web/wiki/resources/template.html~ +0 -13
  376. data/narf.gemspec~ +0 -40
  377. data/sapi/apache_cgi/INSTALL.txt~ +0 -9
  378. data/sapi/apache_cgi/README~ +0 -0
  379. data/sapi/fastcgi/INSTALL.txt~ +0 -17
  380. data/sapi/mod_ruby/INSTALL.txt~ +0 -5
  381. data/sapi/webrick/INSTALL.txt~ +0 -21
  382. data/sapi/webrick/run_webrick.rb~ +0 -16
  383. data/scripts/makedist.rb~ +0 -49
  384. data/test/mod_ruby_stub.rb~ +0 -38
  385. data/test/test.action.rb~ +0 -142
  386. data/test/test.assertinclude.rb~ +0 -109
  387. data/test/test.narf.cgi.rb~ +0 -105
  388. data/test/test.request.rb~ +0 -328
  389. data/test/test.response.rb~ +0 -556
  390. data/test/test.template.rb~ +0 -832
  391. data/test/test.web.test.rb~ +0 -461
  392. data/test/webunit/test_cookie.rb~ +0 -128
  393. data/test/webunit/test_form.rb~ +0 -43
  394. data/test/webunit/test_multipart.rb~ +0 -53
  395. data/test/webunit/test_params.rb~ +0 -211
  396. data/test/webunit/test_response.rb~ +0 -145
  397. data/test/webunit/test_site/assert.html~ +0 -1
  398. data/test/webunit/test_site/auth/index.html~ +0 -1
  399. data/test/webunit/test_site/badtags.html~ +0 -1
  400. data/test/webunit/test_site/cookie.cgi~ +0 -35
  401. data/test/webunit/test_site/document.xml~ +0 -1
  402. data/test/webunit/test_site/form.html~ +0 -1
  403. data/test/webunit/test_site/frame-0.html~ +0 -1
  404. data/test/webunit/test_site/frame-1.html~ +0 -1
  405. data/test/webunit/test_site/frame.html~ +0 -1
  406. data/test/webunit/test_site/image.html~ +0 -1
  407. data/test/webunit/test_site/include.cgi~ +0 -10
  408. data/test/webunit/test_site/jscript-0.html~ +0 -1
  409. data/test/webunit/test_site/jscript-1.html~ +0 -1
  410. data/test/webunit/test_site/jscript.html~ +0 -1
  411. data/test/webunit/test_site/link.html~ +0 -1
  412. data/test/webunit/test_site/multipart.cgi~ +0 -25
  413. data/test/webunit/test_site/multipart.html~ +0 -1
  414. data/test/webunit/test_site/params.html~ +0 -1
  415. data/test/webunit/test_site/redirect.cgi~ +0 -14
  416. data/test/webunit/test_site/response.html~ +0 -1
  417. data/test/webunit/test_site/simple.cgi~ +0 -17
  418. data/test/webunit/test_site/stock.cgi~ +0 -34
  419. data/test/webunit/test_site/table.html~ +0 -1
  420. data/test/webunit/test_site/test.cgi~ +0 -25
  421. data/test/wiki/test.history.rb~ +0 -254
  422. data/test/wiki/test.illustration_page.rb~ +0 -287
  423. data/test/wiki/test.tarpit.rb~ +0 -40
  424. data/test/wiki/test.wiki.rb~ +0 -295
@@ -1,71 +0,0 @@
1
- # Copyright:: Copyright (C) 2002, Ned Konz <ned@bike-nomad.com>
2
- # License:: Same as Ruby's
3
- # CVS ID: $Id: xpath.rb,v 1.2 2002/06/04 02:52:12 ned Exp $
4
-
5
- # This module adapts REXML's XPath functionality for use with
6
- # <tt>HTMLTree::Parser</tt>.
7
-
8
- require 'html/tree'
9
- require 'rexml/element'
10
- require 'rexml/document'
11
- require 'rexml/xpath'
12
-
13
- module HTMLTree
14
-
15
- module TreeElement
16
- # Given the XPath path, return an Array of matching sub-elements of
17
- # the REXML tree.
18
- def rexml_match(path)
19
- node = as_rexml_document
20
- REXML::XPath.match(node, path)
21
- end
22
- end
23
-
24
- class Element
25
- # convert the given HTMLTree::Element (or HTMLTree::Document) into
26
- # a REXML::Element or REXML::Document, ready to use REXML::XPath on.
27
- # Note that this caches the tree; further changes to my tree will
28
- # not be reflected in subsequent calls
29
- def as_rexml_document(rparent = nil, context = {})
30
- return @_rexml_tree if @_rexml_tree
31
- node = REXML::Element.new( tag, rparent, context )
32
- attribute_order().each { |attr|
33
- node.add_attribute(attr, attribute(attr).to_s)
34
- }
35
- children().each { |child|
36
- childNode = child.as_rexml_document(node, context)
37
- }
38
- @_rexml_tree = node
39
- end
40
- end
41
-
42
- class Data
43
- def as_rexml_document(rparent = nil, context = {})
44
- rparent.add_text(@_content)
45
- end
46
- end
47
-
48
- class Comment
49
- def as_rexml_document(rparent = nil, context = {})
50
- node = REXML::Comment.new(@_content, parent)
51
- end
52
- end
53
-
54
- class Special
55
- def as_rexml_document(rparent = nil, context = {})
56
- node = REXML::Instruction.new(@_content,
57
- context[:respect_whitespace] || false, rparent)
58
- end
59
- end
60
-
61
- class Document
62
- def as_rexml_document(context = {})
63
- node = REXML::Document.new(nil, context)
64
- # add DocType
65
- # add <HTML> node
66
- node.add( html_node.as_rexml_document(node, context) )
67
- node
68
- end
69
- end
70
-
71
- end
data/lib/web/parser.rb~ DELETED
@@ -1,288 +0,0 @@
1
- require 'tempfile'
2
-
3
- module Web
4
- # == Purpose
5
- #
6
- # this hash is has case insensitive keys. Might be somewhat
7
- # incomplete
8
- class CaseInsensitiveHash < Hash #:nodoc:
9
- def [](key)
10
- super( key.to_s.downcase )
11
- end
12
-
13
- def []= (key, value)
14
- super( key.to_s.downcase, value )
15
- end
16
-
17
- def has_key? (key)
18
- super( key.to_s.downcase )
19
- end
20
- end
21
-
22
- # == Purpose
23
- #
24
- # This module contains methods to parse web requests.
25
- # Parser counts on the attributes of a cgd: options, input, env
26
- module Parser
27
-
28
- # This method counts on the attributes of a cgd: options, input, env
29
- # It will set @cookies and @multiple_params
30
- def parse_request
31
- @cookies ||= normalize(options[:cookies] ||
32
- parse_cookie( env['http_cookie'] ||
33
- env['cookie'] ) )
34
-
35
- @multiple_params ||= normalize( options[:params] ||
36
- parse_params )
37
-
38
- end
39
-
40
- # returns a hash with downcased keys of the env_in variable
41
- def downcase_env( env_in )
42
- env = CaseInsensitiveHash.new
43
- env_in.each{ |k, v|
44
- env[k.downcase] = v
45
- }
46
- env
47
- end
48
-
49
- # normalizes a params hash
50
- def Parser.normalize( params )
51
- params.each { |key, value|
52
- unless value.kind_of? Array
53
- params[key] = [value]
54
- end
55
- }
56
- params.default = []
57
- params
58
- end
59
-
60
- def normalize(params)
61
- Parser.normalize(params)
62
- end
63
-
64
- # Parse a raw cookie string
65
- def Parser.parse_cookie(raw_cookie)
66
- cookies = Hash.new([])
67
- return cookies unless raw_cookie
68
-
69
- raw_cookie.split(/; /).each do |pairs|
70
- name, values = pairs.split('=',2)
71
- name = Web::unescape(name)
72
- values ||= ""
73
- values = values.split('&').collect{|v| Web::unescape(v) }
74
- if cookies.has_key?(name)
75
- cookies[name].push(*values)
76
- else
77
- cookies[name] = values
78
- end
79
- end
80
-
81
- cookies
82
- end
83
-
84
- def parse_cookie(raw_cookie)
85
- Parser.parse_cookie(raw_cookie)
86
- end
87
-
88
- # parse and return multiple_params
89
- def parse_params
90
- if (multipart?)
91
- parse_multipart
92
- else
93
- parse_query_string( query_string )
94
- end
95
- end
96
-
97
- def query_string #:nodoc:
98
- case env["request_method"]
99
- when "GET", "HEAD"
100
- if (defined? MOD_RUBY) # <= this check is untested.
101
- # search the test files for
102
- # test_parse_get_with_mod_ruby
103
- # for an explanation
104
- mod_ruby_query_string
105
- else
106
- env["query_string"]
107
- end
108
- when "POST"
109
- input.binmode
110
- input.read(Integer(env['content_length']))
111
- end
112
- end
113
-
114
- # this method solely exists b/c of difficulties setting MOD_RUBY dynamically.
115
- # so this method exists so I can test the effect separately
116
- # from the (currently untestable) cause
117
- def Parser.mod_ruby_query_string #:nodoc:
118
- Apache::request.args
119
- end
120
-
121
- def mod_ruby_query_string #:nodoc:
122
- Parser.mod_ruby_query_string
123
- end
124
-
125
- # Parse a query_string into parameters
126
- def Parser.parse_query_string(query)
127
- query ||= ""
128
- params = Hash.new([])
129
-
130
- query.split(/[&;]/n).each do |pairs|
131
- key, value = pairs.split('=',2).collect{|v| Web::unescape(v) }
132
- if params.has_key?(key)
133
- params[key].push(value)
134
- else
135
- params[key] = [value]
136
- end
137
- end
138
-
139
- params
140
- end
141
-
142
- def parse_query_string(query)
143
- Parser.parse_query_string(query)
144
- end
145
-
146
- # note this returns the un-arrayified version of the array
147
- def parse_query_string_typed(query) #:nodoc: :notest:
148
- params = parse_query_string query
149
- params2 = {}
150
- params.collect do |k,v|
151
- if ! (k =~ /type/)
152
- if (atype = params["#{k}#type"][0])
153
- params2[k] = Module.const_get(atype.intern).unencode(v[0])
154
- else
155
- params2[k] = v[0]
156
- end
157
- end
158
- end
159
- params2
160
- end
161
-
162
- def multipart?
163
- ("POST" == env['request_method']) &&
164
- (/multipart\/form-data/.match(env['content_type']))
165
- end
166
-
167
- # parse multipart/form-data
168
- def parse_multipart
169
- %r|\Amultipart/form-data.*boundary=\"?([^\";,]+)\"?|n.match(env['content_type'])
170
- boundary = $1.dup
171
-
172
- read_multipart(boundary, Integer(env['content_length']))
173
- end
174
-
175
- EOL="\r\n"
176
-
177
- def read_multipart(boundary, content_length) #:nodoc:
178
- params = Hash.new([])
179
- boundary = "--" + boundary
180
- buf = ""
181
- bufsize = 10 * 1024
182
-
183
- # start multipart/form-data
184
- input.binmode
185
- boundary_size = boundary.size + EOL.size
186
- content_length -= boundary_size
187
- status = input.read(boundary_size)
188
- if nil == status
189
- raise EOFError, "no content body"
190
- end
191
-
192
- # ok... so what the hell does this do?
193
- # I promise never to denigrate the accomplishments
194
- # of my predecessors again :-)
195
- # ~ pat
196
- until -1 == content_length
197
- head = nil
198
- body = Tempfile.new("Web")
199
- body.binmode
200
-
201
- # until we have:
202
- # * a header
203
- # * and a buffer that has a boundary
204
- # so far, make sense to me.
205
- until head and /#{boundary}(?:#{EOL}|--)/n.match(buf)
206
- # if we have a header....
207
- if head
208
- # !??!??!?!?!
209
- trim_size = (EOL + boundary + EOL).size
210
- if trim_size < buf.size
211
- body.print buf[0 ... (buf.size - trim_size)]
212
- buf[0 ... (buf.size - trim_size)] = ""
213
- end
214
-
215
- # If we have a double space (the smell of a header...)
216
- elsif /#{EOL}#{EOL}/n.match(buf)
217
- # extract the header, and erase it from the buffer
218
- buf = buf.sub(/\A((?:.|\n)*?#{EOL})#{EOL}/n) do
219
- head = $1.dup
220
- ""
221
- end
222
- next
223
- end
224
-
225
- # read a chunk from the input
226
- c = if bufsize < content_length
227
- input.read(bufsize) or ''
228
- else
229
- input.read(content_length) or ''
230
- end
231
- # add it to the input, reduce our countdown
232
- buf.concat c
233
- content_length -= c.size
234
- end
235
-
236
- /Content-Disposition:.* filename="?([^\";]*)"?/ni.match(head)
237
- filename = ($1 or "").dup
238
- if /Mac/ni.match(env['http_user_agent']) and
239
- /Mozilla/ni.match(env['http_user_agent']) and
240
- (not /MSIE/ni.match(env['http_user_agent']))
241
- filename = Web::unescape(filename)
242
- end
243
-
244
- /Content-Type: (.*)/ni.match(head)
245
- content_type = ($1 or "").strip
246
-
247
- # is this the part that is eating too much?
248
- #buf = buf.sub(/\A(.*?)(?:#{EOL})?#{boundary}(#{EOL}|--)/mn) do
249
- buf = buf.sub(/\A((?:.|\n)*?)(?:[\r\n]{1,2})?#{boundary}([\r\n]{1,2}|--)/n) do
250
- body.print $1
251
- if "--" == $2
252
- content_length = -1
253
- end
254
- ""
255
- end
256
-
257
- body.rewind
258
-
259
-
260
- if (content_type.empty?)
261
- upload = body.read
262
- else
263
- upload = Web::Upload.new( body, content_type, filename )
264
- end
265
-
266
- /Content-Disposition:.* name="?([^\";]*)"?/ni.match(head)
267
- name = $1.dup
268
-
269
-
270
- File.open( "/Users/patsplat/Desktop/test.#{name}", "w" ) {|f|
271
- f.write body.read
272
- }
273
-
274
- body.rewind
275
-
276
- if params.has_key?(name)
277
- params[name].push(upload)
278
- else
279
- params[name] = [upload]
280
- end
281
-
282
- end
283
-
284
- params
285
- end # read_multipart
286
-
287
- end
288
- end
data/lib/web/request.rb~ DELETED
@@ -1,238 +0,0 @@
1
- require 'tempfile'
2
-
3
- module Web
4
- module Parser
5
-
6
- # Parser counts on the attributes of a cgd: options, input, env
7
- def parse_request
8
- @cookies ||= normalize(options[:cookies] ||
9
- parse_cookie( env['http_cookie'] ||
10
- env['cookie'] ) )
11
-
12
- @multiple_params ||= normalize( options[:params] ||
13
- parse_params )
14
-
15
- end
16
-
17
- def downcase_env( env_in )
18
- env = {}
19
- env_in.each{ |k, v|
20
- env[k.downcase] = v
21
- }
22
- env
23
- end
24
-
25
- def Parser.normalize( params )
26
- params.each { |key, value|
27
- unless value.kind_of? Array
28
- params[key] = [value]
29
- end
30
- }
31
- params.default = []
32
- params
33
- end
34
-
35
- def normalize(params)
36
- Parser.normalize(params)
37
- end
38
-
39
-
40
- def Parser.parse_cookie(raw_cookie)
41
- cookies = Hash.new([])
42
- return cookies unless raw_cookie
43
-
44
- raw_cookie.split(/; /).each do |pairs|
45
- name, values = pairs.split('=',2)
46
- name = Web::unescape(name)
47
- values ||= ""
48
- values = values.split('&').collect{|v| Web::unescape(v) }
49
- if cookies.has_key?(name)
50
- cookies[name].push(*values)
51
- else
52
- cookies[name] = values
53
- end
54
- end
55
-
56
- cookies
57
- end
58
-
59
- def parse_cookie(raw_cookie)
60
- Parser.parse_cookie(raw_cookie)
61
- end
62
-
63
- def parse_params
64
- if (multipart?)
65
- parse_multipart
66
- else
67
- parse_query_string( query_string )
68
- end
69
- end
70
-
71
- def query_string
72
- case env["request_method"]
73
- when "GET", "HEAD"
74
- if (defined? MOD_RUBY) # <= this check is untested.
75
- # search the test files for
76
- # test_parse_get_with_mod_ruby
77
- # for an explanation
78
- mod_ruby_query_string
79
- else
80
- env["query_string"]
81
- end
82
- when "POST"
83
- input.binmode
84
- input.read(Integer(env['content_length']))
85
- end
86
- end
87
-
88
- # this method solely exists b/c of difficulties setting MOD_RUBY dynamically.
89
- # so this method exists so I can test the effect separately
90
- # from the (currently untestable) cause
91
- def Parser.mod_ruby_query_string #:nodoc:
92
- Apache::request.args
93
- end
94
-
95
- def mod_ruby_query_string
96
- Parser.mod_ruby_query_string
97
- end
98
-
99
- def Parser.parse_query_string(query)
100
- query ||= ""
101
- params = Hash.new([])
102
-
103
- query.split(/[&;]/n).each do |pairs|
104
- key, value = pairs.split('=',2).collect{|v| Web::unescape(v) }
105
- if params.has_key?(key)
106
- params[key].push(value)
107
- else
108
- params[key] = [value]
109
- end
110
- end
111
-
112
- params
113
- end
114
-
115
- def parse_query_string(query)
116
- Parser.parse_query_string(query)
117
- end
118
-
119
- # note this returns the un-arrayified version of the array
120
- def parse_query_string_typed(query) #:nodoc: :notest:
121
- params = parse_query_string query
122
- params2 = {}
123
- params.collect do |k,v|
124
- if ! (k =~ /type/)
125
- if (atype = params["#{k}#type"][0])
126
- params2[k] = Module.const_get(atype.intern).unencode(v[0])
127
- else
128
- params2[k] = v[0]
129
- end
130
- end
131
- end
132
- params2
133
- end
134
-
135
- def multipart?
136
- ("POST" == env['request_method']) &&
137
- (/multipart\/form-data/.match(env['content_type']))
138
- end
139
-
140
- def Parser.parse_multipart
141
- %r|\Amultipart/form-data.*boundary=\"?([^\";,]+)\"?|n.match(env['content_type'])
142
- boundary = $1.dup
143
-
144
- read_multipart(boundary, Integer(env['content_length']))
145
- end
146
-
147
- EOL="\r\n"
148
-
149
- def read_multipart(boundary, content_length) #:nodoc:
150
- params = Hash.new([])
151
- boundary = "--" + boundary
152
- buf = ""
153
- bufsize = 10 * 1024
154
-
155
- # start multipart/form-data
156
- input.binmode
157
- boundary_size = boundary.size + EOL.size
158
- content_length -= boundary_size
159
- status = input.read(boundary_size)
160
- if nil == status
161
- raise EOFError, "no content body"
162
- end
163
-
164
- until -1 == content_length
165
- head = nil
166
- body = Tempfile.new("Web")
167
- body.binmode
168
-
169
- until head and /#{boundary}(?:#{EOL}|--)/n.match(buf)
170
-
171
- if head
172
- trim_size = (EOL + boundary + EOL).size
173
- if trim_size < buf.size
174
- body.print buf[0 ... (buf.size - trim_size)]
175
- buf[0 ... (buf.size - trim_size)] = ""
176
- end
177
- elsif /#{EOL}#{EOL}/n.match(buf)
178
- buf = buf.sub(/\A((?:.|\n)*?#{EOL})#{EOL}/n) do
179
- head = $1.dup
180
- ""
181
- end
182
- next
183
- end
184
-
185
- c = if bufsize < content_length
186
- input.read(bufsize) or ''
187
- else
188
- input.read(content_length) or ''
189
- end
190
- buf.concat c
191
- content_length -= c.size
192
-
193
- end
194
-
195
-
196
- /Content-Disposition:.* filename="?([^\";]*)"?/ni.match(head)
197
- filename = ($1 or "").dup
198
- if /Mac/ni.match(env['http_user_agent']) and
199
- /Mozilla/ni.match(env['http_user_agent']) and
200
- (not /MSIE/ni.match(env['http_user_agent']))
201
- filename = Web::unescape(filename)
202
- end
203
-
204
- /Content-Type: (.*)/ni.match(head)
205
- content_type = ($1 or "").strip
206
-
207
- buf = buf.sub(/\A((?:.|\n)*?)(?:#{EOL})?#{boundary}(#{EOL}|--)/n) do
208
- body.print $1
209
- if "--" == $2
210
- content_length = -1
211
- end
212
- ""
213
- end
214
-
215
- body.rewind
216
-
217
- if (content_type.empty?)
218
- upload = body.read
219
- else
220
- upload = Web::Upload.new( body, content_type, filename )
221
- end
222
-
223
- /Content-Disposition:.* name="?([^\";]*)"?/ni.match(head)
224
- name = $1.dup
225
-
226
- if params.has_key?(name)
227
- params[name].push(upload)
228
- else
229
- params[name] = [upload]
230
- end
231
-
232
- end
233
-
234
- params
235
- end # read_multipart
236
-
237
- end
238
- end