rjspotter-ramaze 2009.06.29

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 (503) hide show
  1. data/.gitignore +3 -0
  2. data/.mailmap +25 -0
  3. data/MANIFEST +502 -0
  4. data/README.md +457 -0
  5. data/Rakefile +88 -0
  6. data/benchmark/bench_templates/bench.rb +67 -0
  7. data/benchmark/bench_templates/view/large.erb +79 -0
  8. data/benchmark/bench_templates/view/large.haml +41 -0
  9. data/benchmark/bench_templates/view/large.xhtml +79 -0
  10. data/benchmark/bench_templates/view/small.erb +21 -0
  11. data/benchmark/bench_templates/view/small.haml +12 -0
  12. data/benchmark/bench_templates/view/small.xhtml +21 -0
  13. data/benchmark/results.txt +131 -0
  14. data/benchmark/run.rb +355 -0
  15. data/benchmark/suite/minimal.rb +11 -0
  16. data/benchmark/suite/no_informer.rb +7 -0
  17. data/benchmark/suite/no_sessions.rb +9 -0
  18. data/benchmark/suite/no_template.rb +7 -0
  19. data/benchmark/suite/simple.rb +5 -0
  20. data/benchmark/suite/template_erubis.rb +8 -0
  21. data/benchmark/suite/template_etanni.rb +8 -0
  22. data/benchmark/suite/template_ezamar.rb +8 -0
  23. data/benchmark/suite/template_haml.rb +13 -0
  24. data/benchmark/suite/template_liquid.rb +11 -0
  25. data/benchmark/suite/template_markaby.rb +9 -0
  26. data/benchmark/suite/template_nagoro.rb +8 -0
  27. data/benchmark/suite/template_redcloth.rb +13 -0
  28. data/benchmark/suite/template_tenjin.rb +8 -0
  29. data/benchmark/test.rb +35 -0
  30. data/bin/ramaze +15 -0
  31. data/doc/AUTHORS +44 -0
  32. data/doc/CHANGELOG +17362 -0
  33. data/doc/COPYING +56 -0
  34. data/doc/FAQ +92 -0
  35. data/doc/GPL +339 -0
  36. data/doc/INSTALL +92 -0
  37. data/doc/LEGAL +26 -0
  38. data/doc/TODO +29 -0
  39. data/doc/meta/announcement.txt +146 -0
  40. data/doc/meta/configuration.txt +163 -0
  41. data/doc/meta/internals.txt +278 -0
  42. data/doc/meta/users.kml +64 -0
  43. data/doc/tutorial/todolist.html +1379 -0
  44. data/doc/tutorial/todolist.txt +920 -0
  45. data/examples/app/auth/layout/auth.xhtml +25 -0
  46. data/examples/app/auth/start.rb +23 -0
  47. data/examples/app/auth/view/index.xhtml +4 -0
  48. data/examples/app/auth/view/login.xhtml +20 -0
  49. data/examples/app/auth/view/secret.xhtml +1 -0
  50. data/examples/app/blog/README +3 -0
  51. data/examples/app/blog/app.rb +69 -0
  52. data/examples/app/blog/config.ru +17 -0
  53. data/examples/app/blog/controller/comment.rb +45 -0
  54. data/examples/app/blog/controller/entry.rb +85 -0
  55. data/examples/app/blog/controller/init.rb +86 -0
  56. data/examples/app/blog/controller/main.rb +20 -0
  57. data/examples/app/blog/controller/tag.rb +9 -0
  58. data/examples/app/blog/layout/default.nag +31 -0
  59. data/examples/app/blog/model/comment.rb +58 -0
  60. data/examples/app/blog/model/entry.rb +89 -0
  61. data/examples/app/blog/model/init.rb +15 -0
  62. data/examples/app/blog/model/tag.rb +36 -0
  63. data/examples/app/blog/public/css/screen.css +273 -0
  64. data/examples/app/blog/spec/blog.rb +87 -0
  65. data/examples/app/blog/start.rb +5 -0
  66. data/examples/app/blog/view/comment/form.nag +10 -0
  67. data/examples/app/blog/view/comment/show.nag +16 -0
  68. data/examples/app/blog/view/entry/edit.nag +14 -0
  69. data/examples/app/blog/view/entry/feed.atom.nag +8 -0
  70. data/examples/app/blog/view/entry/feed.rss.nag +7 -0
  71. data/examples/app/blog/view/entry/index.nag +7 -0
  72. data/examples/app/blog/view/entry/new.nag +13 -0
  73. data/examples/app/blog/view/entry/show.nag +36 -0
  74. data/examples/app/blog/view/feed.atom.nag +18 -0
  75. data/examples/app/blog/view/feed.rss.nag +25 -0
  76. data/examples/app/blog/view/index.nag +6 -0
  77. data/examples/app/blog/view/tag/index.nag +5 -0
  78. data/examples/app/chat/layout/default.xhtml +13 -0
  79. data/examples/app/chat/model/history.rb +38 -0
  80. data/examples/app/chat/model/message.rb +7 -0
  81. data/examples/app/chat/public/css/chat.css +9 -0
  82. data/examples/app/chat/public/js/chat.js +28 -0
  83. data/examples/app/chat/public/js/jquery.js +3436 -0
  84. data/examples/app/chat/start.rb +39 -0
  85. data/examples/app/chat/view/chat.xhtml +9 -0
  86. data/examples/app/chat/view/index.xhtml +7 -0
  87. data/examples/app/localization/locale/de.yaml +5 -0
  88. data/examples/app/localization/locale/en.yaml +5 -0
  89. data/examples/app/localization/locale/ja.yaml +5 -0
  90. data/examples/app/localization/start.rb +48 -0
  91. data/examples/app/sourceview/public/coderay.css +104 -0
  92. data/examples/app/sourceview/public/images/file.gif +0 -0
  93. data/examples/app/sourceview/public/images/folder.gif +0 -0
  94. data/examples/app/sourceview/public/images/tv-collapsable-last.gif +0 -0
  95. data/examples/app/sourceview/public/images/tv-collapsable.gif +0 -0
  96. data/examples/app/sourceview/public/images/tv-expandable-last.gif +0 -0
  97. data/examples/app/sourceview/public/images/tv-expandable.gif +0 -0
  98. data/examples/app/sourceview/public/images/tv-item-last.gif +0 -0
  99. data/examples/app/sourceview/public/images/tv-item.gif +0 -0
  100. data/examples/app/sourceview/public/jquery.js +11 -0
  101. data/examples/app/sourceview/public/jquery.treeview.css +48 -0
  102. data/examples/app/sourceview/public/jquery.treeview.js +223 -0
  103. data/examples/app/sourceview/public/sourceview.js +52 -0
  104. data/examples/app/sourceview/start.rb +79 -0
  105. data/examples/app/sourceview/view/index.haml +59 -0
  106. data/examples/app/todolist/controller/init.rb +10 -0
  107. data/examples/app/todolist/controller/task.rb +39 -0
  108. data/examples/app/todolist/layout/default.xhtml +14 -0
  109. data/examples/app/todolist/model/init.rb +14 -0
  110. data/examples/app/todolist/model/task.rb +39 -0
  111. data/examples/app/todolist/public/css/screen.css +63 -0
  112. data/examples/app/todolist/public/favicon.ico +0 -0
  113. data/examples/app/todolist/start.rb +11 -0
  114. data/examples/app/todolist/view/index.xhtml +29 -0
  115. data/examples/app/upload/start.rb +19 -0
  116. data/examples/app/upload/view/index.xhtml +25 -0
  117. data/examples/app/whywiki/spec/whywiki.rb +58 -0
  118. data/examples/app/whywiki/start.rb +46 -0
  119. data/examples/app/whywiki/template/edit.xhtml +14 -0
  120. data/examples/app/whywiki/template/show.xhtml +18 -0
  121. data/examples/app/wikore/spec/wikore.rb +109 -0
  122. data/examples/app/wikore/src/controller.rb +78 -0
  123. data/examples/app/wikore/src/model.rb +56 -0
  124. data/examples/app/wikore/start.rb +9 -0
  125. data/examples/app/wikore/view/index.xhtml +8 -0
  126. data/examples/app/wiktacular/README +2 -0
  127. data/examples/app/wiktacular/mkd/link/2007-07-20_19-45-51.mkd +1 -0
  128. data/examples/app/wiktacular/mkd/link/current.mkd +1 -0
  129. data/examples/app/wiktacular/mkd/main/2007-07-20_16-31-33.mkd +1 -0
  130. data/examples/app/wiktacular/mkd/main/2007-07-20_19-21-12.mkd +1 -0
  131. data/examples/app/wiktacular/mkd/main/2007-07-20_19-23-10.mkd +2 -0
  132. data/examples/app/wiktacular/mkd/main/2007-07-20_19-45-07.mkd +2 -0
  133. data/examples/app/wiktacular/mkd/main/current.mkd +2 -0
  134. data/examples/app/wiktacular/mkd/markdown/current.mkd +3 -0
  135. data/examples/app/wiktacular/mkd/testing/2007-07-20_16-43-46.mkd +2 -0
  136. data/examples/app/wiktacular/mkd/testing/2007-07-20_19-43-50.mkd +3 -0
  137. data/examples/app/wiktacular/mkd/testing/2007-07-21_18-46-01.mkd +11 -0
  138. data/examples/app/wiktacular/mkd/testing/2007-07-21_18-46-32.mkd +13 -0
  139. data/examples/app/wiktacular/mkd/testing/2007-07-21_18-47-08.mkd +17 -0
  140. data/examples/app/wiktacular/mkd/testing/2007-07-21_18-47-54.mkd +17 -0
  141. data/examples/app/wiktacular/mkd/testing/current.mkd +17 -0
  142. data/examples/app/wiktacular/public/favicon.ico +0 -0
  143. data/examples/app/wiktacular/public/screen.css +72 -0
  144. data/examples/app/wiktacular/spec/wiktacular.rb +157 -0
  145. data/examples/app/wiktacular/src/controller.rb +55 -0
  146. data/examples/app/wiktacular/src/model.rb +102 -0
  147. data/examples/app/wiktacular/start.rb +8 -0
  148. data/examples/app/wiktacular/template/edit.xhtml +6 -0
  149. data/examples/app/wiktacular/template/html_layout.xhtml +27 -0
  150. data/examples/app/wiktacular/template/index.xhtml +9 -0
  151. data/examples/app/wiktacular/template/new.xhtml +6 -0
  152. data/examples/basic/element.rb +47 -0
  153. data/examples/basic/gestalt.rb +26 -0
  154. data/examples/basic/hello.rb +14 -0
  155. data/examples/basic/layout.rb +28 -0
  156. data/examples/basic/linking.rb +29 -0
  157. data/examples/basic/partial.rb +26 -0
  158. data/examples/basic/simple.rb +52 -0
  159. data/examples/helpers/cache.rb +33 -0
  160. data/examples/helpers/form_with_sequel.rb +24 -0
  161. data/examples/helpers/httpdigest.rb +107 -0
  162. data/examples/helpers/identity.rb +18 -0
  163. data/examples/helpers/nitro_form.rb +23 -0
  164. data/examples/helpers/paginate.rb +71 -0
  165. data/examples/helpers/rest.rb +28 -0
  166. data/examples/helpers/simple_captcha.rb +29 -0
  167. data/examples/misc/css.rb +37 -0
  168. data/examples/misc/facebook.rb +159 -0
  169. data/examples/misc/memleak_detector.rb +37 -0
  170. data/examples/misc/nagoro_element.rb +43 -0
  171. data/examples/misc/ramaise.rb +132 -0
  172. data/examples/misc/rapp.rb +56 -0
  173. data/examples/misc/sequel_scaffolding.rb +34 -0
  174. data/examples/misc/serve_directory.rb +6 -0
  175. data/examples/templates/template_erubis.rb +52 -0
  176. data/examples/templates/template_ezamar.rb +51 -0
  177. data/examples/templates/template_haml.rb +49 -0
  178. data/examples/templates/template_liquid.rb +66 -0
  179. data/examples/templates/template_markaby.rb +57 -0
  180. data/examples/templates/template_nagoro.rb +50 -0
  181. data/examples/templates/template_redcloth.rb +58 -0
  182. data/examples/templates/template_remarkably.rb +54 -0
  183. data/examples/templates/template_tenjin.rb +52 -0
  184. data/examples/templates/view/external.haml +22 -0
  185. data/examples/templates/view/external.liquid +28 -0
  186. data/examples/templates/view/external.mab +30 -0
  187. data/examples/templates/view/external.nag +28 -0
  188. data/examples/templates/view/external.redcloth +19 -0
  189. data/examples/templates/view/external.rem +30 -0
  190. data/examples/templates/view/external.rhtml +28 -0
  191. data/examples/templates/view/external.tenjin +28 -0
  192. data/examples/templates/view/external.zmr +28 -0
  193. data/lib/proto/app.rb +14 -0
  194. data/lib/proto/config.ru +20 -0
  195. data/lib/proto/controller/init.rb +11 -0
  196. data/lib/proto/controller/main.rb +20 -0
  197. data/lib/proto/layout/default.xhtml +24 -0
  198. data/lib/proto/model/init.rb +4 -0
  199. data/lib/proto/public/.htaccess +24 -0
  200. data/lib/proto/public/css/screen.css +30 -0
  201. data/lib/proto/public/dispatch.fcgi +11 -0
  202. data/lib/proto/public/favicon.ico +0 -0
  203. data/lib/proto/public/js/jquery.js +4376 -0
  204. data/lib/proto/public/ramaze.png +0 -0
  205. data/lib/proto/spec/main.rb +20 -0
  206. data/lib/proto/start.rb +8 -0
  207. data/lib/proto/view/index.xhtml +41 -0
  208. data/lib/ramaze.rb +87 -0
  209. data/lib/ramaze/app.rb +124 -0
  210. data/lib/ramaze/cache.rb +19 -0
  211. data/lib/ramaze/cache/localmemcache.rb +56 -0
  212. data/lib/ramaze/cache/memcache.rb +124 -0
  213. data/lib/ramaze/cache/sequel.rb +82 -0
  214. data/lib/ramaze/contrib/addressable_route.rb +55 -0
  215. data/lib/ramaze/contrib/app_graph.rb +64 -0
  216. data/lib/ramaze/contrib/email.rb +88 -0
  217. data/lib/ramaze/contrib/facebook.rb +23 -0
  218. data/lib/ramaze/contrib/facebook/facebook.rb +171 -0
  219. data/lib/ramaze/contrib/gettext.rb +113 -0
  220. data/lib/ramaze/contrib/gettext/mo.rb +155 -0
  221. data/lib/ramaze/contrib/gettext/parser.rb +46 -0
  222. data/lib/ramaze/contrib/gettext/po.rb +109 -0
  223. data/lib/ramaze/contrib/gzip_filter.rb +1 -0
  224. data/lib/ramaze/contrib/maruku_uv.rb +59 -0
  225. data/lib/ramaze/contrib/profiling.rb +36 -0
  226. data/lib/ramaze/contrib/rest.rb +22 -0
  227. data/lib/ramaze/contrib/sequel/create_join.rb +26 -0
  228. data/lib/ramaze/contrib/sequel/form_field.rb +129 -0
  229. data/lib/ramaze/contrib/sequel/image.rb +196 -0
  230. data/lib/ramaze/contrib/sequel/relation.rb +98 -0
  231. data/lib/ramaze/controller.rb +104 -0
  232. data/lib/ramaze/controller/default.rb +12 -0
  233. data/lib/ramaze/current.rb +7 -0
  234. data/lib/ramaze/files.rb +24 -0
  235. data/lib/ramaze/gestalt.rb +132 -0
  236. data/lib/ramaze/helper.rb +13 -0
  237. data/lib/ramaze/helper/auth.rb +84 -0
  238. data/lib/ramaze/helper/bench.rb +41 -0
  239. data/lib/ramaze/helper/cache.rb +117 -0
  240. data/lib/ramaze/helper/disqus.rb +26 -0
  241. data/lib/ramaze/helper/flash.rb +62 -0
  242. data/lib/ramaze/helper/form.rb +127 -0
  243. data/lib/ramaze/helper/formatting.rb +189 -0
  244. data/lib/ramaze/helper/gestalt.rb +47 -0
  245. data/lib/ramaze/helper/gravatar.rb +79 -0
  246. data/lib/ramaze/helper/httpdigest.rb +97 -0
  247. data/lib/ramaze/helper/identity.rb +119 -0
  248. data/lib/ramaze/helper/layout.rb +97 -0
  249. data/lib/ramaze/helper/link.rb +56 -0
  250. data/lib/ramaze/helper/localize.rb +138 -0
  251. data/lib/ramaze/helper/markaby.rb +31 -0
  252. data/lib/ramaze/helper/maruku.rb +16 -0
  253. data/lib/ramaze/helper/nitroform.rb +14 -0
  254. data/lib/ramaze/helper/pager.rb +367 -0
  255. data/lib/ramaze/helper/paginate.rb +242 -0
  256. data/lib/ramaze/helper/partial.rb +100 -0
  257. data/lib/ramaze/helper/remarkably.rb +14 -0
  258. data/lib/ramaze/helper/request_accessor.rb +16 -0
  259. data/lib/ramaze/helper/sequel.rb +55 -0
  260. data/lib/ramaze/helper/sequel_form.rb +284 -0
  261. data/lib/ramaze/helper/simple_captcha.rb +61 -0
  262. data/lib/ramaze/helper/stack.rb +75 -0
  263. data/lib/ramaze/helper/tagz.rb +19 -0
  264. data/lib/ramaze/helper/thread.rb +17 -0
  265. data/lib/ramaze/helper/ultraviolet.rb +46 -0
  266. data/lib/ramaze/helper/user.rb +229 -0
  267. data/lib/ramaze/helper/xhtml.rb +34 -0
  268. data/lib/ramaze/log.rb +39 -0
  269. data/lib/ramaze/log/analogger.rb +39 -0
  270. data/lib/ramaze/log/growl.rb +38 -0
  271. data/lib/ramaze/log/hub.rb +41 -0
  272. data/lib/ramaze/log/informer.rb +129 -0
  273. data/lib/ramaze/log/knotify.rb +28 -0
  274. data/lib/ramaze/log/logger.rb +26 -0
  275. data/lib/ramaze/log/logging.rb +83 -0
  276. data/lib/ramaze/log/rotatinginformer.rb +168 -0
  277. data/lib/ramaze/log/syslog.rb +51 -0
  278. data/lib/ramaze/log/xosd.rb +92 -0
  279. data/lib/ramaze/middleware_compiler.rb +13 -0
  280. data/lib/ramaze/plugin.rb +69 -0
  281. data/lib/ramaze/reloader.rb +172 -0
  282. data/lib/ramaze/reloader/watch_inotify.rb +85 -0
  283. data/lib/ramaze/reloader/watch_stat.rb +58 -0
  284. data/lib/ramaze/request.rb +115 -0
  285. data/lib/ramaze/response.rb +36 -0
  286. data/lib/ramaze/setup.rb +123 -0
  287. data/lib/ramaze/snippets.rb +22 -0
  288. data/lib/ramaze/snippets/array/put_within.rb +44 -0
  289. data/lib/ramaze/snippets/binding/locals.rb +25 -0
  290. data/lib/ramaze/snippets/blankslate.rb +7 -0
  291. data/lib/ramaze/snippets/fiber.rb +63 -0
  292. data/lib/ramaze/snippets/kernel/pretty_inspect.rb +21 -0
  293. data/lib/ramaze/snippets/metaid.rb +17 -0
  294. data/lib/ramaze/snippets/numeric/filesize_format.rb +32 -0
  295. data/lib/ramaze/snippets/numeric/time.rb +63 -0
  296. data/lib/ramaze/snippets/object/__dir__.rb +29 -0
  297. data/lib/ramaze/snippets/object/instance_variable_defined.rb +19 -0
  298. data/lib/ramaze/snippets/object/pretty.rb +16 -0
  299. data/lib/ramaze/snippets/object/scope.rb +18 -0
  300. data/lib/ramaze/snippets/ordered_set.rb +51 -0
  301. data/lib/ramaze/snippets/proc/locals.rb +19 -0
  302. data/lib/ramaze/snippets/ramaze/acquire.rb +31 -0
  303. data/lib/ramaze/snippets/ramaze/deprecated.rb +23 -0
  304. data/lib/ramaze/snippets/ramaze/dictionary.rb +400 -0
  305. data/lib/ramaze/snippets/ramaze/fiber.rb +24 -0
  306. data/lib/ramaze/snippets/ramaze/struct.rb +45 -0
  307. data/lib/ramaze/snippets/string/camel_case.rb +21 -0
  308. data/lib/ramaze/snippets/string/color.rb +31 -0
  309. data/lib/ramaze/snippets/string/end_with.rb +20 -0
  310. data/lib/ramaze/snippets/string/esc.rb +34 -0
  311. data/lib/ramaze/snippets/string/ord.rb +21 -0
  312. data/lib/ramaze/snippets/string/snake_case.rb +21 -0
  313. data/lib/ramaze/snippets/string/start_with.rb +19 -0
  314. data/lib/ramaze/snippets/string/unindent.rb +28 -0
  315. data/lib/ramaze/snippets/thread/into.rb +18 -0
  316. data/lib/ramaze/spec.rb +33 -0
  317. data/lib/ramaze/spec/bacon.rb +34 -0
  318. data/lib/ramaze/spec/helper/bacon.rb +8 -0
  319. data/lib/ramaze/spec/helper/pretty_output.rb +82 -0
  320. data/lib/ramaze/spec/helper/snippets.rb +16 -0
  321. data/lib/ramaze/spec/helper/template_examples.rb +19 -0
  322. data/lib/ramaze/tool/bin.rb +340 -0
  323. data/lib/ramaze/tool/create.rb +48 -0
  324. data/lib/ramaze/tool/project_creator.rb +111 -0
  325. data/lib/ramaze/version.rb +3 -0
  326. data/lib/ramaze/view.rb +39 -0
  327. data/lib/ramaze/view/erubis.rb +23 -0
  328. data/lib/ramaze/view/ezamar.rb +23 -0
  329. data/lib/ramaze/view/gestalt.rb +14 -0
  330. data/lib/ramaze/view/haml.rb +16 -0
  331. data/lib/ramaze/view/liquid.rb +100 -0
  332. data/lib/ramaze/view/maruku.rb +15 -0
  333. data/lib/ramaze/view/nagoro.rb +44 -0
  334. data/lib/ramaze/view/nagoro/render_partial.rb +32 -0
  335. data/lib/ramaze/view/redcloth.rb +21 -0
  336. data/lib/ramaze/view/remarkably.rb +21 -0
  337. data/lib/ramaze/view/sass.rb +21 -0
  338. data/lib/ramaze/view/tagz.rb +63 -0
  339. data/lib/ramaze/view/tenjin.rb +32 -0
  340. data/lib/vendor/etag.rb +22 -0
  341. data/lib/vendor/route_exceptions.rb +42 -0
  342. data/ramaze.gemspec +85 -0
  343. data/spec/contrib/addressable_route.rb +32 -0
  344. data/spec/contrib/rest.rb +28 -0
  345. data/spec/examples/caching.rb +16 -0
  346. data/spec/examples/css.rb +14 -0
  347. data/spec/examples/element.rb +15 -0
  348. data/spec/examples/hello.rb +10 -0
  349. data/spec/examples/helpers/httpdigest.rb +64 -0
  350. data/spec/examples/linking.rb +17 -0
  351. data/spec/examples/simple.rb +40 -0
  352. data/spec/examples/templates/template_erubis.rb +10 -0
  353. data/spec/examples/templates/template_ezamar.rb +10 -0
  354. data/spec/examples/templates/template_haml.rb +10 -0
  355. data/spec/examples/templates/template_liquid.rb +10 -0
  356. data/spec/examples/templates/template_markaby.rb +11 -0
  357. data/spec/examples/templates/template_nagoro.rb +10 -0
  358. data/spec/examples/templates/template_redcloth.rb +10 -0
  359. data/spec/examples/templates/template_remarkably.rb +10 -0
  360. data/spec/examples/templates/template_tenjin.rb +10 -0
  361. data/spec/helper.rb +9 -0
  362. data/spec/ramaze/action/render.rb +21 -0
  363. data/spec/ramaze/action/view/bar.xhtml +1 -0
  364. data/spec/ramaze/action/view/instancevars/layout.xhtml +1 -0
  365. data/spec/ramaze/action/view/other_wrapper.erb +1 -0
  366. data/spec/ramaze/action/view/other_wrapper.xhtml +1 -0
  367. data/spec/ramaze/action/view/single_wrapper.xhtml +1 -0
  368. data/spec/ramaze/action/view/sub/sub_wrapper.erb +1 -0
  369. data/spec/ramaze/action/view/sub/sub_wrapper.xhtml +1 -0
  370. data/spec/ramaze/app.rb +47 -0
  371. data/spec/ramaze/bin/ramaze.rb +91 -0
  372. data/spec/ramaze/cache/localmemcache.rb +49 -0
  373. data/spec/ramaze/cache/memcache.rb +60 -0
  374. data/spec/ramaze/cache/sequel.rb +51 -0
  375. data/spec/ramaze/controller/actionless_templates.rb +36 -0
  376. data/spec/ramaze/controller/lonely_mapping.rb +16 -0
  377. data/spec/ramaze/controller/mapping.rb +43 -0
  378. data/spec/ramaze/controller/provide_inheritance.rb +47 -0
  379. data/spec/ramaze/controller/resolve.rb +30 -0
  380. data/spec/ramaze/controller/subclass.rb +36 -0
  381. data/spec/ramaze/controller/template_resolving.rb +77 -0
  382. data/spec/ramaze/controller/view/bar.xhtml +1 -0
  383. data/spec/ramaze/controller/view/base/another.xhtml +1 -0
  384. data/spec/ramaze/controller/view/greet.xhtml +1 -0
  385. data/spec/ramaze/controller/view/list.xhtml +1 -0
  386. data/spec/ramaze/controller/view/other/greet/other.xhtml +1 -0
  387. data/spec/ramaze/controller/view/other_wrapper.xhtml +1 -0
  388. data/spec/ramaze/dispatcher/directory.rb +69 -0
  389. data/spec/ramaze/dispatcher/file.rb +71 -0
  390. data/spec/ramaze/dispatcher/public/favicon.ico +0 -0
  391. data/spec/ramaze/dispatcher/public/file name.txt +1 -0
  392. data/spec/ramaze/dispatcher/public/test_download.css +141 -0
  393. data/spec/ramaze/error.rb +88 -0
  394. data/spec/ramaze/files.rb +29 -0
  395. data/spec/ramaze/files/public_1/plain.txt +1 -0
  396. data/spec/ramaze/files/public_2/rich.txt +1 -0
  397. data/spec/ramaze/gestalt.rb +135 -0
  398. data/spec/ramaze/helper/auth.rb +83 -0
  399. data/spec/ramaze/helper/bench.rb +18 -0
  400. data/spec/ramaze/helper/cache.rb +124 -0
  401. data/spec/ramaze/helper/flash.rb +41 -0
  402. data/spec/ramaze/helper/form.rb +356 -0
  403. data/spec/ramaze/helper/formatting.rb +111 -0
  404. data/spec/ramaze/helper/gestalt.rb +15 -0
  405. data/spec/ramaze/helper/gravatar.rb +40 -0
  406. data/spec/ramaze/helper/httpdigest.rb +144 -0
  407. data/spec/ramaze/helper/layout.rb +79 -0
  408. data/spec/ramaze/helper/layout/default.xhtml +5 -0
  409. data/spec/ramaze/helper/link.rb +70 -0
  410. data/spec/ramaze/helper/localize.rb +62 -0
  411. data/spec/ramaze/helper/maruku.rb +19 -0
  412. data/spec/ramaze/helper/pager.rb +96 -0
  413. data/spec/ramaze/helper/paginate.rb +68 -0
  414. data/spec/ramaze/helper/request_accessor.rb +19 -0
  415. data/spec/ramaze/helper/sequel_form.rb +91 -0
  416. data/spec/ramaze/helper/simple_captcha.rb +45 -0
  417. data/spec/ramaze/helper/stack.rb +86 -0
  418. data/spec/ramaze/helper/user.rb +72 -0
  419. data/spec/ramaze/helper/view/locals.xhtml +1 -0
  420. data/spec/ramaze/helper/view/loop.xhtml +4 -0
  421. data/spec/ramaze/helper/view/num.xhtml +1 -0
  422. data/spec/ramaze/helper/view/partial.xhtml +1 -0
  423. data/spec/ramaze/helper/view/recursive.xhtml +8 -0
  424. data/spec/ramaze/helper/view/recursive_local_ivars.xhtml +7 -0
  425. data/spec/ramaze/helper/view/recursive_locals.xhtml +7 -0
  426. data/spec/ramaze/helper/view/test_template.xhtml +1 -0
  427. data/spec/ramaze/helper/xhtml.rb +32 -0
  428. data/spec/ramaze/log/informer.rb +73 -0
  429. data/spec/ramaze/log/logging.rb +63 -0
  430. data/spec/ramaze/log/syslog.rb +73 -0
  431. data/spec/ramaze/params.rb +153 -0
  432. data/spec/ramaze/public/favicon.ico +0 -0
  433. data/spec/ramaze/public/ramaze.png +0 -0
  434. data/spec/ramaze/public/test_download.css +141 -0
  435. data/spec/ramaze/request.rb +61 -0
  436. data/spec/ramaze/rewrite/file.css +1 -0
  437. data/spec/ramaze/session/memcache.rb +66 -0
  438. data/spec/ramaze/struct.rb +47 -0
  439. data/spec/ramaze/template/ramaze/external.test +1 -0
  440. data/spec/ramaze/view.rb +36 -0
  441. data/spec/ramaze/view/erubis.rb +73 -0
  442. data/spec/ramaze/view/erubis/external.rhtml +8 -0
  443. data/spec/ramaze/view/erubis/sum.rhtml +1 -0
  444. data/spec/ramaze/view/ezamar.rb +73 -0
  445. data/spec/ramaze/view/ezamar/external.zmr +8 -0
  446. data/spec/ramaze/view/ezamar/sum.zmr +1 -0
  447. data/spec/ramaze/view/gestalt.rb +94 -0
  448. data/spec/ramaze/view/gestalt/external.ges +8 -0
  449. data/spec/ramaze/view/haml.rb +86 -0
  450. data/spec/ramaze/view/haml/external.haml +5 -0
  451. data/spec/ramaze/view/haml/sum.haml +2 -0
  452. data/spec/ramaze/view/liquid.rb +73 -0
  453. data/spec/ramaze/view/liquid/external.liquid +8 -0
  454. data/spec/ramaze/view/liquid/sum.liquid +1 -0
  455. data/spec/ramaze/view/nagoro.rb +73 -0
  456. data/spec/ramaze/view/nagoro/external.nag +8 -0
  457. data/spec/ramaze/view/nagoro/sum.nag +1 -0
  458. data/spec/ramaze/view/redcloth.rb +66 -0
  459. data/spec/ramaze/view/redcloth/external.redcloth +8 -0
  460. data/spec/ramaze/view/remarkably.rb +49 -0
  461. data/spec/ramaze/view/remarkably/external.rem +8 -0
  462. data/spec/ramaze/view/remarkably/sum.rem +1 -0
  463. data/spec/ramaze/view/sass.rb +73 -0
  464. data/spec/ramaze/view/sass/file.css.sass +5 -0
  465. data/spec/ramaze/view/tagz.rb +51 -0
  466. data/spec/ramaze/view/tagz/external.tagz +8 -0
  467. data/spec/ramaze/view/tagz/sum.tagz +1 -0
  468. data/spec/ramaze/view/tenjin.rb +57 -0
  469. data/spec/ramaze/view/tenjin/external.rbhtml +8 -0
  470. data/spec/ramaze/view/tenjin/sum.rbhtml +1 -0
  471. data/spec/snippets/array/put_within.rb +33 -0
  472. data/spec/snippets/binding/locals.rb +9 -0
  473. data/spec/snippets/numeric/filesize_format.rb +12 -0
  474. data/spec/snippets/numeric/time.rb +12 -0
  475. data/spec/snippets/object/__dir__.rb +14 -0
  476. data/spec/snippets/ordered_set.rb +63 -0
  477. data/spec/snippets/ramaze/acquire.rb +77 -0
  478. data/spec/snippets/ramaze/dictionary.rb +110 -0
  479. data/spec/snippets/ramaze/struct.rb +12 -0
  480. data/spec/snippets/string/camel_case.rb +25 -0
  481. data/spec/snippets/string/color.rb +11 -0
  482. data/spec/snippets/string/snake_case.rb +24 -0
  483. data/spec/snippets/string/unindent.rb +43 -0
  484. data/spec/snippets/thread/into.rb +9 -0
  485. data/tasks/authors.rake +30 -0
  486. data/tasks/bacon.rake +66 -0
  487. data/tasks/changelog.rake +20 -0
  488. data/tasks/copyright.rake +21 -0
  489. data/tasks/gem.rake +22 -0
  490. data/tasks/gem_setup.rake +99 -0
  491. data/tasks/git.rake +46 -0
  492. data/tasks/grancher.rake +12 -0
  493. data/tasks/jquery.rake +15 -0
  494. data/tasks/manifest.rake +4 -0
  495. data/tasks/metric_changes.rake +24 -0
  496. data/tasks/rcov.rake +23 -0
  497. data/tasks/release.rake +54 -0
  498. data/tasks/reversion.rake +8 -0
  499. data/tasks/setup.rake +6 -0
  500. data/tasks/todo.rake +27 -0
  501. data/tasks/traits.rake +21 -0
  502. data/tasks/yard.rake +4 -0
  503. metadata +720 -0
