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
@@ -1,3 +1,6 @@
|
|
1
|
+
# @title Principles
|
2
|
+
# Principles
|
3
|
+
|
1
4
|
There are some basic principles that Ramaze tries to follow:
|
2
5
|
|
3
6
|
* KISS (Keep It Super Simple)
|
@@ -12,45 +15,40 @@ There are some basic principles that Ramaze tries to follow:
|
|
12
15
|
|
13
16
|
* Modular design
|
14
17
|
|
15
|
-
Use what you want and how you want it.
|
16
|
-
|
17
|
-
|
18
|
-
available, giving you full control over your system.
|
18
|
+
Use what you want and how you want it.Through Ruby Ramaze provides one of the
|
19
|
+
most powerful programming-languages available, giving you full control over
|
20
|
+
your system.
|
19
21
|
|
20
22
|
Even the most essential parts of Ramaze can easily be replaced and/or modified
|
21
|
-
without losing the advantage of the whole framework.
|
23
|
+
without losing the advantage of the whole framework.
|
22
24
|
|
23
25
|
* Minimal dependencies
|
24
26
|
|
25
27
|
Nothing besides Ruby is required for the basic features.
|
26
|
-
|
27
28
|
Of course you can take advantage of several wonderful libraries, but Ramaze is
|
28
29
|
built in a way to be run on any basic setup.
|
29
30
|
|
30
31
|
* Documentation
|
31
32
|
|
32
|
-
Document everything, classes, modules, methods, configuration
|
33
|
-
|
34
|
-
|
35
|
-
understanding of the underlying concepts and functionality.
|
33
|
+
Document everything, classes, modules, methods, configuration
|
34
|
+
and so on. Through 100% documentation Ramaze gives the developer easy and
|
35
|
+
solid understanding of the underlying concepts and functionality.
|
36
36
|
|
37
37
|
* Open development
|
38
38
|
|
39
|
-
Everyone is welcome to contribute to Ramaze in the easiest
|
40
|
-
repository is open for patches passing the Test-suite.
|
39
|
+
Everyone is welcome to contribute to Ramaze in the easiest
|
40
|
+
way possible. The repository is open for patches passing the Test-suite.
|
41
41
|
|
42
42
|
* Examples
|
43
43
|
|
44
44
|
Everyone learns different, some only read the source, others browse
|
45
45
|
documentation, but everyone loves examples for a quick and painless start.
|
46
|
-
|
47
46
|
Ramaze addresses this need and offers a wide variety of examples of usage,
|
48
47
|
basic functionality, project-layout and more advanced applications.
|
49
48
|
|
50
49
|
* Fully BDD (Behaviour Driven Design)
|
51
50
|
|
52
51
|
Ramaze has a very complete set of so-called specifications built by RSpec.
|
53
|
-
These specs define the way Ramaze has to behave.
|
54
|
-
|
55
|
-
|
56
|
-
deciding whether the changes the patch applies are valid and don't break the framework.
|
52
|
+
These specs define the way Ramaze has to behave. The specs are checked every
|
53
|
+
time a new patch is pushed into the repository, deciding whether the changes
|
54
|
+
the patch applies are valid and don't break the framework.
|
@@ -0,0 +1,110 @@
|
|
1
|
+
# @title Ramaze Command
|
2
|
+
# Ramaze Command
|
3
|
+
|
4
|
+
Ramaze ships with a relatively simple command, named "ramaze". This command can
|
5
|
+
be used to create new applications as well as starting them. To make reading
|
6
|
+
this guide easier we'll call this command "bin/ramaze" from now on.
|
7
|
+
|
8
|
+
<div class="note deprecated">
|
9
|
+
<p>
|
10
|
+
<strong>Warning</strong>: bin/ramaze is not a scaffolding application.
|
11
|
+
It can merely be used for some basic application management and creating
|
12
|
+
a basic Ramaze application.
|
13
|
+
</p>
|
14
|
+
</div>
|
15
|
+
|
16
|
+
## Creating Applications
|
17
|
+
|
18
|
+
As mentioned earlier bin/ramaze can be used to create new applications. In order
|
19
|
+
to create a new application in the current directory all you have to do is
|
20
|
+
executing the following command:
|
21
|
+
|
22
|
+
$ ramaze create APPNAME
|
23
|
+
|
24
|
+
APPNAME is the name of your new application and will also be used as the
|
25
|
+
directory name. If the application was named "blog" there would now be a
|
26
|
+
directory called "blog" in the current one. This directory will contain all
|
27
|
+
basic files that can be used for a Ramaze powered application.
|
28
|
+
|
29
|
+
## Application Prototypes
|
30
|
+
|
31
|
+
Due to Ramaze's nature it's very easy to create your own application prototype
|
32
|
+
if you dislike the default one. For example, I've made some small modifications
|
33
|
+
to the default prototype so that it looks like the followng:
|
34
|
+
|
35
|
+
.__ app.rb
|
36
|
+
|__ config
|
37
|
+
| |__ config.rb
|
38
|
+
| |__ database.rb
|
39
|
+
| |__ middlewares.rb
|
40
|
+
| |__ requires.rb
|
41
|
+
|
|
42
|
+
|__ config.ru
|
43
|
+
|__ controller
|
44
|
+
|__ layout
|
45
|
+
| |__ default.xhtml
|
46
|
+
|
|
47
|
+
|__ log
|
48
|
+
|__ public
|
49
|
+
|__ spec
|
50
|
+
|__ start.rb
|
51
|
+
|__ view
|
52
|
+
|
53
|
+
This prototype is basically a minimal version of the default one but with a
|
54
|
+
special directory for all configuration files. In order to use this prototype I
|
55
|
+
had to make some small changes to app.rb, the look like the following:
|
56
|
+
|
57
|
+
require 'ramaze'
|
58
|
+
|
59
|
+
# Load the file that in turn will load all gems, keeps this file clean
|
60
|
+
require __DIR__('config/requires')
|
61
|
+
|
62
|
+
# Configure our application
|
63
|
+
require __DIR__('config/config')
|
64
|
+
|
65
|
+
# Load our database settings
|
66
|
+
require __DIR__('config/database')
|
67
|
+
|
68
|
+
# Load all Rack middlewares
|
69
|
+
require __DIR__('config/middlewares')
|
70
|
+
|
71
|
+
# Load all controllers
|
72
|
+
Dir.glob(__DIR__('controller') + '/**/*.rb').each do |f|
|
73
|
+
require f
|
74
|
+
end
|
75
|
+
|
76
|
+
This is only a basic example of the flexibility of Ramaze, I highly recommend
|
77
|
+
you playing around with your own prototypes as it's a great way to learn the
|
78
|
+
basics of Ramaze and to really understand how flexible Ramaze is.
|
79
|
+
|
80
|
+
<div class="note todo">
|
81
|
+
<p>
|
82
|
+
<strong>Note</strong>: This prototype does not come with Ramaze, it's
|
83
|
+
just an example of what you could make yourself.
|
84
|
+
</p>
|
85
|
+
</div>
|
86
|
+
|
87
|
+
## Running Applications
|
88
|
+
|
89
|
+
When you've created an application there are three ways of running it. You can
|
90
|
+
either use your server's command such as `thin` or `unicorn` but you can also
|
91
|
+
use a supplied Rake task:
|
92
|
+
|
93
|
+
$ rake ramaze:start
|
94
|
+
|
95
|
+
If you want to stop the running application you can simply close it by using
|
96
|
+
the key combination Ctrl+C.
|
97
|
+
|
98
|
+
<div class="note todo">
|
99
|
+
<p>
|
100
|
+
<strong>Note</strong>: There are many different ways to start your
|
101
|
+
application depending on the server you're using. Fore more information
|
102
|
+
it's best to look at the documentation of your favorite webserver.
|
103
|
+
</p>
|
104
|
+
</div>
|
105
|
+
|
106
|
+
## Ramaze Console
|
107
|
+
|
108
|
+
By default Ramaze allows you to start a console using either IRB or Pry. These
|
109
|
+
consoles can be started by running `rake ramaze:irb` and `rake ramaze:pry`
|
110
|
+
respectively.
|
@@ -0,0 +1,82 @@
|
|
1
|
+
# @title Routes
|
2
|
+
# Routes
|
3
|
+
|
4
|
+
While in many cases the default route system that comes with Ramaze is good
|
5
|
+
enough there will be times when you want pretty URLs (or just different ones).
|
6
|
+
Ramaze allows you to do all this using the class Ramaze::Route (it's an alias
|
7
|
+
of Innate::Route). This class allows you to create routes using simple strings,
|
8
|
+
regular expressions and lambdas. Let's say we have the following URLs:
|
9
|
+
|
10
|
+
* /users/index
|
11
|
+
* /users/profile/yorickpeterse
|
12
|
+
* /users/edit/yorickpeterse
|
13
|
+
|
14
|
+
Our goal is to rewrite these URLs to the following:
|
15
|
+
|
16
|
+
* /users/list
|
17
|
+
* /users/yorickpeterse
|
18
|
+
* /users/yorickpeterse/edit
|
19
|
+
|
20
|
+
In order to fully explain the routing system will use the three available
|
21
|
+
possibilities: strings, regular expressions and lambdas.
|
22
|
+
|
23
|
+
## String Routes
|
24
|
+
|
25
|
+
Routes that use a string are the most basic form of routing. You simply specify
|
26
|
+
a request URI and the action to call instead of the normal one:
|
27
|
+
|
28
|
+
Ramaze::Route['/foobar'] = '/baz/bar'
|
29
|
+
|
30
|
+
This route tells Ramaze that every request to /foobar should be sent to /baz/bar
|
31
|
+
instead. While string based routes are the easiest to use they're also the most
|
32
|
+
limited one, they can merely be used to redirect A to B. If we look at our list
|
33
|
+
of URLs the only one we can rewrite using this form of routing is the first one:
|
34
|
+
|
35
|
+
Ramaze::Route['/users/list'] = '/users/index'
|
36
|
+
|
37
|
+
This forwards all requests that were sent to /users/list to /users/index.
|
38
|
+
|
39
|
+
## Regular Expression Routes
|
40
|
+
|
41
|
+
Using regular expressions in routes makes it possible to have more dynamic
|
42
|
+
routes. Routes that use regular expressions look like the following:
|
43
|
+
|
44
|
+
Ramaze::Route[/user-([0-9]+)/] = '/users/%d'
|
45
|
+
|
46
|
+
This route forwards requests such as /user-10 and /user-1234 to /users/10 and
|
47
|
+
/users/1234. As you can see there's a "%d" in the value which is replaced with
|
48
|
+
the value of the group ([0-9]+). When using regular expressions for your routes
|
49
|
+
you can use sprintf characters in the value (%s, %d, etc).
|
50
|
+
|
51
|
+
So what about our list of URLs? Let's rewrite the second URL:
|
52
|
+
|
53
|
+
Ramaze::Route['/users/([\w]+)'] = '/users/profile/%s'
|
54
|
+
|
55
|
+
And there we go, all calls to /users/NAME (where NAME is the name of a user)
|
56
|
+
will be routed to /users/profile/NAME.
|
57
|
+
|
58
|
+
## Lambda Routes
|
59
|
+
|
60
|
+
The last method of routing calls can be done using lambdas. The key of the []=
|
61
|
+
method will be the name of a route (can be anything really) and the value a
|
62
|
+
lambda that takes two parameters, the request path and a variable containing the
|
63
|
+
request data:
|
64
|
+
|
65
|
+
Ramaze::Route['my funky lambda route'] = lambda do |path, request|
|
66
|
+
|
67
|
+
end
|
68
|
+
|
69
|
+
In this lambda you're free to do whatever you want as long as you either return
|
70
|
+
a new path or nil (anything else will result in an error). Say we wanted to
|
71
|
+
route our last URL we'd do it as following:
|
72
|
+
|
73
|
+
Ramaze::Route['edit users'] = lambda do |path, request|
|
74
|
+
if path =~ /users\/edit\/([\w]+)/
|
75
|
+
return "/users/#{$1}/edit"
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
This route redirects everything from /users/NAME/edit to /users/edit/NAME.
|
80
|
+
Everything else is unaffected by this route since it only returns a value when
|
81
|
+
the path matches the given regular expression. Note that lambdas can actually
|
82
|
+
contain a "return" statement so the code above is perfectly valid.
|
@@ -0,0 +1,210 @@
|
|
1
|
+
# @title Sessions
|
2
|
+
# Sessions
|
3
|
+
|
4
|
+
The term sessions is used for data associated to a specific client. The easiest
|
5
|
+
example of a session is a simple cookie containing some very basic data such as
|
6
|
+
a user's name.
|
7
|
+
|
8
|
+
## Initializing Sessions
|
9
|
+
|
10
|
+
Ramaze lazy-loads the session system that it's ship with. This means that if you
|
11
|
+
never use any session related data a session will not be created. As soon as you
|
12
|
+
call the main object for working with sessions (simply called "session") or add
|
13
|
+
data to the flash (more on that later) Ramaze will load the session adapter
|
14
|
+
automatically. This prevents you from having to manually write code that invokes
|
15
|
+
a session for all your projects.
|
16
|
+
|
17
|
+
So how do we actually start a session? As mentioned earlier this can be done in
|
18
|
+
two different ways, calling session or flash. If you want to store data in the
|
19
|
+
session until the client's session is destroyed (or the data is removed) it's
|
20
|
+
best to use session, if you only want to store something until the client is
|
21
|
+
redirected to another page (or just visits a page himself) you should use flash.
|
22
|
+
|
23
|
+
## Changing Drivers
|
24
|
+
|
25
|
+
Out of the box Ramaze uses the driver {Ramaze::Cache::LRU}. This driver
|
26
|
+
stores all session related data in the memory of the current process. While this
|
27
|
+
is fine during development it's something you most likely don't want to use in a
|
28
|
+
multi process based environment as data stored in a process' memory isn't
|
29
|
+
shared. To work around this you can use an alternative driver, such a driver can
|
30
|
+
be set as following:
|
31
|
+
|
32
|
+
Ramaze::Cache.options.session = Ramaze::Cache::MemCache
|
33
|
+
|
34
|
+
This particular example tells Ramaze to use Memcached for storing session
|
35
|
+
related data. Where you set this doesn't really matter as long as it's done
|
36
|
+
before calling ``Ramaze.start``. Generally you'd want to put this in a
|
37
|
+
configuration file that's loaded in your app.rb file, if your application is a
|
38
|
+
small one you can just put it in the app.rb file directly.
|
39
|
+
|
40
|
+
## Available Drivers
|
41
|
+
|
42
|
+
* {Ramaze::Cache::Sequel}
|
43
|
+
* {Ramaze::Cache::LRU}
|
44
|
+
* {Ramaze::Cache::MemCache}
|
45
|
+
* {Ramaze::Cache::Redis}
|
46
|
+
* {Ramaze::Cache::LocalMemCache}
|
47
|
+
* {Innate::Cache::FileBased}
|
48
|
+
* {Innate::Cache::DRb}
|
49
|
+
* {Innate::Cache::Marshal}
|
50
|
+
* {Innate::Cache::Memory}
|
51
|
+
* {Innate::Cache::YAML}
|
52
|
+
|
53
|
+
## The Session Object
|
54
|
+
|
55
|
+
As mentioned earlier session is used for data that should be stored until the
|
56
|
+
client's session is destroyed or the data is removed. A good example of this
|
57
|
+
sort of data is a boolean that indicates if the user is logged in or not, you
|
58
|
+
don't want the user to re-authenticate over and over again thus you store the
|
59
|
+
data using the session object. Storing data using this method is incredible
|
60
|
+
simple and works a bit like you're storing data in a hash:
|
61
|
+
|
62
|
+
session[:logged_in] = true
|
63
|
+
|
64
|
+
In the above example we stored a boolean with a value of "true" in the current
|
65
|
+
client's session under the name `:logged_in`. If we want to retrieve this data
|
66
|
+
somewhere else in the application all we'd have to do is the following:
|
67
|
+
|
68
|
+
session[:logged_in] # => true
|
69
|
+
|
70
|
+
A better example would be a simple counter that tracks the amount of times a
|
71
|
+
user has visited your application:
|
72
|
+
|
73
|
+
class Counter < Ramaze::Controller
|
74
|
+
map '/'
|
75
|
+
|
76
|
+
def index
|
77
|
+
# If no data was found for the given key session returns nil
|
78
|
+
if !session[:visits].nil?
|
79
|
+
session[:visits] = 0
|
80
|
+
else
|
81
|
+
session[:visits] += 1
|
82
|
+
end
|
83
|
+
|
84
|
+
"You have visitied this page #{session[:visits]} times."
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
In this relatively basic controller a user's amount of visits to the index()
|
89
|
+
method will be stored in the session and displayed afterwards. Now it's time
|
90
|
+
for the true magic. The session object is an instance of Innate::Session and
|
91
|
+
has a few extra methods besides [] and []=. These methods are delete(), clear(),
|
92
|
+
flush(), resid!() and sid(). We're not going to cover all methods but we will
|
93
|
+
look at the delete() and resid() methods.
|
94
|
+
|
95
|
+
### session.delete
|
96
|
+
|
97
|
+
The method Session.delete can be used to remove a chunk of data from the
|
98
|
+
client's session. In order to delete our amount of visits all we'd have to do
|
99
|
+
is the following:
|
100
|
+
|
101
|
+
session.delete(:visits)
|
102
|
+
|
103
|
+
From this point on the "visits" key is set to nil until the user visits the
|
104
|
+
index page again.
|
105
|
+
|
106
|
+
### session.resid!
|
107
|
+
|
108
|
+
Session.resid! can be used to regenerate the client's session ID without
|
109
|
+
destroying the session data. This method is extremely useful for authentication
|
110
|
+
systems as it can be used to prevent session fixation attacks by generating a
|
111
|
+
new session ID every N minutes or whenever a certain action is triggered (e.g.
|
112
|
+
the user logs in). Using this method is very simple and only requires the
|
113
|
+
following to be done:
|
114
|
+
|
115
|
+
session.resid!
|
116
|
+
|
117
|
+
## Flashdata
|
118
|
+
|
119
|
+
Flashdata is a form of session data that is removed as soon as the client
|
120
|
+
requests a new resource. This means that if something is stored in the flash and
|
121
|
+
the user is redirected the data will be automatically removed. One of the things
|
122
|
+
the flash data can be used for is storing notifications that are displayed if a
|
123
|
+
blog post has been saved successfully. Storing data in the flash works similar
|
124
|
+
to storing data in the session and can be done by calling the flash object:
|
125
|
+
|
126
|
+
flash[:message] = "Hello, Ramaze!"
|
127
|
+
|
128
|
+
If we want to remove something from the flash we can call Flash.delete similar
|
129
|
+
to Session.delete:
|
130
|
+
|
131
|
+
flash.delete(:message)
|
132
|
+
|
133
|
+
Note that due to the nature of the flash data you'd have to do this before the
|
134
|
+
client requests a new resource as the data will be deleted automatically at
|
135
|
+
that point.
|
136
|
+
|
137
|
+
To make it easier to display flash based messages you can use
|
138
|
+
{Ramaze::Helper::Flash#flashbox}. You can load this helper by calling
|
139
|
+
``helper(:flash)`` inside your controller.
|
140
|
+
|
141
|
+
Displaying the flashbox is then as simple as :
|
142
|
+
|
143
|
+
#{flashbox}
|
144
|
+
|
145
|
+
anywhere in your layouts or views.
|
146
|
+
|
147
|
+
To change the markup of the flashbox' HTML you can use the following trait
|
148
|
+
inside your controller:
|
149
|
+
|
150
|
+
trait :flashbox => "<div class=\"alert-message %key\"><p>%value</p></div>"
|
151
|
+
|
152
|
+
Below is an example of how the flash data can be used in a typical Ramaze
|
153
|
+
application:
|
154
|
+
|
155
|
+
class Blogs < Ramaze::Controller
|
156
|
+
map '/'
|
157
|
+
helper :flash
|
158
|
+
|
159
|
+
def index
|
160
|
+
flash[:message]
|
161
|
+
end
|
162
|
+
|
163
|
+
def set_message
|
164
|
+
flash[:message] = "Hello, Ramaze!"
|
165
|
+
redirect(Blogs.r(:index))
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
If a client were to visit the index method for the first time nothing would be
|
170
|
+
displayed because the flash data isn't there yet. As soon as the client visits
|
171
|
+
`/set_message` he would be redirected back to the index method and the message
|
172
|
+
"Hello, Ramaze!" would be displayed. Refreshing the page would clear the flash
|
173
|
+
data and the message would no longer be displayed until the client visits
|
174
|
+
/set\_message again.
|
175
|
+
|
176
|
+
In the above example, the content of the flash is returned by a method in the
|
177
|
+
controller. However, the most common scenario is to address the flash object
|
178
|
+
directly in the layouts or viems. You can display flash data (in your
|
179
|
+
layout for instance), just like any other variable :
|
180
|
+
|
181
|
+
#{flash[:message]}
|
182
|
+
|
183
|
+
and you can use any key in flash, and display in a view or in a layout
|
184
|
+
afterwards (no just :message of course).
|
185
|
+
|
186
|
+
For instance, let's say you want to display information boxes at the top of your
|
187
|
+
layout page. This information is displayed when an operation succeeds, fails, or
|
188
|
+
when you just want to inform the user. You can easily take advantage of your key
|
189
|
+
values and use them as css selectors like that :
|
190
|
+
|
191
|
+
....
|
192
|
+
<div>
|
193
|
+
<!-- flash -->
|
194
|
+
<?r [:success, :error, :info].each do |type| ?>
|
195
|
+
<?r if flash[type] ?>
|
196
|
+
|
197
|
+
<div class="alert alert-block alert-#{type} fade in">
|
198
|
+
<a class="close" data-dismiss="alert" href="#">×</a>
|
199
|
+
<h4 class="alert-heading">#{ type.capitalize }</h4>
|
200
|
+
#{flash[type]}
|
201
|
+
</div>
|
202
|
+
|
203
|
+
<?r end ?>
|
204
|
+
<?r end ?>
|
205
|
+
|
206
|
+
#{@content}
|
207
|
+
|
208
|
+
</div>
|
209
|
+
...
|
210
|
+
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# @title Special Thanks
|
2
|
+
# Special Thanks
|
3
|
+
|
4
|
+
There are a large number of people who made Ramaze possible by their ongoing
|
5
|
+
efforts in the world of open source and by encouraging and helping me.
|
6
|
+
|
7
|
+
This list is by no means a full listing of all these people, but I try to
|
8
|
+
get a good coverage despite that.
|
9
|
+
|
10
|
+
I would like to thank:
|
11
|
+
|
12
|
+
* Yukihiro Matsumoto a.k.a matz
|
13
|
+
|
14
|
+
For giving the world Ruby and bringing fun back into programming.
|
15
|
+
|
16
|
+
* Zed Shaw a.k.a. zedas
|
17
|
+
|
18
|
+
For developing Mongrel, Ramaze started out as a simple Hello World based on
|
19
|
+
that awesome server.
|
20
|
+
|
21
|
+
* Christian Neukirchen a.k.a chris2
|
22
|
+
|
23
|
+
For building rack, which is just what the numerous web-developers had
|
24
|
+
anticipated and which will, with no doubt, change the world.
|
25
|
+
|
26
|
+
* Pistos
|
27
|
+
|
28
|
+
For continious encouragment and building the first real webpage on Ramaze. His
|
29
|
+
bugreports were invaluable.
|
30
|
+
|
31
|
+
* Jim Weirich
|
32
|
+
|
33
|
+
For Rake, which lifts off a lot of tasks from the shoulders of every
|
34
|
+
developer who uses it.
|
35
|
+
|
36
|
+
* Thomas Sawyer a.k.a Trans
|
37
|
+
|
38
|
+
Dragging me deep into the rabbit-hole and showing me how awesome Ruby truely
|
39
|
+
is through his work on facets, ratchets and tons of other projects.
|
40
|
+
|
41
|
+
* George Moschovitis a.k.a gmosx
|
42
|
+
|
43
|
+
For his tremendous efforts in the Nitro/Og framework, which is a source of
|
44
|
+
steady inspiration for Ramaze and brought me to Ruby in the first place.
|
45
|
+
|
46
|
+
* Rob Levin a.k.a. lilo
|
47
|
+
|
48
|
+
He founded the most excellent Freenode IRC-network, where the most important
|
49
|
+
channels for rubyists are located (as is #ramaze). May he rest in peace.
|
50
|
+
|
51
|
+
* Loren Segal
|
52
|
+
|
53
|
+
For creating YARD. Without YARD we'd still be stuck using rdoc.
|
54
|
+
|
55
|
+
* The guys (and gals) in the various channels on Freenode.
|
56
|
+
|
57
|
+
As the people are way too many to be listed, here the channels that I call my
|
58
|
+
online home. All the people in there deserve special thanks for getting me
|
59
|
+
hooked to Ruby and providing their help in a friendly and patient manner:
|
60
|
+
|
61
|
+
* \#nitro
|
62
|
+
* \#ruby-de
|
63
|
+
* \#ruby-lang
|
64
|
+
* \#rubyforce
|
65
|
+
|
66
|
+
I'd also like to thank the following people for contributing to the guide:
|
67
|
+
|
68
|
+
* [Stas Sușcov](https://github.com/stas)
|
69
|
+
* [John Pagonis](https://github.com/pagojo)
|