rjspotter-ramaze 2009.06.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +3 -0
- data/.mailmap +25 -0
- data/MANIFEST +502 -0
- data/README.md +457 -0
- data/Rakefile +88 -0
- data/benchmark/bench_templates/bench.rb +67 -0
- data/benchmark/bench_templates/view/large.erb +79 -0
- data/benchmark/bench_templates/view/large.haml +41 -0
- data/benchmark/bench_templates/view/large.xhtml +79 -0
- data/benchmark/bench_templates/view/small.erb +21 -0
- data/benchmark/bench_templates/view/small.haml +12 -0
- data/benchmark/bench_templates/view/small.xhtml +21 -0
- data/benchmark/results.txt +131 -0
- data/benchmark/run.rb +355 -0
- data/benchmark/suite/minimal.rb +11 -0
- data/benchmark/suite/no_informer.rb +7 -0
- data/benchmark/suite/no_sessions.rb +9 -0
- data/benchmark/suite/no_template.rb +7 -0
- data/benchmark/suite/simple.rb +5 -0
- data/benchmark/suite/template_erubis.rb +8 -0
- data/benchmark/suite/template_etanni.rb +8 -0
- data/benchmark/suite/template_ezamar.rb +8 -0
- data/benchmark/suite/template_haml.rb +13 -0
- data/benchmark/suite/template_liquid.rb +11 -0
- data/benchmark/suite/template_markaby.rb +9 -0
- data/benchmark/suite/template_nagoro.rb +8 -0
- data/benchmark/suite/template_redcloth.rb +13 -0
- data/benchmark/suite/template_tenjin.rb +8 -0
- data/benchmark/test.rb +35 -0
- data/bin/ramaze +15 -0
- data/doc/AUTHORS +44 -0
- data/doc/CHANGELOG +17362 -0
- data/doc/COPYING +56 -0
- data/doc/FAQ +92 -0
- data/doc/GPL +339 -0
- data/doc/INSTALL +92 -0
- data/doc/LEGAL +26 -0
- data/doc/TODO +29 -0
- data/doc/meta/announcement.txt +146 -0
- data/doc/meta/configuration.txt +163 -0
- data/doc/meta/internals.txt +278 -0
- data/doc/meta/users.kml +64 -0
- data/doc/tutorial/todolist.html +1379 -0
- data/doc/tutorial/todolist.txt +920 -0
- data/examples/app/auth/layout/auth.xhtml +25 -0
- data/examples/app/auth/start.rb +23 -0
- data/examples/app/auth/view/index.xhtml +4 -0
- data/examples/app/auth/view/login.xhtml +20 -0
- data/examples/app/auth/view/secret.xhtml +1 -0
- data/examples/app/blog/README +3 -0
- data/examples/app/blog/app.rb +69 -0
- data/examples/app/blog/config.ru +17 -0
- data/examples/app/blog/controller/comment.rb +45 -0
- data/examples/app/blog/controller/entry.rb +85 -0
- data/examples/app/blog/controller/init.rb +86 -0
- data/examples/app/blog/controller/main.rb +20 -0
- data/examples/app/blog/controller/tag.rb +9 -0
- data/examples/app/blog/layout/default.nag +31 -0
- data/examples/app/blog/model/comment.rb +58 -0
- data/examples/app/blog/model/entry.rb +89 -0
- data/examples/app/blog/model/init.rb +15 -0
- data/examples/app/blog/model/tag.rb +36 -0
- data/examples/app/blog/public/css/screen.css +273 -0
- data/examples/app/blog/spec/blog.rb +87 -0
- data/examples/app/blog/start.rb +5 -0
- data/examples/app/blog/view/comment/form.nag +10 -0
- data/examples/app/blog/view/comment/show.nag +16 -0
- data/examples/app/blog/view/entry/edit.nag +14 -0
- data/examples/app/blog/view/entry/feed.atom.nag +8 -0
- data/examples/app/blog/view/entry/feed.rss.nag +7 -0
- data/examples/app/blog/view/entry/index.nag +7 -0
- data/examples/app/blog/view/entry/new.nag +13 -0
- data/examples/app/blog/view/entry/show.nag +36 -0
- data/examples/app/blog/view/feed.atom.nag +18 -0
- data/examples/app/blog/view/feed.rss.nag +25 -0
- data/examples/app/blog/view/index.nag +6 -0
- data/examples/app/blog/view/tag/index.nag +5 -0
- data/examples/app/chat/layout/default.xhtml +13 -0
- data/examples/app/chat/model/history.rb +38 -0
- data/examples/app/chat/model/message.rb +7 -0
- data/examples/app/chat/public/css/chat.css +9 -0
- data/examples/app/chat/public/js/chat.js +28 -0
- data/examples/app/chat/public/js/jquery.js +3436 -0
- data/examples/app/chat/start.rb +39 -0
- data/examples/app/chat/view/chat.xhtml +9 -0
- data/examples/app/chat/view/index.xhtml +7 -0
- data/examples/app/localization/locale/de.yaml +5 -0
- data/examples/app/localization/locale/en.yaml +5 -0
- data/examples/app/localization/locale/ja.yaml +5 -0
- data/examples/app/localization/start.rb +48 -0
- data/examples/app/sourceview/public/coderay.css +104 -0
- data/examples/app/sourceview/public/images/file.gif +0 -0
- data/examples/app/sourceview/public/images/folder.gif +0 -0
- data/examples/app/sourceview/public/images/tv-collapsable-last.gif +0 -0
- data/examples/app/sourceview/public/images/tv-collapsable.gif +0 -0
- data/examples/app/sourceview/public/images/tv-expandable-last.gif +0 -0
- data/examples/app/sourceview/public/images/tv-expandable.gif +0 -0
- data/examples/app/sourceview/public/images/tv-item-last.gif +0 -0
- data/examples/app/sourceview/public/images/tv-item.gif +0 -0
- data/examples/app/sourceview/public/jquery.js +11 -0
- data/examples/app/sourceview/public/jquery.treeview.css +48 -0
- data/examples/app/sourceview/public/jquery.treeview.js +223 -0
- data/examples/app/sourceview/public/sourceview.js +52 -0
- data/examples/app/sourceview/start.rb +79 -0
- data/examples/app/sourceview/view/index.haml +59 -0
- data/examples/app/todolist/controller/init.rb +10 -0
- data/examples/app/todolist/controller/task.rb +39 -0
- data/examples/app/todolist/layout/default.xhtml +14 -0
- data/examples/app/todolist/model/init.rb +14 -0
- data/examples/app/todolist/model/task.rb +39 -0
- data/examples/app/todolist/public/css/screen.css +63 -0
- data/examples/app/todolist/public/favicon.ico +0 -0
- data/examples/app/todolist/start.rb +11 -0
- data/examples/app/todolist/view/index.xhtml +29 -0
- data/examples/app/upload/start.rb +19 -0
- data/examples/app/upload/view/index.xhtml +25 -0
- data/examples/app/whywiki/spec/whywiki.rb +58 -0
- data/examples/app/whywiki/start.rb +46 -0
- data/examples/app/whywiki/template/edit.xhtml +14 -0
- data/examples/app/whywiki/template/show.xhtml +18 -0
- data/examples/app/wikore/spec/wikore.rb +109 -0
- data/examples/app/wikore/src/controller.rb +78 -0
- data/examples/app/wikore/src/model.rb +56 -0
- data/examples/app/wikore/start.rb +9 -0
- data/examples/app/wikore/view/index.xhtml +8 -0
- data/examples/app/wiktacular/README +2 -0
- data/examples/app/wiktacular/mkd/link/2007-07-20_19-45-51.mkd +1 -0
- data/examples/app/wiktacular/mkd/link/current.mkd +1 -0
- data/examples/app/wiktacular/mkd/main/2007-07-20_16-31-33.mkd +1 -0
- data/examples/app/wiktacular/mkd/main/2007-07-20_19-21-12.mkd +1 -0
- data/examples/app/wiktacular/mkd/main/2007-07-20_19-23-10.mkd +2 -0
- data/examples/app/wiktacular/mkd/main/2007-07-20_19-45-07.mkd +2 -0
- data/examples/app/wiktacular/mkd/main/current.mkd +2 -0
- data/examples/app/wiktacular/mkd/markdown/current.mkd +3 -0
- data/examples/app/wiktacular/mkd/testing/2007-07-20_16-43-46.mkd +2 -0
- data/examples/app/wiktacular/mkd/testing/2007-07-20_19-43-50.mkd +3 -0
- data/examples/app/wiktacular/mkd/testing/2007-07-21_18-46-01.mkd +11 -0
- data/examples/app/wiktacular/mkd/testing/2007-07-21_18-46-32.mkd +13 -0
- data/examples/app/wiktacular/mkd/testing/2007-07-21_18-47-08.mkd +17 -0
- data/examples/app/wiktacular/mkd/testing/2007-07-21_18-47-54.mkd +17 -0
- data/examples/app/wiktacular/mkd/testing/current.mkd +17 -0
- data/examples/app/wiktacular/public/favicon.ico +0 -0
- data/examples/app/wiktacular/public/screen.css +72 -0
- data/examples/app/wiktacular/spec/wiktacular.rb +157 -0
- data/examples/app/wiktacular/src/controller.rb +55 -0
- data/examples/app/wiktacular/src/model.rb +102 -0
- data/examples/app/wiktacular/start.rb +8 -0
- data/examples/app/wiktacular/template/edit.xhtml +6 -0
- data/examples/app/wiktacular/template/html_layout.xhtml +27 -0
- data/examples/app/wiktacular/template/index.xhtml +9 -0
- data/examples/app/wiktacular/template/new.xhtml +6 -0
- data/examples/basic/element.rb +47 -0
- data/examples/basic/gestalt.rb +26 -0
- data/examples/basic/hello.rb +14 -0
- data/examples/basic/layout.rb +28 -0
- data/examples/basic/linking.rb +29 -0
- data/examples/basic/partial.rb +26 -0
- data/examples/basic/simple.rb +52 -0
- data/examples/helpers/cache.rb +33 -0
- data/examples/helpers/form_with_sequel.rb +24 -0
- data/examples/helpers/httpdigest.rb +107 -0
- data/examples/helpers/identity.rb +18 -0
- data/examples/helpers/nitro_form.rb +23 -0
- data/examples/helpers/paginate.rb +71 -0
- data/examples/helpers/rest.rb +28 -0
- data/examples/helpers/simple_captcha.rb +29 -0
- data/examples/misc/css.rb +37 -0
- data/examples/misc/facebook.rb +159 -0
- data/examples/misc/memleak_detector.rb +37 -0
- data/examples/misc/nagoro_element.rb +43 -0
- data/examples/misc/ramaise.rb +132 -0
- data/examples/misc/rapp.rb +56 -0
- data/examples/misc/sequel_scaffolding.rb +34 -0
- data/examples/misc/serve_directory.rb +6 -0
- data/examples/templates/template_erubis.rb +52 -0
- data/examples/templates/template_ezamar.rb +51 -0
- data/examples/templates/template_haml.rb +49 -0
- data/examples/templates/template_liquid.rb +66 -0
- data/examples/templates/template_markaby.rb +57 -0
- data/examples/templates/template_nagoro.rb +50 -0
- data/examples/templates/template_redcloth.rb +58 -0
- data/examples/templates/template_remarkably.rb +54 -0
- data/examples/templates/template_tenjin.rb +52 -0
- data/examples/templates/view/external.haml +22 -0
- data/examples/templates/view/external.liquid +28 -0
- data/examples/templates/view/external.mab +30 -0
- data/examples/templates/view/external.nag +28 -0
- data/examples/templates/view/external.redcloth +19 -0
- data/examples/templates/view/external.rem +30 -0
- data/examples/templates/view/external.rhtml +28 -0
- data/examples/templates/view/external.tenjin +28 -0
- data/examples/templates/view/external.zmr +28 -0
- data/lib/proto/app.rb +14 -0
- data/lib/proto/config.ru +20 -0
- data/lib/proto/controller/init.rb +11 -0
- data/lib/proto/controller/main.rb +20 -0
- data/lib/proto/layout/default.xhtml +24 -0
- data/lib/proto/model/init.rb +4 -0
- data/lib/proto/public/.htaccess +24 -0
- data/lib/proto/public/css/screen.css +30 -0
- data/lib/proto/public/dispatch.fcgi +11 -0
- data/lib/proto/public/favicon.ico +0 -0
- data/lib/proto/public/js/jquery.js +4376 -0
- data/lib/proto/public/ramaze.png +0 -0
- data/lib/proto/spec/main.rb +20 -0
- data/lib/proto/start.rb +8 -0
- data/lib/proto/view/index.xhtml +41 -0
- data/lib/ramaze.rb +87 -0
- data/lib/ramaze/app.rb +124 -0
- data/lib/ramaze/cache.rb +19 -0
- data/lib/ramaze/cache/localmemcache.rb +56 -0
- data/lib/ramaze/cache/memcache.rb +124 -0
- data/lib/ramaze/cache/sequel.rb +82 -0
- data/lib/ramaze/contrib/addressable_route.rb +55 -0
- data/lib/ramaze/contrib/app_graph.rb +64 -0
- data/lib/ramaze/contrib/email.rb +88 -0
- data/lib/ramaze/contrib/facebook.rb +23 -0
- data/lib/ramaze/contrib/facebook/facebook.rb +171 -0
- data/lib/ramaze/contrib/gettext.rb +113 -0
- data/lib/ramaze/contrib/gettext/mo.rb +155 -0
- data/lib/ramaze/contrib/gettext/parser.rb +46 -0
- data/lib/ramaze/contrib/gettext/po.rb +109 -0
- data/lib/ramaze/contrib/gzip_filter.rb +1 -0
- data/lib/ramaze/contrib/maruku_uv.rb +59 -0
- data/lib/ramaze/contrib/profiling.rb +36 -0
- data/lib/ramaze/contrib/rest.rb +22 -0
- data/lib/ramaze/contrib/sequel/create_join.rb +26 -0
- data/lib/ramaze/contrib/sequel/form_field.rb +129 -0
- data/lib/ramaze/contrib/sequel/image.rb +196 -0
- data/lib/ramaze/contrib/sequel/relation.rb +98 -0
- data/lib/ramaze/controller.rb +104 -0
- data/lib/ramaze/controller/default.rb +12 -0
- data/lib/ramaze/current.rb +7 -0
- data/lib/ramaze/files.rb +24 -0
- data/lib/ramaze/gestalt.rb +132 -0
- data/lib/ramaze/helper.rb +13 -0
- data/lib/ramaze/helper/auth.rb +84 -0
- data/lib/ramaze/helper/bench.rb +41 -0
- data/lib/ramaze/helper/cache.rb +117 -0
- data/lib/ramaze/helper/disqus.rb +26 -0
- data/lib/ramaze/helper/flash.rb +62 -0
- data/lib/ramaze/helper/form.rb +127 -0
- data/lib/ramaze/helper/formatting.rb +189 -0
- data/lib/ramaze/helper/gestalt.rb +47 -0
- data/lib/ramaze/helper/gravatar.rb +79 -0
- data/lib/ramaze/helper/httpdigest.rb +97 -0
- data/lib/ramaze/helper/identity.rb +119 -0
- data/lib/ramaze/helper/layout.rb +97 -0
- data/lib/ramaze/helper/link.rb +56 -0
- data/lib/ramaze/helper/localize.rb +138 -0
- data/lib/ramaze/helper/markaby.rb +31 -0
- data/lib/ramaze/helper/maruku.rb +16 -0
- data/lib/ramaze/helper/nitroform.rb +14 -0
- data/lib/ramaze/helper/pager.rb +367 -0
- data/lib/ramaze/helper/paginate.rb +242 -0
- data/lib/ramaze/helper/partial.rb +100 -0
- data/lib/ramaze/helper/remarkably.rb +14 -0
- data/lib/ramaze/helper/request_accessor.rb +16 -0
- data/lib/ramaze/helper/sequel.rb +55 -0
- data/lib/ramaze/helper/sequel_form.rb +284 -0
- data/lib/ramaze/helper/simple_captcha.rb +61 -0
- data/lib/ramaze/helper/stack.rb +75 -0
- data/lib/ramaze/helper/tagz.rb +19 -0
- data/lib/ramaze/helper/thread.rb +17 -0
- data/lib/ramaze/helper/ultraviolet.rb +46 -0
- data/lib/ramaze/helper/user.rb +229 -0
- data/lib/ramaze/helper/xhtml.rb +34 -0
- data/lib/ramaze/log.rb +39 -0
- data/lib/ramaze/log/analogger.rb +39 -0
- data/lib/ramaze/log/growl.rb +38 -0
- data/lib/ramaze/log/hub.rb +41 -0
- data/lib/ramaze/log/informer.rb +129 -0
- data/lib/ramaze/log/knotify.rb +28 -0
- data/lib/ramaze/log/logger.rb +26 -0
- data/lib/ramaze/log/logging.rb +83 -0
- data/lib/ramaze/log/rotatinginformer.rb +168 -0
- data/lib/ramaze/log/syslog.rb +51 -0
- data/lib/ramaze/log/xosd.rb +92 -0
- data/lib/ramaze/middleware_compiler.rb +13 -0
- data/lib/ramaze/plugin.rb +69 -0
- data/lib/ramaze/reloader.rb +172 -0
- data/lib/ramaze/reloader/watch_inotify.rb +85 -0
- data/lib/ramaze/reloader/watch_stat.rb +58 -0
- data/lib/ramaze/request.rb +115 -0
- data/lib/ramaze/response.rb +36 -0
- data/lib/ramaze/setup.rb +123 -0
- data/lib/ramaze/snippets.rb +22 -0
- data/lib/ramaze/snippets/array/put_within.rb +44 -0
- data/lib/ramaze/snippets/binding/locals.rb +25 -0
- data/lib/ramaze/snippets/blankslate.rb +7 -0
- data/lib/ramaze/snippets/fiber.rb +63 -0
- data/lib/ramaze/snippets/kernel/pretty_inspect.rb +21 -0
- data/lib/ramaze/snippets/metaid.rb +17 -0
- data/lib/ramaze/snippets/numeric/filesize_format.rb +32 -0
- data/lib/ramaze/snippets/numeric/time.rb +63 -0
- data/lib/ramaze/snippets/object/__dir__.rb +29 -0
- data/lib/ramaze/snippets/object/instance_variable_defined.rb +19 -0
- data/lib/ramaze/snippets/object/pretty.rb +16 -0
- data/lib/ramaze/snippets/object/scope.rb +18 -0
- data/lib/ramaze/snippets/ordered_set.rb +51 -0
- data/lib/ramaze/snippets/proc/locals.rb +19 -0
- data/lib/ramaze/snippets/ramaze/acquire.rb +31 -0
- data/lib/ramaze/snippets/ramaze/deprecated.rb +23 -0
- data/lib/ramaze/snippets/ramaze/dictionary.rb +400 -0
- data/lib/ramaze/snippets/ramaze/fiber.rb +24 -0
- data/lib/ramaze/snippets/ramaze/struct.rb +45 -0
- data/lib/ramaze/snippets/string/camel_case.rb +21 -0
- data/lib/ramaze/snippets/string/color.rb +31 -0
- data/lib/ramaze/snippets/string/end_with.rb +20 -0
- data/lib/ramaze/snippets/string/esc.rb +34 -0
- data/lib/ramaze/snippets/string/ord.rb +21 -0
- data/lib/ramaze/snippets/string/snake_case.rb +21 -0
- data/lib/ramaze/snippets/string/start_with.rb +19 -0
- data/lib/ramaze/snippets/string/unindent.rb +28 -0
- data/lib/ramaze/snippets/thread/into.rb +18 -0
- data/lib/ramaze/spec.rb +33 -0
- data/lib/ramaze/spec/bacon.rb +34 -0
- data/lib/ramaze/spec/helper/bacon.rb +8 -0
- data/lib/ramaze/spec/helper/pretty_output.rb +82 -0
- data/lib/ramaze/spec/helper/snippets.rb +16 -0
- data/lib/ramaze/spec/helper/template_examples.rb +19 -0
- data/lib/ramaze/tool/bin.rb +340 -0
- data/lib/ramaze/tool/create.rb +48 -0
- data/lib/ramaze/tool/project_creator.rb +111 -0
- data/lib/ramaze/version.rb +3 -0
- data/lib/ramaze/view.rb +39 -0
- data/lib/ramaze/view/erubis.rb +23 -0
- data/lib/ramaze/view/ezamar.rb +23 -0
- data/lib/ramaze/view/gestalt.rb +14 -0
- data/lib/ramaze/view/haml.rb +16 -0
- data/lib/ramaze/view/liquid.rb +100 -0
- data/lib/ramaze/view/maruku.rb +15 -0
- data/lib/ramaze/view/nagoro.rb +44 -0
- data/lib/ramaze/view/nagoro/render_partial.rb +32 -0
- data/lib/ramaze/view/redcloth.rb +21 -0
- data/lib/ramaze/view/remarkably.rb +21 -0
- data/lib/ramaze/view/sass.rb +21 -0
- data/lib/ramaze/view/tagz.rb +63 -0
- data/lib/ramaze/view/tenjin.rb +32 -0
- data/lib/vendor/etag.rb +22 -0
- data/lib/vendor/route_exceptions.rb +42 -0
- data/ramaze.gemspec +85 -0
- data/spec/contrib/addressable_route.rb +32 -0
- data/spec/contrib/rest.rb +28 -0
- data/spec/examples/caching.rb +16 -0
- data/spec/examples/css.rb +14 -0
- data/spec/examples/element.rb +15 -0
- data/spec/examples/hello.rb +10 -0
- data/spec/examples/helpers/httpdigest.rb +64 -0
- data/spec/examples/linking.rb +17 -0
- data/spec/examples/simple.rb +40 -0
- data/spec/examples/templates/template_erubis.rb +10 -0
- data/spec/examples/templates/template_ezamar.rb +10 -0
- data/spec/examples/templates/template_haml.rb +10 -0
- data/spec/examples/templates/template_liquid.rb +10 -0
- data/spec/examples/templates/template_markaby.rb +11 -0
- data/spec/examples/templates/template_nagoro.rb +10 -0
- data/spec/examples/templates/template_redcloth.rb +10 -0
- data/spec/examples/templates/template_remarkably.rb +10 -0
- data/spec/examples/templates/template_tenjin.rb +10 -0
- data/spec/helper.rb +9 -0
- data/spec/ramaze/action/render.rb +21 -0
- data/spec/ramaze/action/view/bar.xhtml +1 -0
- data/spec/ramaze/action/view/instancevars/layout.xhtml +1 -0
- data/spec/ramaze/action/view/other_wrapper.erb +1 -0
- data/spec/ramaze/action/view/other_wrapper.xhtml +1 -0
- data/spec/ramaze/action/view/single_wrapper.xhtml +1 -0
- data/spec/ramaze/action/view/sub/sub_wrapper.erb +1 -0
- data/spec/ramaze/action/view/sub/sub_wrapper.xhtml +1 -0
- data/spec/ramaze/app.rb +47 -0
- data/spec/ramaze/bin/ramaze.rb +91 -0
- data/spec/ramaze/cache/localmemcache.rb +49 -0
- data/spec/ramaze/cache/memcache.rb +60 -0
- data/spec/ramaze/cache/sequel.rb +51 -0
- data/spec/ramaze/controller/actionless_templates.rb +36 -0
- data/spec/ramaze/controller/lonely_mapping.rb +16 -0
- data/spec/ramaze/controller/mapping.rb +43 -0
- data/spec/ramaze/controller/provide_inheritance.rb +47 -0
- data/spec/ramaze/controller/resolve.rb +30 -0
- data/spec/ramaze/controller/subclass.rb +36 -0
- data/spec/ramaze/controller/template_resolving.rb +77 -0
- data/spec/ramaze/controller/view/bar.xhtml +1 -0
- data/spec/ramaze/controller/view/base/another.xhtml +1 -0
- data/spec/ramaze/controller/view/greet.xhtml +1 -0
- data/spec/ramaze/controller/view/list.xhtml +1 -0
- data/spec/ramaze/controller/view/other/greet/other.xhtml +1 -0
- data/spec/ramaze/controller/view/other_wrapper.xhtml +1 -0
- data/spec/ramaze/dispatcher/directory.rb +69 -0
- data/spec/ramaze/dispatcher/file.rb +71 -0
- data/spec/ramaze/dispatcher/public/favicon.ico +0 -0
- data/spec/ramaze/dispatcher/public/file name.txt +1 -0
- data/spec/ramaze/dispatcher/public/test_download.css +141 -0
- data/spec/ramaze/error.rb +88 -0
- data/spec/ramaze/files.rb +29 -0
- data/spec/ramaze/files/public_1/plain.txt +1 -0
- data/spec/ramaze/files/public_2/rich.txt +1 -0
- data/spec/ramaze/gestalt.rb +135 -0
- data/spec/ramaze/helper/auth.rb +83 -0
- data/spec/ramaze/helper/bench.rb +18 -0
- data/spec/ramaze/helper/cache.rb +124 -0
- data/spec/ramaze/helper/flash.rb +41 -0
- data/spec/ramaze/helper/form.rb +356 -0
- data/spec/ramaze/helper/formatting.rb +111 -0
- data/spec/ramaze/helper/gestalt.rb +15 -0
- data/spec/ramaze/helper/gravatar.rb +40 -0
- data/spec/ramaze/helper/httpdigest.rb +144 -0
- data/spec/ramaze/helper/layout.rb +79 -0
- data/spec/ramaze/helper/layout/default.xhtml +5 -0
- data/spec/ramaze/helper/link.rb +70 -0
- data/spec/ramaze/helper/localize.rb +62 -0
- data/spec/ramaze/helper/maruku.rb +19 -0
- data/spec/ramaze/helper/pager.rb +96 -0
- data/spec/ramaze/helper/paginate.rb +68 -0
- data/spec/ramaze/helper/request_accessor.rb +19 -0
- data/spec/ramaze/helper/sequel_form.rb +91 -0
- data/spec/ramaze/helper/simple_captcha.rb +45 -0
- data/spec/ramaze/helper/stack.rb +86 -0
- data/spec/ramaze/helper/user.rb +72 -0
- data/spec/ramaze/helper/view/locals.xhtml +1 -0
- data/spec/ramaze/helper/view/loop.xhtml +4 -0
- data/spec/ramaze/helper/view/num.xhtml +1 -0
- data/spec/ramaze/helper/view/partial.xhtml +1 -0
- data/spec/ramaze/helper/view/recursive.xhtml +8 -0
- data/spec/ramaze/helper/view/recursive_local_ivars.xhtml +7 -0
- data/spec/ramaze/helper/view/recursive_locals.xhtml +7 -0
- data/spec/ramaze/helper/view/test_template.xhtml +1 -0
- data/spec/ramaze/helper/xhtml.rb +32 -0
- data/spec/ramaze/log/informer.rb +73 -0
- data/spec/ramaze/log/logging.rb +63 -0
- data/spec/ramaze/log/syslog.rb +73 -0
- data/spec/ramaze/params.rb +153 -0
- data/spec/ramaze/public/favicon.ico +0 -0
- data/spec/ramaze/public/ramaze.png +0 -0
- data/spec/ramaze/public/test_download.css +141 -0
- data/spec/ramaze/request.rb +61 -0
- data/spec/ramaze/rewrite/file.css +1 -0
- data/spec/ramaze/session/memcache.rb +66 -0
- data/spec/ramaze/struct.rb +47 -0
- data/spec/ramaze/template/ramaze/external.test +1 -0
- data/spec/ramaze/view.rb +36 -0
- data/spec/ramaze/view/erubis.rb +73 -0
- data/spec/ramaze/view/erubis/external.rhtml +8 -0
- data/spec/ramaze/view/erubis/sum.rhtml +1 -0
- data/spec/ramaze/view/ezamar.rb +73 -0
- data/spec/ramaze/view/ezamar/external.zmr +8 -0
- data/spec/ramaze/view/ezamar/sum.zmr +1 -0
- data/spec/ramaze/view/gestalt.rb +94 -0
- data/spec/ramaze/view/gestalt/external.ges +8 -0
- data/spec/ramaze/view/haml.rb +86 -0
- data/spec/ramaze/view/haml/external.haml +5 -0
- data/spec/ramaze/view/haml/sum.haml +2 -0
- data/spec/ramaze/view/liquid.rb +73 -0
- data/spec/ramaze/view/liquid/external.liquid +8 -0
- data/spec/ramaze/view/liquid/sum.liquid +1 -0
- data/spec/ramaze/view/nagoro.rb +73 -0
- data/spec/ramaze/view/nagoro/external.nag +8 -0
- data/spec/ramaze/view/nagoro/sum.nag +1 -0
- data/spec/ramaze/view/redcloth.rb +66 -0
- data/spec/ramaze/view/redcloth/external.redcloth +8 -0
- data/spec/ramaze/view/remarkably.rb +49 -0
- data/spec/ramaze/view/remarkably/external.rem +8 -0
- data/spec/ramaze/view/remarkably/sum.rem +1 -0
- data/spec/ramaze/view/sass.rb +73 -0
- data/spec/ramaze/view/sass/file.css.sass +5 -0
- data/spec/ramaze/view/tagz.rb +51 -0
- data/spec/ramaze/view/tagz/external.tagz +8 -0
- data/spec/ramaze/view/tagz/sum.tagz +1 -0
- data/spec/ramaze/view/tenjin.rb +57 -0
- data/spec/ramaze/view/tenjin/external.rbhtml +8 -0
- data/spec/ramaze/view/tenjin/sum.rbhtml +1 -0
- data/spec/snippets/array/put_within.rb +33 -0
- data/spec/snippets/binding/locals.rb +9 -0
- data/spec/snippets/numeric/filesize_format.rb +12 -0
- data/spec/snippets/numeric/time.rb +12 -0
- data/spec/snippets/object/__dir__.rb +14 -0
- data/spec/snippets/ordered_set.rb +63 -0
- data/spec/snippets/ramaze/acquire.rb +77 -0
- data/spec/snippets/ramaze/dictionary.rb +110 -0
- data/spec/snippets/ramaze/struct.rb +12 -0
- data/spec/snippets/string/camel_case.rb +25 -0
- data/spec/snippets/string/color.rb +11 -0
- data/spec/snippets/string/snake_case.rb +24 -0
- data/spec/snippets/string/unindent.rb +43 -0
- data/spec/snippets/thread/into.rb +9 -0
- data/tasks/authors.rake +30 -0
- data/tasks/bacon.rake +66 -0
- data/tasks/changelog.rake +20 -0
- data/tasks/copyright.rake +21 -0
- data/tasks/gem.rake +22 -0
- data/tasks/gem_setup.rake +99 -0
- data/tasks/git.rake +46 -0
- data/tasks/grancher.rake +12 -0
- data/tasks/jquery.rake +15 -0
- data/tasks/manifest.rake +4 -0
- data/tasks/metric_changes.rake +24 -0
- data/tasks/rcov.rake +23 -0
- data/tasks/release.rake +54 -0
- data/tasks/reversion.rake +8 -0
- data/tasks/setup.rake +6 -0
- data/tasks/todo.rake +27 -0
- data/tasks/traits.rake +21 -0
- data/tasks/yard.rake +4 -0
- metadata +720 -0
@@ -0,0 +1,85 @@
|
|
1
|
+
module Ramaze
|
2
|
+
class Reloader
|
3
|
+
# TODO:
|
4
|
+
# * There seems to be a problem somewhere that I couldn't identify yet, a
|
5
|
+
# file has to be modified twice initially to make it show up as
|
6
|
+
# modified here, subsequent changes work just fine.
|
7
|
+
# The only workaround I could find right now would be to read/write
|
8
|
+
# every single file, but that would be unexpected, irresponsible, and
|
9
|
+
# error-prone.
|
10
|
+
#
|
11
|
+
# NOTE:
|
12
|
+
# * I have changed from using a Mutex to using a Queue, which uses a
|
13
|
+
# Mutex internally.
|
14
|
+
|
15
|
+
class WatchInotify
|
16
|
+
POLL_INTERVAL = 2 # seconds
|
17
|
+
NOTIFY_MASK = RInotify::MODIFY | RInotify::IN_ONESHOT
|
18
|
+
|
19
|
+
def initialize
|
20
|
+
@watcher = RInotify.new
|
21
|
+
@changed = Queue.new
|
22
|
+
@watcher_thread = start_watcher
|
23
|
+
end
|
24
|
+
|
25
|
+
def call(cooldown)
|
26
|
+
yield
|
27
|
+
end
|
28
|
+
|
29
|
+
# TODO: define a finalizer to cleanup? -- reloader never calls #close
|
30
|
+
|
31
|
+
def start_watcher
|
32
|
+
Thread.new{ loop{ watcher_cycle }}
|
33
|
+
end
|
34
|
+
|
35
|
+
# Not much work here, we just have to empty the event queue and push the
|
36
|
+
# descriptors for reloading on next request.
|
37
|
+
def watcher_cycle
|
38
|
+
return unless @watcher.wait_for_events(POLL_INTERVAL)
|
39
|
+
|
40
|
+
@watcher.each_event do |event|
|
41
|
+
@changed.push(event.watch_descriptor)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def watch(file)
|
46
|
+
return if @watcher.watch_descriptors.has_value?(file)
|
47
|
+
return unless File.exist?(file)
|
48
|
+
|
49
|
+
@watcher.add_watch(file, NOTIFY_MASK)
|
50
|
+
rescue Errno::ENOENT
|
51
|
+
retry
|
52
|
+
end
|
53
|
+
|
54
|
+
# FIXME:
|
55
|
+
# Seems like this won't work due to some bug in the rinotify library.
|
56
|
+
# Would be cool if someone could make a FFI version.
|
57
|
+
|
58
|
+
def remove_watch(file)
|
59
|
+
@watcher.rm_watch(file)
|
60
|
+
end
|
61
|
+
|
62
|
+
def close
|
63
|
+
@watcher_thread.terminate
|
64
|
+
@watcher.close
|
65
|
+
true
|
66
|
+
end
|
67
|
+
|
68
|
+
# NOTE:
|
69
|
+
# We have to add the changed file again after we got a notification, I
|
70
|
+
# have no idea why, but using IN_ONESHOT should make sure that there is
|
71
|
+
# no memory leak in the C level even if we add a file again.
|
72
|
+
# There is a memory leak however in the watch_descriptors hash, since
|
73
|
+
# rinotify won't synchronize the contents properly and will only add to
|
74
|
+
# the hash, so we have to clean up ourselves.
|
75
|
+
def changed_files
|
76
|
+
until @changed.empty?
|
77
|
+
descriptor = @changed.shift
|
78
|
+
file = @watcher.watch_descriptors.delete(descriptor)
|
79
|
+
watch(file)
|
80
|
+
yield(file)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module Ramaze
|
2
|
+
class Reloader
|
3
|
+
class WatchStat
|
4
|
+
def initialize
|
5
|
+
# @files[file_path] = stat
|
6
|
+
@files = {}
|
7
|
+
@last = Time.now
|
8
|
+
end
|
9
|
+
|
10
|
+
def call(cooldown)
|
11
|
+
if cooldown and Time.now > @last + cooldown
|
12
|
+
yield
|
13
|
+
@last = Time.now
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
# start watching a file for changes
|
18
|
+
# true if succeeded, false if failure
|
19
|
+
def watch(file)
|
20
|
+
return true if watching?(file) # if already watching
|
21
|
+
if stat = safe_stat(file)
|
22
|
+
@files[file] = stat
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def watching?(file)
|
27
|
+
@files.has_key?(file)
|
28
|
+
end
|
29
|
+
|
30
|
+
# stop watching a file for changes
|
31
|
+
def remove_watch(file)
|
32
|
+
@files.delete(file)
|
33
|
+
end
|
34
|
+
|
35
|
+
# no need for cleanup
|
36
|
+
def close
|
37
|
+
end
|
38
|
+
|
39
|
+
# return files changed since last call
|
40
|
+
def changed_files
|
41
|
+
@files.each do |file, stat|
|
42
|
+
if new_stat = safe_stat(file)
|
43
|
+
if new_stat.mtime > stat.mtime
|
44
|
+
@files[file] = new_stat
|
45
|
+
yield(file)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def safe_stat(file)
|
52
|
+
File.stat(file)
|
53
|
+
rescue Errno::ENOENT, Errno::ENOTDIR
|
54
|
+
nil
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,115 @@
|
|
1
|
+
# Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
|
2
|
+
# All files in this distribution are subject to the terms of the Ruby license.
|
3
|
+
|
4
|
+
module Ramaze
|
5
|
+
# The purpose of this class is to act as a simple wrapper for Rack::Request
|
6
|
+
# and provide some convinient methods for our own use.
|
7
|
+
class Request < Innate::Request
|
8
|
+
|
9
|
+
# you can access the original @request via this method_missing,
|
10
|
+
# first it tries to match your method with any of the HTTP parameters
|
11
|
+
# then, in case that fails, it will relay to @request
|
12
|
+
def method_missing meth, *args
|
13
|
+
key = meth.to_s.upcase
|
14
|
+
return env[key] if env.has_key?(key)
|
15
|
+
super
|
16
|
+
end
|
17
|
+
|
18
|
+
# Sets any arguments passed as @instance_variables for the current action.
|
19
|
+
#
|
20
|
+
# Usage:
|
21
|
+
# request.params # => {'name' => 'manveru', 'q' => 'google', 'lang' => 'de'}
|
22
|
+
# to_ivs(:name, :q)
|
23
|
+
# @q # => 'google'
|
24
|
+
# @name # => 'manveru'
|
25
|
+
# @lang # => nil
|
26
|
+
|
27
|
+
def to_instance_variables(*args)
|
28
|
+
instance = Action.current.instance
|
29
|
+
args.each do |arg|
|
30
|
+
next unless value = self[arg]
|
31
|
+
instance.instance_variable_set("@#{arg}", value)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
alias to_ivs to_instance_variables
|
35
|
+
|
36
|
+
def accept_charset(default = 'UTF-8')
|
37
|
+
return default unless charsets = env['HTTP_ACCEPT_CHARSET']
|
38
|
+
charset = charsets.split(',', 2).first
|
39
|
+
charset == '*' ? default : charset
|
40
|
+
end
|
41
|
+
|
42
|
+
# Try to find out which languages the client would like to have and sort
|
43
|
+
# them by weight, (most wanted first).
|
44
|
+
#
|
45
|
+
# Returns and array of locales from env['HTTP_ACCEPT_LANGUAGE].
|
46
|
+
# e.g. ["fi", "en", "ja", "fr", "de", "es", "it", "nl", "sv"]
|
47
|
+
#
|
48
|
+
# Usage:
|
49
|
+
#
|
50
|
+
# request.accept_language
|
51
|
+
# # => ['en-us', 'en', 'de-at', 'de']
|
52
|
+
#
|
53
|
+
# @param [String #to_s] string the value of HTTP_ACCEPT_LANGUAGE
|
54
|
+
# @return [Array] list of locales
|
55
|
+
# @see Request#accept_language_with_weight
|
56
|
+
# @author manveru
|
57
|
+
def accept_language(string = env['HTTP_ACCEPT_LANGUAGE'])
|
58
|
+
return [] unless string
|
59
|
+
|
60
|
+
accept_language_with_weight(string).map{|lang, weight| lang }
|
61
|
+
end
|
62
|
+
alias locales accept_language
|
63
|
+
|
64
|
+
# Transform the HTTP_ACCEPT_LANGUAGE header into an Array with:
|
65
|
+
#
|
66
|
+
# [[lang, weight], [lang, weight], ...]
|
67
|
+
#
|
68
|
+
# This algorithm was taken and improved from the locales library.
|
69
|
+
#
|
70
|
+
# Usage:
|
71
|
+
#
|
72
|
+
# request.accept_language_with_weight
|
73
|
+
# # => [["en-us", 1.0], ["en", 0.8], ["de-at", 0.5], ["de", 0.3]]
|
74
|
+
#
|
75
|
+
# @param [String #to_s] string the value of HTTP_ACCEPT_LANGUAGE
|
76
|
+
# @return [Array] array of [lang, weight] arrays
|
77
|
+
# @see Request#accept_language
|
78
|
+
# @author manveru
|
79
|
+
def accept_language_with_weight(string = env['HTTP_ACCEPT_LANGUAGE'])
|
80
|
+
string.to_s.gsub(/\s+/, '').split(',').
|
81
|
+
map{|chunk| chunk.split(';q=', 2) }.
|
82
|
+
map{|lang, weight| [lang, weight ? weight.to_f : 1.0] }.
|
83
|
+
sort_by{|lang, weight| -weight }
|
84
|
+
end
|
85
|
+
|
86
|
+
INTERESTING_HTTP_VARIABLES =
|
87
|
+
(/USER|HOST|REQUEST|REMOTE|FORWARD|REFER|PATH|QUERY|VERSION|KEEP|CACHE/)
|
88
|
+
|
89
|
+
# Interesting HTTP variables from env
|
90
|
+
def http_variables
|
91
|
+
env.reject{|key, value| key.to_s !~ INTERESTING_HTTP_VARIABLES }
|
92
|
+
end
|
93
|
+
alias http_vars http_variables
|
94
|
+
|
95
|
+
REQUEST_STRING_FORMAT = "#<%s params=%p cookies=%p env=%p>"
|
96
|
+
|
97
|
+
def to_s
|
98
|
+
REQUEST_STRING_FORMAT % [self.class, params, cookies, http_variables]
|
99
|
+
end
|
100
|
+
alias inspect to_s
|
101
|
+
|
102
|
+
# Pretty prints current action with parameters, cookies and enviroment
|
103
|
+
# variables.
|
104
|
+
def pretty_print(pp)
|
105
|
+
pp.object_group(self){
|
106
|
+
group = { 'params' => params, 'cookies' => cookies, 'env' => http_variables }
|
107
|
+
group.each do |name, hash|
|
108
|
+
pp.breakable
|
109
|
+
pp.text " @#{name}="
|
110
|
+
pp.nest(name.size + 3){ pp.pp_hash(hash) }
|
111
|
+
end
|
112
|
+
}
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
|
2
|
+
# All files in this distribution are subject to the terms of the Ruby license.
|
3
|
+
|
4
|
+
module Ramaze
|
5
|
+
class Response < Rack::Response
|
6
|
+
# Alias for Current.response
|
7
|
+
def self.current; Current.response; end
|
8
|
+
|
9
|
+
def initialize(body = [], status = 200, header = {}, &block)
|
10
|
+
modified_header = Ramaze.options.header.merge(header)
|
11
|
+
header.merge!(modified_header)
|
12
|
+
super
|
13
|
+
end
|
14
|
+
|
15
|
+
# Build/replace this responses data
|
16
|
+
def build(new_body = nil, new_status = nil, new_header = nil)
|
17
|
+
self.header.merge!(new_header) if new_header
|
18
|
+
|
19
|
+
self.body = new_body if new_body
|
20
|
+
self.status = new_status if new_status
|
21
|
+
end
|
22
|
+
|
23
|
+
def body=(obj)
|
24
|
+
if obj.respond_to?(:stat)
|
25
|
+
@length = obj.stat.size
|
26
|
+
@body = obj
|
27
|
+
elsif obj.respond_to?(:size)
|
28
|
+
@body = []
|
29
|
+
@length = 0
|
30
|
+
write(obj)
|
31
|
+
else
|
32
|
+
raise(ArgumentError, "Invalid body: %p" % obj)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/lib/ramaze/setup.rb
ADDED
@@ -0,0 +1,123 @@
|
|
1
|
+
module Ramaze
|
2
|
+
# Convenient setup and activation of gems from different sources and specific
|
3
|
+
# versions.
|
4
|
+
# It's almost like Kernel#gem but also installs automatically if a gem is
|
5
|
+
# missing.
|
6
|
+
#
|
7
|
+
# @example
|
8
|
+
#
|
9
|
+
# Ramaze.setup :verbose => true do
|
10
|
+
# # gem and specific version
|
11
|
+
# gem 'makura', '>=2009.01'
|
12
|
+
#
|
13
|
+
# # gem and name for require
|
14
|
+
# gem 'aws-s3', :lib => 'aws/s3'
|
15
|
+
#
|
16
|
+
# # gem with specific version from rubyforge (default)
|
17
|
+
# gem 'json', :version => '=1.1.3', :source => rubyforge
|
18
|
+
#
|
19
|
+
# # gem from github
|
20
|
+
# gem 'manveru-org', :lib => 'org', :source => github
|
21
|
+
# end
|
22
|
+
#
|
23
|
+
# @option options [boolean] (true) verbose
|
24
|
+
# @option options [String] (nil) extconf
|
25
|
+
# @yield block
|
26
|
+
# @see GemSetup#initialize
|
27
|
+
# @author manveru
|
28
|
+
def self.setup(options = {:verbose => true}, &block)
|
29
|
+
GemSetup.new(options, &block)
|
30
|
+
end
|
31
|
+
|
32
|
+
class GemSetup
|
33
|
+
def initialize(options = {}, &block)
|
34
|
+
@gems = []
|
35
|
+
@options = options.dup
|
36
|
+
@verbose = @options.delete(:verbose)
|
37
|
+
|
38
|
+
run(&block)
|
39
|
+
end
|
40
|
+
|
41
|
+
def run(&block)
|
42
|
+
return unless block_given?
|
43
|
+
instance_eval(&block)
|
44
|
+
setup
|
45
|
+
end
|
46
|
+
|
47
|
+
def gem(name, version = nil, options = {})
|
48
|
+
if version.respond_to?(:merge!)
|
49
|
+
options = version
|
50
|
+
else
|
51
|
+
options[:version] = version
|
52
|
+
end
|
53
|
+
|
54
|
+
@gems << [name, options]
|
55
|
+
end
|
56
|
+
|
57
|
+
# all gems defined, let's try to load/install them
|
58
|
+
def setup
|
59
|
+
require 'rubygems'
|
60
|
+
require 'rubygems/dependency_installer'
|
61
|
+
|
62
|
+
@gems.each do |name, options|
|
63
|
+
setup_gem(name, options)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
# first try to activate, install and try to activate again if activation
|
68
|
+
# fails the first time
|
69
|
+
def setup_gem(name, options)
|
70
|
+
version = [options[:version]].compact
|
71
|
+
lib_name = options[:lib] || name
|
72
|
+
|
73
|
+
log "activating #{name}"
|
74
|
+
|
75
|
+
Gem.activate(name, *version)
|
76
|
+
require(lib_name)
|
77
|
+
|
78
|
+
rescue LoadError
|
79
|
+
|
80
|
+
install_gem(name, options)
|
81
|
+
Gem.activate(name, *version)
|
82
|
+
require(lib_name)
|
83
|
+
end
|
84
|
+
|
85
|
+
# tell rubygems to install a gem
|
86
|
+
def install_gem(name, options)
|
87
|
+
installer = Gem::DependencyInstaller.new(options)
|
88
|
+
|
89
|
+
temp_argv(options[:extconf]) do
|
90
|
+
log "Installing #{name}"
|
91
|
+
installer.install(name, options[:version])
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
# prepare ARGV for rubygems installer
|
96
|
+
def temp_argv(extconf)
|
97
|
+
if extconf ||= @options[:extconf]
|
98
|
+
old_argv = ARGV.clone
|
99
|
+
ARGV.replace(extconf.split(' '))
|
100
|
+
end
|
101
|
+
|
102
|
+
yield
|
103
|
+
|
104
|
+
ensure
|
105
|
+
ARGV.replace(old_argv) if extconf
|
106
|
+
end
|
107
|
+
|
108
|
+
private
|
109
|
+
|
110
|
+
def log(msg)
|
111
|
+
return unless @verbose
|
112
|
+
|
113
|
+
if defined?(Log)
|
114
|
+
Log.info(msg)
|
115
|
+
else
|
116
|
+
puts(msg)
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
def rubyforge; 'http://gems.rubyforge.org/' end
|
121
|
+
def github; 'http://gems.github.com/' end
|
122
|
+
end
|
123
|
+
end
|
@@ -0,0 +1,22 @@
|
|
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
|
+
dir = File.join(File.expand_path(File.dirname(__FILE__)), 'snippets')
|
5
|
+
glob = File.join(dir, '**', '*.rb')
|
6
|
+
|
7
|
+
Dir[glob].each do |snippet|
|
8
|
+
require(snippet)
|
9
|
+
end
|
10
|
+
|
11
|
+
Ramaze::CoreExtensions.constants.each do |const|
|
12
|
+
ext = Ramaze::CoreExtensions.const_get(const)
|
13
|
+
into = Module.const_get(const)
|
14
|
+
|
15
|
+
collisions = ext.instance_methods & into.instance_methods
|
16
|
+
|
17
|
+
if collisions.empty?
|
18
|
+
into.__send__(:include, ext)
|
19
|
+
else
|
20
|
+
warn "Won't include %p with %p, %p exists" % [into, ext, collisions]
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,44 @@
|
|
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 CoreExtensions
|
6
|
+
|
7
|
+
# Extensions for Array
|
8
|
+
|
9
|
+
module Array
|
10
|
+
|
11
|
+
# a = [1, 2, 3]
|
12
|
+
# a.put_within(4, :after => 2, :before => 3)
|
13
|
+
# a # => [1, 2, 4, 3]
|
14
|
+
|
15
|
+
def put_within(object, constrain)
|
16
|
+
pre, post = constrain.values_at(:after, :before)
|
17
|
+
|
18
|
+
return put_after(pre, object) if rindex(post) - index(pre) == 1
|
19
|
+
|
20
|
+
raise ArgumentError, "Too many elements within constrain"
|
21
|
+
end
|
22
|
+
|
23
|
+
# a = [1, 2, 3]
|
24
|
+
# a.put_after(2, 4)
|
25
|
+
# a # => [1, 2, 4, 3]
|
26
|
+
|
27
|
+
def put_after(element, object)
|
28
|
+
return self[index(element) + 1, 0] = object if include?(element)
|
29
|
+
|
30
|
+
raise ArgumentError, "The given element doesn't exist"
|
31
|
+
end
|
32
|
+
|
33
|
+
# a = [1, 2, 3]
|
34
|
+
# a.put_before(2, 4)
|
35
|
+
# a # => [1, 4, 2, 3]
|
36
|
+
|
37
|
+
def put_before(element, object)
|
38
|
+
return self[rindex(element), 0] = object if include?(element)
|
39
|
+
|
40
|
+
raise ArgumentError, "The given element doesn't exist"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|