wee 0.10.0 → 2.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 (369) hide show
  1. data/README.rdoc +127 -0
  2. data/Rakefile +11 -32
  3. data/doc/rdoc/classes/Array.html +28 -24
  4. data/doc/rdoc/classes/Hash.html +28 -24
  5. data/doc/rdoc/classes/Object.html +37 -84
  6. data/doc/rdoc/classes/String.html +89 -21
  7. data/doc/rdoc/classes/Struct.html +32 -82
  8. data/doc/rdoc/classes/Wee.html +285 -86
  9. data/doc/rdoc/classes/Wee/AnswerDecoration.html +111 -48
  10. data/doc/rdoc/classes/Wee/{Context.html → AnswerDecoration/Answer.html} +61 -51
  11. data/doc/rdoc/classes/Wee/Application.html +161 -322
  12. data/doc/rdoc/classes/Wee/Application/SessionCache.html +162 -0
  13. data/doc/rdoc/classes/Wee/Brush.html +147 -62
  14. data/doc/rdoc/classes/{Enumerable.html → Wee/Brush/ActionInputTag.html} +68 -41
  15. data/doc/rdoc/classes/Wee/Brush/AnchorTag.html +150 -100
  16. data/doc/rdoc/classes/Wee/Brush/CheckboxTag.html +132 -46
  17. data/doc/rdoc/classes/Wee/Brush/FileUploadTag.html +63 -41
  18. data/doc/rdoc/classes/Wee/Brush/FormTag.html +184 -78
  19. data/doc/rdoc/classes/Wee/Brush/GenericEncodedTextBrush.html +48 -65
  20. data/doc/rdoc/classes/Wee/Brush/GenericSingleTagBrush.html +83 -37
  21. data/doc/rdoc/classes/Wee/Brush/GenericTagBrush.html +334 -310
  22. data/doc/rdoc/classes/Wee/Brush/GenericTextBrush.html +74 -54
  23. data/doc/rdoc/classes/Wee/Brush/HiddenInputTag.html +58 -43
  24. data/doc/rdoc/classes/Wee/Brush/ImageButtonTag.html +64 -74
  25. data/doc/rdoc/classes/Wee/Brush/ImageTag.html +109 -86
  26. data/doc/rdoc/classes/Wee/Brush/InputTag.html +205 -45
  27. data/doc/rdoc/classes/Wee/Brush/JavascriptTag.html +96 -34
  28. data/doc/rdoc/classes/Wee/Brush/Page.html +129 -67
  29. data/doc/rdoc/classes/Wee/{Utils/LRUCache.html → Brush/PasswordInputTag.html} +65 -38
  30. data/doc/rdoc/classes/Wee/Brush/RadioButtonTag.html +132 -78
  31. data/doc/rdoc/classes/Wee/Brush/{RadioButtonTag/RadioGroup.html → RadioGroup.html} +91 -53
  32. data/doc/rdoc/classes/Wee/Brush/SelectListTag.html +301 -127
  33. data/doc/rdoc/classes/Wee/Brush/SelectOptionTag.html +96 -33
  34. data/doc/rdoc/classes/Wee/Brush/SubmitButtonTag.html +59 -44
  35. data/doc/rdoc/classes/Wee/Brush/TableDataTag.html +94 -57
  36. data/doc/rdoc/classes/Wee/Brush/TableHeaderTag.html +96 -33
  37. data/doc/rdoc/classes/Wee/Brush/TableRowTag.html +181 -121
  38. data/doc/rdoc/classes/Wee/Brush/TableTag.html +94 -32
  39. data/doc/rdoc/classes/Wee/Brush/TextAreaTag.html +257 -71
  40. data/doc/rdoc/classes/Wee/Brush/TextInputTag.html +58 -43
  41. data/doc/rdoc/classes/Wee/CallAnswerMixin.html +289 -0
  42. data/doc/rdoc/classes/Wee/CallbackMixin.html +233 -0
  43. data/doc/rdoc/classes/Wee/CallbackRegistry.html +179 -155
  44. data/doc/rdoc/classes/Wee/Callbacks.html +262 -0
  45. data/doc/rdoc/classes/Wee/Component.html +228 -779
  46. data/doc/rdoc/classes/Wee/Decoration.html +144 -159
  47. data/doc/rdoc/classes/Wee/DecorationMixin.html +340 -0
  48. data/doc/rdoc/classes/Wee/Delegate.html +119 -76
  49. data/doc/rdoc/classes/Wee/DupReplaceSnapshotMixin.html +64 -47
  50. data/doc/rdoc/classes/Wee/ErrorResponse.html +59 -62
  51. data/doc/rdoc/classes/Wee/FormDecoration.html +51 -37
  52. data/doc/rdoc/classes/Wee/GenericResponse.html +60 -35
  53. data/doc/rdoc/classes/Wee/HtmlCanvas.html +1000 -602
  54. data/doc/rdoc/classes/Wee/HtmlDocument.html +288 -0
  55. data/doc/rdoc/classes/Wee/HtmlWriter.html +227 -126
  56. data/doc/rdoc/classes/Wee/IdGenerator.html +60 -31
  57. data/doc/rdoc/classes/Wee/IdGenerator/Secure.html +282 -0
  58. data/doc/rdoc/classes/Wee/{SimpleIdGenerator.html → IdGenerator/Sequential.html} +76 -49
  59. data/doc/rdoc/classes/Wee/JQuery.html +221 -0
  60. data/doc/rdoc/classes/Wee/LRUCache.html +514 -0
  61. data/doc/rdoc/classes/Wee/LRUCache/Item.html +158 -0
  62. data/doc/rdoc/classes/Wee/ObjectSnapshotMixin.html +187 -0
  63. data/doc/rdoc/classes/Wee/PageDecoration.html +88 -59
  64. data/doc/rdoc/classes/Wee/Presenter.html +124 -704
  65. data/doc/rdoc/classes/Wee/RedirectResponse.html +64 -33
  66. data/doc/rdoc/classes/Wee/RefreshResponse.html +59 -44
  67. data/doc/rdoc/classes/Wee/Renderer.html +234 -54
  68. data/doc/rdoc/classes/Wee/Request.html +151 -286
  69. data/doc/rdoc/classes/Wee/Response.html +29 -212
  70. data/doc/rdoc/classes/Wee/Session.html +585 -360
  71. data/doc/rdoc/classes/Wee/{StateHolder.html → Session/AbortCallbackProcessing.html} +67 -40
  72. data/doc/rdoc/classes/Wee/Session/MutexSerializer.html +166 -0
  73. data/doc/rdoc/classes/{Cache/Strategy/LFU/Item.html → Wee/Session/Page.html} +26 -27
  74. data/doc/rdoc/classes/Wee/Session/ThreadSerializer.html +219 -0
  75. data/doc/rdoc/classes/Wee/State.html +307 -0
  76. data/doc/rdoc/classes/{Cache/Strategy/LRU/Item.html → Wee/State/Snapshot.html} +26 -27
  77. data/doc/rdoc/classes/{Cache/Strategy/Unbounded/Item.html → Wee/State/SnapshotIVars.html} +26 -27
  78. data/doc/rdoc/classes/Wee/StructSnapshotMixin.html +183 -0
  79. data/doc/rdoc/classes/Wee/WrapperDecoration.html +101 -35
  80. data/doc/rdoc/created.rid +1 -1
  81. data/doc/rdoc/files/README_rdoc.html +243 -0
  82. data/doc/rdoc/files/lib/wee/application_rb.html +22 -30
  83. data/doc/rdoc/files/lib/wee/{page_rb.html → call_answer_rb.html} +14 -25
  84. data/doc/rdoc/files/lib/wee/callback_rb.html +12 -29
  85. data/doc/rdoc/files/lib/wee/component_rb.html +22 -27
  86. data/doc/rdoc/files/lib/wee/decoration_rb.html +19 -20
  87. data/doc/rdoc/files/lib/wee/{idgen_rb.html → html_brushes_rb.html} +14 -25
  88. data/doc/rdoc/files/lib/wee/html_canvas_rb.html +15 -23
  89. data/doc/rdoc/files/lib/wee/{abstractsession_rb.html → html_document_rb.html} +17 -25
  90. data/doc/rdoc/files/lib/wee/html_writer_rb.html +15 -23
  91. data/doc/rdoc/files/lib/wee/{webrick_rb.html → id_generator_rb.html} +19 -25
  92. data/doc/rdoc/files/lib/wee/{core/page_rb.html → jquery/jquery_rb.html} +14 -25
  93. data/doc/rdoc/files/lib/wee/{state_registry_rb.html → jquery_rb.html} +17 -27
  94. data/doc/rdoc/files/lib/{cache/cache_rb.html → wee/lru_cache_rb.html} +14 -25
  95. data/doc/rdoc/files/lib/wee/presenter_rb.html +12 -34
  96. data/doc/rdoc/files/lib/wee/{holder_rb.html → renderer_rb.html} +14 -25
  97. data/doc/rdoc/files/lib/wee/request_rb.html +18 -32
  98. data/doc/rdoc/files/lib/wee/response_rb.html +17 -24
  99. data/doc/rdoc/files/lib/wee/session_rb.html +21 -23
  100. data/doc/rdoc/files/lib/wee/state_rb.html +90 -0
  101. data/doc/rdoc/files/lib/wee_rb.html +48 -40
  102. data/doc/rdoc/fr_class_index.html +111 -75
  103. data/doc/rdoc/fr_file_index.html +46 -76
  104. data/doc/rdoc/fr_method_index.html +473 -480
  105. data/doc/rdoc/index.html +6 -9
  106. data/doc/rdoc/rdoc-style.css +210 -119
  107. data/examples/ObjectSpaceBrowser.rb +33 -23
  108. data/examples/ajax.rb +71 -0
  109. data/examples/continuations.rb +28 -0
  110. data/examples/demo.rb +92 -36
  111. data/examples/demo/calculator.rb +63 -0
  112. data/examples/demo/calendar.rb +42 -55
  113. data/examples/demo/counter.rb +38 -0
  114. data/{lib/wee/examples → examples/demo}/editable_counter.rb +11 -6
  115. data/examples/demo/example.rb +28 -24
  116. data/examples/demo/file_upload.rb +19 -0
  117. data/{lib/wee/components → examples/demo}/messagebox.rb +3 -3
  118. data/examples/demo/radio.rb +33 -0
  119. data/{lib/wee/examples → examples/demo}/window.rb +15 -10
  120. data/examples/hw.rb +3 -4
  121. data/{lib/wee/components → examples}/pager.rb +14 -14
  122. data/lib/wee.rb +48 -25
  123. data/lib/wee/application.rb +69 -131
  124. data/lib/wee/call_answer.rb +118 -0
  125. data/lib/wee/callback.rb +88 -0
  126. data/lib/wee/component.rb +141 -0
  127. data/lib/wee/decoration.rb +242 -0
  128. data/lib/wee/html_brushes.rb +725 -0
  129. data/lib/wee/html_canvas.rb +241 -0
  130. data/lib/wee/html_document.rb +45 -0
  131. data/lib/wee/html_writer.rb +71 -0
  132. data/lib/wee/id_generator.rb +70 -0
  133. data/lib/wee/jquery.rb +1 -0
  134. data/lib/wee/jquery/jquery.rb +17 -0
  135. data/lib/wee/jquery/public/jquery-1.3.2.min.js +19 -0
  136. data/lib/wee/jquery/public/wee-jquery.js +19 -0
  137. data/lib/wee/lru_cache.rb +89 -0
  138. data/lib/wee/presenter.rb +43 -0
  139. data/lib/wee/renderer.rb +65 -0
  140. data/lib/wee/request.rb +37 -113
  141. data/lib/wee/response.rb +43 -70
  142. data/lib/wee/session.rb +304 -113
  143. data/lib/wee/state.rb +85 -0
  144. data/test/component_spec.rb +17 -0
  145. data/wee.gemspec +4 -3
  146. metadata +249 -452
  147. data/ChangeLog +0 -657
  148. data/INSTALL +0 -17
  149. data/README +0 -272
  150. data/TODO +0 -142
  151. data/benchmark/Centrino1300/result.2000.counter.action +0 -45
  152. data/benchmark/Centrino1300/result.2000.counter.render +0 -43
  153. data/benchmark/Centrino1300/result.2000.filehandler +0 -43
  154. data/benchmark/Centrino600/result.2000.counter.action +0 -47
  155. data/benchmark/Centrino600/result.2000.counter.render +0 -45
  156. data/benchmark/Centrino600/result.2000.filehandler +0 -43
  157. data/benchmark/Makefile +0 -53
  158. data/benchmark/counter.rb +0 -77
  159. data/benchmark/filehandler.rb +0 -6
  160. data/benchmark/report_req.rb +0 -12
  161. data/bin/wee +0 -100
  162. data/doc/rdoc/classes/ActionView.html +0 -107
  163. data/doc/rdoc/classes/ActionView/Base.html +0 -133
  164. data/doc/rdoc/classes/Cache.html +0 -126
  165. data/doc/rdoc/classes/Cache/StorageCache.html +0 -320
  166. data/doc/rdoc/classes/Cache/Strategy.html +0 -128
  167. data/doc/rdoc/classes/Cache/Strategy/CapacityBounded.html +0 -269
  168. data/doc/rdoc/classes/Cache/Strategy/LFU.html +0 -238
  169. data/doc/rdoc/classes/Cache/Strategy/LRU.html +0 -238
  170. data/doc/rdoc/classes/Cache/Strategy/Unbounded.html +0 -225
  171. data/doc/rdoc/classes/LiteralMethod.html +0 -196
  172. data/doc/rdoc/classes/Main.html +0 -289
  173. data/doc/rdoc/classes/OgApplication.html +0 -126
  174. data/doc/rdoc/classes/OgScaffolder.html +0 -827
  175. data/doc/rdoc/classes/OgScaffolder/Editor.html +0 -565
  176. data/doc/rdoc/classes/OgSession.html +0 -172
  177. data/doc/rdoc/classes/Recipe.html +0 -113
  178. data/doc/rdoc/classes/Wee/AbstractSession.html +0 -502
  179. data/doc/rdoc/classes/Wee/Brush/ActionCallbackMixin.html +0 -148
  180. data/doc/rdoc/classes/Wee/Brush/ActionMixin.html +0 -146
  181. data/doc/rdoc/classes/Wee/Brush/ActionURLCallbackMixin.html +0 -154
  182. data/doc/rdoc/classes/Wee/Brush/AssignMixin.html +0 -141
  183. data/doc/rdoc/classes/Wee/Brush/CallbackMixin.html +0 -141
  184. data/doc/rdoc/classes/Wee/Brush/InputCallbackMixin.html +0 -148
  185. data/doc/rdoc/classes/Wee/Brush/SelectListTag/SelectListCallback.html +0 -158
  186. data/doc/rdoc/classes/Wee/Brush/ToCallback.html +0 -146
  187. data/doc/rdoc/classes/Wee/Callback.html +0 -231
  188. data/doc/rdoc/classes/Wee/CallbackStream.html +0 -227
  189. data/doc/rdoc/classes/Wee/Canvas.html +0 -235
  190. data/doc/rdoc/classes/Wee/CanvasMixin.html +0 -225
  191. data/doc/rdoc/classes/Wee/Component/OnAnswer.html +0 -153
  192. data/doc/rdoc/classes/Wee/ComponentDispatcher.html +0 -289
  193. data/doc/rdoc/classes/Wee/ComponentRunner.html +0 -321
  194. data/doc/rdoc/classes/Wee/ErrorPage.html +0 -175
  195. data/doc/rdoc/classes/Wee/Examples.html +0 -114
  196. data/doc/rdoc/classes/Wee/Examples/Calculator.html +0 -319
  197. data/doc/rdoc/classes/Wee/Examples/Counter.html +0 -289
  198. data/doc/rdoc/classes/Wee/Examples/EditableCounter.html +0 -210
  199. data/doc/rdoc/classes/Wee/Examples/Window.html +0 -346
  200. data/doc/rdoc/classes/Wee/FastCGIAdaptor.html +0 -227
  201. data/doc/rdoc/classes/Wee/Helper.html +0 -148
  202. data/doc/rdoc/classes/Wee/HtmlCanvasRenderer.html +0 -1230
  203. data/doc/rdoc/classes/Wee/LiteralMethodCallback.html +0 -198
  204. data/doc/rdoc/classes/Wee/LoginDecoration.html +0 -261
  205. data/doc/rdoc/classes/Wee/Md5IdGenerator.html +0 -181
  206. data/doc/rdoc/classes/Wee/MessageBox.html +0 -180
  207. data/doc/rdoc/classes/Wee/MethodCallback.html +0 -193
  208. data/doc/rdoc/classes/Wee/Nitro.html +0 -114
  209. data/doc/rdoc/classes/Wee/Nitro/ControllerClassMixin.html +0 -192
  210. data/doc/rdoc/classes/Wee/Nitro/ControllerMixin.html +0 -345
  211. data/doc/rdoc/classes/Wee/Nitro/FormTag.html +0 -155
  212. data/doc/rdoc/classes/Wee/Nitro/HtmlCanvasRenderer.html +0 -178
  213. data/doc/rdoc/classes/Wee/Page.html +0 -115
  214. data/doc/rdoc/classes/Wee/PagelessApplication.html +0 -154
  215. data/doc/rdoc/classes/Wee/PagelessComponentDriver.html +0 -296
  216. data/doc/rdoc/classes/Wee/PagelessRequest.html +0 -208
  217. data/doc/rdoc/classes/Wee/PagelessSession.html +0 -359
  218. data/doc/rdoc/classes/Wee/Pager.html +0 -534
  219. data/doc/rdoc/classes/Wee/Rails.html +0 -114
  220. data/doc/rdoc/classes/Wee/Rails/ControllerClassMixin.html +0 -192
  221. data/doc/rdoc/classes/Wee/Rails/ControllerMixin.html +0 -342
  222. data/doc/rdoc/classes/Wee/Rails/FormTag.html +0 -155
  223. data/doc/rdoc/classes/Wee/Rails/HtmlCanvasRenderer.html +0 -177
  224. data/doc/rdoc/classes/Wee/RenderingContext.html +0 -283
  225. data/doc/rdoc/classes/Wee/RequestHandler.html +0 -341
  226. data/doc/rdoc/classes/Wee/Snapshot.html +0 -211
  227. data/doc/rdoc/classes/Wee/StateRegistry.html +0 -434
  228. data/doc/rdoc/classes/Wee/StateRegistry/Snapshot.html +0 -320
  229. data/doc/rdoc/classes/Wee/StateRegistry/WithObject.html +0 -153
  230. data/doc/rdoc/classes/Wee/Utils.html +0 -300
  231. data/doc/rdoc/classes/Wee/ValueHolder.html +0 -220
  232. data/doc/rdoc/classes/Wee/WEBrickAdaptor.html +0 -368
  233. data/doc/rdoc/files/INSTALL.html +0 -130
  234. data/doc/rdoc/files/README.html +0 -471
  235. data/doc/rdoc/files/lib/wee/adaptors/fastcgi_rb.html +0 -108
  236. data/doc/rdoc/files/lib/wee/adaptors/nitro_rb.html +0 -101
  237. data/doc/rdoc/files/lib/wee/adaptors/rails_rb.html +0 -101
  238. data/doc/rdoc/files/lib/wee/adaptors/webrick_rb.html +0 -108
  239. data/doc/rdoc/files/lib/wee/component_ext_rb.html +0 -101
  240. data/doc/rdoc/files/lib/wee/components/component_dispatcher_rb.html +0 -108
  241. data/doc/rdoc/files/lib/wee/components/form_decoration_rb.html +0 -101
  242. data/doc/rdoc/files/lib/wee/components/login_decoration_rb.html +0 -101
  243. data/doc/rdoc/files/lib/wee/components/messagebox_rb.html +0 -101
  244. data/doc/rdoc/files/lib/wee/components/page_decoration_rb.html +0 -101
  245. data/doc/rdoc/files/lib/wee/components/pager_rb.html +0 -101
  246. data/doc/rdoc/files/lib/wee/components/wrapper_decoration_rb.html +0 -101
  247. data/doc/rdoc/files/lib/wee/components_rb.html +0 -114
  248. data/doc/rdoc/files/lib/wee/context_rb.html +0 -101
  249. data/doc/rdoc/files/lib/wee/continuation/core/component_rb.html +0 -101
  250. data/doc/rdoc/files/lib/wee/continuation/session_rb.html +0 -108
  251. data/doc/rdoc/files/lib/wee/continuation_rb.html +0 -116
  252. data/doc/rdoc/files/lib/wee/core/callback_rb.html +0 -115
  253. data/doc/rdoc/files/lib/wee/core/component_rb.html +0 -108
  254. data/doc/rdoc/files/lib/wee/core/componentrunner_rb.html +0 -110
  255. data/doc/rdoc/files/lib/wee/core/context_rb.html +0 -101
  256. data/doc/rdoc/files/lib/wee/core/decoration_rb.html +0 -133
  257. data/doc/rdoc/files/lib/wee/core/idgen_rb.html +0 -101
  258. data/doc/rdoc/files/lib/wee/core/presenter_rb.html +0 -112
  259. data/doc/rdoc/files/lib/wee/core/renderer_rb.html +0 -107
  260. data/doc/rdoc/files/lib/wee/core/snapshot_rb.html +0 -113
  261. data/doc/rdoc/files/lib/wee/core/valueholder_rb.html +0 -110
  262. data/doc/rdoc/files/lib/wee/core_ext_rb.html +0 -101
  263. data/doc/rdoc/files/lib/wee/core_rb.html +0 -124
  264. data/doc/rdoc/files/lib/wee/databases/og/application_rb.html +0 -101
  265. data/doc/rdoc/files/lib/wee/databases/og/old_scaffolder_rb.html +0 -101
  266. data/doc/rdoc/files/lib/wee/databases/og/scaffolder_rb.html +0 -115
  267. data/doc/rdoc/files/lib/wee/databases/og/session_rb.html +0 -101
  268. data/doc/rdoc/files/lib/wee/databases/og_rb.html +0 -111
  269. data/doc/rdoc/files/lib/wee/examples/calculator_rb.html +0 -107
  270. data/doc/rdoc/files/lib/wee/examples/counter_rb.html +0 -101
  271. data/doc/rdoc/files/lib/wee/examples/editable_counter_rb.html +0 -114
  272. data/doc/rdoc/files/lib/wee/examples/window_rb.html +0 -101
  273. data/doc/rdoc/files/lib/wee/idgen/md5_rb.html +0 -115
  274. data/doc/rdoc/files/lib/wee/idgen/simple_rb.html +0 -107
  275. data/doc/rdoc/files/lib/wee/pageless/application_rb.html +0 -108
  276. data/doc/rdoc/files/lib/wee/pageless/request_rb.html +0 -101
  277. data/doc/rdoc/files/lib/wee/pageless/session_rb.html +0 -109
  278. data/doc/rdoc/files/lib/wee/pageless_rb.html +0 -110
  279. data/doc/rdoc/files/lib/wee/renderer/html/brushes_rb.html +0 -101
  280. data/doc/rdoc/files/lib/wee/renderer/html/canvas_rb.html +0 -108
  281. data/doc/rdoc/files/lib/wee/renderer/html/writer_rb.html +0 -108
  282. data/doc/rdoc/files/lib/wee/rendering/html/brushes_rb.html +0 -101
  283. data/doc/rdoc/files/lib/wee/rendering/html/canvas_rb.html +0 -101
  284. data/doc/rdoc/files/lib/wee/rendering/html/writer_rb.html +0 -108
  285. data/doc/rdoc/files/lib/wee/requesthandler_rb.html +0 -101
  286. data/doc/rdoc/files/lib/wee/skeleton/og/components/main_rb.html +0 -101
  287. data/doc/rdoc/files/lib/wee/skeleton/og/conf/db_rb.html +0 -114
  288. data/doc/rdoc/files/lib/wee/skeleton/og/models/recipe_rb.html +0 -101
  289. data/doc/rdoc/files/lib/wee/skeleton/og/run_rb.html +0 -115
  290. data/doc/rdoc/files/lib/wee/skeleton/simple/components/main_rb.html +0 -101
  291. data/doc/rdoc/files/lib/wee/skeleton/simple/run_rb.html +0 -111
  292. data/doc/rdoc/files/lib/wee/snapshot_ext_rb.html +0 -101
  293. data/doc/rdoc/files/lib/wee/snapshot_rb.html +0 -107
  294. data/doc/rdoc/files/lib/wee/stuff_rb.html +0 -144
  295. data/doc/rdoc/files/lib/wee/template_rb.html +0 -101
  296. data/doc/rdoc/files/lib/wee/utils/autoreload_rb.html +0 -101
  297. data/doc/rdoc/files/lib/wee/utils/cache_rb.html +0 -108
  298. data/doc/rdoc/files/lib/wee/utils/helper_rb.html +0 -101
  299. data/doc/rdoc/files/lib/wee/utils_rb.html +0 -110
  300. data/examples/ajax/ajax.js +0 -444
  301. data/examples/ajax/ajax.rb +0 -31
  302. data/examples/cc.rb +0 -74
  303. data/examples/dispatcher.rb +0 -37
  304. data/examples/draw.rb +0 -94
  305. data/examples/live-update.rb +0 -45
  306. data/examples/nitro/run.rb +0 -42
  307. data/examples/og-test.rb +0 -60
  308. data/examples/radio.rb +0 -44
  309. data/examples/test.rb +0 -39
  310. data/install.rb +0 -14
  311. data/lib/cache/cache.rb +0 -167
  312. data/lib/wee/abstractsession.rb +0 -96
  313. data/lib/wee/adaptors/fastcgi.rb +0 -76
  314. data/lib/wee/adaptors/nitro.rb +0 -155
  315. data/lib/wee/adaptors/rails.rb +0 -154
  316. data/lib/wee/adaptors/webrick.rb +0 -89
  317. data/lib/wee/components.rb +0 -7
  318. data/lib/wee/components/component_dispatcher.rb +0 -46
  319. data/lib/wee/components/form_decoration.rb +0 -7
  320. data/lib/wee/components/login_decoration.rb +0 -35
  321. data/lib/wee/components/page_decoration.rb +0 -14
  322. data/lib/wee/components/wrapper_decoration.rb +0 -7
  323. data/lib/wee/continuation.rb +0 -5
  324. data/lib/wee/continuation/core/component.rb +0 -56
  325. data/lib/wee/continuation/session.rb +0 -64
  326. data/lib/wee/core.rb +0 -16
  327. data/lib/wee/core/callback.rb +0 -121
  328. data/lib/wee/core/component.rb +0 -356
  329. data/lib/wee/core/componentrunner.rb +0 -73
  330. data/lib/wee/core/context.rb +0 -27
  331. data/lib/wee/core/decoration.rb +0 -138
  332. data/lib/wee/core/idgen.rb +0 -5
  333. data/lib/wee/core/page.rb +0 -1
  334. data/lib/wee/core/presenter.rb +0 -100
  335. data/lib/wee/core/renderer.rb +0 -23
  336. data/lib/wee/core/snapshot.rb +0 -21
  337. data/lib/wee/core/valueholder.rb +0 -19
  338. data/lib/wee/core_ext.rb +0 -122
  339. data/lib/wee/databases/og.rb +0 -4
  340. data/lib/wee/databases/og/application.rb +0 -3
  341. data/lib/wee/databases/og/old_scaffolder.rb +0 -98
  342. data/lib/wee/databases/og/scaffolder.rb +0 -255
  343. data/lib/wee/databases/og/session.rb +0 -9
  344. data/lib/wee/examples/calculator.rb +0 -70
  345. data/lib/wee/examples/counter.rb +0 -33
  346. data/lib/wee/idgen/md5.rb +0 -21
  347. data/lib/wee/idgen/sequential.rb +0 -11
  348. data/lib/wee/pageless.rb +0 -3
  349. data/lib/wee/pageless/application.rb +0 -13
  350. data/lib/wee/pageless/request.rb +0 -27
  351. data/lib/wee/pageless/session.rb +0 -74
  352. data/lib/wee/renderer/html/brushes.rb +0 -667
  353. data/lib/wee/renderer/html/canvas.rb +0 -265
  354. data/lib/wee/renderer/html/writer.rb +0 -80
  355. data/lib/wee/requesthandler.rb +0 -81
  356. data/lib/wee/skeleton/og/README +0 -38
  357. data/lib/wee/skeleton/og/components/main.rb +0 -20
  358. data/lib/wee/skeleton/og/conf/db.rb +0 -8
  359. data/lib/wee/skeleton/og/models/recipe.rb +0 -5
  360. data/lib/wee/skeleton/og/run.rb +0 -23
  361. data/lib/wee/skeleton/simple/README +0 -32
  362. data/lib/wee/skeleton/simple/components/main.rb +0 -25
  363. data/lib/wee/skeleton/simple/run.rb +0 -12
  364. data/lib/wee/snapshot_ext.rb +0 -41
  365. data/lib/wee/template.rb +0 -42
  366. data/lib/wee/utils.rb +0 -5
  367. data/lib/wee/utils/autoreload.rb +0 -56
  368. data/lib/wee/utils/cache.rb +0 -7
  369. data/lib/wee/utils/helper.rb +0 -51
