narf 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (657) hide show
  1. data/ChangeLog +163 -0
  2. data/InstalledFiles +2227 -0
  3. data/README +124 -0
  4. data/TODO +88 -0
  5. data/bin/narftest +17 -0
  6. data/bug.rb +9 -0
  7. data/build.rb +314 -0
  8. data/build.rb~ +314 -0
  9. data/config.save +12 -0
  10. data/doc/apache_cgi.txt +17 -0
  11. data/doc/fastcgi.txt +19 -0
  12. data/doc/mod_ruby.txt +7 -0
  13. data/doc/rdoc/classes/Web.html +366 -0
  14. data/doc/rdoc/classes/Web.src/M000002.html +15 -0
  15. data/doc/rdoc/classes/Web.src/M000003.html +15 -0
  16. data/doc/rdoc/classes/Web.src/M000004.html +15 -0
  17. data/doc/rdoc/classes/Web.src/M000005.html +15 -0
  18. data/doc/rdoc/classes/Web.src/M000006.html +20 -0
  19. data/doc/rdoc/classes/Web.src/M000007.html +18 -0
  20. data/doc/rdoc/classes/Web.src/M000008.html +18 -0
  21. data/doc/rdoc/classes/Web.src/M000009.html +18 -0
  22. data/doc/rdoc/classes/Web.src/M000010.html +15 -0
  23. data/doc/rdoc/classes/Web.src/M000011.html +15 -0
  24. data/doc/rdoc/classes/Web.src/M000012.html +15 -0
  25. data/doc/rdoc/classes/Web/CGD.html +173 -0
  26. data/doc/rdoc/classes/Web/CGD.src/M000037.html +24 -0
  27. data/doc/rdoc/classes/Web/CGD.src/M000038.html +23 -0
  28. data/doc/rdoc/classes/Web/CGD.src/M000039.html +15 -0
  29. data/doc/rdoc/classes/Web/CGD.src/M000040.html +15 -0
  30. data/doc/rdoc/classes/Web/CGD.src/M000041.html +23 -0
  31. data/doc/rdoc/classes/Web/CGI.html +946 -0
  32. data/doc/rdoc/classes/Web/CGI.src/M000051.html +15 -0
  33. data/doc/rdoc/classes/Web/CGI.src/M000052.html +24 -0
  34. data/doc/rdoc/classes/Web/CGI.src/M000053.html +15 -0
  35. data/doc/rdoc/classes/Web/CGI.src/M000054.html +15 -0
  36. data/doc/rdoc/classes/Web/CGI.src/M000055.html +15 -0
  37. data/doc/rdoc/classes/Web/CGI.src/M000056.html +15 -0
  38. data/doc/rdoc/classes/Web/CGI.src/M000057.html +17 -0
  39. data/doc/rdoc/classes/Web/CGI.src/M000058.html +34 -0
  40. data/doc/rdoc/classes/Web/CGI.src/M000059.html +22 -0
  41. data/doc/rdoc/classes/Web/CGI.src/M000060.html +15 -0
  42. data/doc/rdoc/classes/Web/CGI.src/M000061.html +15 -0
  43. data/doc/rdoc/classes/Web/CGI.src/M000062.html +19 -0
  44. data/doc/rdoc/classes/Web/CGI.src/M000063.html +18 -0
  45. data/doc/rdoc/classes/Web/CGI.src/M000064.html +19 -0
  46. data/doc/rdoc/classes/Web/CGI.src/M000065.html +15 -0
  47. data/doc/rdoc/classes/Web/CGI.src/M000066.html +15 -0
  48. data/doc/rdoc/classes/Web/CGI.src/M000067.html +15 -0
  49. data/doc/rdoc/classes/Web/CGI.src/M000068.html +13 -0
  50. data/doc/rdoc/classes/Web/CGI.src/M000069.html +13 -0
  51. data/doc/rdoc/classes/Web/CGI.src/M000070.html +13 -0
  52. data/doc/rdoc/classes/Web/CGI.src/M000071.html +13 -0
  53. data/doc/rdoc/classes/Web/CGI.src/M000072.html +19 -0
  54. data/doc/rdoc/classes/Web/CGI.src/M000073.html +15 -0
  55. data/doc/rdoc/classes/Web/CGI.src/M000074.html +19 -0
  56. data/doc/rdoc/classes/Web/CGI.src/M000075.html +15 -0
  57. data/doc/rdoc/classes/Web/CGI.src/M000076.html +15 -0
  58. data/doc/rdoc/classes/Web/CGI.src/M000077.html +15 -0
  59. data/doc/rdoc/classes/Web/CGI.src/M000078.html +20 -0
  60. data/doc/rdoc/classes/Web/CGI.src/M000079.html +36 -0
  61. data/doc/rdoc/classes/Web/CGI.src/M000080.html +19 -0
  62. data/doc/rdoc/classes/Web/CGI.src/M000081.html +18 -0
  63. data/doc/rdoc/classes/Web/CGI.src/M000082.html +15 -0
  64. data/doc/rdoc/classes/Web/CGI.src/M000083.html +17 -0
  65. data/doc/rdoc/classes/Web/CGI.src/M000084.html +15 -0
  66. data/doc/rdoc/classes/Web/CGI.src/M000085.html +16 -0
  67. data/doc/rdoc/classes/Web/CGI.src/M000086.html +15 -0
  68. data/doc/rdoc/classes/Web/CGI.src/M000087.html +15 -0
  69. data/doc/rdoc/classes/Web/CGI.src/M000088.html +15 -0
  70. data/doc/rdoc/classes/Web/CGI.src/M000089.html +16 -0
  71. data/doc/rdoc/classes/Web/CGI.src/M000090.html +15 -0
  72. data/doc/rdoc/classes/Web/CGI.src/M000091.html +15 -0
  73. data/doc/rdoc/classes/Web/CGI.src/M000092.html +15 -0
  74. data/doc/rdoc/classes/Web/CGI.src/M000093.html +15 -0
  75. data/doc/rdoc/classes/Web/CGI.src/M000094.html +15 -0
  76. data/doc/rdoc/classes/Web/CGI.src/M000095.html +15 -0
  77. data/doc/rdoc/classes/Web/CGI.src/M000096.html +19 -0
  78. data/doc/rdoc/classes/Web/CGI.src/M000097.html +15 -0
  79. data/doc/rdoc/classes/Web/CGI.src/M000098.html +15 -0
  80. data/doc/rdoc/classes/Web/CGI.src/M000099.html +43 -0
  81. data/doc/rdoc/classes/Web/CGI.src/M000100.html +18 -0
  82. data/doc/rdoc/classes/Web/CGI.src/M000101.html +20 -0
  83. data/doc/rdoc/classes/Web/CGI.src/M000102.html +15 -0
  84. data/doc/rdoc/classes/Web/CGI.src/M000103.html +15 -0
  85. data/doc/rdoc/classes/Web/CGI.src/M000104.html +15 -0
  86. data/doc/rdoc/classes/Web/CGI.src/M000105.html +24 -0
  87. data/doc/rdoc/classes/Web/CGI.src/M000106.html +24 -0
  88. data/doc/rdoc/classes/Web/CGI.src/M000107.html +22 -0
  89. data/doc/rdoc/classes/Web/CaseInsensitiveHash.html +104 -0
  90. data/doc/rdoc/classes/Web/CaseInsensitiveHash.src/M000118.html +15 -0
  91. data/doc/rdoc/classes/Web/CaseInsensitiveHash.src/M000119.html +15 -0
  92. data/doc/rdoc/classes/Web/CaseInsensitiveHash.src/M000120.html +15 -0
  93. data/doc/rdoc/classes/Web/Mime.html +122 -0
  94. data/doc/rdoc/classes/Web/Mime.src/M000118.html +15 -0
  95. data/doc/rdoc/classes/Web/Mime.src/M000119.html +15 -0
  96. data/doc/rdoc/classes/Web/Mime.src/M000120.html +23 -0
  97. data/doc/rdoc/classes/Web/Mime.src/M000121.html +15 -0
  98. data/doc/rdoc/classes/Web/Mime.src/M000122.html +15 -0
  99. data/doc/rdoc/classes/Web/Mime.src/M000123.html +23 -0
  100. data/doc/rdoc/classes/Web/Mime.src/M000124.html +15 -0
  101. data/doc/rdoc/classes/Web/Narflates.html +132 -0
  102. data/doc/rdoc/classes/Web/Parser.html +219 -0
  103. data/doc/rdoc/classes/Web/Parser.src/M000013.html +21 -0
  104. data/doc/rdoc/classes/Web/Parser.src/M000014.html +19 -0
  105. data/doc/rdoc/classes/Web/Parser.src/M000015.html +21 -0
  106. data/doc/rdoc/classes/Web/Parser.src/M000016.html +15 -0
  107. data/doc/rdoc/classes/Web/Parser.src/M000017.html +30 -0
  108. data/doc/rdoc/classes/Web/Parser.src/M000018.html +15 -0
  109. data/doc/rdoc/classes/Web/Parser.src/M000019.html +19 -0
  110. data/doc/rdoc/classes/Web/Parser.src/M000020.html +27 -0
  111. data/doc/rdoc/classes/Web/Parser.src/M000021.html +15 -0
  112. data/doc/rdoc/classes/Web/Parser.src/M000022.html +16 -0
  113. data/doc/rdoc/classes/Web/Parser.src/M000023.html +18 -0
  114. data/doc/rdoc/classes/Web/Session.html +178 -0
  115. data/doc/rdoc/classes/Web/Session.src/M000042.html +20 -0
  116. data/doc/rdoc/classes/Web/Session.src/M000043.html +19 -0
  117. data/doc/rdoc/classes/Web/Session.src/M000044.html +21 -0
  118. data/doc/rdoc/classes/Web/Session.src/M000045.html +21 -0
  119. data/doc/rdoc/classes/Web/Session.src/M000046.html +15 -0
  120. data/doc/rdoc/classes/Web/Session.src/M000047.html +17 -0
  121. data/doc/rdoc/classes/Web/Session.src/M000048.html +15 -0
  122. data/doc/rdoc/classes/Web/Session.src/M000049.html +15 -0
  123. data/doc/rdoc/classes/Web/Session.src/M000050.html +16 -0
  124. data/doc/rdoc/classes/Web/Testing.html +474 -0
  125. data/doc/rdoc/classes/Web/Testing.src/M000024.html +15 -0
  126. data/doc/rdoc/classes/Web/Testing.src/M000025.html +25 -0
  127. data/doc/rdoc/classes/Web/Testing.src/M000026.html +15 -0
  128. data/doc/rdoc/classes/Web/Testing.src/M000027.html +28 -0
  129. data/doc/rdoc/classes/Web/Testing.src/M000028.html +58 -0
  130. data/doc/rdoc/classes/Web/Testing.src/M000029.html +15 -0
  131. data/doc/rdoc/classes/Web/Testing.src/M000030.html +15 -0
  132. data/doc/rdoc/classes/Web/Testing.src/M000031.html +15 -0
  133. data/doc/rdoc/classes/Web/Testing.src/M000032.html +15 -0
  134. data/doc/rdoc/classes/Web/Testing.src/M000033.html +15 -0
  135. data/doc/rdoc/classes/Web/Testing.src/M000034.html +15 -0
  136. data/doc/rdoc/classes/Web/Testing.src/M000035.html +15 -0
  137. data/doc/rdoc/classes/Web/Testing.src/M000036.html +18 -0
  138. data/doc/rdoc/classes/Web/Upload.html +160 -0
  139. data/doc/rdoc/classes/Web/Upload.src/M000108.html +25 -0
  140. data/doc/rdoc/classes/Web/Upload.src/M000109.html +18 -0
  141. data/doc/rdoc/classes/Web/Upload.src/M000110.html +16 -0
  142. data/doc/rdoc/classes/Web/Upload.src/M000111.html +16 -0
  143. data/doc/rdoc/classes/Web/Wiki.html +249 -0
  144. data/doc/rdoc/classes/Web/Wiki.src/M000112.html +25 -0
  145. data/doc/rdoc/classes/Web/Wiki.src/M000113.html +15 -0
  146. data/doc/rdoc/classes/Web/Wiki.src/M000114.html +26 -0
  147. data/doc/rdoc/classes/Web/Wiki.src/M000115.html +21 -0
  148. data/doc/rdoc/classes/Web/Wiki.src/M000116.html +18 -0
  149. data/doc/rdoc/classes/Web/Wiki.src/M000117.html +19 -0
  150. data/doc/rdoc/created.rid +1 -0
  151. data/doc/rdoc/files/README.html +226 -0
  152. data/doc/rdoc/files/doc/apache_cgi_txt.html +82 -0
  153. data/doc/rdoc/files/doc/fastcgi_txt.html +82 -0
  154. data/doc/rdoc/files/doc/mod_ruby_txt.html +62 -0
  155. data/doc/rdoc/files/doc/webrick_txt.html +79 -0
  156. data/doc/rdoc/files/examples/examples_rdoc.html +73 -0
  157. data/doc/rdoc/files/lib/web/cgi_rb.html +75 -0
  158. data/doc/rdoc/files/lib/web/mime_rb.html +67 -0
  159. data/doc/rdoc/files/lib/web/parser_rb.html +73 -0
  160. data/doc/rdoc/files/lib/web/session_rb.html +73 -0
  161. data/doc/rdoc/files/lib/web/template_rb.html +73 -0
  162. data/doc/rdoc/files/lib/web/testing_rb.html +67 -0
  163. data/doc/rdoc/files/lib/web/upload_rb.html +73 -0
  164. data/doc/rdoc/files/lib/web/wiki_rb.html +79 -0
  165. data/doc/rdoc/files/lib/web_rb.html +116 -0
  166. data/doc/rdoc/files/lib/web_rb.src/M000001.html +15 -0
  167. data/doc/rdoc/fr_class_index.html +47 -0
  168. data/doc/rdoc/fr_file_index.html +52 -0
  169. data/doc/rdoc/fr_method_index.html +158 -0
  170. data/doc/rdoc/index.html +22 -0
  171. data/doc/rdoc/rdoc-style.css +99 -0
  172. data/doc/webrick.txt +23 -0
  173. data/examples/admin.rb +8 -0
  174. data/examples/admin.rb~ +5 -0
  175. data/examples/cookbook.rdoc +247 -0
  176. data/examples/cookbook.rdoc~ +238 -0
  177. data/examples/examples.rdoc +19 -0
  178. data/examples/examples.rdoc~ +17 -0
  179. data/examples/hello.world.rb +5 -0
  180. data/examples/hello.world.rb~ +3 -0
  181. data/examples/session.rb +34 -0
  182. data/examples/session.rb~ +31 -0
  183. data/examples/test/test.hello.world.rb +9 -0
  184. data/examples/test/test.hello.world.rb~ +9 -0
  185. data/examples/test/test.session.rb +37 -0
  186. data/examples/test/test.session.rb~ +37 -0
  187. data/examples/webunit/COPYING +340 -0
  188. data/examples/webunit/Makefile +14 -0
  189. data/examples/webunit/TIPS-ja.html +126 -0
  190. data/examples/webunit/TIPS-ja.rd +154 -0
  191. data/examples/webunit/TODO-ja.html +35 -0
  192. data/examples/webunit/TODO-ja.rd +28 -0
  193. data/examples/webunit/changes.rd +185 -0
  194. data/examples/webunit/conv/digit-0.cgi +40 -0
  195. data/examples/webunit/conv/digit-0.rb +21 -0
  196. data/examples/webunit/conv/digit-1.cgi +44 -0
  197. data/examples/webunit/conv/digit-1.rb +17 -0
  198. data/examples/webunit/conv/digit.cgi +59 -0
  199. data/examples/webunit/conv/digit.rb +23 -0
  200. data/examples/webunit/conv/test_digit-0.rb +16 -0
  201. data/examples/webunit/conv/test_digit-1.rb +19 -0
  202. data/examples/webunit/conv/test_digit.rb +26 -0
  203. data/examples/webunit/conv/test_digit_view-0.rb +76 -0
  204. data/examples/webunit/conv/test_digit_view-1.rb +102 -0
  205. data/examples/webunit/conv/test_digit_view.rb +134 -0
  206. data/examples/webunit/example.rd +37 -0
  207. data/examples/webunit/index-en.html +263 -0
  208. data/examples/webunit/index-en.rd +60 -0
  209. data/examples/webunit/index-ja.html +263 -0
  210. data/examples/webunit/index-ja.rd +60 -0
  211. data/examples/wiki.rb +7 -0
  212. data/examples/wiki.rb~ +5 -0
  213. data/install.rb +1022 -0
  214. data/lib/web.rb +290 -0
  215. data/lib/web.rb~ +290 -0
  216. data/lib/web/#assertinclude.rb# +110 -0
  217. data/lib/web/action.rb +82 -0
  218. data/lib/web/assertinclude.rb +110 -0
  219. data/lib/web/assertinclude.rb~ +110 -0
  220. data/lib/web/buffer.rb +20 -0
  221. data/lib/web/cgi.rb +641 -0
  222. data/lib/web/cgi.rb~ +640 -0
  223. data/lib/web/formreader.rb +317 -0
  224. data/lib/web/forms.rb +104 -0
  225. data/lib/web/htmlparser/html-parser.rb +429 -0
  226. data/lib/web/htmlparser/html-parser.rb~ +429 -0
  227. data/lib/web/htmlparser/sgml-parser.rb +332 -0
  228. data/lib/web/htmlparser/sgml-parser.rb~ +332 -0
  229. data/lib/web/htmltools/element.rb +296 -0
  230. data/lib/web/htmltools/element.rb~ +296 -0
  231. data/lib/web/htmltools/stparser.rb +276 -0
  232. data/lib/web/htmltools/stparser.rb~ +276 -0
  233. data/lib/web/htmltools/tags.rb +286 -0
  234. data/lib/web/htmltools/tags.rb~ +286 -0
  235. data/lib/web/htmltools/tree.rb +139 -0
  236. data/lib/web/htmltools/tree.rb~ +139 -0
  237. data/lib/web/htmltools/xmltree.rb +160 -0
  238. data/lib/web/htmltools/xmltree.rb~ +160 -0
  239. data/lib/web/htmltools/xpath.rb +71 -0
  240. data/lib/web/htmltools/xpath.rb~ +71 -0
  241. data/lib/web/mime.rb +82 -0
  242. data/lib/web/parser.rb +266 -0
  243. data/lib/web/parser.rb~ +266 -0
  244. data/lib/web/request.rb~ +238 -0
  245. data/lib/web/resources/mime.types +483 -0
  246. data/lib/web/runner.rb +26 -0
  247. data/lib/web/runner.rb~ +26 -0
  248. data/lib/web/sapi/fastcgi.rb +26 -0
  249. data/lib/web/sapi/fastcgi.rb~ +25 -0
  250. data/lib/web/sapi/mod_ruby.rb +46 -0
  251. data/lib/web/sapi/mod_ruby.rb~ +46 -0
  252. data/lib/web/sapi/webrick.rb +91 -0
  253. data/lib/web/sapi/webrick.rb~ +89 -0
  254. data/lib/web/session.rb +75 -0
  255. data/lib/web/session.rb~ +75 -0
  256. data/lib/web/simpledispatcher.rb +155 -0
  257. data/lib/web/strscanparser.rb +24 -0
  258. data/lib/web/tagparser.rb +96 -0
  259. data/lib/web/tagparser.rb~ +96 -0
  260. data/lib/web/template.rb +613 -0
  261. data/lib/web/template.rb~ +613 -0
  262. data/lib/web/testing.rb +546 -0
  263. data/lib/web/testing.rb~ +546 -0
  264. data/lib/web/traceoutput.rb +32 -0
  265. data/lib/web/unit.rb +27 -0
  266. data/lib/web/unit/assert.rb +154 -0
  267. data/lib/web/unit/converter.rb +148 -0
  268. data/lib/web/unit/cookie.rb +120 -0
  269. data/lib/web/unit/domwalker.rb +187 -0
  270. data/lib/web/unit/exception.rb +15 -0
  271. data/lib/web/unit/form.rb +118 -0
  272. data/lib/web/unit/formatter.rb +314 -0
  273. data/lib/web/unit/frame.rb +39 -0
  274. data/lib/web/unit/html-parser.rb +432 -0
  275. data/lib/web/unit/htmlelem.rb +124 -0
  276. data/lib/web/unit/htmlrepair.rb +116 -0
  277. data/lib/web/unit/htmlsplit.rb +840 -0
  278. data/lib/web/unit/image.rb +27 -0
  279. data/lib/web/unit/jscript.rb +32 -0
  280. data/lib/web/unit/link.rb +35 -0
  281. data/lib/web/unit/params.rb +323 -0
  282. data/lib/web/unit/parser.rb +226 -0
  283. data/lib/web/unit/resources/assert.html +101 -0
  284. data/lib/web/unit/resources/auth/index.html +5 -0
  285. data/lib/web/unit/resources/badtags.html +7 -0
  286. data/lib/web/unit/resources/cookie.cgi +33 -0
  287. data/lib/web/unit/resources/document.xml +13 -0
  288. data/lib/web/unit/resources/form.html +150 -0
  289. data/lib/web/unit/resources/frame-0.html +10 -0
  290. data/lib/web/unit/resources/frame-1.html +10 -0
  291. data/lib/web/unit/resources/frame.html +10 -0
  292. data/lib/web/unit/resources/image.html +17 -0
  293. data/lib/web/unit/resources/images/x.gif +0 -0
  294. data/lib/web/unit/resources/images/y.gif +0 -0
  295. data/lib/web/unit/resources/jscript-0.html +10 -0
  296. data/lib/web/unit/resources/jscript-1.html +10 -0
  297. data/lib/web/unit/resources/jscript.html +19 -0
  298. data/lib/web/unit/resources/link.html +19 -0
  299. data/lib/web/unit/resources/multipart.cgi +28 -0
  300. data/lib/web/unit/resources/multipart.html +74 -0
  301. data/lib/web/unit/resources/params.html +65 -0
  302. data/lib/web/unit/resources/redirect.cgi +13 -0
  303. data/lib/web/unit/resources/response.html +67 -0
  304. data/lib/web/unit/resources/simple.cgi +14 -0
  305. data/lib/web/unit/resources/stock.cgi +35 -0
  306. data/lib/web/unit/resources/table.html +83 -0
  307. data/lib/web/unit/response.rb +469 -0
  308. data/lib/web/unit/response.rb~ +461 -0
  309. data/lib/web/unit/runtest.rb +44 -0
  310. data/lib/web/unit/sgml-parser.rb +336 -0
  311. data/lib/web/unit/table.rb +150 -0
  312. data/lib/web/unit/testcase.rb +49 -0
  313. data/lib/web/unit/ui/cui/testrunner.rb +52 -0
  314. data/lib/web/unit/ui/cui/testrunner.rb~ +50 -0
  315. data/lib/web/unit/utils.rb +70 -0
  316. data/lib/web/unit/webunit.rb +28 -0
  317. data/lib/web/upload.rb +55 -0
  318. data/lib/web/upload.rb~ +262 -0
  319. data/lib/web/wiki.rb +506 -0
  320. data/lib/web/wiki.rb~ +506 -0
  321. data/lib/web/wiki/linker.rb +72 -0
  322. data/lib/web/wiki/linker.rb~ +72 -0
  323. data/lib/web/wiki/mime.rb~ +68 -0
  324. data/lib/web/wiki/page.rb +192 -0
  325. data/lib/web/wiki/page.rb~ +192 -0
  326. data/lib/web/wiki/resources/#edit.html# +65 -0
  327. data/lib/web/wiki/resources/admin.html +13 -0
  328. data/lib/web/wiki/resources/admin.html~ +13 -0
  329. data/lib/web/wiki/resources/asset_history.html +3 -0
  330. data/lib/web/wiki/resources/basic.html +1 -0
  331. data/lib/web/wiki/resources/default-content_editor.html +1 -0
  332. data/lib/web/wiki/resources/default-content_editor.html~ +1 -0
  333. data/lib/web/wiki/resources/edit.html +1 -1
  334. data/lib/web/wiki/resources/edit.html~ +1 -1
  335. data/lib/web/wiki/resources/ekit-content_editor.html +1 -0
  336. data/lib/web/wiki/resources/home.html +10 -0
  337. data/lib/web/wiki/resources/home.html~ +10 -0
  338. data/lib/web/wiki/resources/htmlarea/ChangeLog +1185 -0
  339. data/lib/web/wiki/resources/htmlarea/dialog.js +72 -0
  340. data/lib/web/wiki/resources/htmlarea/examples/2-areas.cgi +16 -0
  341. data/lib/web/wiki/resources/htmlarea/examples/2-areas.html +158 -0
  342. data/lib/web/wiki/resources/htmlarea/examples/context-menu.html +95 -0
  343. data/lib/web/wiki/resources/htmlarea/examples/core.html +184 -0
  344. data/lib/web/wiki/resources/htmlarea/examples/css.html +88 -0
  345. data/lib/web/wiki/resources/htmlarea/examples/custom.css +29 -0
  346. data/lib/web/wiki/resources/htmlarea/examples/full-page.html +75 -0
  347. data/lib/web/wiki/resources/htmlarea/examples/fully-loaded.html +248 -0
  348. data/lib/web/wiki/resources/htmlarea/examples/index.html +40 -0
  349. data/lib/web/wiki/resources/htmlarea/examples/spell-checker.html +132 -0
  350. data/lib/web/wiki/resources/htmlarea/examples/table-operations.html +116 -0
  351. data/lib/web/wiki/resources/htmlarea/examples/test.cgi +21 -0
  352. data/lib/web/wiki/resources/htmlarea/htmlarea.css +180 -0
  353. data/lib/web/wiki/resources/htmlarea/htmlarea.js +2175 -0
  354. data/lib/web/wiki/resources/htmlarea/images/ed_about.gif +0 -0
  355. data/lib/web/wiki/resources/htmlarea/images/ed_align_center.gif +0 -0
  356. data/lib/web/wiki/resources/htmlarea/images/ed_align_justify.gif +0 -0
  357. data/lib/web/wiki/resources/htmlarea/images/ed_align_left.gif +0 -0
  358. data/lib/web/wiki/resources/htmlarea/images/ed_align_right.gif +0 -0
  359. data/lib/web/wiki/resources/htmlarea/images/ed_blank.gif +0 -0
  360. data/lib/web/wiki/resources/htmlarea/images/ed_charmap.gif +0 -0
  361. data/lib/web/wiki/resources/htmlarea/images/ed_color_bg.gif +0 -0
  362. data/lib/web/wiki/resources/htmlarea/images/ed_color_fg.gif +0 -0
  363. data/lib/web/wiki/resources/htmlarea/images/ed_copy.gif +0 -0
  364. data/lib/web/wiki/resources/htmlarea/images/ed_custom.gif +0 -0
  365. data/lib/web/wiki/resources/htmlarea/images/ed_cut.gif +0 -0
  366. data/lib/web/wiki/resources/htmlarea/images/ed_delete.gif +0 -0
  367. data/lib/web/wiki/resources/htmlarea/images/ed_format_bold.gif +0 -0
  368. data/lib/web/wiki/resources/htmlarea/images/ed_format_italic.gif +0 -0
  369. data/lib/web/wiki/resources/htmlarea/images/ed_format_strike.gif +0 -0
  370. data/lib/web/wiki/resources/htmlarea/images/ed_format_sub.gif +0 -0
  371. data/lib/web/wiki/resources/htmlarea/images/ed_format_sup.gif +0 -0
  372. data/lib/web/wiki/resources/htmlarea/images/ed_format_underline.gif +0 -0
  373. data/lib/web/wiki/resources/htmlarea/images/ed_help.gif +0 -0
  374. data/lib/web/wiki/resources/htmlarea/images/ed_hr.gif +0 -0
  375. data/lib/web/wiki/resources/htmlarea/images/ed_html.gif +0 -0
  376. data/lib/web/wiki/resources/htmlarea/images/ed_image.gif +0 -0
  377. data/lib/web/wiki/resources/htmlarea/images/ed_indent_less.gif +0 -0
  378. data/lib/web/wiki/resources/htmlarea/images/ed_indent_more.gif +0 -0
  379. data/lib/web/wiki/resources/htmlarea/images/ed_left_to_right.gif +0 -0
  380. data/lib/web/wiki/resources/htmlarea/images/ed_link.gif +0 -0
  381. data/lib/web/wiki/resources/htmlarea/images/ed_list_bullet.gif +0 -0
  382. data/lib/web/wiki/resources/htmlarea/images/ed_list_num.gif +0 -0
  383. data/lib/web/wiki/resources/htmlarea/images/ed_paste.gif +0 -0
  384. data/lib/web/wiki/resources/htmlarea/images/ed_redo.gif +0 -0
  385. data/lib/web/wiki/resources/htmlarea/images/ed_right_to_left.gif +0 -0
  386. data/lib/web/wiki/resources/htmlarea/images/ed_save.gif +0 -0
  387. data/lib/web/wiki/resources/htmlarea/images/ed_show_border.gif +0 -0
  388. data/lib/web/wiki/resources/htmlarea/images/ed_splitcel.gif +0 -0
  389. data/lib/web/wiki/resources/htmlarea/images/ed_undo.gif +0 -0
  390. data/lib/web/wiki/resources/htmlarea/images/fullscreen_maximize.gif +0 -0
  391. data/lib/web/wiki/resources/htmlarea/images/fullscreen_minimize.gif +0 -0
  392. data/lib/web/wiki/resources/htmlarea/images/insert_table.gif +0 -0
  393. data/lib/web/wiki/resources/htmlarea/index.html +199 -0
  394. data/lib/web/wiki/resources/htmlarea/lang/b5.js +36 -0
  395. data/lib/web/wiki/resources/htmlarea/lang/cz.js +63 -0
  396. data/lib/web/wiki/resources/htmlarea/lang/da.js +38 -0
  397. data/lib/web/wiki/resources/htmlarea/lang/de.js +54 -0
  398. data/lib/web/wiki/resources/htmlarea/lang/ee.js +63 -0
  399. data/lib/web/wiki/resources/htmlarea/lang/el.js +75 -0
  400. data/lib/web/wiki/resources/htmlarea/lang/en.js +88 -0
  401. data/lib/web/wiki/resources/htmlarea/lang/es.js +51 -0
  402. data/lib/web/wiki/resources/htmlarea/lang/fi.js +46 -0
  403. data/lib/web/wiki/resources/htmlarea/lang/fr.js +61 -0
  404. data/lib/web/wiki/resources/htmlarea/lang/gb.js +36 -0
  405. data/lib/web/wiki/resources/htmlarea/lang/he.js +63 -0
  406. data/lib/web/wiki/resources/htmlarea/lang/hu.js +63 -0
  407. data/lib/web/wiki/resources/htmlarea/lang/it.js +54 -0
  408. data/lib/web/wiki/resources/htmlarea/lang/ja-euc.js +37 -0
  409. data/lib/web/wiki/resources/htmlarea/lang/ja-jis.js +37 -0
  410. data/lib/web/wiki/resources/htmlarea/lang/ja-sjis.js +37 -0
  411. data/lib/web/wiki/resources/htmlarea/lang/ja-utf8.js +37 -0
  412. data/lib/web/wiki/resources/htmlarea/lang/lt.js +55 -0
  413. data/lib/web/wiki/resources/htmlarea/lang/lv.js +55 -0
  414. data/lib/web/wiki/resources/htmlarea/lang/nb.js +36 -0
  415. data/lib/web/wiki/resources/htmlarea/lang/nl.js +90 -0
  416. data/lib/web/wiki/resources/htmlarea/lang/no.js +79 -0
  417. data/lib/web/wiki/resources/htmlarea/lang/pl.js +36 -0
  418. data/lib/web/wiki/resources/htmlarea/lang/pt_br.js +37 -0
  419. data/lib/web/wiki/resources/htmlarea/lang/ro.js +80 -0
  420. data/lib/web/wiki/resources/htmlarea/lang/ru.js +63 -0
  421. data/lib/web/wiki/resources/htmlarea/lang/se.js +38 -0
  422. data/lib/web/wiki/resources/htmlarea/lang/si.js +63 -0
  423. data/lib/web/wiki/resources/htmlarea/lang/vn.js +51 -0
  424. data/lib/web/wiki/resources/htmlarea/license.txt +30 -0
  425. data/lib/web/wiki/resources/htmlarea/plugins/CSS/css.js +116 -0
  426. data/lib/web/wiki/resources/htmlarea/plugins/CSS/lang/en.js +2 -0
  427. data/lib/web/wiki/resources/htmlarea/plugins/ContextMenu/context-menu.js +416 -0
  428. data/lib/web/wiki/resources/htmlarea/plugins/ContextMenu/lang/de.js +59 -0
  429. data/lib/web/wiki/resources/htmlarea/plugins/ContextMenu/lang/el.js +57 -0
  430. data/lib/web/wiki/resources/htmlarea/plugins/ContextMenu/lang/en.js +66 -0
  431. data/lib/web/wiki/resources/htmlarea/plugins/ContextMenu/lang/nl.js +66 -0
  432. data/lib/web/wiki/resources/htmlarea/plugins/ContextMenu/menu.css +64 -0
  433. data/lib/web/wiki/resources/htmlarea/plugins/FullPage/full-page.js +143 -0
  434. data/lib/web/wiki/resources/htmlarea/plugins/FullPage/img/docprop.gif +0 -0
  435. data/lib/web/wiki/resources/htmlarea/plugins/FullPage/lang/en.js +25 -0
  436. data/lib/web/wiki/resources/htmlarea/plugins/FullPage/lang/ro.js +25 -0
  437. data/lib/web/wiki/resources/htmlarea/plugins/FullPage/popups/docprop.html +131 -0
  438. data/lib/web/wiki/resources/htmlarea/plugins/FullPage/test.html +89 -0
  439. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/img/spell-check.gif +0 -0
  440. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/cz.js +37 -0
  441. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/da.js +37 -0
  442. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/de.js +28 -0
  443. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/en.js +38 -0
  444. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/hu.js +37 -0
  445. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/it.js +28 -0
  446. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/lang/ro.js +37 -0
  447. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/readme-tech.html +114 -0
  448. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/spell-check-logic.cgi +210 -0
  449. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/spell-check-style.css +10 -0
  450. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/spell-check-ui.html +122 -0
  451. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/spell-check-ui.js +397 -0
  452. data/lib/web/wiki/resources/htmlarea/plugins/SpellChecker/spell-checker.js +79 -0
  453. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/cell-delete.gif +0 -0
  454. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/cell-insert-after.gif +0 -0
  455. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/cell-insert-before.gif +0 -0
  456. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/cell-merge.gif +0 -0
  457. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/cell-prop.gif +0 -0
  458. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/cell-split.gif +0 -0
  459. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/col-delete.gif +0 -0
  460. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/col-insert-after.gif +0 -0
  461. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/col-insert-before.gif +0 -0
  462. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/col-split.gif +0 -0
  463. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/row-delete.gif +0 -0
  464. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/row-insert-above.gif +0 -0
  465. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/row-insert-under.gif +0 -0
  466. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/row-prop.gif +0 -0
  467. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/row-split.gif +0 -0
  468. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/img/table-prop.gif +0 -0
  469. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/cz.js +90 -0
  470. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/da.js +90 -0
  471. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/de.js +81 -0
  472. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/el.js +81 -0
  473. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/en.js +90 -0
  474. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/fi.js +66 -0
  475. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/hu.js +63 -0
  476. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/it.js +81 -0
  477. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/nl.js +90 -0
  478. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/no.js +91 -0
  479. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/lang/ro.js +90 -0
  480. data/lib/web/wiki/resources/htmlarea/plugins/TableOperations/table-operations.js +1160 -0
  481. data/lib/web/wiki/resources/htmlarea/popupdiv.js +369 -0
  482. data/lib/web/wiki/resources/htmlarea/popups/about.html +378 -0
  483. data/lib/web/wiki/resources/htmlarea/popups/blank.html +2 -0
  484. data/lib/web/wiki/resources/htmlarea/popups/custom2.html +35 -0
  485. data/lib/web/wiki/resources/htmlarea/popups/editor_help.html +16 -0
  486. data/lib/web/wiki/resources/htmlarea/popups/fullscreen.html +133 -0
  487. data/lib/web/wiki/resources/htmlarea/popups/insert_image.html +191 -0
  488. data/lib/web/wiki/resources/htmlarea/popups/insert_table.html +174 -0
  489. data/lib/web/wiki/resources/htmlarea/popups/link.html +142 -0
  490. data/lib/web/wiki/resources/htmlarea/popups/old-fullscreen.html +131 -0
  491. data/lib/web/wiki/resources/htmlarea/popups/old_insert_image.html +206 -0
  492. data/lib/web/wiki/resources/htmlarea/popups/popup.js +109 -0
  493. data/lib/web/wiki/resources/htmlarea/popups/select_color.html +347 -0
  494. data/lib/web/wiki/resources/htmlarea/popupwin.js +139 -0
  495. data/lib/web/wiki/resources/htmlarea/reference.html +523 -0
  496. data/lib/web/wiki/resources/htmlarea/release-notes.html +165 -0
  497. data/lib/web/wiki/resources/ie-content_editor.html +1 -0
  498. data/lib/web/wiki/resources/ie-content_editor.js +196 -0
  499. data/lib/web/wiki/resources/illustration.html +1 -0
  500. data/lib/web/wiki/resources/illustration.html~ +1 -0
  501. data/lib/web/wiki/resources/images.html +1 -0
  502. data/lib/web/wiki/resources/index.html +4 -0
  503. data/lib/web/wiki/resources/index.html~ +4 -0
  504. data/lib/web/wiki/resources/more_news.html +5 -0
  505. data/lib/web/wiki/resources/more_news.html~ +5 -0
  506. data/lib/web/wiki/resources/more_news_rss_0.91.html +23 -0
  507. data/lib/web/wiki/resources/narf-logo.gif +0 -0
  508. data/lib/web/wiki/resources/page_history.html +19 -0
  509. data/lib/web/wiki/resources/page_history.html~ +19 -0
  510. data/lib/web/wiki/resources/template.html +13 -0
  511. data/lib/web/wiki/resources/template.html~ +13 -0
  512. data/lib/web/wiki/resources/test_upload.gif +0 -0
  513. data/lib/web/wiki/resources/text-styles.css +1 -0
  514. data/lib/web/writableio.rb +33 -0
  515. data/narf-0.5.1.gem +0 -0
  516. data/narf.gemspec +40 -0
  517. data/narf.gemspec~ +52 -0
  518. data/pre-setup.rb +5 -0
  519. data/sapi/apache_cgi/INSTALL.txt~ +9 -0
  520. data/sapi/apache_cgi/README~ +0 -0
  521. data/sapi/apache_cgi/src/narf.c +13 -0
  522. data/sapi/fastcgi/INSTALL.txt~ +17 -0
  523. data/sapi/mod_ruby/INSTALL.txt~ +5 -0
  524. data/sapi/webrick/INSTALL.txt~ +21 -0
  525. data/sapi/webrick/run_webrick.rb~ +16 -0
  526. data/scripts/dump.rb +14 -0
  527. data/scripts/makedist.rb +49 -0
  528. data/scripts/upload.html +5 -0
  529. data/scripts/uri.rb +41 -0
  530. data/scripts/uri/common.rb +432 -0
  531. data/scripts/uri/ftp.rb +149 -0
  532. data/scripts/uri/generic.rb +1106 -0
  533. data/scripts/uri/http.rb +76 -0
  534. data/scripts/uri/https.rb +26 -0
  535. data/scripts/uri/ldap.rb +238 -0
  536. data/scripts/uri/mailto.rb +260 -0
  537. data/scripts/urireg.rb +174 -0
  538. data/test/bufferedtestrunner.rb +112 -0
  539. data/test/mod_ruby_stub.rb +39 -0
  540. data/test/mod_ruby_stub.rb~ +38 -0
  541. data/test/stringio.rb +2 -0
  542. data/test/test.action.rb +142 -0
  543. data/test/test.action.rb~ +142 -0
  544. data/test/test.app.rb +0 -0
  545. data/test/test.assertinclude.rb +109 -0
  546. data/test/test.assertinclude.rb~ +109 -0
  547. data/test/test.formreader-2.0.rb +352 -0
  548. data/test/test.formreader.rb +465 -0
  549. data/test/test.mime-type.rb +23 -0
  550. data/test/test.narf.cgi.rb +101 -0
  551. data/test/test.narf.cgi.rb~ +105 -0
  552. data/test/test.request.rb +328 -0
  553. data/test/test.request.rb~ +318 -0
  554. data/test/test.response.rb +565 -0
  555. data/test/test.response.rb~ +556 -0
  556. data/test/test.session.rb +50 -0
  557. data/test/test.simpledispatcher.rb +188 -0
  558. data/test/test.tagparser.rb +65 -0
  559. data/test/test.template.rb +831 -0
  560. data/test/test.template.rb~ +832 -0
  561. data/test/test.testing2.rb +341 -0
  562. data/test/test.web.test.rb +463 -0
  563. data/test/test.web.test.rb~ +461 -0
  564. data/test/testfiles/basictemplate.tpl +1 -0
  565. data/test/testfiles/explorer5.multipart.data +9 -0
  566. data/test/testfiles/form.html +7 -0
  567. data/test/testfiles/mozilla.multipart.data +9 -0
  568. data/test/testfiles/netscape4.multipart.data +9 -0
  569. data/test/testfiles/pic hydra.png +1 -0
  570. data/test/testfiles/post.data +1 -0
  571. data/test/testfiles/print.text +1 -0
  572. data/test/testfiles/text +1 -0
  573. data/test/webunit/dont_get_it.test_webunit.rb +27 -0
  574. data/test/webunit/ref +38 -0
  575. data/test/webunit/resources/uploadfile1.txt +1 -0
  576. data/test/webunit/resources/uploadfile2.txt +1 -0
  577. data/test/webunit/test_assert.rb +169 -0
  578. data/test/webunit/test_cookie.rb +128 -0
  579. data/test/webunit/test_cookie.rb~ +128 -0
  580. data/test/webunit/test_domwalker.rb +83 -0
  581. data/test/webunit/test_form.rb +43 -0
  582. data/test/webunit/test_form.rb~ +43 -0
  583. data/test/webunit/test_frame.rb +43 -0
  584. data/test/webunit/test_htmlelem.rb +75 -0
  585. data/test/webunit/test_image.rb +46 -0
  586. data/test/webunit/test_jscript.rb +58 -0
  587. data/test/webunit/test_link.rb +87 -0
  588. data/test/webunit/test_multipart.rb +53 -0
  589. data/test/webunit/test_multipart.rb~ +53 -0
  590. data/test/webunit/test_params.rb +212 -0
  591. data/test/webunit/test_params.rb~ +211 -0
  592. data/test/webunit/test_parser.rb +31 -0
  593. data/test/webunit/test_response.rb +145 -0
  594. data/test/webunit/test_response.rb~ +145 -0
  595. data/test/webunit/test_site/assert.html +101 -0
  596. data/test/webunit/test_site/assert.html~ +1 -0
  597. data/test/webunit/test_site/auth/index.html +5 -0
  598. data/test/webunit/test_site/auth/index.html~ +1 -0
  599. data/test/webunit/test_site/badtags.html +7 -0
  600. data/test/webunit/test_site/badtags.html~ +1 -0
  601. data/test/webunit/test_site/cookie.cgi +37 -0
  602. data/test/webunit/test_site/cookie.cgi~ +35 -0
  603. data/test/webunit/test_site/document.xml +13 -0
  604. data/test/webunit/test_site/document.xml~ +1 -0
  605. data/test/webunit/test_site/form.html +150 -0
  606. data/test/webunit/test_site/form.html~ +1 -0
  607. data/test/webunit/test_site/frame-0.html +10 -0
  608. data/test/webunit/test_site/frame-0.html~ +1 -0
  609. data/test/webunit/test_site/frame-1.html +10 -0
  610. data/test/webunit/test_site/frame-1.html~ +1 -0
  611. data/test/webunit/test_site/frame.html +10 -0
  612. data/test/webunit/test_site/frame.html~ +1 -0
  613. data/test/webunit/test_site/image.html +17 -0
  614. data/test/webunit/test_site/image.html~ +1 -0
  615. data/test/webunit/test_site/images/x.gif +0 -0
  616. data/test/webunit/test_site/images/y.gif +0 -0
  617. data/test/webunit/test_site/include.cgi~ +10 -0
  618. data/test/webunit/test_site/jscript-0.html +10 -0
  619. data/test/webunit/test_site/jscript-0.html~ +1 -0
  620. data/test/webunit/test_site/jscript-1.html +10 -0
  621. data/test/webunit/test_site/jscript-1.html~ +1 -0
  622. data/test/webunit/test_site/jscript.html +19 -0
  623. data/test/webunit/test_site/jscript.html~ +1 -0
  624. data/test/webunit/test_site/link.html +19 -0
  625. data/test/webunit/test_site/link.html~ +1 -0
  626. data/test/webunit/test_site/multipart.cgi +27 -0
  627. data/test/webunit/test_site/multipart.cgi~ +25 -0
  628. data/test/webunit/test_site/multipart.html +74 -0
  629. data/test/webunit/test_site/multipart.html~ +1 -0
  630. data/test/webunit/test_site/params.html +65 -0
  631. data/test/webunit/test_site/params.html~ +1 -0
  632. data/test/webunit/test_site/redirect.cgi +14 -0
  633. data/test/webunit/test_site/redirect.cgi~ +14 -0
  634. data/test/webunit/test_site/response.html +67 -0
  635. data/test/webunit/test_site/response.html~ +1 -0
  636. data/test/webunit/test_site/simple.cgi +17 -0
  637. data/test/webunit/test_site/simple.cgi~ +17 -0
  638. data/test/webunit/test_site/stock.cgi +36 -0
  639. data/test/webunit/test_site/stock.cgi~ +34 -0
  640. data/test/webunit/test_site/table.html +83 -0
  641. data/test/webunit/test_site/table.html~ +1 -0
  642. data/test/webunit/test_site/test.cgi~ +25 -0
  643. data/test/webunit/test_table.rb +70 -0
  644. data/test/webunit/test_utils.rb +107 -0
  645. data/test/wiki/test.history.rb +277 -0
  646. data/test/wiki/test.history.rb~ +254 -0
  647. data/test/wiki/test.illustration_page.rb +287 -0
  648. data/test/wiki/test.illustration_page.rb~ +287 -0
  649. data/test/wiki/test.linker.rb +197 -0
  650. data/test/wiki/test.tarpit.rb +40 -0
  651. data/test/wiki/test.wiki.rb +295 -0
  652. data/test/wiki/test.wiki.rb~ +295 -0
  653. data/test/wikitestroot/big_image.jpg +0 -0
  654. data/test/wikitestroot/mime.types +483 -0
  655. data/test/wikitestroot/test_upload.gif +0 -0
  656. data/vandals.test.txt +3 -0
  657. metadata +768 -0
