ramaze 0.3.9.1 → 2023.01.06

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 (781) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +3 -0
  3. data/README.md +125 -0
  4. data/Rakefile +13 -186
  5. data/bin/ramaze +4 -149
  6. data/examples/app/auth/layout/auth.xhtml +25 -0
  7. data/examples/app/auth/start.rb +25 -0
  8. data/examples/app/auth/view/index.xhtml +4 -0
  9. data/examples/app/auth/view/login.xhtml +20 -0
  10. data/examples/app/auth/view/secret.xhtml +1 -0
  11. data/examples/app/blog/app.rb +23 -0
  12. data/examples/app/blog/config.ru +19 -0
  13. data/examples/app/blog/controller/init.rb +30 -0
  14. data/examples/app/blog/controller/posts.rb +223 -0
  15. data/examples/app/blog/controller/users.rb +152 -0
  16. data/examples/app/blog/layout/default.xhtml +61 -0
  17. data/examples/app/blog/migrations/01_create_schema.rb +50 -0
  18. data/examples/app/blog/model/comment.rb +42 -0
  19. data/examples/app/blog/model/init.rb +44 -0
  20. data/examples/app/blog/model/post.rb +33 -0
  21. data/examples/app/blog/model/user.rb +100 -0
  22. data/examples/app/blog/public/css/grid.css +107 -0
  23. data/examples/app/blog/public/css/layout.css +203 -0
  24. data/examples/app/blog/public/css/reset.css +123 -0
  25. data/examples/app/blog/public/css/text.css +109 -0
  26. data/examples/app/blog/public/dispatch.fcgi +11 -0
  27. data/examples/app/blog/public/favicon.ico +0 -0
  28. data/examples/app/blog/public/images/bg.png +0 -0
  29. data/examples/app/blog/start.rb +20 -0
  30. data/examples/app/blog/view/feed.xhtml +23 -0
  31. data/examples/app/blog/view/form.xhtml +11 -0
  32. data/examples/app/blog/view/index.xhtml +44 -0
  33. data/examples/app/blog/view/users/form.xhtml +12 -0
  34. data/examples/app/blog/view/users/index.xhtml +30 -0
  35. data/examples/app/blog/view/users/login.xhtml +8 -0
  36. data/examples/app/blog/view/view.xhtml +68 -0
  37. data/examples/app/chat/layout/default.xhtml +13 -0
  38. data/examples/app/chat/model/history.rb +38 -0
  39. data/examples/app/chat/model/message.rb +7 -0
  40. data/examples/app/chat/public/css/chat.css +9 -0
  41. data/examples/app/chat/public/js/chat.js +28 -0
  42. data/{lib/proto → examples/app/chat}/public/js/jquery.js +75 -15
  43. data/examples/app/chat/start.rb +39 -0
  44. data/examples/app/chat/view/chat.xhtml +9 -0
  45. data/examples/app/chat/view/index.xhtml +7 -0
  46. data/examples/app/localization/locale/de.yaml +5 -0
  47. data/examples/app/localization/locale/en.yaml +5 -0
  48. data/examples/app/localization/locale/ja.yaml +5 -0
  49. data/examples/app/localization/start.rb +48 -0
  50. data/examples/app/todolist/controller/init.rb +11 -0
  51. data/examples/app/todolist/controller/task.rb +39 -0
  52. data/examples/app/todolist/layout/default.xhtml +14 -0
  53. data/examples/app/todolist/model/init.rb +14 -0
  54. data/examples/app/todolist/model/task.rb +39 -0
  55. data/examples/app/todolist/public/css/screen.css +63 -0
  56. data/examples/app/todolist/start.rb +7 -0
  57. data/examples/app/todolist/view/index.xhtml +29 -0
  58. data/examples/{upload → app/upload}/start.rb +7 -3
  59. data/examples/app/whywiki/spec/whywiki.rb +56 -0
  60. data/examples/{whywiki → app/whywiki}/start.rb +10 -9
  61. data/examples/{whywiki/template → app/whywiki/view}/edit.xhtml +2 -2
  62. data/examples/app/whywiki/view/show.xhtml +20 -0
  63. data/examples/{wikore → app/wikore}/spec/wikore.rb +7 -9
  64. data/examples/{wikore → app/wikore}/src/controller.rb +9 -11
  65. data/examples/{wikore → app/wikore}/src/model.rb +11 -13
  66. data/examples/app/wikore/start.rb +9 -0
  67. data/examples/{wiktacular/template/html_layout.xhtml → app/wiktacular/layout/application.xhtml} +1 -1
  68. data/examples/{wiktacular → app/wiktacular}/mkd/main/2007-07-20_19-21-12.mkd +1 -1
  69. data/examples/app/wiktacular/mkd/main/2007-07-20_19-23-10.mkd +2 -0
  70. data/examples/app/wiktacular/mkd/main/2007-07-20_19-45-07.mkd +2 -0
  71. data/examples/app/wiktacular/mkd/main/current.mkd +2 -0
  72. data/examples/{wiktacular → app/wiktacular}/mkd/markdown/current.mkd +2 -2
  73. data/examples/app/wiktacular/mkd/testing/2007-07-20_16-43-46.mkd +2 -0
  74. data/examples/{wiktacular → app/wiktacular}/mkd/testing/2007-07-20_19-43-50.mkd +2 -2
  75. data/examples/{wiktacular → app/wiktacular}/mkd/testing/2007-07-21_18-46-01.mkd +11 -11
  76. data/examples/{wiktacular → app/wiktacular}/mkd/testing/2007-07-21_18-46-32.mkd +12 -12
  77. data/examples/{wiktacular → app/wiktacular}/mkd/testing/2007-07-21_18-47-08.mkd +16 -16
  78. data/examples/{wiktacular → app/wiktacular}/mkd/testing/2007-07-21_18-47-54.mkd +16 -16
  79. data/examples/{wiktacular → app/wiktacular}/mkd/testing/current.mkd +16 -16
  80. data/examples/{wiktacular → app/wiktacular}/spec/wiktacular.rb +39 -40
  81. data/examples/{wiktacular → app/wiktacular}/src/controller.rb +18 -18
  82. data/examples/{wiktacular → app/wiktacular}/src/model.rb +30 -14
  83. data/examples/{wiktacular → app/wiktacular}/start.rb +1 -1
  84. data/examples/{wiktacular/template → app/wiktacular/view}/edit.xhtml +2 -2
  85. data/examples/{wiktacular/template → app/wiktacular/view}/new.xhtml +1 -1
  86. data/examples/{element.rb → basic/element.rb} +5 -3
  87. data/examples/basic/gestalt.rb +26 -0
  88. data/examples/basic/hello.rb +14 -0
  89. data/examples/{layout.rb → basic/layout.rb} +2 -2
  90. data/examples/basic/linking.rb +29 -0
  91. data/examples/basic/partial.rb +26 -0
  92. data/examples/{simple.rb → basic/simple.rb} +9 -12
  93. data/examples/{caching.rb → helpers/cache.rb} +9 -7
  94. data/examples/helpers/paginate.rb +71 -0
  95. data/examples/helpers/rest.rb +28 -0
  96. data/examples/helpers/simple_captcha.rb +29 -0
  97. data/examples/{css.rb → misc/css.rb} +6 -12
  98. data/examples/misc/memleak_detector.rb +37 -0
  99. data/examples/misc/nagoro_element.rb +43 -0
  100. data/examples/{ramaise.rb → misc/ramaise.rb} +2 -2
  101. data/examples/misc/rapp.rb +56 -0
  102. data/examples/misc/sequel_scaffolding.rb +45 -0
  103. data/examples/misc/serve_directory.rb +6 -0
  104. data/examples/templates/template_erubis.rb +9 -10
  105. data/examples/templates/template_ezamar.rb +8 -7
  106. data/examples/templates/template_haml.rb +7 -8
  107. data/examples/templates/template_liquid.rb +20 -19
  108. data/examples/templates/template_markaby.rb +6 -7
  109. data/examples/templates/template_mustache.rb +70 -0
  110. data/examples/templates/template_nagoro.rb +6 -7
  111. data/examples/templates/template_redcloth.rb +8 -9
  112. data/examples/templates/template_remarkably.rb +8 -9
  113. data/examples/templates/template_tenjin.rb +10 -15
  114. data/examples/templates/{template → view}/external.haml +4 -4
  115. data/examples/templates/{template → view}/external.mab +4 -4
  116. data/examples/templates/view/external.mt +29 -0
  117. data/examples/templates/{template → view}/external.nag +4 -4
  118. data/examples/templates/{template → view}/external.redcloth +4 -4
  119. data/examples/templates/{template → view}/external.rem +4 -4
  120. data/examples/templates/{template → view}/external.rhtml +6 -6
  121. data/examples/templates/{template → view}/external.tenjin +4 -4
  122. data/examples/templates/{template → view}/external.zmr +6 -6
  123. data/guide/AUTHORS +80 -0
  124. data/guide/CHANGELOG +20210 -0
  125. data/guide/LICENSE +19 -0
  126. data/guide/_static/logo.png +0 -0
  127. data/guide/_static/logo.svg +49 -0
  128. data/guide/css/common.css +20 -0
  129. data/guide/general/cache.md +168 -0
  130. data/guide/general/configuration.md +169 -0
  131. data/guide/general/contributing.md +182 -0
  132. data/guide/general/controllers.md +210 -0
  133. data/guide/general/helpers.md +89 -0
  134. data/guide/general/installation.md +59 -0
  135. data/guide/general/logging.md +96 -0
  136. data/guide/general/middlewares.md +111 -0
  137. data/guide/general/models.md +79 -0
  138. data/{doc/readme_chunks/principles.txt → guide/general/principles.md} +15 -17
  139. data/guide/general/ramaze_command.md +110 -0
  140. data/guide/general/routes.md +82 -0
  141. data/guide/general/sessions.md +210 -0
  142. data/guide/general/special_thanks.md +69 -0
  143. data/guide/general/testing.md +228 -0
  144. data/guide/general/upgrading.md +85 -0
  145. data/guide/general/views.md +335 -0
  146. data/lib/proto/Gemfile +4 -0
  147. data/lib/proto/README.md +35 -0
  148. data/lib/proto/Rakefile +1 -0
  149. data/lib/proto/app.rb +9 -0
  150. data/lib/proto/config.ru +19 -0
  151. data/lib/proto/controller/init.rb +18 -0
  152. data/lib/proto/controller/main.rb +13 -10
  153. data/lib/proto/layout/default.xhtml +57 -0
  154. data/lib/proto/public/css/grid.css +107 -0
  155. data/lib/proto/public/css/layout.css +81 -0
  156. data/lib/proto/public/css/reset.css +123 -0
  157. data/lib/proto/public/css/text.css +109 -0
  158. data/lib/proto/public/favicon.ico +0 -0
  159. data/lib/proto/public/images/bg.png +0 -0
  160. data/lib/proto/spec/helper.rb +39 -0
  161. data/lib/proto/task/ramaze.rake +57 -0
  162. data/lib/proto/view/index.xhtml +36 -25
  163. data/lib/ramaze/app.rb +198 -0
  164. data/lib/ramaze/bin/create.rb +92 -0
  165. data/lib/ramaze/bin/runner.rb +127 -0
  166. data/lib/ramaze/cache/lru.rb +88 -0
  167. data/lib/ramaze/cache/memcache.rb +219 -0
  168. data/lib/ramaze/cache/moneta.rb +143 -0
  169. data/lib/ramaze/cache/redis.rb +163 -0
  170. data/lib/ramaze/cache/sequel.rb +373 -0
  171. data/lib/ramaze/cache.rb +42 -82
  172. data/lib/ramaze/controller/default.rb +25 -0
  173. data/lib/ramaze/controller.rb +184 -224
  174. data/lib/ramaze/current.rb +17 -68
  175. data/lib/ramaze/default_middleware.rb +24 -0
  176. data/lib/ramaze/files.rb +59 -0
  177. data/lib/ramaze/gestalt.rb +95 -63
  178. data/lib/ramaze/helper/auth.rb +107 -107
  179. data/lib/ramaze/helper/bench.rb +51 -0
  180. data/lib/ramaze/helper/blue_form.rb +683 -0
  181. data/lib/ramaze/helper/cache.rb +108 -130
  182. data/lib/ramaze/helper/csrf.rb +191 -0
  183. data/lib/ramaze/helper/email.rb +116 -0
  184. data/lib/ramaze/helper/erector.rb +113 -0
  185. data/lib/ramaze/helper/flash.rb +42 -39
  186. data/lib/ramaze/helper/formatting.rb +200 -35
  187. data/lib/ramaze/helper/gestalt.rb +49 -0
  188. data/lib/ramaze/helper/gravatar.rb +75 -0
  189. data/lib/ramaze/helper/identity.rb +93 -68
  190. data/lib/ramaze/helper/layout.rb +128 -0
  191. data/lib/ramaze/helper/link.rb +52 -119
  192. data/lib/ramaze/helper/localize.rb +143 -0
  193. data/lib/ramaze/helper/markaby.rb +26 -24
  194. data/lib/ramaze/helper/maruku.rb +15 -6
  195. data/lib/ramaze/helper/paginate.rb +315 -0
  196. data/lib/ramaze/helper/remarkably.rb +14 -0
  197. data/lib/ramaze/helper/request_accessor.rb +20 -0
  198. data/lib/ramaze/helper/send_file.rb +34 -0
  199. data/lib/ramaze/helper/simple_captcha.rb +61 -0
  200. data/lib/ramaze/helper/stack.rb +72 -62
  201. data/lib/ramaze/helper/tagz.rb +13 -12
  202. data/lib/ramaze/helper/thread.rb +25 -0
  203. data/lib/ramaze/helper/upload.rb +525 -0
  204. data/lib/ramaze/helper/user.rb +260 -39
  205. data/lib/ramaze/helper/xhtml.rb +122 -0
  206. data/lib/ramaze/helper.rb +8 -79
  207. data/lib/ramaze/log/hub.rb +41 -32
  208. data/lib/ramaze/log/informer.rb +128 -104
  209. data/lib/ramaze/log/logger.rb +25 -15
  210. data/lib/ramaze/log/logging.rb +46 -27
  211. data/lib/ramaze/log/rotatinginformer.rb +237 -0
  212. data/lib/ramaze/log/syslog.rb +57 -31
  213. data/lib/ramaze/log.rb +16 -15
  214. data/lib/ramaze/reloader/watch_inotify.rb +84 -0
  215. data/lib/ramaze/reloader/watch_stat.rb +58 -0
  216. data/lib/ramaze/reloader.rb +212 -0
  217. data/lib/ramaze/request.rb +126 -0
  218. data/lib/ramaze/response.rb +67 -0
  219. data/lib/ramaze/snippets/object/__dir__.rb +25 -0
  220. data/lib/ramaze/snippets/ramaze/deprecated.rb +23 -0
  221. data/lib/ramaze/snippets/string/camel_case.rb +17 -14
  222. data/lib/ramaze/snippets/string/color.rb +27 -24
  223. data/lib/ramaze/snippets/string/esc.rb +25 -25
  224. data/lib/ramaze/snippets/string/snake_case.rb +16 -13
  225. data/lib/ramaze/snippets/string/unindent.rb +24 -11
  226. data/lib/ramaze/snippets.rb +21 -6
  227. data/lib/ramaze/spec/bacon.rb +44 -0
  228. data/lib/ramaze/spec/helper/bacon.rb +4 -4
  229. data/lib/ramaze/spec/helper/pretty_output.rb +9 -1
  230. data/lib/ramaze/spec/helper/snippets.rb +11 -1
  231. data/lib/ramaze/spec/helper/template_examples.rb +22 -0
  232. data/lib/ramaze/version.rb +4 -13
  233. data/lib/ramaze/view/erector.rb +116 -0
  234. data/lib/ramaze/view/erubis.rb +26 -0
  235. data/lib/ramaze/view/ezamar.rb +27 -0
  236. data/lib/ramaze/view/gestalt.rb +20 -0
  237. data/lib/ramaze/view/haml.rb +27 -0
  238. data/lib/ramaze/view/liquid.rb +99 -0
  239. data/lib/ramaze/view/lokar.rb +18 -0
  240. data/lib/ramaze/view/mustache.rb +46 -0
  241. data/lib/ramaze/view/nagoro/render_partial.rb +32 -0
  242. data/lib/ramaze/view/nagoro.rb +44 -0
  243. data/lib/ramaze/view/remarkably.rb +22 -0
  244. data/lib/ramaze/view/sass.rb +22 -0
  245. data/lib/ramaze/view/slim.rb +43 -0
  246. data/lib/ramaze/view/slippers.rb +51 -0
  247. data/lib/ramaze/view/tagz.rb +67 -0
  248. data/lib/ramaze/view/tenjin.rb +32 -0
  249. data/lib/ramaze/view.rb +35 -0
  250. data/lib/ramaze.rb +60 -100
  251. data/lib/vendor/route_exceptions.rb +42 -0
  252. data/ramaze.gemspec +61 -0
  253. data/spec/examples/caching.rb +5 -8
  254. data/spec/examples/css.rb +3 -4
  255. data/spec/examples/element.rb +4 -4
  256. data/spec/examples/hello.rb +4 -5
  257. data/spec/examples/linking.rb +3 -4
  258. data/spec/examples/misc/sequel_scaffolding.rb +18 -0
  259. data/spec/examples/simple.rb +3 -8
  260. data/spec/examples/templates/template_erubis.rb +8 -18
  261. data/spec/examples/templates/template_ezamar.rb +9 -19
  262. data/spec/examples/templates/template_haml.rb +8 -20
  263. data/spec/examples/templates/template_liquid.rb +8 -24
  264. data/spec/examples/templates/template_markaby.rb +10 -19
  265. data/spec/examples/templates/template_mustache.rb +13 -0
  266. data/spec/examples/templates/template_nagoro.rb +13 -0
  267. data/spec/examples/templates/template_remarkably.rb +8 -18
  268. data/spec/examples/templates/template_tenjin.rb +8 -23
  269. data/spec/examples/todolist.rb +33 -0
  270. data/spec/helper.rb +14 -3
  271. data/spec/ramaze/action/render.rb +9 -17
  272. data/spec/ramaze/action/view/other_wrapper.erb +1 -0
  273. data/spec/ramaze/action/view/sub/sub_wrapper.xhtml +1 -0
  274. data/spec/ramaze/app/location.rb +43 -0
  275. data/spec/ramaze/app.rb +50 -0
  276. data/spec/ramaze/bin/app/config.ru +11 -0
  277. data/spec/ramaze/bin/create.rb +28 -0
  278. data/spec/ramaze/bin/runner.rb +30 -0
  279. data/spec/ramaze/cache/lru.rb +48 -0
  280. data/spec/ramaze/cache/memcache.rb +69 -0
  281. data/spec/ramaze/cache/moneta.rb +53 -0
  282. data/spec/ramaze/cache/redis.rb +58 -0
  283. data/spec/ramaze/cache/sequel.rb +60 -0
  284. data/spec/ramaze/controller/actionless_templates.rb +16 -12
  285. data/spec/ramaze/controller/lonely_mapping.rb +18 -0
  286. data/spec/ramaze/controller/mapping.rb +63 -0
  287. data/spec/ramaze/controller/provide_inheritance.rb +40 -0
  288. data/spec/ramaze/controller/resolve.rb +9 -11
  289. data/spec/ramaze/controller/subclass.rb +22 -7
  290. data/spec/ramaze/controller/template_resolving.rb +23 -61
  291. data/spec/ramaze/controller/view/bar.xhtml +1 -0
  292. data/spec/ramaze/controller/view/base/another.xhtml +1 -0
  293. data/spec/ramaze/dispatcher/directory.rb +61 -33
  294. data/spec/ramaze/dispatcher/file.rb +65 -47
  295. data/spec/ramaze/error.rb +54 -64
  296. data/spec/ramaze/files/public_1/plain.txt +1 -0
  297. data/spec/ramaze/files/public_2/rich.txt +1 -0
  298. data/spec/ramaze/files.rb +30 -0
  299. data/spec/ramaze/gestalt.rb +28 -21
  300. data/spec/ramaze/helper/auth.rb +47 -29
  301. data/spec/ramaze/helper/bench.rb +21 -0
  302. data/spec/ramaze/helper/blue_form.rb +807 -0
  303. data/spec/ramaze/helper/cache.rb +65 -84
  304. data/spec/ramaze/helper/csrf.rb +64 -0
  305. data/spec/ramaze/helper/email.rb +69 -0
  306. data/spec/ramaze/helper/flash.rb +22 -101
  307. data/spec/ramaze/helper/formatting.rb +100 -6
  308. data/spec/ramaze/helper/gestalt.rb +18 -0
  309. data/spec/ramaze/helper/gravatar.rb +43 -0
  310. data/spec/ramaze/helper/layout/alternative.xhtml +5 -0
  311. data/spec/ramaze/helper/layout/default.xhtml +5 -0
  312. data/spec/ramaze/helper/layout.rb +109 -0
  313. data/spec/ramaze/helper/link.rb +48 -102
  314. data/spec/ramaze/helper/localize.rb +65 -0
  315. data/spec/ramaze/helper/maruku.rb +22 -0
  316. data/spec/ramaze/helper/paginate.rb +304 -0
  317. data/spec/ramaze/helper/request_accessor.rb +22 -0
  318. data/spec/ramaze/helper/simple_captcha.rb +45 -0
  319. data/spec/ramaze/helper/stack.rb +54 -41
  320. data/spec/ramaze/helper/upload.rb +150 -0
  321. data/spec/ramaze/helper/uploads/text_1.txt +1 -0
  322. data/spec/ramaze/helper/uploads/text_2.txt +1 -0
  323. data/spec/ramaze/helper/user.rb +63 -20
  324. data/spec/ramaze/helper/xhtml.rb +54 -0
  325. data/spec/ramaze/log/informer.rb +30 -28
  326. data/spec/ramaze/log/logging.rb +66 -0
  327. data/spec/ramaze/log/syslog.rb +89 -4
  328. data/spec/ramaze/params.rb +12 -16
  329. data/spec/ramaze/request.rb +51 -160
  330. data/spec/ramaze/rewrite/file.css +1 -0
  331. data/spec/ramaze/session/lru.rb +58 -0
  332. data/spec/ramaze/session/memcache.rb +66 -0
  333. data/spec/ramaze/session/redis.rb +63 -0
  334. data/spec/ramaze/session/sequel.rb +62 -0
  335. data/spec/ramaze/view/erector/external_view.erector +5 -0
  336. data/spec/ramaze/view/erector/index.erector +5 -0
  337. data/spec/ramaze/view/erector/layout.erector +13 -0
  338. data/spec/ramaze/view/erector/tables.erector +23 -0
  339. data/spec/ramaze/view/erector/view.erector +6 -0
  340. data/spec/ramaze/view/erector.rb +68 -0
  341. data/spec/ramaze/view/erubis/external.rhtml +8 -0
  342. data/spec/ramaze/view/erubis/sum.rhtml +1 -0
  343. data/spec/ramaze/view/erubis.rb +73 -0
  344. data/spec/ramaze/view/ezamar/external.zmr +8 -0
  345. data/spec/ramaze/view/ezamar/sum.zmr +1 -0
  346. data/spec/ramaze/view/ezamar.rb +73 -0
  347. data/spec/ramaze/view/gestalt/external.ges +8 -0
  348. data/spec/ramaze/view/gestalt.rb +94 -0
  349. data/spec/ramaze/view/haml/external.haml +5 -0
  350. data/spec/ramaze/view/haml/sum.haml +2 -0
  351. data/spec/ramaze/view/haml.rb +114 -0
  352. data/spec/ramaze/view/liquid/external.liquid +8 -0
  353. data/spec/ramaze/view/liquid/sum.liquid +1 -0
  354. data/spec/ramaze/view/liquid.rb +73 -0
  355. data/spec/ramaze/view/lokar/external.lok +8 -0
  356. data/spec/ramaze/view/lokar/sum.lok +1 -0
  357. data/spec/ramaze/view/lokar.rb +78 -0
  358. data/spec/ramaze/view/mustache/external.mt +8 -0
  359. data/spec/ramaze/view/mustache/sum.mt +1 -0
  360. data/spec/ramaze/view/mustache.rb +77 -0
  361. data/spec/ramaze/view/nagoro/external.nag +8 -0
  362. data/spec/ramaze/view/nagoro/sum.nag +1 -0
  363. data/spec/ramaze/view/nagoro.rb +78 -0
  364. data/spec/ramaze/view/remarkably.rb +49 -0
  365. data/spec/ramaze/view/sass.rb +73 -0
  366. data/spec/ramaze/view/slim/external.slim +5 -0
  367. data/spec/ramaze/view/slim/external_vars.slim +5 -0
  368. data/spec/ramaze/view/slim.rb +49 -0
  369. data/spec/ramaze/view/slippers/external.st +8 -0
  370. data/spec/ramaze/view/slippers/sum.st +1 -0
  371. data/spec/ramaze/view/slippers.rb +49 -0
  372. data/spec/ramaze/{template → view}/tagz.rb +20 -31
  373. data/spec/ramaze/view/tenjin/external.rbhtml +8 -0
  374. data/spec/ramaze/view/tenjin/sum.rbhtml +1 -0
  375. data/spec/ramaze/view/tenjin.rb +57 -0
  376. data/spec/ramaze/view.rb +36 -0
  377. data/spec/snippets/object/__dir__.rb +17 -0
  378. data/spec/snippets/ramaze/lru_hash.rb +88 -0
  379. data/spec/snippets/string/camel_case.rb +4 -1
  380. data/spec/snippets/string/color.rb +4 -1
  381. data/spec/snippets/string/snake_case.rb +4 -1
  382. data/spec/snippets/string/unindent.rb +10 -1
  383. data/tasks/authors.rake +17 -0
  384. data/tasks/bacon.rake +81 -0
  385. data/tasks/changelog.rake +20 -0
  386. data/tasks/gems.rake +15 -0
  387. data/tasks/release.rake +38 -0
  388. data/tasks/todo.rake +31 -0
  389. data/tasks/yard.rake +13 -0
  390. metadata +813 -714
  391. data/doc/AUTHORS +0 -25
  392. data/doc/CHANGELOG +0 -5757
  393. data/doc/COPYING +0 -56
  394. data/doc/FAQ +0 -92
  395. data/doc/GPL +0 -339
  396. data/doc/INSTALL +0 -34
  397. data/doc/LEGAL +0 -26
  398. data/doc/ProjectInfo +0 -53
  399. data/doc/README +0 -435
  400. data/doc/TODO +0 -29
  401. data/doc/meta/announcement.txt +0 -126
  402. data/doc/meta/configuration.txt +0 -162
  403. data/doc/meta/internals.txt +0 -278
  404. data/doc/meta/users.kml +0 -64
  405. data/doc/migrate/1110_to_1111.txt +0 -131
  406. data/doc/readme_chunks/appendix.txt +0 -10
  407. data/doc/readme_chunks/examples.txt +0 -38
  408. data/doc/readme_chunks/features.txt +0 -148
  409. data/doc/readme_chunks/getting_help.txt +0 -5
  410. data/doc/readme_chunks/getting_started.txt +0 -18
  411. data/doc/readme_chunks/installing.txt +0 -46
  412. data/doc/readme_chunks/introduction.txt +0 -18
  413. data/doc/readme_chunks/thanks.txt +0 -59
  414. data/doc/tutorial/todolist.html +0 -816
  415. data/doc/tutorial/todolist.mkd +0 -736
  416. data/examples/auth/auth.rb +0 -54
  417. data/examples/auth/template/layout.haml +0 -20
  418. data/examples/auth/template/login.haml +0 -16
  419. data/examples/blog/README +0 -3
  420. data/examples/blog/controller/main.rb +0 -29
  421. data/examples/blog/model/entry.rb +0 -30
  422. data/examples/blog/public/styles/blog.css +0 -132
  423. data/examples/blog/spec/blog.rb +0 -87
  424. data/examples/blog/start.rb +0 -7
  425. data/examples/blog/view/edit.xhtml +0 -17
  426. data/examples/blog/view/index.xhtml +0 -17
  427. data/examples/blog/view/layout.xhtml +0 -11
  428. data/examples/blog/view/new.xhtml +0 -16
  429. data/examples/hello.rb +0 -15
  430. data/examples/linking.rb +0 -29
  431. data/examples/memleak_detector.rb +0 -32
  432. data/examples/nitro_form.rb +0 -23
  433. data/examples/rammit/spec/rammit.rb +0 -30
  434. data/examples/rammit/src/controller/main.rb +0 -3
  435. data/examples/rammit/src/controller/page.rb +0 -16
  436. data/examples/rammit/src/model.rb +0 -33
  437. data/examples/rammit/start.rb +0 -8
  438. data/examples/rammit/template/index.xhtml +0 -14
  439. data/examples/rammit/template/page/view.xhtml +0 -4
  440. data/examples/rapaste/Rakefile +0 -35
  441. data/examples/rapaste/controller/paste.rb +0 -94
  442. data/examples/rapaste/model/paste.rb +0 -55
  443. data/examples/rapaste/public/css/active4d.css +0 -114
  444. data/examples/rapaste/public/css/all_hallows_eve.css +0 -72
  445. data/examples/rapaste/public/css/amy.css +0 -147
  446. data/examples/rapaste/public/css/blackboard.css +0 -88
  447. data/examples/rapaste/public/css/brilliance_black.css +0 -605
  448. data/examples/rapaste/public/css/brilliance_dull.css +0 -599
  449. data/examples/rapaste/public/css/cobalt.css +0 -149
  450. data/examples/rapaste/public/css/dawn.css +0 -121
  451. data/examples/rapaste/public/css/display.css +0 -197
  452. data/examples/rapaste/public/css/eiffel.css +0 -121
  453. data/examples/rapaste/public/css/espresso_libre.css +0 -109
  454. data/examples/rapaste/public/css/idle.css +0 -62
  455. data/examples/rapaste/public/css/iplastic.css +0 -80
  456. data/examples/rapaste/public/css/lazy.css +0 -73
  457. data/examples/rapaste/public/css/mac_classic.css +0 -123
  458. data/examples/rapaste/public/css/magicwb_amiga.css +0 -104
  459. data/examples/rapaste/public/css/pastels_on_dark.css +0 -188
  460. data/examples/rapaste/public/css/slush_poppies.css +0 -85
  461. data/examples/rapaste/public/css/spacecadet.css +0 -51
  462. data/examples/rapaste/public/css/sunburst.css +0 -180
  463. data/examples/rapaste/public/css/twilight.css +0 -137
  464. data/examples/rapaste/public/css/zenburnesque.css +0 -91
  465. data/examples/rapaste/public/js/jquery.js +0 -11
  466. data/examples/rapaste/spec/rapaste.rb +0 -49
  467. data/examples/rapaste/start.rb +0 -24
  468. data/examples/rapaste/view/copy.xhtml +0 -10
  469. data/examples/rapaste/view/index.xhtml +0 -9
  470. data/examples/rapaste/view/layout.xhtml +0 -25
  471. data/examples/rapaste/view/list.xhtml +0 -29
  472. data/examples/rapaste/view/search.xhtml +0 -41
  473. data/examples/rapaste/view/view.xhtml +0 -37
  474. data/examples/simple_auth.rb +0 -23
  475. data/examples/sourceview/public/coderay.css +0 -104
  476. data/examples/sourceview/public/images/file.gif +0 -0
  477. data/examples/sourceview/public/images/folder.gif +0 -0
  478. data/examples/sourceview/public/images/tv-collapsable-last.gif +0 -0
  479. data/examples/sourceview/public/images/tv-collapsable.gif +0 -0
  480. data/examples/sourceview/public/images/tv-expandable-last.gif +0 -0
  481. data/examples/sourceview/public/images/tv-expandable.gif +0 -0
  482. data/examples/sourceview/public/images/tv-item-last.gif +0 -0
  483. data/examples/sourceview/public/images/tv-item.gif +0 -0
  484. data/examples/sourceview/public/jquery.js +0 -11
  485. data/examples/sourceview/public/jquery.treeview.css +0 -48
  486. data/examples/sourceview/public/jquery.treeview.js +0 -223
  487. data/examples/sourceview/public/sourceview.js +0 -52
  488. data/examples/sourceview/sourceview.rb +0 -77
  489. data/examples/sourceview/template/index.haml +0 -59
  490. data/examples/templates/template/external.amrita +0 -19
  491. data/examples/templates/template/external.xsl +0 -57
  492. data/examples/templates/template_amrita2.rb +0 -74
  493. data/examples/templates/template_xslt.rb +0 -49
  494. data/examples/todolist/README +0 -1
  495. data/examples/todolist/public/js/jquery.js +0 -1923
  496. data/examples/todolist/public/ramaze.png +0 -0
  497. data/examples/todolist/spec/todolist.rb +0 -132
  498. data/examples/todolist/src/controller/main.rb +0 -70
  499. data/examples/todolist/src/element/page.rb +0 -31
  500. data/examples/todolist/src/model.rb +0 -14
  501. data/examples/todolist/start.rb +0 -11
  502. data/examples/todolist/template/index.xhtml +0 -17
  503. data/examples/todolist/template/new.xhtml +0 -7
  504. data/examples/whywiki/spec/whywiki.rb +0 -58
  505. data/examples/whywiki/template/show.xhtml +0 -18
  506. data/examples/wikore/start.rb +0 -9
  507. data/examples/wiktacular/mkd/main/2007-07-20_19-23-10.mkd +0 -2
  508. data/examples/wiktacular/mkd/main/2007-07-20_19-45-07.mkd +0 -2
  509. data/examples/wiktacular/mkd/main/current.mkd +0 -2
  510. data/examples/wiktacular/mkd/testing/2007-07-20_16-43-46.mkd +0 -2
  511. data/lib/proto/public/css/ramaze_error.css +0 -90
  512. data/lib/proto/public/dispatch.fcgi +0 -11
  513. data/lib/proto/public/ramaze.png +0 -0
  514. data/lib/proto/spec/main.rb +0 -24
  515. data/lib/proto/start.rb +0 -8
  516. data/lib/proto/start.ru +0 -8
  517. data/lib/proto/view/error.xhtml +0 -64
  518. data/lib/proto/view/page.xhtml +0 -15
  519. data/lib/ramaze/action/render.rb +0 -163
  520. data/lib/ramaze/action.rb +0 -136
  521. data/lib/ramaze/adapter/base.rb +0 -59
  522. data/lib/ramaze/adapter/cgi.rb +0 -24
  523. data/lib/ramaze/adapter/ebb.rb +0 -32
  524. data/lib/ramaze/adapter/evented_mongrel.rb +0 -7
  525. data/lib/ramaze/adapter/fcgi.rb +0 -24
  526. data/lib/ramaze/adapter/lsws.rb +0 -23
  527. data/lib/ramaze/adapter/mongrel.rb +0 -25
  528. data/lib/ramaze/adapter/scgi.rb +0 -22
  529. data/lib/ramaze/adapter/swiftiplied_mongrel.rb +0 -7
  530. data/lib/ramaze/adapter/thin.rb +0 -22
  531. data/lib/ramaze/adapter/webrick.rb +0 -52
  532. data/lib/ramaze/adapter.rb +0 -101
  533. data/lib/ramaze/cache/memcached.rb +0 -70
  534. data/lib/ramaze/cache/memory.rb +0 -6
  535. data/lib/ramaze/cache/yaml_store.rb +0 -68
  536. data/lib/ramaze/contrib/auto_params/get_args.rb +0 -57
  537. data/lib/ramaze/contrib/auto_params.rb +0 -135
  538. data/lib/ramaze/contrib/email.rb +0 -84
  539. data/lib/ramaze/contrib/facebook/facebook.rb +0 -171
  540. data/lib/ramaze/contrib/facebook.rb +0 -23
  541. data/lib/ramaze/contrib/file_cache.rb +0 -65
  542. data/lib/ramaze/contrib/gettext/mo.rb +0 -155
  543. data/lib/ramaze/contrib/gettext/parser.rb +0 -46
  544. data/lib/ramaze/contrib/gettext/po.rb +0 -109
  545. data/lib/ramaze/contrib/gettext.rb +0 -113
  546. data/lib/ramaze/contrib/gzip_filter.rb +0 -56
  547. data/lib/ramaze/contrib/profiling.rb +0 -36
  548. data/lib/ramaze/contrib/route.rb +0 -22
  549. data/lib/ramaze/contrib/sequel/fill.rb +0 -12
  550. data/lib/ramaze/contrib/sequel_cache.rb +0 -92
  551. data/lib/ramaze/contrib.rb +0 -82
  552. data/lib/ramaze/controller/error.rb +0 -46
  553. data/lib/ramaze/controller/main.rb +0 -2
  554. data/lib/ramaze/controller/resolve.rb +0 -234
  555. data/lib/ramaze/current/request.rb +0 -181
  556. data/lib/ramaze/current/response.rb +0 -19
  557. data/lib/ramaze/current/session/flash.rb +0 -67
  558. data/lib/ramaze/current/session/hash.rb +0 -65
  559. data/lib/ramaze/current/session.rb +0 -153
  560. data/lib/ramaze/dispatcher/action.rb +0 -40
  561. data/lib/ramaze/dispatcher/directory.rb +0 -116
  562. data/lib/ramaze/dispatcher/error.rb +0 -108
  563. data/lib/ramaze/dispatcher/file.rb +0 -87
  564. data/lib/ramaze/dispatcher.rb +0 -124
  565. data/lib/ramaze/error.rb +0 -24
  566. data/lib/ramaze/global/dsl.rb +0 -39
  567. data/lib/ramaze/global/globalstruct.rb +0 -147
  568. data/lib/ramaze/global.rb +0 -116
  569. data/lib/ramaze/helper/aspect.rb +0 -100
  570. data/lib/ramaze/helper/cgi.rb +0 -43
  571. data/lib/ramaze/helper/inform.rb +0 -40
  572. data/lib/ramaze/helper/nitroform.rb +0 -14
  573. data/lib/ramaze/helper/pager.rb +0 -366
  574. data/lib/ramaze/helper/partial.rb +0 -96
  575. data/lib/ramaze/helper/redirect.rb +0 -73
  576. data/lib/ramaze/helper/sendfile.rb +0 -18
  577. data/lib/ramaze/helper/sequel.rb +0 -52
  578. data/lib/ramaze/inform.rb +0 -4
  579. data/lib/ramaze/log/analogger.rb +0 -37
  580. data/lib/ramaze/log/growl.rb +0 -35
  581. data/lib/ramaze/log/knotify.rb +0 -25
  582. data/lib/ramaze/log/xosd.rb +0 -88
  583. data/lib/ramaze/route.rb +0 -84
  584. data/lib/ramaze/snippets/array/put_within.rb +0 -37
  585. data/lib/ramaze/snippets/binding/locals.rb +0 -13
  586. data/lib/ramaze/snippets/dictionary.rb +0 -504
  587. data/lib/ramaze/snippets/divide.rb +0 -20
  588. data/lib/ramaze/snippets/kernel/__dir__.rb +0 -23
  589. data/lib/ramaze/snippets/kernel/acquire.rb +0 -39
  590. data/lib/ramaze/snippets/kernel/aquire.rb +0 -1
  591. data/lib/ramaze/snippets/kernel/constant.rb +0 -26
  592. data/lib/ramaze/snippets/kernel/pretty_inspect.rb +0 -15
  593. data/lib/ramaze/snippets/metaid.rb +0 -17
  594. data/lib/ramaze/snippets/numeric/filesize_format.rb +0 -19
  595. data/lib/ramaze/snippets/object/pretty.rb +0 -6
  596. data/lib/ramaze/snippets/object/scope.rb +0 -11
  597. data/lib/ramaze/snippets/object/thread_accessor.rb +0 -5
  598. data/lib/ramaze/snippets/object/traits.rb +0 -76
  599. data/lib/ramaze/snippets/ordered_set.rb +0 -36
  600. data/lib/ramaze/snippets/proc/locals.rb +0 -11
  601. data/lib/ramaze/snippets/ramaze/caller_info.rb +0 -30
  602. data/lib/ramaze/snippets/ramaze/caller_lines.rb +0 -51
  603. data/lib/ramaze/snippets/ramaze/thread_accessor.rb +0 -44
  604. data/lib/ramaze/snippets/string/each.rb +0 -8
  605. data/lib/ramaze/snippets/string/ord.rb +0 -15
  606. data/lib/ramaze/snippets/string/start_with.rb +0 -7
  607. data/lib/ramaze/snippets/struct/fill.rb +0 -23
  608. data/lib/ramaze/snippets/struct/values_at.rb +0 -23
  609. data/lib/ramaze/snippets/symbol/to_proc.rb +0 -24
  610. data/lib/ramaze/snippets/thread/into.rb +0 -18
  611. data/lib/ramaze/sourcereload.rb +0 -169
  612. data/lib/ramaze/spec/helper/browser.rb +0 -88
  613. data/lib/ramaze/spec/helper/mock_http.rb +0 -69
  614. data/lib/ramaze/spec/helper/requester.rb +0 -49
  615. data/lib/ramaze/spec/helper/simple_http.rb +0 -434
  616. data/lib/ramaze/spec/helper.rb +0 -122
  617. data/lib/ramaze/spec.rb +0 -1
  618. data/lib/ramaze/store/default.rb +0 -109
  619. data/lib/ramaze/template/amrita2.rb +0 -44
  620. data/lib/ramaze/template/builder.rb +0 -28
  621. data/lib/ramaze/template/erubis.rb +0 -35
  622. data/lib/ramaze/template/ezamar/element.rb +0 -169
  623. data/lib/ramaze/template/ezamar/engine.rb +0 -76
  624. data/lib/ramaze/template/ezamar/morpher.rb +0 -135
  625. data/lib/ramaze/template/ezamar/render_partial.rb +0 -31
  626. data/lib/ramaze/template/ezamar.rb +0 -42
  627. data/lib/ramaze/template/haml.rb +0 -37
  628. data/lib/ramaze/template/liquid.rb +0 -36
  629. data/lib/ramaze/template/markaby.rb +0 -52
  630. data/lib/ramaze/template/nagoro.rb +0 -51
  631. data/lib/ramaze/template/none.rb +0 -14
  632. data/lib/ramaze/template/redcloth.rb +0 -24
  633. data/lib/ramaze/template/remarkably.rb +0 -38
  634. data/lib/ramaze/template/sass.rb +0 -37
  635. data/lib/ramaze/template/tagz.rb +0 -79
  636. data/lib/ramaze/template/tenjin.rb +0 -34
  637. data/lib/ramaze/template/xslt.rb +0 -96
  638. data/lib/ramaze/template.rb +0 -81
  639. data/lib/ramaze/tool/create.rb +0 -74
  640. data/lib/ramaze/tool/localize.rb +0 -162
  641. data/lib/ramaze/tool/mime.rb +0 -25
  642. data/lib/ramaze/tool/mime_types.yaml +0 -615
  643. data/lib/ramaze/tool/record.rb +0 -6
  644. data/lib/ramaze/tool.rb +0 -9
  645. data/lib/ramaze/trinity.rb +0 -13
  646. data/lib/vendor/bacon.rb +0 -323
  647. data/rake_tasks/conf.rake +0 -73
  648. data/rake_tasks/coverage.rake +0 -46
  649. data/rake_tasks/darcs.rake +0 -5
  650. data/rake_tasks/gem.rake +0 -43
  651. data/rake_tasks/maintenance.rake +0 -384
  652. data/rake_tasks/spec.rake +0 -62
  653. data/spec/contrib/auto_params.rb +0 -121
  654. data/spec/contrib/profiling.rb +0 -26
  655. data/spec/contrib/route.rb +0 -36
  656. data/spec/contrib/sequel/fill.rb +0 -47
  657. data/spec/examples/simple_auth.rb +0 -32
  658. data/spec/examples/templates/template_amrita2.rb +0 -16
  659. data/spec/examples/templates/template_redcloth.rb +0 -28
  660. data/spec/ramaze/action/basics.rb +0 -36
  661. data/spec/ramaze/action/cache.rb +0 -43
  662. data/spec/ramaze/action/layout.rb +0 -190
  663. data/spec/ramaze/adapter/mongrel.rb +0 -12
  664. data/spec/ramaze/adapter/record.rb +0 -31
  665. data/spec/ramaze/adapter/webrick.rb +0 -12
  666. data/spec/ramaze/adapter.rb +0 -22
  667. data/spec/ramaze/cache.rb +0 -73
  668. data/spec/ramaze/controller.rb +0 -177
  669. data/spec/ramaze/current/request.rb +0 -30
  670. data/spec/ramaze/current/session.rb +0 -97
  671. data/spec/ramaze/dispatcher.rb +0 -31
  672. data/spec/ramaze/element.rb +0 -107
  673. data/spec/ramaze/helper/aspect.rb +0 -92
  674. data/spec/ramaze/helper/cgi.rb +0 -43
  675. data/spec/ramaze/helper/file.rb +0 -18
  676. data/spec/ramaze/helper/pager.rb +0 -99
  677. data/spec/ramaze/helper/partial.rb +0 -76
  678. data/spec/ramaze/helper/redirect.rb +0 -112
  679. data/spec/ramaze/localize.rb +0 -67
  680. data/spec/ramaze/morpher.rb +0 -111
  681. data/spec/ramaze/public/error404.xhtml +0 -1
  682. data/spec/ramaze/request/mongrel.rb +0 -9
  683. data/spec/ramaze/request/thin.rb +0 -9
  684. data/spec/ramaze/request/webrick.rb +0 -5
  685. data/spec/ramaze/route.rb +0 -130
  686. data/spec/ramaze/session.rb +0 -94
  687. data/spec/ramaze/store/default.rb +0 -71
  688. data/spec/ramaze/template/amrita2/external.amrita +0 -6
  689. data/spec/ramaze/template/amrita2/sum.amrita +0 -1
  690. data/spec/ramaze/template/amrita2.rb +0 -50
  691. data/spec/ramaze/template/builder/external.rxml +0 -3
  692. data/spec/ramaze/template/builder.rb +0 -55
  693. data/spec/ramaze/template/erubis/sum.rhtml +0 -1
  694. data/spec/ramaze/template/erubis.rb +0 -41
  695. data/spec/ramaze/template/ezamar/another/long/action.zmr +0 -1
  696. data/spec/ramaze/template/ezamar/combined.zmr +0 -1
  697. data/spec/ramaze/template/ezamar/file_only.zmr +0 -1
  698. data/spec/ramaze/template/ezamar/index.zmr +0 -1
  699. data/spec/ramaze/template/ezamar/nested.zmr +0 -1
  700. data/spec/ramaze/template/ezamar/other__index.xhtml +0 -1
  701. data/spec/ramaze/template/ezamar/some__long__action.zmr +0 -1
  702. data/spec/ramaze/template/ezamar/sum.zmr +0 -1
  703. data/spec/ramaze/template/ezamar.rb +0 -63
  704. data/spec/ramaze/template/haml/index.haml +0 -5
  705. data/spec/ramaze/template/haml/locals.haml +0 -2
  706. data/spec/ramaze/template/haml/with_vars.haml +0 -4
  707. data/spec/ramaze/template/haml.rb +0 -66
  708. data/spec/ramaze/template/liquid/index.liquid +0 -1
  709. data/spec/ramaze/template/liquid/products.liquid +0 -45
  710. data/spec/ramaze/template/liquid.rb +0 -99
  711. data/spec/ramaze/template/markaby/external.mab +0 -8
  712. data/spec/ramaze/template/markaby/sum.mab +0 -1
  713. data/spec/ramaze/template/markaby.rb +0 -61
  714. data/spec/ramaze/template/nagoro/another/long/action.nag +0 -1
  715. data/spec/ramaze/template/nagoro/combined.nag +0 -1
  716. data/spec/ramaze/template/nagoro/file_only.nag +0 -1
  717. data/spec/ramaze/template/nagoro/index.nag +0 -1
  718. data/spec/ramaze/template/nagoro/nested.nag +0 -1
  719. data/spec/ramaze/template/nagoro/some__long__action.nag +0 -1
  720. data/spec/ramaze/template/nagoro/sum.nag +0 -1
  721. data/spec/ramaze/template/nagoro.rb +0 -64
  722. data/spec/ramaze/template/redcloth/external.redcloth +0 -1
  723. data/spec/ramaze/template/redcloth.rb +0 -38
  724. data/spec/ramaze/template/remarkably.rb +0 -58
  725. data/spec/ramaze/template/sass.rb +0 -69
  726. data/spec/ramaze/template/tenjin/external.tenjin +0 -1
  727. data/spec/ramaze/template/tenjin.rb +0 -49
  728. data/spec/ramaze/template/xslt/concat_words.xsl +0 -16
  729. data/spec/ramaze/template/xslt/index.xsl +0 -14
  730. data/spec/ramaze/template/xslt/products.xsl +0 -32
  731. data/spec/ramaze/template/xslt/ruby_version.xsl +0 -14
  732. data/spec/ramaze/template/xslt.rb +0 -90
  733. data/spec/ramaze/template.rb +0 -128
  734. data/spec/snippets/array/put_within.rb +0 -33
  735. data/spec/snippets/divide.rb +0 -19
  736. data/spec/snippets/kernel/__dir__.rb +0 -8
  737. data/spec/snippets/kernel/acquire.rb +0 -71
  738. data/spec/snippets/kernel/constant.rb +0 -23
  739. data/spec/snippets/numeric/filesize_format.rb +0 -12
  740. data/spec/snippets/ordered_set.rb +0 -63
  741. data/spec/snippets/ramaze/caller_info.rb +0 -39
  742. data/spec/snippets/ramaze/caller_lines.rb +0 -30
  743. data/spec/snippets/struct/fill.rb +0 -26
  744. data/spec/snippets/struct/values_at.rb +0 -44
  745. data/spec/snippets/symbol/to_proc.rb +0 -13
  746. data/spec/snippets/thread/into.rb +0 -20
  747. /data/examples/{todolist → app/todolist}/public/favicon.ico +0 -0
  748. /data/examples/{upload → app/upload}/view/index.xhtml +0 -0
  749. /data/examples/{wikore/template → app/wikore/view}/index.xhtml +0 -0
  750. /data/examples/{wiktacular → app/wiktacular}/README +0 -0
  751. /data/examples/{wiktacular → app/wiktacular}/mkd/link/2007-07-20_19-45-51.mkd +0 -0
  752. /data/examples/{wiktacular → app/wiktacular}/mkd/link/current.mkd +0 -0
  753. /data/examples/{wiktacular → app/wiktacular}/mkd/main/2007-07-20_16-31-33.mkd +0 -0
  754. /data/examples/{wiktacular → app/wiktacular}/public/favicon.ico +0 -0
  755. /data/examples/{wiktacular → app/wiktacular}/public/screen.css +0 -0
  756. /data/examples/{wiktacular/template → app/wiktacular/view}/index.xhtml +0 -0
  757. /data/examples/{identity.rb → helpers/identity.rb} +0 -0
  758. /data/examples/{facebook.rb → misc/facebook.rb} +0 -0
  759. /data/examples/templates/{template → view}/external.liquid +0 -0
  760. /data/spec/ramaze/action/{template → view}/bar.xhtml +0 -0
  761. /data/spec/ramaze/action/{template → view}/instancevars/layout.xhtml +0 -0
  762. /data/spec/ramaze/action/{template → view}/other_wrapper.xhtml +0 -0
  763. /data/spec/ramaze/action/{template → view}/single_wrapper.xhtml +0 -0
  764. /data/spec/ramaze/action/{template/sub/sub_wrapper.xhtml → view/sub/sub_wrapper.erb} +0 -0
  765. /data/spec/ramaze/controller/{template → view}/greet.xhtml +0 -0
  766. /data/spec/ramaze/controller/{template → view}/list.xhtml +0 -0
  767. /data/spec/ramaze/controller/{template → view}/other/greet/other.xhtml +0 -0
  768. /data/spec/ramaze/controller/{template → view}/other_wrapper.xhtml +0 -0
  769. /data/spec/ramaze/helper/{template → view}/locals.xhtml +0 -0
  770. /data/spec/ramaze/helper/{template → view}/loop.xhtml +0 -0
  771. /data/spec/ramaze/helper/{template → view}/num.xhtml +0 -0
  772. /data/spec/ramaze/helper/{template → view}/partial.xhtml +0 -0
  773. /data/spec/ramaze/helper/{template → view}/recursive.xhtml +0 -0
  774. /data/spec/ramaze/helper/{template → view}/recursive_local_ivars.xhtml +0 -0
  775. /data/spec/ramaze/helper/{template → view}/recursive_locals.xhtml +0 -0
  776. /data/spec/ramaze/helper/{template → view}/test_template.xhtml +0 -0
  777. /data/spec/ramaze/{template → view}/remarkably/external.rem +0 -0
  778. /data/spec/ramaze/{template → view}/remarkably/sum.rem +0 -0
  779. /data/spec/ramaze/{template → view}/sass/file.css.sass +0 -0
  780. /data/spec/ramaze/{template → view}/tagz/external.tagz +0 -0
  781. /data/spec/ramaze/{template → view}/tagz/sum.tagz +0 -0