@@ -1,12 +1,9 @@
1
- <?xml version="1.0" encoding="iso-8859-1"?>
2
- <!DOCTYPE html
3
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
-
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
6
3
  <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7
4
  <head>
8
- <title>Class: Wee::Response</title>
9
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
5
+ <title>Class: Wee::Response [RDoc Documentation]</title>
6
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
10
7
  <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
8
  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
12
9
  <script type="text/javascript">
@@ -25,7 +22,7 @@
25
22
  return false;
26
23
 
27
24
  elemStyle = elem.style;
28
-
25
+
29
26
  if ( elemStyle.display != "block" ) {
30
27
  elemStyle.display = "block"
31
28
  } else {
@@ -34,10 +31,10 @@
34
31
 
35
32
  return true;
36
33
  }
37
-
34
+
38
35
  // Make codeblocks hidden by default
39
- document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
40
-
36
+ document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }<\/style>" )
37
+
41
38
  // ]]>
42
39
  </script>
43
40
 
@@ -45,7 +42,6 @@
45
42
  <body>
46
43
 
47
44
 
48
-
49
45
  <div id="classHeader">
50
46
  <table class="header-table">
51
47
  <tr class="top-aligned-row">
@@ -55,255 +51,76 @@
55
51
  <tr class="top-aligned-row">