@@ -0,0 +1,104 @@
1
+ # Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
2
+ # All files in this distribution are subject to the terms of the Ruby license.
3
+
4
+ module Ramaze
5
+ class Controller
6
+ include Innate::Traited
7
+ include Innate::Node
8
+
9
+ # we are no mapped node
10
+ Innate::Node::NODE_LIST.delete(self)
11
+
12
+ # call our setup method one startup
13
+ Ramaze.options.setup << self
14
+
15
+ CONTROLLER_LIST = Set.new
16
+
17
+ trait :app => :pristine
18
+ trait :skip_controller_map => false
19
+
20
+ def self.inherited(into)
21
+ Innate::Node.included(into)
22
+ into.helper(:layout)
23
+ CONTROLLER_LIST << into
24
+ into.trait :skip_node_map => true
25
+ end
26
+
27
+ def self.setup
28
+ case CONTROLLER_LIST.size
29
+ when 0
30
+ require 'ramaze/controller/default'
31
+ when 1
32
+ controller = CONTROLLER_LIST.to_a.first
33
+
34
+ begin
35
+ controller.mapping
36
+ rescue
37
+ controller.map '/'
38
+ end
39
+
40
+ controller.setup_procedure
41
+ else
42
+ CONTROLLER_LIST.each do |controller|
43
+ controller.setup_procedure
44
+ end
45
+ end
46
+ end
47
+
48
+ def self.setup_procedure
49
+ unless ancestral_trait[:provide_set]
50
+ engine(:Etanni)
51
+ trait(:provide_set => false)
52
+ end
53
+
54
+ return if trait[:skip_controller_map]
55
+
56
+ map(generate_mapping(name))
57
+ end
58
+
59
+ def self.engine(name)
60
+ provide(:html, name.to_sym)
61
+ end
62
+
63
+ def self.mapping
64
+ Ramaze.to(self)
65
+ end
66
+
67
+ IRREGULAR_MAPPING = {
68
+ 'Controller' => nil,
69
+ 'MainController' => '/'
70
+ }
71
+
72
+ def self.generate_mapping(klass_name = self.name)
73
+ chunks = klass_name.to_s.split(/::/)
74
+ return if chunks.empty?
75
+
76
+ last = chunks.last
77
+ return IRREGULAR_MAPPING[last] if IRREGULAR_MAPPING.key?(last)
78
+
79
+ last.sub!(/Controller$/, '')
80
+ '/' << chunks.map{|chunk| chunk.snake_case }.join('/')
81
+ end
82
+
83
+ def self.map(location, app_name = nil)
84
+ if app_name
85
+ trait :app => app_name
86
+ else
87
+ app_name = ancestral_trait[:app]
88
+ end
89
+
90
+ trait :skip_controller_map => true
91
+
92
+ App.find_or_create(app_name).map(location, self)
93
+ end
94
+
95
+ def self.app
96
+ App[ancestral_trait[:app]]
97
+ end
98
+
99
+ def self.options
100
+ return unless app = self.app
101
+ app.options
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,12 @@
1
+ module Ramaze
2
+ Log.debug "Default controller invoked"
3
+
4
+ class DefaultController < Ramaze::Controller
5
+ map '/'
6
+
7
+ def lobster
8
+ require 'rack/lobster'
9
+ respond Rack::Lobster::LobsterString
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,7 @@
1
+ module Ramaze
2
+ class Current < Innate::Current
3
+ def setup(env, request = Request, response = Response, session = Session)
4
+ super
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,24 @@
1
+ module Ramaze
2
+ # Serving multiple public directories made easy.
3
+ class Files
4
+ def initialize(*roots)
5
+ @roots = roots.flatten.map{|root| File.expand_path(root.to_s) }
6
+ sync
7
+ end
8
+
9
+ def call(env)
10
+ @cascade.call(env)
11
+ end
12
+
13
+ def <<(path)
14
+ @roots << File.expand_path(path.to_s)
15
+ @roots.uniq!
16
+ sync
17
+ end
18
+
19
+ def sync
20
+ file_apps = @roots.map{|root| Rack::File.new(root) }
21
+ @cascade = Rack::Cascade.new(file_apps)
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,132 @@
1
+ # Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
2
+ # All files in this distribution are subject to the terms of the Ruby license.
3
+
4
+ =begin rdoc
5
+ Example:
6
+
7
+ require 'ramaze'
8
+ require 'ramaze/gestalt'
9
+
10
+ page = Ramaze::Gestalt.build{
11
+ title = 'Hello, World!'
12
+
13
+ html do
14
+ head{ title(title) }
15
+ body do
16
+ h1(title)
17
+ p 'I count to 10'
18
+ ('1'..'10').each do |count|
19
+ div(:style => 'width: 25px; height: 25px'){ count }
20
+ end
21
+ end
22
+ end
23
+ }
24
+ =end
25
+
26
+ module Ramaze
27
+
28
+ # Gestalt is the custom HTML/XML builder for Ramaze, based on a very simple
29
+ # DSL it will build your markup.
30
+
31
+ class Gestalt
32
+ attr_accessor :out
33
+
34
+ # The default way to start building your markup.
35
+ # Takes a block and returns the markup.
36
+ #
37
+ # Example:
38
+ # html =
39
+ # Gestalt.build do
40
+ # html do
41
+ # head do
42
+ # title "Hello, World!"
43
+ # end
44
+ # body do
45
+ # h1 "Hello, World!"
46
+ # end
47
+ # end
48
+ # end
49
+ #
50
+
51
+ def self.build(&block)
52
+ self.new(&block).to_s
53
+ end
54
+
55
+ # Gestalt.new is like ::build but will return itself.
56
+ # you can either access #out or .to_s it, which will
57
+ # return the actual markup.
58
+ #
59
+ # Useful for distributed building of one page.
60
+
61
+ def initialize(&block)
62
+ @out = []
63
+ instance_eval(&block) if block_given?
64
+ end
65
+
66
+ # catching all the tags. passing it to _gestalt_build_tag
67
+
68
+ def method_missing(meth, *args, &block)
69
+ _gestalt_call_tag meth, args, &block
70
+ end
71
+
72
+ # workaround for Kernel#p to make <p /> tags possible.
73
+
74
+ def p(*args, &block)
75
+ _gestalt_call_tag :p, args, &block
76
+ end
77
+
78
+ # workaround for Kernel#select to make <select></select> work
79
+ def select(*args, &block)
80
+ _gestalt_call_tag(:select, args, &block)
81
+ end
82
+
83
+ def _gestalt_call_tag(name, args, &block)
84
+ if args.size == 1 and args[0].kind_of? Hash
85
+ # args are just attributes, children in block...
86
+ _gestalt_build_tag name, args[0], &block
87
+ elsif args[1].kind_of? Hash
88
+ # args are text and attributes ie. a('mylink', :href => '/mylink')
89
+ _gestalt_build_tag(name, args[1], args[0], &block)
90
+ else
91
+ # no attributes, but text
92
+ _gestalt_build_tag name, {}, args, &block
93
+ end
94
+ end
95
+
96
+ # build a tag for `name`, using `args` and an optional block that
97
+ # will be yielded
98
+
99
+ def _gestalt_build_tag(name, attr = {}, text = [])
100
+ @out << "<#{name}"
101
+ @out << attr.map{|(k,v)| %[ #{k}="#{_gestalt_escape_entities(v)}"] }.join
102
+ if text != [] or block_given?
103
+ @out << ">"
104
+ @out << _gestalt_escape_entities([text].join)
105
+ if block_given?
106
+ text = yield
107
+ @out << text.to_str if text != @out and text.respond_to?(:to_str)
108
+ end
109
+ @out << "</#{name}>"
110
+ else
111
+ @out << ' />'
112
+ end
113
+ end
114
+
115
+ def _gestalt_escape_entities(s)
116
+ s.to_s.gsub(/&/, '&amp;').
117
+ gsub(/"/, '&quot;').
118
+ gsub(/'/, '&apos;').
119
+ gsub(/</, '&lt;').
120
+ gsub(/>/, '&gt;')
121
+ end
122
+
123
+ def tag(name, *args, &block)
124
+ _gestalt_call_tag(name.to_s, args, &block)
125
+ end
126
+
127
+ def to_s
128
+ @out.join
129
+ end
130
+ alias to_str to_s
131
+ end
132
+ end
@@ -0,0 +1,13 @@
1
+ # Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
2
+ # All files in this distribution are subject to the terms of the Ruby license.
3
+
4
+ require 'innate/helper'
5
+
6
+ module Ramaze
7
+ Helper = Innate::Helper
8
+ Innate::HelpersHelper.options.paths << File.dirname(__FILE__)
9
+
10
+ require 'ramaze/helper/flash'
11
+ require 'ramaze/helper/link'
12
+ require 'ramaze/helper/layout'
13
+ end
@@ -0,0 +1,84 @@
1
+ # Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
2
+ # All files in this distribution are subject to the terms of the Ruby license.
3
+
4
+ module Ramaze
5
+ module Helper
6
+
7
+ # A simple way to do authentication without a model.
8
+ # Please have a look at the docs of Auth#auth_login.
9
+ #
10
+ # If you want to do authentication with a model see Helper::User instead.
11
+ module Auth
12
+ Helper::LOOKUP << self
13
+ include Ramaze::Traited
14
+
15
+ trait :auth_table => {}
16
+ trait :auth_hashify => lambda{|pass| Digest::SHA1.hexdigest(pass) }
17
+ trait :auth_post_only => false
18
+
19
+ def self.included(into)
20
+ into.helper(:stack)
21
+ end
22
+
23
+ def login
24
+ return auth_template if trait[:auth_post_only] and !request.post?
25
+ @username, password = request[:username, :password]
26
+ answer(request.referer) if auth_login(@username, password)
27
+ return auth_template
28
+ end
29
+
30
+ def logout
31
+ auth_logout
32
+ answer(request.referer)
33
+ end
34
+
35
+ private
36
+
37
+ def login_required
38
+ call(r(:login)) unless logged_in?
39
+ end
40
+
41
+ # @return [true false] whether user is logged in right now
42
+ def logged_in?
43
+ !!session[:logged_in]
44
+ end
45
+
46
+ # @return
47
+ def auth_login(user, pass)
48
+ return unless user and pass
49
+ return if user.empty? or pass.empty?
50
+ return unless table = ancestral_trait[:auth_table]
51
+ return unless hashify = ancestral_trait[:auth_hashify]
52
+
53
+ if table.respond_to?(:to_sym) or table.respond_to?(:to_str)
54
+ table = send(table)
55
+ elsif table.respond_to?(:call)
56
+ table = table.call
57
+ end
58
+
59
+ return unless table[user] == hashify.call(pass)
60
+
61
+ session[:logged_in] = true
62
+ session[:username] = user
63
+ end
64
+
65
+ def auth_logout
66
+ session.delete(:logged_in)
67
+ session.delete(:username)
68
+ end
69
+
70
+ # @return [String] template for auth
71
+ def auth_template
72
+ <<-TEMPLATE.strip!
73
+ <form method="post" action="#{r(:login)}">
74
+ <ul style="list-style:none;">
75
+ <li>Username: <input type="text" name="username" value="#@username"/></li>
76
+ <li>Password: <input type="password" name="password" /></li>
77
+ <li><input type="submit" /></li>
78
+ </ul>
79
+ </form>
80
+ TEMPLATE
81
+ end
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,41 @@
1
+ require 'benchmark'
2
+
3
+ module Ramaze
4
+ module Helper
5
+
6
+ # Little helper to give you a hand when benching parts of actions
7
+ module Bench
8
+
9
+ # Will first run an empty loop to determine the overhead it imposes, then
10
+ # goes on to yield your block +iterations+ times.
11
+ #
12
+ # The last yielded return value will be returned upon completion of the
13
+ # benchmark and the result of the benchmark itself will be sent to
14
+ # Log.info
15
+ #
16
+ # Example:
17
+ #
18
+ # class MainController < Ramaze::Controller
19
+ # def index
20
+ # @users = bench{ User.all }
21
+ # @tags = bench{ Article.tags }
22
+ # end
23
+ # end
24
+ #
25
+ # This will show something like following in your log:
26
+ # [..] INFO Bench ./start.rb:3:in `index': 0.121163845062256
27
+ # [..] INFO Bench ./start.rb:4:in `index': 2.234987235098341
28
+ #
29
+ # So now we know that the Article.tags call takes the most time and
30
+ # should be improved.
31
+ def bench(iterations = 1)
32
+ result = nil
33
+ from = caller[0]
34
+ delta = Benchmark.realtime{ iterations.times{ nil }}
35
+ taken = Benchmark.realtime{ iterations.times{ result = yield }}
36
+ Log.info "Bench #{from}: #{taken - delta}"
37
+ return result
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,117 @@
1
+ # Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
2
+ # All files in this distribution are subject to the terms of the Ruby license.
3
+
4
+ module Ramaze
5
+ module Helper
6
+
7
+ # Caching of simple objects and whole action responses.
8
+ module Cache
9
+
10
+ # Setup needed traits, add the singleton methods and add the caches used
11
+ # by this helper.
12
+ #
13
+ # @param [Class] into Class that this Module is included into
14
+ # @author manveru
15
+ def self.included(into)
16
+ into.extend(SingletonMethods)
17
+ into.add_action_wrapper(6.0, :cache_wrap)
18
+ into.trait[:cache_action] ||= Set.new
19
+ Ramaze::Cache.add(:action, :cache_helper_value)
20
+ end
21
+
22
+ # @param [Action] action The currently wrapped action
23
+ # @yield The next block in wrap_action_call
24
+ # @return [String] the response body
25
+ # @see Innate::Node#wrap_action_call
26
+ # @author manveru
27
+ def cache_wrap(action)
28
+ cache = Innate::Cache.action
29
+
30
+ ancestral_trait[:cache_action].each do |cache_action|
31
+ temp = cache_action.dup
32
+ block = temp.delete(:key)
33
+ ttl = temp.delete(:ttl)
34
+
35
+ if temp.all?{|key, value| action[key] == value }
36
+ cache_key = action.full_path
37
+ cache_key << "_#{action.instance.instance_eval(&block).to_s}" if block
38
+
39
+ if cached = cache[cache_key]
40
+ action.options[:content_type] = cached[:type]
41
+ else
42
+ cached = {
43
+ :body => catch(:respond) { yield },
44
+ :type => response['Content-Type']
45
+ }
46
+
47
+ if ttl
48
+ cache.store(cache_key, cached, :ttl => ttl)
49
+ else
50
+ cache.store(cache_key, cached)
51
+ end
52
+ end
53
+
54
+ return cached[:body]
55
+ end
56
+ end
57
+
58
+ yield
59
+ end
60
+
61
+ # This method is used to access Ramaze::Cache.cache_helper_value.
62
+ # It provides an easy way to cache long-running computations, gathering
63
+ # external resources like RSS feeds or DB queries that are the same for
64
+ # every user of an application.
65
+ # This method changes behaviour if a block is passed, which can be used
66
+ # to do lazy computation of the cached value conveniently when using a
67
+ # custom TTL or longer expressions that don't fit on one line with ||=.
68
+ #
69
+ # @usage Example to get the cache object directly
70
+ #
71
+ # count = cache_value[:count] ||= Article.count
72
+ #
73
+ # @usage Example with block
74
+ #
75
+ # count = cache_value(:count){ Article.count }
76
+ # count = cache_value(:count, :ttl => 60){ Article.count }
77
+ #
78
+ # @return [Object] The cache wrapper assigned for :cache_helper_value
79
+ # @see Innate::Cache
80
+ # @author manveru
81
+ def cache_value(key = nil, options = {})
82
+ cache = Ramaze::Cache.cache_helper_value
83
+
84
+ if key and block_given?
85
+ if found = cache[key]
86
+ found
87
+ else
88
+ cache.store(key, yield, options)
89
+ end
90
+ else
91
+ cache
92
+ end
93
+ end
94
+
95
+ module SingletonMethods
96
+ # This method allows you to cache whole actions.
97
+ #
98
+ # @example Basic usage
99
+ #
100
+ # class Foo < Ramaze::Controller
101
+ # helper :cache
102
+ # cache_action :method => :bar
103
+ #
104
+ # def bar
105
+ # rand
106
+ # end
107
+ # end
108
+ #
109
+ def cache_action(hash, &block)
110
+ hash[:key] = block if block_given?
111
+ hash[:method] = hash[:method].to_s
112
+ trait[:cache_action] << hash
113
+ end
114
+ end
115
+ end
116
+ end
117
+ end