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,160 @@
1
+ # Copyright (c) 2006 Michael Fellinger m.fellinger@gmail.com
2
+ # All files in this distribution are subject to the terms of the Ruby license.
3
+
4
+ require 'spec/helper'
5
+
6
+ class TCCacheHelperController < Ramaze::Controller
7
+ map :/
8
+
9
+ helper :cache
10
+ cache :cached_action
11
+
12
+ def index
13
+ self.class.name
14
+ end
15
+
16
+ def cached_value
17
+ value_cache[:time] ||= random
18
+ end
19
+
20
+ def alt_cached_value
21
+ cache[:rand] ||= random
22
+ end
23
+
24
+ def uncache_values
25
+ value_cache.delete :time
26
+ cache.delete :rand
27
+ end
28
+
29
+ def cached_action
30
+ random
31
+ end
32
+
33
+ def uncache_actions
34
+ action_cache.clear
35
+ end
36
+
37
+ private
38
+
39
+ def random
40
+ [Time.now.usec, rand].inspect
41
+ end
42
+ end
43
+
44
+ class TCCacheHelperTTLController < Ramaze::Controller
45
+ map '/ttl'
46
+
47
+ helper :cache
48
+ cache :index, :ttl => 1
49
+
50
+ def cached_list
51
+ actions_cached.inspect
52
+ end
53
+
54
+ def index
55
+ rand
56
+ end
57
+ end
58
+
59
+ class TCCacheHelperKeyController < Ramaze::Controller
60
+ map '/key'
61
+
62
+ helper :cache
63
+ cache :name, :key => lambda{ request['name'] }
64
+
65
+ def cached_list
66
+ actions_cached.inspect
67
+ end
68
+
69
+ def name
70
+ "hi #{request['name']} #{rand}"
71
+ end
72
+ end
73
+
74
+ class TCCacheHelperOldController < Ramaze::Controller
75
+ map '/old'
76
+
77
+ helper :cache
78
+ trait :actions_cached => [:index, :action]
79
+
80
+ def index
81
+ rand
82
+ end
83
+
84
+ def action with, param
85
+ with + param + rand.to_s
86
+ end
87
+ end
88
+
89
+
90
+
91
+ # TODO:
92
+ # * specs fail horribly with the yaml store.
93
+ caches = {:memory => 'Hash'}
94
+
95
+ begin
96
+ require 'memcache'
97
+ caches[:memcached] = 'Ramaze::MemcachedCache'
98
+ rescue LoadError
99
+ puts "skipping memcached"
100
+ end
101
+
102
+ caches.each do |cache, name|
103
+ Ramaze::Global.cache = cache
104
+
105
+ describe "CacheHelper on #{name}" do
106
+ behaves_like 'http'
107
+ ramaze
108
+
109
+ def req(path='/', *args) get(path, *args).body end
110
+
111
+ it "testrun" do
112
+ req.should == 'TCCacheHelperController'
113
+ end
114
+
115
+ it "cached value" do
116
+ 3.times do
117
+ lambda{ req('/cached_value') }.should.not.change{ req('/cached_value') }
118
+ end
119
+
120
+ 3.times do
121
+ lambda{ req('/uncache_values') }.should.change{ req('/cached_value') }
122
+ end
123
+
124
+ lambda{ req('/uncache_values') }.should.change{ req('/alt_cached_value') }
125
+ end
126
+
127
+ it "cached action" do
128
+ 3.times do
129
+ lambda{ req('/cached_action') }.should.not.change{ req('/cached_action') }
130
+ end
131
+
132
+ 3.times do
133
+ lambda{ req('/uncache_actions') }.should.change{ req('/cached_action') }
134
+ end
135
+ end
136
+
137
+ it "should support options" do
138
+ req('/ttl/cached_list').should == {:index=>{:ttl=>1}}.inspect
139
+ req('/key/cached_list').should =~ /^\{:name=>\{:key=>/
140
+ end
141
+
142
+ it "should expire cache after time-to-live" do
143
+ orig_value = req('/ttl')
144
+ req('/ttl').should == orig_value
145
+ sleep 1
146
+ req('/ttl').should.not == orig_value
147
+ end
148
+
149
+ it "should cache using key lambda if provided" do
150
+ req('/key/name', :name=>'Aman').should == req('/key/name', :name=>'Aman')
151
+ req('/key/name', :name=>'Bob').should =~ /^hi Bob/
152
+ end
153
+
154
+ it "should remain backwards compatible" do
155
+ lambda{ req('/old') }.should.not.change{ req('/old') }
156
+ lambda{ req('/old/action/two/three') }.should.not.change{ req('/old/action/one/two') }
157
+ req('/old/action/two/three').should =~ /^twothree/
158
+ end
159
+ end
160
+ end
@@ -0,0 +1,43 @@
1
+ # Copyright (c) 2006 Michael Fellinger m.fellinger@gmail.com
2
+ # All files in this distribution are subject to the terms of the Ruby license.
3
+
4
+ require 'spec/helper'
5
+ require 'ramaze/helper/cgi'
6
+
7
+ class TCLink < Ramaze::Controller
8
+ map '/'
9
+ end
10
+
11
+ describe "url encode" do
12
+ extend Ramaze::Helper::CGI
13
+
14
+ it 'should url_encode strings' do
15
+ # ok, I believe that the web is dumb for this
16
+ # but this probably is a SHOULD thingy in the HTTP RFC
17
+ url_encode('title with spaces').should == 'title+with+spaces'
18
+ url_encode('[foo]').should == '%5Bfoo%5D'
19
+ u('//').should == '%2F%2F'
20
+ end
21
+ it 'should url_decode strings' do
22
+ url_decode('title%20with%20spaces').should == 'title with spaces'
23
+ url_decode('title+with+spaces').should == 'title with spaces'
24
+ end
25
+ it 'should be reversible' do
26
+ url_decode(u('../ etc/passwd')).should == '../ etc/passwd'
27
+ end
28
+ end
29
+
30
+ describe 'html escape' do
31
+ extend Ramaze::Helper::CGI
32
+
33
+ it 'should escape html' do
34
+ html_escape('& < >').should == '&amp; &lt; &gt;'
35
+ h('<&>').should == '&lt;&amp;&gt;'
36
+ end
37
+ it 'should unescape html' do
38
+ html_unescape('&lt; &amp; &gt;').should == '< & >'
39
+ end
40
+ it 'should be reversible' do
41
+ html_unescape(html_escape('2 > b && b <= 0')).should == '2 > b && b <= 0'
42
+ end
43
+ end
@@ -0,0 +1,18 @@
1
+ require 'spec/helper'
2
+
3
+ class TCFileHelper < Ramaze::Controller
4
+ map '/'
5
+
6
+ def index
7
+ send_file(__FILE__)
8
+ end
9
+ end
10
+
11
+ describe 'FileHelper' do
12
+ behaves_like 'http'
13
+ ramaze
14
+
15
+ it 'serving a file' do
16
+ get('/').body.strip.should == File.read(__FILE__).strip
17
+ end
18
+ end
@@ -0,0 +1,133 @@
1
+ # Copyright (c) 2006 Michael Fellinger m.fellinger@gmail.com
2
+ # All files in this distribution are subject to the terms of the Ruby license.
3
+
4
+ require 'spec/helper'
5
+
6
+ class TCFlashHelperFirstController < Ramaze::Controller
7
+ map :/
8
+ helper :flash
9
+
10
+ def index
11
+ self.class.name
12
+ end
13
+
14
+ def first_here
15
+ flash[:first] = 'hey'
16
+ end
17
+
18
+ def then_here
19
+ flash[:first].to_s
20
+ end
21
+
22
+ def set(*hash)
23
+ Hash[*hash].each do |key, value|
24
+ flash[key] = value
25
+ end
26
+ hash.inspect
27
+ end
28
+
29
+ def box
30
+ flashbox
31
+ end
32
+
33
+ def check_empty
34
+ flash.empty?
35
+ end
36
+ end
37
+
38
+ class TCFlashHelperSecondController < Ramaze::Controller
39
+ map '/second'
40
+ helper :flash
41
+
42
+ def index
43
+ self.class.name
44
+ end
45
+
46
+ def first_here
47
+ flash[:first] = 'hey'
48
+ end
49
+
50
+ def then_here
51
+ flash[:first].to_s
52
+ end
53
+ end
54
+
55
+ class TCFlashHelperThirdController < Ramaze::Controller
56
+ map '/third'
57
+ helper :flash
58
+
59
+ def index
60
+ end
61
+
62
+ def noop
63
+ 'noop'
64
+ end
65
+
66
+ def set par
67
+ flash[:e] = par
68
+ end
69
+
70
+ def retrieve
71
+ flash[:e]
72
+ end
73
+ end
74
+
75
+ describe Ramaze::Helper::Flash do
76
+ behaves_like 'browser'
77
+ ramaze :adapter => :webrick
78
+
79
+ should "set and forget flash twice" do
80
+ Browser.new do
81
+ get('/first_here')
82
+ get('/then_here').should == 'hey'
83
+ 2.times{ get('/then_here').should.be.empty }
84
+ get('/first_here')
85
+ get('/then_here').should == 'hey'
86
+ get('/then_here').should.be.empty
87
+ end
88
+ end
89
+
90
+ should "work over multiple controllers" do
91
+ Browser.new do
92
+ get('/first_here')
93
+ get('/second/then_here').should == 'hey'
94
+ get('/then_here').should.be.empty
95
+ get('/second/then_here').should.be.empty
96
+ get('/second/first_here')
97
+ get('/then_here').should == 'hey'
98
+ get('/second/then_here').should.be.empty
99
+ end
100
+ end
101
+
102
+ should "set and retrieve custom value" do
103
+ Browser.new do
104
+ get('/third/set/foo').should == 'foo'
105
+ get('/third/retrieve').should == 'foo'
106
+ 2.times{ get('/third/retrieve').should.be.empty }
107
+ end
108
+ end
109
+
110
+ should "show a flashbox" do
111
+ Browser.new do
112
+ error_div = "<div class='flash' id='flash_error'>stuff failed</div>"
113
+ success_div = "<div class='flash' id='flash_success'>other things worked</div>"
114
+
115
+ get('/set/error/stuff%20failed')
116
+ get('/box').should == error_div
117
+
118
+ get('/set/error/stuff%20failed/success/other%20things%20worked')
119
+ get('/box').split("\n").sort.should == [error_div, success_div].sort
120
+
121
+ get('/box').should.be.empty
122
+ end
123
+ end
124
+
125
+ should 'check if flash is empty' do
126
+ Browser.new do
127
+ get('/check_empty').should == 'true'
128
+ get('/set/one/two')
129
+ get('/check_empty').should == 'false'
130
+ get('/check_empty').should == 'true'
131
+ end
132
+ end
133
+ end
@@ -0,0 +1,118 @@
1
+ require 'spec/helper'
2
+
3
+ spec_require 'hpricot', 'sequel'
4
+
5
+ DB = Sequel.sqlite
6
+
7
+ class User < Sequel::Model(:user)
8
+ set_schema do
9
+ primary_key :id
10
+
11
+ boolean :online
12
+ varchar :name
13
+ integer :level
14
+ text :description
15
+ date :birthday
16
+ time :created
17
+ end
18
+ end
19
+
20
+ User.create_table
21
+
22
+ class FormController < Ramaze::Controller
23
+ map '/'
24
+ helper :form
25
+
26
+ def new
27
+ form_for(User).to_s
28
+ end
29
+
30
+ def new_with_options
31
+ form_for(User, :method => :POST, :action => Rs(:create)).to_s
32
+ end
33
+
34
+ def edit(id)
35
+ form_for(User[id])
36
+ end
37
+
38
+ def edit_with_options(id)
39
+ form_for(User[id], :method => :POST, :action => Rs(:create)).to_s
40
+ end
41
+ end
42
+
43
+ describe 'Helper::Form' do
44
+ ramaze
45
+
46
+ describe 'raw model' do
47
+ behaves_like 'requester'
48
+
49
+ should 'handle class' do
50
+ form = hget('/new').at(:form)
51
+ inputs = (form/:input)
52
+ inputs.map{|i| i[:name] }.compact.sort.should == %w[level name online]
53
+ form.at(:textarea)[:name].should == 'description'
54
+ end
55
+
56
+ should 'handle options' do
57
+ hget('/new_with_options').at(:form).raw_attributes.
58
+ should == {"action" => "/create", "method" => "POST"}
59
+ end
60
+ end
61
+
62
+ describe 'instances' do
63
+ behaves_like 'requester'
64
+
65
+ data = {
66
+ :name => 'manveru',
67
+ :description => 'Ramaze dev',
68
+ :online => true,
69
+ :level => 2,
70
+ :birthday => Time.now,
71
+ :created => Time.now,
72
+ }
73
+ User.create data
74
+
75
+ should 'handle class' do
76
+ form = hget('/edit/1').at(:form)
77
+
78
+ form.at('input[@name=name]').raw_attributes.should ==
79
+ { "name" => "name", "type" => "text", "value" => "manveru"}
80
+ form.at('input[@name=online]').raw_attributes.should ==
81
+ {"name" => "online", "checked" => "checked", "type" => "checkbox", "value" => "true"}
82
+ form.at('input[@name=level]').raw_attributes.should ==
83
+ {"name" => "level", "type" => "text", "value" => "2"}
84
+
85
+ # TODO:
86
+ # find a way to XPATH to input[@name="birthday[day]"]
87
+ # the [] in the name seems to break things, works fine with ()
88
+
89
+ # check date
90
+
91
+ date = data[:birthday]
92
+ selects = (form/'select[@name]').select{|s| s[:name] =~ /birthday/ }
93
+
94
+ { :day => date.day, :month => date.month, :year => date.year,
95
+ }.each do |key, value|
96
+ select = selects.find{|s| s[:name] == "birthday[#{key}]" }
97
+ select.at('[@selected]')[:value].to_i.should == value
98
+ end
99
+
100
+ # check time
101
+
102
+ time = data[:created]
103
+ selects = (form/'select[@name]').select{|s| s[:name] =~ /created/ }
104
+
105
+ { :day => time.day, :month => time.month, :year => time.year,
106
+ :hour => time.hour, :min => time.min, :sec => time.sec,
107
+ }.each do |key, value|
108
+ select = selects.find{|s| s[:name] == "created[#{key}]" }
109
+ select.at('[@selected]')[:value].to_i.should == value
110
+ end
111
+ end
112
+
113
+ should 'handle options' do
114
+ hget('/edit_with_options/1').at(:form).raw_attributes.
115
+ should == {"action" => "/create", "method" => "POST"}
116
+ end
117
+ end
118
+ end
@@ -0,0 +1,54 @@
1
+ require 'spec/helper'
2
+ require 'ramaze/helper/formatting'
3
+
4
+ describe 'Helper::Formatting' do
5
+ extend Ramaze::Helper::Formatting
6
+
7
+ it 'should format numbers' do
8
+ number_format(2_123_456).should == '2,123,456'
9
+ number_format(1234.567).should == '1,234.567'
10
+ number_format(123456.789, '.').should == '123.456,789'
11
+ number_format(123456.789123, '.').should == '123.456,789123'
12
+ number_format(132123456.789123, '.').should == '132.123.456,789123'
13
+ end
14
+
15
+ it 'should return difference in time as a string' do
16
+ time_diff(Time.now-29).should == 'less than a minute'
17
+ time_diff(Time.now-60).should == '1 minute'
18
+ time_diff(Time.now, Time.now+29, true).should == 'half a minute'
19
+ end
20
+
21
+ it 'should linkify urls' do
22
+ auto_link("http://ramaze.net is the coolest framework, but <a href='http://merbivore.com'>merb</a> is good too").should ==
23
+ "<a href=\"http://ramaze.net\">http://ramaze.net</a> is the coolest framework, but <a href='http://merbivore.com'>merb</a> is good too"
24
+
25
+ auto_link("http://ramaze.net", :target => '_blank').should ==
26
+ "<a href=\"http://ramaze.net\" target='_blank'>http://ramaze.net</a>"
27
+ end
28
+
29
+ it 'should auto_link urls, setting the result of the given block as the link text' do
30
+ auto_link('http://ramaze.net rocks, so does http://rubyonrails.org.') { |url| url.sub!(%r{http://}, '') }.should ==
31
+ '<a href="http://ramaze.net">ramaze.net</a> rocks, so does <a href="http://rubyonrails.org">rubyonrails.org</a>.'
32
+ end
33
+
34
+ should 'ordinalize numbers' do
35
+ ordinal(1).should == '1st'
36
+ ordinal(2).should == '2nd'
37
+ ordinal(3).should == '3rd'
38
+ ordinal(4).should == '4th'
39
+ ordinal(10).should == '10th'
40
+ ordinal(12).should == '12th'
41
+ ordinal(21).should == '21st'
42
+ ordinal(23).should == '23rd'
43
+ ordinal(100).should == '100th'
44
+ ordinal(133).should == '133rd'
45
+ end
46
+
47
+ should 'generate tagclouds' do
48
+ tags = %w[ruby ruby code ramaze]
49
+ tagcloud(tags).should ==
50
+ {"code"=>0.75, "ramaze"=>0.75, "ruby"=>1.0}
51
+ tagcloud(tags, 0.5, 2.0).should ==
52
+ {"code"=>0.875, "ramaze"=>0.875, "ruby"=>1.25}
53
+ end
54
+ end
@@ -0,0 +1,124 @@
1
+ # Copyright (c) 2006 Michael Fellinger m.fellinger@gmail.com
2
+ # All files in this distribution are subject to the terms of the Ruby license.
3
+
4
+ require 'spec/helper'
5
+ require 'ramaze/helper/link'
6
+
7
+ class TCLink < Ramaze::Controller
8
+ map '/'
9
+ def index; end
10
+ end
11
+
12
+ class TCLink2 < Ramaze::Controller
13
+ map '/2'
14
+ def index; end
15
+ end
16
+
17
+ describe "A" do
18
+ extend Ramaze::Helper::Link
19
+ behaves_like 'resolve'
20
+
21
+ ramaze
22
+
23
+ it 'should build links' do
24
+ A('title', :href => '/').should == %(<a href="/">title</a>)
25
+ A('title', :href => '/foo').should == %(<a href="/foo">title</a>)
26
+ A('title', :href => '/foo?x=y').should == %{<a href="/foo?x=y">title</a>}
27
+ stack('/'){ A('/foo?x=y') }.should == %{<a href="/foo?x=y">/foo?x=y</a>}
28
+
29
+ a = A('title', :href => '/foo', :class => :none)
30
+ a.should =~ /class="none"/
31
+ a.should =~ /href="\/foo"/
32
+ end
33
+
34
+ it 'should build position independend links' do
35
+ stack('/'){ A(TCLink, :foo) }.should == %(<a href="/foo">foo</a>)
36
+ end
37
+
38
+ it 'should escape path' do
39
+ stack('/'){ A('ti tle') }.should == '<a href="/ti+tle">ti tle</a>'
40
+ a = A('', :href => "/foo?chunky=b\000acon")
41
+ a.should == '<a href="/foo?chunky=b%00acon"></a>'
42
+ end
43
+
44
+ it 'should handle text key' do
45
+ A(:href => '/', :text => 'text').should == '<a href="/">text</a>'
46
+ end
47
+
48
+ it 'should use last argument as first text fallback' do
49
+ a = A('text', :href => '/', :title => 'title')
50
+ a.should =~ /href="\/"/
51
+ a.should =~ /title="title"/
52
+ a.should =~ />text</
53
+ end
54
+
55
+ it 'should use :title as second text fallback' do
56
+ a = A(:href => '/', :title => 'text')
57
+ a.should =~ /title="text"/
58
+ a.should =~ /href="\/"/
59
+ a.should =~ />text</
60
+ end
61
+
62
+ it 'should use :href as third text fallback' do
63
+ A(:href => '/').should == '<a href="/">/</a>'
64
+ end
65
+ end
66
+
67
+ describe 'R' do
68
+ extend Ramaze::Helper::Link
69
+
70
+ it 'should build urls' do
71
+ R(TCLink).should == '/'
72
+ R(TCLink, :foo).should == '/foo'
73
+ R(TCLink, :foo, :bar).should == '/foo/bar'
74
+ R(TCLink, :foo, :bar => :baz).should == '/foo?bar=baz'
75
+ end
76
+ end
77
+
78
+ describe 'Rs' do
79
+ extend Ramaze::Helper::Link
80
+
81
+ def resolve(url)
82
+ Ramaze::Controller::resolve(url)
83
+ end
84
+
85
+ it 'should build links for current controller' do
86
+ resolve('/2').stack{ Rs(:index).should == '/2/index' }
87
+ resolve('/').stack{ Rs(:index).should == '/index' }
88
+ end
89
+
90
+ it 'should treat Rs() like R() when Controller given' do
91
+ resolve('/2').stack{ Rs(TCLink, :index).should == '/2/index' }
92
+ end
93
+
94
+ it 'should treat non-controllers as strings' do
95
+ resolve('/2').stack{ Rs(Ramaze, :index).should == '/2/Ramaze/index' }
96
+ end
97
+
98
+ end
99
+
100
+ describe 'breadcrumbs' do
101
+ extend Ramaze::Helper::Link
102
+
103
+ it 'should lay out breadcrumbs' do
104
+ breadcrumbs('/file/dir/listing/is/cool').
105
+ should == [
106
+ "<a href=\"/file\">file</a>",
107
+ "<a href=\"/file/dir\">dir</a>",
108
+ "<a href=\"/file/dir/listing\">listing</a>",
109
+ "<a href=\"/file/dir/listing/is\">is</a>",
110
+ "<a href=\"/file/dir/listing/is/cool\">cool</a>"
111
+ ].join('/')
112
+ end
113
+
114
+ it 'should lay out breadcrumbs with href prefix' do
115
+ breadcrumbs('/file/dir/listing/is/cool', '/', '/', '/prefix/path').
116
+ should == [
117
+ "<a href=\"/prefix/path/file\">file</a>",
118
+ "<a href=\"/prefix/path/file/dir\">dir</a>",
119
+ "<a href=\"/prefix/path/file/dir/listing\">listing</a>",
120
+ "<a href=\"/prefix/path/file/dir/listing/is\">is</a>",
121
+ "<a href=\"/prefix/path/file/dir/listing/is/cool\">cool</a>"
122
+ ].join('/')
123
+ end
124
+ end