56
52
  <td><strong>In:</strong></td>
57
53
  <td>
54
+
55
+
58
56
  <a href="../../files/lib/wee/response_rb.html">
57
+
59
58
  lib/wee/response.rb
59
+
60
60
  </a>
61
+
62
+
61
63
  <br />
64
+
62
65
  </td>
63
66
  </tr>
64
67
 
68
+
65
69
  <tr class="top-aligned-row">
66
70
  <td><strong>Parent:</strong></td>
67
71
  <td>
68
- <a href="../Object.html">
69
- Object
70
- </a>
72
+
73
+ Rack::Response
74
+
71
75
  </td>
72
76
  </tr>
77
+
73
78
  </table>
74
79
  </div>
75
80
  <!-- banner header -->
76
81
 
77
82
  <div id="bodyContent">
78
83
 
79
-
80
-
81
84
  <div id="contextContent">
82
85
 
83
-
84
-
85
86
  </div>
86
87
 
87
- <div id="method-list">
88
- <h3 class="section-bar">Methods</h3>
89
-
90
- <div class="name-list">
91
- <a href="#M000292">&lt;&lt;</a>&nbsp;&nbsp;
92
- <a href="#M000290">content_type</a>&nbsp;&nbsp;
93
- <a href="#M000291">content_type=</a>&nbsp;&nbsp;
94
- <a href="#M000288">cookies</a>&nbsp;&nbsp;
95
- <a href="#M000287">cookies?</a>&nbsp;&nbsp;
96
- <a href="#M000289">new</a>&nbsp;&nbsp;
97
- </div>
98
- </div>
99
88
 
100
89
  </div>
101
90
 
102
-
103
91
  <!-- if includes -->
104
92
 
105
93
  <div id="section">
106
94
 
107
-
108
- <div id="constants-list">
109
- <h3 class="section-bar">Constants</h3>
95
+ <div id="aliases-list">
96
+ <h3 class="section-bar">External Aliases</h3>
110
97
 
111
98
  <div class="name-list">
112
- <table summary="Constants">
113
- <tr class="top-aligned-row context-row">
114
- <td class="context-item-name">DEFAULT_HEADER</td>
115
- <td>=</td>
116
- <td class="context-item-value">{}.freeze</td>
117
- </tr>
118
- </table>
119
- </div>
120
- </div>
121
-
122
-
123
-
124
- <div id="attribute-list">
125
- <h3 class="section-bar">Attributes</h3>
99
+ <table summary="aliases">
126
100
 
127
- <div class="name-list">
128
- <table>
129
- <tr class="top-aligned-row context-row">
130
- <td class="context-item-name">content</td>
131
- <td class="context-item-value">&nbsp;[RW]&nbsp;</td>
132
- <td class="context-item-desc"></td>
133
- </tr>
134
101
  <tr class="top-aligned-row context-row">
135
- <td class="context-item-name">header</td>
136
- <td class="context-item-value">&nbsp;[R]&nbsp;</td>
137
- <td class="context-item-desc"></td>
138
- </tr>
139
- <tr class="top-aligned-row context-row">
140
- <td class="context-item-name">status</td>
141
- <td class="context-item-value">&nbsp;[RW]&nbsp;</td>
142
- <td class="context-item-desc"></td>
102
+ <td class="context-item-name">write</td>
103
+ <td>-&gt;</td>
104
+ <td class="context-item-value"><<</td>
143
105
  </tr>
106
+
144
107
  </table>
145
108
  </div>
146
109
  </div>
147
-
148
110
 
149
111
 
150
- <!-- if method_list -->
151
- <div id="methods">
152
- <h3 class="section-bar">Public Class methods</h3>
153
-
154
- <div id="method-M000289" class="method-detail">
155
- <a name="M000289"></a>
156
-
157
- <div class="method-heading">
158
- <a href="#M000289" class="method-signature">
159
- <span class="method-name">new</span><span class="method-args">(mime_type = 'text/html', content='')</span>
160
- </a>
161
- </div>
162
-
163
- <div class="method-description">
164
- <p><a class="source-toggle" href="#"
165
- onclick="toggleCode('M000289-source');return false;">[Source]</a></p>
166
- <div class="method-source-code" id="M000289-source">
167
- <pre>
168
- <span class="ruby-comment cmt"># File lib/wee/response.rb, line 18</span>
169
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">mime_type</span> = <span class="ruby-value str">'text/html'</span>, <span class="ruby-identifier">content</span>=<span class="ruby-value str">''</span>)
170
- <span class="ruby-ivar">@status</span> = <span class="ruby-value">200</span>
171
- <span class="ruby-ivar">@header</span> = <span class="ruby-constant">DEFAULT_HEADER</span>.<span class="ruby-identifier">dup</span>
172
- <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">content_type</span> = <span class="ruby-identifier">mime_type</span>
173
- <span class="ruby-ivar">@content</span> = <span class="ruby-identifier">content</span>
174
- <span class="ruby-keyword kw">end</span>
175
- </pre>
176
- </div>
177
- </div>
178
- </div>
179
-
180
- <h3 class="section-bar">Public Instance methods</h3>
181
-
182
- <div id="method-M000292" class="method-detail">
183
- <a name="M000292"></a>
184
-
185
- <div class="method-heading">
186
- <a href="#M000292" class="method-signature">
187
- <span class="method-name">&lt;&lt;</span><span class="method-args">(str)</span>
188
- </a>
189
- </div>
190
-
191
- <div class="method-description">
192
- <p><a class="source-toggle" href="#"
193
- onclick="toggleCode('M000292-source');return false;">[Source]</a></p>
194
- <div class="method-source-code" id="M000292-source">
195
- <pre>
196
- <span class="ruby-comment cmt"># File lib/wee/response.rb, line 33</span>
197
- <span class="ruby-keyword kw">def</span> <span class="ruby-operator">&lt;&lt;</span>(<span class="ruby-identifier">str</span>)
198
- <span class="ruby-ivar">@content</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">str</span>
199
- <span class="ruby-keyword kw">end</span>
200
- </pre>
201
- </div>
202
- </div>
203
- </div>
204
112
 
205
- <div id="method-M000290" class="method-detail">
206
- <a name="M000290"></a>
207
-
208
- <div class="method-heading">
209
- <a href="#M000290" class="method-signature">
210
- <span class="method-name">content_type</span><span class="method-args">()</span>
211
- </a>
212
- </div>
213
-
214
- <div class="method-description">
215
- <p><a class="source-toggle" href="#"
216
- onclick="toggleCode('M000290-source');return false;">[Source]</a></p>
217
- <div class="method-source-code" id="M000290-source">
218
- <pre>
219
- <span class="ruby-comment cmt"># File lib/wee/response.rb, line 25</span>
220
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">content_type</span>
221
- <span class="ruby-ivar">@header</span>[<span class="ruby-value str">'Content-Type'</span>]
222
- <span class="ruby-keyword kw">end</span>
223
- </pre>
224
- </div>
225
- </div>
226
- </div>
227
-
228
- <div id="method-M000291" class="method-detail">
229
- <a name="M000291"></a>
230
-
231
- <div class="method-heading">
232
- <a href="#M000291" class="method-signature">
233
- <span class="method-name">content_type=</span><span class="method-args">(mime_type)</span>
234
- </a>
235
- </div>
236
-
237
- <div class="method-description">
238
- <p><a class="source-toggle" href="#"
239
- onclick="toggleCode('M000291-source');return false;">[Source]</a></p>
240
- <div class="method-source-code" id="M000291-source">
241
- <pre>
242
- <span class="ruby-comment cmt"># File lib/wee/response.rb, line 29</span>
243
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">content_type=</span>(<span class="ruby-identifier">mime_type</span>)
244
- <span class="ruby-ivar">@header</span>[<span class="ruby-value str">'Content-Type'</span>] = <span class="ruby-identifier">mime_type</span>
245
- <span class="ruby-keyword kw">end</span>
246
- </pre>
247
- </div>
248
- </div>
249
- </div>
250
113
 
251
- <div id="method-M000288" class="method-detail">
252
- <a name="M000288"></a>
253
-
254
- <div class="method-heading">
255
- <a href="#M000288" class="method-signature">
256
- <span class="method-name">cookies</span><span class="method-args">()</span>
257
- </a>
258
- </div>
259
-
260
- <div class="method-description">
261
- <p><a class="source-toggle" href="#"
262
- onclick="toggleCode('M000288-source');return false;">[Source]</a></p>
263
- <div class="method-source-code" id="M000288-source">
264
- <pre>
265
- <span class="ruby-comment cmt"># File lib/wee/response.rb, line 14</span>
266
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">cookies</span>
267
- <span class="ruby-ivar">@cookies</span> <span class="ruby-operator">||=</span> []
268
- <span class="ruby-keyword kw">end</span>
269
- </pre>
270
- </div>
271
- </div>
272
- </div>
273
-
274
- <div id="method-M000287" class="method-detail">
275
- <a name="M000287"></a>
276
-
277
- <div class="method-heading">
278
- <a href="#M000287" class="method-signature">
279
- <span class="method-name">cookies?</span><span class="method-args">()</span>
280
- </a>
281
- </div>
282
-
283
- <div class="method-description">
284
- <p><a class="source-toggle" href="#"
285
- onclick="toggleCode('M000287-source');return false;">[Source]</a></p>
286
- <div class="method-source-code" id="M000287-source">
287
- <pre>
288
- <span class="ruby-comment cmt"># File lib/wee/response.rb, line 10</span>
289
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">cookies?</span>
290
- <span class="ruby-ivar">@cookies</span>
291
- <span class="ruby-keyword kw">end</span>
292
- </pre>
293
- </div>
294
- </div>
295
- </div>
114
+ <!-- if method_list -->
296
115
 
297
116
 
298
- </div>
299
117
 
300
118
 
301
119
  </div>
