ptomato-ramaze 2009.02
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.
- data/README.md +481 -0
- data/Rakefile +248 -0
- data/benchmark/results.txt +131 -0
- data/benchmark/run.rb +362 -0
- data/benchmark/suite/minimal.rb +13 -0
- data/benchmark/suite/no_informer.rb +9 -0
- data/benchmark/suite/no_sessions.rb +10 -0
- data/benchmark/suite/no_template.rb +9 -0
- data/benchmark/suite/simple.rb +7 -0
- data/benchmark/suite/template_amrita2.rb +17 -0
- data/benchmark/suite/template_builder.rb +12 -0
- data/benchmark/suite/template_erubis.rb +10 -0
- data/benchmark/suite/template_ezamar.rb +10 -0
- data/benchmark/suite/template_haml.rb +15 -0
- data/benchmark/suite/template_liquid.rb +13 -0
- data/benchmark/suite/template_markaby.rb +11 -0
- data/benchmark/suite/template_nagoro.rb +10 -0
- data/benchmark/suite/template_redcloth.rb +15 -0
- data/benchmark/suite/template_tenjin.rb +10 -0
- data/benchmark/test.rb +35 -0
- data/bin/ramaze +80 -0
- data/doc/AUTHORS +29 -0
- data/doc/CHANGELOG +19530 -0
- data/doc/COPYING +56 -0
- data/doc/FAQ +92 -0
- data/doc/GPL +339 -0
- data/doc/INSTALL +92 -0
- data/doc/LEGAL +26 -0
- data/doc/TODO +29 -0
- data/doc/meta/announcement.txt +99 -0
- data/doc/meta/configuration.txt +163 -0
- data/doc/meta/internals.txt +278 -0
- data/doc/meta/users.kml +64 -0
- data/doc/readme_chunks/appendix.txt +10 -0
- data/doc/readme_chunks/examples.txt +38 -0
- data/doc/readme_chunks/features.txt +148 -0
- data/doc/readme_chunks/getting_help.txt +5 -0
- data/doc/readme_chunks/getting_started.txt +18 -0
- data/doc/readme_chunks/installing.txt +92 -0
- data/doc/readme_chunks/introduction.txt +18 -0
- data/doc/readme_chunks/principles.txt +56 -0
- data/doc/readme_chunks/thanks.txt +59 -0
- data/doc/tutorial/todolist.html +742 -0
- data/doc/tutorial/todolist.mkd +787 -0
- data/examples/app/auth/auth.rb +54 -0
- data/examples/app/auth/template/layout.haml +20 -0
- data/examples/app/auth/template/login.haml +16 -0
- data/examples/app/blog/README +3 -0
- data/examples/app/blog/controller/main.rb +29 -0
- data/examples/app/blog/model/entry.rb +30 -0
- data/examples/app/blog/public/styles/blog.css +132 -0
- data/examples/app/blog/spec/blog.rb +87 -0
- data/examples/app/blog/start.rb +7 -0
- data/examples/app/blog/view/edit.xhtml +17 -0
- data/examples/app/blog/view/index.xhtml +17 -0
- data/examples/app/blog/view/layout.xhtml +11 -0
- data/examples/app/blog/view/new.xhtml +16 -0
- data/examples/app/chat/model/history.rb +36 -0
- data/examples/app/chat/model/message.rb +7 -0
- data/examples/app/chat/public/css/chat.css +13 -0
- data/examples/app/chat/public/js/chat.js +22 -0
- data/examples/app/chat/public/js/jquery.js +3436 -0
- data/examples/app/chat/start.rb +40 -0
- data/examples/app/chat/view/chat.xhtml +9 -0
- data/examples/app/chat/view/index.xhtml +7 -0
- data/examples/app/chat/view/layout.xhtml +13 -0
- data/examples/app/localization/start.rb +35 -0
- data/examples/app/rapaste/Rakefile +34 -0
- data/examples/app/rapaste/controller/paste.rb +101 -0
- data/examples/app/rapaste/model/paste.rb +58 -0
- data/examples/app/rapaste/public/css/active4d.css +114 -0
- data/examples/app/rapaste/public/css/all_hallows_eve.css +72 -0
- data/examples/app/rapaste/public/css/amy.css +147 -0
- data/examples/app/rapaste/public/css/blackboard.css +88 -0
- data/examples/app/rapaste/public/css/brilliance_black.css +605 -0
- data/examples/app/rapaste/public/css/brilliance_dull.css +599 -0
- data/examples/app/rapaste/public/css/cobalt.css +149 -0
- data/examples/app/rapaste/public/css/dawn.css +121 -0
- data/examples/app/rapaste/public/css/display.css +197 -0
- data/examples/app/rapaste/public/css/eiffel.css +121 -0
- data/examples/app/rapaste/public/css/espresso_libre.css +109 -0
- data/examples/app/rapaste/public/css/idle.css +62 -0
- data/examples/app/rapaste/public/css/iplastic.css +80 -0
- data/examples/app/rapaste/public/css/lazy.css +73 -0
- data/examples/app/rapaste/public/css/mac_classic.css +123 -0
- data/examples/app/rapaste/public/css/magicwb_amiga.css +104 -0
- data/examples/app/rapaste/public/css/pastels_on_dark.css +188 -0
- data/examples/app/rapaste/public/css/slush_poppies.css +85 -0
- data/examples/app/rapaste/public/css/spacecadet.css +51 -0
- data/examples/app/rapaste/public/css/sunburst.css +180 -0
- data/examples/app/rapaste/public/css/twilight.css +137 -0
- data/examples/app/rapaste/public/css/zenburnesque.css +91 -0
- data/examples/app/rapaste/public/js/jquery.js +11 -0
- data/examples/app/rapaste/spec/rapaste.rb +51 -0
- data/examples/app/rapaste/start.rb +25 -0
- data/examples/app/rapaste/view/copy.xhtml +10 -0
- data/examples/app/rapaste/view/index.xhtml +9 -0
- data/examples/app/rapaste/view/layout.xhtml +25 -0
- data/examples/app/rapaste/view/list.xhtml +29 -0
- data/examples/app/rapaste/view/search.xhtml +41 -0
- data/examples/app/rapaste/view/view.xhtml +40 -0
- data/examples/app/sourceview/public/coderay.css +104 -0
- data/examples/app/sourceview/public/images/file.gif +0 -0
- data/examples/app/sourceview/public/images/folder.gif +0 -0
- data/examples/app/sourceview/public/images/tv-collapsable-last.gif +0 -0
- data/examples/app/sourceview/public/images/tv-collapsable.gif +0 -0
- data/examples/app/sourceview/public/images/tv-expandable-last.gif +0 -0
- data/examples/app/sourceview/public/images/tv-expandable.gif +0 -0
- data/examples/app/sourceview/public/images/tv-item-last.gif +0 -0
- data/examples/app/sourceview/public/images/tv-item.gif +0 -0
- data/examples/app/sourceview/public/jquery.js +11 -0
- data/examples/app/sourceview/public/jquery.treeview.css +48 -0
- data/examples/app/sourceview/public/jquery.treeview.js +223 -0
- data/examples/app/sourceview/public/sourceview.js +52 -0
- data/examples/app/sourceview/sourceview.rb +77 -0
- data/examples/app/sourceview/template/index.haml +59 -0
- data/examples/app/todolist/README +1 -0
- data/examples/app/todolist/public/favicon.ico +0 -0
- data/examples/app/todolist/public/js/jquery.js +1923 -0
- data/examples/app/todolist/public/ramaze.png +0 -0
- data/examples/app/todolist/spec/todolist.rb +132 -0
- data/examples/app/todolist/src/controller/main.rb +70 -0
- data/examples/app/todolist/src/element/page.rb +31 -0
- data/examples/app/todolist/src/model.rb +14 -0
- data/examples/app/todolist/start.rb +11 -0
- data/examples/app/todolist/template/index.xhtml +17 -0
- data/examples/app/todolist/template/new.xhtml +7 -0
- data/examples/app/upload/start.rb +19 -0
- data/examples/app/upload/view/index.xhtml +25 -0
- data/examples/app/whywiki/spec/whywiki.rb +58 -0
- data/examples/app/whywiki/start.rb +46 -0
- data/examples/app/whywiki/template/edit.xhtml +14 -0
- data/examples/app/whywiki/template/show.xhtml +18 -0
- data/examples/app/wikore/spec/wikore.rb +111 -0
- data/examples/app/wikore/src/controller.rb +80 -0
- data/examples/app/wikore/src/model.rb +53 -0
- data/examples/app/wikore/start.rb +9 -0
- data/examples/app/wikore/template/index.xhtml +8 -0
- data/examples/app/wiktacular/README +2 -0
- data/examples/app/wiktacular/mkd/link/2007-07-20_19-45-51.mkd +1 -0
- data/examples/app/wiktacular/mkd/link/current.mkd +1 -0
- data/examples/app/wiktacular/mkd/main/2007-07-20_16-31-33.mkd +1 -0
- data/examples/app/wiktacular/mkd/main/2007-07-20_19-21-12.mkd +1 -0
- 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/app/wiktacular/mkd/markdown/current.mkd +3 -0
- data/examples/app/wiktacular/mkd/testing/2007-07-20_16-43-46.mkd +2 -0
- data/examples/app/wiktacular/mkd/testing/2007-07-20_19-43-50.mkd +3 -0
- data/examples/app/wiktacular/mkd/testing/2007-07-21_18-46-01.mkd +11 -0
- data/examples/app/wiktacular/mkd/testing/2007-07-21_18-46-32.mkd +13 -0
- data/examples/app/wiktacular/mkd/testing/2007-07-21_18-47-08.mkd +17 -0
- data/examples/app/wiktacular/mkd/testing/2007-07-21_18-47-54.mkd +17 -0
- data/examples/app/wiktacular/mkd/testing/current.mkd +17 -0
- data/examples/app/wiktacular/public/favicon.ico +0 -0
- data/examples/app/wiktacular/public/screen.css +72 -0
- data/examples/app/wiktacular/spec/wiktacular.rb +157 -0
- data/examples/app/wiktacular/src/controller.rb +55 -0
- data/examples/app/wiktacular/src/model.rb +102 -0
- data/examples/app/wiktacular/start.rb +8 -0
- data/examples/app/wiktacular/template/edit.xhtml +6 -0
- data/examples/app/wiktacular/template/html_layout.xhtml +27 -0
- data/examples/app/wiktacular/template/index.xhtml +9 -0
- data/examples/app/wiktacular/template/new.xhtml +6 -0
- data/examples/basic/element.rb +45 -0
- data/examples/basic/gestalt.rb +27 -0
- data/examples/basic/hello.rb +15 -0
- data/examples/basic/layout.rb +28 -0
- data/examples/basic/linking.rb +29 -0
- data/examples/basic/partial.rb +28 -0
- data/examples/basic/simple.rb +56 -0
- data/examples/helpers/cache.rb +31 -0
- data/examples/helpers/form_with_sequel.rb +24 -0
- data/examples/helpers/httpdigest.rb +108 -0
- data/examples/helpers/identity.rb +18 -0
- data/examples/helpers/nitro_form.rb +23 -0
- data/examples/helpers/paginate.rb +71 -0
- data/examples/helpers/provide.rb +23 -0
- data/examples/helpers/rest.rb +28 -0
- data/examples/helpers/simple_captcha.rb +29 -0
- data/examples/misc/css.rb +37 -0
- data/examples/misc/facebook.rb +159 -0
- data/examples/misc/memleak_detector.rb +32 -0
- data/examples/misc/nagoro_element.rb +43 -0
- data/examples/misc/ramaise.rb +132 -0
- data/examples/misc/rapp.rb +45 -0
- data/examples/misc/sequel_scaffolding.rb +34 -0
- data/examples/misc/simple_auth.rb +35 -0
- data/examples/templates/template/external.amrita +19 -0
- data/examples/templates/template/external.haml +22 -0
- data/examples/templates/template/external.liquid +28 -0
- data/examples/templates/template/external.mab +30 -0
- data/examples/templates/template/external.nag +28 -0
- data/examples/templates/template/external.redcloth +19 -0
- data/examples/templates/template/external.rem +30 -0
- data/examples/templates/template/external.rhtml +28 -0
- data/examples/templates/template/external.tenjin +28 -0
- data/examples/templates/template/external.xsl +57 -0
- data/examples/templates/template/external.zmr +28 -0
- data/examples/templates/template_amrita2.rb +74 -0
- data/examples/templates/template_erubis.rb +53 -0
- data/examples/templates/template_ezamar.rb +50 -0
- data/examples/templates/template_haml.rb +50 -0
- data/examples/templates/template_liquid.rb +65 -0
- data/examples/templates/template_markaby.rb +58 -0
- data/examples/templates/template_nagoro.rb +51 -0
- data/examples/templates/template_redcloth.rb +59 -0
- data/examples/templates/template_remarkably.rb +55 -0
- data/examples/templates/template_tenjin.rb +53 -0
- data/examples/templates/template_xslt.rb +49 -0
- data/lib/proto/controller/init.rb +11 -0
- data/lib/proto/controller/main.rb +20 -0
- data/lib/proto/model/init.rb +4 -0
- data/lib/proto/public/.htaccess +24 -0
- data/lib/proto/public/css/ramaze_error.css +90 -0
- data/lib/proto/public/dispatch.fcgi +11 -0
- data/lib/proto/public/favicon.ico +0 -0
- data/lib/proto/public/js/jquery.js +3549 -0
- data/lib/proto/public/ramaze.png +0 -0
- data/lib/proto/spec/main.rb +25 -0
- data/lib/proto/start.rb +12 -0
- data/lib/proto/start.ru +16 -0
- data/lib/proto/view/error.xhtml +64 -0
- data/lib/proto/view/index.xhtml +34 -0
- data/lib/proto/view/page.xhtml +27 -0
- data/lib/ramaze/action/render.rb +192 -0
- data/lib/ramaze/action.rb +159 -0
- data/lib/ramaze/adapter/base.rb +128 -0
- data/lib/ramaze/adapter/cgi.rb +20 -0
- data/lib/ramaze/adapter/ebb.rb +18 -0
- data/lib/ramaze/adapter/evented_mongrel.rb +7 -0
- data/lib/ramaze/adapter/fake.rb +12 -0
- data/lib/ramaze/adapter/fcgi.rb +18 -0
- data/lib/ramaze/adapter/lsws.rb +19 -0
- data/lib/ramaze/adapter/mongrel.rb +21 -0
- data/lib/ramaze/adapter/scgi.rb +18 -0
- data/lib/ramaze/adapter/swiftiplied_mongrel.rb +7 -0
- data/lib/ramaze/adapter/thin.rb +17 -0
- data/lib/ramaze/adapter/webrick.rb +43 -0
- data/lib/ramaze/adapter.rb +97 -0
- data/lib/ramaze/cache/file.rb +71 -0
- data/lib/ramaze/cache/memcached.rb +69 -0
- data/lib/ramaze/cache/memory.rb +6 -0
- data/lib/ramaze/cache/yaml_store.rb +68 -0
- data/lib/ramaze/cache.rb +114 -0
- data/lib/ramaze/contrib/email.rb +86 -0
- data/lib/ramaze/contrib/facebook/facebook.rb +171 -0
- data/lib/ramaze/contrib/facebook.rb +23 -0
- data/lib/ramaze/contrib/file_cache.rb +3 -0
- data/lib/ramaze/contrib/gems.rb +78 -0
- data/lib/ramaze/contrib/gettext/mo.rb +155 -0
- data/lib/ramaze/contrib/gettext/parser.rb +46 -0
- data/lib/ramaze/contrib/gettext/po.rb +109 -0
- data/lib/ramaze/contrib/gettext.rb +113 -0
- data/lib/ramaze/contrib/gzip_filter.rb +69 -0
- data/lib/ramaze/contrib/maruku_uv.rb +59 -0
- data/lib/ramaze/contrib/profiling.rb +36 -0
- data/lib/ramaze/contrib/rest.rb +17 -0
- data/lib/ramaze/contrib/sequel/create_join.rb +25 -0
- data/lib/ramaze/contrib/sequel/fill.rb +12 -0
- data/lib/ramaze/contrib/sequel/form_field.rb +129 -0
- data/lib/ramaze/contrib/sequel/image.rb +198 -0
- data/lib/ramaze/contrib/sequel/relation.rb +82 -0
- data/lib/ramaze/contrib/sequel_cache.rb +92 -0
- data/lib/ramaze/contrib.rb +82 -0
- data/lib/ramaze/controller/error.rb +46 -0
- data/lib/ramaze/controller/main.rb +2 -0
- data/lib/ramaze/controller/resolve.rb +278 -0
- data/lib/ramaze/controller.rb +288 -0
- data/lib/ramaze/current/request.rb +231 -0
- data/lib/ramaze/current/response.rb +37 -0
- data/lib/ramaze/current/session/flash.rb +88 -0
- data/lib/ramaze/current/session/hash.rb +62 -0
- data/lib/ramaze/current/session.rb +179 -0
- data/lib/ramaze/current.rb +51 -0
- data/lib/ramaze/dispatcher/action.rb +50 -0
- data/lib/ramaze/dispatcher/directory.rb +119 -0
- data/lib/ramaze/dispatcher/error.rb +108 -0
- data/lib/ramaze/dispatcher/file.rb +100 -0
- data/lib/ramaze/dispatcher.rb +145 -0
- data/lib/ramaze/error.rb +24 -0
- data/lib/ramaze/gestalt.rb +124 -0
- data/lib/ramaze/helper/aspect.rb +106 -0
- data/lib/ramaze/helper/auth.rb +125 -0
- data/lib/ramaze/helper/bench.rb +43 -0
- data/lib/ramaze/helper/cache.rb +140 -0
- data/lib/ramaze/helper/cgi.rb +39 -0
- data/lib/ramaze/helper/flash.rb +74 -0
- data/lib/ramaze/helper/form.rb +284 -0
- data/lib/ramaze/helper/formatting.rb +162 -0
- data/lib/ramaze/helper/gestalt.rb +15 -0
- data/lib/ramaze/helper/gravatar.rb +32 -0
- data/lib/ramaze/helper/httpdigest.rb +88 -0
- data/lib/ramaze/helper/identity.rb +119 -0
- data/lib/ramaze/helper/link.rb +122 -0
- data/lib/ramaze/helper/markaby.rb +31 -0
- data/lib/ramaze/helper/maruku.rb +9 -0
- data/lib/ramaze/helper/nitroform.rb +14 -0
- data/lib/ramaze/helper/pager.rb +366 -0
- data/lib/ramaze/helper/paginate.rb +233 -0
- data/lib/ramaze/helper/partial.rb +105 -0
- data/lib/ramaze/helper/redirect.rb +100 -0
- data/lib/ramaze/helper/rest.rb +43 -0
- data/lib/ramaze/helper/sendfile.rb +16 -0
- data/lib/ramaze/helper/sequel.rb +55 -0
- data/lib/ramaze/helper/simple_captcha.rb +31 -0
- data/lib/ramaze/helper/stack.rb +77 -0
- data/lib/ramaze/helper/tagz.rb +19 -0
- data/lib/ramaze/helper/thread.rb +17 -0
- data/lib/ramaze/helper/ultraviolet.rb +44 -0
- data/lib/ramaze/helper/user.rb +110 -0
- data/lib/ramaze/helper/xhtml.rb +23 -0
- data/lib/ramaze/helper.rb +87 -0
- data/lib/ramaze/log/analogger.rb +40 -0
- data/lib/ramaze/log/growl.rb +38 -0
- data/lib/ramaze/log/hub.rb +41 -0
- data/lib/ramaze/log/informer.rb +128 -0
- data/lib/ramaze/log/knotify.rb +28 -0
- data/lib/ramaze/log/logger.rb +26 -0
- data/lib/ramaze/log/logging.rb +89 -0
- data/lib/ramaze/log/rotatinginformer.rb +168 -0
- data/lib/ramaze/log/syslog.rb +51 -0
- data/lib/ramaze/log/xosd.rb +92 -0
- data/lib/ramaze/log.rb +27 -0
- data/lib/ramaze/option/dsl.rb +45 -0
- data/lib/ramaze/option/holder.rb +131 -0
- data/lib/ramaze/option/merger.rb +108 -0
- data/lib/ramaze/option.rb +156 -0
- data/lib/ramaze/reloader/watch_inotify.rb +85 -0
- data/lib/ramaze/reloader/watch_stat.rb +58 -0
- data/lib/ramaze/reloader.rb +170 -0
- data/lib/ramaze/route.rb +97 -0
- data/lib/ramaze/setup.rb +50 -0
- data/lib/ramaze/snippets/array/put_within.rb +44 -0
- data/lib/ramaze/snippets/binding/locals.rb +25 -0
- data/lib/ramaze/snippets/blankslate.rb +7 -0
- data/lib/ramaze/snippets/dictionary.rb +504 -0
- data/lib/ramaze/snippets/divide.rb +22 -0
- data/lib/ramaze/snippets/fiber.rb +63 -0
- data/lib/ramaze/snippets/kernel/constant.rb +41 -0
- data/lib/ramaze/snippets/kernel/pretty_inspect.rb +21 -0
- data/lib/ramaze/snippets/metaid.rb +17 -0
- data/lib/ramaze/snippets/numeric/filesize_format.rb +32 -0
- data/lib/ramaze/snippets/numeric/time.rb +63 -0
- data/lib/ramaze/snippets/object/__dir__.rb +29 -0
- data/lib/ramaze/snippets/object/acquire.rb +37 -0
- data/lib/ramaze/snippets/object/instance_variable_defined.rb +19 -0
- data/lib/ramaze/snippets/object/pretty.rb +16 -0
- data/lib/ramaze/snippets/object/scope.rb +18 -0
- data/lib/ramaze/snippets/object/traits.rb +76 -0
- data/lib/ramaze/snippets/ordered_set.rb +51 -0
- data/lib/ramaze/snippets/proc/locals.rb +19 -0
- data/lib/ramaze/snippets/ramaze/acquire.rb +31 -0
- data/lib/ramaze/snippets/ramaze/caller_info.rb +30 -0
- data/lib/ramaze/snippets/ramaze/caller_lines.rb +51 -0
- data/lib/ramaze/snippets/ramaze/deprecated.rb +21 -0
- data/lib/ramaze/snippets/ramaze/fiber.rb +24 -0
- data/lib/ramaze/snippets/ramaze/state.rb +86 -0
- data/lib/ramaze/snippets/ramaze/struct.rb +45 -0
- data/lib/ramaze/snippets/string/camel_case.rb +21 -0
- data/lib/ramaze/snippets/string/color.rb +31 -0
- data/lib/ramaze/snippets/string/each.rb +19 -0
- data/lib/ramaze/snippets/string/end_with.rb +20 -0
- data/lib/ramaze/snippets/string/esc.rb +34 -0
- data/lib/ramaze/snippets/string/ord.rb +21 -0
- data/lib/ramaze/snippets/string/snake_case.rb +21 -0
- data/lib/ramaze/snippets/string/start_with.rb +19 -0
- data/lib/ramaze/snippets/string/unindent.rb +28 -0
- data/lib/ramaze/snippets/thread/into.rb +18 -0
- data/lib/ramaze/snippets.rb +22 -0
- data/lib/ramaze/spec/helper/bacon.rb +7 -0
- data/lib/ramaze/spec/helper/browser.rb +88 -0
- data/lib/ramaze/spec/helper/mock_http.rb +64 -0
- data/lib/ramaze/spec/helper/pretty_output.rb +82 -0
- data/lib/ramaze/spec/helper/requester.rb +63 -0
- data/lib/ramaze/spec/helper/simple_http.rb +434 -0
- data/lib/ramaze/spec/helper/snippets.rb +14 -0
- data/lib/ramaze/spec/helper.rb +135 -0
- data/lib/ramaze/spec.rb +1 -0
- data/lib/ramaze/store/default.rb +109 -0
- data/lib/ramaze/template/amrita2.rb +49 -0
- data/lib/ramaze/template/builder.rb +28 -0
- data/lib/ramaze/template/erubis.rb +41 -0
- data/lib/ramaze/template/ezamar/element.rb +169 -0
- data/lib/ramaze/template/ezamar/engine.rb +76 -0
- data/lib/ramaze/template/ezamar/morpher.rb +135 -0
- data/lib/ramaze/template/ezamar/render_partial.rb +39 -0
- data/lib/ramaze/template/ezamar/textpow.syntax +34 -0
- data/lib/ramaze/template/ezamar.rb +42 -0
- data/lib/ramaze/template/haml.rb +37 -0
- data/lib/ramaze/template/liquid.rb +36 -0
- data/lib/ramaze/template/markaby.rb +52 -0
- data/lib/ramaze/template/maruku.rb +34 -0
- data/lib/ramaze/template/nagoro.rb +52 -0
- data/lib/ramaze/template/none.rb +14 -0
- data/lib/ramaze/template/redcloth.rb +25 -0
- data/lib/ramaze/template/remarkably.rb +38 -0
- data/lib/ramaze/template/sass.rb +38 -0
- data/lib/ramaze/template/tagz.rb +79 -0
- data/lib/ramaze/template/tenjin.rb +74 -0
- data/lib/ramaze/template/xslt.rb +100 -0
- data/lib/ramaze/template.rb +87 -0
- data/lib/ramaze/tool/create.rb +48 -0
- data/lib/ramaze/tool/daemonize.rb +37 -0
- data/lib/ramaze/tool/localize.rb +202 -0
- data/lib/ramaze/tool/mime.rb +35 -0
- data/lib/ramaze/tool/mime_types.yaml +615 -0
- data/lib/ramaze/tool/project_creator.rb +111 -0
- data/lib/ramaze/tool/record.rb +6 -0
- data/lib/ramaze/tool.rb +9 -0
- data/lib/ramaze/trinity.rb +16 -0
- data/lib/ramaze/version.rb +6 -0
- data/lib/ramaze.rb +139 -0
- data/lib/vendor/bacon.rb +323 -0
- data/rake_tasks/conf.rake +71 -0
- data/rake_tasks/coverage.rake +45 -0
- data/rake_tasks/gem.rake +74 -0
- data/rake_tasks/git.rake +41 -0
- data/rake_tasks/maintenance.rake +386 -0
- data/rake_tasks/metric.rake +24 -0
- data/rake_tasks/release.rake +76 -0
- data/rake_tasks/spec.rake +61 -0
- data/ramaze.gemspec +611 -0
- data/spec/contrib/profiling.rb +29 -0
- data/spec/contrib/sequel/fill.rb +47 -0
- data/spec/examples/caching.rb +19 -0
- data/spec/examples/css.rb +15 -0
- data/spec/examples/element.rb +15 -0
- data/spec/examples/hello.rb +11 -0
- data/spec/examples/linking.rb +18 -0
- data/spec/examples/simple.rb +45 -0
- data/spec/examples/simple_auth.rb +32 -0
- data/spec/examples/templates/template_amrita2.rb +16 -0
- data/spec/examples/templates/template_erubis.rb +23 -0
- data/spec/examples/templates/template_ezamar.rb +23 -0
- data/spec/examples/templates/template_haml.rb +23 -0
- data/spec/examples/templates/template_liquid.rb +29 -0
- data/spec/examples/templates/template_markaby.rb +23 -0
- data/spec/examples/templates/template_redcloth.rb +28 -0
- data/spec/examples/templates/template_remarkably.rb +23 -0
- data/spec/examples/templates/template_tenjin.rb +28 -0
- data/spec/helper.rb +3 -0
- data/spec/ramaze/action/basics.rb +36 -0
- data/spec/ramaze/action/cache.rb +87 -0
- data/spec/ramaze/action/file_cache.rb +70 -0
- data/spec/ramaze/action/layout.rb +190 -0
- data/spec/ramaze/action/render.rb +31 -0
- data/spec/ramaze/action/view/bar.xhtml +1 -0
- data/spec/ramaze/action/view/instancevars/layout.xhtml +1 -0
- data/spec/ramaze/action/view/other_wrapper.xhtml +1 -0
- data/spec/ramaze/action/view/single_wrapper.xhtml +1 -0
- data/spec/ramaze/action/view/sub/sub_wrapper.xhtml +1 -0
- data/spec/ramaze/adapter/ebb.rb +12 -0
- data/spec/ramaze/adapter/mongrel.rb +12 -0
- data/spec/ramaze/adapter/record.rb +31 -0
- data/spec/ramaze/adapter/webrick.rb +12 -0
- data/spec/ramaze/adapter.rb +49 -0
- data/spec/ramaze/cache.rb +140 -0
- data/spec/ramaze/controller/actionless_templates.rb +32 -0
- data/spec/ramaze/controller/resolve.rb +32 -0
- data/spec/ramaze/controller/subclass.rb +36 -0
- data/spec/ramaze/controller/template_resolving.rb +113 -0
- data/spec/ramaze/controller/view/bar.xhtml +1 -0
- data/spec/ramaze/controller/view/base/another.xhtml +1 -0
- data/spec/ramaze/controller/view/greet.xhtml +1 -0
- data/spec/ramaze/controller/view/list.xhtml +1 -0
- data/spec/ramaze/controller/view/other/greet/other.xhtml +1 -0
- data/spec/ramaze/controller/view/other_wrapper.xhtml +1 -0
- data/spec/ramaze/controller.rb +180 -0
- data/spec/ramaze/current/request.rb +30 -0
- data/spec/ramaze/current/session.rb +97 -0
- data/spec/ramaze/dispatcher/directory.rb +55 -0
- data/spec/ramaze/dispatcher/file.rb +60 -0
- data/spec/ramaze/dispatcher/public/favicon.ico +0 -0
- data/spec/ramaze/dispatcher/public/file name.txt +1 -0
- data/spec/ramaze/dispatcher/public/test_download.css +141 -0
- data/spec/ramaze/dispatcher.rb +31 -0
- data/spec/ramaze/element.rb +107 -0
- data/spec/ramaze/error.rb +94 -0
- data/spec/ramaze/gestalt.rb +131 -0
- data/spec/ramaze/helper/aspect.rb +101 -0
- data/spec/ramaze/helper/auth.rb +66 -0
- data/spec/ramaze/helper/cache.rb +160 -0
- data/spec/ramaze/helper/cgi.rb +43 -0
- data/spec/ramaze/helper/file.rb +18 -0
- data/spec/ramaze/helper/flash.rb +133 -0
- data/spec/ramaze/helper/form.rb +118 -0
- data/spec/ramaze/helper/formatting.rb +54 -0
- data/spec/ramaze/helper/link.rb +124 -0
- data/spec/ramaze/helper/pager.rb +99 -0
- data/spec/ramaze/helper/partial.rb +88 -0
- data/spec/ramaze/helper/redirect.rb +112 -0
- data/spec/ramaze/helper/simple_captcha.rb +22 -0
- data/spec/ramaze/helper/stack.rb +73 -0
- data/spec/ramaze/helper/user.rb +43 -0
- data/spec/ramaze/helper/view/locals.xhtml +1 -0
- data/spec/ramaze/helper/view/loop.xhtml +4 -0
- data/spec/ramaze/helper/view/num.xhtml +1 -0
- data/spec/ramaze/helper/view/partial.xhtml +1 -0
- data/spec/ramaze/helper/view/recursive.xhtml +8 -0
- data/spec/ramaze/helper/view/recursive_local_ivars.xhtml +7 -0
- data/spec/ramaze/helper/view/recursive_locals.xhtml +7 -0
- data/spec/ramaze/helper/view/test_template.xhtml +1 -0
- data/spec/ramaze/localize.rb +89 -0
- data/spec/ramaze/log/informer.rb +72 -0
- data/spec/ramaze/log/syslog.rb +76 -0
- data/spec/ramaze/morpher.rb +111 -0
- data/spec/ramaze/params.rb +157 -0
- data/spec/ramaze/public/error404.xhtml +1 -0
- data/spec/ramaze/public/favicon.ico +0 -0
- data/spec/ramaze/public/ramaze.png +0 -0
- data/spec/ramaze/public/test_download.css +141 -0
- data/spec/ramaze/request/ebb.rb +9 -0
- data/spec/ramaze/request/mongrel.rb +9 -0
- data/spec/ramaze/request/thin.rb +9 -0
- data/spec/ramaze/request/webrick.rb +5 -0
- data/spec/ramaze/request.rb +185 -0
- data/spec/ramaze/rewrite/file.css +1 -0
- data/spec/ramaze/rewrite.rb +36 -0
- data/spec/ramaze/route.rb +131 -0
- data/spec/ramaze/session.rb +94 -0
- data/spec/ramaze/store/default.rb +71 -0
- data/spec/ramaze/struct.rb +47 -0
- data/spec/ramaze/template/amrita2/external.amrita +6 -0
- data/spec/ramaze/template/amrita2/sum.amrita +1 -0
- data/spec/ramaze/template/amrita2.rb +50 -0
- data/spec/ramaze/template/builder/external.rxml +3 -0
- data/spec/ramaze/template/builder.rb +51 -0
- data/spec/ramaze/template/erubis/sum.rhtml +1 -0
- data/spec/ramaze/template/erubis.rb +41 -0
- data/spec/ramaze/template/ezamar/another/long/action.zmr +1 -0
- data/spec/ramaze/template/ezamar/combined.zmr +1 -0
- data/spec/ramaze/template/ezamar/file_only.zmr +1 -0
- data/spec/ramaze/template/ezamar/index.zmr +1 -0
- data/spec/ramaze/template/ezamar/nested.zmr +1 -0
- data/spec/ramaze/template/ezamar/other__index.xhtml +1 -0
- data/spec/ramaze/template/ezamar/some__long__action.zmr +1 -0
- data/spec/ramaze/template/ezamar/sum.zmr +1 -0
- data/spec/ramaze/template/ezamar.rb +63 -0
- data/spec/ramaze/template/haml/index.haml +5 -0
- data/spec/ramaze/template/haml/locals.haml +2 -0
- data/spec/ramaze/template/haml/with_vars.haml +4 -0
- data/spec/ramaze/template/haml.rb +66 -0
- data/spec/ramaze/template/liquid/index.liquid +1 -0
- data/spec/ramaze/template/liquid/products.liquid +45 -0
- data/spec/ramaze/template/liquid.rb +99 -0
- data/spec/ramaze/template/markaby/external.mab +8 -0
- data/spec/ramaze/template/markaby/sum.mab +1 -0
- data/spec/ramaze/template/markaby.rb +61 -0
- data/spec/ramaze/template/nagoro/another/long/action.nag +1 -0
- data/spec/ramaze/template/nagoro/combined.nag +1 -0
- data/spec/ramaze/template/nagoro/file_only.nag +1 -0
- data/spec/ramaze/template/nagoro/index.nag +1 -0
- data/spec/ramaze/template/nagoro/nested.nag +1 -0
- data/spec/ramaze/template/nagoro/some__long__action.nag +1 -0
- data/spec/ramaze/template/nagoro/sum.nag +1 -0
- data/spec/ramaze/template/nagoro.rb +64 -0
- data/spec/ramaze/template/ramaze/external.test +1 -0
- data/spec/ramaze/template/redcloth/external.redcloth +1 -0
- data/spec/ramaze/template/redcloth.rb +38 -0
- data/spec/ramaze/template/remarkably/external.rem +8 -0
- data/spec/ramaze/template/remarkably/sum.rem +1 -0
- data/spec/ramaze/template/remarkably.rb +58 -0
- data/spec/ramaze/template/sass/file.css.sass +5 -0
- data/spec/ramaze/template/sass.rb +70 -0
- data/spec/ramaze/template/tagz/external.tagz +8 -0
- data/spec/ramaze/template/tagz/sum.tagz +1 -0
- data/spec/ramaze/template/tagz.rb +62 -0
- data/spec/ramaze/template/tenjin/external.tenjin +1 -0
- data/spec/ramaze/template/tenjin.rb +47 -0
- data/spec/ramaze/template/xslt/concat_words.xsl +16 -0
- data/spec/ramaze/template/xslt/index.xsl +14 -0
- data/spec/ramaze/template/xslt/products.xsl +32 -0
- data/spec/ramaze/template/xslt/ruby_version.xsl +14 -0
- data/spec/ramaze/template/xslt.rb +90 -0
- data/spec/ramaze/template.rb +128 -0
- data/spec/snippets/array/put_within.rb +33 -0
- data/spec/snippets/binding/locals.rb +9 -0
- data/spec/snippets/kernel/constant.rb +23 -0
- data/spec/snippets/numeric/filesize_format.rb +12 -0
- data/spec/snippets/numeric/time.rb +12 -0
- data/spec/snippets/object/__dir__.rb +14 -0
- data/spec/snippets/ordered_set.rb +63 -0
- data/spec/snippets/ramaze/acquire.rb +77 -0
- data/spec/snippets/ramaze/caller_info.rb +39 -0
- data/spec/snippets/ramaze/caller_lines.rb +30 -0
- data/spec/snippets/string/camel_case.rb +25 -0
- data/spec/snippets/string/color.rb +11 -0
- data/spec/snippets/string/snake_case.rb +24 -0
- data/spec/snippets/string/unindent.rb +43 -0
- data/spec/snippets/thread/into.rb +20 -0
- metadata +661 -0
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
# Copyright (c) 2008 Michael Fellinger m.fellinger@gmail.com
|
|
2
|
+
# All files in this distribution are subject to the terms of the Ruby license.
|
|
3
|
+
|
|
4
|
+
require 'ramaze/helper'
|
|
5
|
+
require 'ramaze/template'
|
|
6
|
+
require 'ramaze/action'
|
|
7
|
+
|
|
8
|
+
require 'ramaze/controller/resolve'
|
|
9
|
+
require 'ramaze/controller/error'
|
|
10
|
+
|
|
11
|
+
module Ramaze
|
|
12
|
+
|
|
13
|
+
# The Controller is responsible for combining and rendering actions.
|
|
14
|
+
|
|
15
|
+
class Controller
|
|
16
|
+
include Helper::Methods
|
|
17
|
+
|
|
18
|
+
helper :redirect, :link, :sendfile, :flash, :cgi, :partial
|
|
19
|
+
|
|
20
|
+
# Whether or not to map this controller on startup automatically
|
|
21
|
+
|
|
22
|
+
trait[:automap] ||= true
|
|
23
|
+
|
|
24
|
+
# Place to map the Controller to, this is something like '/' or '/foo'
|
|
25
|
+
|
|
26
|
+
trait[:map] ||= nil
|
|
27
|
+
|
|
28
|
+
# Caches patterns for the given path.
|
|
29
|
+
|
|
30
|
+
trait :pattern_cache => Hash.new{|h,k| h[k] = Controller.pattern_for(k) }
|
|
31
|
+
|
|
32
|
+
class << self
|
|
33
|
+
# When Controller is subclassed the resulting class is placed in
|
|
34
|
+
# Global.controllers and a new trait :actions_cached is set on it.
|
|
35
|
+
|
|
36
|
+
def inherited controller
|
|
37
|
+
controller.trait :actions_cached => {}
|
|
38
|
+
Global.controllers << controller
|
|
39
|
+
if map = controller.mapping
|
|
40
|
+
Log.dev("mapping #{map} => #{controller}")
|
|
41
|
+
Global.mapping[map] ||= controller
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# called from Ramaze.startup, adds Cache.actions and Cache.patterns, walks
|
|
46
|
+
# all controllers subclassed so far and adds them to the Global.mapping if
|
|
47
|
+
# they are not assigned yet.
|
|
48
|
+
|
|
49
|
+
def startup options = {}
|
|
50
|
+
Log.dev("found Controllers: #{Global.controllers.inspect}")
|
|
51
|
+
|
|
52
|
+
check_path("Public root: '%s' doesn't exist", Global.public_root)
|
|
53
|
+
check_path("View root: '%s' doesn't exist", Global.view_root)
|
|
54
|
+
|
|
55
|
+
require 'ramaze/controller/main' if Global.mapping.empty?
|
|
56
|
+
|
|
57
|
+
Log.debug("mapped Controllers: #{Global.mapping.inspect}")
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# checks paths for existance and logs a warning if it doesn't exist yet.
|
|
61
|
+
|
|
62
|
+
def check_path(message, *paths)
|
|
63
|
+
paths.each do |path|
|
|
64
|
+
Log.warn(message % path) unless File.directory?(path)
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# if trait[:automap] is set and controller is not in Global.mapping yet
|
|
69
|
+
# this will build a new default mapping-point, MainController is put
|
|
70
|
+
# at '/' by default. For other Class names, String#snake_case is called,
|
|
71
|
+
# e.g. FooBarController is mapped at '/foo_bar'.
|
|
72
|
+
|
|
73
|
+
def mapping
|
|
74
|
+
global_mapping = Global.mapping.invert[self]
|
|
75
|
+
|
|
76
|
+
return global_mapping if global_mapping
|
|
77
|
+
|
|
78
|
+
if ancestral_trait[:automap] && self.to_s !~ /#<Class:/
|
|
79
|
+
name = self.to_s.gsub('Controller', '').gsub('::', '/').clone
|
|
80
|
+
return if name.empty?
|
|
81
|
+
name == 'Main' ? '/' : "/#{name.snake_case}"
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# Map Controller to the given syms or strings.
|
|
86
|
+
# Replaces old mappings.
|
|
87
|
+
# If you want to _add_ a mapping, just modify Global.mapping.
|
|
88
|
+
|
|
89
|
+
def map(*syms)
|
|
90
|
+
Global.mapping.delete_if{|k,v| v == self}
|
|
91
|
+
|
|
92
|
+
syms.compact.each do |sym|
|
|
93
|
+
Global.mapping[sym.to_s] = self
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
# Returns the Controller at a mapped path.
|
|
98
|
+
|
|
99
|
+
def at(mapping)
|
|
100
|
+
Global.mapping[mapping.to_s]
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
# Define a layout for all actions on this controller
|
|
104
|
+
#
|
|
105
|
+
# Example:
|
|
106
|
+
# class Foo < Ramaze::Controller
|
|
107
|
+
# layout :foo
|
|
108
|
+
# end
|
|
109
|
+
#
|
|
110
|
+
# This defines the action :foo to be layout of the controller and will
|
|
111
|
+
# render the layout after any other action has been rendered, assigns
|
|
112
|
+
# @content to the result of the action and then goes on rendering
|
|
113
|
+
# the layout-action where @content may or may not be used, returning
|
|
114
|
+
# whatever the layout returns.
|
|
115
|
+
|
|
116
|
+
def layout(*meth_or_hash)
|
|
117
|
+
if meth_or_hash.empty?
|
|
118
|
+
trait[:layout] ||= ( ancestral_trait[:layout] || {:all => nil, :deny => Set.new} ).dup
|
|
119
|
+
else
|
|
120
|
+
meth_or_hash = meth_or_hash.first
|
|
121
|
+
if meth_or_hash.respond_to?(:to_hash)
|
|
122
|
+
meth_or_hash.each do |layout_name, *actions|
|
|
123
|
+
actions.flatten.each do |action|
|
|
124
|
+
layout[action.to_s] = layout_name
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
else
|
|
128
|
+
layout[:all] = meth_or_hash
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
# Deny layout for passed names of actions.
|
|
134
|
+
# Name should be name of the method or template without extension, as
|
|
135
|
+
# String or Symbol
|
|
136
|
+
#
|
|
137
|
+
# Usage:
|
|
138
|
+
# class MainController < Ramaze::Controller
|
|
139
|
+
# deny_layout :atom
|
|
140
|
+
#
|
|
141
|
+
# def atom
|
|
142
|
+
# "I won't have layout"
|
|
143
|
+
# end
|
|
144
|
+
# end
|
|
145
|
+
|
|
146
|
+
def deny_layout(*actions)
|
|
147
|
+
actions.each do |action|
|
|
148
|
+
layout[:deny] << action.to_s
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
# Define a view_root for Controller, returns the current view_root
|
|
153
|
+
# if no argument is given.
|
|
154
|
+
# Runs every given path through Controller::check_path
|
|
155
|
+
|
|
156
|
+
def view_root *args
|
|
157
|
+
return @view_root if args.empty?
|
|
158
|
+
|
|
159
|
+
check_path("#{self}.view_root: '%s' doesn't exist", *args)
|
|
160
|
+
@view_root = args.flatten
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
# This is used for template rerouting, takes action, optionally a
|
|
164
|
+
# controller and action to route to.
|
|
165
|
+
#
|
|
166
|
+
# Usage:
|
|
167
|
+
# class MainController
|
|
168
|
+
# template :index, OtherController, :list
|
|
169
|
+
# template :foo, :bar
|
|
170
|
+
# template :bar, :file => '/absolute/path'
|
|
171
|
+
# template :baz, :file => 'relative/path'
|
|
172
|
+
# template :abc, :controller => OtherController
|
|
173
|
+
# template :xyz, :controller => OtherController, :action => 'list'
|
|
174
|
+
#
|
|
175
|
+
# def index
|
|
176
|
+
# 'will use template from OtherController#list'
|
|
177
|
+
# end
|
|
178
|
+
#
|
|
179
|
+
# def foo
|
|
180
|
+
# 'will use template from self#bar'
|
|
181
|
+
# end
|
|
182
|
+
#
|
|
183
|
+
# def bar
|
|
184
|
+
# 'will use template from /absolute/path'
|
|
185
|
+
# end
|
|
186
|
+
#
|
|
187
|
+
# def baz
|
|
188
|
+
# 'will use template from relative/path'
|
|
189
|
+
# end
|
|
190
|
+
#
|
|
191
|
+
# def abc
|
|
192
|
+
# 'will use template from OtherController#index'
|
|
193
|
+
# end
|
|
194
|
+
#
|
|
195
|
+
# def xyz
|
|
196
|
+
# 'will use template from OtherController#list'
|
|
197
|
+
# end
|
|
198
|
+
# end
|
|
199
|
+
|
|
200
|
+
def template(this, *argv)
|
|
201
|
+
case argv.first
|
|
202
|
+
when Hash
|
|
203
|
+
options, *ignored = argv
|
|
204
|
+
controller = options[:controller] || options['controller']
|
|
205
|
+
action = options[:action] || options['action']
|
|
206
|
+
file = options[:file] || options['file']
|
|
207
|
+
info = {}
|
|
208
|
+
if file
|
|
209
|
+
file = file.to_s
|
|
210
|
+
unless Pathname(file).absolute?
|
|
211
|
+
root = [view_root || Global.view_root].flatten.first
|
|
212
|
+
file = File.join(root, file)
|
|
213
|
+
end
|
|
214
|
+
info[:file] = file
|
|
215
|
+
else
|
|
216
|
+
controller ||= self
|
|
217
|
+
action = (action || 'index').to_s
|
|
218
|
+
info[:controller] = controller
|
|
219
|
+
info[:action] = action
|
|
220
|
+
end
|
|
221
|
+
trait "#{this}_template" => info
|
|
222
|
+
else
|
|
223
|
+
# Only explicitly set the controller to use, if it was explicitly given.
|
|
224
|
+
# This helps ensure that template mappings still work in subclasses
|
|
225
|
+
# of this controller.
|
|
226
|
+
first, second, *ignored = argv
|
|
227
|
+
if second
|
|
228
|
+
trait "#{this}_template" => {:controller => first, :action => second}
|
|
229
|
+
else
|
|
230
|
+
trait "#{this}_template" => {:action => first}
|
|
231
|
+
end
|
|
232
|
+
end
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
# This is a method to specify the templating engine for your controller.
|
|
236
|
+
# It basically just is sugar for:
|
|
237
|
+
# trait :engine => Haml
|
|
238
|
+
#
|
|
239
|
+
# Usage:
|
|
240
|
+
# class MainController < Ramaze::Controller
|
|
241
|
+
# engine :Haml
|
|
242
|
+
# end
|
|
243
|
+
|
|
244
|
+
def engine(name)
|
|
245
|
+
name = Template.const_get(name)
|
|
246
|
+
rescue NameError => ex
|
|
247
|
+
Log.warn ex
|
|
248
|
+
Log.warn "Try to use passed engine directly"
|
|
249
|
+
ensure
|
|
250
|
+
trait :engine => name
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
# Return Controller of current Action
|
|
254
|
+
|
|
255
|
+
def current
|
|
256
|
+
action = Action.current
|
|
257
|
+
action.instance || action.controller
|
|
258
|
+
end
|
|
259
|
+
|
|
260
|
+
# Entering point for Dispatcher, first Controller::resolve(path) and then
|
|
261
|
+
# renders the resulting Action.
|
|
262
|
+
|
|
263
|
+
def handle path
|
|
264
|
+
action = resolve(path)
|
|
265
|
+
STATE[:controller] = action.controller
|
|
266
|
+
action.render
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
# By default, returns all ancestors of current Controller that have
|
|
270
|
+
# Ramaze::Controller as their ancestor. Optional argument parent
|
|
271
|
+
# can be used return ancestors that have parent as an ancestor.
|
|
272
|
+
|
|
273
|
+
def relevant_ancestors(parent = Ramaze::Controller)
|
|
274
|
+
ancestors.select do |anc|
|
|
275
|
+
anc.ancestors.include?(parent)
|
|
276
|
+
end
|
|
277
|
+
end
|
|
278
|
+
end
|
|
279
|
+
|
|
280
|
+
private
|
|
281
|
+
|
|
282
|
+
# Simplistic render, rerouting to Controller.handle(*args)
|
|
283
|
+
|
|
284
|
+
def render *args
|
|
285
|
+
self.class.handle(*args)
|
|
286
|
+
end
|
|
287
|
+
end
|
|
288
|
+
end
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
# Copyright (c) 2008 Michael Fellinger m.fellinger@gmail.com
|
|
2
|
+
# All files in this distribution are subject to the terms of the Ruby license.
|
|
3
|
+
|
|
4
|
+
require 'rack/request'
|
|
5
|
+
|
|
6
|
+
module Ramaze
|
|
7
|
+
|
|
8
|
+
# The purpose of this class is to act as a simple wrapper for Rack::Request
|
|
9
|
+
# and provide some convinient methods for our own use.
|
|
10
|
+
|
|
11
|
+
class Request < ::Rack::Request
|
|
12
|
+
class << self
|
|
13
|
+
|
|
14
|
+
# get the current request out of STATE[:request]
|
|
15
|
+
#
|
|
16
|
+
# You can call this from everywhere with Ramaze::Request.current
|
|
17
|
+
|
|
18
|
+
def current() Current.request end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# you can access the original @request via this method_missing,
|
|
22
|
+
# first it tries to match your method with any of the HTTP parameters
|
|
23
|
+
# then, in case that fails, it will relay to @request
|
|
24
|
+
|
|
25
|
+
def method_missing meth, *args
|
|
26
|
+
key = meth.to_s.upcase
|
|
27
|
+
return env[key] if env.has_key?(key)
|
|
28
|
+
super
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# the full request URI provided by Rack::Request e.g. http://localhost:7000/controller/action?foo=bar.xhtml
|
|
32
|
+
|
|
33
|
+
def request_uri
|
|
34
|
+
env['REQUEST_URI'] || path_info
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# the IP address(s) making the request provided by Rack::Request. You shouldn't trust it
|
|
38
|
+
|
|
39
|
+
def ip
|
|
40
|
+
if addr = env['HTTP_X_FORWARDED_FOR']
|
|
41
|
+
addr.split(',').last.strip
|
|
42
|
+
else
|
|
43
|
+
env['REMOTE_ADDR']
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Request is from a local network?
|
|
48
|
+
# Checks both IPv4 and IPv6
|
|
49
|
+
|
|
50
|
+
ipv4 = %w[ 127.0.0.1/32 192.168.0.0/16 172.16.0.0/12 10.0.0.0/8 169.254.0.0/16 ]
|
|
51
|
+
ipv6 = %w[ fc00::/7 fe80::/10 fec0::/10 ::1 ]
|
|
52
|
+
LOCAL = (ipv4 + ipv6).map{|a| IPAddr.new(a)} unless defined?(LOCAL)
|
|
53
|
+
|
|
54
|
+
# returns true if the IP address making the request is from local network.
|
|
55
|
+
# Optional argument address can be used to check any IP address.
|
|
56
|
+
|
|
57
|
+
def local_net?(address = ip)
|
|
58
|
+
addr = IPAddr.new(address)
|
|
59
|
+
LOCAL.find{|range| range.include?(addr) }
|
|
60
|
+
rescue ArgumentError => ex
|
|
61
|
+
raise ArgumentError, ex unless ex.message == 'invalid address'
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def [](key, *rest)
|
|
65
|
+
return params[key.to_s] if rest.empty?
|
|
66
|
+
[key, *rest].map{|k| params[k.to_s] }
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# Sets any arguments passed as @instance_variables for the current action.
|
|
70
|
+
#
|
|
71
|
+
# Usage:
|
|
72
|
+
# request.params # => {'name' => 'manveru', 'q' => 'google', 'lang' => 'de'}
|
|
73
|
+
# to_ivs(:name, :q)
|
|
74
|
+
# @q # => 'google'
|
|
75
|
+
# @name # => 'manveru'
|
|
76
|
+
# @lang # => nil
|
|
77
|
+
|
|
78
|
+
def to_ivs(*args)
|
|
79
|
+
instance = Action.current.instance
|
|
80
|
+
args.each do |arg|
|
|
81
|
+
next unless value = self[arg]
|
|
82
|
+
instance.instance_variable_set("@#{arg}", value)
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# Wrapping Request#params to support a one-level hash notation.
|
|
87
|
+
# It doesn't support anything really fancy, so be conservative in its use.
|
|
88
|
+
#
|
|
89
|
+
# See if following provides something useful for us:
|
|
90
|
+
# http://redhanded.hobix.com/2006/01/25.html
|
|
91
|
+
#
|
|
92
|
+
# Example Usage:
|
|
93
|
+
#
|
|
94
|
+
# # Template:
|
|
95
|
+
#
|
|
96
|
+
# <form action="/paste">
|
|
97
|
+
# <input type="text" name="paste[name]" />
|
|
98
|
+
# <input type="text" name="paste[syntax]" />
|
|
99
|
+
# <input type="submit" />
|
|
100
|
+
# </form>
|
|
101
|
+
#
|
|
102
|
+
# # In your Controller:
|
|
103
|
+
#
|
|
104
|
+
# def paste
|
|
105
|
+
# name, syntax = request['paste'].values_at('name', 'syntax')
|
|
106
|
+
# paste = Paste.create_with(:name => name, :syntax => syntax)
|
|
107
|
+
# redirect '/'
|
|
108
|
+
# end
|
|
109
|
+
#
|
|
110
|
+
# # Or, easier:
|
|
111
|
+
#
|
|
112
|
+
# def paste
|
|
113
|
+
# paste = Paste.create_with(request['paste'])
|
|
114
|
+
# redirect '/'
|
|
115
|
+
# end
|
|
116
|
+
|
|
117
|
+
def params
|
|
118
|
+
return {} if put?
|
|
119
|
+
return @ramaze_params if @ramaze_params
|
|
120
|
+
|
|
121
|
+
begin
|
|
122
|
+
@rack_params ||= super
|
|
123
|
+
rescue EOFError => ex
|
|
124
|
+
@rack_params = {}
|
|
125
|
+
Log.error(ex)
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
@ramaze_params = {}
|
|
129
|
+
|
|
130
|
+
@rack_params.each do |key, value|
|
|
131
|
+
if key =~ /^(.*?)(\[.*\])/
|
|
132
|
+
prim, nested = $~.captures
|
|
133
|
+
ref = @ramaze_params
|
|
134
|
+
|
|
135
|
+
keys = nested.scan(/\[([^\]]+)\]/).flatten
|
|
136
|
+
keys.unshift prim
|
|
137
|
+
|
|
138
|
+
keys.each_with_index do |k, i|
|
|
139
|
+
if i + 1 >= keys.size
|
|
140
|
+
ref[k] = value
|
|
141
|
+
else
|
|
142
|
+
# in case the value is a string we cannot let it be ref next
|
|
143
|
+
# time, so throw it away
|
|
144
|
+
if ref[k].is_a?(String)
|
|
145
|
+
ref = ref[k] = {}
|
|
146
|
+
else
|
|
147
|
+
ref = ref[k] ||= {}
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
else
|
|
152
|
+
@ramaze_params[key] = value
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
@ramaze_params
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
# Interesting HTTP variables from env
|
|
160
|
+
|
|
161
|
+
def http_vars
|
|
162
|
+
env.reject{ |k,v|
|
|
163
|
+
k.to_s !~ /USER|HOST|REQUEST|REMOTE|FORWARD|REFER|PATH|QUERY|VERSION|KEEP|CACHE/
|
|
164
|
+
}
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
# Returns a string presentation of the request, useful for debugging
|
|
168
|
+
# parameters of the action.
|
|
169
|
+
|
|
170
|
+
def to_s
|
|
171
|
+
p, c, e = params.inspect, cookies.inspect, http_vars.inspect
|
|
172
|
+
%{#<Ramaze::Request params=#{p} cookies=#{c} env=#{e}>}
|
|
173
|
+
end
|
|
174
|
+
alias inspect to_s
|
|
175
|
+
|
|
176
|
+
# Pretty prints current action with parameters, cookies and
|
|
177
|
+
# enviroment variables.
|
|
178
|
+
|
|
179
|
+
def pretty_print pp
|
|
180
|
+
p, c, e = params, cookies, http_vars
|
|
181
|
+
pp.object_group(self){
|
|
182
|
+
{ 'params' => params,
|
|
183
|
+
'cookies' => cookies,
|
|
184
|
+
'env' => http_vars }.each do |name, hash|
|
|
185
|
+
pp.breakable
|
|
186
|
+
pp.text " @#{name}="
|
|
187
|
+
pp.nest(name.length+3){ pp.pp_hash hash }
|
|
188
|
+
end
|
|
189
|
+
}
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
# Answers with a subset of request.params with only the key/value pairs for
|
|
193
|
+
# which you pass the keys.
|
|
194
|
+
# Valid keys are objects that respond to :to_s
|
|
195
|
+
#
|
|
196
|
+
# Example:
|
|
197
|
+
# request.params
|
|
198
|
+
# # => {'name' => 'jason', 'age' => '45', 'job' => 'lumberjack'}
|
|
199
|
+
# request.subset('name')
|
|
200
|
+
# # => {'name' => 'jason'}
|
|
201
|
+
# request.subset(:name, :job)
|
|
202
|
+
# # => {'name' => 'jason', 'job' => 'lumberjack'}
|
|
203
|
+
|
|
204
|
+
def subset(*keys)
|
|
205
|
+
keys = keys.map{|k| k.to_s }
|
|
206
|
+
params.reject{|k,v| not keys.include?(k) }
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
# Is this an SSL request?
|
|
210
|
+
def ssl?
|
|
211
|
+
env['HTTPS'] == 'on' || env['HTTP_X_FORWARDED_PROTO'] == 'https'
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
# Returns 'https' if this is an SSL request and 'http' otherwise.
|
|
215
|
+
def protocol
|
|
216
|
+
ssl? ? 'https' : 'http'
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
def domain(path = '/')
|
|
220
|
+
host = env['HTTP_HOST']
|
|
221
|
+
URI("#{protocol}://#{host}#{path}")
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
# Returns and array of locales from env['HTTP_ACCEPT_LANGUAGE].
|
|
225
|
+
# e.g. ["fi", "en", "ja", "fr", "de", "es", "it", "nl", "sv"]
|
|
226
|
+
|
|
227
|
+
def locales
|
|
228
|
+
env['HTTP_ACCEPT_LANGUAGE'].to_s.split(/(?:,|;q=[\d.,]+)/)
|
|
229
|
+
end
|
|
230
|
+
end
|
|
231
|
+
end
|