rjspotter-ramaze 2009.06.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (503) hide show
  1. data/.gitignore +3 -0
  2. data/.mailmap +25 -0
  3. data/MANIFEST +502 -0
  4. data/README.md +457 -0
  5. data/Rakefile +88 -0
  6. data/benchmark/bench_templates/bench.rb +67 -0
  7. data/benchmark/bench_templates/view/large.erb +79 -0
  8. data/benchmark/bench_templates/view/large.haml +41 -0
  9. data/benchmark/bench_templates/view/large.xhtml +79 -0
  10. data/benchmark/bench_templates/view/small.erb +21 -0
  11. data/benchmark/bench_templates/view/small.haml +12 -0
  12. data/benchmark/bench_templates/view/small.xhtml +21 -0
  13. data/benchmark/results.txt +131 -0
  14. data/benchmark/run.rb +355 -0
  15. data/benchmark/suite/minimal.rb +11 -0
  16. data/benchmark/suite/no_informer.rb +7 -0
  17. data/benchmark/suite/no_sessions.rb +9 -0
  18. data/benchmark/suite/no_template.rb +7 -0
  19. data/benchmark/suite/simple.rb +5 -0
  20. data/benchmark/suite/template_erubis.rb +8 -0
  21. data/benchmark/suite/template_etanni.rb +8 -0
  22. data/benchmark/suite/template_ezamar.rb +8 -0
  23. data/benchmark/suite/template_haml.rb +13 -0
  24. data/benchmark/suite/template_liquid.rb +11 -0
  25. data/benchmark/suite/template_markaby.rb +9 -0
  26. data/benchmark/suite/template_nagoro.rb +8 -0
  27. data/benchmark/suite/template_redcloth.rb +13 -0
  28. data/benchmark/suite/template_tenjin.rb +8 -0
  29. data/benchmark/test.rb +35 -0
  30. data/bin/ramaze +15 -0
  31. data/doc/AUTHORS +44 -0
  32. data/doc/CHANGELOG +17362 -0
  33. data/doc/COPYING +56 -0
  34. data/doc/FAQ +92 -0
  35. data/doc/GPL +339 -0
  36. data/doc/INSTALL +92 -0
  37. data/doc/LEGAL +26 -0
  38. data/doc/TODO +29 -0
  39. data/doc/meta/announcement.txt +146 -0
  40. data/doc/meta/configuration.txt +163 -0
  41. data/doc/meta/internals.txt +278 -0
  42. data/doc/meta/users.kml +64 -0
  43. data/doc/tutorial/todolist.html +1379 -0
  44. data/doc/tutorial/todolist.txt +920 -0
  45. data/examples/app/auth/layout/auth.xhtml +25 -0
  46. data/examples/app/auth/start.rb +23 -0
  47. data/examples/app/auth/view/index.xhtml +4 -0
  48. data/examples/app/auth/view/login.xhtml +20 -0
  49. data/examples/app/auth/view/secret.xhtml +1 -0
  50. data/examples/app/blog/README +3 -0
  51. data/examples/app/blog/app.rb +69 -0
  52. data/examples/app/blog/config.ru +17 -0
  53. data/examples/app/blog/controller/comment.rb +45 -0
  54. data/examples/app/blog/controller/entry.rb +85 -0
  55. data/examples/app/blog/controller/init.rb +86 -0
  56. data/examples/app/blog/controller/main.rb +20 -0
  57. data/examples/app/blog/controller/tag.rb +9 -0
  58. data/examples/app/blog/layout/default.nag +31 -0
  59. data/examples/app/blog/model/comment.rb +58 -0
  60. data/examples/app/blog/model/entry.rb +89 -0
  61. data/examples/app/blog/model/init.rb +15 -0
  62. data/examples/app/blog/model/tag.rb +36 -0
  63. data/examples/app/blog/public/css/screen.css +273 -0
  64. data/examples/app/blog/spec/blog.rb +87 -0
  65. data/examples/app/blog/start.rb +5 -0
  66. data/examples/app/blog/view/comment/form.nag +10 -0
  67. data/examples/app/blog/view/comment/show.nag +16 -0
  68. data/examples/app/blog/view/entry/edit.nag +14 -0
  69. data/examples/app/blog/view/entry/feed.atom.nag +8 -0
  70. data/examples/app/blog/view/entry/feed.rss.nag +7 -0
  71. data/examples/app/blog/view/entry/index.nag +7 -0
  72. data/examples/app/blog/view/entry/new.nag +13 -0
  73. data/examples/app/blog/view/entry/show.nag +36 -0
  74. data/examples/app/blog/view/feed.atom.nag +18 -0
  75. data/examples/app/blog/view/feed.rss.nag +25 -0
  76. data/examples/app/blog/view/index.nag +6 -0
  77. data/examples/app/blog/view/tag/index.nag +5 -0
  78. data/examples/app/chat/layout/default.xhtml +13 -0
  79. data/examples/app/chat/model/history.rb +38 -0
  80. data/examples/app/chat/model/message.rb +7 -0
  81. data/examples/app/chat/public/css/chat.css +9 -0
  82. data/examples/app/chat/public/js/chat.js +28 -0
  83. data/examples/app/chat/public/js/jquery.js +3436 -0
  84. data/examples/app/chat/start.rb +39 -0
  85. data/examples/app/chat/view/chat.xhtml +9 -0
  86. data/examples/app/chat/view/index.xhtml +7 -0
  87. data/examples/app/localization/locale/de.yaml +5 -0
  88. data/examples/app/localization/locale/en.yaml +5 -0
  89. data/examples/app/localization/locale/ja.yaml +5 -0
  90. data/examples/app/localization/start.rb +48 -0
  91. data/examples/app/sourceview/public/coderay.css +104 -0
  92. data/examples/app/sourceview/public/images/file.gif +0 -0
  93. data/examples/app/sourceview/public/images/folder.gif +0 -0
  94. data/examples/app/sourceview/public/images/tv-collapsable-last.gif +0 -0
  95. data/examples/app/sourceview/public/images/tv-collapsable.gif +0 -0
  96. data/examples/app/sourceview/public/images/tv-expandable-last.gif +0 -0
  97. data/examples/app/sourceview/public/images/tv-expandable.gif +0 -0
  98. data/examples/app/sourceview/public/images/tv-item-last.gif +0 -0
  99. data/examples/app/sourceview/public/images/tv-item.gif +0 -0
  100. data/examples/app/sourceview/public/jquery.js +11 -0
  101. data/examples/app/sourceview/public/jquery.treeview.css +48 -0
  102. data/examples/app/sourceview/public/jquery.treeview.js +223 -0
  103. data/examples/app/sourceview/public/sourceview.js +52 -0
  104. data/examples/app/sourceview/start.rb +79 -0
  105. data/examples/app/sourceview/view/index.haml +59 -0
  106. data/examples/app/todolist/controller/init.rb +10 -0
  107. data/examples/app/todolist/controller/task.rb +39 -0
  108. data/examples/app/todolist/layout/default.xhtml +14 -0
  109. data/examples/app/todolist/model/init.rb +14 -0
  110. data/examples/app/todolist/model/task.rb +39 -0
  111. data/examples/app/todolist/public/css/screen.css +63 -0
  112. data/examples/app/todolist/public/favicon.ico +0 -0
  113. data/examples/app/todolist/start.rb +11 -0
  114. data/examples/app/todolist/view/index.xhtml +29 -0
  115. data/examples/app/upload/start.rb +19 -0
  116. data/examples/app/upload/view/index.xhtml +25 -0
  117. data/examples/app/whywiki/spec/whywiki.rb +58 -0
  118. data/examples/app/whywiki/start.rb +46 -0
  119. data/examples/app/whywiki/template/edit.xhtml +14 -0
  120. data/examples/app/whywiki/template/show.xhtml +18 -0
  121. data/examples/app/wikore/spec/wikore.rb +109 -0
  122. data/examples/app/wikore/src/controller.rb +78 -0
  123. data/examples/app/wikore/src/model.rb +56 -0
  124. data/examples/app/wikore/start.rb +9 -0
  125. data/examples/app/wikore/view/index.xhtml +8 -0
  126. data/examples/app/wiktacular/README +2 -0
  127. data/examples/app/wiktacular/mkd/link/2007-07-20_19-45-51.mkd +1 -0
  128. data/examples/app/wiktacular/mkd/link/current.mkd +1 -0
  129. data/examples/app/wiktacular/mkd/main/2007-07-20_16-31-33.mkd +1 -0
  130. data/examples/app/wiktacular/mkd/main/2007-07-20_19-21-12.mkd +1 -0
  131. data/examples/app/wiktacular/mkd/main/2007-07-20_19-23-10.mkd +2 -0
  132. data/examples/app/wiktacular/mkd/main/2007-07-20_19-45-07.mkd +2 -0
  133. data/examples/app/wiktacular/mkd/main/current.mkd +2 -0
  134. data/examples/app/wiktacular/mkd/markdown/current.mkd +3 -0
  135. data/examples/app/wiktacular/mkd/testing/2007-07-20_16-43-46.mkd +2 -0
  136. data/examples/app/wiktacular/mkd/testing/2007-07-20_19-43-50.mkd +3 -0
  137. data/examples/app/wiktacular/mkd/testing/2007-07-21_18-46-01.mkd +11 -0
  138. data/examples/app/wiktacular/mkd/testing/2007-07-21_18-46-32.mkd +13 -0
  139. data/examples/app/wiktacular/mkd/testing/2007-07-21_18-47-08.mkd +17 -0
  140. data/examples/app/wiktacular/mkd/testing/2007-07-21_18-47-54.mkd +17 -0
  141. data/examples/app/wiktacular/mkd/testing/current.mkd +17 -0
  142. data/examples/app/wiktacular/public/favicon.ico +0 -0
  143. data/examples/app/wiktacular/public/screen.css +72 -0
  144. data/examples/app/wiktacular/spec/wiktacular.rb +157 -0
  145. data/examples/app/wiktacular/src/controller.rb +55 -0
  146. data/examples/app/wiktacular/src/model.rb +102 -0
  147. data/examples/app/wiktacular/start.rb +8 -0
  148. data/examples/app/wiktacular/template/edit.xhtml +6 -0
  149. data/examples/app/wiktacular/template/html_layout.xhtml +27 -0
  150. data/examples/app/wiktacular/template/index.xhtml +9 -0
  151. data/examples/app/wiktacular/template/new.xhtml +6 -0
  152. data/examples/basic/element.rb +47 -0
  153. data/examples/basic/gestalt.rb +26 -0
  154. data/examples/basic/hello.rb +14 -0
  155. data/examples/basic/layout.rb +28 -0
  156. data/examples/basic/linking.rb +29 -0
  157. data/examples/basic/partial.rb +26 -0
  158. data/examples/basic/simple.rb +52 -0
  159. data/examples/helpers/cache.rb +33 -0
  160. data/examples/helpers/form_with_sequel.rb +24 -0
  161. data/examples/helpers/httpdigest.rb +107 -0
  162. data/examples/helpers/identity.rb +18 -0
  163. data/examples/helpers/nitro_form.rb +23 -0
  164. data/examples/helpers/paginate.rb +71 -0
  165. data/examples/helpers/rest.rb +28 -0
  166. data/examples/helpers/simple_captcha.rb +29 -0
  167. data/examples/misc/css.rb +37 -0
  168. data/examples/misc/facebook.rb +159 -0
  169. data/examples/misc/memleak_detector.rb +37 -0
  170. data/examples/misc/nagoro_element.rb +43 -0
  171. data/examples/misc/ramaise.rb +132 -0
  172. data/examples/misc/rapp.rb +56 -0
  173. data/examples/misc/sequel_scaffolding.rb +34 -0
  174. data/examples/misc/serve_directory.rb +6 -0
  175. data/examples/templates/template_erubis.rb +52 -0
  176. data/examples/templates/template_ezamar.rb +51 -0
  177. data/examples/templates/template_haml.rb +49 -0
  178. data/examples/templates/template_liquid.rb +66 -0
  179. data/examples/templates/template_markaby.rb +57 -0
  180. data/examples/templates/template_nagoro.rb +50 -0
  181. data/examples/templates/template_redcloth.rb +58 -0
  182. data/examples/templates/template_remarkably.rb +54 -0
  183. data/examples/templates/template_tenjin.rb +52 -0
  184. data/examples/templates/view/external.haml +22 -0
  185. data/examples/templates/view/external.liquid +28 -0
  186. data/examples/templates/view/external.mab +30 -0
  187. data/examples/templates/view/external.nag +28 -0
  188. data/examples/templates/view/external.redcloth +19 -0
  189. data/examples/templates/view/external.rem +30 -0
  190. data/examples/templates/view/external.rhtml +28 -0
  191. data/examples/templates/view/external.tenjin +28 -0
  192. data/examples/templates/view/external.zmr +28 -0
  193. data/lib/proto/app.rb +14 -0
  194. data/lib/proto/config.ru +20 -0
  195. data/lib/proto/controller/init.rb +11 -0
  196. data/lib/proto/controller/main.rb +20 -0
  197. data/lib/proto/layout/default.xhtml +24 -0
  198. data/lib/proto/model/init.rb +4 -0
  199. data/lib/proto/public/.htaccess +24 -0
  200. data/lib/proto/public/css/screen.css +30 -0
  201. data/lib/proto/public/dispatch.fcgi +11 -0
  202. data/lib/proto/public/favicon.ico +0 -0
  203. data/lib/proto/public/js/jquery.js +4376 -0
  204. data/lib/proto/public/ramaze.png +0 -0
  205. data/lib/proto/spec/main.rb +20 -0
  206. data/lib/proto/start.rb +8 -0
  207. data/lib/proto/view/index.xhtml +41 -0
  208. data/lib/ramaze.rb +87 -0
  209. data/lib/ramaze/app.rb +124 -0
  210. data/lib/ramaze/cache.rb +19 -0
  211. data/lib/ramaze/cache/localmemcache.rb +56 -0
  212. data/lib/ramaze/cache/memcache.rb +124 -0
  213. data/lib/ramaze/cache/sequel.rb +82 -0
  214. data/lib/ramaze/contrib/addressable_route.rb +55 -0
  215. data/lib/ramaze/contrib/app_graph.rb +64 -0
  216. data/lib/ramaze/contrib/email.rb +88 -0
  217. data/lib/ramaze/contrib/facebook.rb +23 -0
  218. data/lib/ramaze/contrib/facebook/facebook.rb +171 -0
  219. data/lib/ramaze/contrib/gettext.rb +113 -0
  220. data/lib/ramaze/contrib/gettext/mo.rb +155 -0
  221. data/lib/ramaze/contrib/gettext/parser.rb +46 -0
  222. data/lib/ramaze/contrib/gettext/po.rb +109 -0
  223. data/lib/ramaze/contrib/gzip_filter.rb +1 -0
  224. data/lib/ramaze/contrib/maruku_uv.rb +59 -0
  225. data/lib/ramaze/contrib/profiling.rb +36 -0
  226. data/lib/ramaze/contrib/rest.rb +22 -0
  227. data/lib/ramaze/contrib/sequel/create_join.rb +26 -0
  228. data/lib/ramaze/contrib/sequel/form_field.rb +129 -0
  229. data/lib/ramaze/contrib/sequel/image.rb +196 -0
  230. data/lib/ramaze/contrib/sequel/relation.rb +98 -0
  231. data/lib/ramaze/controller.rb +104 -0
  232. data/lib/ramaze/controller/default.rb +12 -0
  233. data/lib/ramaze/current.rb +7 -0
  234. data/lib/ramaze/files.rb +24 -0
  235. data/lib/ramaze/gestalt.rb +132 -0
  236. data/lib/ramaze/helper.rb +13 -0
  237. data/lib/ramaze/helper/auth.rb +84 -0
  238. data/lib/ramaze/helper/bench.rb +41 -0
  239. data/lib/ramaze/helper/cache.rb +117 -0
  240. data/lib/ramaze/helper/disqus.rb +26 -0
  241. data/lib/ramaze/helper/flash.rb +62 -0
  242. data/lib/ramaze/helper/form.rb +127 -0
  243. data/lib/ramaze/helper/formatting.rb +189 -0
  244. data/lib/ramaze/helper/gestalt.rb +47 -0
  245. data/lib/ramaze/helper/gravatar.rb +79 -0
  246. data/lib/ramaze/helper/httpdigest.rb +97 -0
  247. data/lib/ramaze/helper/identity.rb +119 -0
  248. data/lib/ramaze/helper/layout.rb +97 -0
  249. data/lib/ramaze/helper/link.rb +56 -0
  250. data/lib/ramaze/helper/localize.rb +138 -0
  251. data/lib/ramaze/helper/markaby.rb +31 -0
  252. data/lib/ramaze/helper/maruku.rb +16 -0
  253. data/lib/ramaze/helper/nitroform.rb +14 -0
  254. data/lib/ramaze/helper/pager.rb +367 -0
  255. data/lib/ramaze/helper/paginate.rb +242 -0
  256. data/lib/ramaze/helper/partial.rb +100 -0
  257. data/lib/ramaze/helper/remarkably.rb +14 -0
  258. data/lib/ramaze/helper/request_accessor.rb +16 -0
  259. data/lib/ramaze/helper/sequel.rb +55 -0
  260. data/lib/ramaze/helper/sequel_form.rb +284 -0
  261. data/lib/ramaze/helper/simple_captcha.rb +61 -0
  262. data/lib/ramaze/helper/stack.rb +75 -0
  263. data/lib/ramaze/helper/tagz.rb +19 -0
  264. data/lib/ramaze/helper/thread.rb +17 -0
  265. data/lib/ramaze/helper/ultraviolet.rb +46 -0
  266. data/lib/ramaze/helper/user.rb +229 -0
  267. data/lib/ramaze/helper/xhtml.rb +34 -0
  268. data/lib/ramaze/log.rb +39 -0
  269. data/lib/ramaze/log/analogger.rb +39 -0
  270. data/lib/ramaze/log/growl.rb +38 -0
  271. data/lib/ramaze/log/hub.rb +41 -0
  272. data/lib/ramaze/log/informer.rb +129 -0
  273. data/lib/ramaze/log/knotify.rb +28 -0
  274. data/lib/ramaze/log/logger.rb +26 -0
  275. data/lib/ramaze/log/logging.rb +83 -0
  276. data/lib/ramaze/log/rotatinginformer.rb +168 -0
  277. data/lib/ramaze/log/syslog.rb +51 -0
  278. data/lib/ramaze/log/xosd.rb +92 -0
  279. data/lib/ramaze/middleware_compiler.rb +13 -0
  280. data/lib/ramaze/plugin.rb +69 -0
  281. data/lib/ramaze/reloader.rb +172 -0
  282. data/lib/ramaze/reloader/watch_inotify.rb +85 -0
  283. data/lib/ramaze/reloader/watch_stat.rb +58 -0
  284. data/lib/ramaze/request.rb +115 -0
  285. data/lib/ramaze/response.rb +36 -0
  286. data/lib/ramaze/setup.rb +123 -0
  287. data/lib/ramaze/snippets.rb +22 -0
  288. data/lib/ramaze/snippets/array/put_within.rb +44 -0
  289. data/lib/ramaze/snippets/binding/locals.rb +25 -0
  290. data/lib/ramaze/snippets/blankslate.rb +7 -0
  291. data/lib/ramaze/snippets/fiber.rb +63 -0
  292. data/lib/ramaze/snippets/kernel/pretty_inspect.rb +21 -0
  293. data/lib/ramaze/snippets/metaid.rb +17 -0
  294. data/lib/ramaze/snippets/numeric/filesize_format.rb +32 -0
  295. data/lib/ramaze/snippets/numeric/time.rb +63 -0
  296. data/lib/ramaze/snippets/object/__dir__.rb +29 -0
  297. data/lib/ramaze/snippets/object/instance_variable_defined.rb +19 -0
  298. data/lib/ramaze/snippets/object/pretty.rb +16 -0
  299. data/lib/ramaze/snippets/object/scope.rb +18 -0
  300. data/lib/ramaze/snippets/ordered_set.rb +51 -0
  301. data/lib/ramaze/snippets/proc/locals.rb +19 -0
  302. data/lib/ramaze/snippets/ramaze/acquire.rb +31 -0
  303. data/lib/ramaze/snippets/ramaze/deprecated.rb +23 -0
  304. data/lib/ramaze/snippets/ramaze/dictionary.rb +400 -0
  305. data/lib/ramaze/snippets/ramaze/fiber.rb +24 -0
  306. data/lib/ramaze/snippets/ramaze/struct.rb +45 -0
  307. data/lib/ramaze/snippets/string/camel_case.rb +21 -0
  308. data/lib/ramaze/snippets/string/color.rb +31 -0
  309. data/lib/ramaze/snippets/string/end_with.rb +20 -0
  310. data/lib/ramaze/snippets/string/esc.rb +34 -0
  311. data/lib/ramaze/snippets/string/ord.rb +21 -0
  312. data/lib/ramaze/snippets/string/snake_case.rb +21 -0
  313. data/lib/ramaze/snippets/string/start_with.rb +19 -0
  314. data/lib/ramaze/snippets/string/unindent.rb +28 -0
  315. data/lib/ramaze/snippets/thread/into.rb +18 -0
  316. data/lib/ramaze/spec.rb +33 -0
  317. data/lib/ramaze/spec/bacon.rb +34 -0
  318. data/lib/ramaze/spec/helper/bacon.rb +8 -0
  319. data/lib/ramaze/spec/helper/pretty_output.rb +82 -0
  320. data/lib/ramaze/spec/helper/snippets.rb +16 -0
  321. data/lib/ramaze/spec/helper/template_examples.rb +19 -0
  322. data/lib/ramaze/tool/bin.rb +340 -0
  323. data/lib/ramaze/tool/create.rb +48 -0
  324. data/lib/ramaze/tool/project_creator.rb +111 -0
  325. data/lib/ramaze/version.rb +3 -0
  326. data/lib/ramaze/view.rb +39 -0
  327. data/lib/ramaze/view/erubis.rb +23 -0
  328. data/lib/ramaze/view/ezamar.rb +23 -0
  329. data/lib/ramaze/view/gestalt.rb +14 -0
  330. data/lib/ramaze/view/haml.rb +16 -0
  331. data/lib/ramaze/view/liquid.rb +100 -0
  332. data/lib/ramaze/view/maruku.rb +15 -0
  333. data/lib/ramaze/view/nagoro.rb +44 -0
  334. data/lib/ramaze/view/nagoro/render_partial.rb +32 -0
  335. data/lib/ramaze/view/redcloth.rb +21 -0
  336. data/lib/ramaze/view/remarkably.rb +21 -0
  337. data/lib/ramaze/view/sass.rb +21 -0
  338. data/lib/ramaze/view/tagz.rb +63 -0
  339. data/lib/ramaze/view/tenjin.rb +32 -0
  340. data/lib/vendor/etag.rb +22 -0
  341. data/lib/vendor/route_exceptions.rb +42 -0
  342. data/ramaze.gemspec +85 -0
  343. data/spec/contrib/addressable_route.rb +32 -0
  344. data/spec/contrib/rest.rb +28 -0
  345. data/spec/examples/caching.rb +16 -0
  346. data/spec/examples/css.rb +14 -0
  347. data/spec/examples/element.rb +15 -0
  348. data/spec/examples/hello.rb +10 -0
  349. data/spec/examples/helpers/httpdigest.rb +64 -0
  350. data/spec/examples/linking.rb +17 -0
  351. data/spec/examples/simple.rb +40 -0
  352. data/spec/examples/templates/template_erubis.rb +10 -0
  353. data/spec/examples/templates/template_ezamar.rb +10 -0
  354. data/spec/examples/templates/template_haml.rb +10 -0
  355. data/spec/examples/templates/template_liquid.rb +10 -0
  356. data/spec/examples/templates/template_markaby.rb +11 -0
  357. data/spec/examples/templates/template_nagoro.rb +10 -0
  358. data/spec/examples/templates/template_redcloth.rb +10 -0
  359. data/spec/examples/templates/template_remarkably.rb +10 -0
  360. data/spec/examples/templates/template_tenjin.rb +10 -0
  361. data/spec/helper.rb +9 -0
  362. data/spec/ramaze/action/render.rb +21 -0
  363. data/spec/ramaze/action/view/bar.xhtml +1 -0
  364. data/spec/ramaze/action/view/instancevars/layout.xhtml +1 -0
  365. data/spec/ramaze/action/view/other_wrapper.erb +1 -0
  366. data/spec/ramaze/action/view/other_wrapper.xhtml +1 -0
  367. data/spec/ramaze/action/view/single_wrapper.xhtml +1 -0
  368. data/spec/ramaze/action/view/sub/sub_wrapper.erb +1 -0
  369. data/spec/ramaze/action/view/sub/sub_wrapper.xhtml +1 -0
  370. data/spec/ramaze/app.rb +47 -0
  371. data/spec/ramaze/bin/ramaze.rb +91 -0
  372. data/spec/ramaze/cache/localmemcache.rb +49 -0
  373. data/spec/ramaze/cache/memcache.rb +60 -0
  374. data/spec/ramaze/cache/sequel.rb +51 -0
  375. data/spec/ramaze/controller/actionless_templates.rb +36 -0
  376. data/spec/ramaze/controller/lonely_mapping.rb +16 -0
  377. data/spec/ramaze/controller/mapping.rb +43 -0
  378. data/spec/ramaze/controller/provide_inheritance.rb +47 -0
  379. data/spec/ramaze/controller/resolve.rb +30 -0
  380. data/spec/ramaze/controller/subclass.rb +36 -0
  381. data/spec/ramaze/controller/template_resolving.rb +77 -0
  382. data/spec/ramaze/controller/view/bar.xhtml +1 -0
  383. data/spec/ramaze/controller/view/base/another.xhtml +1 -0
  384. data/spec/ramaze/controller/view/greet.xhtml +1 -0
  385. data/spec/ramaze/controller/view/list.xhtml +1 -0
  386. data/spec/ramaze/controller/view/other/greet/other.xhtml +1 -0
  387. data/spec/ramaze/controller/view/other_wrapper.xhtml +1 -0
  388. data/spec/ramaze/dispatcher/directory.rb +69 -0
  389. data/spec/ramaze/dispatcher/file.rb +71 -0
  390. data/spec/ramaze/dispatcher/public/favicon.ico +0 -0
  391. data/spec/ramaze/dispatcher/public/file name.txt +1 -0
  392. data/spec/ramaze/dispatcher/public/test_download.css +141 -0
  393. data/spec/ramaze/error.rb +88 -0
  394. data/spec/ramaze/files.rb +29 -0
  395. data/spec/ramaze/files/public_1/plain.txt +1 -0
  396. data/spec/ramaze/files/public_2/rich.txt +1 -0
  397. data/spec/ramaze/gestalt.rb +135 -0
  398. data/spec/ramaze/helper/auth.rb +83 -0
  399. data/spec/ramaze/helper/bench.rb +18 -0
  400. data/spec/ramaze/helper/cache.rb +124 -0
  401. data/spec/ramaze/helper/flash.rb +41 -0
  402. data/spec/ramaze/helper/form.rb +356 -0
  403. data/spec/ramaze/helper/formatting.rb +111 -0
  404. data/spec/ramaze/helper/gestalt.rb +15 -0
  405. data/spec/ramaze/helper/gravatar.rb +40 -0
  406. data/spec/ramaze/helper/httpdigest.rb +144 -0
  407. data/spec/ramaze/helper/layout.rb +79 -0
  408. data/spec/ramaze/helper/layout/default.xhtml +5 -0
  409. data/spec/ramaze/helper/link.rb +70 -0
  410. data/spec/ramaze/helper/localize.rb +62 -0
  411. data/spec/ramaze/helper/maruku.rb +19 -0
  412. data/spec/ramaze/helper/pager.rb +96 -0
  413. data/spec/ramaze/helper/paginate.rb +68 -0
  414. data/spec/ramaze/helper/request_accessor.rb +19 -0
  415. data/spec/ramaze/helper/sequel_form.rb +91 -0
  416. data/spec/ramaze/helper/simple_captcha.rb +45 -0
  417. data/spec/ramaze/helper/stack.rb +86 -0
  418. data/spec/ramaze/helper/user.rb +72 -0
  419. data/spec/ramaze/helper/view/locals.xhtml +1 -0
  420. data/spec/ramaze/helper/view/loop.xhtml +4 -0
  421. data/spec/ramaze/helper/view/num.xhtml +1 -0
  422. data/spec/ramaze/helper/view/partial.xhtml +1 -0
  423. data/spec/ramaze/helper/view/recursive.xhtml +8 -0
  424. data/spec/ramaze/helper/view/recursive_local_ivars.xhtml +7 -0
  425. data/spec/ramaze/helper/view/recursive_locals.xhtml +7 -0
  426. data/spec/ramaze/helper/view/test_template.xhtml +1 -0
  427. data/spec/ramaze/helper/xhtml.rb +32 -0
  428. data/spec/ramaze/log/informer.rb +73 -0
  429. data/spec/ramaze/log/logging.rb +63 -0
  430. data/spec/ramaze/log/syslog.rb +73 -0
  431. data/spec/ramaze/params.rb +153 -0
  432. data/spec/ramaze/public/favicon.ico +0 -0
  433. data/spec/ramaze/public/ramaze.png +0 -0
  434. data/spec/ramaze/public/test_download.css +141 -0
  435. data/spec/ramaze/request.rb +61 -0
  436. data/spec/ramaze/rewrite/file.css +1 -0
  437. data/spec/ramaze/session/memcache.rb +66 -0
  438. data/spec/ramaze/struct.rb +47 -0
  439. data/spec/ramaze/template/ramaze/external.test +1 -0
  440. data/spec/ramaze/view.rb +36 -0
  441. data/spec/ramaze/view/erubis.rb +73 -0
  442. data/spec/ramaze/view/erubis/external.rhtml +8 -0
  443. data/spec/ramaze/view/erubis/sum.rhtml +1 -0
  444. data/spec/ramaze/view/ezamar.rb +73 -0
  445. data/spec/ramaze/view/ezamar/external.zmr +8 -0
  446. data/spec/ramaze/view/ezamar/sum.zmr +1 -0
  447. data/spec/ramaze/view/gestalt.rb +94 -0
  448. data/spec/ramaze/view/gestalt/external.ges +8 -0
  449. data/spec/ramaze/view/haml.rb +86 -0
  450. data/spec/ramaze/view/haml/external.haml +5 -0
  451. data/spec/ramaze/view/haml/sum.haml +2 -0
  452. data/spec/ramaze/view/liquid.rb +73 -0
  453. data/spec/ramaze/view/liquid/external.liquid +8 -0
  454. data/spec/ramaze/view/liquid/sum.liquid +1 -0
  455. data/spec/ramaze/view/nagoro.rb +73 -0
  456. data/spec/ramaze/view/nagoro/external.nag +8 -0
  457. data/spec/ramaze/view/nagoro/sum.nag +1 -0
  458. data/spec/ramaze/view/redcloth.rb +66 -0
  459. data/spec/ramaze/view/redcloth/external.redcloth +8 -0
  460. data/spec/ramaze/view/remarkably.rb +49 -0
  461. data/spec/ramaze/view/remarkably/external.rem +8 -0
  462. data/spec/ramaze/view/remarkably/sum.rem +1 -0
  463. data/spec/ramaze/view/sass.rb +73 -0
  464. data/spec/ramaze/view/sass/file.css.sass +5 -0
  465. data/spec/ramaze/view/tagz.rb +51 -0
  466. data/spec/ramaze/view/tagz/external.tagz +8 -0
  467. data/spec/ramaze/view/tagz/sum.tagz +1 -0
  468. data/spec/ramaze/view/tenjin.rb +57 -0
  469. data/spec/ramaze/view/tenjin/external.rbhtml +8 -0
  470. data/spec/ramaze/view/tenjin/sum.rbhtml +1 -0
  471. data/spec/snippets/array/put_within.rb +33 -0
  472. data/spec/snippets/binding/locals.rb +9 -0
  473. data/spec/snippets/numeric/filesize_format.rb +12 -0
  474. data/spec/snippets/numeric/time.rb +12 -0
  475. data/spec/snippets/object/__dir__.rb +14 -0
  476. data/spec/snippets/ordered_set.rb +63 -0
  477. data/spec/snippets/ramaze/acquire.rb +77 -0
  478. data/spec/snippets/ramaze/dictionary.rb +110 -0
  479. data/spec/snippets/ramaze/struct.rb +12 -0
  480. data/spec/snippets/string/camel_case.rb +25 -0
  481. data/spec/snippets/string/color.rb +11 -0
  482. data/spec/snippets/string/snake_case.rb +24 -0
  483. data/spec/snippets/string/unindent.rb +43 -0
  484. data/spec/snippets/thread/into.rb +9 -0
  485. data/tasks/authors.rake +30 -0
  486. data/tasks/bacon.rake +66 -0
  487. data/tasks/changelog.rake +20 -0
  488. data/tasks/copyright.rake +21 -0
  489. data/tasks/gem.rake +22 -0
  490. data/tasks/gem_setup.rake +99 -0
  491. data/tasks/git.rake +46 -0
  492. data/tasks/grancher.rake +12 -0
  493. data/tasks/jquery.rake +15 -0
  494. data/tasks/manifest.rake +4 -0
  495. data/tasks/metric_changes.rake +24 -0
  496. data/tasks/rcov.rake +23 -0
  497. data/tasks/release.rake +54 -0
  498. data/tasks/reversion.rake +8 -0
  499. data/tasks/setup.rake +6 -0
  500. data/tasks/todo.rake +27 -0
  501. data/tasks/traits.rake +21 -0
  502. data/tasks/yard.rake +4 -0
  503. metadata +720 -0
