narf 0.6.2 → 0.6.3

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