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,5 @@
1
+ #!/usr/local/bin/ruby
2
+ require 'iowa'
3
+ require 'iowa_mongrel' unless Iowa.runmode != :standalone
4
+
5
+ Iowa.run
@@ -0,0 +1,6 @@
1
+ rewrites:
2
+ - match: /(?i-mx:index.htm)?$
3
+ sub: /index.html
4
+ map:
5
+ /hello_world.html: HelloWorld
6
+ /index.html: Index
@@ -0,0 +1 @@
1
+ Hello World!
@@ -0,0 +1,9 @@
1
+ 012345678901234567890123456789012345678901234567890123456789012345678901
2
+ ruby hw.rb -r webrick
3
+
4
+ This is the simplest IOWA application. It consists of a ruby file that
5
+ requires the main iowa library, and then calls Iowa.run, and a single
6
+ view file, Main.html. The application will be listening on 127.0.0.1,
7
+ port 2001.
8
+
9
+ IOWA applications will pass a request to the Main component by default.
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ require 'iowa'
3
+
4
+ Iowa.run
@@ -0,0 +1,10 @@
1
+ <body>
2
+ <html>
3
+ <title>Hello World!</title>
4
+ </html>
5
+
6
+ <body>
7
+ <h1>Hello World!</h1>
8
+ <p>The current time/date is: <dynamicstring oid="now" /></p>
9
+ </body>
10
+ </html>
@@ -0,0 +1,7 @@
1
+ class Main < Iowa::Component
2
+
3
+ def now
4
+ Time.now.asctime
5
+ end
6
+
7
+ end
@@ -0,0 +1,16 @@
1
+ 012345678901234567890123456789012345678901234567890123456789012345678901
2
+ ruby hw.rb -r webrick
3
+
4
+ In this example, we've added some HTML structure to the view, and have
5
+ inserted some dynamic content. The current date and time is now
6
+ displayed on every request.
7
+
8
+ In IOWA applications, code is not inserted directly into a view file.
9
+ Rather, methods can be called from the controller, and the return
10
+ value of the method will be inserted into the output of the view.
11
+
12
+ The syntax for this is to use a special tag:
13
+
14
+ <dynamicstring oid="foo" />
15
+
16
+ The value of the oid attribute is the name of the method to call.
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ require 'iowa'
3
+
4
+ Iowa.run
@@ -0,0 +1,11 @@
1
+ <body>
2
+ <html>
3
+ <title>Hello World!</title>
4
+ </html>
5
+
6
+ <body>
7
+ <h1>Hello World!</h1>
8
+ <p>The current time/date is: @now</p>
9
+ <p><a oid="reload">Click here to reload!</a></p>
10
+ </body>
11
+ </html>
@@ -0,0 +1,7 @@
1
+ class Main < Iowa::Component
2
+
3
+ def now
4
+ Time.now.asctime
5
+ end
6
+
7
+ end
@@ -0,0 +1,22 @@
1
+ 012345678901234567890123456789012345678901234567890123456789012345678901
2
+ ruby hw.rb -r webrick
3
+
4
+ Notice that the tag to include dynamic content from the last example:
5
+
6
+ <dynamicstring oid="foo" />
7
+
8
+ is missing from this one. Instead, in its place, is "@foo".
9
+
10
+ Because the act of invoking a method in the controller to insert dynamic
11
+ content is so common, IOWA provides a syntactic shortcut for that.
12
+
13
+ Any alphanumeric sequence of characters which is preceded with an
14
+ at (@) sign is treated as a DynamicString tag for that sequence of
15
+ characters. Dot notation for chaining method calls IS supported.
16
+
17
+ The other thing that was added to this example is a dynamic link. When
18
+ an <a> tag has an oid attribute, the value of that attribute names the
19
+ method that will be called when that link is clicked on. The reload()
20
+ method is a standard one that exists for all components, and does
21
+ nothing but allow the current page to be reloaded.
22
+
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ require 'iowa'
3
+
4
+ Iowa.run
@@ -0,0 +1,10 @@
1
+ <body>
2
+ <html>
3
+ <title>Hello World!</title>
4
+ </html>
5
+
6
+ <body>
7
+ <h1>Hello @yourname!</h1>
8
+ <p>I'm IOWA. Happy to meet you. By the way, the current date/time is: @now</p>
9
+ </body>
10
+ </html>
@@ -0,0 +1,9 @@
1
+ class Greetings < Iowa::Component
2
+
3
+ attr_accessor :yourname
4
+
5
+ def now
6
+ Time.now.asctime
7
+ end
8
+
9
+ end
@@ -0,0 +1,12 @@
1
+ <body>
2
+ <html>
3
+ <title>Hello World!</title>
4
+ </html>
5
+
6
+ <body>
7
+ <h1>Hello World!</h1>
8
+ <form oid="got_name">
9
+ What is your name? <input type="text" oid="yourname" size="20" maxlength="45" />&nbsp;<input type="submit" oid="got_name" value="Tell Us Your Name" />
10
+ </form>
11
+ </body>
12
+ </html>
@@ -0,0 +1,10 @@
1
+ class Main < Iowa::Component
2
+ attr_accessor :yourname
3
+
4
+ def got_name
5
+ new_page = page_named(:Greetings)
6
+ new_page.yourname = @yourname
7
+ yield new_page
8
+ end
9
+
10
+ end
@@ -0,0 +1,28 @@
1
+ 012345678901234567890123456789012345678901234567890123456789012345678901
2
+ ruby hw.rb -r webrick
3
+
4
+ This example introduces is the use of a form, capturing form data, and
5
+ passing control and data to another component.
6
+
7
+ One of the things about IOWA that makes application development very
8
+ easy is that is provides implicit sessions, and it takes care of all
9
+ of the details involved moving data to and from forms and making it
10
+ transparently accessible to the code.
11
+
12
+ In this example, the Form is given an oid that represents the default
13
+ method to call when the form is submitted (if a submit button is no
14
+ pressed). The Input is also given an oid. The oid contains the
15
+ accessor to use to get/set the input field value. Finally there is
16
+ an Input tag with a type of submit. The oid, as with the Form tag,
17
+ contains the method to call when the button is pressed.
18
+
19
+ When execution moves to the got_name() method in the controller,
20
+ IOWA will have made sure that the value in the form has been placed
21
+ into the @yourname variable.
22
+
23
+ The got_name method calls page_named to return a new instance of a
24
+ component, Greetings. It assigns the @yourname variable that came
25
+ from the form to an accessor in the Greetings object, and then yields
26
+ the object. When an action yields another component, that component
27
+ is passed control of the request/response cycle; the response that is
28
+ passed back to the browser will be generated by the yielded component.
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ require 'iowa'
3
+
4
+ Iowa.run
@@ -0,0 +1,2 @@
1
+ </body>
2
+ </html>
@@ -0,0 +1,4 @@
1
+ <header oid="top" />
2
+ <h1>Hello @yourname!</h1>
3
+ <p>I'm IOWA. Happy to meet you. By the way, the current date/time is: @now</p>
4
+ <footer oid="bottom" />
@@ -0,0 +1,12 @@
1
+ import "header"
2
+ import "footer"
3
+
4
+ class Greetings < Iowa::Component
5
+
6
+ attr_accessor :yourname
7
+
8
+ def now
9
+ Time.now.asctime
10
+ end
11
+
12
+ end
@@ -0,0 +1,6 @@
1
+ <body>
2
+ <html>
3
+ <title>Hello World!</title>
4
+ </html>
5
+
6
+ <body>
@@ -0,0 +1,12 @@
1
+ <body>
2
+ <html>
3
+ <title>Hello World!</title>
4
+ </html>
5
+
6
+ <body>
7
+ <h1>Hello World!</h1>
8
+ <form oid="got_name">
9
+ What is your name? <input type="text" oid="yourname" size="20" maxlength="45" />&nbsp;<input type="submit" oid="got_name" value="Tell Us Your Name" />
10
+ </form>
11
+ </body>
12
+ </html>
@@ -0,0 +1,13 @@
1
+ import "header"
2
+ import "footer"
3
+
4
+ class Main < Iowa::Component
5
+ attr_accessor :yourname
6
+
7
+ def got_name
8
+ new_page = page_named(:Greetings)
9
+ new_page.yourname = @yourname
10
+ yield new_page
11
+ end
12
+
13
+ end
@@ -0,0 +1,16 @@
1
+ 012345678901234567890123456789012345678901234567890123456789012345678901
2
+ ruby hw.rb -r webrick
3
+
4
+ Remember that IOWA uses a component architecture. And one of the best
5
+ things about components is that they are easy to reuse. In this
6
+ example, instead of repeating the same pieces of header and footer
7
+ HTML across more than one view file, those pieces have been extracted
8
+ into their own components, Header and Footer.
9
+
10
+ A little bit of new Ruby syntax is needed, here, in order to ensure
11
+ that the needed components have been loaded by IOWA before they are
12
+ needed. Think of 'import' as a 'require' statement for components.
13
+
14
+ Then, to actually use the component, just write a tag using the
15
+ component name as the tag, and give it an oid. IOWA uses the
16
+ existence of oid attribute to signal to it that the tag is dynamic.
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ require 'iowa'
3
+
4
+ Iowa.run
@@ -0,0 +1,121 @@
1
+ class Content < Iowa::DetachedComponent
2
+
3
+ # This component displays no content of its own. Rather, it retrieves content
4
+ # from a content repository, called a library. The retrieved content is
5
+ # treated like an IOWA template and is parsed with the TemplateParser.
6
+ # The parsed template is ccahed, and is used as the template for the component.
7
+ # Because the template content is parsed with the TemplateParser, that content
8
+ # may also have Content tags in it. There is no limit to the depth of embedding
9
+ # which will be traversed.
10
+
11
+ @mutex = Iowa::Mutex.new
12
+ Clibrary = 'library'.freeze unless const_defined?(:Clibrary)
13
+ Cid = 'id'.freeze unless const_defined?(:Cid)
14
+ Cpreview = 'preview'.freeze unless const_defined?(:Cpreview)
15
+
16
+ attr_accessor :content, :predecessors
17
+
18
+ def Content.default_cache_size; 100; end
19
+ def Content.default_cache_ttl; nil; end
20
+
21
+ class ConfObj_ < Hash
22
+ def library; @library; end
23
+ def library=(val); self[val] ||= {}; @library = val; end
24
+
25
+ def query; self[@library][:query]; end
26
+ def query=(val); self[@library][:query] = val; end
27
+ def retrieve; self[@library][:retrieve]; end
28
+ def retrieve=(val); self[@library][:retrieve] = val; end
29
+
30
+ def cache; self[@library][:cache]; end
31
+ def cache=(args)
32
+ #self[@library][:cache] = Util.get_cache(args,{Cmaxsize => Content.default_cache_size, Cttl => Content.default_cache_ttl})
33
+ self[@library][:cache] = Util.get_cache(args)
34
+ end
35
+ end
36
+
37
+ @confobj = ConfObj_.new
38
+
39
+ # The Content component can serve content from multiple libraries
40
+ # at the same time. To set or reference a configuration item for
41
+ # a given library, pass it's name as an argument to Content.config.
42
+ # i.e. Content.config('generaldb').cache = Hash.new
43
+ #
44
+ def Content.config(library = C_default)
45
+ if block_given?
46
+ @mutex.synchronize do
47
+ begin
48
+ oldlib = @confobj.library
49
+ @confobj.library = library
50
+ yield @confobj
51
+ ensure
52
+ @confobj.library = oldlib
53
+ end
54
+ end
55
+ else
56
+ @confobj.library = library
57
+ @confobj
58
+ end
59
+ end
60
+
61
+ # Default cache is a basic LRUCache.
62
+ Content.config.cache = [:LRUCache, {:maxsize => 100}]
63
+
64
+ # Default query mechanism is flatfile based, looking in
65
+ # #{Iowa.app.root_path}/_content
66
+ Content.config.query = Proc.new do |name, attributes|
67
+ File.stat(File.join(Iowa.app.root_path,C_content,name)).mtime
68
+ end
69
+
70
+ Content.config.retrieve = Proc.new do |name, attributes|
71
+ r = {}
72
+ name.gsub!(/[\\\/]/,File::SEPARATOR)
73
+ filename = File.join(Iowa.app.root_path,C_content,name)
74
+ # Race condition here....
75
+ r[Cchecksum] = r[Clast_modification] = File.stat(filename).mtime
76
+ r[Clabel] = name
77
+ r[Ctitle],r[Cbody] =File.read(filename).split(/\n/,2)
78
+ r
79
+ end
80
+
81
+ def initialize(*args)
82
+ super(*args)
83
+ @dataname = @bindings.has_key?(Cid) ? getBinding(Cid) : @name
84
+ @predecessors = {@dataname => true}
85
+ if @parent.respond_to?(:predecessors)
86
+ @predecessors.merge! @parent.predecessors
87
+ end
88
+ end
89
+
90
+ def setup
91
+ parsed_template = nil
92
+ library = @bindings.has_key?(Clibrary) ? getBinding(Clibrary) : @attributes[Clibrary] || C_default
93
+ Logger['iowa_log'].info "Library: #{library}"
94
+ Content.config(library) do |content_config|
95
+ dn = session.context.request.params[Cpreview] ? "#{@dataname}?preview" : @dataname
96
+ cache_entry = content_config.cache[dn]
97
+
98
+ if !cache_entry or (cache_entry and cache_entry[0] != content_config.query.call(@dataname, @attributes, session)) or session.context.request.params.has_key?(Crefresh) or @attributes[Crefresh] =~ /(true|enabled)/
99
+
100
+ cobj = content_config.retrieve.call(@dataname, @attributes, session)
101
+ my_content = generate_wrapped_content(cobj)
102
+ parsed_template = TemplateParser.new(my_content,{},self.class).root
103
+ content_config.cache[dn] = [cobj[Cchecksum], parsed_template]
104
+ else
105
+ parsed_template = cache_entry[1]
106
+ end
107
+ end
108
+
109
+ # This prevents infinite loops.
110
+ if @parent.respond_to?(:predecessors) and @parent.predecessors[@dataname]
111
+ @template = TemplateParser.new(C_empty,{}).root
112
+ else
113
+ @template = parsed_template
114
+ end
115
+ end
116
+
117
+ def generate_wrapped_content(content)
118
+ "<div id=\"maincontent\" style=\"position: absolute; left: 140px; top: 130px\">\n#{content[Cbody]}\n</div>"
119
+ end
120
+
121
+ end
@@ -0,0 +1,112 @@
1
+ require 'iowa/caches/LRUCache'
2
+
3
+ module Iowa
4
+ module Dispatchers
5
+ class DBContentDispatcher
6
+
7
+ attr_accessor :dbpool
8
+
9
+ class NoMapFile < Exception; end
10
+
11
+ def initialize(args)
12
+ @mapfileMTime = 0
13
+ @dbLMTime = {:pub => 0, :priv => 0}
14
+ @next_check = 0
15
+ @urlMap = {:pub => {}, :priv => {}}
16
+ @dbMap = {:pub => {}, :priv => {}}
17
+ @dbpool = {}
18
+ @mapfile = 'mapfile.map'
19
+ raise(NoMapFile, "The mapfile (@mapfile) does not appear to exist.") unless FileTest.exist?(@mapfile)
20
+ @min_recheck_interval = args[:min_recheck_interval] ? args[:min_recheck_interval] : 30
21
+ end
22
+
23
+ def read_mapfile
24
+ if File.stat(@mapfile).mtime != @mapfileMTime
25
+ File.open(@mapfile) {|mf| @urlMap = YAML::load(mf)}
26
+ File.stat(@mapfile).mtime
27
+ end
28
+ end
29
+
30
+ def read_db
31
+ [:pub,:priv].each {|s| @dbpool[s].obtain {|ksdbh| poll_db(ksdbh,s)}}
32
+ end
33
+
34
+ def poll_db(ksdbh,side)
35
+ lmtime = nil
36
+ ksdbh.select_all('select max(last_modified) from product_urls') {|row| lmtime = row[0]}
37
+ if lmtime and lmtime.to_time.to_i > @dbLMTime[side]
38
+ @dbLMTime[side] = lmtime.to_time.to_i
39
+ @dbMap[side] = {}
40
+ ksdbh.select(:ProductUrls).each {|pu| @dbMap[side][pu.url] = pu.product_idx}
41
+ end
42
+ end
43
+
44
+ # Returns true if the dispatcher is willing to handle this request.
45
+
46
+ # def handleRequest?(path)
47
+ # if @next_check < Time.now.to_i
48
+ # @next_check = Time.now.to_i + @min_recheck_interval
49
+ # read_mapfile
50
+ # read_db
51
+ # end
52
+ #
53
+ # if !Iowa.app.policy.getIDs(path)[1].nil?
54
+ # true
55
+ # elsif @urlMap[path] or @dbMap[path]
56
+ # true
57
+ # else
58
+ # false
59
+ # end
60
+ # end
61
+
62
+ # Dispatches the request.
63
+
64
+ def dispatch(session,context,specific_page = nil)
65
+ unless specific_page
66
+ request = context.request
67
+ if @next_check < Time.now.to_i
68
+ @next_check = Time.now.to_i + @min_recheck_interval
69
+ read_mapfile
70
+ read_db
71
+ end
72
+
73
+ side = :pub
74
+ if context.cookies.has_key?(::Cdirexion_id)
75
+ direxion_id = context.cookies[::Cdirexion_id]
76
+ if direxion_id.nil?
77
+ request.uri = '/logout.html'
78
+ else
79
+ if Iowa.app.direxion_id_cache.include?(direxion_id)
80
+ side = :priv
81
+ else
82
+ @dbpool[:priv].obtain do |ksdbh|
83
+ auth = ksdbh.select(:Authorization) {|a| a.idx == direxion_id}.first
84
+ if auth
85
+ side = :priv
86
+ Iowa.app.direxion_id_cache[direxion_id] = true
87
+ end
88
+ end
89
+ end
90
+ if side == :pub
91
+ # expire a bad cookie
92
+ end
93
+ end
94
+
95
+ end
96
+
97
+ if @urlMap[side][request.uri]
98
+ context[:side] = side
99
+ specific_page = @urlMap[side][request.uri]
100
+ elsif @dbMap[side][request.uri]
101
+ context[:product_id] = @dbMap[side][request.uri]
102
+ context[:side] = side
103
+ specific_page = 'DBContentPage'
104
+ end
105
+ end
106
+ Logger['iowa_log'].info "Dispatching to #{specific_page}"
107
+ session.handleRequest(context,specific_page)
108
+ end
109
+
110
+ end
111
+ end
112
+ end