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,44 @@
|
|
1
|
+
module Ramaze
|
2
|
+
module Helper
|
3
|
+
module Ultraviolet
|
4
|
+
trait :ultraviolet => {
|
5
|
+
:output => 'xhtml',
|
6
|
+
:syntax => nil, # syntax_name, nil|false indicates automatic detection
|
7
|
+
:line_numbers => false,
|
8
|
+
:style => 'classic', # render_style
|
9
|
+
:headers => false, # ouput document with all headers
|
10
|
+
}
|
11
|
+
|
12
|
+
# Parse and output the file at the given path.
|
13
|
+
# Please head over to the Ultraviolet documentation for more information
|
14
|
+
# on possible options.
|
15
|
+
def ultraviolet(path, options = {})
|
16
|
+
o = ancestral_trait[:ultraviolet].merge(options)
|
17
|
+
output, syntax, lines, style, headers =
|
18
|
+
o.values_at(:output, :syntax, :line_numbers, :style, :headers)
|
19
|
+
|
20
|
+
syntax ||= Uv.syntax_for_file(path).first.first
|
21
|
+
code = File.read(path)
|
22
|
+
|
23
|
+
p [code, output, syntax, lines, style, headers]
|
24
|
+
Uv.parse(code, output, syntax, lines, style, headers)
|
25
|
+
end
|
26
|
+
|
27
|
+
# Return absolute path to the css of given name.
|
28
|
+
#
|
29
|
+
# Usually this will point to somewhere in the gem tree.
|
30
|
+
#
|
31
|
+
# It seems like Uv will add support for user-defined PATH in the future,
|
32
|
+
# so we will, to be future-proof, traverse the Uv.path even though it
|
33
|
+
# currently will only have one directory.
|
34
|
+
|
35
|
+
def ultraviolet_css(theme)
|
36
|
+
Uv.path.each do |path|
|
37
|
+
Dir[path/"render/xhtml/files/css/*.css"].each do |css|
|
38
|
+
return css if File.basename(css, '.css') == theme
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,110 @@
|
|
1
|
+
module Ramaze
|
2
|
+
module Helper
|
3
|
+
|
4
|
+
# This helper provides a convenience wrapper for handling authentication
|
5
|
+
# and persistence of users.
|
6
|
+
#
|
7
|
+
# Example:
|
8
|
+
#
|
9
|
+
# class MainController < Ramaze::Controller
|
10
|
+
# def index
|
11
|
+
# if user?
|
12
|
+
# A('login', :href => Rs(:login))
|
13
|
+
# else
|
14
|
+
# "Hello #{user.name}"
|
15
|
+
# end
|
16
|
+
# end
|
17
|
+
#
|
18
|
+
# def login
|
19
|
+
# user_login if reuqest.post?
|
20
|
+
# end
|
21
|
+
# end
|
22
|
+
|
23
|
+
module User
|
24
|
+
# return existing or instantiate User::Wrapper
|
25
|
+
def user
|
26
|
+
model = ancestral_trait[:user_model] ||= ::User
|
27
|
+
callback = ancestral_trait[:user_callback] ||= nil
|
28
|
+
STATE[:user] ||= Wrapper.new(model, callback)
|
29
|
+
end
|
30
|
+
|
31
|
+
# shortcut for user.user_login but default argument are request.params
|
32
|
+
|
33
|
+
def user_login(creds = request.params)
|
34
|
+
user._login(creds)
|
35
|
+
end
|
36
|
+
|
37
|
+
# shortcut for user.user_logout
|
38
|
+
|
39
|
+
def user_logout
|
40
|
+
user._logout
|
41
|
+
end
|
42
|
+
|
43
|
+
def logged_in?
|
44
|
+
user._logged_in?
|
45
|
+
end
|
46
|
+
|
47
|
+
# Wrapper for the ever-present "user" in your application.
|
48
|
+
# It wraps around an arbitrary instance and worries about authentication
|
49
|
+
# and storing information about the user in the session.
|
50
|
+
#
|
51
|
+
# In order to not interfere with the wrapped instance/model we start our
|
52
|
+
# methods with an underscore.
|
53
|
+
# Suggestions on improvements as usual welcome.
|
54
|
+
class Wrapper < BlankSlate
|
55
|
+
attr_accessor :_model, :_callback, :_user
|
56
|
+
|
57
|
+
def initialize(model, callback)
|
58
|
+
@_model, @_callback = model, callback
|
59
|
+
@_user = nil
|
60
|
+
_login
|
61
|
+
end
|
62
|
+
|
63
|
+
def _login(creds = _persistence)
|
64
|
+
if @_user = _would_login?(creds)
|
65
|
+
self._persistence = creds
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
# The callback should return an instance of the user, otherwise it
|
70
|
+
# should answer with nil.
|
71
|
+
#
|
72
|
+
# This will not actually login, just check whether the credentials
|
73
|
+
# would result in a user.
|
74
|
+
def _would_login?(creds)
|
75
|
+
if c = @_callback
|
76
|
+
c.call(creds)
|
77
|
+
elsif _model.respond_to?(:authenticate)
|
78
|
+
_model.authenticate(creds)
|
79
|
+
else
|
80
|
+
Log.warn("Helper::User has no callback and %p doesn't respond to #authenticate" % _model)
|
81
|
+
nil
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def _logout
|
86
|
+
_persistence.clear
|
87
|
+
STATE[:user] = nil
|
88
|
+
end
|
89
|
+
|
90
|
+
def _logged_in?
|
91
|
+
!!_user
|
92
|
+
end
|
93
|
+
|
94
|
+
def _persistence=(creds)
|
95
|
+
Current.session[:USER] = creds
|
96
|
+
end
|
97
|
+
|
98
|
+
def _persistence
|
99
|
+
Current.session[:USER] || {}
|
100
|
+
end
|
101
|
+
|
102
|
+
# Refer everything not known
|
103
|
+
def method_missing(meth, *args, &block)
|
104
|
+
return unless _user
|
105
|
+
_user.send(meth, *args, &block)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Ramaze::Helper
|
2
|
+
module XHTML
|
3
|
+
def css(name, media = 'screen', options = {})
|
4
|
+
if options.empty?
|
5
|
+
"<link rel='stylesheet' href='/css/#{name}.css' type='text/css' media='#{media}' />"
|
6
|
+
elsif options[:only] == 'IE'
|
7
|
+
"<!--[if IE]>#{css(name, media)}<![endif]-->"
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def css_for(*names)
|
12
|
+
names.flatten.map{|name| css(name) }.join("\n")
|
13
|
+
end
|
14
|
+
|
15
|
+
def js(name)
|
16
|
+
"<script src='/js/#{name}.js' type='text/javascript'></script>"
|
17
|
+
end
|
18
|
+
|
19
|
+
def js_for(*names)
|
20
|
+
names.flatten.map{|name| js(name) }.join("\n")
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,79 @@
|
|
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 'ramaze/trinity'
|
5
|
+
|
6
|
+
module Ramaze
|
7
|
+
|
8
|
+
# A module used by the Templates and the Controllers
|
9
|
+
# it provides both Ramaze::Trinity (request/response/session)
|
10
|
+
# and also a helper method, look below for more information about it
|
11
|
+
|
12
|
+
module Helper
|
13
|
+
LOOKUP = Set.new
|
14
|
+
PATH = ['']
|
15
|
+
trait :ignore => [
|
16
|
+
/#{Regexp.escape(File.expand_path(BASEDIR/'../spec/ramaze/helper/'))}\//
|
17
|
+
]
|
18
|
+
|
19
|
+
module Methods
|
20
|
+
def self.included other
|
21
|
+
other.send :extend, Trinity
|
22
|
+
other.send :extend, Methods
|
23
|
+
other.send :include, Trinity
|
24
|
+
super
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.extend_object other
|
28
|
+
other.send :extend, Trinity
|
29
|
+
super
|
30
|
+
end
|
31
|
+
|
32
|
+
# This loads the helper-files from /ramaze/helper/helpername.rb and
|
33
|
+
# includes it into Ramaze::Template (or wherever it is called)
|
34
|
+
#
|
35
|
+
# Usage:
|
36
|
+
# helper :redirect, :link
|
37
|
+
|
38
|
+
def helper(*syms)
|
39
|
+
syms.each do |sym|
|
40
|
+
name = sym.to_s
|
41
|
+
if mod = find_helper(name)
|
42
|
+
use_helper(mod)
|
43
|
+
else
|
44
|
+
if require_helper(name)
|
45
|
+
redo
|
46
|
+
else
|
47
|
+
raise LoadError, "#{name} not found"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
def find_helper(name)
|
56
|
+
name = name.to_s.camel_case
|
57
|
+
ramaze_helper_consts = ::Ramaze::Helper.constants.grep(/^#{name}$/i)
|
58
|
+
if mod_name = ramaze_helper_consts.first
|
59
|
+
::Ramaze::Helper.const_get(mod_name)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def require_helper(name)
|
64
|
+
paths = (PATH + [Global.root, BASEDIR/:ramaze]).join(',')
|
65
|
+
glob = "{#{paths}}/helper/#{name}.{so,bundle,rb}"
|
66
|
+
files = Dir[glob]
|
67
|
+
ignore = Helper.trait[:ignore]
|
68
|
+
files.reject!{|f| ignore.any?{|i| f =~ i }}
|
69
|
+
raise LoadError, "#{name} not found" unless file = files.first
|
70
|
+
require(file)
|
71
|
+
end
|
72
|
+
|
73
|
+
def use_helper(mod)
|
74
|
+
include mod
|
75
|
+
extend mod
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,40 @@
|
|
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 'swiftcore/Analogger/Client'
|
5
|
+
|
6
|
+
module Ramaze
|
7
|
+
module Logger
|
8
|
+
|
9
|
+
# Informer for the Swiftcore Analogger logging system.
|
10
|
+
#
|
11
|
+
# You can find it at http://analogger.swiftcore.org and install with
|
12
|
+
# gem install analogger
|
13
|
+
|
14
|
+
class Analogger < ::Swiftcore::Analogger::Client
|
15
|
+
include Logging
|
16
|
+
|
17
|
+
# identifier for your application
|
18
|
+
trait :name => 'walrus'
|
19
|
+
|
20
|
+
# Host analogger runs on
|
21
|
+
trait :host => '127.0.0.1'
|
22
|
+
|
23
|
+
# Port analogger runs on
|
24
|
+
trait :port => 6766
|
25
|
+
|
26
|
+
# Create a new instance, parameters default to the traits.
|
27
|
+
|
28
|
+
def initialize(name = class_trait[:name], host = class_trait[:host], port = class_trait[:port])
|
29
|
+
super
|
30
|
+
end
|
31
|
+
|
32
|
+
# integration to Logging
|
33
|
+
|
34
|
+
def log(tag, *args)
|
35
|
+
log(tag, args.join("\n"))
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,38 @@
|
|
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 'ruby-growl'
|
5
|
+
|
6
|
+
module Ramaze
|
7
|
+
module Logger
|
8
|
+
|
9
|
+
# Informer for the growl notification system on OSX.
|
10
|
+
|
11
|
+
class Growl < ::Growl
|
12
|
+
|
13
|
+
trait :defaults => {
|
14
|
+
:name => 'walrus',
|
15
|
+
:host => 'localhost',
|
16
|
+
:password => 'walrus',
|
17
|
+
:all_notifies => %w[error warn debug info dev],
|
18
|
+
:default_notifies => %w[error warn info]
|
19
|
+
}
|
20
|
+
|
21
|
+
# Takes the options from the default trait for merging.
|
22
|
+
|
23
|
+
def initialize(options = {})
|
24
|
+
options = class_trait[:defaults].merge(options).values_at(:host, :name, :all_notifies, :default_notifies, :password)
|
25
|
+
super(*options)
|
26
|
+
end
|
27
|
+
|
28
|
+
# integration to Logging
|
29
|
+
|
30
|
+
def log(tag, *args)
|
31
|
+
notify(tag.to_s, Time.now.strftime("%X"), args.join("\n")[0..100])
|
32
|
+
rescue Errno::EMSGSIZE
|
33
|
+
# Send size was to big (not really), ignore
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,41 @@
|
|
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 Logger
|
6
|
+
|
7
|
+
# Bundles different informer instances and sends incoming messages to each.
|
8
|
+
# This is the default with Informer as only member.
|
9
|
+
|
10
|
+
class LogHub
|
11
|
+
include Logging
|
12
|
+
|
13
|
+
attr_accessor :loggers
|
14
|
+
attr_accessor :ignored_tags
|
15
|
+
|
16
|
+
# Takes a list of instances or classes (which will be initialized) and that
|
17
|
+
# are added to @loggers. All messages are then sent to each member.
|
18
|
+
|
19
|
+
def initialize(*loggers)
|
20
|
+
@loggers = loggers
|
21
|
+
@ignored_tags = Set.new
|
22
|
+
@loggers.map! do |logger|
|
23
|
+
next(nil) if logger == self
|
24
|
+
logger.is_a?(Class) ? logger.new : logger
|
25
|
+
end
|
26
|
+
@loggers.uniq!
|
27
|
+
@loggers.compact!
|
28
|
+
end
|
29
|
+
|
30
|
+
# integration to Logging
|
31
|
+
|
32
|
+
def log(tag, *args)
|
33
|
+
return if @ignored_tags.include?(tag)
|
34
|
+
@loggers.each do |logger|
|
35
|
+
logger.log(tag, *args)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,128 @@
|
|
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 Logger
|
6
|
+
|
7
|
+
# A minimal logger for Ramaze, supports files, CLI, colors and some
|
8
|
+
# customization.
|
9
|
+
|
10
|
+
class Informer
|
11
|
+
include Logging
|
12
|
+
|
13
|
+
attr_accessor :out, :colorize, :log_levels
|
14
|
+
|
15
|
+
# Should Ramaze try to use colors?
|
16
|
+
trait :colorize => true
|
17
|
+
|
18
|
+
# parameter for Time.now.strftime
|
19
|
+
trait :timestamp => "%Y-%m-%d %H:%M:%S"
|
20
|
+
|
21
|
+
# This is how the final output is arranged.
|
22
|
+
trait :format => "[%time] %prefix %text"
|
23
|
+
|
24
|
+
# Which tag should be in what color
|
25
|
+
COLORS = {
|
26
|
+
:dev => :blue,
|
27
|
+
:debug => :yellow,
|
28
|
+
:info => :green,
|
29
|
+
:warn => :red,
|
30
|
+
:error => :red,
|
31
|
+
}
|
32
|
+
|
33
|
+
# Create a new instance of Informer.
|
34
|
+
# You can spcify
|
35
|
+
#
|
36
|
+
# Examples:
|
37
|
+
# Informer.new #=> logs to stdout with all levels being
|
38
|
+
# shown.
|
39
|
+
# Informer.new($stderr) #=> same, but to stderr
|
40
|
+
# Informer.new("foo.log") #=> same, but logs to the file foo.log
|
41
|
+
# (or creates it if it doesn't exist yet)
|
42
|
+
# Informer.new($stdout, [:info]) #=> show only #info messages to stdout.
|
43
|
+
|
44
|
+
def initialize(out = $stdout, log_levels = [:debug, :error, :info, :warn])
|
45
|
+
@colorize = false
|
46
|
+
|
47
|
+
@out =
|
48
|
+
case out
|
49
|
+
when STDOUT, :stdout, 'stdout'
|
50
|
+
$stdout
|
51
|
+
when STDERR, :stderr, 'stderr'
|
52
|
+
$stderr
|
53
|
+
when IO
|
54
|
+
out
|
55
|
+
else
|
56
|
+
if out.respond_to?(:puts)
|
57
|
+
out
|
58
|
+
else
|
59
|
+
File.open(out.to_s, 'ab+')
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
if @out.respond_to?(:tty?) and class_trait[:colorize]
|
64
|
+
@colorize = @out.tty?
|
65
|
+
end
|
66
|
+
|
67
|
+
@log_levels = log_levels
|
68
|
+
end
|
69
|
+
|
70
|
+
# Close the file we log to if it isn't closed already.
|
71
|
+
|
72
|
+
def shutdown
|
73
|
+
if @out.respond_to?(:close)
|
74
|
+
Log.debug("close, #{@out.inspect}")
|
75
|
+
@out.close
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
# Integration to Logging.
|
80
|
+
|
81
|
+
def log tag, *messages
|
82
|
+
return if closed? || !@log_levels.include?(tag)
|
83
|
+
messages.flatten!
|
84
|
+
|
85
|
+
prefix = tag.to_s.upcase.ljust(5)
|
86
|
+
|
87
|
+
if @colorize
|
88
|
+
color = COLORS[tag] ||= :white
|
89
|
+
prefix.replace prefix.send(color)
|
90
|
+
end
|
91
|
+
|
92
|
+
messages.each do |message|
|
93
|
+
@out.puts(log_interpolate(prefix, message))
|
94
|
+
end
|
95
|
+
|
96
|
+
@out.flush if @out.respond_to?(:flush)
|
97
|
+
end
|
98
|
+
|
99
|
+
# Takes the prefix (tag), text and timestamp and applies it to
|
100
|
+
# the :format trait.
|
101
|
+
|
102
|
+
def log_interpolate prefix, text, time = timestamp
|
103
|
+
message = class_trait[:format].dup
|
104
|
+
|
105
|
+
vars = { '%time' => time, '%prefix' => prefix, '%text' => text }
|
106
|
+
vars.each{|from, to| message.gsub!(from, to) }
|
107
|
+
|
108
|
+
message
|
109
|
+
end
|
110
|
+
|
111
|
+
# This uses Global.inform_timestamp or a date in the format of
|
112
|
+
# %Y-%m-%d %H:%M:%S
|
113
|
+
# # => "2007-01-19 21:09:32"
|
114
|
+
|
115
|
+
def timestamp
|
116
|
+
mask = class_trait[:timestamp]
|
117
|
+
Time.now.strftime(mask || "%Y-%m-%d %H:%M:%S")
|
118
|
+
end
|
119
|
+
|
120
|
+
# is @out closed?
|
121
|
+
|
122
|
+
def closed?
|
123
|
+
@out.respond_to?(:closed?) and @out.closed?
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
end
|
128
|
+
end
|
@@ -0,0 +1,28 @@
|
|
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 Logger
|
6
|
+
|
7
|
+
# Informer for the Knotify notfication system used on KDE.
|
8
|
+
# Doesn't need any special libraries.
|
9
|
+
|
10
|
+
class Knotify
|
11
|
+
include Logging
|
12
|
+
|
13
|
+
trait :present => 16
|
14
|
+
|
15
|
+
# Please see for more information on the API used here:
|
16
|
+
# http://lukeplant.me.uk/articles.php?id=3
|
17
|
+
|
18
|
+
def log(tag, *messages)
|
19
|
+
present = class_trait[:present]
|
20
|
+
tag = tag.to_s.capitalize
|
21
|
+
messages.flatten.each do |message|
|
22
|
+
system(%{dcop knotify default notify Ramaze "#{tag}" "#{message}" '' '' #{present} 0})
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,26 @@
|
|
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 'logger'
|
5
|
+
|
6
|
+
module Ramaze
|
7
|
+
module Logger
|
8
|
+
|
9
|
+
# Informer for the Stdlib Logger
|
10
|
+
|
11
|
+
class Logger < ::Logger
|
12
|
+
|
13
|
+
# integration to Logging
|
14
|
+
|
15
|
+
def log(tag, *args)
|
16
|
+
__send__(tag, args.join("\n"))
|
17
|
+
end
|
18
|
+
|
19
|
+
# Stub for compatibility
|
20
|
+
def dev(*args)
|
21
|
+
debug(*args)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
# Copyright (c) 2008 Michael Fellinger m.fellinger@gmail.com
|
2
|
+
# All files in this distribution are subject to the terms of the Ruby license.
|
3
|
+
|
4
|
+
module Ramaze
|
5
|
+
|
6
|
+
# This module provides a basic skeleton for your own loggers to be compatible.
|
7
|
+
# The minimal usage is like this:
|
8
|
+
#
|
9
|
+
# class MyLogger
|
10
|
+
# include Logging
|
11
|
+
#
|
12
|
+
# def log(tag, *args)
|
13
|
+
# p tag => args
|
14
|
+
# end
|
15
|
+
# end
|
16
|
+
|
17
|
+
module Logging
|
18
|
+
|
19
|
+
# Takes the tag (:warn|:debug|:error|:info) and the name of a method to be
|
20
|
+
# called upon elements of msgs that don't respond to :to_str
|
21
|
+
# Goes on and sends the tag and transformed messages each to the #log method.
|
22
|
+
# If you include this module you have to define #log or it will raise.
|
23
|
+
|
24
|
+
def tag_log(tag, meth, *msgs)
|
25
|
+
msgs.each do |msg|
|
26
|
+
string = (msg.respond_to?(:to_str) ? msg : msg.send(meth))
|
27
|
+
log(tag, string)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
# Converts everything given to strings and passes them on with :info
|
32
|
+
|
33
|
+
def info(*objects)
|
34
|
+
tag_log(:info, :to_s, *objects)
|
35
|
+
end
|
36
|
+
|
37
|
+
# Converts everything given to strings and passes them on with :warn
|
38
|
+
|
39
|
+
def warn(*objects)
|
40
|
+
tag_log(:warn, :to_s, *objects)
|
41
|
+
end
|
42
|
+
|
43
|
+
# inspects objects if they are no strings. Tag is :debug
|
44
|
+
|
45
|
+
def debug(*objects)
|
46
|
+
tag_log(:debug, :inspect, *objects)
|
47
|
+
end
|
48
|
+
|
49
|
+
# inspects objects if they are no strings. Tag is :dev
|
50
|
+
|
51
|
+
def dev(*objects)
|
52
|
+
tag_log(:dev, :inspect, *objects)
|
53
|
+
end
|
54
|
+
|
55
|
+
alias << debug
|
56
|
+
|
57
|
+
# Takes either an Exception or just a String, formats backtraces to be a bit
|
58
|
+
# more readable and passes all of this on to tag_log :error
|
59
|
+
|
60
|
+
def error(ex)
|
61
|
+
if ex.respond_to?(:exception)
|
62
|
+
message = [ex.backtrace].flatten[0..Global.backtrace_size]
|
63
|
+
message.map{|m| m.to_s.gsub(/^#{Regexp.escape(Dir.pwd)}/, '.') }
|
64
|
+
message.unshift(ex.inspect)
|
65
|
+
else
|
66
|
+
message = ex.to_s
|
67
|
+
end
|
68
|
+
tag_log(:error, :to_s, *message)
|
69
|
+
end
|
70
|
+
|
71
|
+
# raises
|
72
|
+
|
73
|
+
def log(*args)
|
74
|
+
raise "#log should be implemented by an instance including this module (#{self})"
|
75
|
+
end
|
76
|
+
|
77
|
+
# nothing
|
78
|
+
|
79
|
+
def shutdown
|
80
|
+
end
|
81
|
+
|
82
|
+
# stub for WEBrick
|
83
|
+
|
84
|
+
def debug?
|
85
|
+
false
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# Copyright (c) 2008 Michael Fellinger m.fellinger@gmail.com
|
2
|
+
# Copyright (c) 2008 rob@rebeltechnologies.nl
|
3
|
+
# All files in this distribution are subject to the terms of the Ruby license.
|
4
|
+
|
5
|
+
require 'syslog'
|
6
|
+
|
7
|
+
# Add aliases for the levelnames used by Ramaze logging
|
8
|
+
module Syslog
|
9
|
+
alias dev debug
|
10
|
+
alias warn warning
|
11
|
+
alias error err
|
12
|
+
module_function :dev, :warn, :error
|
13
|
+
end
|
14
|
+
|
15
|
+
module Ramaze
|
16
|
+
module Logger
|
17
|
+
# Logger class for writing to syslog. It is a *very* thin wrapper
|
18
|
+
# around the Syslog library.
|
19
|
+
class Syslog
|
20
|
+
include Logging
|
21
|
+
|
22
|
+
# Open the syslog library, if it is allready open, we reopen it using the
|
23
|
+
# new argument list. The argument list is passed on to the Syslog library
|
24
|
+
# so please check that, and man syslog for detailed information.
|
25
|
+
# There are 3 parameters:
|
26
|
+
#
|
27
|
+
# ident: The identification used in the log file, defaults to $0
|
28
|
+
# options: defaults to Syslog::LOG_PID | Syslog::LOG_CONS
|
29
|
+
# facility: defaults to Syslog::LOG_USER
|
30
|
+
#
|
31
|
+
def initialize( *args )
|
32
|
+
::Syslog.close if ::Syslog.opened?
|
33
|
+
::Syslog.open( *args )
|
34
|
+
end
|
35
|
+
|
36
|
+
# just sends all messages received to ::Syslog
|
37
|
+
# We simply return if the log was closed for some reason, this behavior
|
38
|
+
# was copied from Informer. We do not handle levels here. This will
|
39
|
+
# be done by te syslog daemon based on it's configuration.
|
40
|
+
def log(tag, *messages)
|
41
|
+
return if !::Syslog.opened?
|
42
|
+
::Syslog.send(tag, *messages)
|
43
|
+
end
|
44
|
+
|
45
|
+
# Has to call the modules singleton-method.
|
46
|
+
def inspect
|
47
|
+
::Syslog.inspect
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|