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,234 @@
1
+ require 'ramaze/gestalt'
2
+
3
+ module Ramaze
4
+ module Helper
5
+
6
+ # Helper for pagination and pagination-navigation.
7
+ #
8
+ # See detailed API docs for Paginator below.
9
+ # Also have a look at the examples/helpers/paginate.rb
10
+
11
+ module Paginate
12
+
13
+ # Define default options in your Controller, they are being retrieved by
14
+ # ancestral_trait, so you can also put it into a common superclass
15
+
16
+ trait :paginate => {
17
+ :limit => 10,
18
+ :var => 'pager',
19
+ }
20
+
21
+ # Returns a new Paginator instance.
22
+ #
23
+ # Note that the pagination relies on being inside a Ramaze request to
24
+ # gain necessary metadata about the page it resides on, you cannot use it
25
+ # outside of Ramaze yet.
26
+ #
27
+ # The examples below are meant to be used within your controller or view.
28
+ #
29
+ # Usage with Array:
30
+ # data = (1..100).to_a
31
+ # @pager = paginate(data, :limit => 30, :page => 2)
32
+ # @pager.navigation
33
+ # @pager.each{|e| puts(e) }
34
+ #
35
+ # Usage with Sequel:
36
+ # data = Article.filter(:public => true)
37
+ # @pager = paginate(data, :limit => 5)
38
+ # @pager.navigation
39
+ # @pager.each{|e| puts(e)
40
+ #
41
+ # +dataset+ may be a Sequel dataset or Array
42
+ # +options+ Takes precedence to trait[:paginate] and may contain
43
+ # following pairs:
44
+ # :limit The number of elements used when you call #each on the
45
+ # paginator
46
+ # :var The variable name being used in the request, this is helpful
47
+ # if you want to use two or more independent paginations on the
48
+ # same page.
49
+ # :page The page you are currently on, if not given it will be
50
+ # retrieved from current request variables. Defaults to 1 if
51
+ # neither exists.
52
+
53
+ def paginate(dataset, options = {})
54
+ options = ancestral_trait[:paginate].merge(options)
55
+ limit = options[:limit]
56
+ var = options[:var]
57
+ page = options[:page] || (request[var] || 1).to_i
58
+
59
+ Paginator.new(dataset, page, limit, var)
60
+ end
61
+
62
+ # Provides easy pagination and navigation
63
+
64
+ class Paginator
65
+ include Ramaze::Helper::Link
66
+ include Ramaze::Helper::CGI
67
+
68
+ def initialize(data = [], page = 1, limit = 10, var = 'pager')
69
+ @data, @page, @limit, @var = data, page, limit, var
70
+ @pager = pager_for(data)
71
+ @page = @page > page_count ? page_count : @page
72
+ @pager = pager_for(data)
73
+ end
74
+
75
+ # Returns String with navigation div.
76
+ #
77
+ # This cannot be customized very nicely, but you can style it easily
78
+ # with CSS.
79
+ #
80
+ # Output with 5 elements, page 1, limit 3:
81
+ # <div class="pager">
82
+ # <span class="first grey">&lt;&lt;</span>
83
+ # <span class="previous grey">&lt;</span>
84
+ # <a class="current" href="/index?pager=1">1</a>
85
+ # <a href="/index?pager=2">2</a>
86
+ # <a class="next" href="/index?pager=2">&gt;</a>
87
+ # <a class="last" href="/index?pager=2">&gt;&gt;</a>
88
+ # </div>
89
+ #
90
+ # Output with 5 elements, page 2, limit 3:
91
+ # <div class="pager" />
92
+ # <a class="first" href="/index?user_page=1">&lt;&lt;</a>
93
+ # <a class="previous" href="/index?user_page=1">&lt;</a>
94
+ # <a href="/index?user_page=1">1</a>
95
+ # <a class="current" href="/index?user_page=2">2</a>
96
+ # <span class="next grey">&gt;</span>
97
+ # <span class="last grey">&gt;&gt;</span>
98
+ # </div>
99
+
100
+
101
+ def navigation(limit = 8)
102
+ out = [ g.div(:class => :pager) ]
103
+
104
+ if first_page?
105
+ out << g.span(:class => 'first grey'){ h('<<') }
106
+ out << g.span(:class => 'previous grey'){ h('<') }
107
+ else
108
+ out << link(1, '<<', :class => :first)
109
+ out << link(prev_page, '<', :class => :previous)
110
+ end
111
+
112
+ lower = limit ? (current_page - limit) : 1
113
+ lower = lower < 1 ? 1 : lower
114
+
115
+ (lower...current_page).each do |n|
116
+ out << link(n)
117
+ end
118
+
119
+ out << link(current_page, current_page, :class => :current)
120
+
121
+ if last_page?
122
+ out << g.span(:class => 'next grey'){ h('>') }
123
+ out << g.span(:class => 'last grey'){ h('>>') }
124
+ elsif next_page
125
+ higher = limit ? (next_page + limit) : page_count
126
+ higher = [higher, page_count].min
127
+ (next_page..higher).each do |n|
128
+ out << link(n)
129
+ end
130
+
131
+ out << link(next_page, '>', :class => :next)
132
+ out << link(page_count, '>>', :class => :last)
133
+ end
134
+
135
+ out << '</div>'
136
+ out.map{|e| e.to_s}.join("\n")
137
+ end
138
+
139
+ # Useful to omit pager if it's of no use.
140
+
141
+ def needed?
142
+ @pager.page_count > 1
143
+ end
144
+
145
+ # Forward everything to the inner @pager
146
+
147
+ def method_missing(meth, *args, &block)
148
+ @pager.send(meth, *args, &block)
149
+ end
150
+
151
+ private
152
+
153
+ def pager_for(obj)
154
+ @page = @page < 1 ? 1 : @page
155
+
156
+ case obj
157
+ when Array
158
+ ArrayPager.new(obj, @page, @limit)
159
+ else
160
+ obj.paginate(@page, @limit)
161
+ end
162
+ end
163
+
164
+ def link(n, text = n, hash = {})
165
+ text = h(text.to_s)
166
+
167
+ params = Ramaze::Request.current.params.merge(@var.to_s => n)
168
+ name = Ramaze::Action.stack.first.name
169
+ name = '/' if name == 'index' # make nicer...
170
+ hash[:href] = Rs(name, params)
171
+
172
+ g.a(hash){ text }
173
+ end
174
+
175
+ def g
176
+ Ramaze::Gestalt.new
177
+ end
178
+
179
+ # Wrapper for Array to behave like the Sequel pagination
180
+
181
+ class ArrayPager
182
+ def initialize(array, page, limit)
183
+ @array, @page, @limit = array, page, limit
184
+ @page = page_count if @page > page_count
185
+ end
186
+
187
+ def size
188
+ @array.size
189
+ end
190
+
191
+ def empty?
192
+ @array.empty?
193
+ end
194
+
195
+ def page_count
196
+ pages, rest = @array.size.divmod(@limit)
197
+ rest == 0 ? pages : pages + 1
198
+ end
199
+
200
+ def current_page
201
+ @page
202
+ end
203
+
204
+ def next_page
205
+ page_count == @page ? nil : @page + 1
206
+ end
207
+
208
+ def prev_page
209
+ @page <= 1 ? nil : @page - 1
210
+ end
211
+
212
+ def first_page?
213
+ @page <= 1
214
+ end
215
+
216
+ def last_page?
217
+ page_count == @page
218
+ end
219
+
220
+ def each(&block)
221
+ from = ((@page - 1) * @limit)
222
+ to = from + @limit
223
+
224
+ a = @array[from...to] || []
225
+ a.each(&block)
226
+ end
227
+
228
+ include Enumerable
229
+ end
230
+
231
+ end
232
+ end
233
+ end
234
+ end
@@ -0,0 +1,105 @@
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
+ # = Helper::Partial
7
+ #
8
+ # === Example Usage
9
+ #
10
+ # class MyController
11
+ # def index
12
+ # end
13
+ # def list
14
+ # plain = request['plain']
15
+ # "Hello World from List! Plain List == #{plain}"
16
+ # end
17
+ # end
18
+ #
19
+ #
20
+ # <html>
21
+ # <head><title>Partial Render Index</title></head>
22
+ # <body>
23
+ # #{render_partial(Rs(:list), 'plain' => true)}
24
+ # </body>
25
+ # </html>
26
+
27
+ module Helper::Partial
28
+ module_function
29
+
30
+ # Renders a url 'inline'.
31
+ #
32
+ # url: normal URL, like you'd use for redirecting.
33
+ # options: optional, will be used as request parameters.
34
+
35
+ def render_partial(url, options = {})
36
+ # Save any request params that clash with the ones we're about to add in.
37
+ saved = {}
38
+ options.keys.each {|x| saved[x] = Request.current.params[x] }
39
+
40
+ # Add/overwrite with the specified params. Ensure keys are strings since
41
+ # request[:foo] converts key to string when performing lookup.
42
+ options.each do |key, value|
43
+ Request.current.params[key.to_s] = value
44
+ end
45
+
46
+ Controller.handle(url)
47
+ ensure
48
+ # Always reinstate the original
49
+ options.keys.each {|x| Request.current.params[x] = saved[x] }
50
+ end
51
+
52
+ # Render the template file in view_root of the
53
+ # current controller.
54
+
55
+ def render_template(file, vars = {})
56
+ current = Action.current
57
+ options = { :controller => current.controller,
58
+ :instance => current.instance.dup }
59
+
60
+ file = file.to_s
61
+
62
+ if Pathname(file).absolute?
63
+ file = file.squeeze '/'
64
+ unless File.exist?(file)
65
+ Log.warn "render_template: #{file} does not exist."
66
+ return ''
67
+ end
68
+ options[:template] = file
69
+ else
70
+ roots = [options[:controller].template_paths].flatten
71
+
72
+ if (files = Dir["{#{roots.join(',')}}"/"{#{file},#{file}.*}"]).any?
73
+ options[:template] = files.first.squeeze '/'
74
+ else
75
+ Log.warn "render_template: #{file} does not exist in the following directories: #{roots.join(',')}."
76
+ return ''
77
+ end
78
+ end
79
+
80
+ binding = options[:instance].scope
81
+
82
+ # For Ruby 1.9/1.8.7
83
+ binding = binding.binding if binding.respond_to?(:binding)
84
+
85
+ vars.each do |name, value|
86
+ options[:instance].instance_variable_set("@#{name}", value)
87
+
88
+ value = "ObjectSpace._id2ref(#{ value.object_id })"
89
+ eval "#{ name } = #{ value }", binding
90
+ end
91
+
92
+ options[:binding] = binding
93
+
94
+ Ramaze::Action(options).render
95
+ end
96
+
97
+ # shortcut to render_partial, accepts a method and contructs a link to the
98
+ # current controller, then calls render_partial on that
99
+
100
+ def render_action method, *params
101
+ render_partial(Rs(method), *params)
102
+ end
103
+
104
+ end
105
+ end
@@ -0,0 +1,82 @@
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
+ # Helper::Redirect actually takes advantage of Helper::Link.link_raw to build the links
7
+ # it redirects to.
8
+ # It doesn't do much else than this:
9
+ # setting a status-code of 303 and a response['Location'] = link
10
+ # returning some nice text for visitors who insist on ignoring those hints :P
11
+ #
12
+ # Usage:
13
+ # redirect Rs()
14
+ # redirect R(MainController)
15
+ # redirect R(MainController, :foo)
16
+ # redirect 'foo/bar'
17
+ # redirect 'foo/bar', :status => 301
18
+ #
19
+ # TODO:
20
+ # - maybe some more options, like a delay
21
+ #
22
+
23
+ module Helper::Redirect
24
+
25
+ # render to the browser directly, ignoring any templates
26
+ #
27
+ # Usage:
28
+ # respond 'Page not found', 404
29
+ # respond render_template('forbidden.erb'), 403
30
+ # respond File.open('file.jpg'), 200, 'Content-Type' => 'image/jpeg'
31
+
32
+ def respond(*args)
33
+ response.build(*args)
34
+ throw(:respond)
35
+ end
36
+
37
+ # Usage:
38
+ # redirect Rs()
39
+ # redirect R(MainController)
40
+ # redirect R(MainController, :foo)
41
+ # redirect 'foo/bar'
42
+ # redirect 'foo/bar', :status => 301
43
+
44
+ def redirect(target, opts = {})
45
+ target = target.to_s
46
+
47
+ unless target =~ %r!^https?://!
48
+ target[0,0] = '/' unless target =~ %r!^/!
49
+ if host = request.env['HTTP_HOST']
50
+ target[0,0] = "http://#{host}"
51
+ end
52
+ end
53
+
54
+ raw_redirect(target, opts)
55
+ end
56
+
57
+ # Do not perform any mutations on the target like #redirect does.
58
+ # Suitable if you have to redirect to a different subdomain or host.
59
+ def raw_redirect(target, opts = {})
60
+ target = target.to_s
61
+ header = {'Location' => target}
62
+ status = opts[:status] || STATUS_CODE["Moved Temporarily"]
63
+ body = %{You are being redirected, please follow <a href="#{target}">this link to: #{target}</a>!}
64
+
65
+ Log.info("Redirect to '#{target}'")
66
+ request[:redirected] = true
67
+ throw(:redirect, [body, status, header])
68
+ end
69
+
70
+ # Are we being redirected?
71
+ def redirected?
72
+ request[:redirected]
73
+ end
74
+
75
+ # redirect to the location the browser says it's coming from.
76
+
77
+ def redirect_referer
78
+ redirect request.referer
79
+ end
80
+ alias redirect_referrer redirect_referer
81
+ end
82
+ end
@@ -0,0 +1,43 @@
1
+ module Ramaze
2
+ module Helper
3
+ module REST
4
+ def self.included(klass)
5
+ klass.class_eval do
6
+ trait :REST => {
7
+ 'GET' => [], 'PUT' => [],
8
+ 'POST' => [], 'DELETE' => [],
9
+ :any => [],
10
+ }
11
+ extend Indicate
12
+
13
+ def self.method_added(name)
14
+ name = name.to_s
15
+ active = trait[:REST][:active] ||= :any
16
+ trait[:REST][active] << name
17
+ end
18
+ end
19
+ end
20
+
21
+ module Indicate
22
+ def on(http_method)
23
+ hm = http_method.to_s.upcase
24
+ trait[:REST][hm] = []
25
+ trait[:REST][:active] = hm
26
+ end
27
+
28
+ (%w[GET PUT POST DELETE] << 'any').each do |http_method|
29
+ define_method("on_#{http_method.downcase}") do |*args|
30
+ if args.empty?
31
+ on(http_method)
32
+ else
33
+ trait[:REST][http_method] += args.flatten
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+
42
+ # POST /foo/bar
43
+ # methods_on_post[/foo/bar]
@@ -0,0 +1,16 @@
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
+ # Helper for quickly push out files with the proper mimetype.
7
+
8
+ module Helper::SendFile
9
+ # Sets Content-Type to the mimetype of the file and opens the file you pass
10
+ # it, then throws :respond to finish off the request.
11
+
12
+ def send_file(file, mime_type = Tool::MIME.type_for(file))
13
+ respond File.open(file, 'rb'), 200, 'Content-Type' => mime_type
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,55 @@
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::Sequel
6
+
7
+ # Very crude paginator, may contain serious bugs, please fix :)
8
+ # pass it the result of YourModel.paginate, target is where links point to.
9
+ def paginator(paginated, target)
10
+ page_count = paginated.page_count
11
+ prev_page = paginated.prev_page
12
+ current_page = paginated.current_page
13
+ next_page = paginated.next_page
14
+
15
+ lower = (current_page - 3).abs
16
+ lower = lower == 0 ? 1 : lower
17
+
18
+ out = ['<div class="paginator">']
19
+
20
+ if prev_page
21
+ out << %(<a class="paginator_prev" href="#{Rs(target, prev_page)}">&lt;&nbsp;Prev</a>)
22
+ else
23
+ out << %(<span class="paginator_prev">&lt;&nbsp;Prev</span>)
24
+ end
25
+
26
+ if current_page > 3
27
+ out << %(<a class="paginator_page" href="#{Rs(target, 1)}">#{1}</a> ... )
28
+ end
29
+
30
+ lower.upto(current_page) do |pc|
31
+ next if pc == current_page
32
+ out << %(<a class="paginator_page" href="#{Rs(target, pc)}">#{pc}</a>)
33
+ end
34
+
35
+ out << %(<span class="paginator_current">#{current_page}</span>)
36
+
37
+ current_page.upto([page_count, current_page + 3].min) do |pc|
38
+ next if pc == current_page
39
+ out << %(<a class="paginator_page" href="#{Rs(target, pc)}">#{pc}</a>)
40
+ end
41
+
42
+ if current_page < (page_count - 3)
43
+ out << %(.. <a class="paginator_page" href="#{Rs(target, page_count)}">#{page_count}</a>)
44
+ end
45
+
46
+ if next_page
47
+ out << %(<a class="paginator_next" href="#{Rs(target, next_page)}">Next&nbsp;&gt;</a>)
48
+ else
49
+ out << %(<span class="paginator_next">Next&nbsp;&gt;</span>)
50
+ end
51
+ out << '</div>'
52
+ out.join(" ")
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,31 @@
1
+ module Ramaze
2
+ module Helper
3
+ module SimpleCaptcha
4
+ def simple_captcha
5
+ question, answer = generate_captcha
6
+ session[:CAPTCHA] = {
7
+ :question => question, :answer => answer.to_s
8
+ }
9
+ question
10
+ end
11
+
12
+ def check_captcha(answer)
13
+ if captcha = session[:CAPTCHA]
14
+ should = captcha[:answer].to_s
15
+ should == answer.to_s.strip
16
+ end
17
+ end
18
+
19
+ def generate_captcha
20
+ n = [5, 10, 15, 20]
21
+ ns = Array.new(2){ n.sort_by{rand}.first }.sort
22
+ op = rand > 0.42 ? [ns[0], :+, ns[1]] : [ns[1], :-, ns[0]]
23
+
24
+ question = op.join(' ')
25
+ answer = op[0].send(op[1], op[2])
26
+
27
+ [question, answer]
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,77 @@
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
+ # provides an call/answer mechanism, this is useful for example in a
7
+ # login-system.
8
+ #
9
+ # It is basically good to redirect temporarly somewhere else without
10
+ # forgetting where you come from and offering a nice way to get back
11
+ # to the last urls.
12
+ #
13
+ # Example:
14
+ #
15
+ # class AuthController < Controller
16
+ # helper :stack
17
+ #
18
+ # def login pass
19
+ # if pass == 'password'
20
+ # session[:logged_in] = true
21
+ # answer '/'
22
+ # else
23
+ # "failed"
24
+ # end
25
+ # end
26
+ #
27
+ # def logged_in?
28
+ # !!session[:logged_in]
29
+ # end
30
+ # end
31
+ #
32
+ # class ImportantController < Controller
33
+ # helper :stack
34
+ #
35
+ # def secret_information
36
+ # call :login unless logged_in?
37
+ # "Agent X is assigned to fight the RubyNinjas"
38
+ # end
39
+ # end
40
+
41
+ module Helper::Stack
42
+ # redirect to another location and pushing the current location
43
+ # on the session[:STACK]
44
+
45
+ def push(frame)
46
+ (session[:STACK] ||= []) << frame
47
+ end
48
+
49
+ def call(this)
50
+ push request.fullpath
51
+ redirect this
52
+ end
53
+
54
+ # return to the last location on session[:STACK]
55
+ # The optional alternative paramter will be used to redirect in case you
56
+ # are not inside_stack?
57
+ # If the session has no stack and no alternative is given this won't do
58
+ # anything
59
+
60
+ def answer(alternative = nil)
61
+ if inside_stack?
62
+ stack = session[:STACK]
63
+ target = stack.pop
64
+ session.delete(:STACK) if stack.empty?
65
+ redirect target
66
+ elsif alternative
67
+ redirect alternative
68
+ end
69
+ end
70
+
71
+ # check if the stack has something inside.
72
+
73
+ def inside_stack?
74
+ session[:STACK] and session[:STACK].any?
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,19 @@
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 'tagz'
5
+
6
+ module Ramaze
7
+
8
+ # Allows you to use some shortcuts for Tagz in your Controller.
9
+
10
+ # use this inside your controller to directly build Tagz
11
+ # Refer to the Tagz-documentation and testsuite for more examples.
12
+ # Usage:
13
+ # tagz { h1_{ "Apples & Oranges" } } #=> "<h1>Apples &amp; Oranges</h1>"
14
+ # tagz { h1_(:class => 'fruits&floots'){ 'Apples' } } #=> "<h1 class=\"fruits&amp;floots\">Apples</h1>"
15
+
16
+ module Helper
17
+ Tagz = ::Tagz
18
+ end
19
+ end
@@ -0,0 +1,17 @@
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::Thread
6
+ def thread &block
7
+ parent_thread = Thread.current
8
+ Thread.new do
9
+ begin
10
+ block.call
11
+ rescue Exception => e
12
+ parent_thread.raise(e)
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end