@@ -1,736 +0,0 @@
1
- # To-do List Tutorial
2
-
3
- ## Step Zero, Introduction
4
-
5
- Welcome to our official tutorial, the mandatory to-do list.
6
- I'm writing this while doing the steps to assure it will work for you.
7
-
8
- The tutorial assumes that you have Ramaze installed already. The easiest way to
9
- do that is `gem install ramaze`, for other ways of installation please see the
10
- documentation at http://ramaze.rubyforge.org
11
-
12
- Should you encounter any problems while doing this tutorial, this might either
13
- be because Ramaze changed (which happens very often while it is still young)
14
- or I actually made some mistake while writing it.
15
-
16
- In either case it would make me (and all other poor fellows who happen to try
17
- this tutorial) very happy if you could spare some time and report the issue
18
- either on the Bug tracker at http://rubyforge.org/projects/ramaze or just
19
- drop by on IRC ( irc.freenode.org channel: #ramaze ).
20
-
21
- There is also a Mailing list available where you can keep yourself updated on
22
- what is going on with little effort, it is also located on the project-page at
23
- RubyForge.
24
-
25
- Additionally, we now have added tests for the resulting application that you
26
- can find in spec/examples/todolist.rb
27
-
28
- Date of last update: Thu Jan 31 04:37:16 JST 2008
29
-
30
- Thanks in advance.
31
- The author of the tutorial, Michael 'manveru' Fellinger
32
-
33
- ## First Step, Create
34
-
35
- We are using `ramaze --create todolist` to create a new application.
36
- Ramaze will then create the directory and fill it with a skeleton of a quite
37
- sophisticated hello-world example out of which we will create the actual
38
- to-do list.
39
-
40
- So run:
41
-
42
- $ ramaze --create todolist
43
-
44
- done.
45
-
46
-
47
- ## Second Step, M, like Model
48
-
49
- Ramaze comes at the moment only with a simple wrapper of the YAML::Store.
50
- So we are going to base this on the tools available, you can just do the same
51
- with your ORM or database-library of choice.
52
-
53
- So first, create a `model/todolist.rb` for our application:
54
-
55
- require 'ramaze/store/default'
56
- TodoList = Ramaze::Store::Default.new('todolist.yaml')
57
-
58
- Let's add some items as well to have a base to start from.
59
-
60
- { 'Laundry' => {:done => false},
61
- 'Wash dishes' => {:done => false},
62
- }.each do |title, value|
63
- TodoList[title] = value
64
- end
65
-
66
-
67
- ## Third Step, V, like View
68
-
69
- Now let's get our hands dirty and just edit the templates for our to-do list.
70
-
71
- Start with editing `view/index.xhtml`, it is using the default templating
72
- of Ramaze, called Ezamar.
73
-
74
- The index.xhtml currently contains a default welcome page, remove the contents.
75
-
76
- Let's put some things in there, I'll explain the syntax as we go, it's quite
77
- simple.
78
-
79
- <html>
80
- <head>
81
- <title>TodoList</title>
82
- </head>
83
- <body>
84
- <h1>TodoList</h1>
85
- <ul>
86
- <?r
87
- TodoList.each do |title, value|
88
- status = value[:done] ? 'done' : 'not done'
89
- ?>
90
- <li>#{c title}: #{status}</li>
91
- <?r end ?>
92
- </ul>
93
- </body>
94
- </html>
95
-
96
- I will assume that you are familiar with basic Ruby already, so we will
97
- concentrate on the things new here.
98
-
99
- `<?r ?>` defines an area of ruby-code. Later, when the template is transformed
100
- into pure Ruby it will be evaluated. We iterate over the TodoList model and
101
- pass the title and value into a block. In that block we can just get the values
102
- of title and status (which we define based on the value) displayed on the
103
- page.
104
-
105
- The whole Template would expand to something like this (only showing the
106
- interesting part)
107
-
108
- <ul>
109
- <li>Laundry: not done</li>
110
- <li>Wash dishes: not done</li>
111
- </ul>
112
-
113
- That wasn't too bad, huh?
114
-
115
- Now, so we can get our instant pleasure of seeing the result of our (hard) work,
116
- let's see how to start ramaze.
117
-
118
- In the `todolist` directory run `ramaze`.
119
-
120
- This will start an instance of Ramaze and run your application on it. You can
121
- now access it by browsing to http://localhost:7000/
122
-
123
- 7000 is the default-port Ramaze will run on, to change it you can just run
124
- `ramaze -p 7070` or similar. Also be sure to look at the output of
125
- `ramaze --help` to see some other options.
126
-
127
-
128
- ## Fourth Step, C, like Controller
129
-
130
- The last part of the MVC-paradigm is the Controller.
131
-
132
- Wouldn't it be nice to have a way to add and remove items on our to-do list?
133
- Editing the model every time would be quite tiresome and limited.
134
-
135
- Well, come along, I'll introduce you to Controller.
136
-
137
- In the way MVC is structured, the Controller provides the data in a nice way
138
- for the View, removing all of the data-preparation and most of the logic from
139
- the templates. This makes it firstly simple to change the front end of your
140
- application and secondly provides excellent ways of changing the complete
141
- Structure of the Model or View independent from each other.
142
-
143
- OK, enough of the theory, you will see the benefits in an instant. Go on and
144
- edit the file `controller/main.rb`.
145
-
146
- The contents of it are like following:
147
-
148
- class MainController < Controller
149
- def index
150
- @welcome = "Welcome to Ramaze!"
151
- end
152
-
153
- def notemplate
154
- "there is no template associated with this action"
155
- end
156
- end
157
-
158
- The only methods right now are `#index` and `#notemplate`.
159
- The relationship between the methods on the controller and the templates is
160
- 1:1, so the method `#index` is combined with the template `index.xhtml`. This
161
- combination is called an `action`.
162
-
163
- Let's get back to editing and change the method `#index` to this:
164
-
165
- def index
166
- @tasks = TodoList.original
167
- @tasks.each do |title, value|
168
- status = value[:done] ? 'done' : 'not done'
169
- @tasks[title] = status
170
- end
171
- end
172
-
173
- This will take care of the logic inside the template, which now should be
174
- changed to do following:
175
-
176
- <html>
177
- <head>
178
- <title>TodoList</title>
179
- </head>
180
- <body>
181
- <h1>TodoList</h1>
182
- <?r if @tasks.empty? ?>
183
- No Tasks
184
- <?r else ?>
185
- <ul>
186
- <?r @tasks.each do |title, status| ?>
187
- <li>#{c title}: #{status}</li>
188
- <?r end ?>
189
- </ul>
190
- <?r end ?>
191
- </body>
192
- </html>
193
-
194
- The rest of the template can stay the same.
195
-
196
- Now, if you browse to http://localhost:7000/ again you will not notice any
197
- change, which is how it should be. The only change is that if there are no
198
- Tasks it will say so.
199
-
200
- Some things you should know:
201
-
202
- * Instance-variables defined in the Controller are available in the View.
203
- * The return-value of the Controller does not matter if a template is present.
204
-
205
- ## Fifth Step, getting dynamic
206
-
207
- We set out to build the ultimate to-do list, but there are still some things
208
- missing. First off, we want to add new tasks, so let's get that done.
209
-
210
- Add a link on the `view/index.xhtml` like this:
211
-
212
- <h1>TodoList</h1>
213
- <a href="/new">New Task</a>
214
-
215
- Open a new file `view/new.xhtml` with a form to add a new task.
216
-
217
- <html>
218
- <head>
219
- <title>TodoList</title>
220
- </head>
221
- <body>
222
- <h1>New Task</h1>
223
- <a href="/">Back to TodoList</a>
224
- <form method="POST" action="create">
225
- Task: <input type="text" name="title" /><br />
226
- <input type="submit" />
227
- </form>
228
- </body>
229
- </html>
230
-
231
- We will not need a method for this on our controller, in fact, actions can
232
- consist of either method and template or only one of them. The Controller
233
- can act as a View and the View can work like you may know it from PHP.
234
-
235
- If you try to use this form you will notice that we have not yet defined a way
236
- to actually create the task.
237
-
238
- You will get the default Ramaze error-page instead. Please take your time to
239
- explore it and see how Ramaze reacted on the error.
240
-
241
- It will show you the back trace and what state the application is in at the
242
- moment, the request and response and the contents of the session. This is very
243
- useful for debugging and development, you can provide your own set of
244
- error-pages before going into production (or deactivate them fully) though.
245
-
246
- OK, let's implement the action for `#create`, all we want to do is take the
247
- requests parameters and create a new task for it, this looks like following on
248
- your MainController.
249
-
250
- def create
251
- title = request['title']
252
- TodoList[title] = {:done => false}
253
- redirect Rs()
254
- end
255
-
256
- That's all folks!
257
-
258
- We get the title from the request-object, put it into our TodoList as undone
259
- and redirect back to the mapping of the current Controller ('/' in this case).
260
-
261
- Now you can create as many tasks as you want, please don't get overworked ;)
262
-
263
-
264
- ## Sixth Step, open and close tasks
265
-
266
- Since the nature of tasks is to be done eventually
267
- we will need some way to mark it as done or open tasks again.
268
-
269
- Jump into `view/index.xhtml` and do the following:
270
-
271
-
272
- <?r @tasks.each do |title, status, toggle| ?>
273
- <li>
274
- #{c title}: #{status} - [ #{toggle} ]
275
- </li>
276
- <?r end ?>
277
-
278
- We added a new element here, `toggle`, the Controller should give us
279
- a link to change the status corresponding to the status of the task, so off
280
- we go and change the index method on the controller once again:
281
-
282
- def index
283
- @tasks = []
284
- TodoList.original.each do |title, value|
285
- if value[:done]
286
- status = 'done'
287
- toggle = A('Open Task', :href => Rs(:open, title))
288
- else
289
- status = 'not done'
290
- toggle = A('Close Task', :href => Rs(:close, title))
291
- end
292
- @tasks << [title, status, toggle]
293
- end
294
- @tasks.sort!
295
- end
296
-
297
- Wow, quite some new stuff here. Let me explain that in detail.
298
-
299
- We first decide whether a task is done or not, then go on and provide a link to
300
- toggle the status, A and Rs are both methods that help you do that.
301
- The result will be something like:
302
-
303
- <a href="/open/Wash+dishes">Close Task</a>
304
-
305
- Rs actually is responsible to build the links href, for more information please
306
- take a look at the RDoc for LinkHelper.
307
-
308
- Also, you might have noticed that the tasks were changing order on every reload,
309
- which is because we were using an Hash, which are per definition unsorted, so
310
- now we use an array to hold our tasks and sort it.
311
-
312
- As usual since the links for open and close don't lead anywhere, add the
313
- corresponding methods to the Controller:
314
-
315
- def open title
316
- task_status title, false
317
- redirect Rs()
318
- end
319
-
320
- def close title
321
- task_status title, true
322
- redirect Rs()
323
- end
324
-
325
- private
326
-
327
- def task_status title, status
328
- task = TodoList[title]
329
- task[:done] = status
330
- TodoList[title] = task
331
- end
332
-
333
- Oh, now what have we got here?
334
- `private` declares that methods from here on are only to be used within the
335
- Controller itself, we define an `#task_status` method that takes the title and
336
- status to be set so we don't have to repeat that code in `#open` and `#close`
337
- and follow the DRY (Don't repeat yourself) paradigm.
338
-
339
- Another thing we have not encountered so far is that you can define your public
340
- methods to take parameters on their own, they will be calculated from requests.
341
-
342
- '/open/Wash+dishes'
343
-
344
- will translate into:
345
-
346
- open('Wash dishes')
347
-
348
- Which in turn will call `task_status('Wash dishes', false)`
349
-
350
- That's it, go on and try it :)
351
-
352
-
353
- ## Seventh Step, delete tasks
354
-
355
- Well, creating, opening and closing work now, one of the things you will
356
- consider is to delete a task permanently.
357
-
358
- This is just two little changes away, so let's add the link for deletion in our
359
- Controller:
360
-
361
- delete = A('Delete', :href => Rs(:delete, title))
362
- @tasks << [title, status, toggle, delete]
363
-
364
- and an corresponding method while we're at it:
365
-
366
- def delete title
367
- TodoList.delete title
368
- redirect Rs()
369
- end
370
-
371
- Now jumping to `view/index.xhtml` again, change it so it shows the link:
372
-
373
- <?r @tasks.each do |title, status, toggle, delete| ?>
374
- <li>
375
- #{c title}: #{status} [ #{toggle} | #{delete} ]
376
- </li>
377
- <?r end ?>
378
-
379
- Voilà, you now have acquired the Certificate of Ramazeness.
380
-
381
- Just kidding, but that really are the basics, in the next few steps I will
382
- explain some more advanced concepts of Ramaze and Ezamar.
383
-
384
-
385
- ## Eighth Step, Elements
386
-
387
- <Page></Page>
388
-
389
- This is called an Element, Ramaze will go and search for a class that matches
390
- the name Page and responds to `#render`. Then it will go and hand the content in
391
- between to that Element.
392
-
393
- Sounds weird?
394
-
395
- Let us have a look at our templates, they got some repetitive stuff, like:
396
-
397
- <html>
398
- <head>
399
- <title>TodoList</title>
400
- </head>
401
- <body>
402
- <h1>some title</h1>
403
- </body>
404
- </html>
405
-
406
- How about replacing that with something short and reusable:
407
-
408
- <Page title="TodoList">
409
- your other content
410
- </Page>
411
-
412
- Would be nice of course, and when you start having more templates it makes an
413
- awful lot of sense being able to change the enclosing stuff in one place.
414
-
415
- So let's apply DRY here as well.
416
-
417
- Take a look at the `src/element/page.rb`
418
-
419
- class Page < Ezamar::Element
420
- def render
421
- %{
422
- <html>
423
- <head>
424
- <title>Welcome to Ramaze</title>
425
- </head>
426
- <body>
427
- #{content}
428
- </body>
429
- </html>
430
- }
431
- end
432
- end
433
-
434
- Alright, most things we need are in place already, the most important thing
435
- is the `#content` method that we call with `#{content}` inside the string in
436
- `#render`.
437
-
438
- Just adopt it to your liking, I'll just use the things we had in our templates
439
- so far:
440
-
441
- class Page < Ezamar::Element
442
- def render
443
- %{
444
- <html>
445
- <head>
446
- <title>TodoList</title>
447
- </head>
448
- <body>
449
- <h1>#{@title}</h1>
450
- #{content}
451
- </body>
452
- </html>
453
- }
454
- end
455
- end
456
-
457
- Please note that instance variables reflecting the parameters are set.
458
-
459
- And let's change our templates as well.
460
-
461
- First the `view/index.xhtml`
462
-
463
- <Page title="TodoList">
464
- <a href="/new">New Task</a>
465
- <?r if @tasks.empty? ?>
466
- No Tasks
467
- <?r else ?>
468
- <ul>
469
- <?r @tasks.each do |title, status, toggle, delete| ?>
470
- <li>
471
- #{c title}: #{status} [ #{toggle} | #{delete} ]
472
- </li>
473
- <?r end ?>
474
- </ul>
475
- <?r end ?>
476
- </Page>
477
-
478
- and the `view/new.xhtml`
479
-
480
- <Page title="New Task">
481
- <a href="/">Back to TodoList</a>
482
- <form method="POST" action="create">
483
- Task: <input type="text" name="title" /><br />
484
- <input type="submit" />
485
- </form>
486
- </Page>
487
-
488
- Alright, now just go and look at the result in the browser, try changing
489
- the things inside the Element and look at how it behaves.
490
-
491
-
492
- ## Ninth Step, Prettify
493
-
494
- We structure the data inside the list a little bit, in this case into a table,
495
- to get it line up properly and look actually structured.
496
-
497
- So, from what we have right now:
498
-
499
- <ul>
500
- <?r @tasks.each do |title, status, toggle, delete| ?>
501
- <li>
502
- #{c title}: #{status} [ #{toggle} | #{delete} ]
503
- </li>
504
- <?r end ?>
505
- </ul>
506
-
507
- To something like this:
508
-
509
- <table>
510
- <?r @tasks.each do |title, status, toggle, delete| ?>
511
- <tr>
512
- <td class="title"> #{c title} </td>
513
- <td class="status"> #{status} </td>
514
- <td class="toggle"> #{toggle} </td>
515
- <td class="delete"> #{delete} </td>
516
- </tr>
517
- <?r end ?>
518
- </table>
519
-
520
- And, since we have proper classes to address some style sheets, jump into the
521
- Page element and add some style sheet:
522
-
523
- <head>
524
- <title>TodoList</title>
525
- <style>
526
- table { width: 100%; }
527
- tr { background: #efe; width: 100%; }
528
- tr:hover { background: #dfd; }
529
- td.title { font-weight: bold; width: 60%; }
530
- td.status { margin: 1em; }
531
- a { color: #3a3; }
532
- </style>
533
- </head>
534
-
535
- That looks quite a bit nicer, right? And yes, if you don't like tables (though
536
- this is an entirely legit use in my opinion) you can just do it like you want,
537
- using nested lists or divs/spans, replacing the open/close and delete links with
538
- nice images and changing the style according to the status.
539
-
540
- I will leave this as an exercise to the reader.
541
-
542
-
543
- ## Tenth Step, Configuration
544
-
545
- To round up this tutorial a bit, let's introduce you to configuration in Ramaze.
546
- This will not go into full depth of possibilities or a total coverage of the
547
- options, since they are bound to change over time.
548
-
549
- First of all, the default port Ramaze runs on is 7000, but to make it a usual
550
- webserver it has to run on port 80. So, let's add following line in your
551
- start.rb right after the lines of require you added before:
552
-
553
- Ramaze::Global.port = 80
554
-
555
- Alright, that wasn't that hard.
556
- Let's say now you also want to run Mongrel instead of WEBrick, to get nice a bit
557
- of performance:
558
-
559
- Ramaze::Global.adapter = :mongrel
560
-
561
- To do this in a DRY way you could also do following:
562
-
563
- Ramaze::Global.setup do |g|
564
- g.port = 80
565
- g.adapter = :mongrel
566
- end
567
-
568
- It seems to be quite common to put this configuration into separate files so you
569
- can just require it on demand. There are other, slightly stronger way to set
570
- options, which is either using flags on the ramaze executable, or like this:
571
-
572
- Ramaze.start :port => 80, :adapter => :mongrel
573
-
574
- We haven't started Ramaze directly as of yet, but this allows you to ignore the
575
- ramaze executable and just run your application by `ruby start.rb`.
576
-
577
-
578
- ## Eleventh Step, Refactor with AspectHelper
579
-
580
- Now, if you take a closer look at the Controller you will see:
581
-
582
- def create
583
- title = request['title']
584
- TodoList[title] = {:done => false}
585
- redirect R(self)
586
- end
587
-
588
- def open title
589
- task_status title, false
590
- redirect R(self)
591
- end
592
-
593
- def close title
594
- task_status title, true
595
- redirect R(self)
596
- end
597
-
598
- def delete title
599
- TodoList.delete title
600
- redirect R(self)
601
- end
602
-
603
- We did some refactoring before, by introducing `#task_status`, but here we have
604
- repetition again: `redirect Rs()` _after_ each method did its job.
605
-
606
- However, we can take advantage of one of the helpers Ramaze offers, the
607
- AspectHelper.
608
- It allows you to easily wrap actions in your controller with other methods
609
-
610
- In your Controller, replace the previous chunk with following:
611
-
612
- def create
613
- title = request['title']
614
- TodoList[title] = {:done => false}
615
- end
616
-
617
- def open title
618
- task_status title, false
619
- end
620
-
621
- def close title
622
- task_status title, true
623
- end
624
-
625
- def delete title
626
- TodoList.delete title
627
- end
628
-
629
- helper :aspect
630
- after(:create, :open, :close, :delete){ redirect(Rs()) }
631
-
632
- Alright, that looks a lot nicer already and is definitely easier to maintain.
633
-
634
- There is a symmetrical `before` aspect that you could take advantage of as
635
- well, and in case you want to add required authentication for all actions of a
636
- Controller you could use `before_all` and `after_all` instead of a list of
637
- action-names.
638
-
639
-
640
- ## Twelfth Step, Validation and Errors
641
-
642
- Right now, all kinds of things could still go wrong when you do things like
643
- creating tasks with no title at all or try to open/close a task that does not
644
- exist. So in this step we will add some little checks for these cases.
645
-
646
- First we head over to the Controller again and take a look at `#create`:
647
-
648
- def create
649
- title = request['title']
650
- TodoList[title] = {:done => false}
651
- end
652
-
653
- Here we just create a new task, no matter what we get. Every seasoned
654
- web-developer would advise you to be suspicious about all the input you receive
655
- from your users, so let's apply this advice.
656
-
657
- def create
658
- if title = request['title']
659
- title.strip!
660
- if title.empty?
661
- failed("Please enter a title")
662
- redirect '/new'
663
- end
664
- TodoList[title] = {:done => false}
665
- end
666
- end
667
-
668
- First of all we check if we got a request with a value for 'title', if we get
669
- none we just let the aspect kick in that will redirect the browser to the index.
670
- Next we strip the title of all spaces around it so we can check if it is empty.
671
- We will talk about the specifics of our error-handling now.
672
-
673
- Ramaze has a helper called FlashHelper, that will keep a hash associated with
674
- the session for one request, afterwards the hash is thrown away. This is
675
- specifically useful for giving the user feedback while keeping a stateless
676
- approach.
677
-
678
- Let me show you our `#failed` method (it goes in the private section to
679
- `#task_status`):
680
-
681
- def failed(message)
682
- flash[:error] = message
683
- end
684
-
685
- Duh, you may say, wouldn't that fit in the one line instead of the call to
686
- `#failed`?
687
- Indeed, it would, but let me remind you, we have no checks for changing the
688
- status of a task yet. We will need error-handling there as well, so we just keep
689
- our code DRY and maintainable by collecting shared behaviour in small pieces.
690
-
691
- Now on to the `#task_status`:
692
-
693
- def task_status title, status
694
- unless task = TodoList[title]
695
- failed "No such Task: `#{title}'"
696
- redirect_referer
697
- end
698
-
699
- task[:done] = status
700
- TodoList[title] = task
701
- end
702
-
703
- That used to look like this:
704
-
705
- def task_status title, status
706
- task = TodoList[title]
707
- task[:done] = status
708
- TodoList[title] = task
709
- end
710
-
711
- So in fact all we added is a check whether a task already exists, set an
712
- error-message in case it doesn't and redirect to wherever the browser came from.
713
-
714
- But what about actually showing the error-messages we so carefully set? Well,
715
- where do we change the view? Right, in the templates. But both templates we have
716
- so far (index and new) share this behaviour, so we head over to the Element
717
- and add in the right place:
718
-
719
- <body>
720
- <h1>#{@title}</h1>
721
- <?r if flash[:error] ?>
722
- <div class="error">
723
- \\#{flash[:error]}
724
- </div>
725
- <?r end ?>
726
- #{content}
727
- </body>
728
-
729
- The only thing special about it is the `\\#{flash[:error]}`, we have to escape
730
- the `#` so it won't evaluate this immediately but wait until it is really
731
- rendered.
732
- As a note, If you read this as pure markaby, the double backslash is to output
733
- properly to HTML, just use one instead.
734
- Again, you can add some nifty style for that.
735
-
736
- To be continued...