Pistos-ramaze 2008.09
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.markdown +481 -0
- data/Rakefile +228 -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 +37 -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/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 +50 -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 +10 -0
- data/lib/proto/controller/main.rb +20 -0
- data/lib/proto/model/init.rb +4 -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 +8 -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 +191 -0
- data/lib/ramaze/action.rb +153 -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/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 +113 -0
- data/lib/ramaze/contrib/auto_params/get_args.rb +58 -0
- data/lib/ramaze/contrib/auto_params.rb +135 -0
- data/lib/ramaze/contrib/email.rb +84 -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 +65 -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 +273 -0
- data/lib/ramaze/controller.rb +280 -0
- data/lib/ramaze/current/request.rb +205 -0
- data/lib/ramaze/current/response.rb +39 -0
- data/lib/ramaze/current/session/flash.rb +87 -0
- data/lib/ramaze/current/session/hash.rb +66 -0
- data/lib/ramaze/current/session.rb +181 -0
- data/lib/ramaze/current.rb +110 -0
- data/lib/ramaze/dispatcher/action.rb +48 -0
- data/lib/ramaze/dispatcher/directory.rb +119 -0
- data/lib/ramaze/dispatcher/error.rb +108 -0
- data/lib/ramaze/dispatcher/file.rb +95 -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/cache.rb +140 -0
- data/lib/ramaze/helper/cgi.rb +39 -0
- data/lib/ramaze/helper/flash.rb +59 -0
- data/lib/ramaze/helper/form.rb +281 -0
- data/lib/ramaze/helper/formatting.rb +158 -0
- data/lib/ramaze/helper/gestalt.rb +15 -0
- data/lib/ramaze/helper/gravatar.rb +15 -0
- data/lib/ramaze/helper/httpdigest.rb +59 -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 +7 -0
- data/lib/ramaze/helper/nitroform.rb +14 -0
- data/lib/ramaze/helper/pager.rb +366 -0
- data/lib/ramaze/helper/paginate.rb +234 -0
- data/lib/ramaze/helper/partial.rb +105 -0
- data/lib/ramaze/helper/redirect.rb +82 -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 +79 -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/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.rb +186 -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 +20 -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 +40 -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/caller_info.rb +30 -0
- data/lib/ramaze/snippets/ramaze/caller_lines.rb +51 -0
- data/lib/ramaze/snippets/ramaze/deprecated.rb +20 -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 +63 -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 +45 -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 +31 -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 +37 -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 +110 -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 +133 -0
- data/lib/vendor/bacon.rb +323 -0
- data/rake_tasks/conf.rake +71 -0
- data/rake_tasks/coverage.rake +46 -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 +773 -0
- data/spec/contrib/auto_params.rb +121 -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 +73 -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 +69 -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/divide.rb +19 -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 +8 -0
- data/spec/snippets/object/acquire.rb +71 -0
- data/spec/snippets/ordered_set.rb +63 -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 +823 -0
@@ -0,0 +1,234 @@
|
|
1
|
+
require 'ramaze/gestalt'
|
2
|
+
|
3
|
+
module Ramaze
|
4
|
+
module Helper
|
5
|
+
|
6
|
+
# Helper for pagination and pagination-navigation.
|
7
|
+
#
|
8
|
+
# See detailed API docs for Paginator below.
|
9
|
+
# Also have a look at the examples/helpers/paginate.rb
|
10
|
+
|
11
|
+
module Paginate
|
12
|
+
|
13
|
+
# Define default options in your Controller, they are being retrieved by
|
14
|
+
# ancestral_trait, so you can also put it into a common superclass
|
15
|
+
|
16
|
+
trait :paginate => {
|
17
|
+
:limit => 10,
|
18
|
+
:var => 'pager',
|
19
|
+
}
|
20
|
+
|
21
|
+
# Returns a new Paginator instance.
|
22
|
+
#
|
23
|
+
# Note that the pagination relies on being inside a Ramaze request to
|
24
|
+
# gain necessary metadata about the page it resides on, you cannot use it
|
25
|
+
# outside of Ramaze yet.
|
26
|
+
#
|
27
|
+
# The examples below are meant to be used within your controller or view.
|
28
|
+
#
|
29
|
+
# Usage with Array:
|
30
|
+
# data = (1..100).to_a
|
31
|
+
# @pager = paginate(data, :limit => 30, :page => 2)
|
32
|
+
# @pager.navigation
|
33
|
+
# @pager.each{|e| puts(e) }
|
34
|
+
#
|
35
|
+
# Usage with Sequel:
|
36
|
+
# data = Article.filter(:public => true)
|
37
|
+
# @pager = paginate(data, :limit => 5)
|
38
|
+
# @pager.navigation
|
39
|
+
# @pager.each{|e| puts(e)
|
40
|
+
#
|
41
|
+
# +dataset+ may be a Sequel dataset or Array
|
42
|
+
# +options+ Takes precedence to trait[:paginate] and may contain
|
43
|
+
# following pairs:
|
44
|
+
# :limit The number of elements used when you call #each on the
|
45
|
+
# paginator
|
46
|
+
# :var The variable name being used in the request, this is helpful
|
47
|
+
# if you want to use two or more independent paginations on the
|
48
|
+
# same page.
|
49
|
+
# :page The page you are currently on, if not given it will be
|
50
|
+
# retrieved from current request variables. Defaults to 1 if
|
51
|
+
# neither exists.
|
52
|
+
|
53
|
+
def paginate(dataset, options = {})
|
54
|
+
options = ancestral_trait[:paginate].merge(options)
|
55
|
+
limit = options[:limit]
|
56
|
+
var = options[:var]
|
57
|
+
page = options[:page] || (request[var] || 1).to_i
|
58
|
+
|
59
|
+
Paginator.new(dataset, page, limit, var)
|
60
|
+
end
|
61
|
+
|
62
|
+
# Provides easy pagination and navigation
|
63
|
+
|
64
|
+
class Paginator
|
65
|
+
include Ramaze::Helper::Link
|
66
|
+
include Ramaze::Helper::CGI
|
67
|
+
|
68
|
+
def initialize(data = [], page = 1, limit = 10, var = 'pager')
|
69
|
+
@data, @page, @limit, @var = data, page, limit, var
|
70
|
+
@pager = pager_for(data)
|
71
|
+
@page = @page > page_count ? page_count : @page
|
72
|
+
@pager = pager_for(data)
|
73
|
+
end
|
74
|
+
|
75
|
+
# Returns String with navigation div.
|
76
|
+
#
|
77
|
+
# This cannot be customized very nicely, but you can style it easily
|
78
|
+
# with CSS.
|
79
|
+
#
|
80
|
+
# Output with 5 elements, page 1, limit 3:
|
81
|
+
# <div class="pager">
|
82
|
+
# <span class="first grey"><<</span>
|
83
|
+
# <span class="previous grey"><</span>
|
84
|
+
# <a class="current" href="/index?pager=1">1</a>
|
85
|
+
# <a href="/index?pager=2">2</a>
|
86
|
+
# <a class="next" href="/index?pager=2">></a>
|
87
|
+
# <a class="last" href="/index?pager=2">>></a>
|
88
|
+
# </div>
|
89
|
+
#
|
90
|
+
# Output with 5 elements, page 2, limit 3:
|
91
|
+
# <div class="pager" />
|
92
|
+
# <a class="first" href="/index?user_page=1"><<</a>
|
93
|
+
# <a class="previous" href="/index?user_page=1"><</a>
|
94
|
+
# <a href="/index?user_page=1">1</a>
|
95
|
+
# <a class="current" href="/index?user_page=2">2</a>
|
96
|
+
# <span class="next grey">></span>
|
97
|
+
# <span class="last grey">>></span>
|
98
|
+
# </div>
|
99
|
+
|
100
|
+
|
101
|
+
def navigation(limit = 8)
|
102
|
+
out = [ g.div(:class => :pager) ]
|
103
|
+
|
104
|
+
if first_page?
|
105
|
+
out << g.span(:class => 'first grey'){ h('<<') }
|
106
|
+
out << g.span(:class => 'previous grey'){ h('<') }
|
107
|
+
else
|
108
|
+
out << link(1, '<<', :class => :first)
|
109
|
+
out << link(prev_page, '<', :class => :previous)
|
110
|
+
end
|
111
|
+
|
112
|
+
lower = limit ? (current_page - limit) : 1
|
113
|
+
lower = lower < 1 ? 1 : lower
|
114
|
+
|
115
|
+
(lower...current_page).each do |n|
|
116
|
+
out << link(n)
|
117
|
+
end
|
118
|
+
|
119
|
+
out << link(current_page, current_page, :class => :current)
|
120
|
+
|
121
|
+
if last_page?
|
122
|
+
out << g.span(:class => 'next grey'){ h('>') }
|
123
|
+
out << g.span(:class => 'last grey'){ h('>>') }
|
124
|
+
elsif next_page
|
125
|
+
higher = limit ? (next_page + limit) : page_count
|
126
|
+
higher = [higher, page_count].min
|
127
|
+
(next_page..higher).each do |n|
|
128
|
+
out << link(n)
|
129
|
+
end
|
130
|
+
|
131
|
+
out << link(next_page, '>', :class => :next)
|
132
|
+
out << link(page_count, '>>', :class => :last)
|
133
|
+
end
|
134
|
+
|
135
|
+
out << '</div>'
|
136
|
+
out.map{|e| e.to_s}.join("\n")
|
137
|
+
end
|
138
|
+
|
139
|
+
# Useful to omit pager if it's of no use.
|
140
|
+
|
141
|
+
def needed?
|
142
|
+
@pager.page_count > 1
|
143
|
+
end
|
144
|
+
|
145
|
+
# Forward everything to the inner @pager
|
146
|
+
|
147
|
+
def method_missing(meth, *args, &block)
|
148
|
+
@pager.send(meth, *args, &block)
|
149
|
+
end
|
150
|
+
|
151
|
+
private
|
152
|
+
|
153
|
+
def pager_for(obj)
|
154
|
+
@page = @page < 1 ? 1 : @page
|
155
|
+
|
156
|
+
case obj
|
157
|
+
when Array
|
158
|
+
ArrayPager.new(obj, @page, @limit)
|
159
|
+
else
|
160
|
+
obj.paginate(@page, @limit)
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
def link(n, text = n, hash = {})
|
165
|
+
text = h(text.to_s)
|
166
|
+
|
167
|
+
params = Ramaze::Request.current.params.merge(@var.to_s => n)
|
168
|
+
name = Ramaze::Action.stack.first.name
|
169
|
+
name = '/' if name == 'index' # make nicer...
|
170
|
+
hash[:href] = Rs(name, params)
|
171
|
+
|
172
|
+
g.a(hash){ text }
|
173
|
+
end
|
174
|
+
|
175
|
+
def g
|
176
|
+
Ramaze::Gestalt.new
|
177
|
+
end
|
178
|
+
|
179
|
+
# Wrapper for Array to behave like the Sequel pagination
|
180
|
+
|
181
|
+
class ArrayPager
|
182
|
+
def initialize(array, page, limit)
|
183
|
+
@array, @page, @limit = array, page, limit
|
184
|
+
@page = page_count if @page > page_count
|
185
|
+
end
|
186
|
+
|
187
|
+
def size
|
188
|
+
@array.size
|
189
|
+
end
|
190
|
+
|
191
|
+
def empty?
|
192
|
+
@array.empty?
|
193
|
+
end
|
194
|
+
|
195
|
+
def page_count
|
196
|
+
pages, rest = @array.size.divmod(@limit)
|
197
|
+
rest == 0 ? pages : pages + 1
|
198
|
+
end
|
199
|
+
|
200
|
+
def current_page
|
201
|
+
@page
|
202
|
+
end
|
203
|
+
|
204
|
+
def next_page
|
205
|
+
page_count == @page ? nil : @page + 1
|
206
|
+
end
|
207
|
+
|
208
|
+
def prev_page
|
209
|
+
@page <= 1 ? nil : @page - 1
|
210
|
+
end
|
211
|
+
|
212
|
+
def first_page?
|
213
|
+
@page <= 1
|
214
|
+
end
|
215
|
+
|
216
|
+
def last_page?
|
217
|
+
page_count == @page
|
218
|
+
end
|
219
|
+
|
220
|
+
def each(&block)
|
221
|
+
from = ((@page - 1) * @limit)
|
222
|
+
to = from + @limit
|
223
|
+
|
224
|
+
a = @array[from...to] || []
|
225
|
+
a.each(&block)
|
226
|
+
end
|
227
|
+
|
228
|
+
include Enumerable
|
229
|
+
end
|
230
|
+
|
231
|
+
end
|
232
|
+
end
|
233
|
+
end
|
234
|
+
end
|
@@ -0,0 +1,105 @@
|
|
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
|
+
# = Helper::Partial
|
7
|
+
#
|
8
|
+
# === Example Usage
|
9
|
+
#
|
10
|
+
# class MyController
|
11
|
+
# def index
|
12
|
+
# end
|
13
|
+
# def list
|
14
|
+
# plain = request['plain']
|
15
|
+
# "Hello World from List! Plain List == #{plain}"
|
16
|
+
# end
|
17
|
+
# end
|
18
|
+
#
|
19
|
+
#
|
20
|
+
# <html>
|
21
|
+
# <head><title>Partial Render Index</title></head>
|
22
|
+
# <body>
|
23
|
+
# #{render_partial(Rs(:list), 'plain' => true)}
|
24
|
+
# </body>
|
25
|
+
# </html>
|
26
|
+
|
27
|
+
module Helper::Partial
|
28
|
+
module_function
|
29
|
+
|
30
|
+
# Renders a url 'inline'.
|
31
|
+
#
|
32
|
+
# url: normal URL, like you'd use for redirecting.
|
33
|
+
# options: optional, will be used as request parameters.
|
34
|
+
|
35
|
+
def render_partial(url, options = {})
|
36
|
+
# Save any request params that clash with the ones we're about to add in.
|
37
|
+
saved = {}
|
38
|
+
options.keys.each {|x| saved[x] = Request.current.params[x] }
|
39
|
+
|
40
|
+
# Add/overwrite with the specified params. Ensure keys are strings since
|
41
|
+
# request[:foo] converts key to string when performing lookup.
|
42
|
+
options.each do |key, value|
|
43
|
+
Request.current.params[key.to_s] = value
|
44
|
+
end
|
45
|
+
|
46
|
+
Controller.handle(url)
|
47
|
+
ensure
|
48
|
+
# Always reinstate the original
|
49
|
+
options.keys.each {|x| Request.current.params[x] = saved[x] }
|
50
|
+
end
|
51
|
+
|
52
|
+
# Render the template file in view_root of the
|
53
|
+
# current controller.
|
54
|
+
|
55
|
+
def render_template(file, vars = {})
|
56
|
+
current = Action.current
|
57
|
+
options = { :controller => current.controller,
|
58
|
+
:instance => current.instance.dup }
|
59
|
+
|
60
|
+
file = file.to_s
|
61
|
+
|
62
|
+
if Pathname(file).absolute?
|
63
|
+
file = file.squeeze '/'
|
64
|
+
unless File.exist?(file)
|
65
|
+
Log.warn "render_template: #{file} does not exist."
|
66
|
+
return ''
|
67
|
+
end
|
68
|
+
options[:template] = file
|
69
|
+
else
|
70
|
+
roots = [options[:controller].template_paths].flatten
|
71
|
+
|
72
|
+
if (files = Dir["{#{roots.join(',')}}"/"{#{file},#{file}.*}"]).any?
|
73
|
+
options[:template] = files.first.squeeze '/'
|
74
|
+
else
|
75
|
+
Log.warn "render_template: #{file} does not exist in the following directories: #{roots.join(',')}."
|
76
|
+
return ''
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
binding = options[:instance].scope
|
81
|
+
|
82
|
+
# For Ruby 1.9/1.8.7
|
83
|
+
binding = binding.binding if binding.respond_to?(:binding)
|
84
|
+
|
85
|
+
vars.each do |name, value|
|
86
|
+
options[:instance].instance_variable_set("@#{name}", value)
|
87
|
+
|
88
|
+
value = "ObjectSpace._id2ref(#{ value.object_id })"
|
89
|
+
eval "#{ name } = #{ value }", binding
|
90
|
+
end
|
91
|
+
|
92
|
+
options[:binding] = binding
|
93
|
+
|
94
|
+
Ramaze::Action(options).render
|
95
|
+
end
|
96
|
+
|
97
|
+
# shortcut to render_partial, accepts a method and contructs a link to the
|
98
|
+
# current controller, then calls render_partial on that
|
99
|
+
|
100
|
+
def render_action method, *params
|
101
|
+
render_partial(Rs(method), *params)
|
102
|
+
end
|
103
|
+
|
104
|
+
end
|
105
|
+
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
|
+
# Helper::Redirect actually takes advantage of Helper::Link.link_raw to build the links
|
7
|
+
# it redirects to.
|
8
|
+
# It doesn't do much else than this:
|
9
|
+
# setting a status-code of 303 and a response['Location'] = link
|
10
|
+
# returning some nice text for visitors who insist on ignoring those hints :P
|
11
|
+
#
|
12
|
+
# Usage:
|
13
|
+
# redirect Rs()
|
14
|
+
# redirect R(MainController)
|
15
|
+
# redirect R(MainController, :foo)
|
16
|
+
# redirect 'foo/bar'
|
17
|
+
# redirect 'foo/bar', :status => 301
|
18
|
+
#
|
19
|
+
# TODO:
|
20
|
+
# - maybe some more options, like a delay
|
21
|
+
#
|
22
|
+
|
23
|
+
module Helper::Redirect
|
24
|
+
|
25
|
+
# render to the browser directly, ignoring any templates
|
26
|
+
#
|
27
|
+
# Usage:
|
28
|
+
# respond 'Page not found', 404
|
29
|
+
# respond render_template('forbidden.erb'), 403
|
30
|
+
# respond File.open('file.jpg'), 200, 'Content-Type' => 'image/jpeg'
|
31
|
+
|
32
|
+
def respond(*args)
|
33
|
+
response.build(*args)
|
34
|
+
throw(:respond)
|
35
|
+
end
|
36
|
+
|
37
|
+
# Usage:
|
38
|
+
# redirect Rs()
|
39
|
+
# redirect R(MainController)
|
40
|
+
# redirect R(MainController, :foo)
|
41
|
+
# redirect 'foo/bar'
|
42
|
+
# redirect 'foo/bar', :status => 301
|
43
|
+
|
44
|
+
def redirect(target, opts = {})
|
45
|
+
target = target.to_s
|
46
|
+
|
47
|
+
unless target =~ %r!^https?://!
|
48
|
+
target[0,0] = '/' unless target =~ %r!^/!
|
49
|
+
if host = request.env['HTTP_HOST']
|
50
|
+
target[0,0] = "http://#{host}"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
raw_redirect(target, opts)
|
55
|
+
end
|
56
|
+
|
57
|
+
# Do not perform any mutations on the target like #redirect does.
|
58
|
+
# Suitable if you have to redirect to a different subdomain or host.
|
59
|
+
def raw_redirect(target, opts = {})
|
60
|
+
target = target.to_s
|
61
|
+
header = {'Location' => target}
|
62
|
+
status = opts[:status] || STATUS_CODE["Moved Temporarily"]
|
63
|
+
body = %{You are being redirected, please follow <a href="#{target}">this link to: #{target}</a>!}
|
64
|
+
|
65
|
+
Log.info("Redirect to '#{target}'")
|
66
|
+
request[:redirected] = true
|
67
|
+
throw(:redirect, [body, status, header])
|
68
|
+
end
|
69
|
+
|
70
|
+
# Are we being redirected?
|
71
|
+
def redirected?
|
72
|
+
request[:redirected]
|
73
|
+
end
|
74
|
+
|
75
|
+
# redirect to the location the browser says it's coming from.
|
76
|
+
|
77
|
+
def redirect_referer
|
78
|
+
redirect request.referer
|
79
|
+
end
|
80
|
+
alias redirect_referrer redirect_referer
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Ramaze
|
2
|
+
module Helper
|
3
|
+
module REST
|
4
|
+
def self.included(klass)
|
5
|
+
klass.class_eval do
|
6
|
+
trait :REST => {
|
7
|
+
'GET' => [], 'PUT' => [],
|
8
|
+
'POST' => [], 'DELETE' => [],
|
9
|
+
:any => [],
|
10
|
+
}
|
11
|
+
extend Indicate
|
12
|
+
|
13
|
+
def self.method_added(name)
|
14
|
+
name = name.to_s
|
15
|
+
active = trait[:REST][:active] ||= :any
|
16
|
+
trait[:REST][active] << name
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
module Indicate
|
22
|
+
def on(http_method)
|
23
|
+
hm = http_method.to_s.upcase
|
24
|
+
trait[:REST][hm] = []
|
25
|
+
trait[:REST][:active] = hm
|
26
|
+
end
|
27
|
+
|
28
|
+
(%w[GET PUT POST DELETE] << 'any').each do |http_method|
|
29
|
+
define_method("on_#{http_method.downcase}") do |*args|
|
30
|
+
if args.empty?
|
31
|
+
on(http_method)
|
32
|
+
else
|
33
|
+
trait[:REST][http_method] += args.flatten
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
# POST /foo/bar
|
43
|
+
# methods_on_post[/foo/bar]
|
@@ -0,0 +1,16 @@
|
|
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
|
+
# Helper for quickly push out files with the proper mimetype.
|
7
|
+
|
8
|
+
module Helper::SendFile
|
9
|
+
# Sets Content-Type to the mimetype of the file and opens the file you pass
|
10
|
+
# it, then throws :respond to finish off the request.
|
11
|
+
|
12
|
+
def send_file(file, mime_type = Tool::MIME.type_for(file))
|
13
|
+
respond File.open(file, 'rb'), 200, 'Content-Type' => mime_type
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,55 @@
|
|
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
|
+
module Helper::Sequel
|
6
|
+
|
7
|
+
# Very crude paginator, may contain serious bugs, please fix :)
|
8
|
+
# pass it the result of YourModel.paginate, target is where links point to.
|
9
|
+
def paginator(paginated, target)
|
10
|
+
page_count = paginated.page_count
|
11
|
+
prev_page = paginated.prev_page
|
12
|
+
current_page = paginated.current_page
|
13
|
+
next_page = paginated.next_page
|
14
|
+
|
15
|
+
lower = (current_page - 3).abs
|
16
|
+
lower = lower == 0 ? 1 : lower
|
17
|
+
|
18
|
+
out = ['<div class="paginator">']
|
19
|
+
|
20
|
+
if prev_page
|
21
|
+
out << %(<a class="paginator_prev" href="#{Rs(target, prev_page)}">< Prev</a>)
|
22
|
+
else
|
23
|
+
out << %(<span class="paginator_prev">< Prev</span>)
|
24
|
+
end
|
25
|
+
|
26
|
+
if current_page > 3
|
27
|
+
out << %(<a class="paginator_page" href="#{Rs(target, 1)}">#{1}</a> ... )
|
28
|
+
end
|
29
|
+
|
30
|
+
lower.upto(current_page) do |pc|
|
31
|
+
next if pc == current_page
|
32
|
+
out << %(<a class="paginator_page" href="#{Rs(target, pc)}">#{pc}</a>)
|
33
|
+
end
|
34
|
+
|
35
|
+
out << %(<span class="paginator_current">#{current_page}</span>)
|
36
|
+
|
37
|
+
current_page.upto([page_count, current_page + 3].min) do |pc|
|
38
|
+
next if pc == current_page
|
39
|
+
out << %(<a class="paginator_page" href="#{Rs(target, pc)}">#{pc}</a>)
|
40
|
+
end
|
41
|
+
|
42
|
+
if current_page < (page_count - 3)
|
43
|
+
out << %(.. <a class="paginator_page" href="#{Rs(target, page_count)}">#{page_count}</a>)
|
44
|
+
end
|
45
|
+
|
46
|
+
if next_page
|
47
|
+
out << %(<a class="paginator_next" href="#{Rs(target, next_page)}">Next ></a>)
|
48
|
+
else
|
49
|
+
out << %(<span class="paginator_next">Next ></span>)
|
50
|
+
end
|
51
|
+
out << '</div>'
|
52
|
+
out.join(" ")
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Ramaze
|
2
|
+
module Helper
|
3
|
+
module SimpleCaptcha
|
4
|
+
def simple_captcha
|
5
|
+
question, answer = generate_captcha
|
6
|
+
session[:CAPTCHA] = {
|
7
|
+
:question => question, :answer => answer.to_s
|
8
|
+
}
|
9
|
+
question
|
10
|
+
end
|
11
|
+
|
12
|
+
def check_captcha(answer)
|
13
|
+
if captcha = session[:CAPTCHA]
|
14
|
+
should = captcha[:answer].to_s
|
15
|
+
should == answer.to_s.strip
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def generate_captcha
|
20
|
+
n = [5, 10, 15, 20]
|
21
|
+
ns = Array.new(2){ n.sort_by{rand}.first }.sort
|
22
|
+
op = rand > 0.42 ? [ns[0], :+, ns[1]] : [ns[1], :-, ns[0]]
|
23
|
+
|
24
|
+
question = op.join(' ')
|
25
|
+
answer = op[0].send(op[1], op[2])
|
26
|
+
|
27
|
+
[question, answer]
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,77 @@
|
|
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
|
+
# provides an call/answer mechanism, this is useful for example in a
|
7
|
+
# login-system.
|
8
|
+
#
|
9
|
+
# It is basically good to redirect temporarly somewhere else without
|
10
|
+
# forgetting where you come from and offering a nice way to get back
|
11
|
+
# to the last urls.
|
12
|
+
#
|
13
|
+
# Example:
|
14
|
+
#
|
15
|
+
# class AuthController < Controller
|
16
|
+
# helper :stack
|
17
|
+
#
|
18
|
+
# def login pass
|
19
|
+
# if pass == 'password'
|
20
|
+
# session[:logged_in] = true
|
21
|
+
# answer '/'
|
22
|
+
# else
|
23
|
+
# "failed"
|
24
|
+
# end
|
25
|
+
# end
|
26
|
+
#
|
27
|
+
# def logged_in?
|
28
|
+
# !!session[:logged_in]
|
29
|
+
# end
|
30
|
+
# end
|
31
|
+
#
|
32
|
+
# class ImportantController < Controller
|
33
|
+
# helper :stack
|
34
|
+
#
|
35
|
+
# def secret_information
|
36
|
+
# call :login unless logged_in?
|
37
|
+
# "Agent X is assigned to fight the RubyNinjas"
|
38
|
+
# end
|
39
|
+
# end
|
40
|
+
|
41
|
+
module Helper::Stack
|
42
|
+
# redirect to another location and pushing the current location
|
43
|
+
# on the session[:STACK]
|
44
|
+
|
45
|
+
def push(frame)
|
46
|
+
(session[:STACK] ||= []) << frame
|
47
|
+
end
|
48
|
+
|
49
|
+
def call(this)
|
50
|
+
push request.fullpath
|
51
|
+
redirect this
|
52
|
+
end
|
53
|
+
|
54
|
+
# return to the last location on session[:STACK]
|
55
|
+
# The optional alternative paramter will be used to redirect in case you
|
56
|
+
# are not inside_stack?
|
57
|
+
# If the session has no stack and no alternative is given this won't do
|
58
|
+
# anything
|
59
|
+
|
60
|
+
def answer(alternative = nil)
|
61
|
+
if inside_stack?
|
62
|
+
stack = session[:STACK]
|
63
|
+
target = stack.pop
|
64
|
+
session.delete(:STACK) if stack.empty?
|
65
|
+
redirect target
|
66
|
+
elsif alternative
|
67
|
+
redirect alternative
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
# check if the stack has something inside.
|
72
|
+
|
73
|
+
def inside_stack?
|
74
|
+
session[:STACK] and session[:STACK].any?
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,19 @@
|
|
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 'tagz'
|
5
|
+
|
6
|
+
module Ramaze
|
7
|
+
|
8
|
+
# Allows you to use some shortcuts for Tagz in your Controller.
|
9
|
+
|
10
|
+
# use this inside your controller to directly build Tagz
|
11
|
+
# Refer to the Tagz-documentation and testsuite for more examples.
|
12
|
+
# Usage:
|
13
|
+
# tagz { h1_{ "Apples & Oranges" } } #=> "<h1>Apples & Oranges</h1>"
|
14
|
+
# tagz { h1_(:class => 'fruits&floots'){ 'Apples' } } #=> "<h1 class=\"fruits&floots\">Apples</h1>"
|
15
|
+
|
16
|
+
module Helper
|
17
|
+
Tagz = ::Tagz
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,17 @@
|
|
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
|
+
module Helper::Thread
|
6
|
+
def thread &block
|
7
|
+
parent_thread = Thread.current
|
8
|
+
Thread.new do
|
9
|
+
begin
|
10
|
+
block.call
|
11
|
+
rescue Exception => e
|
12
|
+
parent_thread.raise(e)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|