ramaze 0.3.9.1 → 2023.01.06

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 (781) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +3 -0
  3. data/README.md +125 -0
  4. data/Rakefile +13 -186
  5. data/bin/ramaze +4 -149
  6. data/examples/app/auth/layout/auth.xhtml +25 -0
  7. data/examples/app/auth/start.rb +25 -0
  8. data/examples/app/auth/view/index.xhtml +4 -0
  9. data/examples/app/auth/view/login.xhtml +20 -0
  10. data/examples/app/auth/view/secret.xhtml +1 -0
  11. data/examples/app/blog/app.rb +23 -0
  12. data/examples/app/blog/config.ru +19 -0
  13. data/examples/app/blog/controller/init.rb +30 -0
  14. data/examples/app/blog/controller/posts.rb +223 -0
  15. data/examples/app/blog/controller/users.rb +152 -0
  16. data/examples/app/blog/layout/default.xhtml +61 -0
  17. data/examples/app/blog/migrations/01_create_schema.rb +50 -0
  18. data/examples/app/blog/model/comment.rb +42 -0
  19. data/examples/app/blog/model/init.rb +44 -0
  20. data/examples/app/blog/model/post.rb +33 -0
  21. data/examples/app/blog/model/user.rb +100 -0
  22. data/examples/app/blog/public/css/grid.css +107 -0
  23. data/examples/app/blog/public/css/layout.css +203 -0
  24. data/examples/app/blog/public/css/reset.css +123 -0
  25. data/examples/app/blog/public/css/text.css +109 -0
  26. data/examples/app/blog/public/dispatch.fcgi +11 -0
  27. data/examples/app/blog/public/favicon.ico +0 -0
  28. data/examples/app/blog/public/images/bg.png +0 -0
  29. data/examples/app/blog/start.rb +20 -0
  30. data/examples/app/blog/view/feed.xhtml +23 -0
  31. data/examples/app/blog/view/form.xhtml +11 -0
  32. data/examples/app/blog/view/index.xhtml +44 -0
  33. data/examples/app/blog/view/users/form.xhtml +12 -0
  34. data/examples/app/blog/view/users/index.xhtml +30 -0
  35. data/examples/app/blog/view/users/login.xhtml +8 -0
  36. data/examples/app/blog/view/view.xhtml +68 -0
  37. data/examples/app/chat/layout/default.xhtml +13 -0
  38. data/examples/app/chat/model/history.rb +38 -0
  39. data/examples/app/chat/model/message.rb +7 -0
  40. data/examples/app/chat/public/css/chat.css +9 -0
  41. data/examples/app/chat/public/js/chat.js +28 -0
  42. data/{lib/proto → examples/app/chat}/public/js/jquery.js +75 -15
  43. data/examples/app/chat/start.rb +39 -0
  44. data/examples/app/chat/view/chat.xhtml +9 -0
  45. data/examples/app/chat/view/index.xhtml +7 -0
  46. data/examples/app/localization/locale/de.yaml +5 -0
  47. data/examples/app/localization/locale/en.yaml +5 -0
  48. data/examples/app/localization/locale/ja.yaml +5 -0
  49. data/examples/app/localization/start.rb +48 -0
  50. data/examples/app/todolist/controller/init.rb +11 -0
  51. data/examples/app/todolist/controller/task.rb +39 -0
  52. data/examples/app/todolist/layout/default.xhtml +14 -0
  53. data/examples/app/todolist/model/init.rb +14 -0
  54. data/examples/app/todolist/model/task.rb +39 -0
  55. data/examples/app/todolist/public/css/screen.css +63 -0
  56. data/examples/app/todolist/start.rb +7 -0
  57. data/examples/app/todolist/view/index.xhtml +29 -0
  58. data/examples/{upload → app/upload}/start.rb +7 -3
  59. data/examples/app/whywiki/spec/whywiki.rb +56 -0
  60. data/examples/{whywiki → app/whywiki}/start.rb +10 -9
  61. data/examples/{whywiki/template → app/whywiki/view}/edit.xhtml +2 -2
  62. data/examples/app/whywiki/view/show.xhtml +20 -0
  63. data/examples/{wikore → app/wikore}/spec/wikore.rb +7 -9
  64. data/examples/{wikore → app/wikore}/src/controller.rb +9 -11
  65. data/examples/{wikore → app/wikore}/src/model.rb +11 -13
  66. data/examples/app/wikore/start.rb +9 -0
  67. data/examples/{wiktacular/template/html_layout.xhtml → app/wiktacular/layout/application.xhtml} +1 -1
  68. data/examples/{wiktacular → app/wiktacular}/mkd/main/2007-07-20_19-21-12.mkd +1 -1
  69. data/examples/app/wiktacular/mkd/main/2007-07-20_19-23-10.mkd +2 -0
  70. data/examples/app/wiktacular/mkd/main/2007-07-20_19-45-07.mkd +2 -0
  71. data/examples/app/wiktacular/mkd/main/current.mkd +2 -0
  72. data/examples/{wiktacular → app/wiktacular}/mkd/markdown/current.mkd +2 -2
  73. data/examples/app/wiktacular/mkd/testing/2007-07-20_16-43-46.mkd +2 -0
  74. data/examples/{wiktacular → app/wiktacular}/mkd/testing/2007-07-20_19-43-50.mkd +2 -2
  75. data/examples/{wiktacular → app/wiktacular}/mkd/testing/2007-07-21_18-46-01.mkd +11 -11
  76. data/examples/{wiktacular → app/wiktacular}/mkd/testing/2007-07-21_18-46-32.mkd +12 -12
  77. data/examples/{wiktacular → app/wiktacular}/mkd/testing/2007-07-21_18-47-08.mkd +16 -16
  78. data/examples/{wiktacular → app/wiktacular}/mkd/testing/2007-07-21_18-47-54.mkd +16 -16
  79. data/examples/{wiktacular → app/wiktacular}/mkd/testing/current.mkd +16 -16
  80. data/examples/{wiktacular → app/wiktacular}/spec/wiktacular.rb +39 -40
  81. data/examples/{wiktacular → app/wiktacular}/src/controller.rb +18 -18
  82. data/examples/{wiktacular → app/wiktacular}/src/model.rb +30 -14
  83. data/examples/{wiktacular → app/wiktacular}/start.rb +1 -1
  84. data/examples/{wiktacular/template → app/wiktacular/view}/edit.xhtml +2 -2
  85. data/examples/{wiktacular/template → app/wiktacular/view}/new.xhtml +1 -1
  86. data/examples/{element.rb → basic/element.rb} +5 -3
  87. data/examples/basic/gestalt.rb +26 -0
  88. data/examples/basic/hello.rb +14 -0
  89. data/examples/{layout.rb → basic/layout.rb} +2 -2
  90. data/examples/basic/linking.rb +29 -0
  91. data/examples/basic/partial.rb +26 -0
  92. data/examples/{simple.rb → basic/simple.rb} +9 -12
  93. data/examples/{caching.rb → helpers/cache.rb} +9 -7
  94. data/examples/helpers/paginate.rb +71 -0
  95. data/examples/helpers/rest.rb +28 -0
  96. data/examples/helpers/simple_captcha.rb +29 -0
  97. data/examples/{css.rb → misc/css.rb} +6 -12
  98. data/examples/misc/memleak_detector.rb +37 -0
  99. data/examples/misc/nagoro_element.rb +43 -0
  100. data/examples/{ramaise.rb → misc/ramaise.rb} +2 -2
  101. data/examples/misc/rapp.rb +56 -0
  102. data/examples/misc/sequel_scaffolding.rb +45 -0
  103. data/examples/misc/serve_directory.rb +6 -0
  104. data/examples/templates/template_erubis.rb +9 -10
  105. data/examples/templates/template_ezamar.rb +8 -7
  106. data/examples/templates/template_haml.rb +7 -8
  107. data/examples/templates/template_liquid.rb +20 -19
  108. data/examples/templates/template_markaby.rb +6 -7
  109. data/examples/templates/template_mustache.rb +70 -0
  110. data/examples/templates/template_nagoro.rb +6 -7
  111. data/examples/templates/template_redcloth.rb +8 -9
  112. data/examples/templates/template_remarkably.rb +8 -9
  113. data/examples/templates/template_tenjin.rb +10 -15
  114. data/examples/templates/{template → view}/external.haml +4 -4
  115. data/examples/templates/{template → view}/external.mab +4 -4
  116. data/examples/templates/view/external.mt +29 -0
  117. data/examples/templates/{template → view}/external.nag +4 -4
  118. data/examples/templates/{template → view}/external.redcloth +4 -4
  119. data/examples/templates/{template → view}/external.rem +4 -4
  120. data/examples/templates/{template → view}/external.rhtml +6 -6
  121. data/examples/templates/{template → view}/external.tenjin +4 -4
  122. data/examples/templates/{template → view}/external.zmr +6 -6
  123. data/guide/AUTHORS +80 -0
  124. data/guide/CHANGELOG +20210 -0
  125. data/guide/LICENSE +19 -0
  126. data/guide/_static/logo.png +0 -0
  127. data/guide/_static/logo.svg +49 -0
  128. data/guide/css/common.css +20 -0
  129. data/guide/general/cache.md +168 -0
  130. data/guide/general/configuration.md +169 -0
  131. data/guide/general/contributing.md +182 -0
  132. data/guide/general/controllers.md +210 -0
  133. data/guide/general/helpers.md +89 -0
  134. data/guide/general/installation.md +59 -0
  135. data/guide/general/logging.md +96 -0
  136. data/guide/general/middlewares.md +111 -0
  137. data/guide/general/models.md +79 -0
  138. data/{doc/readme_chunks/principles.txt → guide/general/principles.md} +15 -17
  139. data/guide/general/ramaze_command.md +110 -0
  140. data/guide/general/routes.md +82 -0
  141. data/guide/general/sessions.md +210 -0
  142. data/guide/general/special_thanks.md +69 -0
  143. data/guide/general/testing.md +228 -0
  144. data/guide/general/upgrading.md +85 -0
  145. data/guide/general/views.md +335 -0
  146. data/lib/proto/Gemfile +4 -0
  147. data/lib/proto/README.md +35 -0
  148. data/lib/proto/Rakefile +1 -0
  149. data/lib/proto/app.rb +9 -0
  150. data/lib/proto/config.ru +19 -0
  151. data/lib/proto/controller/init.rb +18 -0
  152. data/lib/proto/controller/main.rb +13 -10
  153. data/lib/proto/layout/default.xhtml +57 -0
  154. data/lib/proto/public/css/grid.css +107 -0
  155. data/lib/proto/public/css/layout.css +81 -0
  156. data/lib/proto/public/css/reset.css +123 -0
  157. data/lib/proto/public/css/text.css +109 -0
  158. data/lib/proto/public/favicon.ico +0 -0
  159. data/lib/proto/public/images/bg.png +0 -0
  160. data/lib/proto/spec/helper.rb +39 -0
  161. data/lib/proto/task/ramaze.rake +57 -0
  162. data/lib/proto/view/index.xhtml +36 -25
  163. data/lib/ramaze/app.rb +198 -0
  164. data/lib/ramaze/bin/create.rb +92 -0
  165. data/lib/ramaze/bin/runner.rb +127 -0
  166. data/lib/ramaze/cache/lru.rb +88 -0
  167. data/lib/ramaze/cache/memcache.rb +219 -0
  168. data/lib/ramaze/cache/moneta.rb +143 -0
  169. data/lib/ramaze/cache/redis.rb +163 -0
  170. data/lib/ramaze/cache/sequel.rb +373 -0
  171. data/lib/ramaze/cache.rb +42 -82
  172. data/lib/ramaze/controller/default.rb +25 -0
  173. data/lib/ramaze/controller.rb +184 -224
  174. data/lib/ramaze/current.rb +17 -68
  175. data/lib/ramaze/default_middleware.rb +24 -0
  176. data/lib/ramaze/files.rb +59 -0
  177. data/lib/ramaze/gestalt.rb +95 -63
  178. data/lib/ramaze/helper/auth.rb +107 -107
  179. data/lib/ramaze/helper/bench.rb +51 -0
  180. data/lib/ramaze/helper/blue_form.rb +683 -0
  181. data/lib/ramaze/helper/cache.rb +108 -130
  182. data/lib/ramaze/helper/csrf.rb +191 -0
  183. data/lib/ramaze/helper/email.rb +116 -0
  184. data/lib/ramaze/helper/erector.rb +113 -0
  185. data/lib/ramaze/helper/flash.rb +42 -39
  186. data/lib/ramaze/helper/formatting.rb +200 -35
  187. data/lib/ramaze/helper/gestalt.rb +49 -0
  188. data/lib/ramaze/helper/gravatar.rb +75 -0
  189. data/lib/ramaze/helper/identity.rb +93 -68
  190. data/lib/ramaze/helper/layout.rb +128 -0
  191. data/lib/ramaze/helper/link.rb +52 -119
  192. data/lib/ramaze/helper/localize.rb +143 -0
  193. data/lib/ramaze/helper/markaby.rb +26 -24
  194. data/lib/ramaze/helper/maruku.rb +15 -6
  195. data/lib/ramaze/helper/paginate.rb +315 -0
  196. data/lib/ramaze/helper/remarkably.rb +14 -0
  197. data/lib/ramaze/helper/request_accessor.rb +20 -0
  198. data/lib/ramaze/helper/send_file.rb +34 -0
  199. data/lib/ramaze/helper/simple_captcha.rb +61 -0
  200. data/lib/ramaze/helper/stack.rb +72 -62
  201. data/lib/ramaze/helper/tagz.rb +13 -12
  202. data/lib/ramaze/helper/thread.rb +25 -0
  203. data/lib/ramaze/helper/upload.rb +525 -0
  204. data/lib/ramaze/helper/user.rb +260 -39
  205. data/lib/ramaze/helper/xhtml.rb +122 -0
  206. data/lib/ramaze/helper.rb +8 -79
  207. data/lib/ramaze/log/hub.rb +41 -32
  208. data/lib/ramaze/log/informer.rb +128 -104
  209. data/lib/ramaze/log/logger.rb +25 -15
  210. data/lib/ramaze/log/logging.rb +46 -27
  211. data/lib/ramaze/log/rotatinginformer.rb +237 -0
  212. data/lib/ramaze/log/syslog.rb +57 -31
  213. data/lib/ramaze/log.rb +16 -15
  214. data/lib/ramaze/reloader/watch_inotify.rb +84 -0
  215. data/lib/ramaze/reloader/watch_stat.rb +58 -0
  216. data/lib/ramaze/reloader.rb +212 -0
  217. data/lib/ramaze/request.rb +126 -0
  218. data/lib/ramaze/response.rb +67 -0
  219. data/lib/ramaze/snippets/object/__dir__.rb +25 -0
  220. data/lib/ramaze/snippets/ramaze/deprecated.rb +23 -0
  221. data/lib/ramaze/snippets/string/camel_case.rb +17 -14
  222. data/lib/ramaze/snippets/string/color.rb +27 -24
  223. data/lib/ramaze/snippets/string/esc.rb +25 -25
  224. data/lib/ramaze/snippets/string/snake_case.rb +16 -13
  225. data/lib/ramaze/snippets/string/unindent.rb +24 -11
  226. data/lib/ramaze/snippets.rb +21 -6
  227. data/lib/ramaze/spec/bacon.rb +44 -0
  228. data/lib/ramaze/spec/helper/bacon.rb +4 -4
  229. data/lib/ramaze/spec/helper/pretty_output.rb +9 -1
  230. data/lib/ramaze/spec/helper/snippets.rb +11 -1
  231. data/lib/ramaze/spec/helper/template_examples.rb +22 -0
  232. data/lib/ramaze/version.rb +4 -13
  233. data/lib/ramaze/view/erector.rb +116 -0
  234. data/lib/ramaze/view/erubis.rb +26 -0
  235. data/lib/ramaze/view/ezamar.rb +27 -0
  236. data/lib/ramaze/view/gestalt.rb +20 -0
  237. data/lib/ramaze/view/haml.rb +27 -0
  238. data/lib/ramaze/view/liquid.rb +99 -0
  239. data/lib/ramaze/view/lokar.rb +18 -0
  240. data/lib/ramaze/view/mustache.rb +46 -0
  241. data/lib/ramaze/view/nagoro/render_partial.rb +32 -0
  242. data/lib/ramaze/view/nagoro.rb +44 -0
  243. data/lib/ramaze/view/remarkably.rb +22 -0
  244. data/lib/ramaze/view/sass.rb +22 -0
  245. data/lib/ramaze/view/slim.rb +43 -0
  246. data/lib/ramaze/view/slippers.rb +51 -0
  247. data/lib/ramaze/view/tagz.rb +67 -0
  248. data/lib/ramaze/view/tenjin.rb +32 -0
  249. data/lib/ramaze/view.rb +35 -0
  250. data/lib/ramaze.rb +60 -100
  251. data/lib/vendor/route_exceptions.rb +42 -0
  252. data/ramaze.gemspec +61 -0
  253. data/spec/examples/caching.rb +5 -8
  254. data/spec/examples/css.rb +3 -4
  255. data/spec/examples/element.rb +4 -4
  256. data/spec/examples/hello.rb +4 -5
  257. data/spec/examples/linking.rb +3 -4
  258. data/spec/examples/misc/sequel_scaffolding.rb +18 -0
  259. data/spec/examples/simple.rb +3 -8
  260. data/spec/examples/templates/template_erubis.rb +8 -18
  261. data/spec/examples/templates/template_ezamar.rb +9 -19
  262. data/spec/examples/templates/template_haml.rb +8 -20
  263. data/spec/examples/templates/template_liquid.rb +8 -24
  264. data/spec/examples/templates/template_markaby.rb +10 -19
  265. data/spec/examples/templates/template_mustache.rb +13 -0
  266. data/spec/examples/templates/template_nagoro.rb +13 -0
  267. data/spec/examples/templates/template_remarkably.rb +8 -18
  268. data/spec/examples/templates/template_tenjin.rb +8 -23
  269. data/spec/examples/todolist.rb +33 -0
  270. data/spec/helper.rb +14 -3
  271. data/spec/ramaze/action/render.rb +9 -17
  272. data/spec/ramaze/action/view/other_wrapper.erb +1 -0
  273. data/spec/ramaze/action/view/sub/sub_wrapper.xhtml +1 -0
  274. data/spec/ramaze/app/location.rb +43 -0
  275. data/spec/ramaze/app.rb +50 -0
  276. data/spec/ramaze/bin/app/config.ru +11 -0
  277. data/spec/ramaze/bin/create.rb +28 -0
  278. data/spec/ramaze/bin/runner.rb +30 -0
  279. data/spec/ramaze/cache/lru.rb +48 -0
  280. data/spec/ramaze/cache/memcache.rb +69 -0
  281. data/spec/ramaze/cache/moneta.rb +53 -0
  282. data/spec/ramaze/cache/redis.rb +58 -0
  283. data/spec/ramaze/cache/sequel.rb +60 -0
  284. data/spec/ramaze/controller/actionless_templates.rb +16 -12
  285. data/spec/ramaze/controller/lonely_mapping.rb +18 -0
  286. data/spec/ramaze/controller/mapping.rb +63 -0
  287. data/spec/ramaze/controller/provide_inheritance.rb +40 -0
  288. data/spec/ramaze/controller/resolve.rb +9 -11
  289. data/spec/ramaze/controller/subclass.rb +22 -7
  290. data/spec/ramaze/controller/template_resolving.rb +23 -61
  291. data/spec/ramaze/controller/view/bar.xhtml +1 -0
  292. data/spec/ramaze/controller/view/base/another.xhtml +1 -0
  293. data/spec/ramaze/dispatcher/directory.rb +61 -33
  294. data/spec/ramaze/dispatcher/file.rb +65 -47
  295. data/spec/ramaze/error.rb +54 -64
  296. data/spec/ramaze/files/public_1/plain.txt +1 -0
  297. data/spec/ramaze/files/public_2/rich.txt +1 -0
  298. data/spec/ramaze/files.rb +30 -0
  299. data/spec/ramaze/gestalt.rb +28 -21
  300. data/spec/ramaze/helper/auth.rb +47 -29
  301. data/spec/ramaze/helper/bench.rb +21 -0
  302. data/spec/ramaze/helper/blue_form.rb +807 -0
  303. data/spec/ramaze/helper/cache.rb +65 -84
  304. data/spec/ramaze/helper/csrf.rb +64 -0
  305. data/spec/ramaze/helper/email.rb +69 -0
  306. data/spec/ramaze/helper/flash.rb +22 -101
  307. data/spec/ramaze/helper/formatting.rb +100 -6
  308. data/spec/ramaze/helper/gestalt.rb +18 -0
  309. data/spec/ramaze/helper/gravatar.rb +43 -0
  310. data/spec/ramaze/helper/layout/alternative.xhtml +5 -0
  311. data/spec/ramaze/helper/layout/default.xhtml +5 -0
  312. data/spec/ramaze/helper/layout.rb +109 -0
  313. data/spec/ramaze/helper/link.rb +48 -102
  314. data/spec/ramaze/helper/localize.rb +65 -0
  315. data/spec/ramaze/helper/maruku.rb +22 -0
  316. data/spec/ramaze/helper/paginate.rb +304 -0
  317. data/spec/ramaze/helper/request_accessor.rb +22 -0
  318. data/spec/ramaze/helper/simple_captcha.rb +45 -0
  319. data/spec/ramaze/helper/stack.rb +54 -41
  320. data/spec/ramaze/helper/upload.rb +150 -0
  321. data/spec/ramaze/helper/uploads/text_1.txt +1 -0
  322. data/spec/ramaze/helper/uploads/text_2.txt +1 -0
  323. data/spec/ramaze/helper/user.rb +63 -20
  324. data/spec/ramaze/helper/xhtml.rb +54 -0
  325. data/spec/ramaze/log/informer.rb +30 -28
  326. data/spec/ramaze/log/logging.rb +66 -0
  327. data/spec/ramaze/log/syslog.rb +89 -4
  328. data/spec/ramaze/params.rb +12 -16
  329. data/spec/ramaze/request.rb +51 -160
  330. data/spec/ramaze/rewrite/file.css +1 -0
  331. data/spec/ramaze/session/lru.rb +58 -0
  332. data/spec/ramaze/session/memcache.rb +66 -0
  333. data/spec/ramaze/session/redis.rb +63 -0
  334. data/spec/ramaze/session/sequel.rb +62 -0
  335. data/spec/ramaze/view/erector/external_view.erector +5 -0
  336. data/spec/ramaze/view/erector/index.erector +5 -0
  337. data/spec/ramaze/view/erector/layout.erector +13 -0
  338. data/spec/ramaze/view/erector/tables.erector +23 -0
  339. data/spec/ramaze/view/erector/view.erector +6 -0
  340. data/spec/ramaze/view/erector.rb +68 -0
  341. data/spec/ramaze/view/erubis/external.rhtml +8 -0
  342. data/spec/ramaze/view/erubis/sum.rhtml +1 -0
  343. data/spec/ramaze/view/erubis.rb +73 -0
  344. data/spec/ramaze/view/ezamar/external.zmr +8 -0
  345. data/spec/ramaze/view/ezamar/sum.zmr +1 -0
  346. data/spec/ramaze/view/ezamar.rb +73 -0
  347. data/spec/ramaze/view/gestalt/external.ges +8 -0
  348. data/spec/ramaze/view/gestalt.rb +94 -0
  349. data/spec/ramaze/view/haml/external.haml +5 -0
  350. data/spec/ramaze/view/haml/sum.haml +2 -0
  351. data/spec/ramaze/view/haml.rb +114 -0
  352. data/spec/ramaze/view/liquid/external.liquid +8 -0
  353. data/spec/ramaze/view/liquid/sum.liquid +1 -0
  354. data/spec/ramaze/view/liquid.rb +73 -0
  355. data/spec/ramaze/view/lokar/external.lok +8 -0
  356. data/spec/ramaze/view/lokar/sum.lok +1 -0
  357. data/spec/ramaze/view/lokar.rb +78 -0
  358. data/spec/ramaze/view/mustache/external.mt +8 -0
  359. data/spec/ramaze/view/mustache/sum.mt +1 -0
  360. data/spec/ramaze/view/mustache.rb +77 -0
  361. data/spec/ramaze/view/nagoro/external.nag +8 -0
  362. data/spec/ramaze/view/nagoro/sum.nag +1 -0
  363. data/spec/ramaze/view/nagoro.rb +78 -0
  364. data/spec/ramaze/view/remarkably.rb +49 -0
  365. data/spec/ramaze/view/sass.rb +73 -0
  366. data/spec/ramaze/view/slim/external.slim +5 -0
  367. data/spec/ramaze/view/slim/external_vars.slim +5 -0
  368. data/spec/ramaze/view/slim.rb +49 -0
  369. data/spec/ramaze/view/slippers/external.st +8 -0
  370. data/spec/ramaze/view/slippers/sum.st +1 -0
  371. data/spec/ramaze/view/slippers.rb +49 -0
  372. data/spec/ramaze/{template → view}/tagz.rb +20 -31
  373. data/spec/ramaze/view/tenjin/external.rbhtml +8 -0
  374. data/spec/ramaze/view/tenjin/sum.rbhtml +1 -0
  375. data/spec/ramaze/view/tenjin.rb +57 -0
  376. data/spec/ramaze/view.rb +36 -0
  377. data/spec/snippets/object/__dir__.rb +17 -0
  378. data/spec/snippets/ramaze/lru_hash.rb +88 -0
  379. data/spec/snippets/string/camel_case.rb +4 -1
  380. data/spec/snippets/string/color.rb +4 -1
  381. data/spec/snippets/string/snake_case.rb +4 -1
  382. data/spec/snippets/string/unindent.rb +10 -1
  383. data/tasks/authors.rake +17 -0
  384. data/tasks/bacon.rake +81 -0
  385. data/tasks/changelog.rake +20 -0
  386. data/tasks/gems.rake +15 -0
  387. data/tasks/release.rake +38 -0
  388. data/tasks/todo.rake +31 -0
  389. data/tasks/yard.rake +13 -0
  390. metadata +813 -714
  391. data/doc/AUTHORS +0 -25
  392. data/doc/CHANGELOG +0 -5757
  393. data/doc/COPYING +0 -56
  394. data/doc/FAQ +0 -92
  395. data/doc/GPL +0 -339
  396. data/doc/INSTALL +0 -34
  397. data/doc/LEGAL +0 -26
  398. data/doc/ProjectInfo +0 -53
  399. data/doc/README +0 -435
  400. data/doc/TODO +0 -29
  401. data/doc/meta/announcement.txt +0 -126
  402. data/doc/meta/configuration.txt +0 -162
  403. data/doc/meta/internals.txt +0 -278
  404. data/doc/meta/users.kml +0 -64
  405. data/doc/migrate/1110_to_1111.txt +0 -131
  406. data/doc/readme_chunks/appendix.txt +0 -10
  407. data/doc/readme_chunks/examples.txt +0 -38
  408. data/doc/readme_chunks/features.txt +0 -148
  409. data/doc/readme_chunks/getting_help.txt +0 -5
  410. data/doc/readme_chunks/getting_started.txt +0 -18
  411. data/doc/readme_chunks/installing.txt +0 -46
  412. data/doc/readme_chunks/introduction.txt +0 -18
  413. data/doc/readme_chunks/thanks.txt +0 -59
  414. data/doc/tutorial/todolist.html +0 -816
  415. data/doc/tutorial/todolist.mkd +0 -736
  416. data/examples/auth/auth.rb +0 -54
  417. data/examples/auth/template/layout.haml +0 -20
  418. data/examples/auth/template/login.haml +0 -16
  419. data/examples/blog/README +0 -3
  420. data/examples/blog/controller/main.rb +0 -29
  421. data/examples/blog/model/entry.rb +0 -30
  422. data/examples/blog/public/styles/blog.css +0 -132
  423. data/examples/blog/spec/blog.rb +0 -87
  424. data/examples/blog/start.rb +0 -7
  425. data/examples/blog/view/edit.xhtml +0 -17
  426. data/examples/blog/view/index.xhtml +0 -17
  427. data/examples/blog/view/layout.xhtml +0 -11
  428. data/examples/blog/view/new.xhtml +0 -16
  429. data/examples/hello.rb +0 -15
  430. data/examples/linking.rb +0 -29
  431. data/examples/memleak_detector.rb +0 -32
  432. data/examples/nitro_form.rb +0 -23
  433. data/examples/rammit/spec/rammit.rb +0 -30
  434. data/examples/rammit/src/controller/main.rb +0 -3
  435. data/examples/rammit/src/controller/page.rb +0 -16
  436. data/examples/rammit/src/model.rb +0 -33
  437. data/examples/rammit/start.rb +0 -8
  438. data/examples/rammit/template/index.xhtml +0 -14
  439. data/examples/rammit/template/page/view.xhtml +0 -4
  440. data/examples/rapaste/Rakefile +0 -35
  441. data/examples/rapaste/controller/paste.rb +0 -94
  442. data/examples/rapaste/model/paste.rb +0 -55
  443. data/examples/rapaste/public/css/active4d.css +0 -114
  444. data/examples/rapaste/public/css/all_hallows_eve.css +0 -72
  445. data/examples/rapaste/public/css/amy.css +0 -147
  446. data/examples/rapaste/public/css/blackboard.css +0 -88
  447. data/examples/rapaste/public/css/brilliance_black.css +0 -605
  448. data/examples/rapaste/public/css/brilliance_dull.css +0 -599
  449. data/examples/rapaste/public/css/cobalt.css +0 -149
  450. data/examples/rapaste/public/css/dawn.css +0 -121
  451. data/examples/rapaste/public/css/display.css +0 -197
  452. data/examples/rapaste/public/css/eiffel.css +0 -121
  453. data/examples/rapaste/public/css/espresso_libre.css +0 -109
  454. data/examples/rapaste/public/css/idle.css +0 -62
  455. data/examples/rapaste/public/css/iplastic.css +0 -80
  456. data/examples/rapaste/public/css/lazy.css +0 -73
  457. data/examples/rapaste/public/css/mac_classic.css +0 -123
  458. data/examples/rapaste/public/css/magicwb_amiga.css +0 -104
  459. data/examples/rapaste/public/css/pastels_on_dark.css +0 -188
  460. data/examples/rapaste/public/css/slush_poppies.css +0 -85
  461. data/examples/rapaste/public/css/spacecadet.css +0 -51
  462. data/examples/rapaste/public/css/sunburst.css +0 -180
  463. data/examples/rapaste/public/css/twilight.css +0 -137
  464. data/examples/rapaste/public/css/zenburnesque.css +0 -91
  465. data/examples/rapaste/public/js/jquery.js +0 -11
  466. data/examples/rapaste/spec/rapaste.rb +0 -49
  467. data/examples/rapaste/start.rb +0 -24
  468. data/examples/rapaste/view/copy.xhtml +0 -10
  469. data/examples/rapaste/view/index.xhtml +0 -9
  470. data/examples/rapaste/view/layout.xhtml +0 -25
  471. data/examples/rapaste/view/list.xhtml +0 -29
  472. data/examples/rapaste/view/search.xhtml +0 -41
  473. data/examples/rapaste/view/view.xhtml +0 -37
  474. data/examples/simple_auth.rb +0 -23
  475. data/examples/sourceview/public/coderay.css +0 -104
  476. data/examples/sourceview/public/images/file.gif +0 -0
  477. data/examples/sourceview/public/images/folder.gif +0 -0
  478. data/examples/sourceview/public/images/tv-collapsable-last.gif +0 -0
  479. data/examples/sourceview/public/images/tv-collapsable.gif +0 -0
  480. data/examples/sourceview/public/images/tv-expandable-last.gif +0 -0
  481. data/examples/sourceview/public/images/tv-expandable.gif +0 -0
  482. data/examples/sourceview/public/images/tv-item-last.gif +0 -0
  483. data/examples/sourceview/public/images/tv-item.gif +0 -0
  484. data/examples/sourceview/public/jquery.js +0 -11
  485. data/examples/sourceview/public/jquery.treeview.css +0 -48
  486. data/examples/sourceview/public/jquery.treeview.js +0 -223
  487. data/examples/sourceview/public/sourceview.js +0 -52
  488. data/examples/sourceview/sourceview.rb +0 -77
  489. data/examples/sourceview/template/index.haml +0 -59
  490. data/examples/templates/template/external.amrita +0 -19
  491. data/examples/templates/template/external.xsl +0 -57
  492. data/examples/templates/template_amrita2.rb +0 -74
  493. data/examples/templates/template_xslt.rb +0 -49
  494. data/examples/todolist/README +0 -1
  495. data/examples/todolist/public/js/jquery.js +0 -1923
  496. data/examples/todolist/public/ramaze.png +0 -0
  497. data/examples/todolist/spec/todolist.rb +0 -132
  498. data/examples/todolist/src/controller/main.rb +0 -70
  499. data/examples/todolist/src/element/page.rb +0 -31
  500. data/examples/todolist/src/model.rb +0 -14
  501. data/examples/todolist/start.rb +0 -11
  502. data/examples/todolist/template/index.xhtml +0 -17
  503. data/examples/todolist/template/new.xhtml +0 -7
  504. data/examples/whywiki/spec/whywiki.rb +0 -58
  505. data/examples/whywiki/template/show.xhtml +0 -18
  506. data/examples/wikore/start.rb +0 -9
  507. data/examples/wiktacular/mkd/main/2007-07-20_19-23-10.mkd +0 -2
  508. data/examples/wiktacular/mkd/main/2007-07-20_19-45-07.mkd +0 -2
  509. data/examples/wiktacular/mkd/main/current.mkd +0 -2
  510. data/examples/wiktacular/mkd/testing/2007-07-20_16-43-46.mkd +0 -2
  511. data/lib/proto/public/css/ramaze_error.css +0 -90
  512. data/lib/proto/public/dispatch.fcgi +0 -11
  513. data/lib/proto/public/ramaze.png +0 -0
  514. data/lib/proto/spec/main.rb +0 -24
  515. data/lib/proto/start.rb +0 -8
  516. data/lib/proto/start.ru +0 -8
  517. data/lib/proto/view/error.xhtml +0 -64
  518. data/lib/proto/view/page.xhtml +0 -15
  519. data/lib/ramaze/action/render.rb +0 -163
  520. data/lib/ramaze/action.rb +0 -136
  521. data/lib/ramaze/adapter/base.rb +0 -59
  522. data/lib/ramaze/adapter/cgi.rb +0 -24
  523. data/lib/ramaze/adapter/ebb.rb +0 -32
  524. data/lib/ramaze/adapter/evented_mongrel.rb +0 -7
  525. data/lib/ramaze/adapter/fcgi.rb +0 -24
  526. data/lib/ramaze/adapter/lsws.rb +0 -23
  527. data/lib/ramaze/adapter/mongrel.rb +0 -25
  528. data/lib/ramaze/adapter/scgi.rb +0 -22
  529. data/lib/ramaze/adapter/swiftiplied_mongrel.rb +0 -7
  530. data/lib/ramaze/adapter/thin.rb +0 -22
  531. data/lib/ramaze/adapter/webrick.rb +0 -52
  532. data/lib/ramaze/adapter.rb +0 -101
  533. data/lib/ramaze/cache/memcached.rb +0 -70
  534. data/lib/ramaze/cache/memory.rb +0 -6
  535. data/lib/ramaze/cache/yaml_store.rb +0 -68
  536. data/lib/ramaze/contrib/auto_params/get_args.rb +0 -57
  537. data/lib/ramaze/contrib/auto_params.rb +0 -135
  538. data/lib/ramaze/contrib/email.rb +0 -84
  539. data/lib/ramaze/contrib/facebook/facebook.rb +0 -171
  540. data/lib/ramaze/contrib/facebook.rb +0 -23
  541. data/lib/ramaze/contrib/file_cache.rb +0 -65
  542. data/lib/ramaze/contrib/gettext/mo.rb +0 -155
  543. data/lib/ramaze/contrib/gettext/parser.rb +0 -46
  544. data/lib/ramaze/contrib/gettext/po.rb +0 -109
  545. data/lib/ramaze/contrib/gettext.rb +0 -113
  546. data/lib/ramaze/contrib/gzip_filter.rb +0 -56
  547. data/lib/ramaze/contrib/profiling.rb +0 -36
  548. data/lib/ramaze/contrib/route.rb +0 -22
  549. data/lib/ramaze/contrib/sequel/fill.rb +0 -12
  550. data/lib/ramaze/contrib/sequel_cache.rb +0 -92
  551. data/lib/ramaze/contrib.rb +0 -82
  552. data/lib/ramaze/controller/error.rb +0 -46
  553. data/lib/ramaze/controller/main.rb +0 -2
  554. data/lib/ramaze/controller/resolve.rb +0 -234
  555. data/lib/ramaze/current/request.rb +0 -181
  556. data/lib/ramaze/current/response.rb +0 -19
  557. data/lib/ramaze/current/session/flash.rb +0 -67
  558. data/lib/ramaze/current/session/hash.rb +0 -65
  559. data/lib/ramaze/current/session.rb +0 -153
  560. data/lib/ramaze/dispatcher/action.rb +0 -40
  561. data/lib/ramaze/dispatcher/directory.rb +0 -116
  562. data/lib/ramaze/dispatcher/error.rb +0 -108
  563. data/lib/ramaze/dispatcher/file.rb +0 -87
  564. data/lib/ramaze/dispatcher.rb +0 -124
  565. data/lib/ramaze/error.rb +0 -24
  566. data/lib/ramaze/global/dsl.rb +0 -39
  567. data/lib/ramaze/global/globalstruct.rb +0 -147
  568. data/lib/ramaze/global.rb +0 -116
  569. data/lib/ramaze/helper/aspect.rb +0 -100
  570. data/lib/ramaze/helper/cgi.rb +0 -43
  571. data/lib/ramaze/helper/inform.rb +0 -40
  572. data/lib/ramaze/helper/nitroform.rb +0 -14
  573. data/lib/ramaze/helper/pager.rb +0 -366
  574. data/lib/ramaze/helper/partial.rb +0 -96
  575. data/lib/ramaze/helper/redirect.rb +0 -73
  576. data/lib/ramaze/helper/sendfile.rb +0 -18
  577. data/lib/ramaze/helper/sequel.rb +0 -52
  578. data/lib/ramaze/inform.rb +0 -4
  579. data/lib/ramaze/log/analogger.rb +0 -37
  580. data/lib/ramaze/log/growl.rb +0 -35
  581. data/lib/ramaze/log/knotify.rb +0 -25
  582. data/lib/ramaze/log/xosd.rb +0 -88
  583. data/lib/ramaze/route.rb +0 -84
  584. data/lib/ramaze/snippets/array/put_within.rb +0 -37
  585. data/lib/ramaze/snippets/binding/locals.rb +0 -13
  586. data/lib/ramaze/snippets/dictionary.rb +0 -504
  587. data/lib/ramaze/snippets/divide.rb +0 -20
  588. data/lib/ramaze/snippets/kernel/__dir__.rb +0 -23
  589. data/lib/ramaze/snippets/kernel/acquire.rb +0 -39
  590. data/lib/ramaze/snippets/kernel/aquire.rb +0 -1
  591. data/lib/ramaze/snippets/kernel/constant.rb +0 -26
  592. data/lib/ramaze/snippets/kernel/pretty_inspect.rb +0 -15
  593. data/lib/ramaze/snippets/metaid.rb +0 -17
  594. data/lib/ramaze/snippets/numeric/filesize_format.rb +0 -19
  595. data/lib/ramaze/snippets/object/pretty.rb +0 -6
  596. data/lib/ramaze/snippets/object/scope.rb +0 -11
  597. data/lib/ramaze/snippets/object/thread_accessor.rb +0 -5
  598. data/lib/ramaze/snippets/object/traits.rb +0 -76
  599. data/lib/ramaze/snippets/ordered_set.rb +0 -36
  600. data/lib/ramaze/snippets/proc/locals.rb +0 -11
  601. data/lib/ramaze/snippets/ramaze/caller_info.rb +0 -30
  602. data/lib/ramaze/snippets/ramaze/caller_lines.rb +0 -51
  603. data/lib/ramaze/snippets/ramaze/thread_accessor.rb +0 -44
  604. data/lib/ramaze/snippets/string/each.rb +0 -8
  605. data/lib/ramaze/snippets/string/ord.rb +0 -15
  606. data/lib/ramaze/snippets/string/start_with.rb +0 -7
  607. data/lib/ramaze/snippets/struct/fill.rb +0 -23
  608. data/lib/ramaze/snippets/struct/values_at.rb +0 -23
  609. data/lib/ramaze/snippets/symbol/to_proc.rb +0 -24
  610. data/lib/ramaze/snippets/thread/into.rb +0 -18
  611. data/lib/ramaze/sourcereload.rb +0 -169
  612. data/lib/ramaze/spec/helper/browser.rb +0 -88
  613. data/lib/ramaze/spec/helper/mock_http.rb +0 -69
  614. data/lib/ramaze/spec/helper/requester.rb +0 -49
  615. data/lib/ramaze/spec/helper/simple_http.rb +0 -434
  616. data/lib/ramaze/spec/helper.rb +0 -122
  617. data/lib/ramaze/spec.rb +0 -1
  618. data/lib/ramaze/store/default.rb +0 -109
  619. data/lib/ramaze/template/amrita2.rb +0 -44
  620. data/lib/ramaze/template/builder.rb +0 -28
  621. data/lib/ramaze/template/erubis.rb +0 -35
  622. data/lib/ramaze/template/ezamar/element.rb +0 -169
  623. data/lib/ramaze/template/ezamar/engine.rb +0 -76
  624. data/lib/ramaze/template/ezamar/morpher.rb +0 -135
  625. data/lib/ramaze/template/ezamar/render_partial.rb +0 -31
  626. data/lib/ramaze/template/ezamar.rb +0 -42
  627. data/lib/ramaze/template/haml.rb +0 -37
  628. data/lib/ramaze/template/liquid.rb +0 -36
  629. data/lib/ramaze/template/markaby.rb +0 -52
  630. data/lib/ramaze/template/nagoro.rb +0 -51
  631. data/lib/ramaze/template/none.rb +0 -14
  632. data/lib/ramaze/template/redcloth.rb +0 -24
  633. data/lib/ramaze/template/remarkably.rb +0 -38
  634. data/lib/ramaze/template/sass.rb +0 -37
  635. data/lib/ramaze/template/tagz.rb +0 -79
  636. data/lib/ramaze/template/tenjin.rb +0 -34
  637. data/lib/ramaze/template/xslt.rb +0 -96
  638. data/lib/ramaze/template.rb +0 -81
  639. data/lib/ramaze/tool/create.rb +0 -74
  640. data/lib/ramaze/tool/localize.rb +0 -162
  641. data/lib/ramaze/tool/mime.rb +0 -25
  642. data/lib/ramaze/tool/mime_types.yaml +0 -615
  643. data/lib/ramaze/tool/record.rb +0 -6
  644. data/lib/ramaze/tool.rb +0 -9
  645. data/lib/ramaze/trinity.rb +0 -13
  646. data/lib/vendor/bacon.rb +0 -323
  647. data/rake_tasks/conf.rake +0 -73
  648. data/rake_tasks/coverage.rake +0 -46
  649. data/rake_tasks/darcs.rake +0 -5
  650. data/rake_tasks/gem.rake +0 -43
  651. data/rake_tasks/maintenance.rake +0 -384
  652. data/rake_tasks/spec.rake +0 -62
  653. data/spec/contrib/auto_params.rb +0 -121
  654. data/spec/contrib/profiling.rb +0 -26
  655. data/spec/contrib/route.rb +0 -36
  656. data/spec/contrib/sequel/fill.rb +0 -47
  657. data/spec/examples/simple_auth.rb +0 -32
  658. data/spec/examples/templates/template_amrita2.rb +0 -16
  659. data/spec/examples/templates/template_redcloth.rb +0 -28
  660. data/spec/ramaze/action/basics.rb +0 -36
  661. data/spec/ramaze/action/cache.rb +0 -43
  662. data/spec/ramaze/action/layout.rb +0 -190
  663. data/spec/ramaze/adapter/mongrel.rb +0 -12
  664. data/spec/ramaze/adapter/record.rb +0 -31
  665. data/spec/ramaze/adapter/webrick.rb +0 -12
  666. data/spec/ramaze/adapter.rb +0 -22
  667. data/spec/ramaze/cache.rb +0 -73
  668. data/spec/ramaze/controller.rb +0 -177
  669. data/spec/ramaze/current/request.rb +0 -30
  670. data/spec/ramaze/current/session.rb +0 -97
  671. data/spec/ramaze/dispatcher.rb +0 -31
  672. data/spec/ramaze/element.rb +0 -107
  673. data/spec/ramaze/helper/aspect.rb +0 -92
  674. data/spec/ramaze/helper/cgi.rb +0 -43
  675. data/spec/ramaze/helper/file.rb +0 -18
  676. data/spec/ramaze/helper/pager.rb +0 -99
  677. data/spec/ramaze/helper/partial.rb +0 -76
  678. data/spec/ramaze/helper/redirect.rb +0 -112
  679. data/spec/ramaze/localize.rb +0 -67
  680. data/spec/ramaze/morpher.rb +0 -111
  681. data/spec/ramaze/public/error404.xhtml +0 -1
  682. data/spec/ramaze/request/mongrel.rb +0 -9
  683. data/spec/ramaze/request/thin.rb +0 -9
  684. data/spec/ramaze/request/webrick.rb +0 -5
  685. data/spec/ramaze/route.rb +0 -130
  686. data/spec/ramaze/session.rb +0 -94
  687. data/spec/ramaze/store/default.rb +0 -71
  688. data/spec/ramaze/template/amrita2/external.amrita +0 -6
  689. data/spec/ramaze/template/amrita2/sum.amrita +0 -1
  690. data/spec/ramaze/template/amrita2.rb +0 -50
  691. data/spec/ramaze/template/builder/external.rxml +0 -3
  692. data/spec/ramaze/template/builder.rb +0 -55
  693. data/spec/ramaze/template/erubis/sum.rhtml +0 -1
  694. data/spec/ramaze/template/erubis.rb +0 -41
  695. data/spec/ramaze/template/ezamar/another/long/action.zmr +0 -1
  696. data/spec/ramaze/template/ezamar/combined.zmr +0 -1
  697. data/spec/ramaze/template/ezamar/file_only.zmr +0 -1
  698. data/spec/ramaze/template/ezamar/index.zmr +0 -1
  699. data/spec/ramaze/template/ezamar/nested.zmr +0 -1
  700. data/spec/ramaze/template/ezamar/other__index.xhtml +0 -1
  701. data/spec/ramaze/template/ezamar/some__long__action.zmr +0 -1
  702. data/spec/ramaze/template/ezamar/sum.zmr +0 -1
  703. data/spec/ramaze/template/ezamar.rb +0 -63
  704. data/spec/ramaze/template/haml/index.haml +0 -5
  705. data/spec/ramaze/template/haml/locals.haml +0 -2
  706. data/spec/ramaze/template/haml/with_vars.haml +0 -4
  707. data/spec/ramaze/template/haml.rb +0 -66
  708. data/spec/ramaze/template/liquid/index.liquid +0 -1
  709. data/spec/ramaze/template/liquid/products.liquid +0 -45
  710. data/spec/ramaze/template/liquid.rb +0 -99
  711. data/spec/ramaze/template/markaby/external.mab +0 -8
  712. data/spec/ramaze/template/markaby/sum.mab +0 -1
  713. data/spec/ramaze/template/markaby.rb +0 -61
  714. data/spec/ramaze/template/nagoro/another/long/action.nag +0 -1
  715. data/spec/ramaze/template/nagoro/combined.nag +0 -1
  716. data/spec/ramaze/template/nagoro/file_only.nag +0 -1
  717. data/spec/ramaze/template/nagoro/index.nag +0 -1
  718. data/spec/ramaze/template/nagoro/nested.nag +0 -1
  719. data/spec/ramaze/template/nagoro/some__long__action.nag +0 -1
  720. data/spec/ramaze/template/nagoro/sum.nag +0 -1
  721. data/spec/ramaze/template/nagoro.rb +0 -64
  722. data/spec/ramaze/template/redcloth/external.redcloth +0 -1
  723. data/spec/ramaze/template/redcloth.rb +0 -38
  724. data/spec/ramaze/template/remarkably.rb +0 -58
  725. data/spec/ramaze/template/sass.rb +0 -69
  726. data/spec/ramaze/template/tenjin/external.tenjin +0 -1
  727. data/spec/ramaze/template/tenjin.rb +0 -49
  728. data/spec/ramaze/template/xslt/concat_words.xsl +0 -16
  729. data/spec/ramaze/template/xslt/index.xsl +0 -14
  730. data/spec/ramaze/template/xslt/products.xsl +0 -32
  731. data/spec/ramaze/template/xslt/ruby_version.xsl +0 -14
  732. data/spec/ramaze/template/xslt.rb +0 -90
  733. data/spec/ramaze/template.rb +0 -128
  734. data/spec/snippets/array/put_within.rb +0 -33
  735. data/spec/snippets/divide.rb +0 -19
  736. data/spec/snippets/kernel/__dir__.rb +0 -8
  737. data/spec/snippets/kernel/acquire.rb +0 -71
  738. data/spec/snippets/kernel/constant.rb +0 -23
  739. data/spec/snippets/numeric/filesize_format.rb +0 -12
  740. data/spec/snippets/ordered_set.rb +0 -63
  741. data/spec/snippets/ramaze/caller_info.rb +0 -39
  742. data/spec/snippets/ramaze/caller_lines.rb +0 -30
  743. data/spec/snippets/struct/fill.rb +0 -26
  744. data/spec/snippets/struct/values_at.rb +0 -44
  745. data/spec/snippets/symbol/to_proc.rb +0 -13
  746. data/spec/snippets/thread/into.rb +0 -20
  747. /data/examples/{todolist → app/todolist}/public/favicon.ico +0 -0
  748. /data/examples/{upload → app/upload}/view/index.xhtml +0 -0
  749. /data/examples/{wikore/template → app/wikore/view}/index.xhtml +0 -0
  750. /data/examples/{wiktacular → app/wiktacular}/README +0 -0
  751. /data/examples/{wiktacular → app/wiktacular}/mkd/link/2007-07-20_19-45-51.mkd +0 -0
  752. /data/examples/{wiktacular → app/wiktacular}/mkd/link/current.mkd +0 -0
  753. /data/examples/{wiktacular → app/wiktacular}/mkd/main/2007-07-20_16-31-33.mkd +0 -0
  754. /data/examples/{wiktacular → app/wiktacular}/public/favicon.ico +0 -0
  755. /data/examples/{wiktacular → app/wiktacular}/public/screen.css +0 -0
  756. /data/examples/{wiktacular/template → app/wiktacular/view}/index.xhtml +0 -0
  757. /data/examples/{identity.rb → helpers/identity.rb} +0 -0
  758. /data/examples/{facebook.rb → misc/facebook.rb} +0 -0
  759. /data/examples/templates/{template → view}/external.liquid +0 -0
  760. /data/spec/ramaze/action/{template → view}/bar.xhtml +0 -0
  761. /data/spec/ramaze/action/{template → view}/instancevars/layout.xhtml +0 -0
  762. /data/spec/ramaze/action/{template → view}/other_wrapper.xhtml +0 -0
  763. /data/spec/ramaze/action/{template → view}/single_wrapper.xhtml +0 -0
  764. /data/spec/ramaze/action/{template/sub/sub_wrapper.xhtml → view/sub/sub_wrapper.erb} +0 -0
  765. /data/spec/ramaze/controller/{template → view}/greet.xhtml +0 -0
  766. /data/spec/ramaze/controller/{template → view}/list.xhtml +0 -0
  767. /data/spec/ramaze/controller/{template → view}/other/greet/other.xhtml +0 -0
  768. /data/spec/ramaze/controller/{template → view}/other_wrapper.xhtml +0 -0
  769. /data/spec/ramaze/helper/{template → view}/locals.xhtml +0 -0
  770. /data/spec/ramaze/helper/{template → view}/loop.xhtml +0 -0
  771. /data/spec/ramaze/helper/{template → view}/num.xhtml +0 -0
  772. /data/spec/ramaze/helper/{template → view}/partial.xhtml +0 -0
  773. /data/spec/ramaze/helper/{template → view}/recursive.xhtml +0 -0
  774. /data/spec/ramaze/helper/{template → view}/recursive_local_ivars.xhtml +0 -0
  775. /data/spec/ramaze/helper/{template → view}/recursive_locals.xhtml +0 -0
  776. /data/spec/ramaze/helper/{template → view}/test_template.xhtml +0 -0
  777. /data/spec/ramaze/{template → view}/remarkably/external.rem +0 -0
  778. /data/spec/ramaze/{template → view}/remarkably/sum.rem +0 -0
  779. /data/spec/ramaze/{template → view}/sass/file.css.sass +0 -0
  780. /data/spec/ramaze/{template → view}/tagz/external.tagz +0 -0
  781. /data/spec/ramaze/{template → view}/tagz/sum.tagz +0 -0
