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,26 @@
1
+ require 'disqus'
2
+ require 'disqus/view_helpers'
3
+
4
+ module Ramaze
5
+ module Helper
6
+
7
+ # Provides shortcuts via Disqus::ViewHelpers.
8
+ #
9
+ # Make sure that you set your disqus credentials when using this helper:
10
+ # Disqus::defaults[:account] = "my_disqus_account"
11
+ # And optionally, only if you're using the API
12
+ # Disqus::defaults[:api_key] = "my_disqus_api_key"
13
+ #
14
+ # Available methods are:
15
+ #
16
+ # disqus_combo
17
+ # disqus_comment_counts
18
+ # disqus_popular_threads
19
+ # disqus_recent_comments
20
+ # disqus_thread
21
+ # disqus_top_commenters
22
+ module Disqus
23
+ include ::Disqus::ViewHelpers
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,62 @@
1
+ # Copyright (c) 2008 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
+
6
+ # The purpose of this class is to provide an easy way of setting/retrieving
7
+ # from the current flash.
8
+ #
9
+ # Flash is a way to keep a temporary pairs of keys and values for the duration
10
+ # of two requests, the current and following.
11
+ #
12
+ # Very vague Example:
13
+ #
14
+ # On the first request, for example on registering:
15
+ #
16
+ # flash[:error] = "You should reconsider your username, it's taken already"
17
+ # redirect R(self, :register)
18
+ #
19
+ # This is the request from the redirect:
20
+ #
21
+ # do_stuff if flash[:error]
22
+ #
23
+ # On the request after this, flash[:error] is gone.
24
+
25
+ module Helper
26
+ module Flash
27
+ include Innate::Traited
28
+
29
+ trait :flashbox => "<div class='flash' id='flash_%key'>%value</div>"
30
+
31
+ # answers with Current.session.flash
32
+ def flash
33
+ Current.session.flash
34
+ end
35
+
36
+ # Use in your template to display all flash messages that may be stored.
37
+ # For example, given you stored:
38
+ #
39
+ # flash # => { :error => 'Pleae enter your name'
40
+ # :info => 'Do you see the fnords?' }
41
+ #
42
+ # Then a flashbox would display:
43
+ #
44
+ # <div class='flash' id='flash_error'>Please enter your name</div>
45
+ # <div class='flash' id='flash_info'>Do you see the fnords?</div>
46
+ #
47
+ # This is designed to be customized permanently or per usage:
48
+ #
49
+ # flashbox("<div class='flash_%key'>%value</div>")
50
+ #
51
+ # Where any occurrence of %key and %value will be replaced by the actual
52
+ # contents of each element of flash
53
+ def flashbox(tag = ancestral_trait[:flashbox])
54
+ flash.map{|key, *values|
55
+ values.flatten.map do |value|
56
+ tag.gsub(/%key/, key.to_s).gsub(/%value/, value.to_s)
57
+ end
58
+ }.flatten.join("\n")
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,127 @@
1
+ require 'ramaze/gestalt'
2
+
3
+ module Ramaze
4
+ module Helper
5
+ module Form
6
+ def form_text(label, name, value = nil)
7
+ form_input(label, :type => :text, :name => name, :value => value)
8
+ end
9
+
10
+ def form_checkbox(label, name, checked = false)
11
+ hash = {:type => :checkbox, :name => name}
12
+ hash[:checked] = 'checked' if checked
13
+ form_input(label, hash)
14
+ end
15
+
16
+ def form_password(label, name)
17
+ form_input(label, :type => :password, :name => name)
18
+ end
19
+
20
+ def form_textarea(label, name, value = nil)
21
+ form_build(:textarea, label, :name => name){ value }
22
+ end
23
+
24
+ def form_file(label, name)
25
+ form_input(label, :type => :file, :name => name)
26
+ end
27
+
28
+ def form_hidden(name, value = nil)
29
+ Ramaze::Gestalt.build{ input(:type => :hidden, :name => name, :value => value) }
30
+ end
31
+
32
+ def form_submit(value = nil)
33
+ hash = {:type => :submit}.merge(form_tabindex)
34
+ hash[:value] = value if value
35
+ Ramaze::Gestalt.build{ tr{ td(:colspan => 2){ input(hash) }}}
36
+ end
37
+
38
+ # @example usage, normal select drop-down
39
+ #
40
+ # form_select('Favourite colors', :colors, @colors, :selected => @color)
41
+ #
42
+ # @example usage for pre-selected value
43
+ #
44
+ # form_select('Favourite colors', :colors, @colors, :selected => @color)
45
+ #
46
+ # @example usage, allow selecting multiple
47
+ #
48
+ # form_select('Cups', :cups, @cups, :selected => @cup, :multiple => 5)
49
+ def form_select(label, name, values, hash = {})
50
+ name = name.to_sym
51
+ id = "form-#{name}"
52
+ multiple, size = hash.values_at(:multiple, :size)
53
+
54
+ s_args = {:name => name, :id => id}.merge(form_tabindex)
55
+ s_args[:multiple] = :multiple if multiple
56
+ s_args[:size] = (size || multiple || 1).to_i
57
+
58
+ has_selected, selected = hash.key?(:selected), hash[:selected]
59
+ error = form_errors[name.to_s]
60
+
61
+ g = Ramaze::Gestalt.new
62
+ g.tr do
63
+ g.td do
64
+ g.label(:for => id){ "#{label}:" }
65
+ g.span(:class => 'error'){ error } if error
66
+ end
67
+ g.td do
68
+ g.select(s_args) do
69
+ values.each do |key, value|
70
+ value ||= key
71
+ o_args = {:value => value}
72
+ o_args[:selected] = :selected if has_selected and value == selected
73
+ g.option(o_args){ key }
74
+ end
75
+ end
76
+ end
77
+ end
78
+
79
+ g.to_s
80
+ end
81
+
82
+ def form_input(label, hash)
83
+ form_build(:input, label, hash)
84
+ end
85
+
86
+ def form_build(tag_name, label, hash, &block)
87
+ name = hash[:name].to_sym
88
+ form_id = "form-#{name}"
89
+ opts = hash.merge(form_tabindex.merge(:id => form_id))
90
+ error = form_errors[name.to_s]
91
+
92
+ Ramaze::Gestalt.build do
93
+ tr do
94
+ td do
95
+ label(:for => form_id){ "#{label}:" }
96
+ span(:class => "error"){ error } if error
97
+ end
98
+ td do
99
+ tag(tag_name, opts, &block)
100
+ end
101
+ end
102
+ end
103
+ end
104
+
105
+ def form_tabindex
106
+ @tabindex ||= 0
107
+ @tabindex += 1
108
+
109
+ {:tabindex => @tabindex}
110
+ end
111
+
112
+ def form_error(name, message)
113
+ form_errors[name.to_s] = message.to_s
114
+ end
115
+
116
+ def form_errors
117
+ @form_errors ||= {}
118
+ end
119
+
120
+ def form_errors_from_model(obj)
121
+ obj.errors.each do |key, value|
122
+ form_error(key, value.first % key)
123
+ end
124
+ end
125
+ end
126
+ end
127
+ end
@@ -0,0 +1,189 @@
1
+ # Copyright (c) 2008 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::Formatting
6
+ module_function
7
+
8
+ FORMATTING_NUMBER_COUNTER = { 0 => 'no', 2 => 'two', 3 => 'three',
9
+ 4 => 'four', 5 => 'five', 6 => 'six', 7 => 'seven', 8 => 'eight',
10
+ 9 => 'nine', 10 => 'ten' }
11
+
12
+ # Answers with a representation of given +count+ with correct grammar.
13
+ # If no +items+ argument is given, and the +count+ argument is not 1, then
14
+ # we first check whether the +item+ argument responds to #pluralize (for
15
+ # example if you are using Sequel). If this doesn't work we append 's' to
16
+ # the +item+ argument.
17
+ #
18
+ # @example usage
19
+ # numeric_counter(0, 'comment') # => 'no comments'
20
+ # numeric_counter(1, 'comment') # => 'one comment'
21
+ # numeric_counter(2, 'comment') # => '2 comments'
22
+
23
+ def number_counter(count, item, items = nil)
24
+ count, item = count.to_i, item.to_s
25
+
26
+ if count == 1
27
+ "one #{item}"
28
+ else
29
+ items ||= item.respond_to?(:pluralize) ? item.pluralize : "#{item}s"
30
+ prefix = FORMATTING_NUMBER_COUNTER[count] || count
31
+ "#{prefix} #{items}"
32
+ end
33
+ end
34
+
35
+ # Format a floating number nicely for display.
36
+ #
37
+ # Usage:
38
+ # number_format(123.123) # => '123.123'
39
+ # number_format(123456.12345) # => '123,456.12345'
40
+ # number_format(123456.12345, '.') # => '123.456,12345'
41
+
42
+ def number_format(n, delimiter = ',')
43
+ delim_l, delim_r = delimiter == ',' ? %w[, .] : %w[. ,]
44
+ h, r = n.to_s.split('.')
45
+ [h.reverse.scan(/\d{1,3}/).join(delim_l).reverse, r].compact.join(delim_r)
46
+ end
47
+
48
+ # Answer with the ordinal version of a number.
49
+ #
50
+ # Usage:
51
+ # ordinal(1) # => "1st"
52
+ # ordinal(2) # => "2nd"
53
+ # ordinal(3) # => "3rd"
54
+ # ordinal(13) # => "13th"
55
+ # ordinal(33) # => "33rd"
56
+ # ordinal(100) # => "100th"
57
+ # ordinal(133) # => "133rd"
58
+
59
+ def ordinal(number)
60
+ number = number.to_i
61
+
62
+ case number % 100
63
+ when 11..13; "#{number}th"
64
+ else
65
+ case number % 10
66
+ when 1; "#{number}st"
67
+ when 2; "#{number}nd"
68
+ when 3; "#{number}rd"
69
+ else "#{number}th"
70
+ end
71
+ end
72
+ end
73
+
74
+ # stolen and adapted from rails
75
+ def time_diff(from_time, to_time = Time.now, include_seconds = false)
76
+ distance_in_minutes = (((to_time - from_time).abs)/60).round
77
+ distance_in_seconds = ((to_time - from_time).abs).round if include_seconds
78
+
79
+ case distance_in_minutes
80
+ when 0..1
81
+ return (distance_in_minutes == 0) ? 'less than a minute' : '1 minute' unless include_seconds
82
+ case distance_in_seconds
83
+ when 0..4 then 'less than 5 seconds'
84
+ when 5..9 then 'less than 10 seconds'
85
+ when 10..19 then 'less than 20 seconds'
86
+ when 20..39 then 'half a minute'
87
+ when 40..59 then 'less than a minute'
88
+ else '1 minute'
89
+ end
90
+
91
+ when 2..44 then "#{distance_in_minutes} minutes"
92
+ when 45..89 then 'about 1 hour'
93
+ when 90..1439 then "about #{(distance_in_minutes.to_f / 60.0).round} hours"
94
+ when 1440..2879 then '1 day'
95
+ when 2880..43199 then "#{(distance_in_minutes / 1440).round} days"
96
+ when 43200..86399 then 'about 1 month'
97
+ when 86400..525959 then "#{(distance_in_minutes / 43200).round} months"
98
+ when 525960..1051919 then 'about 1 year'
99
+ else "over #{(distance_in_minutes / 525960).round} years"
100
+ end
101
+ end
102
+
103
+ # copied from actionpack
104
+ AUTO_LINK_RE = %r{
105
+ ( # leading text
106
+ <\w+.*?>| # leading HTML tag, or
107
+ [^=!:'"/]| # leading punctuation, or
108
+ ^ # beginning of line
109
+ )
110
+ (
111
+ (?:https?://)| # protocol spec, or
112
+ (?:www\.) # www.*
113
+ )
114
+ (
115
+ [-\w]+ # subdomain or domain
116
+ (?:\.[-\w]+)* # remaining subdomains or domain
117
+ (?::\d+)? # port
118
+ (?:/(?:(?:[~\w\+@%-]|(?:[,.;:][^\s$])))?)* # path
119
+ (?:\?[\w\+@%&=.;-]+)? # query string
120
+ (?:\#[\w\-]*)? # trailing anchor
121
+ )
122
+ ([[:punct:]]|\s|<|$) # trailing text
123
+ }x unless defined? AUTO_LINK_RE
124
+
125
+ # Turns all urls into clickable links. If a block is given, each url
126
+ # is yielded and the result is used as the link text.
127
+ def auto_link(text, opts = {})
128
+ html_options = ' ' + opts.map{|k,v| "#{k}='#{v}'"}.join(' ') if opts.any?
129
+ text.gsub(AUTO_LINK_RE) do
130
+ all, a, b, c, d = $&, $1, $2, $3, $4
131
+ if a =~ /<a\s/i # don't replace URL's that are already linked
132
+ all
133
+ else
134
+ text = b + c
135
+ text = yield(text) if block_given?
136
+ %(#{a}<a href="#{b=="www."?"http://www.":b}#{c}"#{html_options}>#{text}</a>#{d})
137
+ end
138
+ end
139
+ end
140
+ alias autolink auto_link
141
+
142
+ # takes a string and optional argument for outputting compliance HTML
143
+ # instead of XHTML.
144
+ # e.g nl2br "a\nb\n\c" #=> 'a<br />b<br />c'
145
+
146
+ def nl2br(string, xhtml = true)
147
+ br = xhtml ? '<br />' : '<br>'
148
+ string.gsub(/\n/, br)
149
+ end
150
+
151
+ # Maybe port to ruby < 1.8.7 ?
152
+ def obfuscate_email(email, text = nil)
153
+ obfuscated = email.to_s.each_byte.map{|c| "&#%03d" % c}.join
154
+ %(<a href="mailto:#{obfuscated}">#{text || obfuscated}</a>)
155
+ end
156
+
157
+ # Returns Hash with tags as keys and their weight as value.
158
+ #
159
+ # Example:
160
+ # tags = %w[ruby ruby code ramaze]
161
+ # tagcloud(tags)
162
+ # # => {"code"=>0.75, "ramaze"=>0.75, "ruby"=>1.0}
163
+ #
164
+ # The weight can be influenced by adjusting the +min+ and +max+ parameters,
165
+ # please make sure that +max+ is larger than +min+ to get meaningful output.
166
+ #
167
+ # This is not thought as immediate output to your template but rather to
168
+ # help either implementing your own algorithm or using the result as input
169
+ # for your tagcloud.
170
+ #
171
+ # Example:
172
+ # - tagcloud(tags).each do |tag, weight|
173
+ # - style = "font-size: %0.2fem" % weight
174
+ # %a{:style => style, :href => Rs(tag)}= h(tag)
175
+
176
+ def tagcloud(tags, min = 0.5, max = 1.5)
177
+ result = {}
178
+ total = tags.size.to_f
179
+ diff = max - min
180
+
181
+ tags.uniq.each do |tag|
182
+ count = tags.respond_to?(:count) ? tags.count(tag) : tags.select{|t| t==tag }.size
183
+ result[tag] = ((count / total) * diff) + min
184
+ end
185
+
186
+ result
187
+ end
188
+ end
189
+ end
@@ -0,0 +1,47 @@
1
+ require 'ramaze/gestalt'
2
+
3
+ module Ramaze
4
+ module Helper
5
+ module Gestalt
6
+ CACHE_G = {}
7
+
8
+ def gestalt(&block)
9
+ Ramaze::Gestalt.new(&block)
10
+ end
11
+
12
+ def build(&block)
13
+ Ramaze::Gestalt.build(&block)
14
+ end
15
+
16
+ def g(meth = nil, view = nil)
17
+ meth ||= caller[0].slice(/`(.*)'?/).gsub(/[\`\']/, '')
18
+ view_name = (self.class.to_s.sub('Controller', '') + 'View').split('::')
19
+ view ||= view_name.inject(Object){ |ns, name| ns.const_get(name) }
20
+
21
+ gestalt_class = CACHE_G[view] ||= g_class
22
+ gestalt = gestalt_class.new
23
+ gestalt.extend(view)
24
+ instance_variables.each do |iv|
25
+ gestalt.instance_variable_set(iv, instance_variable_get(iv))
26
+ end
27
+ gestalt.__send__(meth)
28
+ gestalt.to_s
29
+ end
30
+
31
+ def g_class
32
+ ancs = self.class.ancestors
33
+ helpers = Ramaze::Helper.constants.map{ |c| Ramaze::Helper.const_get(c)}
34
+ our_helpers = ancs & helpers
35
+ our_helpers.delete(Ramaze::Helper::Gestalt)
36
+ gestalt_class = Class.new(Ramaze::Gestalt){ include(*our_helpers) }
37
+ end
38
+
39
+ def method_missing(sym, *args, &block)
40
+ @gestalt ||= gestalt
41
+ @gestalt.send(sym, *args, &block)
42
+ end
43
+ end
44
+ end
45
+ end
46
+
47
+ module Ramaze::Helper::Link; undef :a end