@@ -0,0 +1,149 @@
1
+ #
2
+ # $Id: ftp.rb,v 1.1.1.1 2002/11/29 04:34:25 patsplat Exp $
3
+ #
4
+ # Copyright (c) 2001 akira yamada <akira@ruby-lang.org>
5
+ # You can redistribute it and/or modify it under the same term as Ruby.
6
+ #
7
+
8
+ require 'uri/generic'
9
+
10
+ module URI
11
+
12
+ =begin
13
+
14
+ == URI::FTP
15
+
16
+ === Super Class
17
+
18
+ ((<URI::Generic>))
19
+
20
+ =end
21
+
22
+ # RFC1738 section 3.2.
23
+ class FTP < Generic
24
+ DEFAULT_PORT = 21
25
+
26
+ COMPONENT = [
27
+ :scheme,
28
+ :userinfo, :host, :port,
29
+ :path, :typecode
30
+ ].freeze
31
+
32
+ TYPECODE = ['a', 'i', 'd'].freeze
33
+ TYPECODE_PREFIX = ';type='.freeze
34
+
35
+ =begin
36
+
37
+ === Class Methods
38
+
39
+ --- URI::FTP::build
40
+ Create a new URI::FTP object from components of URI::FTP with
41
+ check. It is scheme, userinfo, host, port, path and typecode. It
42
+ provided by an Array or a Hash. typecode is "a", "i" or "d".
43
+
44
+ --- URI::FTP::new
45
+ Create a new URI::FTP object from ``generic'' components with no
46
+ check.
47
+
48
+ =end
49
+
50
+ def self.new2(user, password, host, port, path,
51
+ typecode = nil, arg_check = true)
52
+ typecode = nil if typecode.size == 0
53
+ if typecode && !TYPECODE.include?(typecode)
54
+ raise ArgumentError,
55
+ "bad typecode is specified: #{typecode}"
56
+ end
57
+
58
+ # do escape
59
+
60
+ self.new('ftp',
61
+ [user, password],
62
+ host, port, nil,
63
+ typecode ? path + TYPECODE_PREFIX + typecode : path,
64
+ nil, nil, nil, arg_check)
65
+ end
66
+
67
+ def self.build(args)
68
+ tmp = Util::make_components_hash(self, args)
69
+
70
+ if tmp[:typecode]
71
+ if tmp[:typecode].size == 1
72
+ tmp[:typecode] = TYPECODE_PREFIX + tmp[:typecode]
73
+ end
74
+ tmp[:path] << tmp[:typecode]
75
+ end
76
+
77
+ return super(tmp)
78
+ end
79
+
80
+ def initialize(*arg)
81
+ super(*arg)
82
+ @typecode = nil
83
+ tmp = @path.index(TYPECODE_PREFIX)
84
+ if tmp
85
+ typecode = @path[tmp + TYPECODE_PREFIX.size..-1]
86
+ self.set_path(@path[0..tmp - 1])
87
+
88
+ if arg[-1]
89
+ self.typecode = typecode
90
+ else
91
+ self.set_typecode(typecode)
92
+ end
93
+ end
94
+ end
95
+ attr_reader :typecode
96
+
97
+ #
98
+ # methods for typecode
99
+ #
100
+
101
+ def check_typecode(v)
102
+ if TYPECODE.include?(v)
103
+ return true
104
+ else
105
+ raise InvalidComponentError,
106
+ "bad typecode(expected #{TYPECODE.join(', ')}): #{v}"
107
+ end
108
+ end
109
+ private :check_typecode
110
+
111
+ def set_typecode(v)
112
+ @typecode = v
113
+ end
114
+ protected :set_typecode
115
+
116
+ def typecode=(typecode)
117
+ check_typecode(typecode)
118
+ set_typecode(typecode)
119
+ end
120
+
121
+ =begin
122
+ =end
123
+ def merge(oth)
124
+ tmp = super(oth)
125
+ if self != tmp
126
+ tmp.set_typecode(oth.typecode)
127
+ end
128
+
129
+ return tmp
130
+ end
131
+
132
+ =begin
133
+ =end
134
+ def to_str
135
+ save_path = nil
136
+ if @typecode
137
+ save_path = @path
138
+ @path = @path + TYPECODE_PREFIX + @typecode
139
+ end
140
+ str = super
141
+ if @typecode
142
+ @path = save_path
143
+ end
144
+
145
+ return str
146
+ end
147
+ end # FTP
148
+ @@schemes['FTP'] = FTP
149
+ end # URI
@@ -0,0 +1,1106 @@
1
+ #
2
+ # $Id: generic.rb,v 1.1.1.1 2002/11/29 04:34:25 patsplat Exp $
3
+ #
4
+ # Copyright (c) 2001 akira yamada <akira@ruby-lang.org>
5
+ # You can redistribute it and/or modify it under the same term as Ruby.
6
+ #
7
+
8
+ require 'uri/common'
9
+
10
+ module URI
11
+
12
+ =begin
13
+
14
+ == URI::Generic
15
+
16
+ === Super Class
17
+
18
+ Object
19
+
20
+ =end
21
+
22
+ class Generic
23
+ include REGEXP
24
+
25
+ =begin
26
+
27
+ === Class Methods
28
+
29
+ --- URI::Generic::default_port
30
+
31
+ =end
32
+ DEFAULT_PORT = nil
33
+
34
+ def self.default_port
35
+ self::DEFAULT_PORT
36
+ end
37
+
38
+ def default_port
39
+ self.type.default_port
40
+ end
41
+
42
+ =begin
43
+ --- URI::Generic::component
44
+ =end
45
+ COMPONENT = [
46
+ :scheme,
47
+ :userinfo, :host, :port, :registry,
48
+ :path, :opaque,
49
+ :query,
50
+ :fragment
51
+ ].freeze
52
+
53
+ def self.component
54
+ self::COMPONENT
55
+ end
56
+
57
+ =begin
58
+ --- URI::Generic::use_registry
59
+ =end
60
+ USE_REGISTRY = false
61
+
62
+ def self.use_registry
63
+ self::USE_REGISTRY
64
+ end
65
+
66
+ =begin
67
+
68
+ --- URI::Generic::build2
69
+ At first, try to create a new URI::Generic object using
70
+ URI::Generic::build. But, if you get a exception
71
+ URI::InvalidComponentError, then re-try to create an object with
72
+ escaped components.
73
+
74
+ --- URI::Generic::build
75
+ Create a new URI::Generic object from components of URI::Generic
76
+ with check. It is scheme, userinfo, host, port, registry, path,
77
+ opaque, query and fragment. It provided by an Array of a Hash.
78
+
79
+ --- URI::Generic::new
80
+ Create new URI::Generic object from ``generic'' components with no
81
+ check.
82
+
83
+ =end
84
+ def self.build2(args)
85
+ begin
86
+ return self.build(args)
87
+ rescue InvalidComponentError
88
+ if args.kind_of?(Array)
89
+ return self.build(args.collect{|x|
90
+ if x
91
+ URI.escape(x)
92
+ else
93
+ x
94
+ end
95
+ })
96
+ elsif args.kind_of?(Hash)
97
+ tmp = {}
98
+ args.each do |key, value|
99
+ tmp[key] = if value
100
+ URI.escape(value)
101
+ else
102
+ value
103
+ end
104
+ end
105
+ return self.build(tmp)
106
+ end
107
+ end
108
+ end
109
+
110
+ def self.build(args)
111
+ if args.kind_of?(Array) &&
112
+ args.size == ::URI::Generic::COMPONENT.size
113
+ tmp = args
114
+ elsif args.kind_of?(Hash)
115
+ tmp = ::URI::Generic::COMPONENT.collect do |c|
116
+ if args.include?(c)
117
+ args[c]
118
+ else
119
+ nil
120
+ end
121
+ end
122
+ else
123
+ raise ArgumentError,
124
+ "expected Array of or Hash of components of #{self.type} (#{self.type.component.join(', ')})"
125
+ end
126
+
127
+ tmp << true
128
+ return self.new(*tmp)
129
+ end
130
+
131
+ def initialize(scheme,
132
+ userinfo, host, port, registry,
133
+ path, opaque,
134
+ query,
135
+ fragment,
136
+ arg_check = false)
137
+ @scheme = nil
138
+ @user = nil
139
+ @password = nil
140
+ @host = nil
141
+ @port = nil
142
+ @path = nil
143
+ @query = nil
144
+ @opaque = nil
145
+ @registry = nil
146
+ @fragment = nil
147
+
148
+ if arg_check
149
+ self.scheme = scheme
150
+ self.userinfo = userinfo
151
+ self.host = host
152
+ self.port = port
153
+ self.path = path
154
+ self.query = query
155
+ self.opaque = opaque
156
+ self.registry = registry
157
+ self.fragment = fragment
158
+ else
159
+ self.set_scheme(scheme)
160
+ self.set_userinfo(userinfo)
161
+ self.set_host(host)
162
+ self.set_port(port)
163
+ self.set_path(path)
164
+ self.set_query(query)
165
+ self.set_opaque(opaque)
166
+ self.set_registry(registry)
167
+ self.set_fragment(fragment)
168
+ end
169
+ if @registry && !self.class.use_registry
170
+ raise InvalidURIError, "the scheme #{@scheme} does not accept registry part: #{@registry} (or bad hostname?)"
171
+ end
172
+
173
+ @scheme.freeze if @scheme
174
+ self.set_path('') if !@path && !@opaque # (see RFC2396 Section 5.2)
175
+ self.set_port(self.default_port) if self.default_port && !@port
176
+ end
177
+ attr_reader :scheme
178
+ attr_reader :host
179
+ attr_reader :port
180
+ attr_reader :registry
181
+ attr_reader :path
182
+ attr_reader :query
183
+ attr_reader :opaque
184
+ attr_reader :fragment
185
+
186
+ =begin
187
+
188
+ === Instance Methods
189
+
190
+ =end
191
+
192
+ =begin
193
+
194
+ --- URI::Generic#component
195
+
196
+ =end
197
+ def component
198
+ self.type.component
199
+ end
200
+
201
+ # set_XXX method sets value to @XXX instance variable with no check,
202
+ # so be careful if you use these methods. or, you use these method
203
+ # with check_XXX method, or you use XXX= methods.
204
+
205
+ =begin
206
+
207
+ --- URI::Generic#scheme
208
+
209
+ --- URI::Generic#scheme=(v)
210
+
211
+ =end
212
+ #
213
+ # methods for scheme
214
+ #
215
+ def check_scheme(v)
216
+ if v && SCHEME !~ v
217
+ raise InvalidComponentError,
218
+ "bad component(expected scheme component): #{v}"
219
+ end
220
+
221
+ return true
222
+ end
223
+ private :check_scheme
224
+
225
+ def set_scheme(v)
226
+ @scheme = v
227
+ end
228
+ protected :set_scheme
229
+
230
+ def scheme=(v)
231
+ check_scheme(v)
232
+ set_scheme(v)
233
+ end
234
+
235
+ =begin
236
+
237
+ --- URI::Generic#userinfo
238
+
239
+ --- URI::Generic#userinfo=(v)
240
+
241
+ --- URI::Generic#user
242
+
243
+ --- URI::Generic#user=(v)
244
+
245
+ --- URI::Generic#password
246
+
247
+ --- URI::Generic#password=(v)
248
+
249
+ =end
250
+ #
251
+ # methods for userinfo
252
+ #
253
+ def check_userinfo(user, password = nil)
254
+ if (user || password) &&
255
+ (@registry || @opaque)
256
+ raise InvalidURIError,
257
+ "can not set userinfo with registry or opaque"
258
+ end
259
+
260
+ if !password
261
+ user, password = split_userinfo(user)
262
+ end
263
+ check_user(user)
264
+ check_password(password)
265
+
266
+ return true
267
+ end
268
+ private :check_userinfo
269
+
270
+ def check_user(v)
271
+ return v unless v
272
+
273
+ if USERINFO !~ v
274
+ raise InvalidComponentError,
275
+ "bad component(expected userinfo component or user component): #{v}"
276
+ end
277
+
278
+ return true
279
+ end
280
+ private :check_user
281
+
282
+ def check_password(v)
283
+ return v unless v
284
+
285
+ if !@password
286
+ raise InvalidURIError,
287
+ "password component depends user component"
288
+ end
289
+
290
+ if USERINFO !~ v
291
+ raise InvalidComponentError,
292
+ "bad component(expected user component): #{v}"
293
+ end
294
+
295
+ return true
296
+ end
297
+ private :check_password
298
+
299
+ def userinfo=(userinfo)
300
+ if userinfo.nil?
301
+ return nil
302
+ end
303
+ check_userinfo(*userinfo)
304
+ set_userinfo(*userinfo)
305
+ end
306
+
307
+ def user=(user)
308
+ check_user(user)
309
+ set_user(user)
310
+ end
311
+
312
+ def password=(password)
313
+ check_password(password)
314
+ set_password(password)
315
+ end
316
+
317
+ def set_userinfo(user, password = nil)
318
+ unless password
319
+ user, password = split_userinfo(user)
320
+ end
321
+ @user = user
322
+ @password = password if password
323
+
324
+ [@user, @password]
325
+ end
326
+ protected :set_userinfo
327
+
328
+ def set_user(v)
329
+ set_userinfo(v, @password)
330
+ v
331
+ end
332
+ protected :set_user
333
+
334
+ def set_password(v)
335
+ set_userinfo(@user, v)
336
+ v
337
+ end
338
+ protected :set_password
339
+
340
+ def split_userinfo(ui)
341
+ return nil, nil unless ui
342
+ tmp = ui.index(':')
343
+ if tmp
344
+ user = ui[0..tmp - 1]
345
+ password = ui[tmp + 1..-1]
346
+ else
347
+ user = ui
348
+ password = nil
349
+ end
350
+
351
+ return user, password
352
+ end
353
+ private :split_userinfo
354
+
355
+ def escape_userpass(v)
356
+ v = URI.escape(v, /[@:\/]/o) # RFC 1738 section 3.1 #/
357
+ end
358
+ private :escape_userpass
359
+
360
+ def userinfo
361
+ if !@password
362
+ @user
363
+ else
364
+ @user + ':' + @password
365
+ end
366
+ end
367
+
368
+ def user
369
+ @user
370
+ end
371
+
372
+ def password
373
+ @password
374
+ end
375
+
376
+ =begin
377
+
378
+ --- URI::Generic#host
379
+
380
+ --- URI::Generic#host=(v)
381
+
382
+ =end
383
+ #
384
+ # methods for host
385
+ #
386
+
387
+ def check_host(v)
388
+ return v unless v
389
+
390
+ if @registry || @opaque
391
+ raise InvalidURIError,
392
+ "can not set host with registry or opaque"
393
+ elsif HOST !~ v
394
+ raise InvalidComponentError,
395
+ "bad component(expected host component): #{v}"
396
+ end
397
+
398
+ return true
399
+ end
400
+ private :check_host
401
+
402
+ def set_host(v)
403
+ @host = v
404
+ end
405
+ protected :set_host
406
+
407
+ def host=(v)
408
+ check_host(v)
409
+ set_host(v)
410
+ end
411
+
412
+ =begin
413
+
414
+ --- URI::Generic#port
415
+
416
+ --- URI::Generic#port=(v)
417
+
418
+ =end
419
+ #
420
+ # methods for port
421
+ #
422
+
423
+ def check_port(v)
424
+ return v unless v
425
+
426
+ if @registry || @opaque
427
+ raise InvalidURIError,
428
+ "can not set port with registry or opaque"
429
+ elsif !v.kind_of?(Fixnum) && PORT !~ v
430
+ raise InvalidComponentError,
431
+ "bad component(expected port component): #{v}"
432
+ end
433
+
434
+ return true
435
+ end
436
+ private :check_port
437
+
438
+ def set_port(v)
439
+ v = v.to_i if v && !v.kind_of?(Fixnum)
440
+ @port = v
441
+ end
442
+ protected :set_port
443
+
444
+ def port=(v)
445
+ check_port(v)
446
+ set_port(v)
447
+ end
448
+
449
+ =begin
450
+
451
+ --- URI::Generic#registry
452
+
453
+ --- URI::Generic#registry=(v)
454
+
455
+ =end
456
+ #
457
+ # methods for registry
458
+ #
459
+
460
+ def check_registry(v)
461
+ return v unless v
462
+
463
+ # raise if both server and registry are not nil, because:
464
+ # authority = server | reg_name
465
+ # server = [ [ userinfo "@" ] hostport ]
466
+ if @host || @port || @user # userinfo = @user + ':' + @password
467
+ raise InvalidURIError,
468
+ "can not set registry with host, port, or userinfo"
469
+ elsif v && REGISTRY !~ v
470
+ raise InvalidComponentError,
471
+ "bad component(expected registry component): #{v}"
472
+ end
473
+
474
+ return true
475
+ end
476
+ private :check_registry
477
+
478
+ def set_registry(v)
479
+ @registry = v
480
+ end
481
+ protected :set_registry
482
+
483
+ def registry=(v)
484
+ check_registry(v)
485
+ set_registry(v)
486
+ end
487
+
488
+ =begin
489
+
490
+ --- URI::Generic#path
491
+
492
+ --- URI::Generic#path=(v)
493
+
494
+ =end
495
+ #
496
+ # methods for path
497
+ #
498
+
499
+ def check_path(v)
500
+ # raise if both hier and opaque are not nil, because:
501
+ # absoluteURI = scheme ":" ( hier_part | opaque_part )
502
+ # hier_part = ( net_path | abs_path ) [ "?" query ]
503
+ if v && @opaque
504
+ raise InvalidURIError,
505
+ "path conflicts with opaque"
506
+ end
507
+
508
+ if @scheme
509
+ if v && v != '' && ABS_PATH !~ v
510
+ raise InvalidComponentError,
511
+ "bad component(expected absolute path component): #{v}"
512
+ end
513
+ else
514
+ if v && v != '' && ABS_PATH !~ v && REL_PATH !~ v
515
+ raise InvalidComponentError,
516
+ "bad component(expected relative path component): #{v}"
517
+ end
518
+ end
519
+
520
+ return true
521
+ end
522
+ private :check_path
523
+
524
+ def set_path(v)
525
+ @path = v
526
+ end
527
+ protected :set_path
528
+
529
+ def path=(v)
530
+ check_path(v)
531
+ set_path(v)
532
+ end
533
+
534
+ =begin
535
+
536
+ --- URI::Generic#query
537
+
538
+ --- URI::Generic#query=(v)
539
+
540
+ =end
541
+ #
542
+ # methods for query
543
+ #
544
+
545
+ def check_query(v)
546
+ return v unless v
547
+
548
+ # raise if both hier and opaque are not nil, because:
549
+ # absoluteURI = scheme ":" ( hier_part | opaque_part )
550
+ # hier_part = ( net_path | abs_path ) [ "?" query ]
551
+ if @opaque
552
+ raise InvalidURIError,
553
+ "query conflicts with opaque"
554
+ end
555
+
556
+ if v && v != '' && QUERY !~ v
557
+ raise InvalidComponentError,
558
+ "bad component(expected query component): #{v}"
559
+ end
560
+
561
+ return true
562
+ end
563
+ private :check_query
564
+
565
+ def set_query(v)
566
+ @query = v
567
+ end
568
+ protected :set_query
569
+
570
+ def query=(v)
571
+ check_query(v)
572
+ set_query(v)
573
+ end
574
+
575
+ =begin
576
+
577
+ --- URI::Generic#opaque
578
+
579
+ --- URI::Generic#opaque=(v)
580
+
581
+ =end
582
+ #
583
+ # methods for opaque
584
+ #
585
+
586
+ def check_opaque(v)
587
+ return v unless v
588
+
589
+ # raise if both hier and opaque are not nil, because:
590
+ # absoluteURI = scheme ":" ( hier_part | opaque_part )
591
+ # hier_part = ( net_path | abs_path ) [ "?" query ]
592
+ if @host || @port || @usr || @path # userinfo = @user + ':' + @password
593
+ raise InvalidURIError,
594
+ "can not set opaque with host, port, userinfo or path"
595
+ elsif v && OPAQUE !~ v
596
+ raise InvalidComponentError,
597
+ "bad component(expected opaque component): #{v}"
598
+ end
599
+
600
+ return true
601
+ end
602
+ private :check_opaque
603
+
604
+ def set_opaque(v)
605
+ @opaque = v
606
+ end
607
+ protected :set_opaque
608
+
609
+ def opaque=(v)
610
+ check_opaque(v)
611
+ set_opaque(v)
612
+ end
613
+
614
+ =begin
615
+
616
+ --- URI::Generic#fragment
617
+
618
+ --- URI::Generic#fragment=(v)
619
+
620
+ =end
621
+ #
622
+ # methods for fragment
623
+ #
624
+
625
+ def check_fragment(v)
626
+ return v unless v
627
+
628
+ if v && v != '' && FRAGMENT !~ v
629
+ raise InvalidComponentError,
630
+ "bad component(expected fragment component): #{v}"
631
+ end
632
+
633
+ return true
634
+ end
635
+ private :check_fragment
636
+
637
+ def set_fragment(v)
638
+ @fragment = v
639
+ end
640
+ protected :set_fragment
641
+
642
+ def fragment=(v)
643
+ check_fragment(v)
644
+ set_fragment(v)
645
+ end
646
+
647
+ =begin
648
+
649
+ --- URI::Generic#hierarchical?
650
+
651
+ =end
652
+ def hierarchical?
653
+ if @path
654
+ true
655
+ else
656
+ false
657
+ end
658
+ end
659
+
660
+ =begin
661
+
662
+ --- URI::Generic#absolute?
663
+
664
+ =end
665
+ def absolute?
666
+ if @scheme
667
+ true
668
+ else
669
+ false
670
+ end
671
+ end
672
+ alias absolute absolute?
673
+
674
+ =begin
675
+
676
+ --- URI::Generic#relative?
677
+
678
+ =end
679
+ def relative?
680
+ !absolute?
681
+ end
682
+
683
+ =begin
684
+
685
+ --- URI::Generic#merge(rel)
686
+ --- URI::Generic#+(rel)
687
+
688
+ =end
689
+ def split_path(path)
690
+ path.split(%r{/+}, -1)
691
+ end
692
+ private :split_path
693
+
694
+ def merge_path(base, rel)
695
+ # RFC2396, Section 5.2, 5)
696
+ if rel[0] == ?/ #/
697
+ # RFC2396, Section 5.2, 5)
698
+ return rel
699
+
700
+ else
701
+ # RFC2396, Section 5.2, 6)
702
+ base_path = split_path(base)
703
+ rel_path = split_path(rel)
704
+
705
+ if base_path.empty?
706
+ base_path = [''] # XXX
707
+ end
708
+
709
+ # RFC2396, Section 5.2, 6), a)
710
+ base_path.pop unless base_path.size == 1
711
+
712
+ # RFC2396, Section 5.2, 6), c)
713
+ # RFC2396, Section 5.2, 6), d)
714
+ rel_path.push('') if rel_path.last == '.'
715
+ rel_path.delete('.')
716
+
717
+ # RFC2396, Section 5.2, 6), e)
718
+ tmp = []
719
+ rel_path.each do |x|
720
+ if x == '..' &&
721
+ !(tmp.empty? || tmp.last == '..')
722
+ tmp.pop
723
+ else
724
+ tmp << x
725
+ end
726
+ end
727
+
728
+ add_trailer_slash = true
729
+ while x = tmp.shift
730
+ if x == '..' && base_path.size > 1
731
+ # RFC2396, Section 4
732
+ # a .. or . in an absolute path has no special meaning
733
+ base_path.pop
734
+ else
735
+ # if x == '..'
736
+ # valid absolute (but abnormal) path "/../..."
737
+ # else
738
+ # valid absolute path
739
+ # end
740
+ base_path << x
741
+ tmp.each {|t| base_path << t}
742
+ add_trailer_slash = false
743
+ break
744
+ end
745
+ end
746
+ base_path.push('') if add_trailer_slash
747
+
748
+ return base_path.join('/')
749
+ end
750
+ end
751
+ private :merge_path
752
+
753
+ # abs(self) + rel(oth) => abs(new)
754
+ def merge(oth)
755
+ base, rel = merge0(oth)
756
+ if base == rel
757
+ return base
758
+ end
759
+
760
+ authority = rel.userinfo || rel.host || rel.port
761
+
762
+ # RFC2396, Section 5.2, 2)
763
+ if rel.path.empty? && !authority && !rel.query
764
+ base.set_fragment(rel.fragment) if rel.fragment
765
+ return base
766
+ end
767
+
768
+ base.set_query(nil)
769
+ base.set_fragment(nil)
770
+
771
+ # RFC2396, Section 5.2, 4)
772
+ if !authority
773
+ base.set_path(merge_path(base.path, rel.path))
774
+ else
775
+ # RFC2396, Section 5.2, 4)
776
+ base.set_path(rel.path)
777
+ end
778
+
779
+ # RFC2396, Section 5.2, 7)
780
+ base.set_userinfo(rel.userinfo) if rel.userinfo
781
+ base.set_host(rel.host) if rel.host
782
+ base.set_port(rel.port) if rel.port
783
+ base.set_query(rel.query) if rel.query
784
+ base.set_fragment(rel.fragment) if rel.fragment
785
+
786
+ return base
787
+ end # merge
788
+ alias + merge
789
+
790
+ # return base and rel.
791
+ # you can modify `base', but can not `rel'.
792
+ def merge0(oth)
793
+ case oth
794
+ when Generic
795
+ when String
796
+ oth = URI.parse(oth)
797
+ else
798
+ raise ArgumentError,
799
+ "bad argument(expected URI object or URI string)"
800
+ end
801
+
802
+ if self.relative? && oth.relative?
803
+ raise BadURIError,
804
+ "both URI are relative"
805
+ end
806
+
807
+ if self.absolute? && oth.absolute?
808
+ #raise BadURIError,
809
+ # "both URI are absolute"
810
+ # hmm... should return oth for usability?
811
+ return oth, oth
812
+ end
813
+
814
+ if !self.hierarchical?
815
+ raise BadURIError,
816
+ "not hierarchical URI: #{self}"
817
+ elsif !oth.hierarchical?
818
+ raise BadURIError,
819
+ "not hierarchical URI: #{oth}"
820
+ end
821
+
822
+ if self.absolute?
823
+ return self.dup, oth
824
+ else
825
+ return oth, oth
826
+ end
827
+ end
828
+ private :merge0
829
+
830
+ =begin
831
+
832
+ --- URI::Generic#route_from(src)
833
+ --- URI::Generic#-(src)
834
+
835
+ =end
836
+ def route_from_path(src, dst)
837
+ # RFC2396, Section 4.2
838
+ return '' if src == dst
839
+
840
+ src_path = split_path(src)
841
+ dst_path = split_path(dst)
842
+
843
+ # hmm... dst has abnormal absolute path,
844
+ # like "/./", "/../", "/x/../", ...
845
+ if dst_path.include?('..') ||
846
+ dst_path.include?('.')
847
+ return dst.dup
848
+ end
849
+
850
+ src_path.pop
851
+
852
+ # discard same parts
853
+ while dst_path.first == src_path.first
854
+ break if dst_path.empty?
855
+
856
+ src_path.shift
857
+ dst_path.shift
858
+ end
859
+
860
+ tmp = dst_path.join('/')
861
+
862
+ # calculate
863
+ if src_path.empty?
864
+ if tmp.empty?
865
+ return './'
866
+ elsif dst_path.first.include?(':') # (see RFC2396 Section 5)
867
+ return './' + tmp
868
+ else
869
+ return tmp
870
+ end
871
+ end
872
+
873
+ return '../' * src_path.size + tmp
874
+ end
875
+ private :route_from_path
876
+
877
+ def route_from0(oth)
878
+ case oth
879
+ when Generic
880
+ when String
881
+ oth = URI.parse(oth)
882
+ else
883
+ raise ArgumentError,
884
+ "bad argument(expected URI object or URI string)"
885
+ end
886
+
887
+ if self.relative?
888
+ raise BadURIError,
889
+ "relative URI: #{self}"
890
+ end
891
+ if oth.relative?
892
+ raise BadURIError,
893
+ "relative URI: #{oth}"
894
+ end
895
+
896
+ if !self.hierarchical? || !oth.hierarchical?
897
+ return self, self.dup
898
+ end
899
+
900
+ if self.scheme != oth.scheme
901
+ return oth, oth.dup
902
+ end
903
+ rel = URI::Generic.new(nil, # it is relative URI
904
+ self.userinfo, self.host, self.port,
905
+ self.registry, self.path, self.opaque,
906
+ self.query, self.fragment)
907
+
908
+ if rel.userinfo != oth.userinfo ||
909
+ rel.host != oth.host ||
910
+ rel.port != oth.port
911
+ rel.set_port(nil) if rel.port == oth.default_port
912
+ return rel, rel
913
+ end
914
+ rel.set_userinfo(nil)
915
+ rel.set_host(nil)
916
+ rel.set_port(nil)
917
+
918
+ if rel.path == oth.path
919
+ rel.set_path('')
920
+ rel.set_query(nil) if rel.query == oth.query
921
+ return rel, rel
922
+ end
923
+
924
+ # you can modify `rel', but can not `oth'.
925
+ return oth, rel
926
+ end
927
+ private :route_from0
928
+
929
+ # calculate relative path from oth to self
930
+ def route_from(oth)
931
+ # you can modify `rel', but can not `oth'.
932
+ oth, rel = route_from0(oth)
933
+ if oth == rel
934
+ return rel
935
+ end
936
+
937
+ rel.set_path(route_from_path(oth.path, self.path))
938
+ if rel.path == './' && self.query
939
+ # "./?foo" -> "?foo"
940
+ rel.set_path('')
941
+ end
942
+
943
+ return rel
944
+ end
945
+ # abs1 - abs2 => relative_path_to_abs1_from_abs2
946
+ # (see http://www.nikonet.or.jp/spring/what_v/what_v_4.htm :-)
947
+ alias - route_from
948
+
949
+ =begin
950
+
951
+ --- URI::Generic#route_to(dst)
952
+
953
+ =end
954
+ # calculate relative path to oth from self
955
+ def route_to(oth)
956
+ case oth
957
+ when Generic
958
+ when String
959
+ oth = URI.parse(oth)
960
+ else
961
+ raise ArgumentError,
962
+ "bad argument(expected URI object or URI string)"
963
+ end
964
+
965
+ oth.route_from(self)
966
+ end
967
+
968
+ =begin
969
+
970
+ --- URI::Generic#normalize
971
+ --- URI::Generic#normalize!
972
+
973
+ =end
974
+ def normalize
975
+ uri = dup
976
+ uri.normalize!
977
+ uri
978
+ end
979
+
980
+ def normalize!
981
+ if path && path == ''
982
+ set_path('/')
983
+ end
984
+ if host && host != host.downcase
985
+ set_host(self.host.downcase)
986
+ end
987
+ end
988
+
989
+ =begin
990
+
991
+ --- URI::Generic#to_s
992
+
993
+ =end
994
+ def path_query
995
+ str = @path
996
+ if @query
997
+ str += '?' + @query
998
+ end
999
+ str
1000
+ end
1001
+ private :path_query
1002
+
1003
+ def to_str
1004
+ str = ''
1005
+ if @scheme
1006
+ str << @scheme
1007
+ str << ':'
1008
+ end
1009
+
1010
+ if @opaque
1011
+ str << @opaque
1012
+
1013
+ else
1014
+ if @registry
1015
+ str << @registry
1016
+ else
1017
+ if @host
1018
+ str << '//'
1019
+ end
1020
+ if self.userinfo
1021
+ str << self.userinfo
1022
+ str << '@'
1023
+ end
1024
+ if @host
1025
+ str << @host
1026
+ end
1027
+ if @port && @port != self.default_port
1028
+ str << ':'
1029
+ str << @port.to_s
1030
+ end
1031
+ end
1032
+
1033
+ str << path_query
1034
+ end
1035
+
1036
+ if @fragment
1037
+ str << '#'
1038
+ str << @fragment
1039
+ end
1040
+
1041
+ str
1042
+ end
1043
+
1044
+ def to_s
1045
+ to_str
1046
+ end
1047
+
1048
+ =begin
1049
+
1050
+ --- URI::Generic#==(oth)
1051
+
1052
+ =end
1053
+ def ==(oth)
1054
+ if oth.kind_of?(String)
1055
+ oth = URI.parse(oth)
1056
+ end
1057
+
1058
+ if self.class == oth.class
1059
+ self.normalize.to_ary == oth.normalize.to_ary
1060
+ else
1061
+ false
1062
+ end
1063
+ end
1064
+
1065
+ =begin
1066
+
1067
+ --- URI::Generic#===(oth)
1068
+
1069
+ =end
1070
+ # def ===(oth)
1071
+ # raise NotImplementedError
1072
+ # end
1073
+
1074
+ =begin
1075
+ --- URI::Generic#to_a
1076
+ =end
1077
+ def to_ary
1078
+ component.collect do |x|
1079
+ self.send(x)
1080
+ end
1081
+ end
1082
+
1083
+ def to_a
1084
+ to_ary
1085
+ end
1086
+
1087
+ =begin
1088
+ =end
1089
+ def inspect
1090
+ sprintf("#<%s:0x%x URL:%s>", self.type.to_s, self.id, self.to_s)
1091
+ end
1092
+
1093
+ =begin
1094
+ =end
1095
+ def coerce(oth)
1096
+ case oth
1097
+ when String
1098
+ oth = URI.parse(oth)
1099
+ else
1100
+ super
1101
+ end
1102
+
1103
+ return oth, self
1104
+ end
1105
+ end # Generic
1106
+ end # URI