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,37 @@
|
|
|
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
|
+
module Ramaze
|
|
5
|
+
class Response < Rack::Response
|
|
6
|
+
class << self
|
|
7
|
+
# Alias for Current::response
|
|
8
|
+
def current() Current.response end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def initialize(body = [], status = 200, header = {}, &block)
|
|
12
|
+
header['Content-Type'] ||= Global.content_type
|
|
13
|
+
header['Accept-Charset'] = Global.accept_charset if Global.accept_charset
|
|
14
|
+
super
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Build/replace this responses data
|
|
18
|
+
def build(new_body = body, status = status, new_header = {})
|
|
19
|
+
self.header.merge!(new_header)
|
|
20
|
+
|
|
21
|
+
self.body, self.status = new_body, status
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def body=(obj)
|
|
25
|
+
if obj.respond_to?(:stat)
|
|
26
|
+
@length = obj.stat.size
|
|
27
|
+
@body = obj
|
|
28
|
+
elsif obj.respond_to?(:size)
|
|
29
|
+
@body = []
|
|
30
|
+
@length = 0
|
|
31
|
+
write(obj)
|
|
32
|
+
else
|
|
33
|
+
raise(ArgumentError, "Invalid body: %p" % obj)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
module Ramaze
|
|
2
|
+
class Session
|
|
3
|
+
# The purpose of this class is to act as a unifier of the previous
|
|
4
|
+
# and current flash.
|
|
5
|
+
#
|
|
6
|
+
# Flash means pairs of keys and values that are held only over one
|
|
7
|
+
# request/response cycle. So you can assign a key/value in the current
|
|
8
|
+
# session and retrieve it in the current and following request.
|
|
9
|
+
#
|
|
10
|
+
# Please see the FlashHelper for details on the usage as you won't need
|
|
11
|
+
# to touch this class at all.
|
|
12
|
+
class Flash
|
|
13
|
+
include Enumerable
|
|
14
|
+
|
|
15
|
+
def initialize sess
|
|
16
|
+
@session = sess
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# iterate over the combined session
|
|
20
|
+
def each(&block)
|
|
21
|
+
combined.each(&block)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# the current session[:FLASH_PREVIOUS]
|
|
25
|
+
def previous
|
|
26
|
+
session[:FLASH_PREVIOUS] || {}
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# the current session[:FLASH]
|
|
30
|
+
def current
|
|
31
|
+
session[:FLASH] ||= {}
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# combined key/value pairs of previous and current
|
|
35
|
+
# current keys overshadow the old ones.
|
|
36
|
+
def combined
|
|
37
|
+
previous.merge(current)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# flash[key] in your Controller
|
|
41
|
+
def [](key)
|
|
42
|
+
combined[key]
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# flash[key] = value in your Controller
|
|
46
|
+
def []=(key, value)
|
|
47
|
+
prev = session[:FLASH] || {}
|
|
48
|
+
prev[key] = value
|
|
49
|
+
session[:FLASH] = prev
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# Inspects the combined SessionFlash
|
|
53
|
+
|
|
54
|
+
def inspect
|
|
55
|
+
combined.inspect
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# Delete a key
|
|
59
|
+
|
|
60
|
+
def delete(key)
|
|
61
|
+
previous.delete(key)
|
|
62
|
+
current.delete(key)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# check if combined is empty
|
|
66
|
+
|
|
67
|
+
def empty?
|
|
68
|
+
combined.empty?
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def merge!(hash)
|
|
72
|
+
current.merge!(hash)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def merge(hash)
|
|
76
|
+
current.merge(hash)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
private
|
|
80
|
+
|
|
81
|
+
# Associated session object
|
|
82
|
+
|
|
83
|
+
def session
|
|
84
|
+
@session
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
module Ramaze
|
|
2
|
+
class Session
|
|
3
|
+
|
|
4
|
+
# The Session::Hash acts as the wrapper for a simple Hash
|
|
5
|
+
#
|
|
6
|
+
# Its purpose is to notify the underlying cache, in which the sessions
|
|
7
|
+
# are stored, about updates.
|
|
8
|
+
class Hash
|
|
9
|
+
|
|
10
|
+
# Sets @hash to an empty Hash
|
|
11
|
+
|
|
12
|
+
def initialize(session)
|
|
13
|
+
@session = session
|
|
14
|
+
@hash = {}
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# relays all the methods to the @hash and updates the session_cache in
|
|
18
|
+
# Session.current.sessions if anything changes.
|
|
19
|
+
|
|
20
|
+
def method_missing(*args, &block)
|
|
21
|
+
result = @hash.send(*args, &block)
|
|
22
|
+
Cache.sessions[@session.session_id] = self
|
|
23
|
+
result
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Calls #inspect on the wrapped @hash
|
|
27
|
+
|
|
28
|
+
def inspect
|
|
29
|
+
@hash.inspect
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Use client side session variables
|
|
33
|
+
|
|
34
|
+
def client
|
|
35
|
+
Request.current['session.client'] ||= unmarshal(Request.current.cookies["#{Session::SESSION_KEY}-client"]) || {}
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
private
|
|
39
|
+
|
|
40
|
+
# Marshal a session hash into safe cookie data. Include an integrity hash.
|
|
41
|
+
def marshal(session)
|
|
42
|
+
data = [ Marshal.dump(session) ].pack('m').chop
|
|
43
|
+
"#{data}--#{generate_digest(data)}"
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# Unmarshal cookie data to a hash and verify its integrity.
|
|
47
|
+
def unmarshal(cookie)
|
|
48
|
+
return unless cookie
|
|
49
|
+
data, digest = cookie.split('--')
|
|
50
|
+
return nil unless digest == generate_digest(data)
|
|
51
|
+
Marshal.load(data.unpack('m').first)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Generate the inline SHA512 message digest. Larger (128 bytes) than SHA256
|
|
55
|
+
# (64 bytes) or RMD160 (40 bytes), but small relative to the 4096 byte
|
|
56
|
+
# max cookie size.
|
|
57
|
+
def generate_digest(data)
|
|
58
|
+
Digest::SHA512.hexdigest "#{data}#{Session.trait[:secret]}"
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
@@ -0,0 +1,179 @@
|
|
|
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
|
+
begin
|
|
5
|
+
require 'digest/sha2'
|
|
6
|
+
rescue LoadError
|
|
7
|
+
require 'digest/sha1'
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
require 'ramaze/current/session/flash'
|
|
11
|
+
require 'ramaze/current/session/hash'
|
|
12
|
+
|
|
13
|
+
module Ramaze
|
|
14
|
+
|
|
15
|
+
# The purpose of Session is to hold key/value pairs like a Hash for a series
|
|
16
|
+
# of # request/response cycles from the same client.
|
|
17
|
+
#
|
|
18
|
+
# The persistence is achieved by setting a cookie with the session_id to
|
|
19
|
+
# the client, which is then passed back and forth until the cookie is either
|
|
20
|
+
# deleted or expires.
|
|
21
|
+
|
|
22
|
+
class Session
|
|
23
|
+
# The unique id for the current session which is also passed on to the cookie.
|
|
24
|
+
|
|
25
|
+
attr_accessor :session_id
|
|
26
|
+
|
|
27
|
+
# This variable holds the current SessionFlash
|
|
28
|
+
|
|
29
|
+
attr_accessor :flash
|
|
30
|
+
|
|
31
|
+
# Flag whether or not to drop this session on the floor
|
|
32
|
+
|
|
33
|
+
attr_accessor :dropped
|
|
34
|
+
|
|
35
|
+
# secret salt for client-side session data
|
|
36
|
+
|
|
37
|
+
trait :secret => 'change_me_please_123'
|
|
38
|
+
|
|
39
|
+
# the key used for the cookie
|
|
40
|
+
|
|
41
|
+
SESSION_KEY = '_ramaze_session_id' unless defined?(SESSION_KEY)
|
|
42
|
+
|
|
43
|
+
# Holds counter for IPs
|
|
44
|
+
|
|
45
|
+
IP_COUNT = ::Hash.new{|h,k| h[k] = OrderedSet.new} unless defined?(IP_COUNT)
|
|
46
|
+
|
|
47
|
+
# Limit the number of sessions one IP is allowed to hold.
|
|
48
|
+
|
|
49
|
+
IP_COUNT_LIMIT = 1000 unless defined?(IP_COUNT_LIMIT)
|
|
50
|
+
|
|
51
|
+
# Holds the default cookie used for sessions
|
|
52
|
+
|
|
53
|
+
COOKIE = { :path => '/' } unless defined?(COOKIE)
|
|
54
|
+
|
|
55
|
+
# Shortcut for Current.session
|
|
56
|
+
def self.current
|
|
57
|
+
Current.session
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# called from Ramaze::startup and adds Cache.sessions if cookies are
|
|
61
|
+
# enabled
|
|
62
|
+
|
|
63
|
+
def self.startup(options = {})
|
|
64
|
+
Cache.add(:sessions) if Global.sessions
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# retrieve a specific session given a session id
|
|
68
|
+
|
|
69
|
+
def self.[](sess_id)
|
|
70
|
+
Session.new(sess_id)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
# generate a random (and hopefully unique) id for the current session.
|
|
74
|
+
#
|
|
75
|
+
# It consists of the current time, the current request, the current PID of
|
|
76
|
+
# ruby and object_id of this instance.
|
|
77
|
+
#
|
|
78
|
+
# All this is joined by some calls to Kernel#rand and returned as a
|
|
79
|
+
# Digest::SHA256::hexdigest
|
|
80
|
+
|
|
81
|
+
def self.random_key
|
|
82
|
+
h = [
|
|
83
|
+
Time.now.to_f.to_s, rand,
|
|
84
|
+
Current.request.hash, rand,
|
|
85
|
+
Process.pid, rand,
|
|
86
|
+
object_id, rand
|
|
87
|
+
].join
|
|
88
|
+
Digest::SHA256.hexdigest(h)
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
# Initialize a new Session, requires the original Rack::Request instance
|
|
92
|
+
# given to us from Dispatcher#setup_environment.
|
|
93
|
+
#
|
|
94
|
+
# sets @session_id and @session_flash
|
|
95
|
+
|
|
96
|
+
def initialize(sess_or_request = Current.request)
|
|
97
|
+
return unless Global.sessions
|
|
98
|
+
|
|
99
|
+
if sess_or_request.respond_to?(:cookies)
|
|
100
|
+
request = sess_or_request
|
|
101
|
+
@session_id = request.cookies[SESSION_KEY] || Session.random_key
|
|
102
|
+
else
|
|
103
|
+
request = nil
|
|
104
|
+
@session_id = sess_or_request
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
unless IP_COUNT.nil? or request.nil?
|
|
108
|
+
ip = request.ip
|
|
109
|
+
IP_COUNT[ip] << @session_id
|
|
110
|
+
sessions.delete(IP_COUNT[ip].shift) if IP_COUNT[ip].size > IP_COUNT_LIMIT
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
@flash = Session::Flash.new(self)
|
|
114
|
+
@current = nil
|
|
115
|
+
@dropped = false
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
# relay all messages we don't understand to the currently active session
|
|
119
|
+
|
|
120
|
+
def method_missing(*args, &block)
|
|
121
|
+
current.send(*args, &block)
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
# answers with the currently active session, which is set unless it is
|
|
125
|
+
# existing already, the session itself is an instance of SessionHash
|
|
126
|
+
|
|
127
|
+
def current
|
|
128
|
+
return @current if @current
|
|
129
|
+
@current = ( sessions[session_id] ||= Session::Hash.new(self) )
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
# shortcut to Cache.sessions
|
|
133
|
+
|
|
134
|
+
def sessions
|
|
135
|
+
Cache.sessions
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
# Inspect on Session.current
|
|
139
|
+
|
|
140
|
+
def inspect
|
|
141
|
+
current.inspect
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
# don't finish this session
|
|
145
|
+
|
|
146
|
+
def drop!
|
|
147
|
+
self.dropped = true
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
# at the end of a request delete the current[:FLASH] and assign it to
|
|
151
|
+
# current[:FLASH_PREVIOUS]
|
|
152
|
+
#
|
|
153
|
+
# this is needed so flash can iterate over requests
|
|
154
|
+
# and always just keep the current and previous key/value pairs.
|
|
155
|
+
#
|
|
156
|
+
# finalizes the session and assigns the key to the response via
|
|
157
|
+
# set_cookie.
|
|
158
|
+
|
|
159
|
+
def finish
|
|
160
|
+
return unless Global.sessions
|
|
161
|
+
return if dropped
|
|
162
|
+
|
|
163
|
+
old = current.delete(:FLASH)
|
|
164
|
+
current[:FLASH_PREVIOUS] = old if old
|
|
165
|
+
|
|
166
|
+
request, response = Current.request, Current.response
|
|
167
|
+
|
|
168
|
+
hash = {:value => session_id}.merge(COOKIE)
|
|
169
|
+
response.set_cookie(SESSION_KEY, hash)
|
|
170
|
+
|
|
171
|
+
# set client side session cookie
|
|
172
|
+
if val = request['session.client'] and
|
|
173
|
+
(!val.empty? or request.cookies["#{SESSION_KEY}-client"])
|
|
174
|
+
cookie = hash.merge(:value => marshal(val))
|
|
175
|
+
response.set_cookie("#{SESSION_KEY}-client", cookie)
|
|
176
|
+
end
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
require 'ramaze/current/request'
|
|
2
|
+
require 'ramaze/current/response'
|
|
3
|
+
require 'ramaze/current/session'
|
|
4
|
+
|
|
5
|
+
module Ramaze
|
|
6
|
+
class Current
|
|
7
|
+
include Trinity
|
|
8
|
+
extend Trinity
|
|
9
|
+
|
|
10
|
+
def initialize(app)
|
|
11
|
+
@app = app
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def call(env)
|
|
15
|
+
setup(env)
|
|
16
|
+
before_call
|
|
17
|
+
record
|
|
18
|
+
|
|
19
|
+
@app.call(env)
|
|
20
|
+
finish
|
|
21
|
+
ensure
|
|
22
|
+
after_call
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def record
|
|
26
|
+
return unless filter = Global.record
|
|
27
|
+
request = Current.request
|
|
28
|
+
Record << request if filter.call(request)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def setup(env)
|
|
32
|
+
self.request = Request.new(env)
|
|
33
|
+
self.response = Response.new
|
|
34
|
+
self.session = Session.new
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def finish
|
|
38
|
+
session.finish if session
|
|
39
|
+
response.finish
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def self.call(env)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def before_call
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def after_call
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
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
|
+
module Ramaze
|
|
5
|
+
class Dispatcher
|
|
6
|
+
|
|
7
|
+
# This dispatcher is responsible for relaying requests to Controller::handle
|
|
8
|
+
# and filtering the results using FILTER.
|
|
9
|
+
|
|
10
|
+
class Action
|
|
11
|
+
|
|
12
|
+
# The response is passed to each filter by sending .call(response) to it.
|
|
13
|
+
|
|
14
|
+
FILTER = OrderedSet[
|
|
15
|
+
# Ramaze::Tool::Localize,
|
|
16
|
+
] unless defined?(FILTER)
|
|
17
|
+
|
|
18
|
+
class << self
|
|
19
|
+
include Trinity
|
|
20
|
+
|
|
21
|
+
# Takes path, asks Controller to handle it and builds a response on
|
|
22
|
+
# success. The response is then passed to each member of FILTER for
|
|
23
|
+
# post-processing.
|
|
24
|
+
|
|
25
|
+
def call(path)
|
|
26
|
+
log(path)
|
|
27
|
+
|
|
28
|
+
catch(:respond) {
|
|
29
|
+
response.write Controller.handle(path)
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
FILTER.each{|f| f.call(response)}
|
|
33
|
+
response
|
|
34
|
+
rescue Ramaze::Error => ex
|
|
35
|
+
ex
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Logs the request via Log#info unless it's boring.
|
|
39
|
+
|
|
40
|
+
def log(path)
|
|
41
|
+
case path
|
|
42
|
+
when *Global.boring
|
|
43
|
+
else
|
|
44
|
+
Log.info("Dynamic request from #{request.ip}: #{request.request_uri}")
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|