302
120
 
303
-
304
121
  <div id="validator-badges">
305
122
  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
306
123
  </div>
307
124
 
308
125
  </body>
309
- </html>
126
+ </html>
@@ -1,12 +1,9 @@
1
- <?xml version="1.0" encoding="iso-8859-1"?>
2
- <!DOCTYPE html
3
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
-
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
6
3
  <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7
4
  <head>
8
- <title>Class: Wee::Session</title>
9
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
5
+ <title>Class: Wee::Session [RDoc Documentation]</title>
6
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
10
7
  <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
8
  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
12
9
  <script type="text/javascript">
@@ -25,7 +22,7 @@
25
22
  return false;
26
23
 
27
24
  elemStyle = elem.style;
28
-
25
+
29
26
  if ( elemStyle.display != "block" ) {
30
27
  elemStyle.display = "block"
31
28
  } else {
@@ -34,10 +31,10 @@
34
31
 
35
32
  return true;
36
33
  }
37
-
34
+
38
35
  // Make codeblocks hidden by default
39
- document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
40
-
36
+ document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }<\/style>" )
37
+
41
38
  // ]]>
42
39
  </script>
43
40
 
@@ -45,7 +42,6 @@
45
42
  <body>
46
43
 
47
44
 
48
-
49
45
  <div id="classHeader">
50
46
  <table class="header-table">
51
47
  <tr class="top-aligned-row">
@@ -55,75 +51,98 @@
55
51
  <tr class="top-aligned-row">
56
52
  <td><strong>In:</strong></td>
57
53
  <td>
54
+
55
+
58
56
  <a href="../../files/lib/wee/session_rb.html">
57
+
59
58
  lib/wee/session.rb
59
+
60
60
  </a>
61
+
62
+
61
63
  <br />
62
- <a href="../../files/lib/wee/continuation/session_rb.html">
63
- lib/wee/continuation/session.rb
64
- </a>
65
- <br />
64
+
66
65
  </td>
67
66
  </tr>
68
67
 
68
+
69
69
  <tr class="top-aligned-row">
70
70
  <td><strong>Parent:</strong></td>
71
71
  <td>
72
- <a href="AbstractSession.html">
73
- Wee::AbstractSession
72
+
73
+ <a href="../Object.html">
74
+
75
+ Object
76
+
74
77
  </a>
78
+
75
79
  </td>
76
80
  </tr>
81
+
77
82
  </table>
78
83
  </div>
79
84
  <!-- banner header -->
80
85
 
81
86
  <div id="bodyContent">
82
87
 
83
-
84
-
85
88
  <div id="contextContent">
86
89
 
87
-
88
-
89
- <div id="contents-list">
90
- <h3 class="section-bar">Contents</h3>
91
- <ul>
92
- <li><a href="#SEC00015">Request processing/handling</a></li>
93
- </ul>
94
90
  </div>
95
91
 
92
+
96
93
  <div id="method-list">
97
94
  <h3 class="section-bar">Methods</h3>
98
95
 
99
96
  <div class="name-list">
100
- <a href="#M000278">create_page</a>&nbsp;&nbsp;
101
- <a href="#M000266">current_callbacks</a>&nbsp;&nbsp;
102
- <a href="#M000273">handle_callback_phase</a>&nbsp;&nbsp;
103
- <a href="#M000270">handle_existing_page</a>&nbsp;&nbsp;
104
- <a href="#M000271">handle_invalid_page</a>&nbsp;&nbsp;
105
- <a href="#M000269">handle_new_page</a>&nbsp;&nbsp;
106
- <a href="#M000274">handle_new_page_view</a>&nbsp;&nbsp;
107
- <a href="#M000272">handle_render_phase</a>&nbsp;&nbsp;
108
- <a href="#M000265">new</a>&nbsp;&nbsp;
109
- <a href="#M000279">new</a>&nbsp;&nbsp;
110
- <a href="#M000277">post_callbacks_hook</a>&nbsp;&nbsp;
111
- <a href="#M000276">pre_respond_hook</a>&nbsp;&nbsp;
112
- <a href="#M000268">process_request</a>&nbsp;&nbsp;
113
- <a href="#M000275">respond</a>&nbsp;&nbsp;
114
- <a href="#M000267">setup</a>&nbsp;&nbsp;
115
- <a href="#M000280">start_request_response_loop</a>&nbsp;&nbsp;
97
+
98
+ <a href="#M000033">action</a>&nbsp;&nbsp;
99
+
100
+ <a href="#M000022">alive?</a>&nbsp;&nbsp;
101
+
102
+ <a href="#M000028">awake</a>&nbsp;&nbsp;
103
+
104
+ <a href="#M000026">call</a>&nbsp;&nbsp;
105
+
106
+ <a href="#M000025">current</a>&nbsp;&nbsp;
107
+
108
+ <a href="#M000023">dead?</a>&nbsp;&nbsp;
109
+
110
+ <a href="#M000030">handle</a>&nbsp;&nbsp;
111
+
112
+ <a href="#M000020">new</a>&nbsp;&nbsp;
113
+
114
+ <a href="#M000032">render</a>&nbsp;&nbsp;
115
+
116
+ <a href="#M000031">render_ajax_proc</a>&nbsp;&nbsp;
117
+
118
+ <a href="#M000027">send_response</a>&nbsp;&nbsp;
119
+
120
+ <a href="#M000029">sleep</a>&nbsp;&nbsp;
121
+
122
+ <a href="#M000024">statistics</a>&nbsp;&nbsp;
123
+
124
+ <a href="#M000034">take_snapshot</a>&nbsp;&nbsp;
125
+
126
+ <a href="#M000021">terminate</a>&nbsp;&nbsp;
127
+
116
128
  </div>
117
129
  </div>
118
130
 
119
131
  </div>
120
132
 
121
-
122
133
  <!-- if includes -->
123
134
 
124
135
  <div id="section">
125
136
 
137
+ <div id="class-list">
138
+ <h3 class="section-bar">Classes and Modules</h3>
126
139
 
140
+ Class <a href="Session/AbortCallbackProcessing.html" class="link">Wee::Session::AbortCallbackProcessing</a><br />
141
+ Class <a href="Session/MutexSerializer.html" class="link">Wee::Session::MutexSerializer</a><br />
142
+ Class <a href="Session/Page.html" class="link">Wee::Session::Page</a><br />
143
+ Class <a href="Session/ThreadSerializer.html" class="link">Wee::Session::ThreadSerializer</a><br />
144
+
145
+ </div>
127
146
 
128
147
 
129
148
 
@@ -132,548 +151,754 @@
132
151
 
133
152
  <div class="name-list">
134
153
  <table>
154
+
155
+ <tr class="top-aligned-row context-row">
156
+ <td class="context-item-name">application</td>
157
+
158
+ <td class="context-item-value">&nbsp;[RW]&nbsp;</td>
159
+
160
+ <td class="context-item-desc">
161
+ Points to the <a href="Application.html">Wee::Application</a> object this
162
+ session belongs to.
163
+
164
+ </td>
165
+ </tr>
166
+
167
+ <tr class="top-aligned-row context-row">
168
+ <td class="context-item-name">expire_after</td>
169
+
170
+ <td class="context-item-value">&nbsp;[RW]&nbsp;</td>
171
+
172
+ <td class="context-item-desc">
173
+ Expire the session after this number of seconds of inactivity. If this
174
+ value is <tt>nil</tt>, the <a href="Session.html">Session</a> will never
175
+ expire due to inactivity. (but still may expire for example due to
176
+ <em>max_lifetime</em>).
177
+
178
+ <p>
179
+ Default: <tt>1800</tt> seconds (30 minutes)
180
+ </p>
181
+ </td>
182
+ </tr>
183
+
135
184
  <tr class="top-aligned-row context-row">
136
- <td class="context-item-name">component_runner</td>
185
+ <td class="context-item-name">id</td>
186
+
187
+ <td class="context-item-value">&nbsp;[RW]&nbsp;</td>
188
+
189
+ <td class="context-item-desc">
190
+ The (application-wide) unique id of this session.
191
+
192
+ </td>
193
+ </tr>
194
+
195
+ <tr class="top-aligned-row context-row">
196
+ <td class="context-item-name">max_lifetime</td>
197
+
137
198
  <td class="context-item-value">&nbsp;[RW]&nbsp;</td>
138
- <td class="context-item-desc"></td>
199
+
200
+ <td class="context-item-desc">
201
+ The maximum lifetime of this session in seconds. A value of <tt>nil</tt>
202
+ means infinite lifetime.
203
+
204
+ <p>
205
+ Default: <tt>nil</tt> (infinite lifetime)
206
+ </p>
207
+ </td>
139
208
  </tr>
209
+
140
210
  <tr class="top-aligned-row context-row">
141
- <td class="context-item-name">page_store</td>
211
+ <td class="context-item-name">max_requests</td>
212
+
142
213
  <td class="context-item-value">&nbsp;[RW]&nbsp;</td>
143
- <td class="context-item-desc"></td>
214
+
215
+ <td class="context-item-desc">
216
+ The maximum number of requests this session is allowed to serve. A value of
217
+ <tt>nil</tt> means no limitation.
218
+
219
+ <p>
220
+ Default: <tt>nil</tt> (infinite number of requests)
221
+ </p>
222
+ </td>
144
223
  </tr>
224
+
145
225
  </table>
146
226
  </div>
147
227
  </div>
148
-
149
228
 
150
229
 
151
230
  <!-- if method_list -->
231
+
152
232
  <div id="methods">
233
+
153
234
  <h3 class="section-bar">Public Class methods</h3>
154
235
 
155
- <div id="method-M000265" class="method-detail">
156
- <a name="M000265"></a>
236
+
237
+ <div id="method-M000025" class="method-detail">
238
+ <a name="M000025"></a>
157
239
 
158
240
  <div class="method-heading">
159
- <a href="#M000265" class="method-signature">
160
- <span class="method-name">new</span><span class="method-args">(&amp;block)</span>
241
+
242
+ <a href="#M000025" class="method-signature">
243
+
244
+ <span class="method-name">current</span><span class="method-args">()</span>
245
+
161
246
  </a>
247
+
162
248
  </div>
163
-
249
+
164
250
  <div class="method-description">
251
+
252
+ <p>
253
+ Returns the current session (thread-local).
254
+ </p>
255
+
165
256
  <p><a class="source-toggle" href="#"
166
- onclick="toggleCode('M000265-source');return false;">[Source]</a></p>
167
- <div class="method-source-code" id="M000265-source">
257
+ onclick="toggleCode('M000025-source');return false;">[Source]</a></p>
258
+ <div class="method-source-code" id="M000025-source">
168
259
  <pre>
169
- <span class="ruby-comment cmt"># File lib/wee/session.rb, line 8</span>
170
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
171
- <span class="ruby-keyword kw">super</span>()
172
- <span class="ruby-identifier">setup</span>(<span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
173
- <span class="ruby-keyword kw">end</span>
260
+ <span class="ruby-comment cmt"># File lib/wee/session.rb, line 159</span>
261
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">current</span>
262
+ <span class="ruby-constant">Thread</span>.<span class="ruby-identifier">current</span>[<span class="ruby-identifier">:wee_session</span>] <span class="ruby-operator">||</span> (<span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Not in session&quot;</span>)
263
+ <span class="ruby-keyword kw">end</span>
174
264
  </pre>
175
265
  </div>
266
+
176
267
  </div>
177
268
  </div>
178
269
 
179
- <h3 class="section-bar">Public Instance methods</h3>
180
270
 
181
- <div id="method-M000266" class="method-detail">
182
- <a name="M000266"></a>
271
+ <div id="method-M000020" class="method-detail">
272
+ <a name="M000020"></a>
183
273
 
184
274
  <div class="method-heading">
185
- <a href="#M000266" class="method-signature">
186
- <span class="method-name">current_callbacks</span><span class="method-args">()</span>
275
+
276
+ <a href="#M000020" class="method-signature">
277
+
278
+ <span class="method-name">new</span><span class="method-args">(root_component, serializer=nil, page_cache_capacity=20)</span>
279
+
187
280
  </a>
281
+
188
282
  </div>
189
-
283
+
190
284
  <div class="method-description">
285
+
286
+ <p>
287
+ Creates a new session.
288
+ </p>
289
+
191
290
  <p><a class="source-toggle" href="#"
192
- onclick="toggleCode('M000266-source');return false;">[Source]</a></p>
193
- <div class="method-source-code" id="M000266-source">
291
+ onclick="toggleCode('M000020-source');return false;">[Source]</a></p>
292
+ <div class="method-source-code" id="M000020-source">
194
293
  <pre>
195
- <span class="ruby-comment cmt"># File lib/wee/session.rb, line 13</span>
196
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">current_callbacks</span>
197
- <span class="ruby-ivar">@page</span>.<span class="ruby-identifier">callbacks</span>
198
- <span class="ruby-keyword kw">end</span>
294
+ <span class="ruby-comment cmt"># File lib/wee/session.rb, line 95</span>
295
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">root_component</span>, <span class="ruby-identifier">serializer</span>=<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">page_cache_capacity</span>=<span class="ruby-value">20</span>)
296
+ <span class="ruby-ivar">@root_component</span> = <span class="ruby-identifier">root_component</span>
297
+ <span class="ruby-ivar">@page_cache</span> = <span class="ruby-constant">Wee</span><span class="ruby-operator">::</span><span class="ruby-constant">LRUCache</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">page_cache_capacity</span>)
298
+ <span class="ruby-ivar">@page_ids</span> = <span class="ruby-constant">Wee</span><span class="ruby-operator">::</span><span class="ruby-constant">IdGenerator</span><span class="ruby-operator">::</span><span class="ruby-constant">Sequential</span>.<span class="ruby-identifier">new</span>
299
+ <span class="ruby-ivar">@current_page</span> = <span class="ruby-keyword kw">nil</span>
300
+
301
+ <span class="ruby-ivar">@running</span> = <span class="ruby-keyword kw">true</span>
302
+
303
+ <span class="ruby-ivar">@expire_after</span> = <span class="ruby-value">30</span><span class="ruby-operator">*</span><span class="ruby-value">60</span>
304
+ <span class="ruby-ivar">@max_lifetime</span> = <span class="ruby-keyword kw">nil</span>
305
+ <span class="ruby-ivar">@max_requests</span> = <span class="ruby-keyword kw">nil</span>
306
+
307
+ <span class="ruby-ivar">@last_access</span> = <span class="ruby-ivar">@creation_time</span> = <span class="ruby-constant">Time</span>.<span class="ruby-identifier">now</span>
308
+ <span class="ruby-ivar">@request_count</span> = <span class="ruby-value">0</span>
309
+
310
+ <span class="ruby-ivar">@serializer</span> = <span class="ruby-identifier">serializer</span> <span class="ruby-operator">||</span> <span class="ruby-constant">MutexSerializer</span>.<span class="ruby-identifier">new</span>
311
+ <span class="ruby-keyword kw">end</span>
199
312
  </pre>