@@ -0,0 +1,72 @@
1
+ require 'spec/helper'
2
+
3
+ class MockSequelUser
4
+ def profile
5
+ "Arthur Dent, fearful human in outer space!"
6
+ end
7
+
8
+ def self.authenticate(hash)
9
+ new if hash.values_at('name', 'password') == %w[arthur 42]
10
+ end
11
+ end
12
+
13
+ class SpecUserHelper < Ramaze::Controller
14
+ map '/'
15
+ helper :user
16
+ trait :user_model => MockSequelUser
17
+
18
+ def status
19
+ logged_in? ? 'yes' : 'no'
20
+ end
21
+
22
+ def login
23
+ user_login ? 'logged in' : 'failed login'
24
+ end
25
+
26
+ def logout
27
+ user_logout
28
+ end
29
+
30
+ def profile
31
+ user.profile
32
+ end
33
+ end
34
+
35
+ Arthur = {
36
+ :name => 'arthur',
37
+ :pass => '42',
38
+ :profile => 'Arthur Dent, fearful human in outer space!'
39
+ }
40
+
41
+
42
+ class SpecUserHelperCallback < SpecUserHelper
43
+ map '/callback'
44
+ helper :user
45
+ trait :user_callback => lambda{|hash|
46
+ Arthur if hash.values_at('name', 'password') == Arthur.values_at(:name, :pass)
47
+ }
48
+
49
+ def profile
50
+ user[:profile]
51
+ end
52
+ end
53
+
54
+ describe Ramaze::Helper::User do
55
+ behaves_like :rack_test
56
+
57
+ should 'login' do
58
+ get('/status').body.should == 'no'
59
+ get('/login?name=arthur&password=42').body.should == 'logged in'
60
+ get('/status').body.should == 'yes'
61
+ get('/profile').body.should == MockSequelUser.new.profile
62
+ get('/logout').status.should == 200
63
+ end
64
+
65
+ should 'login via the callback' do
66
+ get('/callback/status').body.should == 'no'
67
+ get('/callback/login?name=arthur&password=42').body.should == 'logged in'
68
+ get('/callback/status').body.should == 'yes'
69
+ get('/callback/profile').body.should == MockSequelUser.new.profile
70
+ get('/logout').status.should == 200
71
+ end
72
+ end
@@ -0,0 +1 @@
1
+ #{say}, #{to}!
@@ -0,0 +1,4 @@
1
+ <?r (1..5).each do |n| ?>
2
+ <?r @n = n ?>
3
+ #{render_template 'num.xhtml'}
4
+ <?r end ?>
@@ -0,0 +1 @@
1
+ #{@n}
@@ -0,0 +1 @@
1
+ From Partial #@here
@@ -0,0 +1,8 @@
1
+ {
2
+ #@n
3
+ <?r if @n < 4 ?>
4
+ <?r @n += 1 ?>
5
+ #{render_template('recursive.xhtml')}
6
+ <?r end ?>
7
+ #@n
8
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ #{@n}
3
+ <?r if @n < 4 ?>
4
+ #{render_template('recursive_local_ivars.xhtml', :n => @n+1)}
5
+ <?r end ?>
6
+ #{@n}
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ #{n}
3
+ <?r if n < 4 ?>
4
+ #{render_template('recursive_locals.xhtml', :n => n+1)}
5
+ <?r end ?>
6
+ #{n}
7
+ }
@@ -0,0 +1 @@
1
+ I am a template.
@@ -0,0 +1,32 @@
1
+ require 'spec/helper'
2
+ require 'ramaze/helper/xhtml'
3
+
4
+ describe Ramaze::Helper::XHTML do
5
+ extend Ramaze::Helper::XHTML
6
+
7
+ should 'answer with <link> on #css' do
8
+ css(:foo).
9
+ should == '<link href="/css/foo.css" media="screen" rel="stylesheet" type="text/css" />'
10
+ css(:foo, 'mobile').
11
+ should == '<link href="/css/foo.css" media="mobile" rel="stylesheet" type="text/css" />'
12
+ css(:foo, 'screen', :only => :ie).
13
+ should == '<!--[if IE]><link href="/css/foo.css" media="screen" rel="stylesheet" type="text/css" /><![endif]-->'
14
+ end
15
+
16
+ should 'answer with <script> on #js' do
17
+ js(:foo).
18
+ should == '<script src="/js/foo.js" type="text/javascript"></script>'
19
+ js('http://example.com/foo.js').
20
+ should == '<script src="http://example.com/foo.js" type="text/javascript"></script>'
21
+ end
22
+
23
+ should 'answer with multiple <link> on #css_for' do
24
+ css_for(:foo, :bar).
25
+ should == "<link href=\"/css/foo.css\" media=\"screen\" rel=\"stylesheet\" type=\"text/css\" />\n<link href=\"/css/bar.css\" media=\"screen\" rel=\"stylesheet\" type=\"text/css\" />"
26
+ end
27
+
28
+ should 'ansewr with multiple <script> on #js_for' do
29
+ js_for(:foo, :bar).
30
+ should == "<script src=\"/js/foo.js\" type=\"text/javascript\"></script>\n<script src=\"/js/bar.js\" type=\"text/javascript\"></script>"
31
+ end
32
+ end
@@ -0,0 +1,73 @@
1
+ # Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
2
+ # All files in this distribution are subject to the terms of the Ruby license.
3
+
4
+ require 'spec/helper'
5
+ require 'ramaze/log/informer'
6
+
7
+ describe 'Informer' do
8
+ @out = []
9
+ def @out.puts(*args) push(*args) end
10
+ Ramaze::Logger::Informer.trait[:colorize] = false
11
+ @inform = Ramaze::Logger::Informer.new(@out)
12
+
13
+ def format(tag, string)
14
+ /\[\d{4}-\d\d-\d\d \d\d:\d\d:\d\d\] #{tag.to_s.upcase.ljust(5)} #{Regexp.escape(string)}/
15
+ end
16
+
17
+ should 'log #info' do
18
+ @inform.info('Some Info')
19
+ @out.last.should =~ format(:info, 'Some Info')
20
+ end
21
+
22
+ should 'log #debug' do
23
+ arr = [:some, :stuff]
24
+ @inform.debug(arr)
25
+ @out.last.should =~ format(:debug, arr.inspect)
26
+ end
27
+
28
+ should 'log #warn' do
29
+ @inform.warn('More things')
30
+ @out.last.should =~ format(:warn, 'More things')
31
+ end
32
+
33
+ should 'log #error' do
34
+ begin
35
+ raise('Stuff')
36
+ rescue => ex
37
+ end
38
+
39
+ @inform.error(ex)
40
+ @out.any?{|o| o =~ format(:error, ex.inspect) }.should.be.true
41
+ end
42
+
43
+ should 'choose stdout on init(stdout,:stdout,STDOUT)' do
44
+ a = Ramaze::Logger::Informer.new(STDOUT)
45
+ b = Ramaze::Logger::Informer.new(:stdout)
46
+ c = Ramaze::Logger::Informer.new('stdout')
47
+ [a,b,c].each { |x| x.out.should == $stdout}
48
+ end
49
+
50
+ should 'choose stderr on init(stderr,:stderr,STDERR)' do
51
+ a = Ramaze::Logger::Informer.new(STDERR)
52
+ b = Ramaze::Logger::Informer.new(:stderr)
53
+ c = Ramaze::Logger::Informer.new('stderr')
54
+ [a,b,c].each { |x| x.out.should == $stderr}
55
+ end
56
+
57
+ should 'use IO when supplied' do
58
+ i = Ramaze::Logger::Informer.new(s = StringIO.new)
59
+ i.out.should == s
60
+ end
61
+
62
+ should 'open file otherwise' do
63
+ begin
64
+ i = Ramaze::Logger::Informer.new('tmp.dummy')
65
+ out = i.out
66
+ out.should.be.instance_of(File)
67
+ out.path.should == 'tmp.dummy'
68
+ ensure
69
+ out.close
70
+ File.delete('tmp.dummy')
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,63 @@
1
+ require 'spec/helper'
2
+
3
+ class SpecLogger
4
+ include Ramaze::Logging
5
+
6
+ attr_reader :history
7
+
8
+ def initialize
9
+ @history = []
10
+ end
11
+
12
+ def log(*args)
13
+ @history << args
14
+ end
15
+ end
16
+
17
+ describe Ramaze::Logging do
18
+ @log = SpecLogger.new
19
+
20
+ should 'provide #info - which calls #to_s' do
21
+ @log.info('info')
22
+ @log.history.last.should == [:info, 'info']
23
+
24
+ @log.info(1, 2)
25
+ @log.history.last(2).should == [[:info, '1'], [:info, '2']]
26
+ end
27
+
28
+ should 'provide #debug - which calls #inspect' do
29
+ @log.debug(:debug)
30
+ @log.history.last.should == [:debug, ':debug']
31
+ end
32
+
33
+ should 'provide #<< as alias for #debug' do
34
+ @log << :<<
35
+ @log.history.last.should == [:debug, ':<<']
36
+ end
37
+
38
+ should 'provide #dev - which calls #inspect' do
39
+ @log.dev(:dev)
40
+ @log.history.last.should == [:dev, ':dev']
41
+ end
42
+
43
+ should 'provide #error - which formats exceptions' do
44
+ @log.error(1)
45
+ @log.history.last.should == [:error, '1']
46
+
47
+ error = StandardError.new('for spec')
48
+ error.set_backtrace(['line 1', 'line 2'])
49
+ @log.error(error)
50
+ @log.history.last(3).should == [
51
+ [:error, "#<StandardError: for spec>"],
52
+ [:error, "line 1"],
53
+ [:error, "line 2"] ]
54
+ end
55
+
56
+ should 'not do anything on #shutdown' do
57
+ @log.shutdown.should == nil
58
+ end
59
+
60
+ should 'answer to #debug? for WEBrick' do
61
+ @log.debug?.should == false
62
+ end
63
+ end
@@ -0,0 +1,73 @@
1
+ # Copyright (c) 2008 rob@rebeltechnologies.nl
2
+ # All files in this distribution are subject to the terms of the Ruby license.
3
+
4
+ require 'spec/helper'
5
+
6
+ require 'ramaze/log/syslog'
7
+
8
+ describe 'Syslog' do
9
+
10
+ # close the syslog, if it was open for some reason before we
11
+ # start a test.
12
+ before do
13
+ if ( Syslog.opened? )
14
+ ::Syslog.close
15
+ end
16
+ end
17
+
18
+ it 'should default initialize correctly' do
19
+ syslog = Ramaze::Logger::Syslog.new
20
+ ::Syslog.opened?.should == true
21
+ ::Syslog.ident.should == $0
22
+ ::Syslog.options.should == ( ::Syslog::LOG_PID | ::Syslog::LOG_CONS )
23
+ ::Syslog.facility.should == ::Syslog::LOG_USER
24
+ end
25
+
26
+ it 'should handle non default initialization' do
27
+ syslog = Ramaze::Logger::Syslog.new( 'ramaze_syslog_test',
28
+ ::Syslog::LOG_NDELAY | ::Syslog::LOG_NOWAIT,
29
+ ::Syslog::LOG_DAEMON )
30
+ ::Syslog.opened?.should == true
31
+ ::Syslog.ident.should == 'ramaze_syslog_test'
32
+ ::Syslog.options.should == ( ::Syslog::LOG_NDELAY | ::Syslog::LOG_NOWAIT )
33
+ ::Syslog.facility.should == ::Syslog::LOG_DAEMON
34
+ end
35
+
36
+ # We test the actual logging using a trick found in te test code of the
37
+ # syslog module. We create a pipe, fork a child, reroute the childs
38
+ # stderr to the pipe. Then we open the logging using LOG_PERROR, so all
39
+ # log messages are written to stderror. In the parent we read the messages
40
+ # from the pipe and compare them to what we expected.
41
+ def test_log_msg( type, priority, msg )
42
+ logpipe = IO::pipe
43
+ child = fork {
44
+ logpipe[0].close
45
+ STDERR.reopen(logpipe[1])
46
+ syslog = Ramaze::Logger::Syslog.new( 'ramaze_syslog_test',
47
+ ::Syslog::LOG_PID | ::Syslog::LOG_NDELAY | ::Syslog::LOG_PERROR,
48
+ ::Syslog::LOG_USER )
49
+ syslog.send priority, msg
50
+ Process.exit!( 0 )
51
+ }
52
+ logpipe[1].close
53
+ Process.waitpid(child)
54
+
55
+ logpipe[0].gets.should == "ramaze_syslog_test[#{child}]: #{msg}\n"
56
+ end
57
+
58
+ it 'should handle debug' do
59
+ test_log_msg :direct, :debug, "Hello Debug World"
60
+ end
61
+ it 'should handle dev' do
62
+ test_log_msg :direct, :dev, "Hello Dev World"
63
+ end
64
+ it 'should handle info' do
65
+ test_log_msg :direct, :info, 'Hello Info World!'
66
+ end
67
+ it 'should handle warn' do
68
+ test_log_msg :direct, :warn, 'Hello Warn World!'
69
+ end
70
+ it 'should handle error' do
71
+ test_log_msg :direct, :error, 'Hello Error World!'
72
+ end
73
+ end
@@ -0,0 +1,153 @@
1
+ # Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
2
+ # All files in this distribution are subject to the terms of the Ruby license.
3
+
4
+ require 'spec/helper'
5
+
6
+ class TCParamsController < Ramaze::Controller
7
+ map '/'
8
+
9
+ def index
10
+ "index"
11
+ end
12
+
13
+ def no_params
14
+ "no params"
15
+ end
16
+
17
+ def single_param param
18
+ "single param (#{param})"
19
+ end
20
+
21
+ def double_param param1, param2
22
+ "double param (#{param1}, #{param2})"
23
+ end
24
+
25
+ def all_params *params
26
+ "all params (#{params.join(', ')})"
27
+ end
28
+
29
+ def at_least_one param, *params
30
+ "at least one (#{param}, #{params.join(', ')})"
31
+ end
32
+
33
+ def one_default param = 'default'
34
+ "one_default (#{param})"
35
+ end
36
+
37
+ def cat1__cat11
38
+ 'cat1: cat11'
39
+ end
40
+
41
+ def cat1__cat11__cat111
42
+ 'cat1: cat11: cat111'
43
+ end
44
+ end
45
+
46
+ class TCParamsController2 < Ramaze::Controller
47
+ map '/jo'
48
+
49
+ def add(one, two = nil, three = nil)
50
+ "#{one}:#{two}:#{three}"
51
+ end
52
+
53
+ def keys
54
+ request.params.keys.inspect
55
+ end
56
+ end
57
+
58
+ class TCParamsController3 < Ramaze::Controller
59
+ map '/ma'
60
+
61
+ def index(*args)
62
+ request.params['foo'].to_s.dump
63
+ end
64
+ end
65
+
66
+ describe "Simple Parameters" do
67
+ behaves_like :rack_test
68
+
69
+ def handle(*url)
70
+ Ramaze::Mock.get(*url).body
71
+ end
72
+
73
+ it "Should respond to no parameters given" do
74
+ handle('/no_params').should == "no params"
75
+ end
76
+
77
+ it "Should respond to only / with the index" do
78
+ handle('/').should == "index"
79
+ end
80
+
81
+ it "call /bar though index doesn't take params" do
82
+ handle('/bar').should == 'No action found at: "/bar"'
83
+ end
84
+
85
+ it "action that takes a single param" do
86
+ handle('/single_param/foo').should == "single param (foo)"
87
+ end
88
+
89
+ it "action that takes two params" do
90
+ handle('/double_param/foo/bar').should == "double param (foo, bar)"
91
+ end
92
+
93
+ it "action that takes two params but we give only one" do
94
+ handle('/double_param/foo').should == 'No action found at: "/double_param/foo"'
95
+ end
96
+
97
+ it "action that takes all params" do
98
+ handle('/all_params/foo/bar/foobar').should == "all params (foo, bar, foobar)"
99
+ end
100
+
101
+ it "action that takes all params but needs at least one" do
102
+ handle('/at_least_one/foo/bar/foobar').should == "at least one (foo, bar, foobar)"
103
+ end
104
+
105
+ it "action that takes all params but needs at least one (not given here)" do
106
+ lambda{ handle('/at_least_one') }.should.raise(ArgumentError)
107
+ end
108
+
109
+ it "one default" do
110
+ handle('/one_default').should == "one_default (default)"
111
+ end
112
+
113
+ it "one default" do
114
+ handle('/one_default/my_default').should == "one_default (my_default)"
115
+ end
116
+
117
+ it "double underscore lookup" do
118
+ handle('/cat1/cat11').should == 'cat1: cat11'
119
+ end
120
+
121
+ it "double double underscore lookup" do
122
+ handle('/cat1/cat11/cat111').should == 'cat1: cat11: cat111'
123
+ end
124
+
125
+
126
+ it "jo/add should raise with 0 parameters" do
127
+ lambda{ handle('/jo/add') }.
128
+ should.raise(ArgumentError)
129
+ end
130
+
131
+ it "add should raise with 4 parameters" do
132
+ lambda{ handle('/jo/add/1/2/3/4') }.
133
+ should.raise(ArgumentError)
134
+ end
135
+
136
+ it "add should not raise with 1-3 parameters" do
137
+ handle('/jo/add/1').should == '1::'
138
+ handle('/jo/add/1/2').should == '1:2:'
139
+ handle('/jo/add/1/2/3').should == '1:2:3'
140
+ end
141
+
142
+ it 'params should have no content without params' do
143
+ handle('/ma').should == '""'
144
+ end
145
+
146
+ it 'should have a parameter via QUERY_PARAMS' do
147
+ handle('/ma?foo=bar').should == '"bar"'
148
+ end
149
+
150
+ it 'should handle valueless params' do
151
+ handle('/jo/keys?foo').should == '["foo"]'
152
+ end
153
+ end