rjspotter-ramaze 2009.06.29
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/.gitignore +3 -0
- data/.mailmap +25 -0
- data/MANIFEST +502 -0
- data/README.md +457 -0
- data/Rakefile +88 -0
- data/benchmark/bench_templates/bench.rb +67 -0
- data/benchmark/bench_templates/view/large.erb +79 -0
- data/benchmark/bench_templates/view/large.haml +41 -0
- data/benchmark/bench_templates/view/large.xhtml +79 -0
- data/benchmark/bench_templates/view/small.erb +21 -0
- data/benchmark/bench_templates/view/small.haml +12 -0
- data/benchmark/bench_templates/view/small.xhtml +21 -0
- data/benchmark/results.txt +131 -0
- data/benchmark/run.rb +355 -0
- data/benchmark/suite/minimal.rb +11 -0
- data/benchmark/suite/no_informer.rb +7 -0
- data/benchmark/suite/no_sessions.rb +9 -0
- data/benchmark/suite/no_template.rb +7 -0
- data/benchmark/suite/simple.rb +5 -0
- data/benchmark/suite/template_erubis.rb +8 -0
- data/benchmark/suite/template_etanni.rb +8 -0
- data/benchmark/suite/template_ezamar.rb +8 -0
- data/benchmark/suite/template_haml.rb +13 -0
- data/benchmark/suite/template_liquid.rb +11 -0
- data/benchmark/suite/template_markaby.rb +9 -0
- data/benchmark/suite/template_nagoro.rb +8 -0
- data/benchmark/suite/template_redcloth.rb +13 -0
- data/benchmark/suite/template_tenjin.rb +8 -0
- data/benchmark/test.rb +35 -0
- data/bin/ramaze +15 -0
- data/doc/AUTHORS +44 -0
- data/doc/CHANGELOG +17362 -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 +146 -0
- data/doc/meta/configuration.txt +163 -0
- data/doc/meta/internals.txt +278 -0
- data/doc/meta/users.kml +64 -0
- data/doc/tutorial/todolist.html +1379 -0
- data/doc/tutorial/todolist.txt +920 -0
- data/examples/app/auth/layout/auth.xhtml +25 -0
- data/examples/app/auth/start.rb +23 -0
- data/examples/app/auth/view/index.xhtml +4 -0
- data/examples/app/auth/view/login.xhtml +20 -0
- data/examples/app/auth/view/secret.xhtml +1 -0
- data/examples/app/blog/README +3 -0
- data/examples/app/blog/app.rb +69 -0
- data/examples/app/blog/config.ru +17 -0
- data/examples/app/blog/controller/comment.rb +45 -0
- data/examples/app/blog/controller/entry.rb +85 -0
- data/examples/app/blog/controller/init.rb +86 -0
- data/examples/app/blog/controller/main.rb +20 -0
- data/examples/app/blog/controller/tag.rb +9 -0
- data/examples/app/blog/layout/default.nag +31 -0
- data/examples/app/blog/model/comment.rb +58 -0
- data/examples/app/blog/model/entry.rb +89 -0
- data/examples/app/blog/model/init.rb +15 -0
- data/examples/app/blog/model/tag.rb +36 -0
- data/examples/app/blog/public/css/screen.css +273 -0
- data/examples/app/blog/spec/blog.rb +87 -0
- data/examples/app/blog/start.rb +5 -0
- data/examples/app/blog/view/comment/form.nag +10 -0
- data/examples/app/blog/view/comment/show.nag +16 -0
- data/examples/app/blog/view/entry/edit.nag +14 -0
- data/examples/app/blog/view/entry/feed.atom.nag +8 -0
- data/examples/app/blog/view/entry/feed.rss.nag +7 -0
- data/examples/app/blog/view/entry/index.nag +7 -0
- data/examples/app/blog/view/entry/new.nag +13 -0
- data/examples/app/blog/view/entry/show.nag +36 -0
- data/examples/app/blog/view/feed.atom.nag +18 -0
- data/examples/app/blog/view/feed.rss.nag +25 -0
- data/examples/app/blog/view/index.nag +6 -0
- data/examples/app/blog/view/tag/index.nag +5 -0
- data/examples/app/chat/layout/default.xhtml +13 -0
- data/examples/app/chat/model/history.rb +38 -0
- data/examples/app/chat/model/message.rb +7 -0
- data/examples/app/chat/public/css/chat.css +9 -0
- data/examples/app/chat/public/js/chat.js +28 -0
- data/examples/app/chat/public/js/jquery.js +3436 -0
- data/examples/app/chat/start.rb +39 -0
- data/examples/app/chat/view/chat.xhtml +9 -0
- data/examples/app/chat/view/index.xhtml +7 -0
- data/examples/app/localization/locale/de.yaml +5 -0
- data/examples/app/localization/locale/en.yaml +5 -0
- data/examples/app/localization/locale/ja.yaml +5 -0
- data/examples/app/localization/start.rb +48 -0
- data/examples/app/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/start.rb +79 -0
- data/examples/app/sourceview/view/index.haml +59 -0
- data/examples/app/todolist/controller/init.rb +10 -0
- data/examples/app/todolist/controller/task.rb +39 -0
- data/examples/app/todolist/layout/default.xhtml +14 -0
- data/examples/app/todolist/model/init.rb +14 -0
- data/examples/app/todolist/model/task.rb +39 -0
- data/examples/app/todolist/public/css/screen.css +63 -0
- data/examples/app/todolist/public/favicon.ico +0 -0
- data/examples/app/todolist/start.rb +11 -0
- data/examples/app/todolist/view/index.xhtml +29 -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 +109 -0
- data/examples/app/wikore/src/controller.rb +78 -0
- data/examples/app/wikore/src/model.rb +56 -0
- data/examples/app/wikore/start.rb +9 -0
- data/examples/app/wikore/view/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 +47 -0
- data/examples/basic/gestalt.rb +26 -0
- data/examples/basic/hello.rb +14 -0
- data/examples/basic/layout.rb +28 -0
- data/examples/basic/linking.rb +29 -0
- data/examples/basic/partial.rb +26 -0
- data/examples/basic/simple.rb +52 -0
- data/examples/helpers/cache.rb +33 -0
- data/examples/helpers/form_with_sequel.rb +24 -0
- data/examples/helpers/httpdigest.rb +107 -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/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 +37 -0
- data/examples/misc/nagoro_element.rb +43 -0
- data/examples/misc/ramaise.rb +132 -0
- data/examples/misc/rapp.rb +56 -0
- data/examples/misc/sequel_scaffolding.rb +34 -0
- data/examples/misc/serve_directory.rb +6 -0
- data/examples/templates/template_erubis.rb +52 -0
- data/examples/templates/template_ezamar.rb +51 -0
- data/examples/templates/template_haml.rb +49 -0
- data/examples/templates/template_liquid.rb +66 -0
- data/examples/templates/template_markaby.rb +57 -0
- data/examples/templates/template_nagoro.rb +50 -0
- data/examples/templates/template_redcloth.rb +58 -0
- data/examples/templates/template_remarkably.rb +54 -0
- data/examples/templates/template_tenjin.rb +52 -0
- data/examples/templates/view/external.haml +22 -0
- data/examples/templates/view/external.liquid +28 -0
- data/examples/templates/view/external.mab +30 -0
- data/examples/templates/view/external.nag +28 -0
- data/examples/templates/view/external.redcloth +19 -0
- data/examples/templates/view/external.rem +30 -0
- data/examples/templates/view/external.rhtml +28 -0
- data/examples/templates/view/external.tenjin +28 -0
- data/examples/templates/view/external.zmr +28 -0
- data/lib/proto/app.rb +14 -0
- data/lib/proto/config.ru +20 -0
- data/lib/proto/controller/init.rb +11 -0
- data/lib/proto/controller/main.rb +20 -0
- data/lib/proto/layout/default.xhtml +24 -0
- data/lib/proto/model/init.rb +4 -0
- data/lib/proto/public/.htaccess +24 -0
- data/lib/proto/public/css/screen.css +30 -0
- data/lib/proto/public/dispatch.fcgi +11 -0
- data/lib/proto/public/favicon.ico +0 -0
- data/lib/proto/public/js/jquery.js +4376 -0
- data/lib/proto/public/ramaze.png +0 -0
- data/lib/proto/spec/main.rb +20 -0
- data/lib/proto/start.rb +8 -0
- data/lib/proto/view/index.xhtml +41 -0
- data/lib/ramaze.rb +87 -0
- data/lib/ramaze/app.rb +124 -0
- data/lib/ramaze/cache.rb +19 -0
- data/lib/ramaze/cache/localmemcache.rb +56 -0
- data/lib/ramaze/cache/memcache.rb +124 -0
- data/lib/ramaze/cache/sequel.rb +82 -0
- data/lib/ramaze/contrib/addressable_route.rb +55 -0
- data/lib/ramaze/contrib/app_graph.rb +64 -0
- data/lib/ramaze/contrib/email.rb +88 -0
- data/lib/ramaze/contrib/facebook.rb +23 -0
- data/lib/ramaze/contrib/facebook/facebook.rb +171 -0
- data/lib/ramaze/contrib/gettext.rb +113 -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/gzip_filter.rb +1 -0
- data/lib/ramaze/contrib/maruku_uv.rb +59 -0
- data/lib/ramaze/contrib/profiling.rb +36 -0
- data/lib/ramaze/contrib/rest.rb +22 -0
- data/lib/ramaze/contrib/sequel/create_join.rb +26 -0
- data/lib/ramaze/contrib/sequel/form_field.rb +129 -0
- data/lib/ramaze/contrib/sequel/image.rb +196 -0
- data/lib/ramaze/contrib/sequel/relation.rb +98 -0
- data/lib/ramaze/controller.rb +104 -0
- data/lib/ramaze/controller/default.rb +12 -0
- data/lib/ramaze/current.rb +7 -0
- data/lib/ramaze/files.rb +24 -0
- data/lib/ramaze/gestalt.rb +132 -0
- data/lib/ramaze/helper.rb +13 -0
- data/lib/ramaze/helper/auth.rb +84 -0
- data/lib/ramaze/helper/bench.rb +41 -0
- data/lib/ramaze/helper/cache.rb +117 -0
- data/lib/ramaze/helper/disqus.rb +26 -0
- data/lib/ramaze/helper/flash.rb +62 -0
- data/lib/ramaze/helper/form.rb +127 -0
- data/lib/ramaze/helper/formatting.rb +189 -0
- data/lib/ramaze/helper/gestalt.rb +47 -0
- data/lib/ramaze/helper/gravatar.rb +79 -0
- data/lib/ramaze/helper/httpdigest.rb +97 -0
- data/lib/ramaze/helper/identity.rb +119 -0
- data/lib/ramaze/helper/layout.rb +97 -0
- data/lib/ramaze/helper/link.rb +56 -0
- data/lib/ramaze/helper/localize.rb +138 -0
- data/lib/ramaze/helper/markaby.rb +31 -0
- data/lib/ramaze/helper/maruku.rb +16 -0
- data/lib/ramaze/helper/nitroform.rb +14 -0
- data/lib/ramaze/helper/pager.rb +367 -0
- data/lib/ramaze/helper/paginate.rb +242 -0
- data/lib/ramaze/helper/partial.rb +100 -0
- data/lib/ramaze/helper/remarkably.rb +14 -0
- data/lib/ramaze/helper/request_accessor.rb +16 -0
- data/lib/ramaze/helper/sequel.rb +55 -0
- data/lib/ramaze/helper/sequel_form.rb +284 -0
- data/lib/ramaze/helper/simple_captcha.rb +61 -0
- data/lib/ramaze/helper/stack.rb +75 -0
- data/lib/ramaze/helper/tagz.rb +19 -0
- data/lib/ramaze/helper/thread.rb +17 -0
- data/lib/ramaze/helper/ultraviolet.rb +46 -0
- data/lib/ramaze/helper/user.rb +229 -0
- data/lib/ramaze/helper/xhtml.rb +34 -0
- data/lib/ramaze/log.rb +39 -0
- data/lib/ramaze/log/analogger.rb +39 -0
- data/lib/ramaze/log/growl.rb +38 -0
- data/lib/ramaze/log/hub.rb +41 -0
- data/lib/ramaze/log/informer.rb +129 -0
- data/lib/ramaze/log/knotify.rb +28 -0
- data/lib/ramaze/log/logger.rb +26 -0
- data/lib/ramaze/log/logging.rb +83 -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/middleware_compiler.rb +13 -0
- data/lib/ramaze/plugin.rb +69 -0
- data/lib/ramaze/reloader.rb +172 -0
- data/lib/ramaze/reloader/watch_inotify.rb +85 -0
- data/lib/ramaze/reloader/watch_stat.rb +58 -0
- data/lib/ramaze/request.rb +115 -0
- data/lib/ramaze/response.rb +36 -0
- data/lib/ramaze/setup.rb +123 -0
- data/lib/ramaze/snippets.rb +22 -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/fiber.rb +63 -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/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/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/deprecated.rb +23 -0
- data/lib/ramaze/snippets/ramaze/dictionary.rb +400 -0
- data/lib/ramaze/snippets/ramaze/fiber.rb +24 -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/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/spec.rb +33 -0
- data/lib/ramaze/spec/bacon.rb +34 -0
- data/lib/ramaze/spec/helper/bacon.rb +8 -0
- data/lib/ramaze/spec/helper/pretty_output.rb +82 -0
- data/lib/ramaze/spec/helper/snippets.rb +16 -0
- data/lib/ramaze/spec/helper/template_examples.rb +19 -0
- data/lib/ramaze/tool/bin.rb +340 -0
- data/lib/ramaze/tool/create.rb +48 -0
- data/lib/ramaze/tool/project_creator.rb +111 -0
- data/lib/ramaze/version.rb +3 -0
- data/lib/ramaze/view.rb +39 -0
- data/lib/ramaze/view/erubis.rb +23 -0
- data/lib/ramaze/view/ezamar.rb +23 -0
- data/lib/ramaze/view/gestalt.rb +14 -0
- data/lib/ramaze/view/haml.rb +16 -0
- data/lib/ramaze/view/liquid.rb +100 -0
- data/lib/ramaze/view/maruku.rb +15 -0
- data/lib/ramaze/view/nagoro.rb +44 -0
- data/lib/ramaze/view/nagoro/render_partial.rb +32 -0
- data/lib/ramaze/view/redcloth.rb +21 -0
- data/lib/ramaze/view/remarkably.rb +21 -0
- data/lib/ramaze/view/sass.rb +21 -0
- data/lib/ramaze/view/tagz.rb +63 -0
- data/lib/ramaze/view/tenjin.rb +32 -0
- data/lib/vendor/etag.rb +22 -0
- data/lib/vendor/route_exceptions.rb +42 -0
- data/ramaze.gemspec +85 -0
- data/spec/contrib/addressable_route.rb +32 -0
- data/spec/contrib/rest.rb +28 -0
- data/spec/examples/caching.rb +16 -0
- data/spec/examples/css.rb +14 -0
- data/spec/examples/element.rb +15 -0
- data/spec/examples/hello.rb +10 -0
- data/spec/examples/helpers/httpdigest.rb +64 -0
- data/spec/examples/linking.rb +17 -0
- data/spec/examples/simple.rb +40 -0
- data/spec/examples/templates/template_erubis.rb +10 -0
- data/spec/examples/templates/template_ezamar.rb +10 -0
- data/spec/examples/templates/template_haml.rb +10 -0
- data/spec/examples/templates/template_liquid.rb +10 -0
- data/spec/examples/templates/template_markaby.rb +11 -0
- data/spec/examples/templates/template_nagoro.rb +10 -0
- data/spec/examples/templates/template_redcloth.rb +10 -0
- data/spec/examples/templates/template_remarkably.rb +10 -0
- data/spec/examples/templates/template_tenjin.rb +10 -0
- data/spec/helper.rb +9 -0
- data/spec/ramaze/action/render.rb +21 -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.erb +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.erb +1 -0
- data/spec/ramaze/action/view/sub/sub_wrapper.xhtml +1 -0
- data/spec/ramaze/app.rb +47 -0
- data/spec/ramaze/bin/ramaze.rb +91 -0
- data/spec/ramaze/cache/localmemcache.rb +49 -0
- data/spec/ramaze/cache/memcache.rb +60 -0
- data/spec/ramaze/cache/sequel.rb +51 -0
- data/spec/ramaze/controller/actionless_templates.rb +36 -0
- data/spec/ramaze/controller/lonely_mapping.rb +16 -0
- data/spec/ramaze/controller/mapping.rb +43 -0
- data/spec/ramaze/controller/provide_inheritance.rb +47 -0
- data/spec/ramaze/controller/resolve.rb +30 -0
- data/spec/ramaze/controller/subclass.rb +36 -0
- data/spec/ramaze/controller/template_resolving.rb +77 -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/dispatcher/directory.rb +69 -0
- data/spec/ramaze/dispatcher/file.rb +71 -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/error.rb +88 -0
- data/spec/ramaze/files.rb +29 -0
- data/spec/ramaze/files/public_1/plain.txt +1 -0
- data/spec/ramaze/files/public_2/rich.txt +1 -0
- data/spec/ramaze/gestalt.rb +135 -0
- data/spec/ramaze/helper/auth.rb +83 -0
- data/spec/ramaze/helper/bench.rb +18 -0
- data/spec/ramaze/helper/cache.rb +124 -0
- data/spec/ramaze/helper/flash.rb +41 -0
- data/spec/ramaze/helper/form.rb +356 -0
- data/spec/ramaze/helper/formatting.rb +111 -0
- data/spec/ramaze/helper/gestalt.rb +15 -0
- data/spec/ramaze/helper/gravatar.rb +40 -0
- data/spec/ramaze/helper/httpdigest.rb +144 -0
- data/spec/ramaze/helper/layout.rb +79 -0
- data/spec/ramaze/helper/layout/default.xhtml +5 -0
- data/spec/ramaze/helper/link.rb +70 -0
- data/spec/ramaze/helper/localize.rb +62 -0
- data/spec/ramaze/helper/maruku.rb +19 -0
- data/spec/ramaze/helper/pager.rb +96 -0
- data/spec/ramaze/helper/paginate.rb +68 -0
- data/spec/ramaze/helper/request_accessor.rb +19 -0
- data/spec/ramaze/helper/sequel_form.rb +91 -0
- data/spec/ramaze/helper/simple_captcha.rb +45 -0
- data/spec/ramaze/helper/stack.rb +86 -0
- data/spec/ramaze/helper/user.rb +72 -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/helper/xhtml.rb +32 -0
- data/spec/ramaze/log/informer.rb +73 -0
- data/spec/ramaze/log/logging.rb +63 -0
- data/spec/ramaze/log/syslog.rb +73 -0
- data/spec/ramaze/params.rb +153 -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.rb +61 -0
- data/spec/ramaze/rewrite/file.css +1 -0
- data/spec/ramaze/session/memcache.rb +66 -0
- data/spec/ramaze/struct.rb +47 -0
- data/spec/ramaze/template/ramaze/external.test +1 -0
- data/spec/ramaze/view.rb +36 -0
- data/spec/ramaze/view/erubis.rb +73 -0
- data/spec/ramaze/view/erubis/external.rhtml +8 -0
- data/spec/ramaze/view/erubis/sum.rhtml +1 -0
- data/spec/ramaze/view/ezamar.rb +73 -0
- data/spec/ramaze/view/ezamar/external.zmr +8 -0
- data/spec/ramaze/view/ezamar/sum.zmr +1 -0
- data/spec/ramaze/view/gestalt.rb +94 -0
- data/spec/ramaze/view/gestalt/external.ges +8 -0
- data/spec/ramaze/view/haml.rb +86 -0
- data/spec/ramaze/view/haml/external.haml +5 -0
- data/spec/ramaze/view/haml/sum.haml +2 -0
- data/spec/ramaze/view/liquid.rb +73 -0
- data/spec/ramaze/view/liquid/external.liquid +8 -0
- data/spec/ramaze/view/liquid/sum.liquid +1 -0
- data/spec/ramaze/view/nagoro.rb +73 -0
- data/spec/ramaze/view/nagoro/external.nag +8 -0
- data/spec/ramaze/view/nagoro/sum.nag +1 -0
- data/spec/ramaze/view/redcloth.rb +66 -0
- data/spec/ramaze/view/redcloth/external.redcloth +8 -0
- data/spec/ramaze/view/remarkably.rb +49 -0
- data/spec/ramaze/view/remarkably/external.rem +8 -0
- data/spec/ramaze/view/remarkably/sum.rem +1 -0
- data/spec/ramaze/view/sass.rb +73 -0
- data/spec/ramaze/view/sass/file.css.sass +5 -0
- data/spec/ramaze/view/tagz.rb +51 -0
- data/spec/ramaze/view/tagz/external.tagz +8 -0
- data/spec/ramaze/view/tagz/sum.tagz +1 -0
- data/spec/ramaze/view/tenjin.rb +57 -0
- data/spec/ramaze/view/tenjin/external.rbhtml +8 -0
- data/spec/ramaze/view/tenjin/sum.rbhtml +1 -0
- data/spec/snippets/array/put_within.rb +33 -0
- data/spec/snippets/binding/locals.rb +9 -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/dictionary.rb +110 -0
- data/spec/snippets/ramaze/struct.rb +12 -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 +9 -0
- data/tasks/authors.rake +30 -0
- data/tasks/bacon.rake +66 -0
- data/tasks/changelog.rake +20 -0
- data/tasks/copyright.rake +21 -0
- data/tasks/gem.rake +22 -0
- data/tasks/gem_setup.rake +99 -0
- data/tasks/git.rake +46 -0
- data/tasks/grancher.rake +12 -0
- data/tasks/jquery.rake +15 -0
- data/tasks/manifest.rake +4 -0
- data/tasks/metric_changes.rake +24 -0
- data/tasks/rcov.rake +23 -0
- data/tasks/release.rake +54 -0
- data/tasks/reversion.rake +8 -0
- data/tasks/setup.rake +6 -0
- data/tasks/todo.rake +27 -0
- data/tasks/traits.rake +21 -0
- data/tasks/yard.rake +4 -0
- metadata +720 -0
@@ -0,0 +1,104 @@
|
|
1
|
+
# Copyright (c) 2009 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
|
+
include Innate::Traited
|
7
|
+
include Innate::Node
|
8
|
+
|
9
|
+
# we are no mapped node
|
10
|
+
Innate::Node::NODE_LIST.delete(self)
|
11
|
+
|
12
|
+
# call our setup method one startup
|
13
|
+
Ramaze.options.setup << self
|
14
|
+
|
15
|
+
CONTROLLER_LIST = Set.new
|
16
|
+
|
17
|
+
trait :app => :pristine
|
18
|
+
trait :skip_controller_map => false
|
19
|
+
|
20
|
+
def self.inherited(into)
|
21
|
+
Innate::Node.included(into)
|
22
|
+
into.helper(:layout)
|
23
|
+
CONTROLLER_LIST << into
|
24
|
+
into.trait :skip_node_map => true
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.setup
|
28
|
+
case CONTROLLER_LIST.size
|
29
|
+
when 0
|
30
|
+
require 'ramaze/controller/default'
|
31
|
+
when 1
|
32
|
+
controller = CONTROLLER_LIST.to_a.first
|
33
|
+
|
34
|
+
begin
|
35
|
+
controller.mapping
|
36
|
+
rescue
|
37
|
+
controller.map '/'
|
38
|
+
end
|
39
|
+
|
40
|
+
controller.setup_procedure
|
41
|
+
else
|
42
|
+
CONTROLLER_LIST.each do |controller|
|
43
|
+
controller.setup_procedure
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.setup_procedure
|
49
|
+
unless ancestral_trait[:provide_set]
|
50
|
+
engine(:Etanni)
|
51
|
+
trait(:provide_set => false)
|
52
|
+
end
|
53
|
+
|
54
|
+
return if trait[:skip_controller_map]
|
55
|
+
|
56
|
+
map(generate_mapping(name))
|
57
|
+
end
|
58
|
+
|
59
|
+
def self.engine(name)
|
60
|
+
provide(:html, name.to_sym)
|
61
|
+
end
|
62
|
+
|
63
|
+
def self.mapping
|
64
|
+
Ramaze.to(self)
|
65
|
+
end
|
66
|
+
|
67
|
+
IRREGULAR_MAPPING = {
|
68
|
+
'Controller' => nil,
|
69
|
+
'MainController' => '/'
|
70
|
+
}
|
71
|
+
|
72
|
+
def self.generate_mapping(klass_name = self.name)
|
73
|
+
chunks = klass_name.to_s.split(/::/)
|
74
|
+
return if chunks.empty?
|
75
|
+
|
76
|
+
last = chunks.last
|
77
|
+
return IRREGULAR_MAPPING[last] if IRREGULAR_MAPPING.key?(last)
|
78
|
+
|
79
|
+
last.sub!(/Controller$/, '')
|
80
|
+
'/' << chunks.map{|chunk| chunk.snake_case }.join('/')
|
81
|
+
end
|
82
|
+
|
83
|
+
def self.map(location, app_name = nil)
|
84
|
+
if app_name
|
85
|
+
trait :app => app_name
|
86
|
+
else
|
87
|
+
app_name = ancestral_trait[:app]
|
88
|
+
end
|
89
|
+
|
90
|
+
trait :skip_controller_map => true
|
91
|
+
|
92
|
+
App.find_or_create(app_name).map(location, self)
|
93
|
+
end
|
94
|
+
|
95
|
+
def self.app
|
96
|
+
App[ancestral_trait[:app]]
|
97
|
+
end
|
98
|
+
|
99
|
+
def self.options
|
100
|
+
return unless app = self.app
|
101
|
+
app.options
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
data/lib/ramaze/files.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
module Ramaze
|
2
|
+
# Serving multiple public directories made easy.
|
3
|
+
class Files
|
4
|
+
def initialize(*roots)
|
5
|
+
@roots = roots.flatten.map{|root| File.expand_path(root.to_s) }
|
6
|
+
sync
|
7
|
+
end
|
8
|
+
|
9
|
+
def call(env)
|
10
|
+
@cascade.call(env)
|
11
|
+
end
|
12
|
+
|
13
|
+
def <<(path)
|
14
|
+
@roots << File.expand_path(path.to_s)
|
15
|
+
@roots.uniq!
|
16
|
+
sync
|
17
|
+
end
|
18
|
+
|
19
|
+
def sync
|
20
|
+
file_apps = @roots.map{|root| Rack::File.new(root) }
|
21
|
+
@cascade = Rack::Cascade.new(file_apps)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,132 @@
|
|
1
|
+
# Copyright (c) 2009 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
|
+
# workaround for Kernel#select to make <select></select> work
|
79
|
+
def select(*args, &block)
|
80
|
+
_gestalt_call_tag(:select, args, &block)
|
81
|
+
end
|
82
|
+
|
83
|
+
def _gestalt_call_tag(name, args, &block)
|
84
|
+
if args.size == 1 and args[0].kind_of? Hash
|
85
|
+
# args are just attributes, children in block...
|
86
|
+
_gestalt_build_tag name, args[0], &block
|
87
|
+
elsif args[1].kind_of? Hash
|
88
|
+
# args are text and attributes ie. a('mylink', :href => '/mylink')
|
89
|
+
_gestalt_build_tag(name, args[1], args[0], &block)
|
90
|
+
else
|
91
|
+
# no attributes, but text
|
92
|
+
_gestalt_build_tag name, {}, args, &block
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
# build a tag for `name`, using `args` and an optional block that
|
97
|
+
# will be yielded
|
98
|
+
|
99
|
+
def _gestalt_build_tag(name, attr = {}, text = [])
|
100
|
+
@out << "<#{name}"
|
101
|
+
@out << attr.map{|(k,v)| %[ #{k}="#{_gestalt_escape_entities(v)}"] }.join
|
102
|
+
if text != [] or block_given?
|
103
|
+
@out << ">"
|
104
|
+
@out << _gestalt_escape_entities([text].join)
|
105
|
+
if block_given?
|
106
|
+
text = yield
|
107
|
+
@out << text.to_str if text != @out and text.respond_to?(:to_str)
|
108
|
+
end
|
109
|
+
@out << "</#{name}>"
|
110
|
+
else
|
111
|
+
@out << ' />'
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
def _gestalt_escape_entities(s)
|
116
|
+
s.to_s.gsub(/&/, '&').
|
117
|
+
gsub(/"/, '"').
|
118
|
+
gsub(/'/, ''').
|
119
|
+
gsub(/</, '<').
|
120
|
+
gsub(/>/, '>')
|
121
|
+
end
|
122
|
+
|
123
|
+
def tag(name, *args, &block)
|
124
|
+
_gestalt_call_tag(name.to_s, args, &block)
|
125
|
+
end
|
126
|
+
|
127
|
+
def to_s
|
128
|
+
@out.join
|
129
|
+
end
|
130
|
+
alias to_str to_s
|
131
|
+
end
|
132
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
|
2
|
+
# All files in this distribution are subject to the terms of the Ruby license.
|
3
|
+
|
4
|
+
require 'innate/helper'
|
5
|
+
|
6
|
+
module Ramaze
|
7
|
+
Helper = Innate::Helper
|
8
|
+
Innate::HelpersHelper.options.paths << File.dirname(__FILE__)
|
9
|
+
|
10
|
+
require 'ramaze/helper/flash'
|
11
|
+
require 'ramaze/helper/link'
|
12
|
+
require 'ramaze/helper/layout'
|
13
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
# Copyright (c) 2009 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
|
+
module Helper
|
6
|
+
|
7
|
+
# A simple way to do authentication without a model.
|
8
|
+
# Please have a look at the docs of Auth#auth_login.
|
9
|
+
#
|
10
|
+
# If you want to do authentication with a model see Helper::User instead.
|
11
|
+
module Auth
|
12
|
+
Helper::LOOKUP << self
|
13
|
+
include Ramaze::Traited
|
14
|
+
|
15
|
+
trait :auth_table => {}
|
16
|
+
trait :auth_hashify => lambda{|pass| Digest::SHA1.hexdigest(pass) }
|
17
|
+
trait :auth_post_only => false
|
18
|
+
|
19
|
+
def self.included(into)
|
20
|
+
into.helper(:stack)
|
21
|
+
end
|
22
|
+
|
23
|
+
def login
|
24
|
+
return auth_template if trait[:auth_post_only] and !request.post?
|
25
|
+
@username, password = request[:username, :password]
|
26
|
+
answer(request.referer) if auth_login(@username, password)
|
27
|
+
return auth_template
|
28
|
+
end
|
29
|
+
|
30
|
+
def logout
|
31
|
+
auth_logout
|
32
|
+
answer(request.referer)
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def login_required
|
38
|
+
call(r(:login)) unless logged_in?
|
39
|
+
end
|
40
|
+
|
41
|
+
# @return [true false] whether user is logged in right now
|
42
|
+
def logged_in?
|
43
|
+
!!session[:logged_in]
|
44
|
+
end
|
45
|
+
|
46
|
+
# @return
|
47
|
+
def auth_login(user, pass)
|
48
|
+
return unless user and pass
|
49
|
+
return if user.empty? or pass.empty?
|
50
|
+
return unless table = ancestral_trait[:auth_table]
|
51
|
+
return unless hashify = ancestral_trait[:auth_hashify]
|
52
|
+
|
53
|
+
if table.respond_to?(:to_sym) or table.respond_to?(:to_str)
|
54
|
+
table = send(table)
|
55
|
+
elsif table.respond_to?(:call)
|
56
|
+
table = table.call
|
57
|
+
end
|
58
|
+
|
59
|
+
return unless table[user] == hashify.call(pass)
|
60
|
+
|
61
|
+
session[:logged_in] = true
|
62
|
+
session[:username] = user
|
63
|
+
end
|
64
|
+
|
65
|
+
def auth_logout
|
66
|
+
session.delete(:logged_in)
|
67
|
+
session.delete(:username)
|
68
|
+
end
|
69
|
+
|
70
|
+
# @return [String] template for auth
|
71
|
+
def auth_template
|
72
|
+
<<-TEMPLATE.strip!
|
73
|
+
<form method="post" action="#{r(:login)}">
|
74
|
+
<ul style="list-style:none;">
|
75
|
+
<li>Username: <input type="text" name="username" value="#@username"/></li>
|
76
|
+
<li>Password: <input type="password" name="password" /></li>
|
77
|
+
<li><input type="submit" /></li>
|
78
|
+
</ul>
|
79
|
+
</form>
|
80
|
+
TEMPLATE
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,41 @@
|
|
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
|
+
module Bench
|
8
|
+
|
9
|
+
# Will first run an empty loop to determine the overhead it imposes, then
|
10
|
+
# goes on to yield your block +iterations+ times.
|
11
|
+
#
|
12
|
+
# The last yielded return value will be returned upon completion of the
|
13
|
+
# benchmark and the result of the benchmark itself will be sent to
|
14
|
+
# Log.info
|
15
|
+
#
|
16
|
+
# Example:
|
17
|
+
#
|
18
|
+
# class MainController < Ramaze::Controller
|
19
|
+
# def index
|
20
|
+
# @users = bench{ User.all }
|
21
|
+
# @tags = bench{ Article.tags }
|
22
|
+
# end
|
23
|
+
# end
|
24
|
+
#
|
25
|
+
# This will show something like following in your log:
|
26
|
+
# [..] INFO Bench ./start.rb:3:in `index': 0.121163845062256
|
27
|
+
# [..] INFO Bench ./start.rb:4:in `index': 2.234987235098341
|
28
|
+
#
|
29
|
+
# So now we know that the Article.tags call takes the most time and
|
30
|
+
# should be improved.
|
31
|
+
def bench(iterations = 1)
|
32
|
+
result = nil
|
33
|
+
from = caller[0]
|
34
|
+
delta = Benchmark.realtime{ iterations.times{ nil }}
|
35
|
+
taken = Benchmark.realtime{ iterations.times{ result = yield }}
|
36
|
+
Log.info "Bench #{from}: #{taken - delta}"
|
37
|
+
return result
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,117 @@
|
|
1
|
+
# Copyright (c) 2009 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
|
+
module Helper
|
6
|
+
|
7
|
+
# Caching of simple objects and whole action responses.
|
8
|
+
module Cache
|
9
|
+
|
10
|
+
# Setup needed traits, add the singleton methods and add the caches used
|
11
|
+
# by this helper.
|
12
|
+
#
|
13
|
+
# @param [Class] into Class that this Module is included into
|
14
|
+
# @author manveru
|
15
|
+
def self.included(into)
|
16
|
+
into.extend(SingletonMethods)
|
17
|
+
into.add_action_wrapper(6.0, :cache_wrap)
|
18
|
+
into.trait[:cache_action] ||= Set.new
|
19
|
+
Ramaze::Cache.add(:action, :cache_helper_value)
|
20
|
+
end
|
21
|
+
|
22
|
+
# @param [Action] action The currently wrapped action
|
23
|
+
# @yield The next block in wrap_action_call
|
24
|
+
# @return [String] the response body
|
25
|
+
# @see Innate::Node#wrap_action_call
|
26
|
+
# @author manveru
|
27
|
+
def cache_wrap(action)
|
28
|
+
cache = Innate::Cache.action
|
29
|
+
|
30
|
+
ancestral_trait[:cache_action].each do |cache_action|
|
31
|
+
temp = cache_action.dup
|
32
|
+
block = temp.delete(:key)
|
33
|
+
ttl = temp.delete(:ttl)
|
34
|
+
|
35
|
+
if temp.all?{|key, value| action[key] == value }
|
36
|
+
cache_key = action.full_path
|
37
|
+
cache_key << "_#{action.instance.instance_eval(&block).to_s}" if block
|
38
|
+
|
39
|
+
if cached = cache[cache_key]
|
40
|
+
action.options[:content_type] = cached[:type]
|
41
|
+
else
|
42
|
+
cached = {
|
43
|
+
:body => catch(:respond) { yield },
|
44
|
+
:type => response['Content-Type']
|
45
|
+
}
|
46
|
+
|
47
|
+
if ttl
|
48
|
+
cache.store(cache_key, cached, :ttl => ttl)
|
49
|
+
else
|
50
|
+
cache.store(cache_key, cached)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
return cached[:body]
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
yield
|
59
|
+
end
|
60
|
+
|
61
|
+
# This method is used to access Ramaze::Cache.cache_helper_value.
|
62
|
+
# It provides an easy way to cache long-running computations, gathering
|
63
|
+
# external resources like RSS feeds or DB queries that are the same for
|
64
|
+
# every user of an application.
|
65
|
+
# This method changes behaviour if a block is passed, which can be used
|
66
|
+
# to do lazy computation of the cached value conveniently when using a
|
67
|
+
# custom TTL or longer expressions that don't fit on one line with ||=.
|
68
|
+
#
|
69
|
+
# @usage Example to get the cache object directly
|
70
|
+
#
|
71
|
+
# count = cache_value[:count] ||= Article.count
|
72
|
+
#
|
73
|
+
# @usage Example with block
|
74
|
+
#
|
75
|
+
# count = cache_value(:count){ Article.count }
|
76
|
+
# count = cache_value(:count, :ttl => 60){ Article.count }
|
77
|
+
#
|
78
|
+
# @return [Object] The cache wrapper assigned for :cache_helper_value
|
79
|
+
# @see Innate::Cache
|
80
|
+
# @author manveru
|
81
|
+
def cache_value(key = nil, options = {})
|
82
|
+
cache = Ramaze::Cache.cache_helper_value
|
83
|
+
|
84
|
+
if key and block_given?
|
85
|
+
if found = cache[key]
|
86
|
+
found
|
87
|
+
else
|
88
|
+
cache.store(key, yield, options)
|
89
|
+
end
|
90
|
+
else
|
91
|
+
cache
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
module SingletonMethods
|
96
|
+
# This method allows you to cache whole actions.
|
97
|
+
#
|
98
|
+
# @example Basic usage
|
99
|
+
#
|
100
|
+
# class Foo < Ramaze::Controller
|
101
|
+
# helper :cache
|
102
|
+
# cache_action :method => :bar
|
103
|
+
#
|
104
|
+
# def bar
|
105
|
+
# rand
|
106
|
+
# end
|
107
|
+
# end
|
108
|
+
#
|
109
|
+
def cache_action(hash, &block)
|
110
|
+
hash[:key] = block if block_given?
|
111
|
+
hash[:method] = hash[:method].to_s
|
112
|
+
trait[:cache_action] << hash
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|