200
313
  </div>
314
+
201
315
  </div>
202
316
  </div>
203
317
 
204
318
 
205
- </div>
206
- <div id="section">
207
- <h2 class="section-title"><a name="SEC00015">Request processing/handling</a></h2>
208
- <div class="section-comment">
209
-
210
- </div>
211
-
212
-
213
-
319
+ <h3 class="section-bar">Public Instance methods</h3>
214
320
 
215
321
 
216
-
322
+ <div id="method-M000022" class="method-detail">
323
+ <a name="M000022"></a>
217
324
 
325
+ <div class="method-heading">
218
326
 
219
- <!-- if method_list -->
220
- <div id="methods">
221
- <h3 class="section-bar">Public Class methods</h3>
327
+ <a href="#M000022" class="method-signature">
222
328
 
223
- <div id="method-M000279" class="method-detail">
224
- <a name="M000279"></a>
329
+ <span class="method-name">alive?</span><span class="method-args">()</span>
225
330
 
226
- <div class="method-heading">
227
- <a href="#M000279" class="method-signature">
228
- <span class="method-name">new</span><span class="method-args">(&amp;block)</span>
229
331
  </a>
332
+
230
333
  </div>
231
-
334
+
232
335
  <div class="method-description">
336
+
337
+ <p>
338
+ Queries whether the session is still alive.
339
+ </p>
340
+
233
341
  <p><a class="source-toggle" href="#"
234
- onclick="toggleCode('M000279-source');return false;">[Source]</a></p>
235
- <div class="method-source-code" id="M000279-source">
342
+ onclick="toggleCode('M000022-source');return false;">[Source]</a></p>
343
+ <div class="method-source-code" id="M000022-source">
236
344
  <pre>
237
- <span class="ruby-comment cmt"># File lib/wee/continuation/session.rb, line 20</span>
238
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
239
- <span class="ruby-keyword kw">super</span>()
240
- <span class="ruby-ivar">@in_queue</span>, <span class="ruby-ivar">@out_queue</span> = <span class="ruby-constant">SizedQueue</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value">1</span>), <span class="ruby-constant">SizedQueue</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value">1</span>)
241
- <span class="ruby-identifier">setup</span>(<span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
242
- <span class="ruby-identifier">start_request_response_loop</span>
243
- <span class="ruby-keyword kw">end</span>
345
+ <span class="ruby-comment cmt"># File lib/wee/session.rb, line 126</span>
346
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">alive?</span>
347
+ <span class="ruby-identifier">now</span> = <span class="ruby-constant">Time</span>.<span class="ruby-identifier">now</span>
348
+ <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">if</span> <span class="ruby-keyword kw">not</span> <span class="ruby-ivar">@running</span>
349
+ <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@expire_after</span> <span class="ruby-keyword kw">and</span> <span class="ruby-identifier">now</span> <span class="ruby-operator">-</span> <span class="ruby-ivar">@last_access</span> <span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@expire_after</span>
350
+ <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@max_lifetime</span> <span class="ruby-keyword kw">and</span> <span class="ruby-identifier">now</span> <span class="ruby-operator">-</span> <span class="ruby-ivar">@creation_time</span> <span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@max_lifetime</span>
351
+ <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@max_requests</span> <span class="ruby-keyword kw">and</span> <span class="ruby-ivar">@request_count</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-ivar">@max_requests</span>
352
+ <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span>
353
+ <span class="ruby-keyword kw">end</span>
244
354
  </pre>
245
355
  </div>
356
+
246
357
  </div>
247
358
  </div>
248
359
 
249
- <h3 class="section-bar">Public Instance methods</h3>
250
360
 
251
- <div id="method-M000280" class="method-detail">
252
- <a name="M000280"></a>
361
+ <div id="method-M000026" class="method-detail">
362
+ <a name="M000026"></a>
253
363
 
254
364
  <div class="method-heading">
255
- <a href="#M000280" class="method-signature">
256
- <span class="method-name">start_request_response_loop</span><span class="method-args">()</span>
365
+
366
+ <a href="#M000026" class="method-signature">
367
+
368
+ <span class="method-name">call</span><span class="method-args">(env)</span>
369
+
257
370
  </a>
371
+
258
372
  </div>
259
-
260
- <div class="method-description">
261
- <p><a class="source-toggle" href="#"
262
- onclick="toggleCode('M000280-source');return false;">[Source]</a></p>
263
- <div class="method-source-code" id="M000280-source">
264
- <pre>
265
- <span class="ruby-comment cmt"># File lib/wee/continuation/session.rb, line 27</span>
266
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">start_request_response_loop</span>
267
- <span class="ruby-constant">Thread</span>.<span class="ruby-identifier">abort_on_exception</span> = <span class="ruby-keyword kw">true</span>
268
- <span class="ruby-constant">Thread</span>.<span class="ruby-identifier">new</span> {
269
- <span class="ruby-constant">Thread</span>.<span class="ruby-identifier">current</span>[<span class="ruby-identifier">:wee_session</span>] = <span class="ruby-keyword kw">self</span>
270
- <span class="ruby-identifier">loop</span> {
271
- <span class="ruby-ivar">@context</span> = <span class="ruby-keyword kw">nil</span>
272
-
273
- <span class="ruby-comment cmt"># get a request, check whether this session is alive after every 5</span>
274
- <span class="ruby-comment cmt"># seconds.</span>
275
- <span class="ruby-keyword kw">while</span> <span class="ruby-ivar">@context</span>.<span class="ruby-identifier">nil?</span>
276
- <span class="ruby-keyword kw">begin</span>
277
- <span class="ruby-constant">Timeout</span>.<span class="ruby-identifier">timeout</span>(<span class="ruby-value">5</span>) {
278
- <span class="ruby-ivar">@context</span> = <span class="ruby-ivar">@in_queue</span>.<span class="ruby-identifier">pop</span>
279
- }
280
- <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">Timeout</span><span class="ruby-operator">::</span><span class="ruby-constant">Error</span>
281
- <span class="ruby-keyword kw">break</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">alive?</span>
282
- <span class="ruby-keyword kw">end</span>
283
- <span class="ruby-keyword kw">end</span>
284
373
 
285
- <span class="ruby-comment cmt"># abort thread if no longer alive</span>
286
- <span class="ruby-keyword kw">break</span> <span class="ruby-keyword kw">if</span> <span class="ruby-keyword kw">not</span> <span class="ruby-identifier">alive?</span>
374
+ <div class="method-description">
287
375
 
288
- <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;invalid request&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@context</span>.<span class="ruby-identifier">nil?</span>
376
+ <p>
377
+ Handles a web request.
378
+ </p>
289
379
 
380
+ <p><a class="source-toggle" href="#"
381
+ onclick="toggleCode('M000026-source');return false;">[Source]</a></p>
382
+ <div class="method-source-code" id="M000026-source">
383
+ <pre>
384
+ <span class="ruby-comment cmt"># File lib/wee/session.rb, line 166</span>
385
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">call</span>(<span class="ruby-identifier">env</span>)
386
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">env</span>[<span class="ruby-value str">'wee.session'</span>]
387
+ <span class="ruby-comment cmt"># we are already serialized</span>
388
+ <span class="ruby-identifier">raise</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">env</span>[<span class="ruby-value str">'wee.session'</span>] <span class="ruby-operator">!=</span> <span class="ruby-keyword kw">self</span>
290
389
  <span class="ruby-keyword kw">begin</span>
390
+ <span class="ruby-constant">Thread</span>.<span class="ruby-identifier">current</span>[<span class="ruby-identifier">:wee_session</span>] = <span class="ruby-keyword kw">self</span>
391
+ <span class="ruby-ivar">@request_count</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
392
+ <span class="ruby-ivar">@last_access</span> = <span class="ruby-constant">Time</span>.<span class="ruby-identifier">now</span>
291
393
  <span class="ruby-identifier">awake</span>
292
- <span class="ruby-identifier">process_request</span>
394
+ <span class="ruby-identifier">response</span> = <span class="ruby-identifier">handle</span>(<span class="ruby-identifier">env</span>)
293
395
  <span class="ruby-identifier">sleep</span>
294
- <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">Exception</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">exn</span>
295
- <span class="ruby-ivar">@context</span>.<span class="ruby-identifier">response</span> = <span class="ruby-constant">Wee</span><span class="ruby-operator">::</span><span class="ruby-constant">ErrorResponse</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">exn</span>)
396
+ <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">response</span>
397
+ <span class="ruby-keyword kw">ensure</span>
398
+ <span class="ruby-constant">Thread</span>.<span class="ruby-identifier">current</span>[<span class="ruby-identifier">:wee_session</span>] = <span class="ruby-keyword kw">nil</span>
296
399
  <span class="ruby-keyword kw">end</span>
297
- <span class="ruby-ivar">@out_queue</span>.<span class="ruby-identifier">push</span>(<span class="ruby-ivar">@context</span>)
298
- }
299
- <span class="ruby-identifier">p</span> <span class="ruby-value str">&quot;session loop terminated&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">$DEBUG</span>
300
- }
301
- <span class="ruby-keyword kw">end</span>
400
+ <span class="ruby-keyword kw">else</span>
401
+ <span class="ruby-identifier">env</span>[<span class="ruby-value str">'wee.session'</span>] = <span class="ruby-keyword kw">self</span>
402
+ <span class="ruby-ivar">@serializer</span>.<span class="ruby-identifier">call</span>(<span class="ruby-identifier">env</span>)
403
+ <span class="ruby-keyword kw">end</span>
404
+ <span class="ruby-keyword kw">end</span>
302
405
  </pre>
303
406
  </div>
407
+
304
408
  </div>
305
409
  </div>
306
410
 
307
- <h3 class="section-bar">Protected Instance methods</h3>
308
411
 
309
- <div id="method-M000278" class="method-detail">
310
- <a name="M000278"></a>
412
+ <div id="method-M000023" class="method-detail">
413
+ <a name="M000023"></a>
311
414
 
312
415
  <div class="method-heading">
313
- <a href="#M000278" class="method-signature">
314
- <span class="method-name">create_page</span><span class="method-args">(snapshot)</span>
416
+
417
+ <a href="#M000023" class="method-signature">
418
+
419
+ <span class="method-name">dead?</span><span class="method-args">()</span>
420
+
315
421
  </a>
422
+
316
423
  </div>
317
-
424
+
318
425
  <div class="method-description">
426
+
319
427
  <p>
320
- Return a new <a href="Page.html">Wee::Page</a> object with the given
321
- snapshot assigned.
428
+ Queries whether the session is dead.
322
429
  </p>
323
- <p><a class="source-toggle" href="#"
324
- onclick="toggleCode('M000278-source');return false;">[Source]</a></p>
325
- <div class="method-source-code" id="M000278-source">
326
- <pre>
327
- <span class="ruby-comment cmt"># File lib/wee/session.rb, line 145</span>
328
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">create_page</span>(<span class="ruby-identifier">snapshot</span>)
329
- <span class="ruby-identifier">idgen</span> = <span class="ruby-constant">Wee</span><span class="ruby-operator">::</span><span class="ruby-constant">SimpleIdGenerator</span>.<span class="ruby-identifier">new</span>
330
- <span class="ruby-identifier">page</span> = <span class="ruby-constant">Wee</span><span class="ruby-operator">::</span><span class="ruby-constant">Page</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">snapshot</span>, <span class="ruby-constant">Wee</span><span class="ruby-operator">::</span><span class="ruby-constant">CallbackRegistry</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">idgen</span>))
331
- <span class="ruby-keyword kw">end</span>
332
- </pre>
333
- </div>
334
- </div>
335
- </div>
336
430
 
337
- <div id="method-M000273" class="method-detail">
338
- <a name="M000273"></a>
339
-
340
- <div class="method-heading">
341
- <a href="#M000273" class="method-signature">
342
- <span class="method-name">handle_callback_phase</span><span class="method-args">()</span>
343
- </a>
344
- </div>
345
-
346
- <div class="method-description">
347
431
  <p><a class="source-toggle" href="#"
