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,88 @@
1
+ require 'date'
2
+ class Date
3
+ def include?(tm)
4
+ dtm = DateTime.parse(tm.asctime)
5
+ slf = self.to_s
6
+ d1 = DateTime.parse("#{slf} 00:00:00")
7
+ d2 = DateTime.parse("#{slf} 23:59:59.99999")
8
+ dtm.between?(d1,d2)
9
+ end
10
+
11
+ def to_datetime
12
+ DateTime.new(year, month, day, 0, 0, 0)
13
+ rescue NameError
14
+ nil
15
+ end
16
+
17
+ def ago(sec)
18
+ self - Rational.new!(sec, 86400)
19
+ end
20
+ alias :until :ago
21
+
22
+ def since(sec)
23
+ self + Rational.new!(sec, 86400)
24
+ end
25
+ alias :from_now :since
26
+
27
+ def yesterday
28
+ self - 1
29
+ end
30
+
31
+ def tomorrow
32
+ self + 1
33
+ end
34
+
35
+ def last_week
36
+ self - 7
37
+ end
38
+
39
+ def next_week
40
+ self + 7
41
+ end
42
+
43
+ def last_month
44
+ self - 30
45
+ end
46
+
47
+ def next_month
48
+ self + 30
49
+ end
50
+
51
+ def last_year
52
+ self - 365
53
+ end
54
+
55
+ def next_year
56
+ self + 365
57
+ end
58
+
59
+ def month_start
60
+ Date.new(year, month, 1)
61
+ end
62
+
63
+ def month_end
64
+ d = {1 => 31,
65
+ 2 => Date.new(year, month, day).leap? ? 29 : 28,
66
+ 3 => 31,
67
+ 4 => 30,
68
+ 5 => 31,
69
+ 6 => 30,
70
+ 7 => 31,
71
+ 8 => 31,
72
+ 9 => 30,
73
+ 10 => 31,
74
+ 11 => 30,
75
+ 12 => 31}[month]
76
+ Date.new(year, month, d)
77
+ end
78
+
79
+ def year_start
80
+ Date.new(year, 1, 1)
81
+ end
82
+
83
+ def year_end
84
+ Date.new(year, 12, 31)
85
+ end
86
+
87
+ end
88
+
@@ -0,0 +1,88 @@
1
+ require 'date'
2
+ class DateTime
3
+ def to_time
4
+ puts year, month, day, hour, min, sec
5
+ Time.local(year,month,day,hour,min,sec)
6
+ end
7
+
8
+ def to_date
9
+ Date.new(year, month, day)
10
+ rescue NameError
11
+ nil
12
+ end
13
+
14
+ def ago(sec)
15
+ self - Rational.new!(sec, 86400)
16
+ end
17
+ alias :until :ago
18
+
19
+ def since(sec)
20
+ self + Rational.new!(sec, 86400)
21
+ end
22
+ alias :from_now :since
23
+
24
+ def yesterday
25
+ self - 1
26
+ end
27
+
28
+ def tomorrow
29
+ self + 1
30
+ end
31
+
32
+ def last_week
33
+ self - 7
34
+ end
35
+
36
+ def next_week
37
+ self + 7
38
+ end
39
+
40
+ def last_month
41
+ self - 30
42
+ end
43
+
44
+ def next_month
45
+ self + 30
46
+ end
47
+
48
+ def last_year
49
+ self - 365
50
+ end
51
+
52
+ def next_year
53
+ self + 365
54
+ end
55
+
56
+ def midnight
57
+ DateTime.new(year, month, day, 0, 0, 0)
58
+ end
59
+
60
+ def month_start
61
+ DateTime.new(year, month, 1, 0, 0, 0)
62
+ end
63
+
64
+ def month_end
65
+ d = {1 => 31,
66
+ 2 => Date.new(year, month, day).leap? ? 29 : 28,
67
+ 3 => 31,
68
+ 4 => 30,
69
+ 5 => 31,
70
+ 6 => 30,
71
+ 7 => 31,
72
+ 8 => 31,
73
+ 9 => 30,
74
+ 10 => 31,
75
+ 11 => 30,
76
+ 12 => 31}[month]
77
+ DateTime.new(year, month, d, 0, 0, 0)
78
+ end
79
+
80
+ def year_start
81
+ Time.local(year, 1, 1, 0, 0, 0)
82
+ end
83
+
84
+ def year_end
85
+ Time.local(year, 12, 31, 0, 0, 0)
86
+ end
87
+
88
+ end
@@ -0,0 +1,22 @@
1
+ class Hash
2
+ # A simple little routine to downcase any String used as a key
3
+ # in a hash or any hash nested as value somewhere within the hash.
4
+ # Thanks to Daniel Berger for this implementation.
5
+
6
+ def downcase_keys!
7
+ upper = /A-Z/
8
+ self.each do |k,v|
9
+ next unless k.kind_of? String
10
+ self[k.dup.downcase] = v
11
+ self.delete(k) if upper.match(k)
12
+ end
13
+ end
14
+
15
+ def stringify_keys!
16
+ self.each do |k,v|
17
+ next if k.kind_of? String
18
+ self[k.to_s] = v
19
+ self.delete k
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,6 @@
1
+ module Kernel
2
+ def returning(*vals)
3
+ yield *vals
4
+ vals.length == 1 ? vals.first : vals
5
+ end
6
+ end
@@ -0,0 +1,47 @@
1
+ class Numeric
2
+
3
+ def seconds
4
+ self
5
+ end
6
+ alias :second :seconds
7
+
8
+ def minutes
9
+ self * 60
10
+ end
11
+ alias :minute :minutes
12
+
13
+ def hours
14
+ self * 3600
15
+ end
16
+ alias :hour :hours
17
+
18
+ def days
19
+ self * 86400
20
+ end
21
+ alias :day :days
22
+
23
+ def weeks
24
+ self * 604800
25
+ end
26
+ alias :week :weeks
27
+
28
+ def months
29
+ self * 2592000
30
+ end
31
+ alias :month :months
32
+
33
+ def years
34
+ self * 31536000
35
+ end
36
+ alias :year :years
37
+
38
+ def ago(t = ::Time.now)
39
+ t - self
40
+ end
41
+ alias :until :ago
42
+
43
+ def since(t = ::Time.now)
44
+ t + self
45
+ end
46
+ alias :from_now :since
47
+ end
@@ -0,0 +1,11 @@
1
+ class Object
2
+ # Takes zero or more exceptions as arguments, and supresses the expression of
3
+ # those exceptions in the block that is called.
4
+ def suppress(*exceptions)
5
+ r = nil
6
+ begin
7
+ yield
8
+ rescue *exceptions => r
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,60 @@
1
+ class String
2
+ def unescape
3
+ self.gsub(/\+/, ' ').gsub(/%([0-9a-fA-F]{2})/){ [$1.hex].pack("c") }
4
+ end
5
+
6
+ def unescape!
7
+ self.gsub!(/\+/, ' ')
8
+ self.gsub!(/%([0-9a-fA-F]{2})/){ [$1.hex].pack("c") }
9
+ end
10
+
11
+ def camelCase
12
+ return self if /[a-zA-Z][A-Z]/.match(self)
13
+ parts = split(/[_\s]/)
14
+ ([parts[0].downcase] + parts[1..-1].collect {|x| x.capitalize}).join
15
+ end
16
+ alias :camel_case :camelCase
17
+
18
+ def camelCase!
19
+ replace(camelCase)
20
+ end
21
+ alias :camel_case! :camelCase!
22
+
23
+ def constantCase
24
+ tmp = camel_case
25
+ tmp[0] = camel_case[0].chr.upcase
26
+ tmp
27
+ rescue self
28
+ end
29
+ alias :constant_case :constantCase
30
+
31
+ def constantCase!
32
+ replace(constantCase)
33
+ end
34
+ alias :constant_case! :constantCase!
35
+
36
+ def snake_case(group = true)
37
+ if group
38
+ gsub(/([a-zA-Z])([A-Z])/,'\1_\2').gsub(/\s/,'_').downcase
39
+ else
40
+ gsub(/([a-zA-Z])(?=[A-Z])/,'\1_\2').gsub(/\s/,'_').downcase
41
+ end
42
+ end
43
+ alias :snakeCase :snake_case
44
+
45
+ def snake_case!
46
+ replace(snake_case)
47
+ end
48
+ alias :snakeCase! :snake_case
49
+
50
+ def human_case
51
+ snake_case.gsub('_',' ').capitalize
52
+ end
53
+ alias :humanCase :human_case
54
+
55
+ def human_case!
56
+ replace(human_case)
57
+ end
58
+ alias :humanCase! :human_case!
59
+
60
+ end
@@ -0,0 +1,89 @@
1
+ require 'date'
2
+ class Time
3
+ def to_date
4
+ Date.new(year, month, day)
5
+ rescue NameError
6
+ nil
7
+ end
8
+
9
+ def to_datetime
10
+ DateTime.new(year, month, day, hour, min, sec)
11
+ rescue NameError
12
+ nil
13
+ end
14
+
15
+ def ago(sec)
16
+ sec.ago(self)
17
+ end
18
+ alias :until :ago
19
+
20
+ def since(sec)
21
+ sec.since(self)
22
+ end
23
+ alias :from_now :since
24
+
25
+ def yesterday
26
+ self - 1.day
27
+ end
28
+
29
+ def tomorrow
30
+ self + 1.day
31
+ end
32
+
33
+ def last_week
34
+ self - 1.week
35
+ end
36
+
37
+ def next_week
38
+ self + 1.week
39
+ end
40
+
41
+ def last_month
42
+ self - 1.month
43
+ end
44
+
45
+ def next_month
46
+ self + 1.month
47
+ end
48
+
49
+ def last_year
50
+ self - 1.year
51
+ end
52
+
53
+ def next_year
54
+ self + 1.year
55
+ end
56
+
57
+ def midnight
58
+ Time.local(year, month, day, 0, 0, 0)
59
+ end
60
+
61
+ def month_start
62
+ Time.local(year, month, 1, 0, 0, 0)
63
+ end
64
+
65
+ def month_end
66
+ d = {1 => 31,
67
+ 2 => Date.new(year, month, day).leap? ? 29 : 28,
68
+ 3 => 31,
69
+ 4 => 30,
70
+ 5 => 31,
71
+ 6 => 30,
72
+ 7 => 31,
73
+ 8 => 31,
74
+ 9 => 30,
75
+ 10 => 31,
76
+ 11 => 30,
77
+ 12 => 31}[month]
78
+ Time.local(year, month, d, 0, 0, 0)
79
+ end
80
+
81
+ def year_start
82
+ Time.local(year, 1, 1, 0, 0, 0)
83
+ end
84
+
85
+ def year_end
86
+ Time.local(year, 12, 31, 0, 0, 0)
87
+ end
88
+
89
+ end
@@ -0,0 +1,6 @@
1
+ # Will pull in all of the time/date extensions at once.
2
+
3
+ require 'iowa/Extensions/Date'
4
+ require 'iowa/Extensions/DateTime'
5
+ require 'iowa/Extensions/Numeric'
6
+ require 'iowa/Extensions/Time'
@@ -0,0 +1,368 @@
1
+ module Iowa
2
+ module FormElements
3
+
4
+ class Form < Tag
5
+
6
+ Iowa::TemplateParser.register_tag(self,:mandatory_body)
7
+
8
+ def defaultBindings
9
+ @bindings[Caction] = LiteralAssociation.new(@name)
10
+ end
11
+
12
+ def handleRequest(context)
13
+ if(context.actionID == context.elementID)
14
+ context.setAction(@bindings[Caction])
15
+ context[:formActive] = true
16
+ context.element_attributes = @attributes
17
+ end
18
+ super(context)
19
+ context[:formActive] = false
20
+ end
21
+
22
+ def handleResponse(context)
23
+ actionURL = context.actionURL
24
+ if @bindings.has_key?('id')
25
+ context.url_for_id[context.getBinding(@bindings['id'])] = actionURL
26
+ end
27
+ context.response << openTag(Cmethod, Cpost,
28
+ Caction, context.actionURL,
29
+ context)
30
+ super(context)
31
+ context.response << closeTag
32
+ context[:skip_pagecache] = false
33
+ end
34
+ end
35
+
36
+ class Input < Tag
37
+
38
+ Iowa::TemplateParser.register_tag(self,:bodyless)
39
+
40
+ def initialize(name, bindings, attributes)
41
+ type = attributes[Ctype.freeze]
42
+
43
+ case type
44
+ when Csubmit
45
+ extend Submit
46
+ when Cbutton
47
+ extend Button
48
+ when Cimage
49
+ extend Image
50
+ when Ccheckbox
51
+ extend Checkbox
52
+ when Cradio
53
+ extend Radiobox
54
+ when Cfile
55
+ extend File
56
+ else
57
+ extend Text
58
+ end
59
+
60
+ super(name, bindings, attributes)
61
+ end
62
+ end
63
+
64
+ module Submit
65
+
66
+ def defaultBindings
67
+ @bindings[Caction] = LiteralAssociation.new(@name)
68
+ @attributes[Cvalue] ||= @name
69
+ end
70
+
71
+ def handleRequest(context)
72
+ if context.request.params.has_key?(context.elementID)
73
+ context.setAction(@bindings[Caction])
74
+ context.element_attributes = @attributes
75
+ end
76
+ end
77
+
78
+ def handleResponse(context)
79
+ value = context.getBinding(@bindings[Cvalue])
80
+ attrs = Hash[Ctype => Csubmit, Cname => context.elementID]
81
+ attrs[Cvalue] = value if value
82
+ context.response << lonelyTag(attrs,context)
83
+ context[:skip_pagecache] = false
84
+ end
85
+ end
86
+
87
+ module Button
88
+
89
+ def defaultBindings
90
+ @bindings[Caction] = LiteralAssociation.new(@name)
91
+ @attributes[Cvalue] ||= @name
92
+ end
93
+
94
+ def handleRequest(context)
95
+ if context.request.params.has_key?(context.elementID)
96
+ context.setAction(@bindings[Caction])
97
+ context.element_attributes = @attributes
98
+ end
99
+ end
100
+
101
+ def handleResponse(context)
102
+ value = context.getBinding(@bindings[Cvalue])
103
+ attrs = Hash[Ctype => Cbutton, Cname => context.elementID]
104
+ attrs[Cvalue] = value if value
105
+ context.response << lonelyTag(attrs,context)
106
+ context[:skip_pagecache] = false
107
+ end
108
+ end
109
+
110
+ module Image
111
+
112
+ def defaultBindings
113
+ @bindings[Caction] = LiteralAssociation.new(@name)
114
+ end
115
+
116
+ def handleRequest(context)
117
+ if context.request.params.has_key?(context.elementID)
118
+ context.setAction(@bindings[Caction])
119
+ context.element_attributes = @attributes
120
+ end
121
+ end
122
+
123
+ def handleResponse(context)
124
+ value = context.getBinding(@bindings[Cvalue])
125
+ attrs = Hash[Ctype => Cimage, Cname => context.elementID]
126
+ context.response << lonelyTag(attrs,context)
127
+ context[:skip_pagecache] = false
128
+ end
129
+ end
130
+
131
+ module Text
132
+
133
+ def defaultBindings
134
+ @bindings[Cvalue] = PathAssociation.new(@name)
135
+ @bindings[Cmultiple] = nil
136
+ end
137
+
138
+ def handleRequest(context)
139
+ val = context.request.params[context.elementID]
140
+ if val
141
+ if @bindings[Cmultiple]
142
+ v = context[:responseNotes][@bindings[Cvalue]] || []
143
+ v << val
144
+ context.setBinding(@bindings[Cvalue], v, true)
145
+ else
146
+ context.setBinding(@bindings[Cvalue], val, true)
147
+ end
148
+ end
149
+ end
150
+
151
+ def handleResponse(context)
152
+ label = @attributes[Clabel]
153
+ if label
154
+ label_class = " class=\"#{@attributes['label_class']}\""
155
+ end
156
+ value = context.getBinding(@bindings[Cvalue])
157
+ type = @attributes[Ctype]
158
+ attrs = Hash[Ctype => type, Cname => context.elementID, Cvalue => value]
159
+ #context.response << lonelyTag(Ctype, type,
160
+ # Cname, context.elementID,
161
+ # Cvalue, value,context)
162
+ context.response << "<label for=\"#{context.elementID}\"#{label_class}>#{label}</label>" if label
163
+ context.response << lonelyTag(attrs,context)
164
+ context[:skip_pagecache] = false
165
+ end
166
+ end
167
+
168
+ module File
169
+ def defaultBindings
170
+ @bindings[Cvalue] = PathAssociation.new(@name)
171
+ @bindings[Cmultiple] = nil
172
+ end
173
+
174
+ def handleRequest(context)
175
+ val = context.request.params[context.elementID]
176
+ if val
177
+ if @bindings[Cmultiple]
178
+ v = context[:responseNotes][@bindings[Cvalue]] || []
179
+ v << val
180
+ context.setBinding(@bindings[Cvalue], v, true)
181
+ else
182
+ context.setBinding(@bindings[Cvalue], val, true)
183
+ end
184
+ end
185
+ end
186
+
187
+ def handleResponse(context)
188
+ label = @attributes[Clabel]
189
+ if label
190
+ label_class = " class=\"#{@attributes['label_class']}\""
191
+ end
192
+ value = context.getBinding(@bindings[Cvalue])
193
+ type = @attributes[Ctype]
194
+ attrs = Hash[Ctype => type, Cname => context.elementID]
195
+ context.response << "<label for=\"#{context.elementID}\"#{label_class}>#{label}</label>" if label
196
+ context.response << lonelyTag(attrs,context)
197
+ context[:skip_pagecache] = false
198
+ end
199
+ end
200
+
201
+ module Checkbox
202
+ def defaultBindings
203
+ @bindings[Cvalue] = PathAssociation.new(@name)
204
+ end
205
+
206
+ def handleRequest(context)
207
+ if context[:formActive]
208
+ val = context.request.params[context.elementID] ? context.request.params[context.elementID] : false
209
+ context.setBinding(@bindings[Cvalue], val, true) if val
210
+ end
211
+ end
212
+
213
+ def handleResponse(context)
214
+ val = context.getBinding(@bindings[Cvalue]).to_s
215
+ attrs = {Ctype => Ccheckbox,
216
+ Cname => context.elementID,
217
+ Cvalue => @attributes[Cvalue]}
218
+ attrs[Cchecked] = nil if val && val.to_s != ''
219
+ context.response << lonelyTag(attrs,context)
220
+ context[:skip_pagecache] = false
221
+ end
222
+ end
223
+
224
+ module Radiobox
225
+ def defaultBindings
226
+ @bindings[Cvalue] = PathAssociation.new(@name)
227
+ end
228
+
229
+ def handleRequest(context)
230
+ if context[:formActive]
231
+ val = context.request.params[context.elementID]
232
+ context.setBinding(@bindings[Cvalue], val, true) if val
233
+ end
234
+ end
235
+
236
+ def handleResponse(context)
237
+ val = context.getBinding(@bindings[Cvalue])
238
+ attrs = {Ctype => Cradio, Cvalue => @attributes[Cvalue]}
239
+ if @attributes[Cname] !~ /^\d+(\.\d+)*$/
240
+ if context.radio_box_id.has_key? @name
241
+ attrs[Cname] = context.radio_box_id[@name]
242
+ else
243
+ context.radio_box_id[@name] = context.elementID
244
+ attrs[Cname] = context.elementID
245
+ end
246
+ else
247
+ attrs[Cname] = @name
248
+ end
249
+
250
+ if @attributes[Cvalue].to_s == val.to_s
251
+ attrs[Cchecked] = nil
252
+ @attributes.delete(Cchecked)
253
+ elsif val
254
+ @attributes.delete(Cchecked)
255
+ end
256
+
257
+ context.response << lonelyTag(attrs,context)
258
+ context[:skip_pagecache] = false
259
+ end
260
+ end
261
+
262
+ class Textarea < Tag
263
+ def defaultBindings
264
+ @bindings[Cvalue] = PathAssociation.new(@name)
265
+ end
266
+
267
+ def handleRequest(context)
268
+ val = context.request.params[context.elementID]
269
+ if val
270
+ context.setBinding(@bindings[Cvalue], val, true)
271
+ end
272
+ end
273
+
274
+ def handleResponse(context)
275
+ value = context.getBinding(@bindings[Cvalue])
276
+ context.response << openTag(Cname, context.elementID,context)
277
+ context.response << value.to_s
278
+ context.response << closeTag
279
+ context[:skip_pagecache] = false
280
+ end
281
+ end
282
+
283
+ class Select < RepeatReadOnly
284
+
285
+ Iowa::TemplateParser.register_tag(self,:mandatory_body)
286
+
287
+ # If the multiple option is used in the select statement, then multiple
288
+ # values can be returned. If they are, then the 'item' variable will
289
+ # be set to an array, with each selection as an element in the array.
290
+
291
+ def handleRequest(context)
292
+ index = context.request.params[context.elementID]
293
+ handleRequestOrResponse(:handleRequest, context)
294
+ if index
295
+ list = context.getBinding(@bindings[Clist])
296
+ if index.index(0.chr)
297
+ c = []
298
+ #index.split(0.chr).each do |i|
299
+ for i in index.split(0.chr)
300
+ c.push list[i.to_i]
301
+ end
302
+ context.setBinding(@bindings[Citem], c, true)
303
+ else
304
+ context.setBinding(@bindings[Citem], list[index.to_i], true)
305
+ end
306
+ end
307
+ end
308
+
309
+ def handleResponse(context)
310
+ context.response << openTag(Cname, context.elementID,context)
311
+ handleRequestOrResponse(:handleResponse, context)
312
+ context.response << closeTag
313
+ context[:skip_pagecache] = false
314
+ end
315
+
316
+ # If the item is an array, then there are multiple entries within the
317
+ # select box that are selected.
318
+
319
+ def handleRequestOrResponse(method, context)
320
+ setupBindings(context)
321
+ list = context.getBinding(@bindings[Clist])
322
+ item = context.getBinding(@bindings[Citem])
323
+ if item.kind_of?(Array)
324
+ h = {}
325
+ #item.each do |i|
326
+ for i in item
327
+ h[list.index(i)] = true
328
+ end
329
+ context[:selectItem] = h
330
+ else
331
+ context[:selectItem] = list.index(item)
332
+ end
333
+ context[:selectIndex] = 0
334
+
335
+ super(method, context)
336
+
337
+ context.setBindingNow(@bindings[Citem], item, true)
338
+ end
339
+ end
340
+
341
+ class Option < Tag
342
+
343
+ Iowa::TemplateParser.register_tag(self,:bodyless)
344
+
345
+ def defaultBindings
346
+ @bindings[Citem] = PathAssociation.new(@name)
347
+ end
348
+
349
+ def handleResponse(context)
350
+ attrs = {Cvalue => context[:selectIndex]}
351
+
352
+ if context[:selectItem].class.name == CHash
353
+ if context[:selectItem].has_key? context[:selectIndex]
354
+ attrs[Cselected] = nil
355
+ end
356
+ elsif context[:selectIndex] == context[:selectItem]
357
+ attrs[Cselected] = nil
358
+ end
359
+
360
+ context.response << openTag(attrs,context)
361
+ context.response << context.getBinding(@bindings[Citem]).to_s
362
+
363
+ context[:selectIndex] += 1
364
+ context[:skip_pagecache] = false
365
+ end
366
+ end
367
+ end
368
+ end