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
data/lib/ramaze/error.rb
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
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
|
+
|
|
6
|
+
# The general Namespace for Ramazes Errorclasses
|
|
7
|
+
|
|
8
|
+
class Error < StandardError
|
|
9
|
+
# No action found on Controller
|
|
10
|
+
class NoAction < Error; end
|
|
11
|
+
|
|
12
|
+
# No Controller found for request
|
|
13
|
+
class NoFilter < Error; end
|
|
14
|
+
|
|
15
|
+
# No Controller found for request
|
|
16
|
+
class NoController < Error; end
|
|
17
|
+
|
|
18
|
+
# Wrong parameter count for action
|
|
19
|
+
class WrongParameterCount < Error; end
|
|
20
|
+
|
|
21
|
+
# Error while transformation in template
|
|
22
|
+
class Template < Error; end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,124 @@
|
|
|
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 rdoc
|
|
5
|
+
Example:
|
|
6
|
+
|
|
7
|
+
require 'ramaze'
|
|
8
|
+
require 'ramaze/gestalt'
|
|
9
|
+
|
|
10
|
+
page = Ramaze::Gestalt.build{
|
|
11
|
+
title = 'Hello, World!'
|
|
12
|
+
|
|
13
|
+
html do
|
|
14
|
+
head{ title(title) }
|
|
15
|
+
body do
|
|
16
|
+
h1(title)
|
|
17
|
+
p 'I count to 10'
|
|
18
|
+
('1'..'10').each do |count|
|
|
19
|
+
div(:style => 'width: 25px; height: 25px'){ count }
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
}
|
|
24
|
+
=end
|
|
25
|
+
|
|
26
|
+
module Ramaze
|
|
27
|
+
|
|
28
|
+
# Gestalt is the custom HTML/XML builder for Ramaze, based on a very simple
|
|
29
|
+
# DSL it will build your markup.
|
|
30
|
+
|
|
31
|
+
class Gestalt
|
|
32
|
+
attr_accessor :out
|
|
33
|
+
|
|
34
|
+
# The default way to start building your markup.
|
|
35
|
+
# Takes a block and returns the markup.
|
|
36
|
+
#
|
|
37
|
+
# Example:
|
|
38
|
+
# html =
|
|
39
|
+
# Gestalt.build do
|
|
40
|
+
# html do
|
|
41
|
+
# head do
|
|
42
|
+
# title "Hello, World!"
|
|
43
|
+
# end
|
|
44
|
+
# body do
|
|
45
|
+
# h1 "Hello, World!"
|
|
46
|
+
# end
|
|
47
|
+
# end
|
|
48
|
+
# end
|
|
49
|
+
#
|
|
50
|
+
|
|
51
|
+
def self.build(&block)
|
|
52
|
+
self.new(&block).to_s
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Gestalt.new is like ::build but will return itself.
|
|
56
|
+
# you can either access #out or .to_s it, which will
|
|
57
|
+
# return the actual markup.
|
|
58
|
+
#
|
|
59
|
+
# Useful for distributed building of one page.
|
|
60
|
+
|
|
61
|
+
def initialize(&block)
|
|
62
|
+
@out = []
|
|
63
|
+
instance_eval(&block) if block_given?
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# catching all the tags. passing it to _gestalt_build_tag
|
|
67
|
+
|
|
68
|
+
def method_missing(meth, *args, &block)
|
|
69
|
+
_gestalt_call_tag meth, args, &block
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# workaround for Kernel#p to make <p /> tags possible.
|
|
73
|
+
|
|
74
|
+
def p(*args, &block)
|
|
75
|
+
_gestalt_call_tag :p, args, &block
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def _gestalt_call_tag(name, args, &block)
|
|
79
|
+
if args.size == 1 and args[0].kind_of? Hash
|
|
80
|
+
# args are just attributes, children in block...
|
|
81
|
+
_gestalt_build_tag name, args[0], &block
|
|
82
|
+
else
|
|
83
|
+
# no attributes, but text
|
|
84
|
+
_gestalt_build_tag name, {}, args, &block
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
# build a tag for `name`, using `args` and an optional block that
|
|
89
|
+
# will be yielded
|
|
90
|
+
|
|
91
|
+
def _gestalt_build_tag(name, attr = {}, text = [])
|
|
92
|
+
@out << "<#{name}"
|
|
93
|
+
@out << attr.map{|k,v| %[ #{k}="#{_gestalt_escape_entities(v)}"] }.join
|
|
94
|
+
if text != [] or block_given?
|
|
95
|
+
@out << ">"
|
|
96
|
+
@out << _gestalt_escape_entities([text].join)
|
|
97
|
+
if block_given?
|
|
98
|
+
text = yield
|
|
99
|
+
@out << text.to_str if text != @out and text.respond_to?(:to_str)
|
|
100
|
+
end
|
|
101
|
+
@out << "</#{name}>"
|
|
102
|
+
else
|
|
103
|
+
@out << ' />'
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def _gestalt_escape_entities(s)
|
|
108
|
+
s.to_s.gsub(/&/, '&').
|
|
109
|
+
gsub(/"/, '"').
|
|
110
|
+
gsub(/'/, ''').
|
|
111
|
+
gsub(/</, '<').
|
|
112
|
+
gsub(/>/, '>')
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def tag(name, *args, &block)
|
|
116
|
+
_gestalt_call_tag(name.to_s, args, &block)
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def to_s
|
|
120
|
+
@out.join
|
|
121
|
+
end
|
|
122
|
+
alias to_str to_s
|
|
123
|
+
end
|
|
124
|
+
end
|
|
@@ -0,0 +1,106 @@
|
|
|
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
|
+
|
|
6
|
+
# A helper that provides the means to wrap actions of the controller with
|
|
7
|
+
# other methods.
|
|
8
|
+
#
|
|
9
|
+
# For examples please look at the spec/ramaze/helper/aspect.rb
|
|
10
|
+
#
|
|
11
|
+
# Like every other helper, you can use it in your controller with:
|
|
12
|
+
#
|
|
13
|
+
# helper :aspect
|
|
14
|
+
|
|
15
|
+
module Helper::Aspect
|
|
16
|
+
|
|
17
|
+
private
|
|
18
|
+
|
|
19
|
+
# lazily and smartly inherit copy of aspects trait from parent, or
|
|
20
|
+
# bootstrap our own
|
|
21
|
+
def aspects
|
|
22
|
+
trait[:aspects] ||= (
|
|
23
|
+
if hash = ancestral_trait[:aspects]
|
|
24
|
+
{ :before => hash[:before].dup, :after => hash[:after].dup }
|
|
25
|
+
else
|
|
26
|
+
{ :before => {}, :after => {} }
|
|
27
|
+
end
|
|
28
|
+
)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# run block before given actions or, if no actions specified, all actions.
|
|
32
|
+
def before(*meths, &block)
|
|
33
|
+
return before_all(*meths, &block) if meths.empty?
|
|
34
|
+
meths.each do |meth|
|
|
35
|
+
aspects[:before][meth.to_s] = block
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
alias pre before
|
|
39
|
+
|
|
40
|
+
# Run block before all actions.
|
|
41
|
+
def before_all(&block)
|
|
42
|
+
aspects[:before][:all] = block
|
|
43
|
+
end
|
|
44
|
+
alias pre_all before_all
|
|
45
|
+
|
|
46
|
+
# run block after given actions or, if no actions specified, all actions.
|
|
47
|
+
def after(*meths, &block)
|
|
48
|
+
return after_all(*meths, &block) if meths.empty?
|
|
49
|
+
meths.each do |meth|
|
|
50
|
+
aspects[:after][meth.to_s] = block
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
alias post after
|
|
54
|
+
|
|
55
|
+
# Run block after all actions.
|
|
56
|
+
def after_all(&block)
|
|
57
|
+
aspects[:after][:all] = block
|
|
58
|
+
end
|
|
59
|
+
alias post_all after_all
|
|
60
|
+
|
|
61
|
+
# run block before and after given actions, or, if no actions specified.
|
|
62
|
+
# all actions
|
|
63
|
+
def wrap(*meths, &block)
|
|
64
|
+
return wrap_all(*meths, &block) if meths.empty?
|
|
65
|
+
before(*meths, &block)
|
|
66
|
+
after(*meths, &block)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# run block before and after all actions.
|
|
70
|
+
def wrap_all(&block)
|
|
71
|
+
aspects[:before][:all] = block
|
|
72
|
+
aspects[:after][:all] = block
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
class Action
|
|
77
|
+
|
|
78
|
+
# overwrites the default Action hook and runs the neccesary blocks in its
|
|
79
|
+
# scope before actions are run, starting from Ramaze::Controller down the
|
|
80
|
+
# ancestor chain.
|
|
81
|
+
def before_process
|
|
82
|
+
common_aspect(:before)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
# overwrites the default Action hook and runs the neccesary blocks in its
|
|
87
|
+
# scope after actions are run, starting from Ramaze::Controller down the
|
|
88
|
+
# ancestor chain.
|
|
89
|
+
def after_process
|
|
90
|
+
common_aspect(:after)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def common_aspect(aspect)
|
|
94
|
+
return unless path
|
|
95
|
+
|
|
96
|
+
controller.relevant_ancestors.reverse_each do |controller|
|
|
97
|
+
next unless aspects = controller.trait[:aspects]
|
|
98
|
+
|
|
99
|
+
[ aspects[aspect][name], aspects[aspect][:all] ].compact.map do |block|
|
|
100
|
+
instance.instance_eval(&block) if block
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
end
|
|
106
|
+
end
|
|
@@ -0,0 +1,125 @@
|
|
|
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 'digest/sha1'
|
|
5
|
+
|
|
6
|
+
module Ramaze
|
|
7
|
+
|
|
8
|
+
# A simple way to do authentication. Please have a look at the docs for the
|
|
9
|
+
# check_auth method for detailed information
|
|
10
|
+
|
|
11
|
+
module Helper::Auth
|
|
12
|
+
Helper::LOOKUP << self
|
|
13
|
+
|
|
14
|
+
# add Helper::Aspect and Helper::Stack on inclusion of Helper::Auth
|
|
15
|
+
|
|
16
|
+
def self.included(klass)
|
|
17
|
+
klass.send(:helper, :aspect, :stack)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# The default Element to use (if any)
|
|
21
|
+
|
|
22
|
+
AUTH_ELEMENT = 'Page'
|
|
23
|
+
|
|
24
|
+
# action for login, takes a password
|
|
25
|
+
# ( ?password=passwort or /login/passwort or via a form )
|
|
26
|
+
# if no password given, shows a simple form to input it.
|
|
27
|
+
|
|
28
|
+
def login
|
|
29
|
+
username, password = request[:username, :password]
|
|
30
|
+
if check_auth(username, password)
|
|
31
|
+
session[:logged_in] = true
|
|
32
|
+
session[:username] = username
|
|
33
|
+
inside_stack? ? answer : redirect_referrer
|
|
34
|
+
else
|
|
35
|
+
if defined? AUTH_ELEMENT and AUTH_ELEMENT.to_s.split.any?
|
|
36
|
+
open_element = "<#{AUTH_ELEMENT}>"
|
|
37
|
+
close_element = "</#{AUTH_ELEMENT}>"
|
|
38
|
+
end
|
|
39
|
+
%{
|
|
40
|
+
#{open_element}
|
|
41
|
+
<form method="POST" action="#{Rs(:login)}">
|
|
42
|
+
<ul style="list-style:none;">
|
|
43
|
+
<li>Username: <input type="text" name="username" /></li>
|
|
44
|
+
<li>Password: <input type="password" name="password" /></li>
|
|
45
|
+
<li><input type="submit" /></li>
|
|
46
|
+
</ul>
|
|
47
|
+
</form>
|
|
48
|
+
#{close_element}
|
|
49
|
+
}
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# clear the session and redirect to the index action of the mapping of the
|
|
54
|
+
# current controller.
|
|
55
|
+
|
|
56
|
+
def logout
|
|
57
|
+
session.clear
|
|
58
|
+
redirect_referer
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
private
|
|
62
|
+
|
|
63
|
+
# call( R(self, :login) ) if not logged in
|
|
64
|
+
|
|
65
|
+
def login_required
|
|
66
|
+
call(Rs(:login)) unless logged_in?
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# checks if the user is already logged in.
|
|
70
|
+
# session[:logged_in] is not nil/false
|
|
71
|
+
|
|
72
|
+
def logged_in?
|
|
73
|
+
!!session[:logged_in]
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# check the authentication (username and password) against the auth_table.
|
|
77
|
+
#
|
|
78
|
+
# auth_table is a trait, it may be the name of a method, a Proc or a simple
|
|
79
|
+
# Hash.
|
|
80
|
+
# If it is neither of the above it has at least to respond to #[]
|
|
81
|
+
# which will pass it the username as key and it should answer with the
|
|
82
|
+
# password as a Digest::SHA1.hexdigest.
|
|
83
|
+
#
|
|
84
|
+
# The method and Proc are both called on demand.
|
|
85
|
+
#
|
|
86
|
+
# If you want to change the way the password is hashed, change
|
|
87
|
+
# trait[:auth_hashify]
|
|
88
|
+
#
|
|
89
|
+
# The default looks like:
|
|
90
|
+
# lambda{ |pass| Digest::SHA1.hexdigest(pass.to_s) }
|
|
91
|
+
#
|
|
92
|
+
# As with the auth_table, this has to be an object that responds to #[]
|
|
93
|
+
#
|
|
94
|
+
# If you want all your controllers to use the same mechanism set the trait
|
|
95
|
+
# on one of the ancestors, the traits are looked up by #ancestral_trait
|
|
96
|
+
#
|
|
97
|
+
# Examples:
|
|
98
|
+
#
|
|
99
|
+
# # The method to be called.
|
|
100
|
+
# trait :auth_table => :auth_table
|
|
101
|
+
# trait :auth_table => 'auth_table'
|
|
102
|
+
#
|
|
103
|
+
# # Lambda that will be called upon demand
|
|
104
|
+
# trait :auth_table => lambda{ {'manveru' => Digest::SHA1.hexdigest 'password'} }
|
|
105
|
+
#
|
|
106
|
+
# # Hash holding the data.
|
|
107
|
+
# trait :auth_table => {'manveru' => Digest::SHA1.hexdigest('password')}
|
|
108
|
+
|
|
109
|
+
def check_auth user, pass
|
|
110
|
+
return false if (not user or user.empty?) and (not pass or pass.empty?)
|
|
111
|
+
auth_table = ancestral_trait[:auth_table] ||= {}
|
|
112
|
+
|
|
113
|
+
auth_table = method(auth_table) if auth_table.is_a?(Symbol)
|
|
114
|
+
auth_table = method(auth_table) if auth_table.respond_to?(:to_str)
|
|
115
|
+
auth_table = auth_table.call if auth_table.respond_to?(:call)
|
|
116
|
+
|
|
117
|
+
default_hashify = lambda{ |pass| Digest::SHA1.hexdigest(pass.to_s) }
|
|
118
|
+
|
|
119
|
+
hashify = (ancestral_trait[:auth_hashify] ||= default_hashify)
|
|
120
|
+
password = hashify[pass.to_s]
|
|
121
|
+
|
|
122
|
+
auth_table[user.to_s] == password
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
require 'benchmark'
|
|
2
|
+
|
|
3
|
+
module Ramaze
|
|
4
|
+
module Helper
|
|
5
|
+
|
|
6
|
+
# Little helper to give you a hand when benching parts of actions
|
|
7
|
+
|
|
8
|
+
module Bench
|
|
9
|
+
|
|
10
|
+
# Will first run an empty loop to determine the overhead it imposes, then
|
|
11
|
+
# goes on to yield your block +iterations+ times.
|
|
12
|
+
#
|
|
13
|
+
# The last yielded return value will be returned upon completion of the
|
|
14
|
+
# benchmark and the result of the benchmark itself will be sent to
|
|
15
|
+
# Log.info
|
|
16
|
+
#
|
|
17
|
+
# Example:
|
|
18
|
+
#
|
|
19
|
+
# class MainController < Ramaze::Controller
|
|
20
|
+
# def index
|
|
21
|
+
# @users = bench{ User.all }
|
|
22
|
+
# @tags = bench{ Article.tags }
|
|
23
|
+
# end
|
|
24
|
+
# end
|
|
25
|
+
#
|
|
26
|
+
# This will show something like following in your log:
|
|
27
|
+
# [..] INFO Bench ./start.rb:3:in `index': 0.121163845062256
|
|
28
|
+
# [..] INFO Bench ./start.rb:4:in `index': 2.234987235098341
|
|
29
|
+
#
|
|
30
|
+
# So now we know that the Article.tags call takes the most time and
|
|
31
|
+
# should be improved.
|
|
32
|
+
|
|
33
|
+
def bench(iterations = 1)
|
|
34
|
+
result = nil
|
|
35
|
+
from = caller[0]
|
|
36
|
+
delta = Benchmark.realtime{ iterations.times{ nil }}
|
|
37
|
+
taken = Benchmark.realtime{ iterations.times{ result = yield }}
|
|
38
|
+
Log.info "Bench #{from}: #{taken - delta}"
|
|
39
|
+
return result
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,140 @@
|
|
|
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
|
+
|
|
6
|
+
# This helper is providing easy access to a couple of Caches to use for
|
|
7
|
+
# smaller amounts of data.
|
|
8
|
+
|
|
9
|
+
module Helper::Cache
|
|
10
|
+
C = Ramaze::Cache
|
|
11
|
+
|
|
12
|
+
# Create the Cache.value_cache on inclusion if it doesn't exist yet.
|
|
13
|
+
def self.included(klass)
|
|
14
|
+
C.add(:value_cache) unless C::CACHES.has_key?(:value_cache)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Example:
|
|
18
|
+
#
|
|
19
|
+
# class FooController < Ramaze::Controller
|
|
20
|
+
# helper :cache
|
|
21
|
+
# cache :index, :map_of_the_internet
|
|
22
|
+
# end
|
|
23
|
+
#
|
|
24
|
+
# cache supports these options
|
|
25
|
+
# [+:ttl+] time-to-live in seconds
|
|
26
|
+
# [+:key+] proc that returns a key to store cache with
|
|
27
|
+
#
|
|
28
|
+
# Example:
|
|
29
|
+
#
|
|
30
|
+
# class CacheController < Ramaze::Controller
|
|
31
|
+
# helper :cache
|
|
32
|
+
#
|
|
33
|
+
# # for each distinct value of request['name']
|
|
34
|
+
# # cache rendered output of name action for 60 seconds
|
|
35
|
+
# cache :name, :key => lambda{ request['name'] }, :ttl => 60
|
|
36
|
+
#
|
|
37
|
+
# def name
|
|
38
|
+
# "hi #{request['name']}"
|
|
39
|
+
# end
|
|
40
|
+
# end
|
|
41
|
+
#
|
|
42
|
+
# cache acts as a wrapper for value_cache if no args are given
|
|
43
|
+
|
|
44
|
+
def cache *args
|
|
45
|
+
return value_cache if args.size == 0
|
|
46
|
+
|
|
47
|
+
opts = args.last.is_a?(Hash) ? args.pop : {}
|
|
48
|
+
|
|
49
|
+
args.compact.each do |arg|
|
|
50
|
+
actions_cached[arg.to_sym] = opts
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
private
|
|
55
|
+
|
|
56
|
+
# use this to cache values in your controller and templates,
|
|
57
|
+
# for example heavy calculations or time-consuming queries.
|
|
58
|
+
|
|
59
|
+
def value_cache
|
|
60
|
+
C.value_cache
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# action_cache holds rendered output of actions for which caching is enabled.
|
|
64
|
+
#
|
|
65
|
+
# For simple cases:
|
|
66
|
+
#
|
|
67
|
+
# class Controller < Ramaze::Controller
|
|
68
|
+
# map '/path/to'
|
|
69
|
+
# helper :cache
|
|
70
|
+
# cache :action
|
|
71
|
+
#
|
|
72
|
+
# def action with, params
|
|
73
|
+
# 'rendered output'
|
|
74
|
+
# end
|
|
75
|
+
# end
|
|
76
|
+
#
|
|
77
|
+
# { '/path/to/action/with/params' => {
|
|
78
|
+
# :time => Time.at(rendering),
|
|
79
|
+
# :type => 'content/type',
|
|
80
|
+
# :content => 'rendered output'
|
|
81
|
+
# }
|
|
82
|
+
# }
|
|
83
|
+
#
|
|
84
|
+
# If an additional key is provided:
|
|
85
|
+
#
|
|
86
|
+
# class Controller < Ramaze::Controller
|
|
87
|
+
# map '/path/to'
|
|
88
|
+
# helper :cache
|
|
89
|
+
# cache :action, :key => lambda{ 'value of key proc' }
|
|
90
|
+
#
|
|
91
|
+
# def action
|
|
92
|
+
# 'output'
|
|
93
|
+
# end
|
|
94
|
+
# end
|
|
95
|
+
#
|
|
96
|
+
# { '/path/to/action' => {
|
|
97
|
+
# 'value of key proc' => {
|
|
98
|
+
# :time => Time.at(rendering),
|
|
99
|
+
# :type => 'content/type',
|
|
100
|
+
# :content => 'output'
|
|
101
|
+
# }
|
|
102
|
+
# }
|
|
103
|
+
# }
|
|
104
|
+
#
|
|
105
|
+
# Caches can be invalidated after a certain amount of time
|
|
106
|
+
# by supplying a :ttl option (in seconds)
|
|
107
|
+
#
|
|
108
|
+
# class Controller < Ramaze::Controller
|
|
109
|
+
# helper :cache
|
|
110
|
+
# cache :index, :ttl => 60
|
|
111
|
+
#
|
|
112
|
+
# def index
|
|
113
|
+
# Time.now.to_s
|
|
114
|
+
# end
|
|
115
|
+
# end
|
|
116
|
+
#
|
|
117
|
+
# or by deleting values from action_cache directly
|
|
118
|
+
#
|
|
119
|
+
# action_cache.clear
|
|
120
|
+
# action_cache.delete '/index'
|
|
121
|
+
# action_cache.delete '/path/to/action'
|
|
122
|
+
|
|
123
|
+
def action_cache
|
|
124
|
+
C.actions
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
# This refers to the class-trait of cached actions, you can
|
|
128
|
+
# add/remove actions to be cached.
|
|
129
|
+
#
|
|
130
|
+
# Example:
|
|
131
|
+
#
|
|
132
|
+
# class FooController < Ramaze::Controller
|
|
133
|
+
# trait :actions_cached => [:index, :map_of_the_internet]
|
|
134
|
+
# end
|
|
135
|
+
|
|
136
|
+
def actions_cached
|
|
137
|
+
ancestral_trait[:actions_cached]
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
end
|