IOWA 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (502) hide show
  1. checksums.yaml +7 -0
  2. data/CONTRIBUTORS +14 -0
  3. data/README.md +23 -0
  4. data/RELEASE_NOTES +77 -0
  5. data/ToDo +21 -0
  6. data/components/CRUDList/CRUDList.html +13 -0
  7. data/components/CRUDList/CRUDList.iwa +136 -0
  8. data/components/Content/Content.html +0 -0
  9. data/components/Content/Content.iwa +143 -0
  10. data/components/Content/example/README +9 -0
  11. data/components/Content/example/cgi/iowa.cgi +10 -0
  12. data/components/Content/example/demo.rb +30 -0
  13. data/components/Content/example/doc/index.html +7 -0
  14. data/components/Content/example/iowa/Content.html +1 -0
  15. data/components/Content/example/iowa/Content.iwa +1 -0
  16. data/components/Content/example/iowa/Main.html +6 -0
  17. data/components/Content/example/iowa/Main.iwa +3 -0
  18. data/components/Content/example/iowa/_content/body +7 -0
  19. data/components/Content/example/iowa/_content/body2 +3 -0
  20. data/components/Content/example/iowa/_content/title +2 -0
  21. data/components/Content/example/iowa/app.cnf +8 -0
  22. data/components/Content/example/iowa/app.rb +8 -0
  23. data/components/Content/example/webrick.rb +38 -0
  24. data/components/Include/Include.html +1 -0
  25. data/components/Include/Include.iwa +30 -0
  26. data/components/Include/readme +5 -0
  27. data/components/JumpTo/JumpTo.html +8 -0
  28. data/components/JumpTo/JumpTo.iwa +8 -0
  29. data/components/JumpTo/readme +6 -0
  30. data/doc/Architecture.txt +6 -0
  31. data/doc/History.txt +33 -0
  32. data/doc/StandardDispatcher.txt +19 -0
  33. data/examples/blog/README +1 -0
  34. data/examples/hello_world/README +17 -0
  35. data/examples/hello_world/htdocs/hello_world_html.html +24 -0
  36. data/examples/hello_world/htdocs/hello_world_ruby.html +41 -0
  37. data/examples/hello_world/iowa/HelloWorld.html +14 -0
  38. data/examples/hello_world/iowa/HelloWorld.iwa +31 -0
  39. data/examples/hello_world/iowa/Index.html +16 -0
  40. data/examples/hello_world/iowa/Index.iwa +5 -0
  41. data/examples/hello_world/iowa/iowa_hello_world.cnf +19 -0
  42. data/examples/hello_world/iowa/iowa_hello_world.rb +5 -0
  43. data/examples/hello_world/iowa/mapfile.cnf +6 -0
  44. data/examples/hw1/iowa/Main.html +1 -0
  45. data/examples/hw1/iowa/README +9 -0
  46. data/examples/hw1/iowa/hw.rb +4 -0
  47. data/examples/hw2/iowa/Main.html +10 -0
  48. data/examples/hw2/iowa/Main.iwa +7 -0
  49. data/examples/hw2/iowa/README +16 -0
  50. data/examples/hw2/iowa/hw.rb +4 -0
  51. data/examples/hw3/iowa/Main.html +11 -0
  52. data/examples/hw3/iowa/Main.iwa +7 -0
  53. data/examples/hw3/iowa/README +22 -0
  54. data/examples/hw3/iowa/hw.rb +4 -0
  55. data/examples/hw4/iowa/Greetings.html +10 -0
  56. data/examples/hw4/iowa/Greetings.iwa +9 -0
  57. data/examples/hw4/iowa/Main.html +12 -0
  58. data/examples/hw4/iowa/Main.iwa +10 -0
  59. data/examples/hw4/iowa/README +28 -0
  60. data/examples/hw4/iowa/hw.rb +4 -0
  61. data/examples/hw5/iowa/Footer.html +2 -0
  62. data/examples/hw5/iowa/Greetings.html +4 -0
  63. data/examples/hw5/iowa/Greetings.iwa +12 -0
  64. data/examples/hw5/iowa/Header.html +6 -0
  65. data/examples/hw5/iowa/Main.html +12 -0
  66. data/examples/hw5/iowa/Main.iwa +13 -0
  67. data/examples/hw5/iowa/README +16 -0
  68. data/examples/hw5/iowa/hw.rb +4 -0
  69. data/examples/template_server/iowa/Content.iwa +121 -0
  70. data/examples/template_server/iowa/Content.view +0 -0
  71. data/examples/template_server/iowa/DBContentDispatcher.rb +112 -0
  72. data/examples/template_server/iowa/DBContentPage.html +3 -0
  73. data/examples/template_server/iowa/DBContentPage.iwa +85 -0
  74. data/examples/template_server/iowa/app.cnf +13 -0
  75. data/examples/template_server/iowa/app.rb +5 -0
  76. data/ext/Classifier/classifier.c +256 -0
  77. data/ext/Classifier/ext_help.h +14 -0
  78. data/ext/Classifier/extconf.rb +5 -0
  79. data/ext/Classifier/tst.h +40 -0
  80. data/ext/Classifier/tst_cleanup.c +24 -0
  81. data/ext/Classifier/tst_delete.c +146 -0
  82. data/ext/Classifier/tst_grow_node_free_list.c +38 -0
  83. data/ext/Classifier/tst_init.c +41 -0
  84. data/ext/Classifier/tst_insert.c +192 -0
  85. data/ext/Classifier/tst_search.c +68 -0
  86. data/ext/http11/README +11 -0
  87. data/ext/http11/ext_help.h +15 -0
  88. data/ext/http11/extconf.rb +5 -0
  89. data/ext/http11/http11.c +534 -0
  90. data/ext/http11/http11.c.dif +422 -0
  91. data/ext/http11/http11_parser.c +1243 -0
  92. data/ext/http11/http11_parser.c.dif +193 -0
  93. data/ext/http11/http11_parser.h +49 -0
  94. data/ext/http11/http11_parser.h.dif +20 -0
  95. data/ext/http11/http11_parser.rl +192 -0
  96. data/ext/httpmachine/Makefile +149 -0
  97. data/ext/httpmachine/extconf.rb +33 -0
  98. data/ext/httpmachine/http.cpp +430 -0
  99. data/ext/httpmachine/http.h +156 -0
  100. data/ext/httpmachine/rubyhttp.cpp +165 -0
  101. data/external/mime-types/LICENCE +18 -0
  102. data/external/mime-types/README +46 -0
  103. data/external/mime-types/doc/classes/MIME.html +120 -0
  104. data/external/mime-types/doc/classes/MIME/InvalidContentType.html +119 -0
  105. data/external/mime-types/doc/classes/MIME/Type.html +866 -0
  106. data/external/mime-types/doc/classes/MIME/Type.src/M000010.html +22 -0
  107. data/external/mime-types/doc/classes/MIME/Type.src/M000011.html +18 -0
  108. data/external/mime-types/doc/classes/MIME/Type.src/M000012.html +19 -0
  109. data/external/mime-types/doc/classes/MIME/Type.src/M000013.html +18 -0
  110. data/external/mime-types/doc/classes/MIME/Type.src/M000014.html +26 -0
  111. data/external/mime-types/doc/classes/MIME/Type.src/M000015.html +33 -0
  112. data/external/mime-types/doc/classes/MIME/Type.src/M000016.html +27 -0
  113. data/external/mime-types/doc/classes/MIME/Type.src/M000017.html +35 -0
  114. data/external/mime-types/doc/classes/MIME/Type.src/M000018.html +34 -0
  115. data/external/mime-types/doc/classes/MIME/Type.src/M000019.html +24 -0
  116. data/external/mime-types/doc/classes/MIME/Type.src/M000020.html +38 -0
  117. data/external/mime-types/doc/classes/MIME/Type.src/M000021.html +22 -0
  118. data/external/mime-types/doc/classes/MIME/Type.src/M000022.html +18 -0
  119. data/external/mime-types/doc/classes/MIME/Type.src/M000023.html +18 -0
  120. data/external/mime-types/doc/classes/MIME/Type.src/M000024.html +18 -0
  121. data/external/mime-types/doc/classes/MIME/Type.src/M000025.html +18 -0
  122. data/external/mime-types/doc/classes/MIME/Type.src/M000026.html +18 -0
  123. data/external/mime-types/doc/classes/MIME/Type.src/M000027.html +18 -0
  124. data/external/mime-types/doc/classes/MIME/Type.src/M000028.html +18 -0
  125. data/external/mime-types/doc/classes/MIME/Type.src/M000029.html +18 -0
  126. data/external/mime-types/doc/classes/MIME/Type.src/M000030.html +19 -0
  127. data/external/mime-types/doc/classes/MIME/Type.src/M000031.html +26 -0
  128. data/external/mime-types/doc/classes/MIME/Types.html +459 -0
  129. data/external/mime-types/doc/classes/MIME/Types.src/M000001.html +19 -0
  130. data/external/mime-types/doc/classes/MIME/Types.src/M000002.html +32 -0
  131. data/external/mime-types/doc/classes/MIME/Types.src/M000003.html +21 -0
  132. data/external/mime-types/doc/classes/MIME/Types.src/M000004.html +18 -0
  133. data/external/mime-types/doc/classes/MIME/Types.src/M000005.html +26 -0
  134. data/external/mime-types/doc/classes/MIME/Types.src/M000006.html +18 -0
  135. data/external/mime-types/doc/classes/MIME/Types.src/M000007.html +18 -0
  136. data/external/mime-types/doc/classes/MIME/Types.src/M000008.html +18 -0
  137. data/external/mime-types/doc/classes/MIME/Types.src/M000009.html +18 -0
  138. data/external/mime-types/doc/created.rid +1 -0
  139. data/external/mime-types/doc/files/ChangeLog.html +320 -0
  140. data/external/mime-types/doc/files/README.html +145 -0
  141. data/external/mime-types/doc/files/lib/mime/types_rb.html +101 -0
  142. data/external/mime-types/doc/fr_class_index.html +30 -0
  143. data/external/mime-types/doc/fr_file_index.html +29 -0
  144. data/external/mime-types/doc/fr_method_index.html +57 -0
  145. data/external/mime-types/doc/index.html +24 -0
  146. data/external/mime-types/doc/rdoc-style.css +208 -0
  147. data/external/mime-types/lib/mime/types.rb +1558 -0
  148. data/external/package.rb +672 -0
  149. data/external/test_support.rb +95 -0
  150. data/external/tmail/README +7 -0
  151. data/external/tmail/tmail.rb +4 -0
  152. data/external/tmail/tmail/address.rb +222 -0
  153. data/external/tmail/tmail/base64.rb +52 -0
  154. data/external/tmail/tmail/compat.rb +39 -0
  155. data/external/tmail/tmail/config.rb +50 -0
  156. data/external/tmail/tmail/encode.rb +447 -0
  157. data/external/tmail/tmail/header.rb +895 -0
  158. data/external/tmail/tmail/info.rb +14 -0
  159. data/external/tmail/tmail/loader.rb +1 -0
  160. data/external/tmail/tmail/mail.rb +869 -0
  161. data/external/tmail/tmail/mailbox.rb +386 -0
  162. data/external/tmail/tmail/mbox.rb +1 -0
  163. data/external/tmail/tmail/net.rb +260 -0
  164. data/external/tmail/tmail/obsolete.rb +123 -0
  165. data/external/tmail/tmail/parser.rb +1475 -0
  166. data/external/tmail/tmail/parser.y +372 -0
  167. data/external/tmail/tmail/port.rb +356 -0
  168. data/external/tmail/tmail/scanner.rb +17 -0
  169. data/external/tmail/tmail/scanner_r.rb +243 -0
  170. data/external/tmail/tmail/stringio.rb +256 -0
  171. data/external/tmail/tmail/textutils.rb +197 -0
  172. data/external/tmail/tmail/tmail.rb +1 -0
  173. data/external/tmail/tmail/utils.rb +23 -0
  174. data/external/win32-process/README +133 -0
  175. data/external/win32-process/lib/win32/process.rb +561 -0
  176. data/external/windows-pr/README +145 -0
  177. data/external/windows-pr/doc/conversion_guide.txt +25 -0
  178. data/external/windows-pr/lib/windows/clipboard.rb +72 -0
  179. data/external/windows-pr/lib/windows/console.rb +323 -0
  180. data/external/windows-pr/lib/windows/device_io.rb +88 -0
  181. data/external/windows-pr/lib/windows/directory.rb +80 -0
  182. data/external/windows-pr/lib/windows/error.rb +313 -0
  183. data/external/windows-pr/lib/windows/eventlog.rb +120 -0
  184. data/external/windows-pr/lib/windows/file.rb +349 -0
  185. data/external/windows-pr/lib/windows/filesystem.rb +16 -0
  186. data/external/windows-pr/lib/windows/handle.rb +31 -0
  187. data/external/windows-pr/lib/windows/library.rb +76 -0
  188. data/external/windows-pr/lib/windows/limits.rb +13 -0
  189. data/external/windows-pr/lib/windows/memory.rb +117 -0
  190. data/external/windows-pr/lib/windows/msvcrt/buffer.rb +48 -0
  191. data/external/windows-pr/lib/windows/msvcrt/file.rb +18 -0
  192. data/external/windows-pr/lib/windows/msvcrt/string.rb +46 -0
  193. data/external/windows-pr/lib/windows/national.rb +557 -0
  194. data/external/windows-pr/lib/windows/path.rb +296 -0
  195. data/external/windows-pr/lib/windows/pipe.rb +77 -0
  196. data/external/windows-pr/lib/windows/process.rb +171 -0
  197. data/external/windows-pr/lib/windows/registry.rb +238 -0
  198. data/external/windows-pr/lib/windows/security.rb +89 -0
  199. data/external/windows-pr/lib/windows/service.rb +183 -0
  200. data/external/windows-pr/lib/windows/shell.rb +88 -0
  201. data/external/windows-pr/lib/windows/sound.rb +52 -0
  202. data/external/windows-pr/lib/windows/synchronize.rb +161 -0
  203. data/external/windows-pr/lib/windows/system_info.rb +70 -0
  204. data/external/windows-pr/lib/windows/unicode.rb +138 -0
  205. data/external/windows-pr/lib/windows/window.rb +22 -0
  206. data/iowa.gemspec +45 -0
  207. data/microprojects/DiskCache/LICENSE +28 -0
  208. data/microprojects/DiskCache/README +17 -0
  209. data/microprojects/DiskCache/external/package.rb +608 -0
  210. data/microprojects/DiskCache/external/test_support.rb +8 -0
  211. data/microprojects/DiskCache/setup.rb +22 -0
  212. data/microprojects/DiskCache/src/iowa/Association.rb +67 -0
  213. data/microprojects/DiskCache/src/iowa/Constants.rb +159 -0
  214. data/microprojects/DiskCache/src/iowa/DiskStore.rb +377 -0
  215. data/microprojects/DiskCache/src/iowa/Hash.rb +63 -0
  216. data/microprojects/DiskCache/src/iowa/Lockfile.rb +575 -0
  217. data/microprojects/DiskCache/src/iowa/Mutex.rb +142 -0
  218. data/microprojects/DiskCache/src/iowa/caches/DiskCache.rb +605 -0
  219. data/microprojects/DiskCache/src/iowa/caches/LRUCache.rb +287 -0
  220. data/microprojects/DiskCache/test/TC_DiskCache.rb +218 -0
  221. data/microprojects/LRUCache/LICENSE +28 -0
  222. data/microprojects/LRUCache/README +13 -0
  223. data/microprojects/LRUCache/external/package.rb +608 -0
  224. data/microprojects/LRUCache/external/test_support.rb +8 -0
  225. data/microprojects/LRUCache/setup.rb +22 -0
  226. data/microprojects/LRUCache/src/iowa/Association.rb +57 -0
  227. data/microprojects/LRUCache/src/iowa/Constants.rb +159 -0
  228. data/microprojects/LRUCache/src/iowa/Hash.rb +63 -0
  229. data/microprojects/LRUCache/src/iowa/Mutex.rb +129 -0
  230. data/microprojects/LRUCache/src/iowa/caches/LRUCache.rb +287 -0
  231. data/microprojects/LRUCache/test/TC_LRUCache.rb +65 -0
  232. data/microprojects/LinkedList/LICENSE +28 -0
  233. data/microprojects/LinkedList/README +13 -0
  234. data/microprojects/LinkedList/external/package.rb +608 -0
  235. data/microprojects/LinkedList/external/test_support.rb +8 -0
  236. data/microprojects/LinkedList/setup.rb +22 -0
  237. data/microprojects/LinkedList/src/iowa/LinkedList.rb +165 -0
  238. data/microprojects/LinkedList/test/TC_LinkedList.rb +42 -0
  239. data/microprojects/README +8 -0
  240. data/setup.rb +116 -0
  241. data/share/iowa/app_skeleton/Main.html +8 -0
  242. data/share/iowa/app_skeleton/Main.iwa +15 -0
  243. data/share/iowa/app_skeleton/app.cnf +48 -0
  244. data/share/iowa/app_skeleton/app.rb +58 -0
  245. data/share/iowa/app_skeleton/models/model.rb +49 -0
  246. data/src/ihc.rb +223 -0
  247. data/src/iowa.cgi +29 -0
  248. data/src/iowa.rb +637 -0
  249. data/src/iowa/AbstractCache.rb +96 -0
  250. data/src/iowa/AcceptLanguage.rb +76 -0
  251. data/src/iowa/Application.rb +928 -0
  252. data/src/iowa/ApplicationStats.rb +72 -0
  253. data/src/iowa/Association.rb +67 -0
  254. data/src/iowa/BindingsParser.rb +62 -0
  255. data/src/iowa/Breakpoint.rb +273 -0
  256. data/src/iowa/CSS.rb +564 -0
  257. data/src/iowa/Client.rb +192 -0
  258. data/src/iowa/Component.rb +405 -0
  259. data/src/iowa/ComponentProxy.rb +26 -0
  260. data/src/iowa/Config.rb +21 -0
  261. data/src/iowa/Constants.rb +226 -0
  262. data/src/iowa/Context.rb +218 -0
  263. data/src/iowa/ContextLogger.rb +16 -0
  264. data/src/iowa/DbPool.rb +222 -0
  265. data/src/iowa/DetachedComponent.rb +18 -0
  266. data/src/iowa/Dispatcher.rb +27 -0
  267. data/src/iowa/DynamicElements.rb +471 -0
  268. data/src/iowa/Element.rb +100 -0
  269. data/src/iowa/Email.rb +287 -0
  270. data/src/iowa/Extensions/AllExtensions.rb +4 -0
  271. data/src/iowa/Extensions/Class.rb +94 -0
  272. data/src/iowa/Extensions/Date.rb +88 -0
  273. data/src/iowa/Extensions/DateTime.rb +88 -0
  274. data/src/iowa/Extensions/Hash.rb +22 -0
  275. data/src/iowa/Extensions/Kernel.rb +6 -0
  276. data/src/iowa/Extensions/Numeric.rb +47 -0
  277. data/src/iowa/Extensions/Object.rb +11 -0
  278. data/src/iowa/Extensions/String.rb +60 -0
  279. data/src/iowa/Extensions/Time.rb +89 -0
  280. data/src/iowa/Extensions/TimeExtensions.rb +6 -0
  281. data/src/iowa/Form.rb +368 -0
  282. data/src/iowa/Hash.rb +85 -0
  283. data/src/iowa/ISAAC.rb +175 -0
  284. data/src/iowa/ImageSize.rb +279 -0
  285. data/src/iowa/IowaComponentMixins.rb +7 -0
  286. data/src/iowa/JSON-lexer.rb +296 -0
  287. data/src/iowa/JSON-objects.rb +201 -0
  288. data/src/iowa/KeyValueCoding.rb +91 -0
  289. data/src/iowa/LinkedList.rb +175 -0
  290. data/src/iowa/Loader.rb +22 -0
  291. data/src/iowa/Lockfile.rb +575 -0
  292. data/src/iowa/Logger.rb +74 -0
  293. data/src/iowa/Monkey.rb +20 -0
  294. data/src/iowa/Mutex.rb +142 -0
  295. data/src/iowa/Policy.rb +70 -0
  296. data/src/iowa/Pool.rb +243 -0
  297. data/src/iowa/PrettyException.rb +1091 -0
  298. data/src/iowa/Request.rb +244 -0
  299. data/src/iowa/Response.rb +133 -0
  300. data/src/iowa/Session.rb +354 -0
  301. data/src/iowa/SessionStats.rb +78 -0
  302. data/src/iowa/String.rb +65 -0
  303. data/src/iowa/Tag.rb +101 -0
  304. data/src/iowa/TemplateParser.rb +236 -0
  305. data/src/iowa/Util.rb +314 -0
  306. data/src/iowa/Webcache.rb +122 -0
  307. data/src/iowa/caches/BiLevelCache.rb +65 -0
  308. data/src/iowa/caches/ClassLimitedCache.rb +67 -0
  309. data/src/iowa/caches/DiskCache.rb +609 -0
  310. data/src/iowa/caches/DiskStore.rb +380 -0
  311. data/src/iowa/caches/LRUCache-alternative.rb +155 -0
  312. data/src/iowa/caches/LRUCache.rb +290 -0
  313. data/src/iowa/caches/SimpleLRUCache.rb +112 -0
  314. data/src/iowa/dispatchers/StandardDispatcher.rb +396 -0
  315. data/src/iowa/dispatchers/StandardDispatcherWithClassifier.rb +93 -0
  316. data/src/iowa/js/iowa_jsonrpc.js +381 -0
  317. data/src/iowa/js/jsonrpc.js +187 -0
  318. data/src/iowa/js/jsonrpc_async.js +261 -0
  319. data/src/iowa/loaders/DiskLoader.rb +50 -0
  320. data/src/iowa/loggers/Analogger.rb +54 -0
  321. data/src/iowa/loggers/AsyncLogger.rb +54 -0
  322. data/src/iowa/loggers/BitBucket.rb +38 -0
  323. data/src/iowa/loggers/Log4R.rb +13 -0
  324. data/src/iowa/loggers/Log4rLogger.rb +48 -0
  325. data/src/iowa/loggers/Logger.rb +29 -0
  326. data/src/iowa/loggers/RubyLogger.rb +9 -0
  327. data/src/iowa/pools/DBConnectionPool.rb +53 -0
  328. data/src/iowa/request/Apache.rb +90 -0
  329. data/src/iowa/request/EMHybrid.rb +59 -0
  330. data/src/iowa/request/ENV.rb +80 -0
  331. data/src/iowa/request/FCGI.rb +68 -0
  332. data/src/iowa/request/HTTPMachine.rb +75 -0
  333. data/src/iowa/request/Mongrel.rb +68 -0
  334. data/src/iowa/request/WEBrick.rb +48 -0
  335. data/src/iowa/version.rb +3 -0
  336. data/src/iowa/webrick/HTTPServer.rb +43 -0
  337. data/src/iowa/webrick/WEBrickServlet.rb +28 -0
  338. data/src/iowa_fcgi_handler.rb +101 -0
  339. data/src/iowa_httpmachine.rb +141 -0
  340. data/src/iowa_hybrid.rb +193 -0
  341. data/src/iowa_hybrid_cluster.rb +231 -0
  342. data/src/iowa_mongrel.rb +136 -0
  343. data/src/iowa_webrick.rb +194 -0
  344. data/src/iowa_webrick_legacy.rb +104 -0
  345. data/src/mod_iowa.rb +104 -0
  346. data/tcss.rb +61 -0
  347. data/test/README.windows +12 -0
  348. data/test/TC_AcceptLanguage.rb +61 -0
  349. data/test/TC_AppConfig.rb +43 -0
  350. data/test/TC_AppConfig/cgi/iowa.cgi +7 -0
  351. data/test/TC_AppConfig/doc/index.html +1 -0
  352. data/test/TC_AppConfig/iowa/Main.html +4 -0
  353. data/test/TC_AppConfig/iowa/Main.iwa +17 -0
  354. data/test/TC_AppConfig/iowa/README +1 -0
  355. data/test/TC_AppConfig/iowa/app.cnf +19 -0
  356. data/test/TC_AppConfig/iowa/app.rb +8 -0
  357. data/test/TC_AppConfig/webrick.rb +38 -0
  358. data/test/TC_Association.rb +29 -0
  359. data/test/TC_BiLevelCache.rb +71 -0
  360. data/test/TC_CGI_Adaptor.rb +55 -0
  361. data/test/TC_CGI_Adaptor/cgi/iowa.cgi +7 -0
  362. data/test/TC_CGI_Adaptor/doc/index.html +1 -0
  363. data/test/TC_CGI_Adaptor/iowa/Main.html +8 -0
  364. data/test/TC_CGI_Adaptor/iowa/Main.iwa +14 -0
  365. data/test/TC_CGI_Adaptor/iowa/README +1 -0
  366. data/test/TC_CGI_Adaptor/iowa/app.cnf +8 -0
  367. data/test/TC_CGI_Adaptor/iowa/app.rb +8 -0
  368. data/test/TC_CGI_Adaptor/webrick.rb +38 -0
  369. data/test/TC_CSS.rb +660 -0
  370. data/test/TC_ClassLimitedCache.rb +89 -0
  371. data/test/TC_Classifier.rb +80 -0
  372. data/test/TC_DbPool.rb +127 -0
  373. data/test/TC_DiskCache.rb +218 -0
  374. data/test/TC_Hybrid.rb +58 -0
  375. data/test/TC_Hybrid/doc/thing.txt +1 -0
  376. data/test/TC_Hybrid/iowa/Main.html +3 -0
  377. data/test/TC_Hybrid/iowa/Main.iwa +7 -0
  378. data/test/TC_Hybrid/iowa/NewPage.html +1 -0
  379. data/test/TC_Hybrid/iowa/NewPage.iwa +5 -0
  380. data/test/TC_Hybrid/iowa/app.cnf +10 -0
  381. data/test/TC_Hybrid/iowa/app.rb +5 -0
  382. data/test/TC_IOWAFunctions/doc/Ajax1.html +1 -0
  383. data/test/TC_IOWAFunctions/doc/Ajax1.iwa +1 -0
  384. data/test/TC_IOWAFunctions/doc/index.html +1 -0
  385. data/test/TC_IOWAFunctions/doc/js/dojo.js +9686 -0
  386. data/test/TC_IOWAFunctions/iowa/Ajax1.html +40 -0
  387. data/test/TC_IOWAFunctions/iowa/Ajax1.iwa +23 -0
  388. data/test/TC_IOWAFunctions/iowa/AjaxWidget.iwa +19 -0
  389. data/test/TC_IOWAFunctions/iowa/AjaxWidget.view +22 -0
  390. data/test/TC_IOWAFunctions/iowa/DanielTest.html +9 -0
  391. data/test/TC_IOWAFunctions/iowa/DanielTest.iwa +10 -0
  392. data/test/TC_IOWAFunctions/iowa/IntervalWidget.html +1 -0
  393. data/test/TC_IOWAFunctions/iowa/IntervalWidget.iwa +14 -0
  394. data/test/TC_IOWAFunctions/iowa/Main.html +1 -0
  395. data/test/TC_IOWAFunctions/iowa/NestedRepeat1.html +12 -0
  396. data/test/TC_IOWAFunctions/iowa/NestedRepeat1.iwa +24 -0
  397. data/test/TC_IOWAFunctions/iowa/RPCResponse.iwa +7 -0
  398. data/test/TC_IOWAFunctions/iowa/RPCResponse.view +1 -0
  399. data/test/TC_IOWAFunctions/iowa/Repeat1.iwa +31 -0
  400. data/test/TC_IOWAFunctions/iowa/Repeat1.view +9 -0
  401. data/test/TC_IOWAFunctions/iowa/Repeat2.iwa +32 -0
  402. data/test/TC_IOWAFunctions/iowa/Repeat2.view +11 -0
  403. data/test/TC_IOWAFunctions/iowa/Repeat3.iwa +44 -0
  404. data/test/TC_IOWAFunctions/iowa/Repeat3.view +18 -0
  405. data/test/TC_IOWAFunctions/iowa/TesCon.html +1 -0
  406. data/test/TC_IOWAFunctions/iowa/TesCon.iwa +5 -0
  407. data/test/TC_IOWAFunctions/iowa/app.cnf +19 -0
  408. data/test/TC_IOWAFunctions/iowa/app.rb +9 -0
  409. data/test/TC_IOWAFunctions/iowa/mapfile.cnf +8 -0
  410. data/test/TC_ISAAC.rb +52 -0
  411. data/test/TC_ImageSize.rb +84 -0
  412. data/test/TC_ImageSize/img.bmp +0 -0
  413. data/test/TC_ImageSize/img.gif +0 -0
  414. data/test/TC_ImageSize/img.jpg +0 -0
  415. data/test/TC_ImageSize/img.pcx +0 -0
  416. data/test/TC_ImageSize/img.pgm +7144 -0
  417. data/test/TC_ImageSize/img.png +0 -0
  418. data/test/TC_ImageSize/img.ppm +0 -0
  419. data/test/TC_ImageSize/img.psd +0 -0
  420. data/test/TC_ImageSize/img.tiff +0 -0
  421. data/test/TC_ImageSize/img.xbm +22 -0
  422. data/test/TC_KeyValueCoding.rb +35 -0
  423. data/test/TC_LRUCache.rb +296 -0
  424. data/test/TC_LinkedList.rb +46 -0
  425. data/test/TC_Lockfile.rb +106 -0
  426. data/test/TC_Minimal.rb +45 -0
  427. data/test/TC_Minimal/app.cnf +8 -0
  428. data/test/TC_Minimal/cgi-bin/iowa.cgi +11 -0
  429. data/test/TC_Minimal/doc/index.html +1 -0
  430. data/test/TC_Minimal/iowa/Main.html +1 -0
  431. data/test/TC_Minimal/iowa/README +1 -0
  432. data/test/TC_Minimal/iowa/app.rb +3 -0
  433. data/test/TC_Minimal/webrick.rb +38 -0
  434. data/test/TC_Mongrel.rb +58 -0
  435. data/test/TC_Mongrel/doc/thing.txt +1 -0
  436. data/test/TC_Mongrel/iowa/Main.html +3 -0
  437. data/test/TC_Mongrel/iowa/Main.iwa +7 -0
  438. data/test/TC_Mongrel/iowa/NewPage.html +1 -0
  439. data/test/TC_Mongrel/iowa/NewPage.iwa +5 -0
  440. data/test/TC_Mongrel/iowa/app.cnf +10 -0
  441. data/test/TC_Mongrel/iowa/app.rb +5 -0
  442. data/test/TC_NoSubclass.rb +56 -0
  443. data/test/TC_NoSubclass/cgi/iowa.cgi +7 -0
  444. data/test/TC_NoSubclass/doc/index.html +1 -0
  445. data/test/TC_NoSubclass/iowa/Main.html +8 -0
  446. data/test/TC_NoSubclass/iowa/Main.iwa +14 -0
  447. data/test/TC_NoSubclass/iowa/README +1 -0
  448. data/test/TC_NoSubclass/iowa/app.cnf +8 -0
  449. data/test/TC_NoSubclass/iowa/app.rb +5 -0
  450. data/test/TC_NoSubclass/webrick.rb +38 -0
  451. data/test/TC_Pool.rb +139 -0
  452. data/test/TC_RenderedCache/doc/thing.txt +1 -0
  453. data/test/TC_RenderedCache/iowa/BigPage.html +1 -0
  454. data/test/TC_RenderedCache/iowa/BigPage.iwa +12 -0
  455. data/test/TC_RenderedCache/iowa/Main.html +3 -0
  456. data/test/TC_RenderedCache/iowa/Main.iwa +7 -0
  457. data/test/TC_RenderedCache/iowa/NewPage.html +1 -0
  458. data/test/TC_RenderedCache/iowa/NewPage.iwa +11 -0
  459. data/test/TC_RenderedCache/iowa/app.cnf +13 -0
  460. data/test/TC_RenderedCache/iowa/app.rb +5 -0
  461. data/test/TC_RenderedCache/iowa/mapfile.map +4 -0
  462. data/test/TC_ResourceURL.rb +73 -0
  463. data/test/TC_ResourceURL/iowa/Main.html +2 -0
  464. data/test/TC_ResourceURL/iowa/Main.iwa +10 -0
  465. data/test/TC_ResourceURL/iowa/app.cnf +10 -0
  466. data/test/TC_ResourceURL/iowa/app.rb +5 -0
  467. data/test/TC_SimpleDetached.rb +41 -0
  468. data/test/TC_StandardDispatcher.rb +362 -0
  469. data/test/TC_StandardDispatcherWithClassifier.rb +358 -0
  470. data/test/TC_String.rb +24 -0
  471. data/test/TC_Tag.rb +41 -0
  472. data/test/TC_Webrick.rb +56 -0
  473. data/test/TC_Webrick/doc/thing.txt +1 -0
  474. data/test/TC_Webrick/iowa/Main.html +3 -0
  475. data/test/TC_Webrick/iowa/Main.iwa +7 -0
  476. data/test/TC_Webrick/iowa/NewPage.html +1 -0
  477. data/test/TC_Webrick/iowa/NewPage.iwa +5 -0
  478. data/test/TC_Webrick/iowa/app.cnf +10 -0
  479. data/test/TC_Webrick/iowa/app.rb +5 -0
  480. data/test/tc_template.rb +15 -0
  481. data/test/tests.conf +19 -0
  482. data/utils/CVS/Entries +3 -0
  483. data/utils/CVS/Repository +1 -0
  484. data/utils/CVS/Root +1 -0
  485. data/utils/QuickCert-1.0.2.tar.gz +0 -0
  486. data/utils/QuickCert-1.0.2/InstalledFiles +7 -0
  487. data/utils/QuickCert-1.0.2/MANIFEST +10 -0
  488. data/utils/QuickCert-1.0.2/Makefile +15 -0
  489. data/utils/QuickCert-1.0.2/README +56 -0
  490. data/utils/QuickCert-1.0.2/bin/QuickCert +355 -0
  491. data/utils/QuickCert-1.0.2/config.save +12 -0
  492. data/utils/QuickCert-1.0.2/data/examples/ruby/QuickCert/README +60 -0
  493. data/utils/QuickCert-1.0.2/data/examples/ruby/QuickCert/drbssl_c.rb +26 -0
  494. data/utils/QuickCert-1.0.2/data/examples/ruby/QuickCert/drbssl_s.rb +35 -0
  495. data/utils/QuickCert-1.0.2/data/examples/ruby/QuickCert/qc_config +21 -0
  496. data/utils/QuickCert-1.0.2/lib/QuickCert/defaults.rb +28 -0
  497. data/utils/QuickCert-1.0.2/setup.rb +1312 -0
  498. data/utils/iowa_apps +422 -0
  499. data/utils/smtp_sink.rb +9 -0
  500. data/utils/startup_template.cnf +27 -0
  501. data/utils/startup_template.rb +73 -0
  502. metadata +551 -0
