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.
- checksums.yaml +7 -0
- data/Gemfile +3 -0
- data/README.md +125 -0
- data/Rakefile +13 -186
- data/bin/ramaze +4 -149
- data/examples/app/auth/layout/auth.xhtml +25 -0
- data/examples/app/auth/start.rb +25 -0
- data/examples/app/auth/view/index.xhtml +4 -0
- data/examples/app/auth/view/login.xhtml +20 -0
- data/examples/app/auth/view/secret.xhtml +1 -0
- data/examples/app/blog/app.rb +23 -0
- data/examples/app/blog/config.ru +19 -0
- data/examples/app/blog/controller/init.rb +30 -0
- data/examples/app/blog/controller/posts.rb +223 -0
- data/examples/app/blog/controller/users.rb +152 -0
- data/examples/app/blog/layout/default.xhtml +61 -0
- data/examples/app/blog/migrations/01_create_schema.rb +50 -0
- data/examples/app/blog/model/comment.rb +42 -0
- data/examples/app/blog/model/init.rb +44 -0
- data/examples/app/blog/model/post.rb +33 -0
- data/examples/app/blog/model/user.rb +100 -0
- data/examples/app/blog/public/css/grid.css +107 -0
- data/examples/app/blog/public/css/layout.css +203 -0
- data/examples/app/blog/public/css/reset.css +123 -0
- data/examples/app/blog/public/css/text.css +109 -0
- data/examples/app/blog/public/dispatch.fcgi +11 -0
- data/examples/app/blog/public/favicon.ico +0 -0
- data/examples/app/blog/public/images/bg.png +0 -0
- data/examples/app/blog/start.rb +20 -0
- data/examples/app/blog/view/feed.xhtml +23 -0
- data/examples/app/blog/view/form.xhtml +11 -0
- data/examples/app/blog/view/index.xhtml +44 -0
- data/examples/app/blog/view/users/form.xhtml +12 -0
- data/examples/app/blog/view/users/index.xhtml +30 -0
- data/examples/app/blog/view/users/login.xhtml +8 -0
- data/examples/app/blog/view/view.xhtml +68 -0
- data/examples/app/chat/layout/default.xhtml +13 -0
- data/examples/app/chat/model/history.rb +38 -0
- data/examples/app/chat/model/message.rb +7 -0
- data/examples/app/chat/public/css/chat.css +9 -0
- data/examples/app/chat/public/js/chat.js +28 -0
- data/{lib/proto → examples/app/chat}/public/js/jquery.js +75 -15
- data/examples/app/chat/start.rb +39 -0
- data/examples/app/chat/view/chat.xhtml +9 -0
- data/examples/app/chat/view/index.xhtml +7 -0
- data/examples/app/localization/locale/de.yaml +5 -0
- data/examples/app/localization/locale/en.yaml +5 -0
- data/examples/app/localization/locale/ja.yaml +5 -0
- data/examples/app/localization/start.rb +48 -0
- data/examples/app/todolist/controller/init.rb +11 -0
- data/examples/app/todolist/controller/task.rb +39 -0
- data/examples/app/todolist/layout/default.xhtml +14 -0
- data/examples/app/todolist/model/init.rb +14 -0
- data/examples/app/todolist/model/task.rb +39 -0
- data/examples/app/todolist/public/css/screen.css +63 -0
- data/examples/app/todolist/start.rb +7 -0
- data/examples/app/todolist/view/index.xhtml +29 -0
- data/examples/{upload → app/upload}/start.rb +7 -3
- data/examples/app/whywiki/spec/whywiki.rb +56 -0
- data/examples/{whywiki → app/whywiki}/start.rb +10 -9
- data/examples/{whywiki/template → app/whywiki/view}/edit.xhtml +2 -2
- data/examples/app/whywiki/view/show.xhtml +20 -0
- data/examples/{wikore → app/wikore}/spec/wikore.rb +7 -9
- data/examples/{wikore → app/wikore}/src/controller.rb +9 -11
- data/examples/{wikore → app/wikore}/src/model.rb +11 -13
- data/examples/app/wikore/start.rb +9 -0
- data/examples/{wiktacular/template/html_layout.xhtml → app/wiktacular/layout/application.xhtml} +1 -1
- data/examples/{wiktacular → app/wiktacular}/mkd/main/2007-07-20_19-21-12.mkd +1 -1
- data/examples/app/wiktacular/mkd/main/2007-07-20_19-23-10.mkd +2 -0
- data/examples/app/wiktacular/mkd/main/2007-07-20_19-45-07.mkd +2 -0
- data/examples/app/wiktacular/mkd/main/current.mkd +2 -0
- data/examples/{wiktacular → app/wiktacular}/mkd/markdown/current.mkd +2 -2
- data/examples/app/wiktacular/mkd/testing/2007-07-20_16-43-46.mkd +2 -0
- data/examples/{wiktacular → app/wiktacular}/mkd/testing/2007-07-20_19-43-50.mkd +2 -2
- data/examples/{wiktacular → app/wiktacular}/mkd/testing/2007-07-21_18-46-01.mkd +11 -11
- data/examples/{wiktacular → app/wiktacular}/mkd/testing/2007-07-21_18-46-32.mkd +12 -12
- data/examples/{wiktacular → app/wiktacular}/mkd/testing/2007-07-21_18-47-08.mkd +16 -16
- data/examples/{wiktacular → app/wiktacular}/mkd/testing/2007-07-21_18-47-54.mkd +16 -16
- data/examples/{wiktacular → app/wiktacular}/mkd/testing/current.mkd +16 -16
- data/examples/{wiktacular → app/wiktacular}/spec/wiktacular.rb +39 -40
- data/examples/{wiktacular → app/wiktacular}/src/controller.rb +18 -18
- data/examples/{wiktacular → app/wiktacular}/src/model.rb +30 -14
- data/examples/{wiktacular → app/wiktacular}/start.rb +1 -1
- data/examples/{wiktacular/template → app/wiktacular/view}/edit.xhtml +2 -2
- data/examples/{wiktacular/template → app/wiktacular/view}/new.xhtml +1 -1
- data/examples/{element.rb → basic/element.rb} +5 -3
- data/examples/basic/gestalt.rb +26 -0
- data/examples/basic/hello.rb +14 -0
- data/examples/{layout.rb → basic/layout.rb} +2 -2
- data/examples/basic/linking.rb +29 -0
- data/examples/basic/partial.rb +26 -0
- data/examples/{simple.rb → basic/simple.rb} +9 -12
- data/examples/{caching.rb → helpers/cache.rb} +9 -7
- data/examples/helpers/paginate.rb +71 -0
- data/examples/helpers/rest.rb +28 -0
- data/examples/helpers/simple_captcha.rb +29 -0
- data/examples/{css.rb → misc/css.rb} +6 -12
- data/examples/misc/memleak_detector.rb +37 -0
- data/examples/misc/nagoro_element.rb +43 -0
- data/examples/{ramaise.rb → misc/ramaise.rb} +2 -2
- data/examples/misc/rapp.rb +56 -0
- data/examples/misc/sequel_scaffolding.rb +45 -0
- data/examples/misc/serve_directory.rb +6 -0
- data/examples/templates/template_erubis.rb +9 -10
- data/examples/templates/template_ezamar.rb +8 -7
- data/examples/templates/template_haml.rb +7 -8
- data/examples/templates/template_liquid.rb +20 -19
- data/examples/templates/template_markaby.rb +6 -7
- data/examples/templates/template_mustache.rb +70 -0
- data/examples/templates/template_nagoro.rb +6 -7
- data/examples/templates/template_redcloth.rb +8 -9
- data/examples/templates/template_remarkably.rb +8 -9
- data/examples/templates/template_tenjin.rb +10 -15
- data/examples/templates/{template → view}/external.haml +4 -4
- data/examples/templates/{template → view}/external.mab +4 -4
- data/examples/templates/view/external.mt +29 -0
- data/examples/templates/{template → view}/external.nag +4 -4
- data/examples/templates/{template → view}/external.redcloth +4 -4
- data/examples/templates/{template → view}/external.rem +4 -4
- data/examples/templates/{template → view}/external.rhtml +6 -6
- data/examples/templates/{template → view}/external.tenjin +4 -4
- data/examples/templates/{template → view}/external.zmr +6 -6
- data/guide/AUTHORS +80 -0
- data/guide/CHANGELOG +20210 -0
- data/guide/LICENSE +19 -0
- data/guide/_static/logo.png +0 -0
- data/guide/_static/logo.svg +49 -0
- data/guide/css/common.css +20 -0
- data/guide/general/cache.md +168 -0
- data/guide/general/configuration.md +169 -0
- data/guide/general/contributing.md +182 -0
- data/guide/general/controllers.md +210 -0
- data/guide/general/helpers.md +89 -0
- data/guide/general/installation.md +59 -0
- data/guide/general/logging.md +96 -0
- data/guide/general/middlewares.md +111 -0
- data/guide/general/models.md +79 -0
- data/{doc/readme_chunks/principles.txt → guide/general/principles.md} +15 -17
- data/guide/general/ramaze_command.md +110 -0
- data/guide/general/routes.md +82 -0
- data/guide/general/sessions.md +210 -0
- data/guide/general/special_thanks.md +69 -0
- data/guide/general/testing.md +228 -0
- data/guide/general/upgrading.md +85 -0
- data/guide/general/views.md +335 -0
- data/lib/proto/Gemfile +4 -0
- data/lib/proto/README.md +35 -0
- data/lib/proto/Rakefile +1 -0
- data/lib/proto/app.rb +9 -0
- data/lib/proto/config.ru +19 -0
- data/lib/proto/controller/init.rb +18 -0
- data/lib/proto/controller/main.rb +13 -10
- data/lib/proto/layout/default.xhtml +57 -0
- data/lib/proto/public/css/grid.css +107 -0
- data/lib/proto/public/css/layout.css +81 -0
- data/lib/proto/public/css/reset.css +123 -0
- data/lib/proto/public/css/text.css +109 -0
- data/lib/proto/public/favicon.ico +0 -0
- data/lib/proto/public/images/bg.png +0 -0
- data/lib/proto/spec/helper.rb +39 -0
- data/lib/proto/task/ramaze.rake +57 -0
- data/lib/proto/view/index.xhtml +36 -25
- data/lib/ramaze/app.rb +198 -0
- data/lib/ramaze/bin/create.rb +92 -0
- data/lib/ramaze/bin/runner.rb +127 -0
- data/lib/ramaze/cache/lru.rb +88 -0
- data/lib/ramaze/cache/memcache.rb +219 -0
- data/lib/ramaze/cache/moneta.rb +143 -0
- data/lib/ramaze/cache/redis.rb +163 -0
- data/lib/ramaze/cache/sequel.rb +373 -0
- data/lib/ramaze/cache.rb +42 -82
- data/lib/ramaze/controller/default.rb +25 -0
- data/lib/ramaze/controller.rb +184 -224
- data/lib/ramaze/current.rb +17 -68
- data/lib/ramaze/default_middleware.rb +24 -0
- data/lib/ramaze/files.rb +59 -0
- data/lib/ramaze/gestalt.rb +95 -63
- data/lib/ramaze/helper/auth.rb +107 -107
- data/lib/ramaze/helper/bench.rb +51 -0
- data/lib/ramaze/helper/blue_form.rb +683 -0
- data/lib/ramaze/helper/cache.rb +108 -130
- data/lib/ramaze/helper/csrf.rb +191 -0
- data/lib/ramaze/helper/email.rb +116 -0
- data/lib/ramaze/helper/erector.rb +113 -0
- data/lib/ramaze/helper/flash.rb +42 -39
- data/lib/ramaze/helper/formatting.rb +200 -35
- data/lib/ramaze/helper/gestalt.rb +49 -0
- data/lib/ramaze/helper/gravatar.rb +75 -0
- data/lib/ramaze/helper/identity.rb +93 -68
- data/lib/ramaze/helper/layout.rb +128 -0
- data/lib/ramaze/helper/link.rb +52 -119
- data/lib/ramaze/helper/localize.rb +143 -0
- data/lib/ramaze/helper/markaby.rb +26 -24
- data/lib/ramaze/helper/maruku.rb +15 -6
- data/lib/ramaze/helper/paginate.rb +315 -0
- data/lib/ramaze/helper/remarkably.rb +14 -0
- data/lib/ramaze/helper/request_accessor.rb +20 -0
- data/lib/ramaze/helper/send_file.rb +34 -0
- data/lib/ramaze/helper/simple_captcha.rb +61 -0
- data/lib/ramaze/helper/stack.rb +72 -62
- data/lib/ramaze/helper/tagz.rb +13 -12
- data/lib/ramaze/helper/thread.rb +25 -0
- data/lib/ramaze/helper/upload.rb +525 -0
- data/lib/ramaze/helper/user.rb +260 -39
- data/lib/ramaze/helper/xhtml.rb +122 -0
- data/lib/ramaze/helper.rb +8 -79
- data/lib/ramaze/log/hub.rb +41 -32
- data/lib/ramaze/log/informer.rb +128 -104
- data/lib/ramaze/log/logger.rb +25 -15
- data/lib/ramaze/log/logging.rb +46 -27
- data/lib/ramaze/log/rotatinginformer.rb +237 -0
- data/lib/ramaze/log/syslog.rb +57 -31
- data/lib/ramaze/log.rb +16 -15
- data/lib/ramaze/reloader/watch_inotify.rb +84 -0
- data/lib/ramaze/reloader/watch_stat.rb +58 -0
- data/lib/ramaze/reloader.rb +212 -0
- data/lib/ramaze/request.rb +126 -0
- data/lib/ramaze/response.rb +67 -0
- data/lib/ramaze/snippets/object/__dir__.rb +25 -0
- data/lib/ramaze/snippets/ramaze/deprecated.rb +23 -0
- data/lib/ramaze/snippets/string/camel_case.rb +17 -14
- data/lib/ramaze/snippets/string/color.rb +27 -24
- data/lib/ramaze/snippets/string/esc.rb +25 -25
- data/lib/ramaze/snippets/string/snake_case.rb +16 -13
- data/lib/ramaze/snippets/string/unindent.rb +24 -11
- data/lib/ramaze/snippets.rb +21 -6
- data/lib/ramaze/spec/bacon.rb +44 -0
- data/lib/ramaze/spec/helper/bacon.rb +4 -4
- data/lib/ramaze/spec/helper/pretty_output.rb +9 -1
- data/lib/ramaze/spec/helper/snippets.rb +11 -1
- data/lib/ramaze/spec/helper/template_examples.rb +22 -0
- data/lib/ramaze/version.rb +4 -13
- data/lib/ramaze/view/erector.rb +116 -0
- data/lib/ramaze/view/erubis.rb +26 -0
- data/lib/ramaze/view/ezamar.rb +27 -0
- data/lib/ramaze/view/gestalt.rb +20 -0
- data/lib/ramaze/view/haml.rb +27 -0
- data/lib/ramaze/view/liquid.rb +99 -0
- data/lib/ramaze/view/lokar.rb +18 -0
- data/lib/ramaze/view/mustache.rb +46 -0
- data/lib/ramaze/view/nagoro/render_partial.rb +32 -0
- data/lib/ramaze/view/nagoro.rb +44 -0
- data/lib/ramaze/view/remarkably.rb +22 -0
- data/lib/ramaze/view/sass.rb +22 -0
- data/lib/ramaze/view/slim.rb +43 -0
- data/lib/ramaze/view/slippers.rb +51 -0
- data/lib/ramaze/view/tagz.rb +67 -0
- data/lib/ramaze/view/tenjin.rb +32 -0
- data/lib/ramaze/view.rb +35 -0
- data/lib/ramaze.rb +60 -100
- data/lib/vendor/route_exceptions.rb +42 -0
- data/ramaze.gemspec +61 -0
- data/spec/examples/caching.rb +5 -8
- data/spec/examples/css.rb +3 -4
- data/spec/examples/element.rb +4 -4
- data/spec/examples/hello.rb +4 -5
- data/spec/examples/linking.rb +3 -4
- data/spec/examples/misc/sequel_scaffolding.rb +18 -0
- data/spec/examples/simple.rb +3 -8
- data/spec/examples/templates/template_erubis.rb +8 -18
- data/spec/examples/templates/template_ezamar.rb +9 -19
- data/spec/examples/templates/template_haml.rb +8 -20
- data/spec/examples/templates/template_liquid.rb +8 -24
- data/spec/examples/templates/template_markaby.rb +10 -19
- data/spec/examples/templates/template_mustache.rb +13 -0
- data/spec/examples/templates/template_nagoro.rb +13 -0
- data/spec/examples/templates/template_remarkably.rb +8 -18
- data/spec/examples/templates/template_tenjin.rb +8 -23
- data/spec/examples/todolist.rb +33 -0
- data/spec/helper.rb +14 -3
- data/spec/ramaze/action/render.rb +9 -17
- data/spec/ramaze/action/view/other_wrapper.erb +1 -0
- data/spec/ramaze/action/view/sub/sub_wrapper.xhtml +1 -0
- data/spec/ramaze/app/location.rb +43 -0
- data/spec/ramaze/app.rb +50 -0
- data/spec/ramaze/bin/app/config.ru +11 -0
- data/spec/ramaze/bin/create.rb +28 -0
- data/spec/ramaze/bin/runner.rb +30 -0
- data/spec/ramaze/cache/lru.rb +48 -0
- data/spec/ramaze/cache/memcache.rb +69 -0
- data/spec/ramaze/cache/moneta.rb +53 -0
- data/spec/ramaze/cache/redis.rb +58 -0
- data/spec/ramaze/cache/sequel.rb +60 -0
- data/spec/ramaze/controller/actionless_templates.rb +16 -12
- data/spec/ramaze/controller/lonely_mapping.rb +18 -0
- data/spec/ramaze/controller/mapping.rb +63 -0
- data/spec/ramaze/controller/provide_inheritance.rb +40 -0
- data/spec/ramaze/controller/resolve.rb +9 -11
- data/spec/ramaze/controller/subclass.rb +22 -7
- data/spec/ramaze/controller/template_resolving.rb +23 -61
- data/spec/ramaze/controller/view/bar.xhtml +1 -0
- data/spec/ramaze/controller/view/base/another.xhtml +1 -0
- data/spec/ramaze/dispatcher/directory.rb +61 -33
- data/spec/ramaze/dispatcher/file.rb +65 -47
- data/spec/ramaze/error.rb +54 -64
- data/spec/ramaze/files/public_1/plain.txt +1 -0
- data/spec/ramaze/files/public_2/rich.txt +1 -0
- data/spec/ramaze/files.rb +30 -0
- data/spec/ramaze/gestalt.rb +28 -21
- data/spec/ramaze/helper/auth.rb +47 -29
- data/spec/ramaze/helper/bench.rb +21 -0
- data/spec/ramaze/helper/blue_form.rb +807 -0
- data/spec/ramaze/helper/cache.rb +65 -84
- data/spec/ramaze/helper/csrf.rb +64 -0
- data/spec/ramaze/helper/email.rb +69 -0
- data/spec/ramaze/helper/flash.rb +22 -101
- data/spec/ramaze/helper/formatting.rb +100 -6
- data/spec/ramaze/helper/gestalt.rb +18 -0
- data/spec/ramaze/helper/gravatar.rb +43 -0
- data/spec/ramaze/helper/layout/alternative.xhtml +5 -0
- data/spec/ramaze/helper/layout/default.xhtml +5 -0
- data/spec/ramaze/helper/layout.rb +109 -0
- data/spec/ramaze/helper/link.rb +48 -102
- data/spec/ramaze/helper/localize.rb +65 -0
- data/spec/ramaze/helper/maruku.rb +22 -0
- data/spec/ramaze/helper/paginate.rb +304 -0
- data/spec/ramaze/helper/request_accessor.rb +22 -0
- data/spec/ramaze/helper/simple_captcha.rb +45 -0
- data/spec/ramaze/helper/stack.rb +54 -41
- data/spec/ramaze/helper/upload.rb +150 -0
- data/spec/ramaze/helper/uploads/text_1.txt +1 -0
- data/spec/ramaze/helper/uploads/text_2.txt +1 -0
- data/spec/ramaze/helper/user.rb +63 -20
- data/spec/ramaze/helper/xhtml.rb +54 -0
- data/spec/ramaze/log/informer.rb +30 -28
- data/spec/ramaze/log/logging.rb +66 -0
- data/spec/ramaze/log/syslog.rb +89 -4
- data/spec/ramaze/params.rb +12 -16
- data/spec/ramaze/request.rb +51 -160
- data/spec/ramaze/rewrite/file.css +1 -0
- data/spec/ramaze/session/lru.rb +58 -0
- data/spec/ramaze/session/memcache.rb +66 -0
- data/spec/ramaze/session/redis.rb +63 -0
- data/spec/ramaze/session/sequel.rb +62 -0
- data/spec/ramaze/view/erector/external_view.erector +5 -0
- data/spec/ramaze/view/erector/index.erector +5 -0
- data/spec/ramaze/view/erector/layout.erector +13 -0
- data/spec/ramaze/view/erector/tables.erector +23 -0
- data/spec/ramaze/view/erector/view.erector +6 -0
- data/spec/ramaze/view/erector.rb +68 -0
- data/spec/ramaze/view/erubis/external.rhtml +8 -0
- data/spec/ramaze/view/erubis/sum.rhtml +1 -0
- data/spec/ramaze/view/erubis.rb +73 -0
- data/spec/ramaze/view/ezamar/external.zmr +8 -0
- data/spec/ramaze/view/ezamar/sum.zmr +1 -0
- data/spec/ramaze/view/ezamar.rb +73 -0
- data/spec/ramaze/view/gestalt/external.ges +8 -0
- data/spec/ramaze/view/gestalt.rb +94 -0
- data/spec/ramaze/view/haml/external.haml +5 -0
- data/spec/ramaze/view/haml/sum.haml +2 -0
- data/spec/ramaze/view/haml.rb +114 -0
- data/spec/ramaze/view/liquid/external.liquid +8 -0
- data/spec/ramaze/view/liquid/sum.liquid +1 -0
- data/spec/ramaze/view/liquid.rb +73 -0
- data/spec/ramaze/view/lokar/external.lok +8 -0
- data/spec/ramaze/view/lokar/sum.lok +1 -0
- data/spec/ramaze/view/lokar.rb +78 -0
- data/spec/ramaze/view/mustache/external.mt +8 -0
- data/spec/ramaze/view/mustache/sum.mt +1 -0
- data/spec/ramaze/view/mustache.rb +77 -0
- data/spec/ramaze/view/nagoro/external.nag +8 -0
- data/spec/ramaze/view/nagoro/sum.nag +1 -0
- data/spec/ramaze/view/nagoro.rb +78 -0
- data/spec/ramaze/view/remarkably.rb +49 -0
- data/spec/ramaze/view/sass.rb +73 -0
- data/spec/ramaze/view/slim/external.slim +5 -0
- data/spec/ramaze/view/slim/external_vars.slim +5 -0
- data/spec/ramaze/view/slim.rb +49 -0
- data/spec/ramaze/view/slippers/external.st +8 -0
- data/spec/ramaze/view/slippers/sum.st +1 -0
- data/spec/ramaze/view/slippers.rb +49 -0
- data/spec/ramaze/{template → view}/tagz.rb +20 -31
- data/spec/ramaze/view/tenjin/external.rbhtml +8 -0
- data/spec/ramaze/view/tenjin/sum.rbhtml +1 -0
- data/spec/ramaze/view/tenjin.rb +57 -0
- data/spec/ramaze/view.rb +36 -0
- data/spec/snippets/object/__dir__.rb +17 -0
- data/spec/snippets/ramaze/lru_hash.rb +88 -0
- data/spec/snippets/string/camel_case.rb +4 -1
- data/spec/snippets/string/color.rb +4 -1
- data/spec/snippets/string/snake_case.rb +4 -1
- data/spec/snippets/string/unindent.rb +10 -1
- data/tasks/authors.rake +17 -0
- data/tasks/bacon.rake +81 -0
- data/tasks/changelog.rake +20 -0
- data/tasks/gems.rake +15 -0
- data/tasks/release.rake +38 -0
- data/tasks/todo.rake +31 -0
- data/tasks/yard.rake +13 -0
- metadata +813 -714
- data/doc/AUTHORS +0 -25
- data/doc/CHANGELOG +0 -5757
- data/doc/COPYING +0 -56
- data/doc/FAQ +0 -92
- data/doc/GPL +0 -339
- data/doc/INSTALL +0 -34
- data/doc/LEGAL +0 -26
- data/doc/ProjectInfo +0 -53
- data/doc/README +0 -435
- data/doc/TODO +0 -29
- data/doc/meta/announcement.txt +0 -126
- data/doc/meta/configuration.txt +0 -162
- data/doc/meta/internals.txt +0 -278
- data/doc/meta/users.kml +0 -64
- data/doc/migrate/1110_to_1111.txt +0 -131
- data/doc/readme_chunks/appendix.txt +0 -10
- data/doc/readme_chunks/examples.txt +0 -38
- data/doc/readme_chunks/features.txt +0 -148
- data/doc/readme_chunks/getting_help.txt +0 -5
- data/doc/readme_chunks/getting_started.txt +0 -18
- data/doc/readme_chunks/installing.txt +0 -46
- data/doc/readme_chunks/introduction.txt +0 -18
- data/doc/readme_chunks/thanks.txt +0 -59
- data/doc/tutorial/todolist.html +0 -816
- data/doc/tutorial/todolist.mkd +0 -736
- data/examples/auth/auth.rb +0 -54
- data/examples/auth/template/layout.haml +0 -20
- data/examples/auth/template/login.haml +0 -16
- data/examples/blog/README +0 -3
- data/examples/blog/controller/main.rb +0 -29
- data/examples/blog/model/entry.rb +0 -30
- data/examples/blog/public/styles/blog.css +0 -132
- data/examples/blog/spec/blog.rb +0 -87
- data/examples/blog/start.rb +0 -7
- data/examples/blog/view/edit.xhtml +0 -17
- data/examples/blog/view/index.xhtml +0 -17
- data/examples/blog/view/layout.xhtml +0 -11
- data/examples/blog/view/new.xhtml +0 -16
- data/examples/hello.rb +0 -15
- data/examples/linking.rb +0 -29
- data/examples/memleak_detector.rb +0 -32
- data/examples/nitro_form.rb +0 -23
- data/examples/rammit/spec/rammit.rb +0 -30
- data/examples/rammit/src/controller/main.rb +0 -3
- data/examples/rammit/src/controller/page.rb +0 -16
- data/examples/rammit/src/model.rb +0 -33
- data/examples/rammit/start.rb +0 -8
- data/examples/rammit/template/index.xhtml +0 -14
- data/examples/rammit/template/page/view.xhtml +0 -4
- data/examples/rapaste/Rakefile +0 -35
- data/examples/rapaste/controller/paste.rb +0 -94
- data/examples/rapaste/model/paste.rb +0 -55
- data/examples/rapaste/public/css/active4d.css +0 -114
- data/examples/rapaste/public/css/all_hallows_eve.css +0 -72
- data/examples/rapaste/public/css/amy.css +0 -147
- data/examples/rapaste/public/css/blackboard.css +0 -88
- data/examples/rapaste/public/css/brilliance_black.css +0 -605
- data/examples/rapaste/public/css/brilliance_dull.css +0 -599
- data/examples/rapaste/public/css/cobalt.css +0 -149
- data/examples/rapaste/public/css/dawn.css +0 -121
- data/examples/rapaste/public/css/display.css +0 -197
- data/examples/rapaste/public/css/eiffel.css +0 -121
- data/examples/rapaste/public/css/espresso_libre.css +0 -109
- data/examples/rapaste/public/css/idle.css +0 -62
- data/examples/rapaste/public/css/iplastic.css +0 -80
- data/examples/rapaste/public/css/lazy.css +0 -73
- data/examples/rapaste/public/css/mac_classic.css +0 -123
- data/examples/rapaste/public/css/magicwb_amiga.css +0 -104
- data/examples/rapaste/public/css/pastels_on_dark.css +0 -188
- data/examples/rapaste/public/css/slush_poppies.css +0 -85
- data/examples/rapaste/public/css/spacecadet.css +0 -51
- data/examples/rapaste/public/css/sunburst.css +0 -180
- data/examples/rapaste/public/css/twilight.css +0 -137
- data/examples/rapaste/public/css/zenburnesque.css +0 -91
- data/examples/rapaste/public/js/jquery.js +0 -11
- data/examples/rapaste/spec/rapaste.rb +0 -49
- data/examples/rapaste/start.rb +0 -24
- data/examples/rapaste/view/copy.xhtml +0 -10
- data/examples/rapaste/view/index.xhtml +0 -9
- data/examples/rapaste/view/layout.xhtml +0 -25
- data/examples/rapaste/view/list.xhtml +0 -29
- data/examples/rapaste/view/search.xhtml +0 -41
- data/examples/rapaste/view/view.xhtml +0 -37
- data/examples/simple_auth.rb +0 -23
- data/examples/sourceview/public/coderay.css +0 -104
- data/examples/sourceview/public/images/file.gif +0 -0
- data/examples/sourceview/public/images/folder.gif +0 -0
- data/examples/sourceview/public/images/tv-collapsable-last.gif +0 -0
- data/examples/sourceview/public/images/tv-collapsable.gif +0 -0
- data/examples/sourceview/public/images/tv-expandable-last.gif +0 -0
- data/examples/sourceview/public/images/tv-expandable.gif +0 -0
- data/examples/sourceview/public/images/tv-item-last.gif +0 -0
- data/examples/sourceview/public/images/tv-item.gif +0 -0
- data/examples/sourceview/public/jquery.js +0 -11
- data/examples/sourceview/public/jquery.treeview.css +0 -48
- data/examples/sourceview/public/jquery.treeview.js +0 -223
- data/examples/sourceview/public/sourceview.js +0 -52
- data/examples/sourceview/sourceview.rb +0 -77
- data/examples/sourceview/template/index.haml +0 -59
- data/examples/templates/template/external.amrita +0 -19
- data/examples/templates/template/external.xsl +0 -57
- data/examples/templates/template_amrita2.rb +0 -74
- data/examples/templates/template_xslt.rb +0 -49
- data/examples/todolist/README +0 -1
- data/examples/todolist/public/js/jquery.js +0 -1923
- data/examples/todolist/public/ramaze.png +0 -0
- data/examples/todolist/spec/todolist.rb +0 -132
- data/examples/todolist/src/controller/main.rb +0 -70
- data/examples/todolist/src/element/page.rb +0 -31
- data/examples/todolist/src/model.rb +0 -14
- data/examples/todolist/start.rb +0 -11
- data/examples/todolist/template/index.xhtml +0 -17
- data/examples/todolist/template/new.xhtml +0 -7
- data/examples/whywiki/spec/whywiki.rb +0 -58
- data/examples/whywiki/template/show.xhtml +0 -18
- data/examples/wikore/start.rb +0 -9
- data/examples/wiktacular/mkd/main/2007-07-20_19-23-10.mkd +0 -2
- data/examples/wiktacular/mkd/main/2007-07-20_19-45-07.mkd +0 -2
- data/examples/wiktacular/mkd/main/current.mkd +0 -2
- data/examples/wiktacular/mkd/testing/2007-07-20_16-43-46.mkd +0 -2
- data/lib/proto/public/css/ramaze_error.css +0 -90
- data/lib/proto/public/dispatch.fcgi +0 -11
- data/lib/proto/public/ramaze.png +0 -0
- data/lib/proto/spec/main.rb +0 -24
- data/lib/proto/start.rb +0 -8
- data/lib/proto/start.ru +0 -8
- data/lib/proto/view/error.xhtml +0 -64
- data/lib/proto/view/page.xhtml +0 -15
- data/lib/ramaze/action/render.rb +0 -163
- data/lib/ramaze/action.rb +0 -136
- data/lib/ramaze/adapter/base.rb +0 -59
- data/lib/ramaze/adapter/cgi.rb +0 -24
- data/lib/ramaze/adapter/ebb.rb +0 -32
- data/lib/ramaze/adapter/evented_mongrel.rb +0 -7
- data/lib/ramaze/adapter/fcgi.rb +0 -24
- data/lib/ramaze/adapter/lsws.rb +0 -23
- data/lib/ramaze/adapter/mongrel.rb +0 -25
- data/lib/ramaze/adapter/scgi.rb +0 -22
- data/lib/ramaze/adapter/swiftiplied_mongrel.rb +0 -7
- data/lib/ramaze/adapter/thin.rb +0 -22
- data/lib/ramaze/adapter/webrick.rb +0 -52
- data/lib/ramaze/adapter.rb +0 -101
- data/lib/ramaze/cache/memcached.rb +0 -70
- data/lib/ramaze/cache/memory.rb +0 -6
- data/lib/ramaze/cache/yaml_store.rb +0 -68
- data/lib/ramaze/contrib/auto_params/get_args.rb +0 -57
- data/lib/ramaze/contrib/auto_params.rb +0 -135
- data/lib/ramaze/contrib/email.rb +0 -84
- data/lib/ramaze/contrib/facebook/facebook.rb +0 -171
- data/lib/ramaze/contrib/facebook.rb +0 -23
- data/lib/ramaze/contrib/file_cache.rb +0 -65
- data/lib/ramaze/contrib/gettext/mo.rb +0 -155
- data/lib/ramaze/contrib/gettext/parser.rb +0 -46
- data/lib/ramaze/contrib/gettext/po.rb +0 -109
- data/lib/ramaze/contrib/gettext.rb +0 -113
- data/lib/ramaze/contrib/gzip_filter.rb +0 -56
- data/lib/ramaze/contrib/profiling.rb +0 -36
- data/lib/ramaze/contrib/route.rb +0 -22
- data/lib/ramaze/contrib/sequel/fill.rb +0 -12
- data/lib/ramaze/contrib/sequel_cache.rb +0 -92
- data/lib/ramaze/contrib.rb +0 -82
- data/lib/ramaze/controller/error.rb +0 -46
- data/lib/ramaze/controller/main.rb +0 -2
- data/lib/ramaze/controller/resolve.rb +0 -234
- data/lib/ramaze/current/request.rb +0 -181
- data/lib/ramaze/current/response.rb +0 -19
- data/lib/ramaze/current/session/flash.rb +0 -67
- data/lib/ramaze/current/session/hash.rb +0 -65
- data/lib/ramaze/current/session.rb +0 -153
- data/lib/ramaze/dispatcher/action.rb +0 -40
- data/lib/ramaze/dispatcher/directory.rb +0 -116
- data/lib/ramaze/dispatcher/error.rb +0 -108
- data/lib/ramaze/dispatcher/file.rb +0 -87
- data/lib/ramaze/dispatcher.rb +0 -124
- data/lib/ramaze/error.rb +0 -24
- data/lib/ramaze/global/dsl.rb +0 -39
- data/lib/ramaze/global/globalstruct.rb +0 -147
- data/lib/ramaze/global.rb +0 -116
- data/lib/ramaze/helper/aspect.rb +0 -100
- data/lib/ramaze/helper/cgi.rb +0 -43
- data/lib/ramaze/helper/inform.rb +0 -40
- data/lib/ramaze/helper/nitroform.rb +0 -14
- data/lib/ramaze/helper/pager.rb +0 -366
- data/lib/ramaze/helper/partial.rb +0 -96
- data/lib/ramaze/helper/redirect.rb +0 -73
- data/lib/ramaze/helper/sendfile.rb +0 -18
- data/lib/ramaze/helper/sequel.rb +0 -52
- data/lib/ramaze/inform.rb +0 -4
- data/lib/ramaze/log/analogger.rb +0 -37
- data/lib/ramaze/log/growl.rb +0 -35
- data/lib/ramaze/log/knotify.rb +0 -25
- data/lib/ramaze/log/xosd.rb +0 -88
- data/lib/ramaze/route.rb +0 -84
- data/lib/ramaze/snippets/array/put_within.rb +0 -37
- data/lib/ramaze/snippets/binding/locals.rb +0 -13
- data/lib/ramaze/snippets/dictionary.rb +0 -504
- data/lib/ramaze/snippets/divide.rb +0 -20
- data/lib/ramaze/snippets/kernel/__dir__.rb +0 -23
- data/lib/ramaze/snippets/kernel/acquire.rb +0 -39
- data/lib/ramaze/snippets/kernel/aquire.rb +0 -1
- data/lib/ramaze/snippets/kernel/constant.rb +0 -26
- data/lib/ramaze/snippets/kernel/pretty_inspect.rb +0 -15
- data/lib/ramaze/snippets/metaid.rb +0 -17
- data/lib/ramaze/snippets/numeric/filesize_format.rb +0 -19
- data/lib/ramaze/snippets/object/pretty.rb +0 -6
- data/lib/ramaze/snippets/object/scope.rb +0 -11
- data/lib/ramaze/snippets/object/thread_accessor.rb +0 -5
- data/lib/ramaze/snippets/object/traits.rb +0 -76
- data/lib/ramaze/snippets/ordered_set.rb +0 -36
- data/lib/ramaze/snippets/proc/locals.rb +0 -11
- data/lib/ramaze/snippets/ramaze/caller_info.rb +0 -30
- data/lib/ramaze/snippets/ramaze/caller_lines.rb +0 -51
- data/lib/ramaze/snippets/ramaze/thread_accessor.rb +0 -44
- data/lib/ramaze/snippets/string/each.rb +0 -8
- data/lib/ramaze/snippets/string/ord.rb +0 -15
- data/lib/ramaze/snippets/string/start_with.rb +0 -7
- data/lib/ramaze/snippets/struct/fill.rb +0 -23
- data/lib/ramaze/snippets/struct/values_at.rb +0 -23
- data/lib/ramaze/snippets/symbol/to_proc.rb +0 -24
- data/lib/ramaze/snippets/thread/into.rb +0 -18
- data/lib/ramaze/sourcereload.rb +0 -169
- data/lib/ramaze/spec/helper/browser.rb +0 -88
- data/lib/ramaze/spec/helper/mock_http.rb +0 -69
- data/lib/ramaze/spec/helper/requester.rb +0 -49
- data/lib/ramaze/spec/helper/simple_http.rb +0 -434
- data/lib/ramaze/spec/helper.rb +0 -122
- data/lib/ramaze/spec.rb +0 -1
- data/lib/ramaze/store/default.rb +0 -109
- data/lib/ramaze/template/amrita2.rb +0 -44
- data/lib/ramaze/template/builder.rb +0 -28
- data/lib/ramaze/template/erubis.rb +0 -35
- data/lib/ramaze/template/ezamar/element.rb +0 -169
- data/lib/ramaze/template/ezamar/engine.rb +0 -76
- data/lib/ramaze/template/ezamar/morpher.rb +0 -135
- data/lib/ramaze/template/ezamar/render_partial.rb +0 -31
- data/lib/ramaze/template/ezamar.rb +0 -42
- data/lib/ramaze/template/haml.rb +0 -37
- data/lib/ramaze/template/liquid.rb +0 -36
- data/lib/ramaze/template/markaby.rb +0 -52
- data/lib/ramaze/template/nagoro.rb +0 -51
- data/lib/ramaze/template/none.rb +0 -14
- data/lib/ramaze/template/redcloth.rb +0 -24
- data/lib/ramaze/template/remarkably.rb +0 -38
- data/lib/ramaze/template/sass.rb +0 -37
- data/lib/ramaze/template/tagz.rb +0 -79
- data/lib/ramaze/template/tenjin.rb +0 -34
- data/lib/ramaze/template/xslt.rb +0 -96
- data/lib/ramaze/template.rb +0 -81
- data/lib/ramaze/tool/create.rb +0 -74
- data/lib/ramaze/tool/localize.rb +0 -162
- data/lib/ramaze/tool/mime.rb +0 -25
- data/lib/ramaze/tool/mime_types.yaml +0 -615
- data/lib/ramaze/tool/record.rb +0 -6
- data/lib/ramaze/tool.rb +0 -9
- data/lib/ramaze/trinity.rb +0 -13
- data/lib/vendor/bacon.rb +0 -323
- data/rake_tasks/conf.rake +0 -73
- data/rake_tasks/coverage.rake +0 -46
- data/rake_tasks/darcs.rake +0 -5
- data/rake_tasks/gem.rake +0 -43
- data/rake_tasks/maintenance.rake +0 -384
- data/rake_tasks/spec.rake +0 -62
- data/spec/contrib/auto_params.rb +0 -121
- data/spec/contrib/profiling.rb +0 -26
- data/spec/contrib/route.rb +0 -36
- data/spec/contrib/sequel/fill.rb +0 -47
- data/spec/examples/simple_auth.rb +0 -32
- data/spec/examples/templates/template_amrita2.rb +0 -16
- data/spec/examples/templates/template_redcloth.rb +0 -28
- data/spec/ramaze/action/basics.rb +0 -36
- data/spec/ramaze/action/cache.rb +0 -43
- data/spec/ramaze/action/layout.rb +0 -190
- data/spec/ramaze/adapter/mongrel.rb +0 -12
- data/spec/ramaze/adapter/record.rb +0 -31
- data/spec/ramaze/adapter/webrick.rb +0 -12
- data/spec/ramaze/adapter.rb +0 -22
- data/spec/ramaze/cache.rb +0 -73
- data/spec/ramaze/controller.rb +0 -177
- data/spec/ramaze/current/request.rb +0 -30
- data/spec/ramaze/current/session.rb +0 -97
- data/spec/ramaze/dispatcher.rb +0 -31
- data/spec/ramaze/element.rb +0 -107
- data/spec/ramaze/helper/aspect.rb +0 -92
- data/spec/ramaze/helper/cgi.rb +0 -43
- data/spec/ramaze/helper/file.rb +0 -18
- data/spec/ramaze/helper/pager.rb +0 -99
- data/spec/ramaze/helper/partial.rb +0 -76
- data/spec/ramaze/helper/redirect.rb +0 -112
- data/spec/ramaze/localize.rb +0 -67
- data/spec/ramaze/morpher.rb +0 -111
- data/spec/ramaze/public/error404.xhtml +0 -1
- data/spec/ramaze/request/mongrel.rb +0 -9
- data/spec/ramaze/request/thin.rb +0 -9
- data/spec/ramaze/request/webrick.rb +0 -5
- data/spec/ramaze/route.rb +0 -130
- data/spec/ramaze/session.rb +0 -94
- data/spec/ramaze/store/default.rb +0 -71
- data/spec/ramaze/template/amrita2/external.amrita +0 -6
- data/spec/ramaze/template/amrita2/sum.amrita +0 -1
- data/spec/ramaze/template/amrita2.rb +0 -50
- data/spec/ramaze/template/builder/external.rxml +0 -3
- data/spec/ramaze/template/builder.rb +0 -55
- data/spec/ramaze/template/erubis/sum.rhtml +0 -1
- data/spec/ramaze/template/erubis.rb +0 -41
- data/spec/ramaze/template/ezamar/another/long/action.zmr +0 -1
- data/spec/ramaze/template/ezamar/combined.zmr +0 -1
- data/spec/ramaze/template/ezamar/file_only.zmr +0 -1
- data/spec/ramaze/template/ezamar/index.zmr +0 -1
- data/spec/ramaze/template/ezamar/nested.zmr +0 -1
- data/spec/ramaze/template/ezamar/other__index.xhtml +0 -1
- data/spec/ramaze/template/ezamar/some__long__action.zmr +0 -1
- data/spec/ramaze/template/ezamar/sum.zmr +0 -1
- data/spec/ramaze/template/ezamar.rb +0 -63
- data/spec/ramaze/template/haml/index.haml +0 -5
- data/spec/ramaze/template/haml/locals.haml +0 -2
- data/spec/ramaze/template/haml/with_vars.haml +0 -4
- data/spec/ramaze/template/haml.rb +0 -66
- data/spec/ramaze/template/liquid/index.liquid +0 -1
- data/spec/ramaze/template/liquid/products.liquid +0 -45
- data/spec/ramaze/template/liquid.rb +0 -99
- data/spec/ramaze/template/markaby/external.mab +0 -8
- data/spec/ramaze/template/markaby/sum.mab +0 -1
- data/spec/ramaze/template/markaby.rb +0 -61
- data/spec/ramaze/template/nagoro/another/long/action.nag +0 -1
- data/spec/ramaze/template/nagoro/combined.nag +0 -1
- data/spec/ramaze/template/nagoro/file_only.nag +0 -1
- data/spec/ramaze/template/nagoro/index.nag +0 -1
- data/spec/ramaze/template/nagoro/nested.nag +0 -1
- data/spec/ramaze/template/nagoro/some__long__action.nag +0 -1
- data/spec/ramaze/template/nagoro/sum.nag +0 -1
- data/spec/ramaze/template/nagoro.rb +0 -64
- data/spec/ramaze/template/redcloth/external.redcloth +0 -1
- data/spec/ramaze/template/redcloth.rb +0 -38
- data/spec/ramaze/template/remarkably.rb +0 -58
- data/spec/ramaze/template/sass.rb +0 -69
- data/spec/ramaze/template/tenjin/external.tenjin +0 -1
- data/spec/ramaze/template/tenjin.rb +0 -49
- data/spec/ramaze/template/xslt/concat_words.xsl +0 -16
- data/spec/ramaze/template/xslt/index.xsl +0 -14
- data/spec/ramaze/template/xslt/products.xsl +0 -32
- data/spec/ramaze/template/xslt/ruby_version.xsl +0 -14
- data/spec/ramaze/template/xslt.rb +0 -90
- data/spec/ramaze/template.rb +0 -128
- data/spec/snippets/array/put_within.rb +0 -33
- data/spec/snippets/divide.rb +0 -19
- data/spec/snippets/kernel/__dir__.rb +0 -8
- data/spec/snippets/kernel/acquire.rb +0 -71
- data/spec/snippets/kernel/constant.rb +0 -23
- data/spec/snippets/numeric/filesize_format.rb +0 -12
- data/spec/snippets/ordered_set.rb +0 -63
- data/spec/snippets/ramaze/caller_info.rb +0 -39
- data/spec/snippets/ramaze/caller_lines.rb +0 -30
- data/spec/snippets/struct/fill.rb +0 -26
- data/spec/snippets/struct/values_at.rb +0 -44
- data/spec/snippets/symbol/to_proc.rb +0 -13
- data/spec/snippets/thread/into.rb +0 -20
- /data/examples/{todolist → app/todolist}/public/favicon.ico +0 -0
- /data/examples/{upload → app/upload}/view/index.xhtml +0 -0
- /data/examples/{wikore/template → app/wikore/view}/index.xhtml +0 -0
- /data/examples/{wiktacular → app/wiktacular}/README +0 -0
- /data/examples/{wiktacular → app/wiktacular}/mkd/link/2007-07-20_19-45-51.mkd +0 -0
- /data/examples/{wiktacular → app/wiktacular}/mkd/link/current.mkd +0 -0
- /data/examples/{wiktacular → app/wiktacular}/mkd/main/2007-07-20_16-31-33.mkd +0 -0
- /data/examples/{wiktacular → app/wiktacular}/public/favicon.ico +0 -0
- /data/examples/{wiktacular → app/wiktacular}/public/screen.css +0 -0
- /data/examples/{wiktacular/template → app/wiktacular/view}/index.xhtml +0 -0
- /data/examples/{identity.rb → helpers/identity.rb} +0 -0
- /data/examples/{facebook.rb → misc/facebook.rb} +0 -0
- /data/examples/templates/{template → view}/external.liquid +0 -0
- /data/spec/ramaze/action/{template → view}/bar.xhtml +0 -0
- /data/spec/ramaze/action/{template → view}/instancevars/layout.xhtml +0 -0
- /data/spec/ramaze/action/{template → view}/other_wrapper.xhtml +0 -0
- /data/spec/ramaze/action/{template → view}/single_wrapper.xhtml +0 -0
- /data/spec/ramaze/action/{template/sub/sub_wrapper.xhtml → view/sub/sub_wrapper.erb} +0 -0
- /data/spec/ramaze/controller/{template → view}/greet.xhtml +0 -0
- /data/spec/ramaze/controller/{template → view}/list.xhtml +0 -0
- /data/spec/ramaze/controller/{template → view}/other/greet/other.xhtml +0 -0
- /data/spec/ramaze/controller/{template → view}/other_wrapper.xhtml +0 -0
- /data/spec/ramaze/helper/{template → view}/locals.xhtml +0 -0
- /data/spec/ramaze/helper/{template → view}/loop.xhtml +0 -0
- /data/spec/ramaze/helper/{template → view}/num.xhtml +0 -0
- /data/spec/ramaze/helper/{template → view}/partial.xhtml +0 -0
- /data/spec/ramaze/helper/{template → view}/recursive.xhtml +0 -0
- /data/spec/ramaze/helper/{template → view}/recursive_local_ivars.xhtml +0 -0
- /data/spec/ramaze/helper/{template → view}/recursive_locals.xhtml +0 -0
- /data/spec/ramaze/helper/{template → view}/test_template.xhtml +0 -0
- /data/spec/ramaze/{template → view}/remarkably/external.rem +0 -0
- /data/spec/ramaze/{template → view}/remarkably/sum.rem +0 -0
- /data/spec/ramaze/{template → view}/sass/file.css.sass +0 -0
- /data/spec/ramaze/{template → view}/tagz/external.tagz +0 -0
- /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/
|