348
- onclick="toggleCode('M000273-source');return false;">[Source]</a></p>
349
- <div class="method-source-code" id="M000273-source">
432
+ onclick="toggleCode('M000023-source');return false;">[Source]</a></p>
433
+ <div class="method-source-code" id="M000023-source">
350
434
  <pre>
351
- <span class="ruby-comment cmt"># File lib/wee/session.rb, line 97</span>
352
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">handle_callback_phase</span>
353
- <span class="ruby-comment cmt"># Actions/inputs were specified.</span>
354
- <span class="ruby-comment cmt">#</span>
355
- <span class="ruby-comment cmt"># We process the request and invoke actions/inputs. Then we generate a</span>
356
- <span class="ruby-comment cmt"># new page view. </span>
357
-
358
- <span class="ruby-identifier">callback_stream</span> = <span class="ruby-constant">Wee</span><span class="ruby-operator">::</span><span class="ruby-constant">CallbackStream</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@page</span>.<span class="ruby-identifier">callbacks</span>, <span class="ruby-ivar">@context</span>.<span class="ruby-identifier">request</span>.<span class="ruby-identifier">fields</span>)
359
- <span class="ruby-identifier">premature_response</span> = <span class="ruby-ivar">@component_runner</span>.<span class="ruby-identifier">process_callbacks</span>(<span class="ruby-identifier">callback_stream</span>)
360
-
361
- <span class="ruby-identifier">post_callbacks_hook</span>()
362
-
363
- <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">premature_response</span>
364
- <span class="ruby-comment cmt"># replace existing page with new snapshot</span>
365
- <span class="ruby-ivar">@page</span>.<span class="ruby-identifier">snapshot</span> = <span class="ruby-ivar">@component_runner</span>.<span class="ruby-identifier">snapshot</span>
366
- <span class="ruby-ivar">@page_store</span>[<span class="ruby-ivar">@context</span>.<span class="ruby-identifier">request</span>.<span class="ruby-identifier">page_id</span>] = <span class="ruby-ivar">@page</span>
367
- <span class="ruby-ivar">@snapshot_page_id</span> = <span class="ruby-ivar">@context</span>.<span class="ruby-identifier">request</span>.<span class="ruby-identifier">page_id</span>
368
-
369
- <span class="ruby-comment cmt"># and send response</span>
370
- <span class="ruby-identifier">set_response</span>(<span class="ruby-ivar">@context</span>, <span class="ruby-identifier">premature_response</span>)
371
- <span class="ruby-keyword kw">else</span>
372
- <span class="ruby-identifier">handle_new_page_view</span>(<span class="ruby-ivar">@context</span>)
435
+ <span class="ruby-comment cmt"># File lib/wee/session.rb, line 138</span>
436
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">dead?</span>
437
+ <span class="ruby-keyword kw">not</span> <span class="ruby-identifier">alive?</span>
373
438
  <span class="ruby-keyword kw">end</span>
374
- <span class="ruby-keyword kw">end</span>
375
439
  </pre>
376
440
  </div>
441
+
377
442
  </div>
378
443
  </div>
379
444
 
380
- <div id="method-M000270" class="method-detail">
381
- <a name="M000270"></a>
445
+
446
+ <div id="method-M000031" class="method-detail">
447
+ <a name="M000031"></a>
382
448
 
383
449
  <div class="method-heading">
384
- <a href="#M000270" class="method-signature">
385
- <span class="method-name">handle_existing_page</span><span class="method-args">()</span>
450
+
451
+ <a href="#M000031" class="method-signature">
452
+
453
+ <span class="method-name">render_ajax_proc</span><span class="method-args">(block, component)</span>
454
+
386
455
  </a>
456
+
387
457
  </div>
388
-
458
+
389
459
  <div class="method-description">
460
+
390
461
  <p><a class="source-toggle" href="#"
391
- onclick="toggleCode('M000270-source');return false;">[Source]</a></p>
392
- <div class="method-source-code" id="M000270-source">
462
+ onclick="toggleCode('M000031-source');return false;">[Source]</a></p>
463
+ <div class="method-source-code" id="M000031-source">
393
464
  <pre>
394
- <span class="ruby-comment cmt"># File lib/wee/session.rb, line 66</span>
395
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">handle_existing_page</span>
396
- <span class="ruby-ivar">@page</span>.<span class="ruby-identifier">snapshot</span>.<span class="ruby-identifier">restore</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@context</span>.<span class="ruby-identifier">request</span>.<span class="ruby-identifier">page_id</span> <span class="ruby-operator">!=</span> <span class="ruby-ivar">@snapshot_page_id</span>
465
+ <span class="ruby-comment cmt"># File lib/wee/session.rb, line 252</span>
466
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">render_ajax_proc</span>(<span class="ruby-identifier">block</span>, <span class="ruby-identifier">component</span>)
467
+ <span class="ruby-identifier">proc</span> {
468
+ <span class="ruby-identifier">r</span> = <span class="ruby-identifier">component</span>.<span class="ruby-identifier">renderer_class</span>.<span class="ruby-identifier">new</span>
469
+ <span class="ruby-identifier">r</span>.<span class="ruby-identifier">session</span> = <span class="ruby-keyword kw">self</span>
470
+ <span class="ruby-identifier">r</span>.<span class="ruby-identifier">request</span> = <span class="ruby-ivar">@request</span>
471
+ <span class="ruby-identifier">r</span>.<span class="ruby-identifier">response</span> = <span class="ruby-constant">Wee</span><span class="ruby-operator">::</span><span class="ruby-constant">Response</span>.<span class="ruby-identifier">new</span>
472
+ <span class="ruby-identifier">r</span>.<span class="ruby-identifier">document</span> = <span class="ruby-constant">Wee</span><span class="ruby-operator">::</span><span class="ruby-constant">HtmlDocument</span>.<span class="ruby-identifier">new</span>
473
+ <span class="ruby-identifier">r</span>.<span class="ruby-identifier">callbacks</span> = <span class="ruby-ivar">@page</span>.<span class="ruby-identifier">callbacks</span>
474
+ <span class="ruby-identifier">r</span>.<span class="ruby-identifier">current_component</span> = <span class="ruby-identifier">component</span>
397
475
 
398
- <span class="ruby-identifier">p</span> <span class="ruby-ivar">@context</span>.<span class="ruby-identifier">request</span>.<span class="ruby-identifier">fields</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">$DEBUG</span>
476
+ <span class="ruby-keyword kw">begin</span>
477
+ <span class="ruby-identifier">block</span>.<span class="ruby-identifier">call</span>(<span class="ruby-identifier">r</span>)
478
+ <span class="ruby-keyword kw">ensure</span>
479
+ <span class="ruby-identifier">r</span>.<span class="ruby-identifier">close</span>
480
+ <span class="ruby-keyword kw">end</span>
399
481
 
400
- <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@context</span>.<span class="ruby-identifier">request</span>.<span class="ruby-identifier">render?</span>
401
- <span class="ruby-identifier">handle_render_phase</span>
402
- <span class="ruby-keyword kw">else</span>
403
- <span class="ruby-identifier">handle_callback_phase</span>
482
+ <span class="ruby-identifier">r</span>.<span class="ruby-identifier">response</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">r</span>.<span class="ruby-identifier">document</span>.<span class="ruby-identifier">to_s</span>
483
+ <span class="ruby-identifier">send_response</span>(<span class="ruby-identifier">r</span>.<span class="ruby-identifier">response</span>)
484
+ }
404
485
  <span class="ruby-keyword kw">end</span>
405
- <span class="ruby-keyword kw">end</span>
406
486
  </pre>
407
487
  </div>
488
+
408
489
  </div>
409
490
  </div>
410
491
 
411
- <div id="method-M000271" class="method-detail">
412
- <a name="M000271"></a>
492
+
493
+ <div id="method-M000027" class="method-detail">
494
+ <a name="M000027"></a>
413
495
 
414
496
  <div class="method-heading">
415
- <a href="#M000271" class="method-signature">
416
- <span class="method-name">handle_invalid_page</span><span class="method-args">()</span>
417
- </a>
418
- </div>
419
-
420
- <div class="method-description">
421
- <p><a class="source-toggle" href="#"
422
- onclick="toggleCode('M000271-source');return false;">[Source]</a></p>
423
- <div class="method-source-code" id="M000271-source">
424
- <pre>
425
- <span class="ruby-comment cmt"># File lib/wee/session.rb, line 78</span>
426
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">handle_invalid_page</span>
427
- <span class="ruby-comment cmt"># TODO:: Display an &quot;invalid page or page timed out&quot; message, which</span>
428
- <span class="ruby-comment cmt"># forwards to /app/session-id</span>
429
- <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Not yet implemented&quot;</span>
430
- <span class="ruby-keyword kw">end</span>
431
- </pre>
432
- </div>
433
- </div>
434
- </div>
435
497
 
436
- <div id="method-M000269" class="method-detail">
437
- <a name="M000269"></a>
498
+ <a href="#M000027" class="method-signature">
499
+
500
+ <span class="method-name">send_response</span><span class="method-args">(response)</span>
438
501
 
439
- <div class="method-heading">
440
- <a href="#M000269" class="method-signature">
441
- <span class="method-name">handle_new_page</span><span class="method-args">()</span>
442
502
  </a>
503
+
443
504
  </div>
444
-
505
+
445
506
  <div class="method-description">
507
+
508
+ <p>
509
+ Send a premature response
510
+ </p>
511
+
446
512
  <p><a class="source-toggle" href="#"
447
- onclick="toggleCode('M000269-source');return false;">[Source]</a></p>
448
- <div class="method-source-code" id="M000269-source">
513
+ onclick="toggleCode('M000027-source');return false;">[Source]</a></p>
514
+ <div class="method-source-code" id="M000027-source">
449
515
  <pre>
450
- <span class="ruby-comment cmt"># File lib/wee/session.rb, line 62</span>
451
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">handle_new_page</span>
452
- <span class="ruby-identifier">handle_new_page_view</span>(<span class="ruby-ivar">@context</span>, <span class="ruby-ivar">@initial_snapshot</span>)
453
- <span class="ruby-keyword kw">end</span>
516
+ <span class="ruby-comment cmt"># File lib/wee/session.rb, line 190</span>
517
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">send_response</span>(<span class="ruby-identifier">response</span>)
518
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">AbortCallbackProcessing</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">response</span>)
519
+ <span class="ruby-keyword kw">end</span>
454
520
  </pre>
455
521
  </div>
522
+
456
523
  </div>
457
524
  </div>
458
525
 
459
- <div id="method-M000274" class="method-detail">
460
- <a name="M000274"></a>
526
+
527
+ <div id="method-M000024" class="method-detail">
528
+ <a name="M000024"></a>
461
529
 
462
530
  <div class="method-heading">
463
- <a href="#M000274" class="method-signature">
464
- <span class="method-name">handle_new_page_view</span><span class="method-args">(context, snapshot=nil)</span>
531
+
532
+ <a href="#M000024" class="method-signature">
533
+
534
+ <span class="method-name">statistics</span><span class="method-args">()</span>
535
+
465
536
  </a>
537
+
466
538
  </div>
467
-
539
+
468
540
  <div class="method-description">
541
+
542
+ <p>
543
+ Returns some statistics
544
+ </p>
545
+
469
546
  <p><a class="source-toggle" href="#"
470
- onclick="toggleCode('M000274-source');return false;">[Source]</a></p>
471
- <div class="method-source-code" id="M000274-source">
547
+ onclick="toggleCode('M000024-source');return false;">[Source]</a></p>
548
+ <div class="method-source-code" id="M000024-source">
472
549
  <pre>