@@ -0,0 +1 @@
1
+ This is a static thing.
@@ -0,0 +1 @@
1
+ @content
@@ -0,0 +1,12 @@
1
+ class BigPage < Iowa::Component
2
+
3
+ def content
4
+ r = ''
5
+ 32768.times { r << Integer(rand() * 26 + 65).chr }
6
+ r
7
+ end
8
+
9
+ def fingerprint
10
+ :bigpage
11
+ end
12
+ end
@@ -0,0 +1,3 @@
1
+ Hybrid Test
2
+ <a oid="dlink">dynamic link</a>
3
+ <a href="/thing.txt">static link</a>
@@ -0,0 +1,7 @@
1
+ class Main < Iowa::Component
2
+
3
+ def dlink
4
+ yield pageNamed(:NewPage)
5
+ end
6
+
7
+ end
@@ -0,0 +1 @@
1
+ The time is now: @now
@@ -0,0 +1,11 @@
1
+ class NewPage < Iowa::Component
2
+ CSTRFTIME = "%Y%m%d%H%M".freeze unless const_defined?(:CSTRFTIME)
3
+
4
+ def fingerprint
5
+ Time.now.strftime(CSTRFTIME)
6
+ end
7
+
8
+ def now
9
+ Time.now.asctime
10
+ end
11
+ end
@@ -0,0 +1,13 @@
1
+ socket:
2
+ hostname: 127.0.0.1
3
+ port: 47990
4
+ logging:
5
+ basedir: ../log
6
+ minlevel: 0
7
+ maxsize: 10000000
8
+ maxage: 86400
9
+ application:
10
+ daemonize: true
11
+ docroot_caching: false
12
+ dispatcher:
13
+ class: StandardDispatcher
@@ -0,0 +1,5 @@
1
+ #!/usr/local/ruby184/bin/ruby
2
+
3
+ require 'iowa'
4
+
5
+ Iowa.run
@@ -0,0 +1,4 @@
1
+ :rewrites:
2
+ :map:
3
+ /time.html: NewPage
4
+ /index.html: Main
@@ -0,0 +1,73 @@
1
+ require 'test/unit'
2
+ require 'external/test_support'
3
+ IWATestSupport.set_src_dir
4
+ require 'rbconfig'
5
+ require 'net/http'
6
+
7
+ class TC_ResourceURL < Test::Unit::TestCase
8
+
9
+ @@testdir = IWATestSupport.test_dir(__FILE__)
10
+ def setup
11
+ Dir.chdir(@@testdir)
12
+ IWATestSupport.announce(:resourceurls,"Iowa Resource URLs")
13
+ @runmode = IWATestSupport.fastest_runmode
14
+
15
+ ruby = File.join(::Config::CONFIG['bindir'],::Config::CONFIG['ruby_install_name'])
16
+ ruby << ::Config::CONFIG['EXEEXT']
17
+
18
+ assert_nothing_raised("setup failed") do
19
+ @iowa_pid = IWATestSupport::create_process(:dir => 'TC_ResourceURL/iowa',
20
+ :cmd => ["#{ruby} -I../../../src app.rb -r #{@runmode}"])
21
+ sleep 1
22
+ end
23
+ end
24
+
25
+ def teardown
26
+ Process.kill "SIGKILL",@iowa_pid
27
+ Process.wait @iowa_pid
28
+ sleep 1
29
+ end
30
+
31
+ def get_url(hostname,port,url)
32
+ Net::HTTP.start(hostname,port) {|http| http.get(url)}
33
+ end
34
+
35
+ def test_res1
36
+ assert_nothing_raised("Error trying to send request to iowa app.") do
37
+ response = get_url('127.0.0.1','47990','/')
38
+ r = response.body
39
+ r =~ /^Resource1: (.*)/
40
+ response = get_url('127.0.0.1','47990',$1)
41
+ assert_equal('abc123',response.body,"Static resources seem to be failing.")
42
+ require 'benchmark'
43
+ puts "\nStatic resources under #{@runmode} runmode; 2000 requests"
44
+ Benchmark.bm do |bm|
45
+ bm.report('static') do
46
+ 2000.times do
47
+ response = get_url('127.0.0.1','47990',$1)
48
+ end
49
+ end
50
+ end
51
+ end
52
+ puts "\n"
53
+
54
+ assert_nothing_raised("Error trying to send request to iowa app.") do
55
+ response = get_url('127.0.0.1','47990','/')
56
+ r = response.body
57
+ r =~ /^Resource2: (.*)/
58
+ response = get_url('127.0.0.1','47990',$1)
59
+ assert_equal('def456',response.body,"Dynamic resources seem to be failing.")
60
+ require 'benchmark'
61
+ puts "\nDynamic resources under #{@runmode}; 2000 requests"
62
+ Benchmark.bm do |bm|
63
+ bm.report('dynamic') do
64
+ 2000.times do
65
+ response = get_url('127.0.0.1','47990',$1)
66
+ end
67
+ end
68
+ end
69
+ end
70
+ puts "\n"
71
+ end
72
+
73
+ end
@@ -0,0 +1,2 @@
1
+ Resource1: @res1
2
+ Resource2: @res2
@@ -0,0 +1,10 @@
1
+ class Main < Iowa::Component
2
+ def res1
3
+ session.resource_url('abc123','text/plain')
4
+ end
5
+
6
+ def res2
7
+ session.resource_url('def','456') {|a,b| Iowa::Resource.new("#{a}#{b}",'text/plain')}
8
+ end
9
+
10
+ end
@@ -0,0 +1,10 @@
1
+ socket:
2
+ hostname: 127.0.0.1
3
+ port: 47990
4
+ logging:
5
+ basedir: ../log
6
+ minlevel: 0
7
+ maxsize: 10000000
8
+ maxage: 86400
9
+ application:
10
+ daemonize: false
@@ -0,0 +1,5 @@
1
+ #!/usr/local/ruby184/bin/ruby
2
+
3
+ require 'iowa'
4
+
5
+ Iowa.run
@@ -0,0 +1,41 @@
1
+ require 'test/unit'
2
+ require 'external/test_support'
3
+ IWATestSupport.set_src_dir
4
+ require 'iowa'
5
+
6
+ class MyApp < Iowa::Application; end
7
+ class MyComp < Iowa::DetachedComponent
8
+ def awake
9
+ self.class.template = "This is a test. The time now is: @the_time."
10
+ end
11
+
12
+ def the_time
13
+ Time.now.asctime
14
+ end
15
+ end
16
+
17
+ class TC_SimpleDetached < Test::Unit::TestCase
18
+ # init instance vars
19
+
20
+ @@testdir = IWATestSupport.test_dir(__FILE__)
21
+ def setup
22
+ Dir.chdir(@@testdir)
23
+ IWATestSupport.announce(:simple_detached,"Simple Detached Component")
24
+ assert_nothing_raised("setup failed") do
25
+ ARGV.push(nil)
26
+ @context = Iowa::Context.new
27
+ end
28
+ end
29
+
30
+ def test_simple_detached
31
+ assert_nothing_raised("Failure while testing simple detached component.") do
32
+ component = MyComp.new('mycomp',[],[],nil)
33
+ response = component.handleResponse(@context,true)
34
+ puts response.inspect
35
+ assert(response.body =~ /^This is a test. The time now is: /,"The response from the detached component was not what was expected.")
36
+ end
37
+ end
38
+
39
+ end
40
+
41
+
@@ -0,0 +1,362 @@
1
+ require 'test/unit'
2
+ require 'external/test_support'
3
+ IWATestSupport.set_src_dir
4
+ require 'iowa/dispatchers/StandardDispatcher'
5
+ require 'benchmark'
6
+
7
+ class ExternalRoutines
8
+ def self.downcase(r)
9
+ r.uri.downcase!
10
+ end
11
+ end
12
+
13
+ class FauxPolicy
14
+ def self.getIDs(_)
15
+ [nil,nil]
16
+ end
17
+ end
18
+
19
+ module Iowa
20
+ def self.app
21
+ Struct.new(:policy).new(FauxPolicy)
22
+ end
23
+ end
24
+
25
+ class TC_StandardDispatcher < Test::Unit::TestCase
26
+
27
+ @@testdir = IWATestSupport.test_dir(__FILE__)
28
+ class Request
29
+ attr_accessor :uri, :hostname, :params, :request_method
30
+ def initialize(uri = nil, hostname = nil, params = nil, request_method = 'GET')
31
+ @uri = uri
32
+ @hostname = hostname
33
+ @params = params
34
+ @request_method = request_method
35
+ end
36
+ end
37
+
38
+ def transforming(uri)
39
+ print "\nTransforming #{uri} -> "
40
+ end
41
+
42
+ def processing(req)
43
+ puts "\nProcessing request #{req.inspect} -> "
44
+ end
45
+
46
+ def setup
47
+ Dir.chdir(@@testdir)
48
+ IWATestSupport.announce(:standard_dispatcher,"Iowa::Dispatchers::StandardDisparcher")
49
+ end
50
+
51
+ def test_a_empty_struct
52
+ rule_struct = []
53
+ assert_nothing_raised("Failure parsing an empty ruleset") do
54
+ rs = Iowa::Dispatchers::StandardDispatcher::RuleSet.new(rule_struct)
55
+ end
56
+ end
57
+
58
+ def test_b_hash_struct1
59
+ rule_struct = {:match => /view/, :sub => 'show'}
60
+ rq = Request.new('/view/3')
61
+ assert_nothing_raised("Failure while parsing ruleset.") do
62
+ rs = Iowa::Dispatchers::StandardDispatcher::RuleSet.new(rule_struct)
63
+ transforming rq.uri
64
+ rs.process(rq)
65
+ puts rq.uri
66
+ assert_equal('/show/3',rq.uri,"The processed request did not return the expected result.")
67
+ end
68
+ end
69
+
70
+ def test_c_hash_struct2
71
+ rule_struct = {:match => 'view', :sub => 'show'}
72
+ rq = Request.new('/view/3')
73
+ assert_nothing_raised("Failure while parsing ruleset.") do
74
+ rs = Iowa::Dispatchers::StandardDispatcher::RuleSet.new(rule_struct)
75
+ transforming rq.uri
76
+ rs.process(rq)
77
+ puts rq.uri
78
+ assert_equal('/show/3',rq.uri,"The processed request did not return the expected result.")
79
+ end
80
+ end
81
+
82
+ def test_d_simple_struct
83
+ rule_struct = [
84
+ {:match => '[A-Z]', :gsub => '{|r,c| c.downcase}'},
85
+ {:match => '\.htm$', :sub => '.html'},
86
+ {:match => '^.*\.php\d*', :sub => '/php_unsupported.html'},
87
+ ]
88
+ rqs = [
89
+ Request.new('/foo/bar.htm'),
90
+ Request.new('/app.php'),
91
+ Request.new('/foo/BAR.HTM')
92
+ ]
93
+ rqso = rqs.dup
94
+
95
+ assert_nothing_raised("Failure while parsing ruleset.") do
96
+ rs = Iowa::Dispatchers::StandardDispatcher::RuleSet.new(rule_struct)
97
+ transforming rqso[0].uri
98
+ rs.process(rqs[0])
99
+ puts rqs[0].uri
100
+ assert_equal('/foo/bar.html',rqs[0].uri,"Transformation incorrect.")
101
+
102
+ transforming rqso[1].uri
103
+ rs.process(rqs[1])
104
+ puts rqs[1].uri
105
+ assert_equal('/php_unsupported.html',rqs[1].uri,"Transformation incorrect.")
106
+
107
+ transforming rqso[2].uri
108
+ rs.process(rqs[2])
109
+ puts rqs[2].uri
110
+ assert_equal('/foo/bar.html',rqs[2].uri,"Transformation incorrect.")
111
+ end
112
+ end
113
+
114
+ def test_e_simple_struct_call_external1
115
+ rule_struct = [
116
+ {:match => '[A-Z]', :call => '::ExternalRoutines.downcase'},
117
+ {:match => '\.htm$', :sub => '.html'}
118
+ ]
119
+ rqs = [
120
+ Request.new('/foo2/bar.htm'),
121
+ Request.new('/foo2/BAR.HTM')
122
+ ]
123
+ rqso = rqs.dup
124
+
125
+ assert_nothing_raised("Failure while parsing ruleset.") do
126
+ rs = Iowa::Dispatchers::StandardDispatcher::RuleSet.new(rule_struct)
127
+ transforming rqso[0].uri
128
+ rs.process(rqs[0])
129
+ puts rqs[0].uri
130
+ assert_equal('/foo2/bar.html',rqs[0].uri,"Transformation incorrect.")
131
+
132
+ transforming rqso[1].uri
133
+ rs.process(rqs[1])
134
+ puts rqs[1].uri
135
+ assert_equal('/foo2/bar.html',rqs[1].uri,"Transformation incorrect.")
136
+ end
137
+ end
138
+
139
+ def test_f_simple_struct_call_external2
140
+ rule_struct = [
141
+ {:match => '[A-Z]', :call => 'external_downcase'},
142
+ {:match => '\.htm$', :sub => '.html'}
143
+ ]
144
+ rqs = [
145
+ Request.new('/foo3/bar.htm'),
146
+ Request.new('/foo3/BAR.HTM')
147
+ ]
148
+ rqso = rqs.dup
149
+
150
+ assert_nothing_raised("Failure while parsing ruleset.") do
151
+ rs = Iowa::Dispatchers::StandardDispatcher::RuleSet.new(rule_struct)
152
+ transforming rqso[0].uri
153
+ rs.process(rqs[0])
154
+ puts rqs[0].uri
155
+ assert_equal('/foo3/bar.html',rqs[0].uri,"Transformation incorrect.")
156
+
157
+ transforming rqso[1].uri
158
+ rs.process(rqs[1])
159
+ puts rqs[1].uri
160
+ assert_equal('/foo3/bar.html',rqs[1].uri,"Transformation incorrect.")
161
+ end
162
+ end
163
+
164
+ def test_g_simple_struct_call_external3
165
+ rule_struct = [
166
+ {:match => '[A-Z]', :eval => 'request.uri.downcase!'},
167
+ {:match => '\.htm$', :sub => '.html'}
168
+ ]
169
+ rqs = [
170
+ Request.new('/foo4/bar.htm'),
171
+ Request.new('/foo4/BAR.HTM')
172
+ ]
173
+ rqso = rqs.dup
174
+
175
+ assert_nothing_raised("Failure while parsing ruleset.") do
176
+ rs = Iowa::Dispatchers::StandardDispatcher::RuleSet.new(rule_struct)
177
+ transforming rqso[0].uri
178
+ rs.process(rqs[0])
179
+ puts rqs[0].uri
180
+ assert_equal('/foo4/bar.html',rqs[0].uri,"Transformation incorrect.")
181
+
182
+ transforming rqso[1].uri
183
+ rs.process(rqs[1])
184
+ puts rqs[1].uri
185
+ assert_equal('/foo4/bar.html',rqs[1].uri,"Transformation incorrect.")
186
+ end
187
+ end
188
+
189
+ def test_h_branching
190
+ rule_struct = [
191
+ {:match => '{|request| request.hostname =~ /\.?foo\.com/}',
192
+ :branch => [{:match => '(?i-mx:\.htm)$', :sub => '.html'}]},
193
+ {:match => '{|request| request.hostname =~ /\.?bar\.com/}',
194
+ :branch => [{:match => '[A-Z]', :eval => 'request.uri.downcase!'}]}
195
+ ]
196
+ rqs = [
197
+ Request.new('/INDEX.HTM','foo.com'),
198
+ Request.new('/INDEX.HTM','www.foo.com'),
199
+ Request.new('/INDEX.HTM','www.bar.com'),
200
+ Request.new('/INDEX.HTM','fluffy.poodlelovers.com')
201
+ ]
202
+ rqso = rqs.dup
203
+
204
+ assert_nothing_raised("Failure while parsing ruleset.") do
205
+ rs = Iowa::Dispatchers::StandardDispatcher::RuleSet.new(rule_struct)
206
+ transforming "#{rqso[0].uri} @ #{rqso[0].hostname}"
207
+ rs.process(rqs[0])
208
+ puts rqs[0].uri
209
+ assert_equal('/INDEX.html',rqs[0].uri,"Transformation incorrect.")
210
+
211
+ transforming "#{rqso[1].uri} @ #{rqso[1].hostname}"
212
+ rs.process(rqs[1])
213
+ puts rqs[1].uri
214
+ assert_equal('/INDEX.html',rqs[1].uri,"Transformation incorrect.")
215
+
216
+ transforming "#{rqso[2].uri} @ #{rqso[2].hostname}"
217
+ rs.process(rqs[2])
218
+ puts rqs[2].uri
219
+ assert_equal('/index.htm',rqs[2].uri,"Transformation incorrect.")
220
+
221
+ transforming "#{rqso[3].uri} @ #{rqso[3].hostname}"
222
+ rs.process(rqs[3])
223
+ puts rqs[3].uri
224
+ assert_equal('/INDEX.HTM',rqs[3].uri,"Transformation incorrect.")
225
+ end
226
+ end
227
+
228
+ def test_i_processing
229
+ mapfile = <<EMAPFILE
230
+ :rewrites:
231
+ - :match: "{|request| request.hostname =~ /\.?foo\.com/}"
232
+ :branch:
233
+ - :match: "(?i-mx:\.htm)$"
234
+ :sub: ".html"
235
+ - :match: "{|request| request.hostname =~ /\.?bar\.com/}"
236
+ :branch:
237
+ - :match: "[A-Z]"
238
+ :eval: "request.uri.downcase!"
239
+ :map:
240
+ /INDEX.html: CapIndex
241
+ /index.htm: Index
242
+ /INDEX.HTM: IndexHTM
243
+ /randompix.png: RandomPix
244
+ EMAPFILE
245
+ rqs = [
246
+ Request.new('/INDEX.HTM','foo.com',{}),
247
+ Request.new('/INDEX.HTM','www.foo.com',{}),
248
+ Request.new('/INDEX.HTM','www.bar.com',{}),
249
+ Request.new('/INDEX.HTM','fluffy.poodlelovers.com',{}),
250
+ Request.new('/randompix.png','',{}),
251
+ Request.new('/books',nil,{}),
252
+ Request.new('/books/1',nil,{}),
253
+ Request.new('/books/1',nil,{},'DELETE'),
254
+ Request.new('/books/1',nil,{},'PUT'),
255
+ Request.new('/books/new',nil,{}),
256
+ Request.new('/books',nil,{},'POST'),
257
+ Request.new('/books/1',nil,{'_method' => 'DELETE'},'POST'),
258
+ Request.new('/books/1',nil,{'_method' => 'PUT'},'POST'),
259
+ Request.new('/books/1;complete',nil,{},'POST'),
260
+ Request.new('/books/show/ab4814f904/5/new',nil,{}),
261
+ Request.new('/books/ab4814f904/5/new;show',nil,{})
262
+ ]
263
+ rqso = rqs.dup
264
+
265
+ require 'stringio'
266
+ require 'yaml'
267
+ mf = YAML.load(StringIO.new(mapfile))
268
+ puts mf.inspect
269
+ #assert_nothing_raised("Failure while parsing ruleset.") do
270
+ disp = Iowa::Dispatchers::StandardDispatcher.new(mf)
271
+ dd = disp.process(rqs[0])
272
+ processing rqso[0]
273
+ puts "** #{dd.inspect}"
274
+ assert(dd.component == 'CapIndex',"CapIndex1: Processing with result from map failed.")
275
+
276
+ dd = disp.process(rqs[1])
277
+ processing rqso[1]
278
+ puts " #{dd.inspect}"
279
+ assert(dd.component == 'CapIndex',"CapIndex2: Processing with result from map failed.")
280
+
281
+ dd = disp.process(rqs[2])
282
+ processing rqso[2]
283
+ puts " #{dd.inspect}"
284
+ assert(dd.component == 'Index',"Index: Processing with result from map failed.")
285
+
286
+ dd = disp.process(rqs[3])
287
+ processing rqso[3]
288
+ puts " #{dd.inspect}"
289
+ assert(dd.component == 'IndexHTM',"IndexHTM: Processing with result from map failed.")
290
+
291
+ dd = disp.process(rqs[4])
292
+ processing rqso[4]
293
+ puts " #{dd.inspect}"
294
+ assert(dd.component == 'RandomPix',"RandomPix: Processing with result from map failed.")
295
+
296
+ dd = disp.process(rqs[5])
297
+ processing rqso[5]
298
+ puts " #{dd.inspect}"
299
+ assert(dd.component == 'books',"Processing RESTful request failed.")
300
+
301
+ dd = disp.process(rqs[6])
302
+ processing rqso[6]
303
+ puts " #{dd.inspect}"
304
+ assert(((dd.component == 'books') and (dd.method == 'show') and (dd.args == ["1"])),"Processing RESTful request failed.")
305
+
306
+ dd = disp.process(rqs[7])
307
+ processing rqso[7]
308
+ puts " #{dd.inspect}"
309
+ assert(((dd.component == 'books') and (dd.method == 'destroy') and (dd.args == ["1"])),"Processing RESTful DELETE request failed.")
310
+
311
+ dd = disp.process(rqs[8])
312
+ processing rqso[8]
313
+ puts " #{dd.inspect}"
314
+ assert(((dd.component == 'books') and (dd.method == 'update') and (dd.args == ["1"])),"Processing RESTful PUT request failed.")
315
+
316
+ dd = disp.process(rqs[9])
317
+ processing rqso[9]
318
+ puts " #{dd.inspect}"
319
+ assert(((dd.component == 'books') and (dd.method == 'new')),"Processing RESTful GET to invoke 'new' request failed.")
320
+
321
+ dd = disp.process(rqs[10])
322
+ processing rqso[10]
323
+ puts " #{dd.inspect}"
324
+ assert(((dd.component == 'books') and (dd.method == 'create')),"Processing RESTful POST to invoke 'create' request failed.")
325
+
326
+ dd = disp.process(rqs[11])
327
+ processing rqso[11]
328
+ puts " #{dd.inspect}"
329
+ assert(((dd.component == 'books') and (dd.method == 'destroy') and (dd.args == ["1"])),"Processing RESTful POST to invoke DELETE request failed.")
330
+
331
+ dd = disp.process(rqs[12])
332
+ processing rqso[12]
333
+ puts " #{dd.inspect}"
334
+ assert(((dd.component == 'books') and (dd.method == 'update') and (dd.args == ["1"])),"Processing RESTful POST to invoke PUT request failed.")
335
+
336
+ dd = disp.process(rqs[13])
337
+ processing rqso[13]
338
+ puts " #{dd.inspect}"
339
+ assert(((dd.component == 'books') and (dd.method == 'complete') and (dd.args == ["1"])),"Processing RESTful POST to invoke 'complete' request failed.")
340
+
341
+ dd = disp.process(rqs[14])
342
+ processing rqso[14]
343
+ puts " #{dd.inspect}"
344
+ assert(((dd.component == 'books') and (dd.method == 'show') and (dd.args == ["ab4814f904","5","new"])),"Processing RESTful POST to invoke 'complete' request failed.")
345
+
346
+ dd = disp.process(rqs[15])
347
+ processing rqso[15]
348
+ puts " #{dd.inspect}"
349
+ assert(((dd.component == 'books') and (dd.method == 'show') and (dd.args == ["ab4814f904","5","new"])),"Processing RESTful POST to invoke 'complete' request failed.")
350
+
351
+ rqs = rqso.dup
352
+ rqs.each {|rq| assert(disp.handleRequest?(rq),"handleRequest? says it won't handle #{rq.inspect}")}
353
+
354
+ puts "\nDoing a quick benchmark of request processing using all of the test cases; 20000 * #{rqs.length} == #{20000 * rqs.length} requests."
355
+ Benchmark.benchmark {|bm| bm.report {20000.times {rqs.each {|rq| dd = disp.process(rq)}}}}
356
+ #end
357
+ end
358
+ end
359
+
360
+ def external_downcase(r)
361
+ r.uri.downcase!
362
+ end