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
data/lib/web/testing.rb~ DELETED
@@ -1,546 +0,0 @@
1
- module Web
2
- @@docroot = nil
3
-
4
- # When testing, this is a useful method to tell
5
- # NARF where to find your scripts
6
- def Web.set_docroot docroot
7
- @@docroot = docroot
8
- end
9
-
10
- def Web.get_docroot
11
- @@docroot
12
- end
13
-
14
- # == Purpose
15
- # The testing module facilitates the testing of Web applications
16
- # without the overhead of a web server to run.
17
- #
18
- # Given these files:
19
- #
20
- # script.rb
21
- # test.rb
22
- #
23
- # where script.rb is:
24
- #
25
- # #!/usr/bin/ruby
26
- # require 'web'
27
- #
28
- # Web::process {
29
- # Web.write "param is #{Web["param"]}"
30
- # }
31
- #
32
- # and test.rb is:
33
- #
34
- # require 'web'
35
- # require 'test/unit'
36
- #
37
- # class MyAppTest < Test::Unit::TestCase
38
- # include Web::Testing
39
- #
40
- # def test_prints_content
41
- # do_request "script.rb", "param" => "THIS!"
42
- # assert_content "param is THIS!"
43
- # end
44
- # end
45
- #
46
- # Do this to run tests:
47
- #
48
- # ruby test.rb
49
- #
50
- # If you have a more complicated app, where the tests live in
51
- # a different place than your scripts, you can use:
52
- #
53
- # Web::set_docroot( path )
54
- #
55
- # To tell narf where to find your cgi scripts.
56
- #
57
- #
58
- # === Testing with Templates
59
- #
60
- # Using Narflates you can test functionality without having to
61
- # do lengthly string comparisons. For example, create the following
62
- # file in 'mytemplate.html'
63
- #
64
- # <html>
65
- # <body>
66
- # {$myvar}
67
- # </body>
68
- # </html>
69
- #
70
- # Create a 'script.rb' as follows:
71
- #
72
- # #!/usr/bin/narf
73
- # require 'web'
74
- #
75
- # Web::process{
76
- # Web.print_template "mytemplate.html", { "myvar" => "Hello World" }
77
- # }
78
- #
79
- # Now, we can check that the right values got displayed without
80
- # needing to check that the template is correct as a side effect.
81
- # Save this into 'test.rb' and run it:
82
- #
83
- # require 'web'
84
- #
85
- # class MyAppTest < Test::Unit::TestCase
86
- # include Web::Testing # adds the modules
87
- #
88
- # def test_prints_content
89
- # do_request "script.rb"
90
- # assert_vars_includes "myvar" => "Hello World"
91
- # end
92
- # end
93
- #
94
- # === Testing Forms
95
- #
96
- # The following example demonstrates testing a simple HTML form.
97
- # Creating mytemplate.html as:
98
- #
99
- #
100
- # <html>
101
- # <body>
102
- # <form name="myform">
103
- # <input type="text" name="foo">
104
- # <input type="submit" name="submit" value="Submit">
105
- # </body>
106
- # </html>
107
- #
108
- # To print this form and handle a submit save this as 'script.rb':
109
- #
110
- # #!/usr/bin/narf
111
- #
112
- # require 'web'
113
- #
114
- # Web::process {
115
- # if Web["submit"] # check to see whether a form was
116
- # Web.puts "Form Submitted with value '#{Web["foo"]}'"
117
- # else
118
- # Web.print_template "mytemplate.html"
119
- # end
120
- # }
121
- #
122
- # Use this 'test.rb' to test it:
123
- #
124
- # class MyAppTest < Test::Unit::TestCase
125
- # include Web::Testing # adds the modules
126
- #
127
- # def test_prints_content
128
- # do_request "script.rb"
129
- # do_submit "myform", "foo" => "bar"
130
- # assert_content "Form Submitted with value '#{Web["foo"]}'"
131
- # end
132
- # end
133
- #
134
- #
135
- # === Test <input type="text|password|hidden"> and <textarea>
136
- #
137
- # html:
138
- #
139
- # <form name='aForm'>
140
- # <input name="bare">
141
- # <input name="named" type="text" value="foo">
142
- # <input name="pass" type="password" value="secret">
143
- # <input name="obscure" type="hidden" value="discrete">
144
- # <textarea name="big_text">
145
- # big paragraph here
146
- # </textarea>
147
- # </form>
148
- #
149
- # assert:
150
- #
151
- # assert_form_includes( 'aForm', "bare" => "",
152
- # "named" => "foo",
153
- # "pass" => "secret",
154
- # "obscure" => "discrete",
155
- # "big_text" => "big paragraph here" )
156
- #
157
- # submit:
158
- #
159
- # do_submit( 'aForm', "bare" => "empty",
160
- # "named" => "bare",
161
- # "pass" => "shhhhh",
162
- # "obscure" => "secretive",
163
- # "big_text" => "windbag" )
164
- #
165
- # === Test <input type="file">
166
- #
167
- # html:
168
- #
169
- # <form name='aForm' enctype='multipart/form-data'>
170
- # <input name="upload" type="file">
171
- # </form>
172
- #
173
- # assert:
174
- #
175
- # assert_form_includes( 'aForm', "upload" => "" )
176
- #
177
- # submit:
178
- #
179
- # do_submit( 'aForm', "upload" => Web::Upload.new(
180
- # File.new( "testfile" ),
181
- # "content-type",
182
- # "original-filename" ) )
183
- #
184
- # === Test <select> and <input type="radio">
185
- #
186
- #
187
- #
188
- # === Test <select multiple> and <input type="checkbox">
189
- #
190
- #
191
- # === Bugs: Unsupported behaviour
192
- #
193
- # The following situations will have unknown results:
194
- #
195
- # * Combining different types of elements into one field;
196
- # i.e. <input name="field" type="text"> and <select name="field">
197
- # * Comparing <input name="page.name"> and <input name="page.content">
198
- # with assert_vars_include("page" => { "name" => ..., "content" => ... } )
199
- #
200
- module Testing
201
- class FormNotFoundException < Exception #:nodoc:
202
- end
203
-
204
- class FieldNotFoundException < Exception #:nodoc:
205
- end
206
-
207
- class MustSetDocrootForAbsolutePathException < Exception #:nodoc:
208
- end
209
-
210
- # When testing, this is a useful method to tell
211
- # NARF where to find your scripts
212
- def set_docroot( path )
213
- Web::set_docroot( path )
214
- end
215
-
216
- def select( *args )
217
- hash = {}
218
-
219
- if (args.length == 1 and args[0].kind_of? Hash)
220
- hash = args[0]
221
- else
222
- args.each { |e|
223
- hash[e] = true
224
- }
225
- end
226
-
227
- hash
228
- end
229
-
230
- @@test_session = nil
231
-
232
- # Reset the session used by the test framework. Call prior to all tests
233
- # that rely on the session being clean
234
- def reset_session
235
- @@test_session = nil
236
- end
237
-
238
- # Run a request, parameters are the name value pairs that would be
239
- # passed in the query string. The webpath is a document root relative
240
- # path to a ruby script.
241
- def do_request(webpath, parameters={})
242
- options = {}
243
- @@test_session ||= {}
244
- options[:session] = @@test_session
245
- options[:params] = parameters
246
- options[:document_root] = Web.get_docroot
247
- options[:out] = StringIO.new
248
- script_path, script_name, path_info = get_script_part(webpath)
249
-
250
- options[:path_info] = path_info
251
- options[:script_name] = script_name
252
- Web.set_cgi CGI.new(options)
253
- load_request( script_path, webpath )
254
- end
255
-
256
- def load_request( script_path, webpath ) #:nodoc:
257
- Web.options[:webpath] = webpath
258
-
259
- load( script_path )
260
-
261
- if Web.status == "302"
262
- Web.location =~ /(.*)\?(.*)/
263
- target = $1
264
- params = Parser.parse_query_string($2)
265
-
266
- unless (target =~ /^\//)
267
- webpath =~ /(.*)#{File.basename(script_path)}/
268
- target = $1 + target
269
- end
270
-
271
- do_request( target, params )
272
- end
273
-
274
- end
275
-
276
- # Submit the form 'formname' with the formfields described in newvalues
277
- def do_submit( formname, newvalues={} )
278
- form = Web.get_form(formname)
279
-
280
- if form == nil
281
- #if Web.get_form_fields[formname] == nil
282
- raise FormNotFoundException.new("Form '#{formname}' does not exist")
283
- end
284
-
285
- #MultiHashTree::flatten(newvalues).keys.each do |key|
286
- #unless( Web.get_form_fields[formname].valid_key?(key) )
287
- # raise FieldNotFoundException.new( "#{ key } is not present in form" )
288
- #end
289
- #end
290
-
291
- webpath = nil
292
-
293
- #Web.get_html_tree.get_elements("form").each { |form|
294
- # if (form.attribute("name") == formname)
295
- # webpath = form.attribute("action")
296
- # end
297
- #}
298
- webpath = form.action
299
-
300
- unless (webpath)
301
- webpath = Web.options[:webpath]
302
- end
303
-
304
- script_path, script_name, path_info = get_script_part(webpath)
305
-
306
- oldRequest = Web.get_cgi
307
-
308
- options = {}
309
- @@test_session ||= {}
310
- options[:session] = @@test_session
311
- options[:out] = StringIO.new
312
- ### patrick
313
- options[:params] = form.merge_fields( newvalues )
314
- #options[:params] = Web.get_form_fields[formname].params(MultiHashTree::flatten(newvalues))
315
- options[:document_root] = oldRequest.document_root
316
-
317
- options[:path_info] = path_info #oldRequest.path_info
318
- options[:script_name] = script_name #oldRequest.script_name
319
- Web.set_cgi CGI.new( options )
320
-
321
- load_request( script_path, webpath )
322
- end
323
-
324
- # Assert that a give template was displayed
325
- def assert_template_used filename, msg=""
326
- Web.assert_template_used filename, msg
327
- end
328
-
329
- # Assert that a give template was not displayed
330
- def assert_template_not_used filename, msg=""
331
- Web.assert_template_not_used filename, msg
332
- end
333
-
334
- # Assert that the values passed in to expected were set on the template
335
- def assert_vars_includes expected
336
- Web.assert_vars_includes expected
337
- end
338
-
339
- # Assert that the form displayed contains particular values
340
- def assert_form_includes formname, expected
341
- Web.assert_form_includes formname, expected
342
- end
343
-
344
- # Assert that the entire content displayed is equal to expected
345
- def assert_content expected, msg=""
346
- Web.assert_content expected, msg
347
- end
348
-
349
- # Assert that the header key has the value 'value'
350
- def assert_header key, value, msg=""
351
- Web.assert_header key, value, msg
352
- end
353
-
354
- # Assert that the cookie key, has the cookie value
355
- def assert_cookie key, value, msg=""
356
- Web.assert_cookie key, value, msg
357
- end
358
-
359
- # Assert that a form field has exactly the given options
360
- # can't assert order, though
361
- def assert_options( formname, expected={})
362
- options = Web.get_formreader.get_options(formname)
363
- expected.each{ |k,v|
364
- assert_equal( v.sort, options[k].sort )
365
- }
366
- end
367
-
368
- def remove_trailing_slashes(filename) #:nodoc:
369
- /(.*?)\/?$/.match(filename)[1]
370
- end
371
-
372
- def get_script_part(webpath) #:nodoc:
373
- # two cases:
374
- # absolute webpath (requires Web.get_docroot to be correct)
375
- # relative webpath (doesn't require Web.get_docroot to be correct)
376
- if ( webpath =~ /^\// )
377
- prefix = Web.get_docroot
378
- raise MustSetDocrootForAbsolutePathException unless prefix
379
- path = "/"
380
- else
381
- prefix = ""
382
- path = ""
383
- end
384
-
385
- new_script_path = ""
386
- webpath.split("/").each do |file|
387
- file =~ /^([a-zA-Z]{1,1}:)$/
388
-
389
- if (path.empty?)
390
- newpath = file
391
- else
392
- newpath = File.join( path , file ).gsub("//","/")
393
- end
394
-
395
- new_script_path = ""
396
- if (prefix.empty?)
397
- new_script_path = newpath
398
- else
399
- new_script_path = File.join( prefix, newpath ).gsub("//","/")
400
- end
401
-
402
- if (File.file?(new_script_path))
403
- return new_script_path, "/" + File.basename( new_script_path ), webpath[newpath.length...webpath.length]
404
- end
405
-
406
- path = newpath
407
- end
408
-
409
- if (!File.exists?(new_script_path) && prefix.empty?)
410
- return get_script_part( "/" + webpath )
411
- end
412
-
413
- return new_script_path, "/" + File.basename( new_script_path ), ""
414
- end
415
-
416
- class SelectHash < Hash #:nodoc:
417
- def == other
418
- if (other.kind_of? Hash)
419
- super(other)
420
- elsif (other.class == TrueClass)
421
- result = true
422
- self.each{ |k, v|
423
- result = false unless v
424
- }
425
- result
426
- elsif (other.class == FalseClass)
427
- result = true
428
- self.each{ |k,v|
429
- result = false if v
430
- }
431
- result
432
- else
433
- ### this is wrong
434
- other.to_s == self.default.join(",")
435
- end
436
- end
437
-
438
- def field_value
439
- values = [ ]
440
- self.each{ |k,v|
441
- values.push k if v
442
- }
443
- values.join(",")
444
- end
445
-
446
- end
447
-
448
- # could I get an explanation of this?
449
- # just for me? please?
450
- # not to long... probably not longer than this comment here.
451
- class MultiHashTree # :nodoc:
452
- attr_reader :fields, :unmodified_fields
453
-
454
- def initialize fields = {}
455
- @fields = {}
456
- @unmodified_fields = {}
457
- fields.each do |k,value_array|
458
- value_array.each{ |v|
459
- push_field k, v
460
- }
461
- end
462
- end
463
-
464
- def valid_key? (aKey)
465
- unmodified_fields.has_key?(aKey) || fields.has_key?(aKey)
466
- end
467
-
468
- def push_impl hash, name, value
469
- if name =~ Web::CGI::MULTIPLE_KEY && !value.kind_of?(Web::Testing::SelectHash)
470
- hash[name] ||= []
471
- hash[name].push value
472
- elsif m = /^(\w+(\[\])?)\.(.+)/.match(name)
473
- hash[m[1]] ||= {}
474
- push_impl(hash[m[1]], m[3], value)
475
- elsif m = /^(\w+)\[(\d+)\].(.+)/.match(name)
476
- hash[m[1]] ||= []
477
- hash[m[1]][m[2].to_i] ||= {}
478
- push_impl hash[m[1]][m[2].to_i], m[3], value
479
- else
480
- hash[name] ||= []
481
- hash[name].push(value)
482
- end
483
- end
484
-
485
- def push_field name, value
486
- @unmodified_fields[name] ||= []
487
- @unmodified_fields[name].push value
488
- push_impl @fields, name, value
489
- end
490
-
491
- def params values
492
- retval = @unmodified_fields.clone
493
- values.each do |key,value|
494
- if value.kind_of? SelectHash
495
- selected_options = []
496
- value.each{ |k,v|
497
- selected_options.push k if v
498
- }
499
-
500
- if m = Web::CGI::MULTIPLE_KEY.match(key)
501
- retval[key] ||= []
502
- retval[key] = (retval[key] + selected_options).uniq
503
- else
504
- retval[key] = selected_options.join(",")
505
- end
506
-
507
- else
508
- if m = Web::CGI::MULTIPLE_KEY.match(key)
509
- retval[key] ||= []
510
- retval[key] << value
511
- else
512
- retval[key] = value
513
- end
514
- end
515
- end
516
- retval
517
- end
518
-
519
- def MultiHashTree.flatten node, newhash = {} , nameroot = "" # :nodoc:
520
- if node.kind_of? Hash
521
- node.each do |k,v|
522
- if nameroot == ""
523
- varname = k
524
- else
525
- varname = "#{nameroot}.#{k}"
526
- end
527
- flatten( v, newhash, varname )
528
- end
529
- elsif node.kind_of? Array
530
- unless node.find { |i| !i.kind_of? String }
531
- newhash[nameroot] = node
532
- else
533
- node.each_with_index do |v,i|
534
- flatten( v, newhash, "#{nameroot}[#{i}]" )
535
- end
536
- end
537
- else
538
- newhash[ nameroot ]=node
539
- end
540
- newhash
541
- end
542
-
543
- end
544
-
545
- end
546
- end