473
- <span class="ruby-comment cmt"># File lib/wee/session.rb, line 121</span>
474
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">handle_new_page_view</span>(<span class="ruby-identifier">context</span>, <span class="ruby-identifier">snapshot</span>=<span class="ruby-keyword kw">nil</span>)
475
- <span class="ruby-identifier">new_page_id</span> = <span class="ruby-ivar">@idgen</span>.<span class="ruby-identifier">next</span>.<span class="ruby-identifier">to_s</span>
476
- <span class="ruby-identifier">new_page</span> = <span class="ruby-identifier">create_page</span>(<span class="ruby-identifier">snapshot</span> <span class="ruby-operator">||</span> <span class="ruby-ivar">@component_runner</span>.<span class="ruby-identifier">snapshot</span>)
477
- <span class="ruby-ivar">@page_store</span>[<span class="ruby-identifier">new_page_id</span>] = <span class="ruby-identifier">new_page</span>
478
- <span class="ruby-ivar">@snapshot_page_id</span> = <span class="ruby-identifier">new_page_id</span>
479
- <span class="ruby-identifier">redirect_url</span> = <span class="ruby-identifier">context</span>.<span class="ruby-identifier">request</span>.<span class="ruby-identifier">build_url</span>(<span class="ruby-identifier">:page_id</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">new_page_id</span>)
480
- <span class="ruby-identifier">set_response</span>(<span class="ruby-identifier">context</span>, <span class="ruby-constant">Wee</span><span class="ruby-operator">::</span><span class="ruby-constant">RedirectResponse</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">redirect_url</span>))
481
- <span class="ruby-keyword kw">end</span>
550
+ <span class="ruby-comment cmt"># File lib/wee/session.rb, line 145</span>
551
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">statistics</span>
552
+ <span class="ruby-identifier">now</span> = <span class="ruby-constant">Time</span>.<span class="ruby-identifier">now</span>
553
+ {
554
+ <span class="ruby-identifier">:last_access</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@last_access</span>, <span class="ruby-comment cmt"># The time when this session was last accessed</span>
555
+ <span class="ruby-identifier">:inactivity</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">now</span> <span class="ruby-operator">-</span> <span class="ruby-ivar">@last_access</span>, <span class="ruby-comment cmt"># The number of seconds of inactivity</span>
556
+ <span class="ruby-identifier">:creation_time</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@creation_time</span>, <span class="ruby-comment cmt"># The time at which this session was created </span>
557
+ <span class="ruby-identifier">:lifetime</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">now</span> <span class="ruby-operator">-</span> <span class="ruby-ivar">@creation_time</span>, <span class="ruby-comment cmt"># The lifetime of this session in seconds</span>
558
+ <span class="ruby-identifier">:request_count</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@request_count</span> <span class="ruby-comment cmt"># The number of requests served by this session</span>
559
+ }
560
+ <span class="ruby-keyword kw">end</span>
482
561
  </pre>
483
562
  </div>
563
+
484
564
  </div>
485
565
  </div>
486
566
 
487
- <div id="method-M000272" class="method-detail">
488
- <a name="M000272"></a>
567
+
568
+ <div id="method-M000021" class="method-detail">
569
+ <a name="M000021"></a>
489
570
 
490
571
  <div class="method-heading">
491
- <a href="#M000272" class="method-signature">
492
- <span class="method-name">handle_render_phase</span><span class="method-args">()</span>
572
+
573
+ <a href="#M000021" class="method-signature">
574
+
575
+ <span class="method-name">terminate</span><span class="method-args">()</span>
576
+
493
577
  </a>
578
+
494
579
  </div>
495
-
580
+
496
581
  <div class="method-description">
582
+
583
+ <p>
584
+ Terminates the session.
585
+ </p>
586
+ <p>
587
+ This will usually not immediatly terminate the session from running, but
588
+ further requests will not be answered.
589
+ </p>
590
+
497
591
  <p><a class="source-toggle" href="#"
498
- onclick="toggleCode('M000272-source');return false;">[Source]</a></p>
499
- <div class="method-source-code" id="M000272-source">
592
+ onclick="toggleCode('M000021-source');return false;">[Source]</a></p>
593
+ <div class="method-source-code" id="M000021-source">
500
594
  <pre>
501
- <span class="ruby-comment cmt"># File lib/wee/session.rb, line 84</span>
502
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">handle_render_phase</span>
503
- <span class="ruby-comment cmt"># No action/inputs were specified -&gt; render page</span>
504
- <span class="ruby-comment cmt">#</span>
505
- <span class="ruby-comment cmt"># 1. Reset the action/input fields (as they are regenerated in the</span>
506
- <span class="ruby-comment cmt"># rendering process).</span>
507
- <span class="ruby-comment cmt"># 2. Render the page (respond).</span>
508
- <span class="ruby-comment cmt"># 3. Store the page back into the store</span>
509
-
510
- <span class="ruby-ivar">@page</span> = <span class="ruby-identifier">create_page</span>(<span class="ruby-ivar">@page</span>.<span class="ruby-identifier">snapshot</span>) <span class="ruby-comment cmt"># remove all action/input handlers</span>
511
- <span class="ruby-identifier">respond</span>(<span class="ruby-ivar">@context</span>, <span class="ruby-ivar">@page</span>.<span class="ruby-identifier">callbacks</span>) <span class="ruby-comment cmt"># render</span>
512
- <span class="ruby-ivar">@page_store</span>[<span class="ruby-ivar">@context</span>.<span class="ruby-identifier">request</span>.<span class="ruby-identifier">page_id</span>] = <span class="ruby-ivar">@page</span> <span class="ruby-comment cmt"># store</span>
513
- <span class="ruby-keyword kw">end</span>
595
+ <span class="ruby-comment cmt"># File lib/wee/session.rb, line 119</span>
596
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">terminate</span>
597
+ <span class="ruby-ivar">@running</span> = <span class="ruby-keyword kw">false</span>
598
+ <span class="ruby-keyword kw">end</span>
514
599
  </pre>
515
600
  </div>
601
+
516
602
  </div>
517
603
  </div>
518
604
 
519
- <div id="method-M000277" class="method-detail">
520
- <a name="M000277"></a>
605
+
606
+ <h3 class="section-bar">Protected Instance methods</h3>
607
+
608
+
609
+ <div id="method-M000033" class="method-detail">
610
+ <a name="M000033"></a>
521
611
 
522
612
  <div class="method-heading">
523
- <a href="#M000277" class="method-signature">
524
- <span class="method-name">post_callbacks_hook</span><span class="method-args">()</span>
613
+
614
+ <a href="#M000033" class="method-signature">
615
+
616
+ <span class="method-name">action</span><span class="method-args">(request, page)</span>
617
+
525
618
  </a>
619
+
526
620
  </div>
527
-
621
+
528
622
  <div class="method-description">
623
+
529
624
  <p><a class="source-toggle" href="#"
530
- onclick="toggleCode('M000277-source');return false;">[Source]</a></p>
531
- <div class="method-source-code" id="M000277-source">
625
+ onclick="toggleCode('M000033-source');return false;">[Source]</a></p>
626
+ <div class="method-source-code" id="M000033-source">
532
627
  <pre>
533
- <span class="ruby-comment cmt"># File lib/wee/session.rb, line 140</span>
534
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">post_callbacks_hook</span>
535
- <span class="ruby-keyword kw">end</span>
628
+ <span class="ruby-comment cmt"># File lib/wee/session.rb, line 295</span>
629
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">action</span>(<span class="ruby-identifier">request</span>, <span class="ruby-identifier">page</span>)
630
+ <span class="ruby-ivar">@current_page</span> = <span class="ruby-keyword kw">nil</span>
631
+
632
+ <span class="ruby-keyword kw">begin</span>
633
+ <span class="ruby-ivar">@page</span> = <span class="ruby-identifier">page</span> <span class="ruby-comment cmt"># CONTINUATIONS!</span>
634
+ <span class="ruby-identifier">page</span>.<span class="ruby-identifier">callbacks</span>.<span class="ruby-identifier">with_triggered</span>(<span class="ruby-identifier">request</span>.<span class="ruby-identifier">fields</span>) <span class="ruby-keyword kw">do</span>
635
+ <span class="ruby-ivar">@root_component</span>.<span class="ruby-identifier">decoration</span>.<span class="ruby-identifier">process_callbacks</span>(<span class="ruby-identifier">page</span>.<span class="ruby-identifier">callbacks</span>)
636
+ <span class="ruby-keyword kw">end</span>
637
+ <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">AbortCallbackProcessing</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">abort</span>
638
+ <span class="ruby-identifier">page</span> = <span class="ruby-ivar">@page</span> <span class="ruby-comment cmt"># CONTINUATIONS!</span>
639
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">abort</span>.<span class="ruby-identifier">response</span>
640
+ <span class="ruby-comment cmt">#</span>
641
+ <span class="ruby-comment cmt"># replace the state of the current page</span>
642
+ <span class="ruby-comment cmt">#</span>
643
+ <span class="ruby-ivar">@current_page</span> = <span class="ruby-identifier">page</span>
644
+ <span class="ruby-identifier">page</span>.<span class="ruby-identifier">state</span> = <span class="ruby-identifier">take_snapshot</span>()
645
+ <span class="ruby-ivar">@page_cache</span>[<span class="ruby-identifier">page</span>.<span class="ruby-identifier">id</span>] = <span class="ruby-identifier">page</span>
646
+ <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">abort</span>.<span class="ruby-identifier">response</span>
647
+ <span class="ruby-keyword kw">else</span>
648
+ <span class="ruby-comment cmt"># pass on - this is a premature response from Component#call</span>
649
+ <span class="ruby-keyword kw">end</span>
650
+ <span class="ruby-keyword kw">end</span>
651
+ <span class="ruby-identifier">request</span> = <span class="ruby-ivar">@request</span> <span class="ruby-comment cmt"># CONTINUATIONS!</span>
652
+
653
+ <span class="ruby-comment cmt">#</span>
654
+ <span class="ruby-comment cmt"># create new page (state)</span>
655
+ <span class="ruby-comment cmt">#</span>
656
+ <span class="ruby-identifier">new_page</span> = <span class="ruby-constant">Page</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@page_ids</span>.<span class="ruby-identifier">next</span>, <span class="ruby-identifier">take_snapshot</span>(), <span class="ruby-keyword kw">nil</span>)
657
+ <span class="ruby-ivar">@page_cache</span>[<span class="ruby-identifier">new_page</span>.<span class="ruby-identifier">id</span>] = <span class="ruby-identifier">new_page</span>
658
+ <span class="ruby-ivar">@current_page</span> = <span class="ruby-identifier">new_page</span>
659
+
660
+ <span class="ruby-identifier">url</span> = <span class="ruby-identifier">request</span>.<span class="ruby-identifier">build_url</span>(<span class="ruby-identifier">:page_id</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">new_page</span>.<span class="ruby-identifier">id</span>)
661
+ <span class="ruby-keyword kw">return</span> <span class="ruby-constant">Wee</span><span class="ruby-operator">::</span><span class="ruby-constant">RedirectResponse</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">url</span>)
662
+ <span class="ruby-keyword kw">end</span>
536
663
  </pre>
537
664
  </div>
665
+
538
666
  </div>
539
667
  </div>
540
668
 
541
- <div id="method-M000276" class="method-detail">
542
- <a name="M000276"></a>
669
+
670
+ <div id="method-M000028" class="method-detail">
671
+ <a name="M000028"></a>
543
672
 
544
673
  <div class="method-heading">
545
- <a href="#M000276" class="method-signature">
546
- <span class="method-name">pre_respond_hook</span><span class="method-args">()</span>
674
+
675
+ <a href="#M000028" class="method-signature">
676
+
677
+ <span class="method-name">awake</span><span class="method-args">()</span>
678
+
547
679
  </a>
680
+
548
681
  </div>
549
-
682
+
550
683
  <div class="method-description">
684
+
685
+ <p>
686
+ Is called before <em>process_request</em> is invoked.
687
+ </p>
688
+ <p>
689
+ Can be used e.g. to setup a database connection.
690
+ </p>
691
+
551
692
  <p><a class="source-toggle" href="#"
552
- onclick="toggleCode('M000276-source');return false;">[Source]</a></p>
553
- <div class="method-source-code" id="M000276-source">
693
+ onclick="toggleCode('M000028-source');return false;">[Source]</a></p>
694
+ <div class="method-source-code" id="M000028-source">
554
695
  <pre>
555
- <span class="ruby-comment cmt"># File lib/wee/session.rb, line 137</span>
556
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">pre_respond_hook</span>
557
- <span class="ruby-keyword kw">end</span>
696
+ <span class="ruby-comment cmt"># File lib/wee/session.rb, line 201</span>
697
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">awake</span>
698
+ <span class="ruby-keyword kw">end</span>
558
699
  </pre>
559
700
  </div>
701
+
560
702
  </div>
561
703
  </div>
562
704
 
563
- <div id="method-M000268" class="method-detail">
564
- <a name="M000268"></a>
705
+
706
+ <div id="method-M000030" class="method-detail">
707
+ <a name="M000030"></a>
565
708
 
566
709
  <div class="method-heading">
567
- <a href="#M000268" class="method-signature">
568
- <span class="method-name">process_request</span><span class="method-args">()</span>
710
+
711
+ <a href="#M000030" class="method-signature">
712
+
713
+ <span class="method-name">handle</span><span class="method-args">(env)</span>
714
+
569
715
  </a>
716
+
570
717
  </div>
571
-
718
+
572
719
  <div class="method-description">
720
+
573
721
  <p>
574
722
  The main routine where the request is processed.
575
723
  </p>
724
+
576
725
  <p><a class="source-toggle" href="#"
577
- onclick="toggleCode('M000268-source');return false;">[Source]</a></p>
578
- <div class="method-source-code" id="M000268-source">
726
+ onclick="toggleCode('M000030-source');return false;">[Source]</a></p>
727
+ <div class="method-source-code" id="M000030-source">
579
728
  <pre>
580
- <span class="ruby-comment cmt"># File lib/wee/session.rb, line 37</span>
581
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">process_request</span>
582
- <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@context</span>.<span class="ruby-identifier">request</span>.<span class="ruby-identifier">page_id</span>.<span class="ruby-identifier">nil?</span>
729
+ <span class="ruby-comment cmt"># File lib/wee/session.rb, line 215</span>
730
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">handle</span>(<span class="ruby-identifier">env</span>)
731
+ <span class="ruby-identifier">request</span> = <span class="ruby-constant">Wee</span><span class="ruby-operator">::</span><span class="ruby-constant">Request</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">env</span>)
732
+ <span class="ruby-ivar">@request</span> = <span class="ruby-identifier">request</span> <span class="ruby-comment cmt"># CONTINUATIONS!</span>
733
+ <span class="ruby-identifier">page</span> = <span class="ruby-ivar">@page_cache</span>.<span class="ruby-identifier">fetch</span>(<span class="ruby-identifier">request</span>.<span class="ruby-identifier">page_id</span>)
734
+
735
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">page</span>
736
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">page</span> <span class="ruby-operator">!=</span> <span class="ruby-ivar">@current_page</span>
737
+ <span class="ruby-ivar">@current_page</span> = <span class="ruby-keyword kw">nil</span>
738
+ <span class="ruby-identifier">page</span>.<span class="ruby-identifier">state</span>.<span class="ruby-identifier">restore</span>
739
+ <span class="ruby-ivar">@current_page</span> = <span class="ruby-identifier">page</span>
740
+ <span class="ruby-keyword kw">end</span>
741
+
742
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">request</span>.<span class="ruby-identifier">render?</span>
743
+ <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">render</span>(<span class="ruby-identifier">request</span>, <span class="ruby-identifier">page</span>).<span class="ruby-identifier">finish</span>
744
+ <span class="ruby-keyword kw">else</span> <span class="ruby-comment cmt"># request.action?</span>
745
+ <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">action</span>(<span class="ruby-identifier">request</span>, <span class="ruby-identifier">page</span>).<span class="ruby-identifier">finish</span>
746
+ <span class="ruby-keyword kw">end</span>
747
+ <span class="ruby-keyword kw">else</span>
748
+ <span class="ruby-comment cmt">#</span>
749
+ <span class="ruby-comment cmt"># either no or invalid page_id specified. reset to initial state (or</span>
750
+ <span class="ruby-comment cmt"># create initial state if no such exists yet)</span>
751
+ <span class="ruby-comment cmt">#</span>
752
+ <span class="ruby-ivar">@initial_state</span> <span class="ruby-operator">||=</span> <span class="ruby-identifier">take_snapshot</span>()
753
+ <span class="ruby-identifier">new_page</span> = <span class="ruby-constant">Page</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@page_ids</span>.<span class="ruby-identifier">next</span>, <span class="ruby-ivar">@initial_state</span>, <span class="ruby-keyword kw">nil</span>)
754
+ <span class="ruby-ivar">@page_cache</span>[<span class="ruby-identifier">new_page</span>.<span class="ruby-identifier">id</span>] = <span class="ruby-identifier">new_page</span>
755
+
756
+ <span class="ruby-identifier">url</span> = <span class="ruby-identifier">request</span>.<span class="ruby-identifier">build_url</span>(<span class="ruby-identifier">:page_id</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">new_page</span>.<span class="ruby-identifier">id</span>)
757
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">request</span>.<span class="ruby-identifier">page_id</span>
758
+ <span class="ruby-keyword kw">return</span> <span class="ruby-constant">Wee</span><span class="ruby-operator">::</span><span class="ruby-constant">RefreshResponse</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">&quot;Invalid or expired page&quot;</span>, <span class="ruby-identifier">url</span>).<span class="ruby-identifier">finish</span>
759
+ <span class="ruby-keyword kw">else</span>
760
+ <span class="ruby-keyword kw">return</span> <span class="ruby-constant">Wee</span><span class="ruby-operator">::</span><span class="ruby-constant">RedirectResponse</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">url</span>).<span class="ruby-identifier">finish</span>
761
+ <span class="ruby-keyword kw">end</span>
762
+ <span class="ruby-keyword kw">end</span>
763
+ <span class="ruby-keyword kw">ensure</span>
764
+ <span class="ruby-ivar">@request</span> = <span class="ruby-keyword kw">nil</span>
765
+ <span class="ruby-keyword kw">end</span>
766
+ </pre>
767
+ </div>
583
768
 
584
- <span class="ruby-comment cmt"># No page_id was specified in the URL. This means that we start with a</span>
585
- <span class="ruby-comment cmt"># fresh component and a fresh page_id, then redirect to render itself.</span>
769
+ </div>
770
+ </div>
586
771
 
587
- <span class="ruby-identifier">handle_new_page</span>
588
772
 
589
- <span class="ruby-keyword kw">elsif</span> <span class="ruby-ivar">@page</span> = <span class="ruby-ivar">@page_store</span>.<span class="ruby-identifier">fetch</span>(<span class="ruby-ivar">@context</span>.<span class="ruby-identifier">request</span>.<span class="ruby-identifier">page_id</span>, <span class="ruby-keyword kw">false</span>)
773
+ <div id="method-M000032" class="method-detail">
774
+ <a name="M000032"></a>
590
775
 
591
- <span class="ruby-comment cmt"># A valid page_id was specified and the corresponding page exists.</span>
776
+ <div class="method-heading">
592
777
 
593
- <span class="ruby-identifier">handle_existing_page</span>
778
+ <a href="#M000032" class="method-signature">
594
779
 
595
- <span class="ruby-keyword kw">else</span>
780
+ <span class="method-name">render</span><span class="method-args">(request, page)</span>
781
+
782
+ </a>
596
783
 
597
- <span class="ruby-comment cmt"># A page_id was specified in the URL, but there's no page for it in the</span>
598
- <span class="ruby-comment cmt"># page store. Either the page has timed out, or an invalid page_id was</span>
599
- <span class="ruby-comment cmt"># specified. </span>
784
+ </div>
600
785
 
601
- <span class="ruby-identifier">handle_invalid_page</span>
786
+ <div class="method-description">
602
787
 
788
+ <p><a class="source-toggle" href="#"
789
+ onclick="toggleCode('M000032-source');return false;">[Source]</a></p>
790
+ <div class="method-source-code" id="M000032-source">
791
+ <pre>
792
+ <span class="ruby-comment cmt"># File lib/wee/session.rb, line 275</span>
793
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">render</span>(<span class="ruby-identifier">request</span>, <span class="ruby-identifier">page</span>)
794
+ <span class="ruby-identifier">r</span> = <span class="ruby-constant">Wee</span><span class="ruby-operator">::</span><span class="ruby-constant">Renderer</span>.<span class="ruby-identifier">new</span>
795
+ <span class="ruby-identifier">r</span>.<span class="ruby-identifier">session</span> = <span class="ruby-keyword kw">self</span>
796
+ <span class="ruby-identifier">r</span>.<span class="ruby-identifier">request</span> = <span class="ruby-identifier">request</span>
797
+ <span class="ruby-identifier">r</span>.<span class="ruby-identifier">response</span> = <span class="ruby-constant">Wee</span><span class="ruby-operator">::</span><span class="ruby-constant">GenericResponse</span>.<span class="ruby-identifier">new</span>
798
+ <span class="ruby-identifier">r</span>.<span class="ruby-identifier">document</span> = <span class="ruby-constant">Wee</span><span class="ruby-operator">::</span><span class="ruby-constant">HtmlDocument</span>.<span class="ruby-identifier">new</span>
799
+ <span class="ruby-identifier">r</span>.<span class="ruby-identifier">callbacks</span> = <span class="ruby-constant">Wee</span><span class="ruby-operator">::</span><span class="ruby-constant">Callbacks</span>.<span class="ruby-identifier">new</span>
800
+
801
+ <span class="ruby-keyword kw">begin</span>
802
+ <span class="ruby-ivar">@root_component</span>.<span class="ruby-identifier">decoration</span>.<span class="ruby-identifier">render_on</span>(<span class="ruby-identifier">r</span>)
803
+ <span class="ruby-keyword kw">ensure</span>
804
+ <span class="ruby-identifier">r</span>.<span class="ruby-identifier">close</span>
805
+ <span class="ruby-keyword kw">end</span>
806
+
807
+ <span class="ruby-identifier">r</span>.<span class="ruby-identifier">response</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">r</span>.<span class="ruby-identifier">document</span>.<span class="ruby-identifier">to_s</span>
808
+
809
+ <span class="ruby-identifier">page</span>.<span class="ruby-identifier">callbacks</span> = <span class="ruby-identifier">r</span>.<span class="ruby-identifier">callbacks</span>
810
+ <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">r</span>.<span class="ruby-identifier">response</span>
603
811
  <span class="ruby-keyword kw">end</span>
604
- <span class="ruby-keyword kw">end</span>
605
812
  </pre>
606
813
  </div>
814
+
607
815
  </div>
608
816
  </div>
609
817
 
610
- <div id="method-M000275" class="method-detail">
611
- <a name="M000275"></a>
818
+
819
+ <div id="method-M000029" class="method-detail">
820
+ <a name="M000029"></a>
612
821
 
613
822
  <div class="method-heading">
614
- <a href="#M000275" class="method-signature">
615
- <span class="method-name">respond</span><span class="method-args">(context, callbacks)</span>
823
+
824
+ <a href="#M000029" class="method-signature">
825
+
826
+ <span class="method-name">sleep</span><span class="method-args">()</span>
827
+
616
828
  </a>
829
+
617
830
  </div>
618
-
831
+
619
832
  <div class="method-description">
833
+
834
+ <p>
835
+ Is called after <em>process_request</em> is run.
836
+ </p>
837
+ <p>
838
+ Can be used e.g. to release a database connection.
839
+ </p>
840
+
620
841
  <p><a class="source-toggle" href="#"
621
- onclick="toggleCode('M000275-source');return false;">[Source]</a></p>
622
- <div class="method-source-code" id="M000275-source">
842
+ onclick="toggleCode('M000029-source');return false;">[Source]</a></p>
843
+ <div class="method-source-code" id="M000029-source">
623
844
  <pre>
624
- <span class="ruby-comment cmt"># File lib/wee/session.rb, line 130</span>
625
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">respond</span>(<span class="ruby-identifier">context</span>, <span class="ruby-identifier">callbacks</span>)
626
- <span class="ruby-identifier">pre_respond_hook</span>
627
- <span class="ruby-identifier">set_response</span>(<span class="ruby-identifier">context</span>, <span class="ruby-constant">Wee</span><span class="ruby-operator">::</span><span class="ruby-constant">GenericResponse</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'text/html'</span>, <span class="ruby-value str">''</span>))
628
- <span class="ruby-identifier">rctx</span> = <span class="ruby-constant">Wee</span><span class="ruby-operator">::</span><span class="ruby-constant">RenderingContext</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">context</span>, <span class="ruby-identifier">callbacks</span>, <span class="ruby-constant">Wee</span><span class="ruby-operator">::</span><span class="ruby-constant">HtmlWriter</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">context</span>.<span class="ruby-identifier">response</span>.<span class="ruby-identifier">content</span>))
629
- <span class="ruby-ivar">@component_runner</span>.<span class="ruby-identifier">render</span>(<span class="ruby-identifier">rctx</span>)
630
- <span class="ruby-keyword kw">end</span>
845
+ <span class="ruby-comment cmt"># File lib/wee/session.rb, line 209</span>
846
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">sleep</span>
847
+ <span class="ruby-keyword kw">end</span>
631
848
  </pre>
