Pistos-ramaze 2008.09

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 (588) hide show
  1. data/README.markdown +481 -0
  2. data/Rakefile +228 -0
  3. data/benchmark/results.txt +131 -0
  4. data/benchmark/run.rb +362 -0
  5. data/benchmark/suite/minimal.rb +13 -0
  6. data/benchmark/suite/no_informer.rb +9 -0
  7. data/benchmark/suite/no_sessions.rb +10 -0
  8. data/benchmark/suite/no_template.rb +9 -0
  9. data/benchmark/suite/simple.rb +7 -0
  10. data/benchmark/suite/template_amrita2.rb +17 -0
  11. data/benchmark/suite/template_builder.rb +12 -0
  12. data/benchmark/suite/template_erubis.rb +10 -0
  13. data/benchmark/suite/template_ezamar.rb +10 -0
  14. data/benchmark/suite/template_haml.rb +15 -0
  15. data/benchmark/suite/template_liquid.rb +13 -0
  16. data/benchmark/suite/template_markaby.rb +11 -0
  17. data/benchmark/suite/template_nagoro.rb +10 -0
  18. data/benchmark/suite/template_redcloth.rb +15 -0
  19. data/benchmark/suite/template_tenjin.rb +10 -0
  20. data/benchmark/test.rb +35 -0
  21. data/bin/ramaze +80 -0
  22. data/doc/AUTHORS +29 -0
  23. data/doc/CHANGELOG +19530 -0
  24. data/doc/COPYING +56 -0
  25. data/doc/FAQ +92 -0
  26. data/doc/GPL +339 -0
  27. data/doc/INSTALL +92 -0
  28. data/doc/LEGAL +26 -0
  29. data/doc/TODO +29 -0
  30. data/doc/meta/announcement.txt +99 -0
  31. data/doc/meta/configuration.txt +163 -0
  32. data/doc/meta/internals.txt +278 -0
  33. data/doc/meta/users.kml +64 -0
  34. data/doc/readme_chunks/appendix.txt +10 -0
  35. data/doc/readme_chunks/examples.txt +38 -0
  36. data/doc/readme_chunks/features.txt +148 -0
  37. data/doc/readme_chunks/getting_help.txt +5 -0
  38. data/doc/readme_chunks/getting_started.txt +18 -0
  39. data/doc/readme_chunks/installing.txt +92 -0
  40. data/doc/readme_chunks/introduction.txt +18 -0
  41. data/doc/readme_chunks/principles.txt +56 -0
  42. data/doc/readme_chunks/thanks.txt +59 -0
  43. data/doc/tutorial/todolist.html +742 -0
  44. data/doc/tutorial/todolist.mkd +787 -0
  45. data/examples/app/auth/auth.rb +54 -0
  46. data/examples/app/auth/template/layout.haml +20 -0
  47. data/examples/app/auth/template/login.haml +16 -0
  48. data/examples/app/blog/README +3 -0
  49. data/examples/app/blog/controller/main.rb +29 -0
  50. data/examples/app/blog/model/entry.rb +30 -0
  51. data/examples/app/blog/public/styles/blog.css +132 -0
  52. data/examples/app/blog/spec/blog.rb +87 -0
  53. data/examples/app/blog/start.rb +7 -0
  54. data/examples/app/blog/view/edit.xhtml +17 -0
  55. data/examples/app/blog/view/index.xhtml +17 -0
  56. data/examples/app/blog/view/layout.xhtml +11 -0
  57. data/examples/app/blog/view/new.xhtml +16 -0
  58. data/examples/app/chat/model/history.rb +36 -0
  59. data/examples/app/chat/model/message.rb +7 -0
  60. data/examples/app/chat/public/css/chat.css +13 -0
  61. data/examples/app/chat/public/js/chat.js +22 -0
  62. data/examples/app/chat/public/js/jquery.js +3436 -0
  63. data/examples/app/chat/start.rb +40 -0
  64. data/examples/app/chat/view/chat.xhtml +9 -0
  65. data/examples/app/chat/view/index.xhtml +7 -0
  66. data/examples/app/chat/view/layout.xhtml +13 -0
  67. data/examples/app/localization/start.rb +35 -0
  68. data/examples/app/rapaste/Rakefile +34 -0
  69. data/examples/app/rapaste/controller/paste.rb +101 -0
  70. data/examples/app/rapaste/model/paste.rb +58 -0
  71. data/examples/app/rapaste/public/css/active4d.css +114 -0
  72. data/examples/app/rapaste/public/css/all_hallows_eve.css +72 -0
  73. data/examples/app/rapaste/public/css/amy.css +147 -0
  74. data/examples/app/rapaste/public/css/blackboard.css +88 -0
  75. data/examples/app/rapaste/public/css/brilliance_black.css +605 -0
  76. data/examples/app/rapaste/public/css/brilliance_dull.css +599 -0
  77. data/examples/app/rapaste/public/css/cobalt.css +149 -0
  78. data/examples/app/rapaste/public/css/dawn.css +121 -0
  79. data/examples/app/rapaste/public/css/display.css +197 -0
  80. data/examples/app/rapaste/public/css/eiffel.css +121 -0
  81. data/examples/app/rapaste/public/css/espresso_libre.css +109 -0
  82. data/examples/app/rapaste/public/css/idle.css +62 -0
  83. data/examples/app/rapaste/public/css/iplastic.css +80 -0
  84. data/examples/app/rapaste/public/css/lazy.css +73 -0
  85. data/examples/app/rapaste/public/css/mac_classic.css +123 -0
  86. data/examples/app/rapaste/public/css/magicwb_amiga.css +104 -0
  87. data/examples/app/rapaste/public/css/pastels_on_dark.css +188 -0
  88. data/examples/app/rapaste/public/css/slush_poppies.css +85 -0
  89. data/examples/app/rapaste/public/css/spacecadet.css +51 -0
  90. data/examples/app/rapaste/public/css/sunburst.css +180 -0
  91. data/examples/app/rapaste/public/css/twilight.css +137 -0
  92. data/examples/app/rapaste/public/css/zenburnesque.css +91 -0
  93. data/examples/app/rapaste/public/js/jquery.js +11 -0
  94. data/examples/app/rapaste/spec/rapaste.rb +51 -0
  95. data/examples/app/rapaste/start.rb +25 -0
  96. data/examples/app/rapaste/view/copy.xhtml +10 -0
  97. data/examples/app/rapaste/view/index.xhtml +9 -0
  98. data/examples/app/rapaste/view/layout.xhtml +25 -0
  99. data/examples/app/rapaste/view/list.xhtml +29 -0
  100. data/examples/app/rapaste/view/search.xhtml +41 -0
  101. data/examples/app/rapaste/view/view.xhtml +37 -0
  102. data/examples/app/sourceview/public/coderay.css +104 -0
  103. data/examples/app/sourceview/public/images/file.gif +0 -0
  104. data/examples/app/sourceview/public/images/folder.gif +0 -0
  105. data/examples/app/sourceview/public/images/tv-collapsable-last.gif +0 -0
  106. data/examples/app/sourceview/public/images/tv-collapsable.gif +0 -0
  107. data/examples/app/sourceview/public/images/tv-expandable-last.gif +0 -0
  108. data/examples/app/sourceview/public/images/tv-expandable.gif +0 -0
  109. data/examples/app/sourceview/public/images/tv-item-last.gif +0 -0
  110. data/examples/app/sourceview/public/images/tv-item.gif +0 -0
  111. data/examples/app/sourceview/public/jquery.js +11 -0
  112. data/examples/app/sourceview/public/jquery.treeview.css +48 -0
  113. data/examples/app/sourceview/public/jquery.treeview.js +223 -0
  114. data/examples/app/sourceview/public/sourceview.js +52 -0
  115. data/examples/app/sourceview/sourceview.rb +77 -0
  116. data/examples/app/sourceview/template/index.haml +59 -0
  117. data/examples/app/todolist/README +1 -0
  118. data/examples/app/todolist/public/favicon.ico +0 -0
  119. data/examples/app/todolist/public/js/jquery.js +1923 -0
  120. data/examples/app/todolist/public/ramaze.png +0 -0
  121. data/examples/app/todolist/spec/todolist.rb +132 -0
  122. data/examples/app/todolist/src/controller/main.rb +70 -0
  123. data/examples/app/todolist/src/element/page.rb +31 -0
  124. data/examples/app/todolist/src/model.rb +14 -0
  125. data/examples/app/todolist/start.rb +11 -0
  126. data/examples/app/todolist/template/index.xhtml +17 -0
  127. data/examples/app/todolist/template/new.xhtml +7 -0
  128. data/examples/app/upload/start.rb +19 -0
  129. data/examples/app/upload/view/index.xhtml +25 -0
  130. data/examples/app/whywiki/spec/whywiki.rb +58 -0
  131. data/examples/app/whywiki/start.rb +46 -0
  132. data/examples/app/whywiki/template/edit.xhtml +14 -0
  133. data/examples/app/whywiki/template/show.xhtml +18 -0
  134. data/examples/app/wikore/spec/wikore.rb +111 -0
  135. data/examples/app/wikore/src/controller.rb +80 -0
  136. data/examples/app/wikore/src/model.rb +53 -0
  137. data/examples/app/wikore/start.rb +9 -0
  138. data/examples/app/wikore/template/index.xhtml +8 -0
  139. data/examples/app/wiktacular/README +2 -0
  140. data/examples/app/wiktacular/mkd/link/2007-07-20_19-45-51.mkd +1 -0
  141. data/examples/app/wiktacular/mkd/link/current.mkd +1 -0
  142. data/examples/app/wiktacular/mkd/main/2007-07-20_16-31-33.mkd +1 -0
  143. data/examples/app/wiktacular/mkd/main/2007-07-20_19-21-12.mkd +1 -0
  144. data/examples/app/wiktacular/mkd/main/2007-07-20_19-23-10.mkd +2 -0
  145. data/examples/app/wiktacular/mkd/main/2007-07-20_19-45-07.mkd +2 -0
  146. data/examples/app/wiktacular/mkd/main/current.mkd +2 -0
  147. data/examples/app/wiktacular/mkd/markdown/current.mkd +3 -0
  148. data/examples/app/wiktacular/mkd/testing/2007-07-20_16-43-46.mkd +2 -0
  149. data/examples/app/wiktacular/mkd/testing/2007-07-20_19-43-50.mkd +3 -0
  150. data/examples/app/wiktacular/mkd/testing/2007-07-21_18-46-01.mkd +11 -0
  151. data/examples/app/wiktacular/mkd/testing/2007-07-21_18-46-32.mkd +13 -0
  152. data/examples/app/wiktacular/mkd/testing/2007-07-21_18-47-08.mkd +17 -0
  153. data/examples/app/wiktacular/mkd/testing/2007-07-21_18-47-54.mkd +17 -0
  154. data/examples/app/wiktacular/mkd/testing/current.mkd +17 -0
  155. data/examples/app/wiktacular/public/favicon.ico +0 -0
  156. data/examples/app/wiktacular/public/screen.css +72 -0
  157. data/examples/app/wiktacular/spec/wiktacular.rb +157 -0
  158. data/examples/app/wiktacular/src/controller.rb +55 -0
  159. data/examples/app/wiktacular/src/model.rb +102 -0
  160. data/examples/app/wiktacular/start.rb +8 -0
  161. data/examples/app/wiktacular/template/edit.xhtml +6 -0
  162. data/examples/app/wiktacular/template/html_layout.xhtml +27 -0
  163. data/examples/app/wiktacular/template/index.xhtml +9 -0
  164. data/examples/app/wiktacular/template/new.xhtml +6 -0
  165. data/examples/basic/element.rb +45 -0
  166. data/examples/basic/gestalt.rb +27 -0
  167. data/examples/basic/hello.rb +15 -0
  168. data/examples/basic/layout.rb +28 -0
  169. data/examples/basic/linking.rb +29 -0
  170. data/examples/basic/simple.rb +56 -0
  171. data/examples/helpers/cache.rb +31 -0
  172. data/examples/helpers/form_with_sequel.rb +24 -0
  173. data/examples/helpers/httpdigest.rb +50 -0
  174. data/examples/helpers/identity.rb +18 -0
  175. data/examples/helpers/nitro_form.rb +23 -0
  176. data/examples/helpers/paginate.rb +71 -0
  177. data/examples/helpers/provide.rb +23 -0
  178. data/examples/helpers/rest.rb +28 -0
  179. data/examples/helpers/simple_captcha.rb +29 -0
  180. data/examples/misc/css.rb +37 -0
  181. data/examples/misc/facebook.rb +159 -0
  182. data/examples/misc/memleak_detector.rb +32 -0
  183. data/examples/misc/nagoro_element.rb +43 -0
  184. data/examples/misc/ramaise.rb +132 -0
  185. data/examples/misc/rapp.rb +45 -0
  186. data/examples/misc/sequel_scaffolding.rb +34 -0
  187. data/examples/misc/simple_auth.rb +35 -0
  188. data/examples/templates/template/external.amrita +19 -0
  189. data/examples/templates/template/external.haml +22 -0
  190. data/examples/templates/template/external.liquid +28 -0
  191. data/examples/templates/template/external.mab +30 -0
  192. data/examples/templates/template/external.nag +28 -0
  193. data/examples/templates/template/external.redcloth +19 -0
  194. data/examples/templates/template/external.rem +30 -0
  195. data/examples/templates/template/external.rhtml +28 -0
  196. data/examples/templates/template/external.tenjin +28 -0
  197. data/examples/templates/template/external.xsl +57 -0
  198. data/examples/templates/template/external.zmr +28 -0
  199. data/examples/templates/template_amrita2.rb +74 -0
  200. data/examples/templates/template_erubis.rb +53 -0
  201. data/examples/templates/template_ezamar.rb +50 -0
  202. data/examples/templates/template_haml.rb +50 -0
  203. data/examples/templates/template_liquid.rb +65 -0
  204. data/examples/templates/template_markaby.rb +58 -0
  205. data/examples/templates/template_nagoro.rb +51 -0
  206. data/examples/templates/template_redcloth.rb +59 -0
  207. data/examples/templates/template_remarkably.rb +55 -0
  208. data/examples/templates/template_tenjin.rb +53 -0
  209. data/examples/templates/template_xslt.rb +49 -0
  210. data/lib/proto/controller/init.rb +10 -0
  211. data/lib/proto/controller/main.rb +20 -0
  212. data/lib/proto/model/init.rb +4 -0
  213. data/lib/proto/public/css/ramaze_error.css +90 -0
  214. data/lib/proto/public/dispatch.fcgi +11 -0
  215. data/lib/proto/public/favicon.ico +0 -0
  216. data/lib/proto/public/js/jquery.js +3549 -0
  217. data/lib/proto/public/ramaze.png +0 -0
  218. data/lib/proto/spec/main.rb +25 -0
  219. data/lib/proto/start.rb +8 -0
  220. data/lib/proto/start.ru +16 -0
  221. data/lib/proto/view/error.xhtml +64 -0
  222. data/lib/proto/view/index.xhtml +34 -0
  223. data/lib/proto/view/page.xhtml +27 -0
  224. data/lib/ramaze/action/render.rb +191 -0
  225. data/lib/ramaze/action.rb +153 -0
  226. data/lib/ramaze/adapter/base.rb +128 -0
  227. data/lib/ramaze/adapter/cgi.rb +20 -0
  228. data/lib/ramaze/adapter/ebb.rb +18 -0
  229. data/lib/ramaze/adapter/evented_mongrel.rb +7 -0
  230. data/lib/ramaze/adapter/fake.rb +12 -0
  231. data/lib/ramaze/adapter/fcgi.rb +18 -0
  232. data/lib/ramaze/adapter/lsws.rb +19 -0
  233. data/lib/ramaze/adapter/mongrel.rb +21 -0
  234. data/lib/ramaze/adapter/scgi.rb +18 -0
  235. data/lib/ramaze/adapter/swiftiplied_mongrel.rb +7 -0
  236. data/lib/ramaze/adapter/thin.rb +17 -0
  237. data/lib/ramaze/adapter/webrick.rb +43 -0
  238. data/lib/ramaze/adapter.rb +97 -0
  239. data/lib/ramaze/cache/memcached.rb +69 -0
  240. data/lib/ramaze/cache/memory.rb +6 -0
  241. data/lib/ramaze/cache/yaml_store.rb +68 -0
  242. data/lib/ramaze/cache.rb +113 -0
  243. data/lib/ramaze/contrib/auto_params/get_args.rb +58 -0
  244. data/lib/ramaze/contrib/auto_params.rb +135 -0
  245. data/lib/ramaze/contrib/email.rb +84 -0
  246. data/lib/ramaze/contrib/facebook/facebook.rb +171 -0
  247. data/lib/ramaze/contrib/facebook.rb +23 -0
  248. data/lib/ramaze/contrib/file_cache.rb +65 -0
  249. data/lib/ramaze/contrib/gems.rb +78 -0
  250. data/lib/ramaze/contrib/gettext/mo.rb +155 -0
  251. data/lib/ramaze/contrib/gettext/parser.rb +46 -0
  252. data/lib/ramaze/contrib/gettext/po.rb +109 -0
  253. data/lib/ramaze/contrib/gettext.rb +113 -0
  254. data/lib/ramaze/contrib/gzip_filter.rb +69 -0
  255. data/lib/ramaze/contrib/maruku_uv.rb +59 -0
  256. data/lib/ramaze/contrib/profiling.rb +36 -0
  257. data/lib/ramaze/contrib/rest.rb +17 -0
  258. data/lib/ramaze/contrib/sequel/create_join.rb +25 -0
  259. data/lib/ramaze/contrib/sequel/fill.rb +12 -0
  260. data/lib/ramaze/contrib/sequel/form_field.rb +129 -0
  261. data/lib/ramaze/contrib/sequel/image.rb +198 -0
  262. data/lib/ramaze/contrib/sequel/relation.rb +82 -0
  263. data/lib/ramaze/contrib/sequel_cache.rb +92 -0
  264. data/lib/ramaze/contrib.rb +82 -0
  265. data/lib/ramaze/controller/error.rb +46 -0
  266. data/lib/ramaze/controller/main.rb +2 -0
  267. data/lib/ramaze/controller/resolve.rb +273 -0
  268. data/lib/ramaze/controller.rb +280 -0
  269. data/lib/ramaze/current/request.rb +205 -0
  270. data/lib/ramaze/current/response.rb +39 -0
  271. data/lib/ramaze/current/session/flash.rb +87 -0
  272. data/lib/ramaze/current/session/hash.rb +66 -0
  273. data/lib/ramaze/current/session.rb +181 -0
  274. data/lib/ramaze/current.rb +110 -0
  275. data/lib/ramaze/dispatcher/action.rb +48 -0
  276. data/lib/ramaze/dispatcher/directory.rb +119 -0
  277. data/lib/ramaze/dispatcher/error.rb +108 -0
  278. data/lib/ramaze/dispatcher/file.rb +95 -0
  279. data/lib/ramaze/dispatcher.rb +145 -0
  280. data/lib/ramaze/error.rb +24 -0
  281. data/lib/ramaze/gestalt.rb +124 -0
  282. data/lib/ramaze/helper/aspect.rb +106 -0
  283. data/lib/ramaze/helper/auth.rb +125 -0
  284. data/lib/ramaze/helper/cache.rb +140 -0
  285. data/lib/ramaze/helper/cgi.rb +39 -0
  286. data/lib/ramaze/helper/flash.rb +59 -0
  287. data/lib/ramaze/helper/form.rb +281 -0
  288. data/lib/ramaze/helper/formatting.rb +158 -0
  289. data/lib/ramaze/helper/gestalt.rb +15 -0
  290. data/lib/ramaze/helper/gravatar.rb +15 -0
  291. data/lib/ramaze/helper/httpdigest.rb +59 -0
  292. data/lib/ramaze/helper/identity.rb +119 -0
  293. data/lib/ramaze/helper/link.rb +122 -0
  294. data/lib/ramaze/helper/markaby.rb +31 -0
  295. data/lib/ramaze/helper/maruku.rb +7 -0
  296. data/lib/ramaze/helper/nitroform.rb +14 -0
  297. data/lib/ramaze/helper/pager.rb +366 -0
  298. data/lib/ramaze/helper/paginate.rb +234 -0
  299. data/lib/ramaze/helper/partial.rb +105 -0
  300. data/lib/ramaze/helper/redirect.rb +82 -0
  301. data/lib/ramaze/helper/rest.rb +43 -0
  302. data/lib/ramaze/helper/sendfile.rb +16 -0
  303. data/lib/ramaze/helper/sequel.rb +55 -0
  304. data/lib/ramaze/helper/simple_captcha.rb +31 -0
  305. data/lib/ramaze/helper/stack.rb +77 -0
  306. data/lib/ramaze/helper/tagz.rb +19 -0
  307. data/lib/ramaze/helper/thread.rb +17 -0
  308. data/lib/ramaze/helper/ultraviolet.rb +44 -0
  309. data/lib/ramaze/helper/user.rb +110 -0
  310. data/lib/ramaze/helper/xhtml.rb +23 -0
  311. data/lib/ramaze/helper.rb +79 -0
  312. data/lib/ramaze/log/analogger.rb +40 -0
  313. data/lib/ramaze/log/growl.rb +38 -0
  314. data/lib/ramaze/log/hub.rb +41 -0
  315. data/lib/ramaze/log/informer.rb +128 -0
  316. data/lib/ramaze/log/knotify.rb +28 -0
  317. data/lib/ramaze/log/logger.rb +26 -0
  318. data/lib/ramaze/log/logging.rb +89 -0
  319. data/lib/ramaze/log/syslog.rb +51 -0
  320. data/lib/ramaze/log/xosd.rb +92 -0
  321. data/lib/ramaze/log.rb +27 -0
  322. data/lib/ramaze/option/dsl.rb +45 -0
  323. data/lib/ramaze/option/holder.rb +131 -0
  324. data/lib/ramaze/option/merger.rb +108 -0
  325. data/lib/ramaze/option.rb +156 -0
  326. data/lib/ramaze/reloader.rb +186 -0
  327. data/lib/ramaze/route.rb +97 -0
  328. data/lib/ramaze/setup.rb +50 -0
  329. data/lib/ramaze/snippets/array/put_within.rb +44 -0
  330. data/lib/ramaze/snippets/binding/locals.rb +25 -0
  331. data/lib/ramaze/snippets/blankslate.rb +7 -0
  332. data/lib/ramaze/snippets/dictionary.rb +504 -0
  333. data/lib/ramaze/snippets/divide.rb +20 -0
  334. data/lib/ramaze/snippets/fiber.rb +63 -0
  335. data/lib/ramaze/snippets/kernel/constant.rb +41 -0
  336. data/lib/ramaze/snippets/kernel/pretty_inspect.rb +21 -0
  337. data/lib/ramaze/snippets/metaid.rb +17 -0
  338. data/lib/ramaze/snippets/numeric/filesize_format.rb +32 -0
  339. data/lib/ramaze/snippets/numeric/time.rb +63 -0
  340. data/lib/ramaze/snippets/object/__dir__.rb +29 -0
  341. data/lib/ramaze/snippets/object/acquire.rb +40 -0
  342. data/lib/ramaze/snippets/object/instance_variable_defined.rb +19 -0
  343. data/lib/ramaze/snippets/object/pretty.rb +16 -0
  344. data/lib/ramaze/snippets/object/scope.rb +18 -0
  345. data/lib/ramaze/snippets/object/traits.rb +76 -0
  346. data/lib/ramaze/snippets/ordered_set.rb +51 -0
  347. data/lib/ramaze/snippets/proc/locals.rb +19 -0
  348. data/lib/ramaze/snippets/ramaze/caller_info.rb +30 -0
  349. data/lib/ramaze/snippets/ramaze/caller_lines.rb +51 -0
  350. data/lib/ramaze/snippets/ramaze/deprecated.rb +20 -0
  351. data/lib/ramaze/snippets/ramaze/fiber.rb +24 -0
  352. data/lib/ramaze/snippets/ramaze/state.rb +86 -0
  353. data/lib/ramaze/snippets/ramaze/struct.rb +45 -0
  354. data/lib/ramaze/snippets/string/camel_case.rb +21 -0
  355. data/lib/ramaze/snippets/string/color.rb +31 -0
  356. data/lib/ramaze/snippets/string/each.rb +19 -0
  357. data/lib/ramaze/snippets/string/end_with.rb +20 -0
  358. data/lib/ramaze/snippets/string/esc.rb +34 -0
  359. data/lib/ramaze/snippets/string/ord.rb +21 -0
  360. data/lib/ramaze/snippets/string/snake_case.rb +21 -0
  361. data/lib/ramaze/snippets/string/start_with.rb +19 -0
  362. data/lib/ramaze/snippets/string/unindent.rb +28 -0
  363. data/lib/ramaze/snippets/thread/into.rb +18 -0
  364. data/lib/ramaze/snippets.rb +22 -0
  365. data/lib/ramaze/spec/helper/bacon.rb +7 -0
  366. data/lib/ramaze/spec/helper/browser.rb +88 -0
  367. data/lib/ramaze/spec/helper/mock_http.rb +63 -0
  368. data/lib/ramaze/spec/helper/pretty_output.rb +82 -0
  369. data/lib/ramaze/spec/helper/requester.rb +63 -0
  370. data/lib/ramaze/spec/helper/simple_http.rb +434 -0
  371. data/lib/ramaze/spec/helper/snippets.rb +14 -0
  372. data/lib/ramaze/spec/helper.rb +135 -0
  373. data/lib/ramaze/spec.rb +1 -0
  374. data/lib/ramaze/store/default.rb +109 -0
  375. data/lib/ramaze/template/amrita2.rb +45 -0
  376. data/lib/ramaze/template/builder.rb +28 -0
  377. data/lib/ramaze/template/erubis.rb +41 -0
  378. data/lib/ramaze/template/ezamar/element.rb +169 -0
  379. data/lib/ramaze/template/ezamar/engine.rb +76 -0
  380. data/lib/ramaze/template/ezamar/morpher.rb +135 -0
  381. data/lib/ramaze/template/ezamar/render_partial.rb +31 -0
  382. data/lib/ramaze/template/ezamar/textpow.syntax +34 -0
  383. data/lib/ramaze/template/ezamar.rb +42 -0
  384. data/lib/ramaze/template/haml.rb +37 -0
  385. data/lib/ramaze/template/liquid.rb +36 -0
  386. data/lib/ramaze/template/markaby.rb +52 -0
  387. data/lib/ramaze/template/maruku.rb +34 -0
  388. data/lib/ramaze/template/nagoro.rb +52 -0
  389. data/lib/ramaze/template/none.rb +14 -0
  390. data/lib/ramaze/template/redcloth.rb +25 -0
  391. data/lib/ramaze/template/remarkably.rb +38 -0
  392. data/lib/ramaze/template/sass.rb +37 -0
  393. data/lib/ramaze/template/tagz.rb +79 -0
  394. data/lib/ramaze/template/tenjin.rb +74 -0
  395. data/lib/ramaze/template/xslt.rb +100 -0
  396. data/lib/ramaze/template.rb +87 -0
  397. data/lib/ramaze/tool/create.rb +48 -0
  398. data/lib/ramaze/tool/daemonize.rb +37 -0
  399. data/lib/ramaze/tool/localize.rb +202 -0
  400. data/lib/ramaze/tool/mime.rb +35 -0
  401. data/lib/ramaze/tool/mime_types.yaml +615 -0
  402. data/lib/ramaze/tool/project_creator.rb +110 -0
  403. data/lib/ramaze/tool/record.rb +6 -0
  404. data/lib/ramaze/tool.rb +9 -0
  405. data/lib/ramaze/trinity.rb +16 -0
  406. data/lib/ramaze/version.rb +6 -0
  407. data/lib/ramaze.rb +133 -0
  408. data/lib/vendor/bacon.rb +323 -0
  409. data/rake_tasks/conf.rake +71 -0
  410. data/rake_tasks/coverage.rake +46 -0
  411. data/rake_tasks/gem.rake +74 -0
  412. data/rake_tasks/git.rake +41 -0
  413. data/rake_tasks/maintenance.rake +386 -0
  414. data/rake_tasks/metric.rake +24 -0
  415. data/rake_tasks/release.rake +76 -0
  416. data/rake_tasks/spec.rake +61 -0
  417. data/ramaze.gemspec +773 -0
  418. data/spec/contrib/auto_params.rb +121 -0
  419. data/spec/contrib/profiling.rb +29 -0
  420. data/spec/contrib/sequel/fill.rb +47 -0
  421. data/spec/examples/caching.rb +19 -0
  422. data/spec/examples/css.rb +15 -0
  423. data/spec/examples/element.rb +15 -0
  424. data/spec/examples/hello.rb +11 -0
  425. data/spec/examples/linking.rb +18 -0
  426. data/spec/examples/simple.rb +45 -0
  427. data/spec/examples/simple_auth.rb +32 -0
  428. data/spec/examples/templates/template_amrita2.rb +16 -0
  429. data/spec/examples/templates/template_erubis.rb +23 -0
  430. data/spec/examples/templates/template_ezamar.rb +23 -0
  431. data/spec/examples/templates/template_haml.rb +23 -0
  432. data/spec/examples/templates/template_liquid.rb +29 -0
  433. data/spec/examples/templates/template_markaby.rb +23 -0
  434. data/spec/examples/templates/template_redcloth.rb +28 -0
  435. data/spec/examples/templates/template_remarkably.rb +23 -0
  436. data/spec/examples/templates/template_tenjin.rb +28 -0
  437. data/spec/helper.rb +3 -0
  438. data/spec/ramaze/action/basics.rb +36 -0
  439. data/spec/ramaze/action/cache.rb +87 -0
  440. data/spec/ramaze/action/file_cache.rb +70 -0
  441. data/spec/ramaze/action/layout.rb +190 -0
  442. data/spec/ramaze/action/render.rb +31 -0
  443. data/spec/ramaze/action/view/bar.xhtml +1 -0
  444. data/spec/ramaze/action/view/instancevars/layout.xhtml +1 -0
  445. data/spec/ramaze/action/view/other_wrapper.xhtml +1 -0
  446. data/spec/ramaze/action/view/single_wrapper.xhtml +1 -0
  447. data/spec/ramaze/action/view/sub/sub_wrapper.xhtml +1 -0
  448. data/spec/ramaze/adapter/ebb.rb +12 -0
  449. data/spec/ramaze/adapter/mongrel.rb +12 -0
  450. data/spec/ramaze/adapter/record.rb +31 -0
  451. data/spec/ramaze/adapter/webrick.rb +12 -0
  452. data/spec/ramaze/adapter.rb +49 -0
  453. data/spec/ramaze/cache.rb +140 -0
  454. data/spec/ramaze/controller/actionless_templates.rb +32 -0
  455. data/spec/ramaze/controller/resolve.rb +32 -0
  456. data/spec/ramaze/controller/subclass.rb +36 -0
  457. data/spec/ramaze/controller/template_resolving.rb +113 -0
  458. data/spec/ramaze/controller/view/bar.xhtml +1 -0
  459. data/spec/ramaze/controller/view/base/another.xhtml +1 -0
  460. data/spec/ramaze/controller/view/greet.xhtml +1 -0
  461. data/spec/ramaze/controller/view/list.xhtml +1 -0
  462. data/spec/ramaze/controller/view/other/greet/other.xhtml +1 -0
  463. data/spec/ramaze/controller/view/other_wrapper.xhtml +1 -0
  464. data/spec/ramaze/controller.rb +180 -0
  465. data/spec/ramaze/current/request.rb +30 -0
  466. data/spec/ramaze/current/session.rb +97 -0
  467. data/spec/ramaze/dispatcher/directory.rb +55 -0
  468. data/spec/ramaze/dispatcher/file.rb +60 -0
  469. data/spec/ramaze/dispatcher/public/favicon.ico +0 -0
  470. data/spec/ramaze/dispatcher/public/file name.txt +1 -0
  471. data/spec/ramaze/dispatcher/public/test_download.css +141 -0
  472. data/spec/ramaze/dispatcher.rb +31 -0
  473. data/spec/ramaze/element.rb +107 -0
  474. data/spec/ramaze/error.rb +94 -0
  475. data/spec/ramaze/gestalt.rb +131 -0
  476. data/spec/ramaze/helper/aspect.rb +101 -0
  477. data/spec/ramaze/helper/auth.rb +66 -0
  478. data/spec/ramaze/helper/cache.rb +160 -0
  479. data/spec/ramaze/helper/cgi.rb +43 -0
  480. data/spec/ramaze/helper/file.rb +18 -0
  481. data/spec/ramaze/helper/flash.rb +133 -0
  482. data/spec/ramaze/helper/form.rb +118 -0
  483. data/spec/ramaze/helper/formatting.rb +54 -0
  484. data/spec/ramaze/helper/link.rb +124 -0
  485. data/spec/ramaze/helper/pager.rb +99 -0
  486. data/spec/ramaze/helper/partial.rb +88 -0
  487. data/spec/ramaze/helper/redirect.rb +112 -0
  488. data/spec/ramaze/helper/simple_captcha.rb +22 -0
  489. data/spec/ramaze/helper/stack.rb +73 -0
  490. data/spec/ramaze/helper/user.rb +43 -0
  491. data/spec/ramaze/helper/view/locals.xhtml +1 -0
  492. data/spec/ramaze/helper/view/loop.xhtml +4 -0
  493. data/spec/ramaze/helper/view/num.xhtml +1 -0
  494. data/spec/ramaze/helper/view/partial.xhtml +1 -0
  495. data/spec/ramaze/helper/view/recursive.xhtml +8 -0
  496. data/spec/ramaze/helper/view/recursive_local_ivars.xhtml +7 -0
  497. data/spec/ramaze/helper/view/recursive_locals.xhtml +7 -0
  498. data/spec/ramaze/helper/view/test_template.xhtml +1 -0
  499. data/spec/ramaze/localize.rb +89 -0
  500. data/spec/ramaze/log/informer.rb +72 -0
  501. data/spec/ramaze/log/syslog.rb +73 -0
  502. data/spec/ramaze/morpher.rb +111 -0
  503. data/spec/ramaze/params.rb +157 -0
  504. data/spec/ramaze/public/error404.xhtml +1 -0
  505. data/spec/ramaze/public/favicon.ico +0 -0
  506. data/spec/ramaze/public/ramaze.png +0 -0
  507. data/spec/ramaze/public/test_download.css +141 -0
  508. data/spec/ramaze/request/ebb.rb +9 -0
  509. data/spec/ramaze/request/mongrel.rb +9 -0
  510. data/spec/ramaze/request/thin.rb +9 -0
  511. data/spec/ramaze/request/webrick.rb +5 -0
  512. data/spec/ramaze/request.rb +185 -0
  513. data/spec/ramaze/rewrite/file.css +1 -0
  514. data/spec/ramaze/rewrite.rb +36 -0
  515. data/spec/ramaze/route.rb +131 -0
  516. data/spec/ramaze/session.rb +94 -0
  517. data/spec/ramaze/store/default.rb +71 -0
  518. data/spec/ramaze/struct.rb +47 -0
  519. data/spec/ramaze/template/amrita2/external.amrita +6 -0
  520. data/spec/ramaze/template/amrita2/sum.amrita +1 -0
  521. data/spec/ramaze/template/amrita2.rb +50 -0
  522. data/spec/ramaze/template/builder/external.rxml +3 -0
  523. data/spec/ramaze/template/builder.rb +51 -0
  524. data/spec/ramaze/template/erubis/sum.rhtml +1 -0
  525. data/spec/ramaze/template/erubis.rb +41 -0
  526. data/spec/ramaze/template/ezamar/another/long/action.zmr +1 -0
  527. data/spec/ramaze/template/ezamar/combined.zmr +1 -0
  528. data/spec/ramaze/template/ezamar/file_only.zmr +1 -0
  529. data/spec/ramaze/template/ezamar/index.zmr +1 -0
  530. data/spec/ramaze/template/ezamar/nested.zmr +1 -0
  531. data/spec/ramaze/template/ezamar/other__index.xhtml +1 -0
  532. data/spec/ramaze/template/ezamar/some__long__action.zmr +1 -0
  533. data/spec/ramaze/template/ezamar/sum.zmr +1 -0
  534. data/spec/ramaze/template/ezamar.rb +63 -0
  535. data/spec/ramaze/template/haml/index.haml +5 -0
  536. data/spec/ramaze/template/haml/locals.haml +2 -0
  537. data/spec/ramaze/template/haml/with_vars.haml +4 -0
  538. data/spec/ramaze/template/haml.rb +66 -0
  539. data/spec/ramaze/template/liquid/index.liquid +1 -0
  540. data/spec/ramaze/template/liquid/products.liquid +45 -0
  541. data/spec/ramaze/template/liquid.rb +99 -0
  542. data/spec/ramaze/template/markaby/external.mab +8 -0
  543. data/spec/ramaze/template/markaby/sum.mab +1 -0
  544. data/spec/ramaze/template/markaby.rb +61 -0
  545. data/spec/ramaze/template/nagoro/another/long/action.nag +1 -0
  546. data/spec/ramaze/template/nagoro/combined.nag +1 -0
  547. data/spec/ramaze/template/nagoro/file_only.nag +1 -0
  548. data/spec/ramaze/template/nagoro/index.nag +1 -0
  549. data/spec/ramaze/template/nagoro/nested.nag +1 -0
  550. data/spec/ramaze/template/nagoro/some__long__action.nag +1 -0
  551. data/spec/ramaze/template/nagoro/sum.nag +1 -0
  552. data/spec/ramaze/template/nagoro.rb +64 -0
  553. data/spec/ramaze/template/ramaze/external.test +1 -0
  554. data/spec/ramaze/template/redcloth/external.redcloth +1 -0
  555. data/spec/ramaze/template/redcloth.rb +38 -0
  556. data/spec/ramaze/template/remarkably/external.rem +8 -0
  557. data/spec/ramaze/template/remarkably/sum.rem +1 -0
  558. data/spec/ramaze/template/remarkably.rb +58 -0
  559. data/spec/ramaze/template/sass/file.css.sass +5 -0
  560. data/spec/ramaze/template/sass.rb +69 -0
  561. data/spec/ramaze/template/tagz/external.tagz +8 -0
  562. data/spec/ramaze/template/tagz/sum.tagz +1 -0
  563. data/spec/ramaze/template/tagz.rb +62 -0
  564. data/spec/ramaze/template/tenjin/external.tenjin +1 -0
  565. data/spec/ramaze/template/tenjin.rb +47 -0
  566. data/spec/ramaze/template/xslt/concat_words.xsl +16 -0
  567. data/spec/ramaze/template/xslt/index.xsl +14 -0
  568. data/spec/ramaze/template/xslt/products.xsl +32 -0
  569. data/spec/ramaze/template/xslt/ruby_version.xsl +14 -0
  570. data/spec/ramaze/template/xslt.rb +90 -0
  571. data/spec/ramaze/template.rb +128 -0
  572. data/spec/snippets/array/put_within.rb +33 -0
  573. data/spec/snippets/binding/locals.rb +9 -0
  574. data/spec/snippets/divide.rb +19 -0
  575. data/spec/snippets/kernel/constant.rb +23 -0
  576. data/spec/snippets/numeric/filesize_format.rb +12 -0
  577. data/spec/snippets/numeric/time.rb +12 -0
  578. data/spec/snippets/object/__dir__.rb +8 -0
  579. data/spec/snippets/object/acquire.rb +71 -0
  580. data/spec/snippets/ordered_set.rb +63 -0
  581. data/spec/snippets/ramaze/caller_info.rb +39 -0
  582. data/spec/snippets/ramaze/caller_lines.rb +30 -0
  583. data/spec/snippets/string/camel_case.rb +25 -0
  584. data/spec/snippets/string/color.rb +11 -0
  585. data/spec/snippets/string/snake_case.rb +24 -0
  586. data/spec/snippets/string/unindent.rb +43 -0
  587. data/spec/snippets/thread/into.rb +20 -0
  588. metadata +823 -0