@@ -0,0 +1,210 @@
1
+ # @title Controllers
2
+ # Controllers
3
+
4
+ When developing web applications controllers are the elements that are called
5
+ by a browser. When visiting a page a request is made that is processed by Rack
6
+ and sent to Ramaze. Ramaze in turn will determine what controller to call.
7
+
8
+ To make understanding controllers a bit easier will use a real world example.
9
+ Let's say we're in a restaurant and want to order some food. The waiter of the
10
+ restaurant can be seen as a controller. We'll talk to it and tell him what we
11
+ want to have for dinner but the waiter itself won't actually prepare our dinner,
12
+ instead it will merely tell the cooks to make the dinner and bring it to you once
13
+ it's done. The waiter is our controller, the cook is our model and our meal can
14
+ be seen as the view.
15
+
16
+ In a typical application the entire flow of a request is as following:
17
+
18
+ Request --> Server (Thin, Unicorn, etc) --> Rack --> Ramaze --> Controller
19
+
20
+ ## Ramaze & Controllers
21
+
22
+ In Ramaze controllers are plain Ruby classes that extend Ramaze::Controller. The
23
+ most basic controller looks like the following:
24
+
25
+ class ControllerName < Ramaze::Controller
26
+ map '/uri'
27
+
28
+ def index
29
+
30
+ end
31
+ end
32
+
33
+ Let's walk through this snippet step by step. The first line declares a new
34
+ class that extends {Ramaze::Controller}. Extending this base class is very
35
+ important, without it we won't be able to call controller specific methods such
36
+ as the `map()` method. This method, which is called on line 2, is used to instruct
37
+ Ramaze what controller is bound to what URI (Uniform Resource Identifier). The
38
+ argument of this method should be a string starting with a /. The reason for
39
+ this is that the URIs are relative to URL the application is running on. For
40
+ example, if our application was running at ramaze.net a URI of "/blog" would
41
+ mean the controller can be found at ramaze.net/blog.
42
+
43
+ Let's move to the next lines of code. The next lines of code define a new method
44
+ called "index". By default Ramaze will try to call this method if no URI after
45
+ the mapped URI is given. In our /blog example a call to ramaze.net/blog would
46
+ call `BlogController#index` but a call to `ramaze.net/blog/entry/10` would call
47
+ `BlogController#entry(10)`.
48
+
49
+ All methods that are declared as public can be accessed by a user and by default
50
+ the `index()` method is called if no other method is specified. Don't like the
51
+ `index()` method? No problem, you can specify a different default method to call
52
+ as following:
53
+
54
+ class ControllerName < Ramaze::Controller
55
+ trait :default_action_name => 'default'
56
+
57
+ def default
58
+
59
+ end
60
+ end
61
+
62
+ We're not going to cover Traits too much in this chapter as there's a dedicated
63
+ chapter for them but in short they're a way of setting configuration options. In
64
+ this case we're using the trait `default_action_name` to specify what the name
65
+ of the default method should be. By default this is set to "index" but in the
66
+ above example it was changed to "default".
67
+
68
+ ### Method Arguments
69
+
70
+ As mentioned above methods are bound to URLs given they're declared as public
71
+ methods. The same applies to the arguments of such methods, if the method is
72
+ public these arguments can be set from the URL. This means that you don't have
73
+ to use a special DSL just to bind methods to certain URLs while taking various
74
+ parameters into account. An example is the following:
75
+
76
+ class Pages < Ramaze::Controller
77
+ map '/pages'
78
+
79
+ def index
80
+ # Overview of all pages
81
+ end
82
+
83
+ def edit(id)
84
+ # Edit the page for the given ID
85
+ end
86
+ end
87
+
88
+ This controller would allow users to navigate to `/pages/edit/10` which would
89
+ invoke `Pages#edit("10")`. There's no restriction on the values of parameters
90
+ (as long as they don't include slashes), they are however always passed as
91
+ strings to the method.
92
+
93
+ One thing to keep in mind is that if a method takes a set of required parameters
94
+ that are *not* specified Ramaze will *not* call the method, it will instead show
95
+ a message that the request could not be executed due to a missing
96
+ method/controller (unless your application has a custom handler for this).
97
+
98
+ Using the code above navigating to `/pages/edit/10` would work but navigating to
99
+ `/pages/edit` would not since the "id" parameter is specified as a required
100
+ parameter but wasn't given in the URL. Don't worry, working around this is as
101
+ easy as specifying a default value for your parameters:
102
+
103
+ class Pages < Ramaze::Controller
104
+ map '/pages'
105
+
106
+ def index
107
+ # Overview of all pages
108
+ end
109
+
110
+ def edit(id = nil)
111
+ # Edit the page for the given ID
112
+ end
113
+ end
114
+
115
+ With this modification the `edit` method will be called for URLs such as
116
+ `/pages/edit`, `/pages/edit/10` and so on.
117
+
118
+ ### Catch-all Methods
119
+
120
+ Sometimes you want to create a controller in which a single method handles all
121
+ the requests. This can be done by creating an `index` method that takes a
122
+ variable amount of parameters:
123
+
124
+ class Pages < Ramaze::Controller
125
+ map '/pages'
126
+
127
+ def index(*args)
128
+
129
+ end
130
+ end
131
+
132
+ In this example `Pages#index` would be called for URLs such as `/pages`,
133
+ `/pages/example`, `/pages/edit/10` and so on. The exception to this is URLs that
134
+ point to existing methods. An example:
135
+
136
+ class Pages < Ramaze::Controller
137
+ map '/pages'
138
+
139
+ def index(*args)
140
+ return 'index'
141
+ end
142
+
143
+ def example
144
+ return 'example'
145
+ end
146
+ end
147
+
148
+ If a user were to browse to `/pages/hello` the index method would be called and
149
+ "index" would be displayed, when the user instead goes to `/pages/example` the
150
+ text "example" would be displayed as there's an existing method for this URI.
151
+ However, if the user would request `/pages/example/10` the index method would
152
+ again be called, this is because the example method does not take any
153
+ parameters. Below is a list of various URLs and what method calls they'd result
154
+ in.
155
+
156
+ /pages # => Pages#index
157
+ /pages/index # => Pages#index
158
+ /pages/edit/10 # => Pages#index("edit", "10")
159
+ /pages/example # => Pages#example
160
+ /pages/example/10 # => Pages#index("example", "10")
161
+
162
+ ## Registering Controllers
163
+
164
+ By now you might be thinking "How does Ramaze know what controller to call? I
165
+ didn't initialize the controller!". It's true, you don't have to manually
166
+ initialize the controller and save it in a hash or somewhere else. The entire
167
+ process of registering a controller is done by the map() method and thus is one
168
+ of the most important methods available. When calling this method it will store
169
+ the name of the class that invoked it and bind it to the given URI. Whenever a
170
+ request is made Ramaze simply creates an instance of the matching controller
171
+ for a given URI.
172
+
173
+ The basic process of the map() method is as following:
174
+
175
+ 1. Call `map()`.
176
+ 2. Validate the given URI.
177
+ 3. Store the controller constant.
178
+ 4. Done.
179
+
180
+ ## Base Controllers
181
+
182
+ In many applications you'll have separate areas such as an admin panel and the
183
+ frontend. Usually you want to authenticate users for certain controllers, such
184
+ as those used for an admin panel. An easy way of doing this is by putting the
185
+ authentication call in a controller. By creating a base controller and extending
186
+ it you don't have to call the method that authenticates the user over and over
187
+ again. Because Ramaze is just Ruby all you have to do to achieve this is the
188
+ following:
189
+
190
+ class AdminController < Ramaze::Controller
191
+
192
+ end
193
+
194
+ class Users < AdminController
195
+
196
+ end
197
+
198
+ If your base controller has an initialize() method defined you should always
199
+ call the parent's initialize() method to ensure everything is working properly.
200
+ This can be done by calling super():
201
+
202
+ class AdminController < Ramaze::Controller
203
+ def initialize
204
+ # Calls Ramaze::Controller#initialize
205
+ super
206
+
207
+ # Custom calls can be placed here...
208
+ # ...
209
+ end
210
+ end
@@ -0,0 +1,89 @@
1
+ # @title Helpers
2
+ # Helpers
3
+
4
+ Helpers are simple modules that can be used in controllers to prevent developers
5
+ from having to write the same code over and over again. There's no actual
6
+ definition of how helpers should be used and what they should do but the general
7
+ idea is quite simple, all logic that may be shared among controllers should go
8
+ in a helper. For example, Ramaze ships with it's own layout helper that adds a
9
+ method ``set_layout()`` (see the {file:general/views Views} chapter).
10
+
11
+ In order to use a helper there are a few guidelines it should follow. The most
12
+ important guideline (or rule) is that it should be declared under the
13
+ Ramaze::Helper namespace. Say your helper is called "Cake" this would result in
14
+ Ramaze::Helper::Cake as the full name. The second rule/guideline is that helpers
15
+ should be placed in the "helper" directory of your Ramaze application (or any
16
+ other directory added to the list of helper paths). This is required in order to
17
+ load helpers the ramaze way, otherwise you'll have to manually load each helper.
18
+
19
+ ## Loading Helpers
20
+
21
+ Loading helpers the Ramaze way is pretty easy and can be done using the method
22
+ helper():
23
+
24
+ class Blogs < Ramaze::Controller
25
+ helper :cake
26
+ end
27
+
28
+ This method can load multiple helpers in a single call as well:
29
+
30
+ class Blogs < Ramaze::Controller
31
+ helper :cake, :pie, :candy
32
+ end
33
+
34
+ If you have your helper located somewhere else or don't want to use the helper()
35
+ method you can just include each helper the regular way:
36
+
37
+ class Blogs < Ramaze::Controller
38
+ include Ramaze::Helper::Cake
39
+ include Ramaze::Helper::Pie
40
+ include Ramaze::Helper::Candy
41
+ end
42
+
43
+ As you can see this requires more lines of code and thus it's recommended to
44
+ load all helpers the Ramaze way.
45
+
46
+ ## Available Helpers
47
+
48
+ * {Ramaze::Helper::Auth}: basic authentication without a model.
49
+ * {Ramaze::Helper::Bench}: basic benchmarking of your code.
50
+ * {Ramaze::Helper::BlueForm}: makes building forms fun again.
51
+ * {Ramaze::Helper::Cache}: caching of entire actions and custom values in your
52
+ controllers.
53
+ * {Ramaze::Helper::CSRF}: protect your controllers from CSRF attacks.
54
+ * {Ramaze::Helper::Email}: quick and easy way to send Emails.
55
+ * {Ramaze::Helper::Erector}
56
+ * {Ramaze::Helper::Flash}
57
+ * {Ramaze::Helper::Gestalt}: helper for {Ramaze::Gestalt}.
58
+ * {Ramaze::Helper::Gravatar}: easily generate Gravatars.
59
+ * {Ramaze::Helper::Identity}: helper for OpenID authentication.
60
+ * {Ramaze::Helper::Layout}: easily set layouts for specific actions.
61
+ * {Ramaze::Helper::Link}
62
+ * {Ramaze::Helper::Localize}
63
+ * {Ramaze::Helper::Markaby}
64
+ * {Ramaze::Helper::Maruku}
65
+ * {Ramaze::Helper::Paginate}: easily paginate rows of data.
66
+ * {Ramaze::Helper::Remarkably}
67
+ * {Ramaze::Helper::RequestAccessor}
68
+ * {Ramaze::Helper::SendFile}
69
+ * {Ramaze::Helper::SimpleCaptcha}: captches using simple mathematical questions.
70
+ * {Ramaze::Helper::Stack}
71
+ * {Ramaze::Helper::Tagz}
72
+ * {Ramaze::Helper::Thread}
73
+ * {Ramaze::Helper::Upload}: uploading files made easy.
74
+ * {Ramaze::Helper::UserHelper}: authenticate users using a model.
75
+ * {Ramaze::Helper::XHTML}
76
+
77
+ ## Innate Helpers
78
+
79
+ Note that you may also find some popular helpers, that are used by default in
80
+ Ramaze, under the Innate project.
81
+
82
+ * {Innate::Helper::Aspect}: provides before/after wrappers for actions.
83
+ * {Innate::Helper::CGI}: gives shortcuts to some CGI methods.
84
+ * {Innate::Helper::Flash}: gives simple access to session.flash.
85
+ * {Innate::Helper::Link}: provides the path to a given Node and action.
86
+ * {Innate::Helper::Redirect}: provides the request redirect, raw_redirect
87
+ and respond convenience methods.
88
+ * {Innate::Helper::Render}: provides variants for partial, custom, full
89
+ view rendering.
@@ -0,0 +1,59 @@
1
+ # @title Installation
2
+ # Installation
3
+
4
+ Ramaze can be installed by using [Rubygems][rubygems], direct download or by
5
+ using Git. Installing Ramaze via Rubygems only needs a single command:
6
+
7
+ $ gem install ramaze
8
+
9
+ Optionally you can specify ``-v`` to install a specific version:
10
+
11
+ $ gem install ramaze -v 2011.07.25
12
+
13
+ ## Git
14
+
15
+ If you're interested in hacking on Ramaze or you just want to browse the source
16
+ you can use Git to install a local copy of Ramaze. For this you'll need to have
17
+ Git installed (refer to your package manager for details on installing Git).
18
+ When installed you can clone the Ramaze repository with the following commnad:
19
+
20
+ $ git clone git://github.com/ramaze/ramaze.git
21
+
22
+ Once the cloning process has completed you should ``cd`` into the directory to
23
+ install all required gems and optionally set up an RVM environment in case
24
+ you're using RVM:
25
+
26
+ $ cd ramaze
27
+ $ bundle install
28
+
29
+ Once installed you can build a gem manually or just require the local
30
+ installation manually:
31
+
32
+ require '/path/to/ramaze/lib/ramaze'
33
+
34
+ Building a gem can be done using the command ``rake gem:build``, if you want to
35
+ also install the gem after it's built you should run ``rake gem:install``
36
+ instead.
37
+
38
+ Another way of loading Ramaze is to add it to your ``$RUBYLIB`` variable. It's
39
+ best if you put this in your ``.bashrc`` file so that you don't have to run the
40
+ command manually every time you open up a new terminal:
41
+
42
+ export RUBYLIB="/path/to/ramaze/lib"
43
+
44
+ This approach allows you to load Ramaze like you'd normally would instead of
45
+ having to specify the full path.
46
+
47
+ ## Direct Download
48
+
49
+ In case you don't have Git installed but still want to have a local copy you can
50
+ download a tarball from Github. If you want to download the latest copy you can
51
+ go to the [Downloads][downloads] page, if you want to download a specific tag
52
+ instead you should navigate to the [Tags][tags] page.
53
+
54
+ Once downloaded and extracted the setup process is the same as when installing
55
+ Ramaze via Git.
56
+
57
+ [rubygems]: http://rubygems.org/
58
+ [downloads]: https://github.com/Ramaze/ramaze/downloads
59
+ [tags]: https://github.com/Ramaze/ramaze/tags
@@ -0,0 +1,96 @@
1
+ # @title Logging
2
+ # Logging
3
+
4
+ Similar to the caching system Ramaze makes it easy to log information using a
5
+ unified API, whether you're logging to a file, using Growl or something else.
6
+ Ramaze itself only uses a single logger which logs to STDOUT by default. This
7
+ logger is stored in ``Ramaze::Log``. While you can just use this particular
8
+ logger it's recommended to create your own ones if you need to log specific
9
+ types of data (such as API calls).
10
+
11
+ Creating a custom logger works just like initializing a regular class. Say you
12
+ want to rotate your log files based on the current date, in that case
13
+ {Ramaze::Logger::RotatingInformer} should be used. To use this logger you'd
14
+ simply do the following:
15
+
16
+ logger = Ramaze::Logger::RotatingInformer.new('./log')
17
+
18
+ This creates a new instance of the logger and tells it to store it's log files
19
+ in the ``./log`` directory. Each log file's name is the date on which it was
20
+ created in the format of ``yyyy-mm-dd``.
21
+
22
+ Once a logger has been created you can use the following logging methods:
23
+
24
+ * warn: logs a warning message.
25
+ * debug: logs a debugging message such as "Connected to the database".
26
+ * error: logs an error message, useful for logging validation errors and the
27
+ like.
28
+ * info: logging method for generic log messages that don't fit into a specific
29
+ category.
30
+
31
+ You can call these methods on the instance of a logger just like any other
32
+ method:
33
+
34
+ logger.info 'Logging data sure is easy to do!'
35
+
36
+ ## Creating Custom Loggers
37
+
38
+ Ramaze provides an API that makes it easy to create your own logging class. Each
39
+ log class should include the module {Ramaze::Logging}, this module provides the
40
+ basic setup for every logger and stops you from having to re-invent the wheel
41
+ every time.
42
+
43
+ class MyLogger
44
+ include Ramaze::Logging
45
+ end
46
+
47
+ Each logger should respond to the instance method ``log()``. This method will be
48
+ used by other methods such as ``error()`` and ``warn()``, therefor your logger
49
+ is somewhat useless without this method. The ``log()`` method should take at
50
+ least two parameters, the first one the logging level (such as "error") and the
51
+ second (and all following parameters) should be messages to log. Lets add this
52
+ method to the ``MyLogger`` class shown above:
53
+
54
+ class MyLogger
55
+ include Ramaze::Logging
56
+
57
+ def log(level, *messages)
58
+
59
+ end
60
+ end
61
+
62
+ Now you no longer get nasty errors when trying to log data. However, your data
63
+ is also completely ignored (after all, the method isn't doing anything yet).
64
+ What the ``log()`` method does is really up to you, whether you're logging to
65
+ STDOUT, to a file or to a database. A basic example of logging to STDOUT using
66
+ this class can be seen below.
67
+
68
+ class MyLogger
69
+ include Ramaze::Logging
70
+
71
+ def log(level, *messages)
72
+ messages.each do |message|
73
+ $stdout.puts "#{level.upcase}: #{message}"
74
+ end
75
+ end
76
+ end
77
+
78
+ When using this class the output will look like the following:
79
+
80
+ ruby-1.9.2-p290 :011 > logger = MyLogger.new
81
+ => #<MyLogger:0x00000101ae6328>
82
+ ruby-1.9.2-p290 :011 > logger.info 'Hello Ramaze!'
83
+ INFO: Hello Ramaze!
84
+
85
+ Of course it doesn't stop here. You can add colors, timestamps and pretty much
86
+ whatever you want.
87
+
88
+ ## Available Loggers
89
+
90
+ * {Ramaze::Logger::LogHub}
91
+ * {Ramaze::Logger::Informer}
92
+ * {Ramaze::Logger::Logger}: wrapper around the Logger class from the Stdlib.
93
+ * {Ramaze::Logging}: basic skeleton for your own loggers.
94
+ * {Ramaze::Logger::RotatingInformer}: logger that rotates log files based on the
95
+ current date.
96
+ * {Ramaze::Logger::Syslog}: logger that uses syslog.
@@ -0,0 +1,111 @@
1
+ # @title Rack Middlewares
2
+ # Rack Middlewares
3
+
4
+ Ramaze is a Rack based framework and thus allows you to create so called Rack
5
+ middlewares. Middlewares are basically objects that are stacked together
6
+ in order to intercept and process sequentially each incoming request and outgoing
7
+ response between Rack and Ramaze. You can think of a collection of middlewares
8
+ as a stack at whose bottom lies your Ramaze app.
9
+
10
+ The flow of a Rack request (including middlewares) looks as following:
11
+
12
+ Request --> Server (Thin, Unicorn, etc) --> Rack --> Middleware(s) -->
13
+ Ramaze --> Controller
14
+
15
+ Say we want to ban a number of users by IP, there are two ways of doing this.
16
+ The first way of doing this would be to validate the user's IP in all controllers
17
+ (or in a base controller). However, this approach will eventually require quite
18
+ a bit of code. The easier method, as you may have guessed, is using a Rack
19
+ middleware. Since middlewares are executed for each request this means we'll
20
+ only have to add our code once and we're good to go.
21
+
22
+ ## Building the Middleware
23
+
24
+ Let's begin building our IP blacklist. For the sake of simplicity we'll hardcode
25
+ the blocked IPs in an array stored inside our middleware. Go ahead and create a
26
+ file called "banlist.rb" and save it somewhere in your application (and require
27
+ it!). We'll begin with our basic skeleton that looks like the following:
28
+
29
+ class Banlist
30
+ def initialize(app)
31
+ @app = app
32
+ end
33
+
34
+ def call(env)
35
+
36
+ end
37
+ end
38
+
39
+ First we declare a new class called "Banlist". Followed by this is our construct
40
+ method that takes a single argument: an object containing the details of our
41
+ Ramaze application. Next up is the call() method which also takes a single
42
+ argument but this time it's an object containing our environment details such as
43
+ the POST and GET data.
44
+
45
+ Let's add a list of blocked IPs to our middleware. Modify the initialize()
46
+ method so that it looks like the following:
47
+
48
+ def initialize(app)
49
+ @app = app
50
+ @banned = ['189.3.0.116', '193.159.244.70', '193.46.236.*']
51
+ end
52
+
53
+ We now have 3 blocked IPs. Time to actually implement the blocking mechanism in
54
+ our call() method. Modify it as following:
55
+
56
+ def call(env)
57
+ if @banned.include?(env['REMOTE_ADDR'])
58
+ return "You have been banned!"
59
+ else
60
+ @app.call(env)
61
+ end
62
+ end
63
+
64
+ So what did we do? Quite simple actually, we extracted the user's IP by calling
65
+ ``env['REMOTE_ADDR']`` and checked if it's stored in the @banned instance
66
+ variable. If it is we'll block the user and show a message "You have been
67
+ banned". Our final middleware looks like the following:
68
+
69
+ class Banlist
70
+ def initialize(app)
71
+ @app = app
72
+ @banned = ['189.3.0.116', '193.159.244.70', '193.46.236.10']
73
+ end
74
+
75
+ def call(env)
76
+ if @banned.include?(env['REMOTE_ADDR'])
77
+ return "You have been banned!"
78
+ else
79
+ @app.call(env)
80
+ end
81
+ end
82
+ end
83
+
84
+ ## Using Middlewares
85
+
86
+ Now it's time to tell Ramaze to actually use the middleware. This can be done
87
+ by calling Ramaze#middleware. This method accepts a block in which one defines
88
+ which middlewares to use for a specific mode and the name for this Ramaze mode
89
+ (Ramaze comes with "live" and "dev").
90
+
91
+ In the block you can call two Innate#MiddlewareCompiler methods
92
+ ```use()``` and ```run()```. The ```use()``` method is used in order to add and
93
+ configure a middleware, while ```run()``` is used to determine what class is used
94
+ to run our Ramaze application. Unless you're using a custom class this should
95
+ always be set to `Ramaze.core`.
96
+
97
+ Assuming we're running in "dev" mode our call will look like the following:
98
+
99
+ Ramaze.middleware :dev do
100
+ use Banlist
101
+ run Ramaze.core
102
+ end
103
+
104
+ <div class="note todo">
105
+ <p>
106
+ The method <code>Ramaze.middleware</code> can no longer be used to
107
+ retrieve the used middleware, instead it can only be used to set
108
+ these. The method <code>Ramaze.middleware!</code> also no longer
109
+ exists.
110
+ </p>
111
+ </div>
@@ -0,0 +1,79 @@
1
+ # @title Models
2
+ # Models
3
+
4
+ Unlike other frameworks Ramaze does not ship with a database toolkit. One of the
5
+ ideas of Ramaze is that it allows you to choose your own set of tools, you're
6
+ not forced to use what we think is best. Ramaze allows you to use
7
+ [ActiveRecord][ar], [Sequel][sequel] or anything else. For the simplicity of
8
+ this user guide we'll use Sequel. In short, Sequel is a database toolkit that
9
+ allows you to write SQL statements using Ruby methods as well as providing an
10
+ ORM (Object Relationship Mapper).
11
+
12
+ Let's say we're creating a simple blog application. Each blog has posts,
13
+ comments, users and perhaps some categories. We're not going to create a model
14
+ for each of these entities in this guide but instead we'll focus on the Post
15
+ model. The most basic form of a model looks like the following:
16
+
17
+ class Post < Sequel::Model
18
+
19
+ end
20
+
21
+ From this point on we can load our model (given we have established a database
22
+ connection) and call methods from it. For example, if we want to retrieve the
23
+ post with ID #1 we'd do the following:
24
+
25
+ Post[1] # => SELECT * FROM posts WHERE id = 1
26
+
27
+ Performing a WHERE clause and retrieving a single record can be done by passing
28
+ a hash to the [] method:
29
+
30
+ Post[:title => 'Ramaze is Great'] # => SELECT * FROM posts WHERE title = 'Ramaze is Great'
31
+
32
+ ## Controllers And Models
33
+
34
+ Of course using a model on its own isn't really going to work. Let's combine
35
+ our Post model mentioned earlier with a controller called "Posts".
36
+
37
+ require 'ramaze'
38
+ require 'model/post'
39
+
40
+ class Posts < Ramaze::Controller
41
+ map '/'
42
+
43
+ def index
44
+ @posts = Post.all
45
+ end
46
+
47
+ def edit(id)
48
+ # Arguments are passed as strings so it's a good idea to convert them
49
+ @post = Post[id.to_i]
50
+ end
51
+ end
52
+
53
+ This is a somewhat more advanced example of how to use controllers and models.
54
+ However, it's nothing ground breaking and shouldn't be too hard to understand.
55
+ In the index() method we're simply retrieving all posts by calling Post#all and
56
+ storing them in an instance variable. In the edit() method we're retrieving the
57
+ post based on the given ID.
58
+
59
+ In the edit() method the "id" variable is also converted to an integer. The
60
+ reason for this is that Ramaze doesn't know what types the URI segments should
61
+ be and thus passes them as a string to the called method. While Sequel itself
62
+ won't have any trouble handling this it's a good practice to send the correct
63
+ types as other database toolkits might trigger errors when they receive a string
64
+ value while expecting an integer.
65
+
66
+ ## Supported Toolkits
67
+
68
+ * [ActiveRecord][ar]
69
+ * [M4DBI][m4dbi]
70
+ * [Sequel][sequel]
71
+ * [DataMapper][datamapper]
72
+
73
+ Besides these listed toolkits Ramaze should work with any other toolkit, these
74
+ however are the ones that have been confirmed to work just fine with Ramaze.
75
+
76
+ [sequel]: http://sequel.rubyforge.org/
77
+ [ar]: http://ar.rubyonrails.org/
78
+ [m4dbi]: https://github.com/Pistos/m4dbi
79
+ [datamapper]: http://datamapper.org/