632
849
  </div>
850
+
633
851
  </div>
634
852
  </div>
635
853
 
636
- <div id="method-M000267" class="method-detail">
637
- <a name="M000267"></a>
854
+
855
+ <div id="method-M000034" class="method-detail">
856
+ <a name="M000034"></a>
638
857
 
639
858
  <div class="method-heading">
640
- <a href="#M000267" class="method-signature">
641
- <span class="method-name">setup</span><span class="method-args">(&amp;block)</span>
859
+
860
+ <a href="#M000034" class="method-signature">
861
+
862
+ <span class="method-name">take_snapshot</span><span class="method-args">()</span>
863
+
642
864
  </a>
865
+
643
866
  </div>
644
-
867
+
645
868
  <div class="method-description">
869
+
870
+ <p>
871
+ This method takes a snapshot from the current state of the root component
872
+ and returns it.
873
+ </p>
874
+
646
875
  <p><a class="source-toggle" href="#"
647
- onclick="toggleCode('M000267-source');return false;">[Source]</a></p>
648
- <div class="method-source-code" id="M000267-source">
876
+ onclick="toggleCode('M000034-source');return false;">[Source]</a></p>
877
+ <div class="method-source-code" id="M000034-source">
649
878
  <pre>
650
- <span class="ruby-comment cmt"># File lib/wee/session.rb, line 23</span>
651
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">setup</span>(<span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
652
- <span class="ruby-ivar">@idgen</span> = <span class="ruby-constant">Wee</span><span class="ruby-operator">::</span><span class="ruby-constant">SimpleIdGenerator</span>.<span class="ruby-identifier">new</span>
653
-
654
- <span class="ruby-identifier">with_session</span> <span class="ruby-keyword kw">do</span>
655
- <span class="ruby-identifier">block</span>.<span class="ruby-identifier">call</span>(<span class="ruby-keyword kw">self</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">block</span>
656
- <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-value str">&quot;No component runner specified&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@component_runner</span>.<span class="ruby-identifier">nil?</span>
657
- <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-value str">&quot;No page_store specified&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@page_store</span>.<span class="ruby-identifier">nil?</span>
658
-
659
- <span class="ruby-ivar">@initial_snapshot</span> = <span class="ruby-ivar">@component_runner</span>.<span class="ruby-identifier">snapshot</span>
879
+ <span class="ruby-comment cmt"># File lib/wee/session.rb, line 334</span>
880
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">take_snapshot</span>
881
+ <span class="ruby-ivar">@root_component</span>.<span class="ruby-identifier">decoration</span>.<span class="ruby-identifier">backtrack</span>(<span class="ruby-identifier">state</span> = <span class="ruby-constant">Wee</span><span class="ruby-operator">::</span><span class="ruby-constant">State</span>.<span class="ruby-identifier">new</span>)
882
+ <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">state</span>.<span class="ruby-identifier">freeze</span>
660
883
  <span class="ruby-keyword kw">end</span>
661
- <span class="ruby-keyword kw">end</span>
662
884
  </pre>
663
885
  </div>
886
+
664
887
  </div>
665
888
  </div>
666
889
 
667
890
 
891
+
668
892
  </div>
669
893
 
670
894
 
671
- </div>
672
895
 
673
896
 
897
+ </div>
898
+
674
899
  <div id="validator-badges">
675
900
  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
676
901
  </div>
677
902
 
678
903
  </body>
679
- </html>
904
+ </html>