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,82 @@
|
|
|
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
|
+
# Pretty DSL to express Sequel relations
|
|
5
|
+
#
|
|
6
|
+
# Usage:
|
|
7
|
+
# SequelRelation.relations do
|
|
8
|
+
# the User do
|
|
9
|
+
# has_many Article
|
|
10
|
+
# has_one Avatar
|
|
11
|
+
# end
|
|
12
|
+
#
|
|
13
|
+
# the Article do
|
|
14
|
+
# belongs_to User
|
|
15
|
+
# end
|
|
16
|
+
#
|
|
17
|
+
# the Avatar do
|
|
18
|
+
# belongs_to User
|
|
19
|
+
# end
|
|
20
|
+
# end
|
|
21
|
+
|
|
22
|
+
module SequelRelation
|
|
23
|
+
def self.relations(&block)
|
|
24
|
+
rema = RelationshipManager.new(&block)
|
|
25
|
+
rema.finalize
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
class RelationshipManager
|
|
29
|
+
TODO = {}
|
|
30
|
+
|
|
31
|
+
def initialize(&block)
|
|
32
|
+
instance_eval(&block)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def finalize
|
|
36
|
+
TODO.keys.each do |model|
|
|
37
|
+
model.create_table unless model.table_exists?
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
TODO.each do |model, instructions|
|
|
41
|
+
instructions.each do |args|
|
|
42
|
+
model.send(*args)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
return # remove this line for debugging
|
|
47
|
+
|
|
48
|
+
pp TODO
|
|
49
|
+
|
|
50
|
+
TODO.keys.each do |model|
|
|
51
|
+
puts "the #{model}"
|
|
52
|
+
assoc = model.send(:association_reflections)
|
|
53
|
+
assoc.each do |key, reflection|
|
|
54
|
+
puts " #{reflection[:type]} => #{key}"
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def the(left_model, &block)
|
|
60
|
+
@left = left_model
|
|
61
|
+
TODO[@left] = []
|
|
62
|
+
instance_eval(&block)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def belongs_to(model)
|
|
66
|
+
todo :belongs_to, model.to_s.downcase.to_sym
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def has_many(model)
|
|
70
|
+
todo :create_join, model
|
|
71
|
+
todo :many_to_many, model.to_s.downcase.pluralize.to_sym
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def has_one(model)
|
|
75
|
+
todo :belongs_to, model.to_s.downcase.to_sym
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def todo(method, *args)
|
|
79
|
+
TODO[@left] << [method, *args]
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
#
|
|
2
|
+
# drop-in replacement for Ramaze's built-in MemoryCache built on the Sequel.
|
|
3
|
+
# to use with sessions do
|
|
4
|
+
#
|
|
5
|
+
# Ramaze::Global::cache_alternative[:sessions] = Ramaze::SequelCache
|
|
6
|
+
#
|
|
7
|
+
# to use with everything do
|
|
8
|
+
#
|
|
9
|
+
# Ramaze::Global::cache = Ramaze::SequelCache
|
|
10
|
+
#
|
|
11
|
+
|
|
12
|
+
class Ramaze::SequelCache
|
|
13
|
+
class Table < Sequel::Model(:ramaze_cache_t)
|
|
14
|
+
set_schema do
|
|
15
|
+
primary_key :id
|
|
16
|
+
string :key
|
|
17
|
+
string :value
|
|
18
|
+
index :key, :unique => true
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
## use sequel's built-in serialize function if you like execptions: the
|
|
22
|
+
## serialized data blows up the sql
|
|
23
|
+
## serialize :value, :format => :marshal
|
|
24
|
+
|
|
25
|
+
transform :value => [
|
|
26
|
+
lambda{|value| Marshal.load(Base64.decode64(value))},
|
|
27
|
+
lambda{|value| Base64.encode64(Marshal.dump(value))},
|
|
28
|
+
]
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def table() Table end
|
|
32
|
+
def t() Table end
|
|
33
|
+
|
|
34
|
+
def self.[] key
|
|
35
|
+
record = Table.find :key => key
|
|
36
|
+
record ? record.value : nil
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def self.[]= key, value
|
|
40
|
+
begin
|
|
41
|
+
Table.create :key => key, :value => value
|
|
42
|
+
rescue
|
|
43
|
+
Table.filter(:key => key).update :value => value
|
|
44
|
+
unless Table.find(:key => key)
|
|
45
|
+
Table.create :key => key, :value => value rescue nil
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
# ruby always returns 'value' for []= !
|
|
49
|
+
rescue
|
|
50
|
+
nil
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def self.values_at *keys
|
|
54
|
+
keys.map{|key| Table[key]}
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def self.delete *keys
|
|
58
|
+
keys.map do |key|
|
|
59
|
+
record = Table[key]
|
|
60
|
+
record.delete if record
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def self.clear
|
|
65
|
+
Table.delete_all
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def self.new
|
|
69
|
+
self
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def self.to_sym
|
|
73
|
+
name.split(%r/::/).last.to_sym
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
if $0 == __FILE__
|
|
81
|
+
case ARGV.first
|
|
82
|
+
when /create|up/
|
|
83
|
+
Ramaze::SequelCache::Table.create_table!
|
|
84
|
+
when /drop|down/
|
|
85
|
+
Ramaze::SequelCache::Table.drop_table
|
|
86
|
+
else
|
|
87
|
+
abort "usage: ruby #{ __FILE__ } create/up | drop/down"
|
|
88
|
+
end
|
|
89
|
+
else
|
|
90
|
+
Ramaze::SequelCache::Table.create_table! unless
|
|
91
|
+
Ramaze::SequelCache::Table.table_exists?
|
|
92
|
+
end
|
|
@@ -0,0 +1,82 @@
|
|
|
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
|
+
# Loads and sets up contrib modules.
|
|
7
|
+
#
|
|
8
|
+
# For more information @see Ramaze::Contrib.load
|
|
9
|
+
#
|
|
10
|
+
# Usage:
|
|
11
|
+
#
|
|
12
|
+
# Ramaze.contrib :gzip_filter
|
|
13
|
+
|
|
14
|
+
def self.contrib(*args)
|
|
15
|
+
Contrib.load(*args)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# A module used for loading contrib modules.
|
|
19
|
+
|
|
20
|
+
module Contrib
|
|
21
|
+
|
|
22
|
+
# Loads and sets up contrib modules from /ramaze/contrib.
|
|
23
|
+
#
|
|
24
|
+
# === Usage:
|
|
25
|
+
#
|
|
26
|
+
# Ramaze::Contrib.load :gzip_filter
|
|
27
|
+
#
|
|
28
|
+
# === Creating a contrib module:
|
|
29
|
+
#
|
|
30
|
+
# module Ramaze::Contrib::Test
|
|
31
|
+
# def self.setup
|
|
32
|
+
# Log.info "Test module set up"
|
|
33
|
+
# end
|
|
34
|
+
# end
|
|
35
|
+
# class TestController < Ramaze::Controller
|
|
36
|
+
# map '/test'
|
|
37
|
+
# def index; "Chunky Bacon!"; end
|
|
38
|
+
# end
|
|
39
|
+
#
|
|
40
|
+
# # Save that to your <app dir>/contrib and use like:
|
|
41
|
+
# Ramaze.contrib :test
|
|
42
|
+
|
|
43
|
+
def self.load(*contribs)
|
|
44
|
+
contribs.each do |name|
|
|
45
|
+
mod_name = name.to_s.camel_case
|
|
46
|
+
begin
|
|
47
|
+
const = Contrib.const_get(mod_name)
|
|
48
|
+
Global.contribs << const
|
|
49
|
+
const.startup if const.respond_to?(:startup)
|
|
50
|
+
Log.dev "Loaded contrib: #{const}"
|
|
51
|
+
rescue NameError
|
|
52
|
+
files = Dir["{contrib,#{BASEDIR}/ramaze/contrib}/#{name}.{so,bundle,rb}"]
|
|
53
|
+
raise LoadError, "#{mod_name} not found" unless files.any?
|
|
54
|
+
require(files.first) ? retry : raise
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Will call .shutdown on all contrib modules which support it.
|
|
60
|
+
#---
|
|
61
|
+
# .shudown gets called by Ramaze :essentials.
|
|
62
|
+
#+++
|
|
63
|
+
|
|
64
|
+
def self.shutdown
|
|
65
|
+
Global.contribs.each do |contrib|
|
|
66
|
+
contrib.shutdown if contrib.respond_to?(:shutdown)
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# Will load all contrib modules from options[:contrib]
|
|
71
|
+
#---
|
|
72
|
+
# .startup gets called by Ramaze :essentials.
|
|
73
|
+
#+++
|
|
74
|
+
|
|
75
|
+
def self.startup(options = {})
|
|
76
|
+
return unless options[:contrib]
|
|
77
|
+
[options[:contrib]].flatten.each do |contrib|
|
|
78
|
+
load(contrib)
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end # class Contrib
|
|
82
|
+
end # class Ramaze
|
|
@@ -0,0 +1,46 @@
|
|
|
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 Controller
|
|
6
|
+
# The default error-page handler. you can overwrite this method
|
|
7
|
+
# in your controller and create your own error-template for use.
|
|
8
|
+
#
|
|
9
|
+
# Error-pages can be in whatever the templating-engine of your controller
|
|
10
|
+
# is set to.
|
|
11
|
+
# Ramaze::Dispatcher::Error.current
|
|
12
|
+
# holds the exception thrown.
|
|
13
|
+
|
|
14
|
+
def error
|
|
15
|
+
error = Dispatcher::Error.current
|
|
16
|
+
title = error.message
|
|
17
|
+
|
|
18
|
+
unless Action.current.template
|
|
19
|
+
response['Content-Type'] = 'text/plain'
|
|
20
|
+
respond %(
|
|
21
|
+
#{error.message}
|
|
22
|
+
#{error.backtrace.join("\n ")}
|
|
23
|
+
|
|
24
|
+
#{PP.pp request, '', 200}
|
|
25
|
+
).ui
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
backtrace_size = Global.backtrace_size
|
|
29
|
+
@backtrace = error.backtrace[0..20].map{|line|
|
|
30
|
+
file, lineno, meth = *Ramaze.parse_backtrace(line)
|
|
31
|
+
lines = Ramaze.caller_lines(file, lineno, backtrace_size)
|
|
32
|
+
|
|
33
|
+
[ lines, lines.object_id.abs, file, lineno, meth ]
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
# for backwards-compat with old error.zmr
|
|
37
|
+
@colors = [255] * @backtrace.size
|
|
38
|
+
|
|
39
|
+
@title = h(title)
|
|
40
|
+
@editor = ENV['EDITOR'] || 'vim'
|
|
41
|
+
title
|
|
42
|
+
rescue Object => ex
|
|
43
|
+
Log.error(ex)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,278 @@
|
|
|
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 Controller
|
|
6
|
+
# TODO:
|
|
7
|
+
# * fix caching, see todos below
|
|
8
|
+
# FILTER = [ :cached, :default ] unless defined?(FILTER)
|
|
9
|
+
FILTER = [ :default ] unless defined?(FILTER)
|
|
10
|
+
|
|
11
|
+
class << self
|
|
12
|
+
|
|
13
|
+
# Resolve an absolute path in the application by passing it to each
|
|
14
|
+
# element of Ramaze::Controller::FILTER.
|
|
15
|
+
# If an element does not respond to call it will be sent to self
|
|
16
|
+
# instead, in either case with path as argument.
|
|
17
|
+
|
|
18
|
+
def resolve(path, routed = false)
|
|
19
|
+
Thread.current[:routed] = routed
|
|
20
|
+
|
|
21
|
+
FILTER.each do |filter|
|
|
22
|
+
answer = if filter.respond_to?(:call)
|
|
23
|
+
filter.call(path)
|
|
24
|
+
else
|
|
25
|
+
send(filter.to_s, path)
|
|
26
|
+
end
|
|
27
|
+
return answer if answer
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
raise_no_filter(path)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Default element of FILTER.
|
|
34
|
+
# Looks up the path in Cache.resolved and returns it if found.
|
|
35
|
+
|
|
36
|
+
def cached(path)
|
|
37
|
+
if found = Cache.resolved[path]
|
|
38
|
+
if found.respond_to?(:relaxed_hash)
|
|
39
|
+
return found.dup
|
|
40
|
+
else
|
|
41
|
+
Log.warn("Found faulty `#{path}' in Cache.resolved, deleting it for sanity.")
|
|
42
|
+
Cache.resolved.delete path
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
nil
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Default element of FILTER.
|
|
50
|
+
# The default handler that tries to find the best match for the given
|
|
51
|
+
# path in terms of Controller/method/template and given arguments.
|
|
52
|
+
# If a match is found it will be cached for further use.
|
|
53
|
+
|
|
54
|
+
def default(path)
|
|
55
|
+
mapping = Global.mapping
|
|
56
|
+
controllers = Global.controllers
|
|
57
|
+
|
|
58
|
+
raise_no_controller(path) if controllers.empty? or mapping.empty?
|
|
59
|
+
|
|
60
|
+
# TODO:
|
|
61
|
+
# * following code is dangerous (DoS):
|
|
62
|
+
# patterns = Cache.patterns[path] ||= pattern_for(path)
|
|
63
|
+
|
|
64
|
+
first_controller = nil
|
|
65
|
+
|
|
66
|
+
# Look through the possible ways of interpreting the path until we find
|
|
67
|
+
# one that matches an existing controller action.
|
|
68
|
+
patterns_for(path) do |controller, method, params|
|
|
69
|
+
if controller = mapping[controller]
|
|
70
|
+
first_controller ||= controller
|
|
71
|
+
|
|
72
|
+
action = controller.resolve_action(method, *params)
|
|
73
|
+
next unless action
|
|
74
|
+
|
|
75
|
+
template = action.template
|
|
76
|
+
|
|
77
|
+
valid_action =
|
|
78
|
+
if Action.stack.size > 0 || Global.actionless_templates
|
|
79
|
+
action.method or (params.empty? && template)
|
|
80
|
+
else
|
|
81
|
+
action.method
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
if valid_action
|
|
85
|
+
# TODO:
|
|
86
|
+
# * dangerous as well
|
|
87
|
+
# Cache.resolved[path] = action
|
|
88
|
+
return action
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
if !Thread.current[:routed] and new_path = Route.resolve(path)
|
|
94
|
+
Log.dev("Routing from `#{path}' to `#{new_path}'")
|
|
95
|
+
return resolve(new_path, true)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
raise_no_action(first_controller, path) if first_controller
|
|
99
|
+
raise_no_controller(path)
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
# Try to produce an Action from the given path and paremters with the
|
|
103
|
+
# appropiate template if one exists.
|
|
104
|
+
|
|
105
|
+
def resolve_action(path, *parameter)
|
|
106
|
+
path, parameter = path.to_s, parameter.map{|e| e.to_s}
|
|
107
|
+
# Use ancestral_trait so if template is set in superclass, it is still found.
|
|
108
|
+
if info = ancestral_trait["#{path}_template"]
|
|
109
|
+
template = info[:file]
|
|
110
|
+
unless template
|
|
111
|
+
controller, action = info.values_at :controller, :action
|
|
112
|
+
# Controller may not have been explicitly set, in which case use self.
|
|
113
|
+
controller ||= self
|
|
114
|
+
template = controller.resolve_template(action)
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
method, params = resolve_method(path, *parameter)
|
|
119
|
+
|
|
120
|
+
if method or parameter.empty?
|
|
121
|
+
template ||= resolve_template(path)
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
action =
|
|
125
|
+
Action.create :path => path,
|
|
126
|
+
:method => method,
|
|
127
|
+
:params => params,
|
|
128
|
+
:template => template,
|
|
129
|
+
:controller => self
|
|
130
|
+
return false unless action.valid_rest?
|
|
131
|
+
action
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
# Search the #template_paths for a fitting template for path.
|
|
135
|
+
# Only the first found possibility for the generated glob is returned.
|
|
136
|
+
|
|
137
|
+
def resolve_template(path)
|
|
138
|
+
path = path.to_s
|
|
139
|
+
path_converted = path.split('__').inject{|s,v| File.join(s, v) }
|
|
140
|
+
possible_paths = [path, path_converted].compact
|
|
141
|
+
|
|
142
|
+
paths = template_paths.map{|pa|
|
|
143
|
+
possible_paths.map{|a|
|
|
144
|
+
File.join(pa, a)
|
|
145
|
+
}
|
|
146
|
+
}.flatten.uniq
|
|
147
|
+
|
|
148
|
+
glob = "{#{paths.join(',')}}.{#{extension_order.join(',')}}"
|
|
149
|
+
|
|
150
|
+
Dir[glob].first
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
# Composes an array with the template-paths to look up in the right order.
|
|
154
|
+
# Usually this is composed of Global.view_root and the mapping of the
|
|
155
|
+
# controller.
|
|
156
|
+
|
|
157
|
+
def template_paths
|
|
158
|
+
if paths = view_root
|
|
159
|
+
paths
|
|
160
|
+
else
|
|
161
|
+
view_root(File.join(Global.view_root, Global.mapping.invert[self]))
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
# Based on methodname and arity, tries to find the right method on
|
|
166
|
+
# current controller.
|
|
167
|
+
def resolve_method(name, *params)
|
|
168
|
+
cam = cached_action_methods
|
|
169
|
+
|
|
170
|
+
if cam.include?(name)
|
|
171
|
+
method = name
|
|
172
|
+
else
|
|
173
|
+
name = name.gsub(/__/, '/')
|
|
174
|
+
method = name if cam.include?(name)
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
if method
|
|
178
|
+
arity = instance_method(method).arity
|
|
179
|
+
if arity < 0 or params.size == arity
|
|
180
|
+
return method, params
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
return nil, []
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
# List or create a list of action methods to be cached
|
|
188
|
+
|
|
189
|
+
def cached_action_methods
|
|
190
|
+
Cache.action_methods[self] ||= action_methods
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
# methodnames that may be used for current controller.
|
|
194
|
+
def action_methods
|
|
195
|
+
ancs = relevant_ancestors + action_modules
|
|
196
|
+
ancs.reverse.inject [] do |meths, anc|
|
|
197
|
+
meths +
|
|
198
|
+
anc.public_instance_methods(false).map{|im| im.to_s } -
|
|
199
|
+
anc.private_instance_methods(false).map{|im| im.to_s }
|
|
200
|
+
end
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
# Array of all modules (so including Ramaze helpers) that are included in
|
|
204
|
+
# this controller and where the module is also in the Helper::LOOKUP set.
|
|
205
|
+
# Hence this is the included modules whose public methods may be exposed
|
|
206
|
+
# as actions of this controller.
|
|
207
|
+
def action_modules
|
|
208
|
+
Helper::LOOKUP.find_all {|mod| self.include?(mod)}
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
# Iterator that yields potential ways in which a given path could be mapped
|
|
212
|
+
# to controller, action and params. It produces them in strict order, with
|
|
213
|
+
# longest controller path favoured, then longest action path.
|
|
214
|
+
|
|
215
|
+
def patterns_for path
|
|
216
|
+
# Split into fragments, and remove empty ones (which split may have output).
|
|
217
|
+
# The to_s is vital as sometimes we are passed an array.
|
|
218
|
+
fragments = path.to_s.split '/'
|
|
219
|
+
fragments.delete ''
|
|
220
|
+
|
|
221
|
+
# Work through all the possible splits of controller and 'the rest' (action
|
|
222
|
+
# + params) starting with longest possible controller.
|
|
223
|
+
fragments.length.downto(0) do |ca_split|
|
|
224
|
+
controller = '/' + fragments[0...ca_split].join('/')
|
|
225
|
+
|
|
226
|
+
# Work on the remaining portion, generating all the action/params splits.
|
|
227
|
+
fragments.length.downto(ca_split) do |ap_split|
|
|
228
|
+
action = fragments[ca_split...ap_split].join '__'
|
|
229
|
+
params = fragments[ap_split..-1]
|
|
230
|
+
if action.empty?
|
|
231
|
+
yield controller, 'index', params
|
|
232
|
+
else
|
|
233
|
+
yield controller, "#{action}__index", params
|
|
234
|
+
yield controller, action, params
|
|
235
|
+
end
|
|
236
|
+
end
|
|
237
|
+
end
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
# Uses custom defined engines and all available engines and throws it
|
|
241
|
+
# against the extensions for the template to find the most likely
|
|
242
|
+
# templating-engine to use ordered by priority and likelyhood.
|
|
243
|
+
def extension_order
|
|
244
|
+
t_extensions = Template::ENGINES
|
|
245
|
+
all_extensions = t_extensions.values.flatten
|
|
246
|
+
|
|
247
|
+
if engine = ancestral_trait[:engine]
|
|
248
|
+
c_extensions = t_extensions.select{|k,v| k == engine}.map{|k,v| v}.flatten
|
|
249
|
+
return (c_extensions + all_extensions).uniq
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
all_extensions
|
|
253
|
+
end
|
|
254
|
+
|
|
255
|
+
# Raises Ramaze::Error::NoFilter
|
|
256
|
+
# TODO:
|
|
257
|
+
# * is this called at all for anybody?
|
|
258
|
+
# I think everybody has filters.
|
|
259
|
+
|
|
260
|
+
def raise_no_filter(path)
|
|
261
|
+
raise Ramaze::Error::NoFilter, "No Filter found for `#{path}'"
|
|
262
|
+
end
|
|
263
|
+
|
|
264
|
+
# Raises Ramaze::Error::NoController
|
|
265
|
+
|
|
266
|
+
def raise_no_controller(path)
|
|
267
|
+
raise Ramaze::Error::NoController, "No Controller found for `#{path}'"
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
# Raises Ramaze::Error::NoAction
|
|
271
|
+
|
|
272
|
+
def raise_no_action(controller, path)
|
|
273
|
+
STATE[:controller] = controller
|
|
274
|
+
raise Ramaze::Error::NoAction, "No Action found for `#{path}' on #{controller}"
|
|
275
|
+
end
|
|
276
|
+
end
|
|
277
|
+
end
|
|
278
|
+
end
|