@@ -0,0 +1,45 @@
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
+ require 'amrita2'
5
+
6
+ class Amrita2::Template
7
+
8
+ # Ramaze helpers are available in template contexts.
9
+
10
+ include Ramaze::Helper::Methods
11
+ helper :link, :sendfile, :flash, :cgi
12
+ end
13
+
14
+ module Ramaze
15
+ module Template
16
+
17
+ # Is responsible for compiling a template using the Amrita2 templating engine.
18
+ # Can be found at: http://rubyforge.org/projects/amrita2
19
+
20
+ class Amrita2 < Template
21
+
22
+ ENGINES[self] = %w[ amrita amr a2html ]
23
+
24
+ class << self
25
+
26
+ # Takes an Action
27
+ # The result or file is rendered using Amrita2::Template.
28
+ #
29
+ # The context data are set to @data in the controller before expansion.
30
+
31
+ def transform(action)
32
+ template = wrap_compile(action)
33
+ data = action.instance.instance_variable_get("@data") || {}
34
+ action.instance.extend ::Amrita2::Runtime if data.kind_of? Binding
35
+ template.render_with(data)
36
+ end
37
+
38
+ # Compile a template, return instance of Amrita2::Template
39
+ def compile(action, template)
40
+ ::Amrita2::Template.new(template)
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,28 @@
1
+ require 'builder'
2
+
3
+ module Ramaze
4
+ module Template
5
+
6
+ class Builder < Template
7
+ ENGINES[self] = %w[ builder rxml ]
8
+
9
+ class << self
10
+ def transform action
11
+ if response = Response.current
12
+ response['Content-Type'] = "application/xml"
13
+ end
14
+
15
+ template = wrap_compile(action)
16
+ action.instance.instance_eval(template, action.template || __FILE__)
17
+ end
18
+
19
+ def compile action, template
20
+ "xml = ::Builder::XmlMarkup.new(:indent => 2)\n" +
21
+ template +
22
+ "\nxml.target!\n"
23
+ end
24
+ end
25
+ end
26
+
27
+ end
28
+ end
@@ -0,0 +1,41 @@
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
+ require 'erubis'
5
+
6
+ module Ramaze
7
+ module Template
8
+
9
+ # Is responsible for compiling a template using the Erubis templating engine.
10
+ # Can be found at: http://rubyforge.org/projects/erubis
11
+
12
+ class Erubis < Template
13
+
14
+ ENGINES[self] = %w[ rhtml ]
15
+
16
+ # Allow for swapping in a differnt Erubis engine (it supplies several) and
17
+ # passing options to the engine.
18
+ trait[:engine] ||= ::Erubis::Eruby
19
+ trait[:options] ||= {}
20
+
21
+ class << self
22
+
23
+ # Entry-point for Action#render
24
+
25
+ def transform action
26
+ eruby = wrap_compile(action)
27
+ eruby.result(action.binding)
28
+ end
29
+
30
+ # Creates an instance of ::Erubis::Eruby, sets the filename
31
+ # from the template and returns the instance.
32
+
33
+ def compile(action, template)
34
+ eruby = ancestral_trait[:engine].new(template, ancestral_trait[:options])
35
+ eruby.init_evaluator(:filename => (action.template || __FILE__))
36
+ eruby
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,169 @@
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
+ # an Element is almost like an Controller, however, instead
5
+ # of connecting actions to templates it is only used in
6
+ # Ramaze::Template::Ezamar and can be used inside the
7
+ # templates of the Controller as a simple wrapper.
8
+ #
9
+ # Example:
10
+ #
11
+ # Your Element called Page:
12
+ #
13
+ # class Page < Ezamar::Element
14
+ # def render
15
+ # %{
16
+ # <html>
17
+ # <h1>
18
+ # #@title
19
+ # </h1>
20
+ # #{content}
21
+ # </html>
22
+ # }
23
+ # end
24
+ # end
25
+ #
26
+ # and one called SideBar
27
+ #
28
+ # class SideBar < Ezamar::Element
29
+ # def render
30
+ # %{
31
+ # <a href="http://something.com">something</a>
32
+ # }
33
+ # end
34
+ # end
35
+ #
36
+ # and your template (any template for any action):
37
+ #
38
+ # <Page title="Test">
39
+ # <SideBar />
40
+ # <p>
41
+ # Hello, World!
42
+ # </p>
43
+ # </Page>
44
+ #
45
+ # would result in:
46
+ #
47
+ # <html>
48
+ # <h1>
49
+ # Test
50
+ # </h1>
51
+ # <p>
52
+ # Hello, World!
53
+ # </p>
54
+ # </html>
55
+
56
+ class Ezamar::Element
57
+ attr_accessor :content
58
+
59
+ include Ramaze::Helper::Methods
60
+
61
+ helper :redirect, :link
62
+
63
+ # this will be called by #transform, passes along the
64
+ # stuff inside the tags for the element
65
+
66
+ def initialize(content)
67
+ @content = content
68
+ end
69
+
70
+ # The method that will be called upon to render the things
71
+ # inside the element, you can access #content from here, which
72
+ # contains the contents between the tags.
73
+ #
74
+ # It should answer with a String.
75
+
76
+ def render *args
77
+ @content
78
+ end
79
+
80
+ class << self
81
+ # transforms all <Element> tags within the string, takes also
82
+ # a binding to be compatible to the transform-pipeline, won't have
83
+ # any use for it though.
84
+
85
+ def transform template
86
+ matches = template.scan(/<([A-Z][a-zA-Z0-9]*)(.*?)?>/)
87
+
88
+ matches.each do |(klass, params)|
89
+ transformer = (params[-1,1] == '/' ? :without : :with)
90
+ template = send("transform_#{transformer}_content", template, klass)
91
+ end
92
+ template
93
+ end
94
+
95
+ # transforms elements like:
96
+ # <Page> some content </Page>
97
+
98
+ def transform_with_content(template, klass)
99
+ template.gsub(/<#{klass}( .*?)?>(.*?)<\/#{klass}>/m) do |m|
100
+ params, content = $1.to_s, $2.to_s
101
+ finish_transform(klass, params, content)
102
+ end
103
+ end
104
+
105
+ # transforms elements like:
106
+ # <Page />
107
+
108
+ def transform_without_content(template, klass)
109
+ template.gsub(/<#{klass}( .*?)?\/>/) do |m|
110
+ params = $1.to_s
111
+ finish_transform(klass, params, content = '')
112
+ end
113
+ end
114
+
115
+ # find the element, create an instance, pass it the content
116
+ # check if it responds to :render and sets instance-variables
117
+ # that are named after the keys and hold the values of the parameters
118
+ # you passed to the Element
119
+ #
120
+ # Parameters look like:
121
+ # <Page foo="true"> bar </Page>
122
+ # <Page foo="true" />
123
+
124
+ def finish_transform(klass, params, content)
125
+ scope =
126
+ if Ramaze::Action.current
127
+ Ramaze::Action.current.controller
128
+ else
129
+ self.class
130
+ end
131
+ instance = scope.constant(klass).new(content)
132
+
133
+ demunge_passed_variables(params).each do |key, value|
134
+ instance.instance_variable_set("@#{key}", value)
135
+ end
136
+
137
+ instance.render
138
+ rescue => ex
139
+ Ramaze::Log.debug(ex.message)
140
+ ''
141
+ end
142
+
143
+ # basically processes stuff like
144
+ # 'foo="bar" foobar="baz"'
145
+ # do NOT pass actual objects that cannot be simply read as a string
146
+ # here, the information will be lost.
147
+ #
148
+ # Exceptions are true, false, Integers and Floats. They will appear
149
+ # in their real form (this again is also valid for strings that contain
150
+ # these values in a way that makes Integer/Float possible to parse them)
151
+ #
152
+ # Just remember, walk like a duck, talk like a duck.
153
+
154
+ def demunge_passed_variables(template)
155
+ template.scan(/\s?(.*?)=["'](.*?)["']/).inject({}) do |hash, (key, value)|
156
+ value =
157
+ case value
158
+ when 'true'
159
+ true
160
+ when 'false'
161
+ false
162
+ else
163
+ Integer(value) rescue Float(value) rescue value
164
+ end
165
+ hash.merge key => value
166
+ end
167
+ end
168
+ end
169
+ end
@@ -0,0 +1,76 @@
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
+ require 'digest/sha1'
5
+
6
+ # Ezamar is a very simple (and at no means complete) reimplementation of the
7
+ # Templating-engine found in Nitro.
8
+ #
9
+ # Since Nitros templating is based on REXML and Ezamar is not there are vast
10
+ # differences, but it tries to keep the look and feel as close as possible.
11
+
12
+ module Ezamar
13
+
14
+ require 'ramaze/template/ezamar/element'
15
+
16
+ # This class is responsible for initializing and compiling the template.
17
+
18
+ class Template
19
+
20
+ # Take a template (anything that responds to ::to_str) and options.
21
+ # At the moment the only option used is :file, which is used to tell
22
+ # Kernel::eval how to produce better backtraces.
23
+
24
+ def initialize(template, options = {})
25
+ @template, @options = template, options
26
+ compile
27
+ end
28
+
29
+ # All ye who seek magic, look elsewhere, this method is ASAP (as simple as possible)
30
+ #
31
+ # There are some simple gsubs that build a final template which is evaluated
32
+ #
33
+ # The rules are following:
34
+ # <?r rubycode ?>
35
+ # evaluate the code inside the tag, this is considered XHTML-valid and so is the
36
+ # preferred method for executing code inside your templates.
37
+ # The return-value is ignored
38
+ # <% rubycode %>
39
+ # The same as <?r ?>, ERB-style and not valid XHTML, but should give someone who
40
+ # is already familiar with ERB some common ground
41
+ # #{ rubycode }
42
+ # You know this from normal ruby already and it's actually nothing else.
43
+ # Interpolation at the position in the template, isn't any special taggy format
44
+ # and therefor safe to use.
45
+ # <%= rubycode %>
46
+ # The result of this will be interpolated at the position in the template.
47
+ # Not valid XHTML either.
48
+ #
49
+ # TODO
50
+ # - provide C version or maybe use erbuis
51
+
52
+ def compile
53
+ temp = @template.dup
54
+ start_heredoc = "T" << Digest::SHA1.hexdigest(temp)
55
+ start_heredoc, end_heredoc = "\n<<#{start_heredoc}\n", "\n#{start_heredoc}\n"
56
+ bufadd = "_out_ << "
57
+
58
+ temp.gsub!(/<%(?!=)\s*(.*?)\s*%>/m,
59
+ "#{end_heredoc} \\1; #{bufadd} #{start_heredoc}")
60
+ temp.gsub!(/<\?r\s+(.*?)\s+\?>/m,
61
+ "#{end_heredoc} \\1; #{bufadd} #{start_heredoc}")
62
+ temp.gsub!(/<%=\s*(.*?)\s*%>/m,
63
+ "#{end_heredoc} #{bufadd} (\\1); #{bufadd} #{start_heredoc}")
64
+
65
+ @compiled = "_out_ = ''
66
+ #{bufadd} #{start_heredoc} #{temp} #{end_heredoc}
67
+ _out_"
68
+ end
69
+
70
+ # Takes a binding and evals it with the previously set options.
71
+
72
+ def result(binding)
73
+ eval(@compiled, binding, @options[:file]).strip
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,135 @@
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
+ begin
5
+ require 'hpricot'
6
+ rescue LoadError => ex
7
+ Ramaze::Log.error "Please install hpricot (for example via `gem install hpricot`) to get morphing"
8
+ puts ex
9
+ end
10
+
11
+ # This applies a morphing-replace for the template.
12
+ #
13
+ # To use the functionality of Morpher you will need to have hpricot
14
+ # installed, you will get one error in case you don't and the method
15
+ # will be replaced by a stub that simply returns the template.
16
+ #
17
+ # The method first checks if you use any morphers and just skips
18
+ # the step if you don't, this should give quite some speedup for
19
+ # smaller templates that don't use this functionality at all.
20
+ # the check works by searching the morphs with appended '='
21
+ # in the template. There may be a few cases where this won't work
22
+ # since we cannot make any assumptions on the format.
23
+ #
24
+ # If you want to turn this functionality off, either remove Morpher
25
+ # from:
26
+ # Ramaze::Template::Ezamar::TRANSFORM_PIPELINE
27
+ # or do:
28
+ # Ramaze::Morpher::MORPHS.clear
29
+ #
30
+ # The latter is a tad slower, but i mention the possibility in case you
31
+ # find good use for it.
32
+ #
33
+ # You can add your own morphers in Ramaze::Morpher::MORPHS
34
+ #
35
+ # For Example:
36
+ #
37
+ # Morpher::MORPHS['if'] = '<?r %morph %expression ?>%content<?r end ?>'
38
+ #
39
+ # Now, assuming that some tag in your template is '<a if="@foo">x</a>'
40
+ #
41
+ # %morph stands for the name of your morph: 'if'
42
+ # %expression is the stuff you write in the attribute: '@foo'
43
+ # %content is the tag without the attribute (and all inside): '<a>x</a>'
44
+
45
+ class Ezamar::Morpher
46
+
47
+ # Use this trait to define your custom morphs.
48
+ MORPHS = {
49
+ 'if' => '<?r %morph %expression ?>%content<?r end ?>',
50
+ 'unless' => '<?r %morph %expression ?>%content<?r end ?>',
51
+ 'for' => '<?r %morph %expression ?>%content<?r end ?>',
52
+ 'each' => '<?r %expression.%morph do |_e| ?>%content<?r end ?>',
53
+ 'times' => '<?r %expression.%morph do |_t| ?>%content<?r end ?>',
54
+ }
55
+
56
+ # Since the functionality is best explained by examples, here they come.
57
+ #
58
+ # Example:
59
+ #
60
+ # if:
61
+ # <div if="@name">#@name</div>
62
+ # morphs to:
63
+ # <?r if @name ?>
64
+ # <div>#@name</div>
65
+ # <?r end ?>
66
+ #
67
+ # unless:
68
+ # <div unless="@name">No Name</div>
69
+ # morphs to:
70
+ # <?r unless @name ?>
71
+ # <div>No Name</div>
72
+ # <?r end ?>
73
+ #
74
+ # for:
75
+ # <div for="name in @names">#{name}</div>
76
+ # morphs to:
77
+ # <?r for name in @names ?>
78
+ # <div>#{name}</div>
79
+ # <?r end ?>
80
+ #
81
+ # times:
82
+ # <div times="3">#{_t}<div>
83
+ # morphs to:
84
+ # <?r 3.times do |_t| ?>
85
+ # <div>#{_t}</div>
86
+ # <?r end ?>
87
+ #
88
+ # each:
89
+ # <div each="[1,2,3]">#{_e}</div>
90
+ # morphs to:
91
+ # <?r [1,2,3].each do |_e| ?>
92
+ # <div>#{_e}</div>
93
+ # <?r end ?>
94
+ #
95
+ # The latter two examples show you also one standard introduced by a
96
+ # limitation of the replacement-system.
97
+ #
98
+ # When you yield a value, please name it by the first character(s) of
99
+ # the morphs name, with an underscore prefixed.
100
+ #
101
+ # for each an _e, for times a _t.
102
+ #
103
+ # This is by far not the best way to handle it and might lead to problems
104
+ # due to the lack of proper scoping in ruby (if you define an _e or _t
105
+ # before the block it will be overwritten).
106
+ #
107
+ # So please be careful, I tried to come up with something that is both easy
108
+ # to write and doesn't look outright awful while keeping an easy to remember
109
+ # mnemonic.
110
+ #
111
+ # TODO:
112
+ # - Add pure Ruby implementation as a fall-back.
113
+
114
+ def self.transform(template)
115
+ template = template.to_s
116
+ hp = Hpricot(template)
117
+
118
+ MORPHS.each do |morph, replacement|
119
+ hp.search("[@#{morph}]") do |elem|
120
+ expr = elem[morph]
121
+
122
+ elem.remove_attribute(morph)
123
+
124
+ repl = replacement.
125
+ sub('%morph', morph).
126
+ sub('%expression', expr).
127
+ sub('%content', elem.to_html)
128
+
129
+ elem.swap(repl)
130
+ end
131
+ end
132
+
133
+ hp.to_html
134
+ end
135
+ end
@@ -0,0 +1,31 @@
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
+ require 'ramaze/template/ezamar/engine'
5
+
6
+
7
+ module Ezamar
8
+
9
+ # A transformer for <render /> tags.
10
+
11
+ class RenderPartial
12
+ extend Ramaze::Helper::Partial
13
+
14
+ # Renders <render src="/path" [optional="option", ...]> in place.
15
+ #
16
+ # Other options than `src` will be transformed to session parameters for the
17
+ # rendered action to use.
18
+
19
+ def self.transform(template)
20
+ template.gsub!(/<render (.*?) \/>/) do |m|
21
+ args = Hash[*$1.scan(/(\S+)=["'](.*?)["']/).flatten]
22
+ if src = args.delete('src')
23
+ render_partial(src, args)
24
+ end
25
+ end
26
+
27
+ template
28
+ end
29
+
30
+ end
31
+ end
@@ -0,0 +1,34 @@
1
+ ---
2
+ name: HTML (Ezamar)
3
+ fileTypes:
4
+ - xhtml
5
+ scopeName: text.html.ruby
6
+ uuid: 45D7E1FC-7D0B-4205-A1A2-3D10BB555A5C
7
+ foldingStartMarker: |-
8
+ (?x)
9
+ (<(?i:head|body|table|thead|tbody|tfoot|tr|div|select|fieldset|style|script|ul|ol|form|dl)\b.*?>
10
+ |<!--(?!.*-->)
11
+ |\{\s*($|\?>\s*$|//|/\*(.*\*/\s*$|(?!.*?\*/)))
12
+ )
13
+ patterns:
14
+ - name: source.ruby.ezamar.embedded.html
15
+ captures:
16
+ "0":
17
+ name: punctuation.section.embedded.ruby
18
+ begin: "<?r"
19
+ end: "?>"
20
+ patterns:
21
+ - name: comment.line.number-sign.ruby
22
+ captures:
23
+ "1":
24
+ name: punctuation.definition.comment.ruby
25
+ match: (#).*?(?=-?\?>)
26
+ - include: source.ruby.ezamar
27
+ - include: text.html.basic
28
+ foldingStopMarker: |-
29
+ (?x)
30
+ (</(?i:head|body|table|thead|tbody|tfoot|tr|div|select|fieldset|style|script|ul|ol|form|dl)>
31
+ |^\s*-->
32
+ |(^|\s)\}
33
+ )
34
+ keyEquivalent: ^~R
@@ -0,0 +1,42 @@
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
+ require 'ramaze/template/ezamar/engine'
5
+ require 'ramaze/template/ezamar/render_partial'
6
+
7
+ module Ramaze
8
+ module Template
9
+
10
+ # Is responsible for compiling a template using the Ezamar templating engine.
11
+
12
+ class Ezamar < Template
13
+
14
+ ENGINES[self] = %w[ xhtml zmr ]
15
+
16
+ TRANSFORM_PIPELINE = [ ::Ezamar::Element ]
17
+
18
+ class << self
19
+
20
+ # Transforms an action into the XHTML code for parsing and returns
21
+ # the result
22
+ def transform action
23
+ ezamar = wrap_compile(action)
24
+ ezamar.result(action.binding)
25
+ end
26
+
27
+ # Compile a template, applying all transformations from the pipeline
28
+ # and returning an instance of ::Ezamar::Template
29
+
30
+ def compile(action, template)
31
+ file = (action.template || __FILE__)
32
+
33
+ TRANSFORM_PIPELINE.each do |tp|
34
+ template = tp.transform(template)
35
+ end
36
+
37
+ ::Ezamar::Template.new(template, :file => file)
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,37 @@
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
+ require 'haml/engine'
5
+
6
+ module Ramaze
7
+ module Template
8
+
9
+ # Is responsible for compiling a template using the Haml templating engine.
10
+ # Can be found at: http://haml.hamptoncatlin.com/
11
+
12
+ class Haml < Template
13
+
14
+ ENGINES[self] = %w[ haml ]
15
+
16
+ class << self
17
+
18
+ # Transform via Haml templating engine
19
+
20
+ def transform action
21
+ haml = wrap_compile(action)
22
+ haml.to_html(action.instance, action.binding.locals)
23
+ end
24
+
25
+ # Instantiates Haml::Engine with the template and haml_options trait from
26
+ # the controller.
27
+
28
+ def compile(action, template)
29
+ opts = action.controller.trait[:haml_options] || {}
30
+ opts.merge! :filename => action.template if action.template
31
+
32
+ ::Haml::Engine.new(template, opts)
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,36 @@
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
+ require 'liquid'
5
+
6
+ module Ramaze
7
+ module Template
8
+
9
+ # Is responsible for compiling a template using the Liquid templating engine.
10
+ # Can be found at: http://home.leetsoft.com/liquid
11
+
12
+ class Liquid < Template
13
+
14
+ ENGINES[self] = %w[ liquid ]
15
+
16
+ class << self
17
+
18
+ # initializes the handling of a request on the controller.
19
+ # Creates a new instances of itself and sends the action and params.
20
+ # Also tries to render the template.
21
+ # In Theory you can use this standalone, this has not been tested though.
22
+
23
+ def transform action
24
+ template = reaction_or_file(action)
25
+
26
+ instance = action.instance
27
+ hash = instance.instance_variable_get("@hash") || {}
28
+ template = ::Liquid::Template.parse(template)
29
+ options = instance.ancestral_trait[:liquid_options]
30
+
31
+ template.render(hash, options)
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end