refinerycms 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CONTRIBUTORS +8 -0
- data/LICENSE +21 -0
- data/README +40 -0
- data/app/controllers/application.rb +3 -0
- data/app/controllers/application_controller.rb +8 -0
- data/config/amazon_s3.yml +17 -0
- data/config/boot.rb +110 -0
- data/config/database.yml.example +20 -0
- data/config/environment.rb +67 -0
- data/config/environments/development.rb +17 -0
- data/config/environments/production.rb +19 -0
- data/config/environments/test.rb +22 -0
- data/config/initializers/inflections.rb +10 -0
- data/config/initializers/mime_types.rb +5 -0
- data/config/rackspace_cloudfiles.yml +14 -0
- data/config/routes.rb +19 -0
- data/db/migrate/20090903030652_remove_title_from_resources.rb +9 -0
- data/db/migrate/20090914025122_change_default_image_thumbnails.rb +9 -0
- data/db/migrate/20090916025552_resave_refinery_settings_through_serializer.rb +13 -0
- data/db/migrate/20090916045536_create_user_plugins.rb +41 -0
- data/db/migrate/20090916055243_add_position_to_user_plugins.rb +9 -0
- data/db/schema.rb +141 -0
- data/db/seeds.rb +109 -0
- data/lib/refinery_initializer.rb +9 -0
- data/public/.htaccess +40 -0
- data/public/404.html +29 -0
- data/public/422.html +30 -0
- data/public/500.html +30 -0
- data/public/favicon.ico +0 -0
- data/public/images/lightbox/bullet.gif +0 -0
- data/public/images/lightbox/close.gif +0 -0
- data/public/images/lightbox/closelabel.gif +0 -0
- data/public/images/lightbox/donate-button.gif +0 -0
- data/public/images/lightbox/download-icon.gif +0 -0
- data/public/images/lightbox/loading.gif +0 -0
- data/public/images/lightbox/nextlabel.gif +0 -0
- data/public/images/lightbox/prevlabel.gif +0 -0
- data/public/images/refinery/add.gif +0 -0
- data/public/images/refinery/add.png +0 -0
- data/public/images/refinery/admin_bg.png +0 -0
- data/public/images/refinery/ajax-loader.gif +0 -0
- data/public/images/refinery/branch-end.gif +0 -0
- data/public/images/refinery/branch-start.gif +0 -0
- data/public/images/refinery/branch.gif +0 -0
- data/public/images/refinery/cross.gif +0 -0
- data/public/images/refinery/deactive-gradient.gif +0 -0
- data/public/images/refinery/delete.gif +0 -0
- data/public/images/refinery/drag.gif +0 -0
- data/public/images/refinery/edit.gif +0 -0
- data/public/images/refinery/header-background.gif +0 -0
- data/public/images/refinery/header_background.png +0 -0
- data/public/images/refinery/hover-gradient.jpg +0 -0
- data/public/images/refinery/icons/accept.png +0 -0
- data/public/images/refinery/icons/add.png +0 -0
- data/public/images/refinery/icons/application_edit.png +0 -0
- data/public/images/refinery/icons/application_go.png +0 -0
- data/public/images/refinery/icons/arrow_left.png +0 -0
- data/public/images/refinery/icons/arrow_switch.png +0 -0
- data/public/images/refinery/icons/arrow_up.png +0 -0
- data/public/images/refinery/icons/bin_closed.png +0 -0
- data/public/images/refinery/icons/cancel.png +0 -0
- data/public/images/refinery/icons/cog_add.png +0 -0
- data/public/images/refinery/icons/cog_edit.png +0 -0
- data/public/images/refinery/icons/cross.png +0 -0
- data/public/images/refinery/icons/delete.png +0 -0
- data/public/images/refinery/icons/edit.png +0 -0
- data/public/images/refinery/icons/email_edit.png +0 -0
- data/public/images/refinery/icons/email_go.png +0 -0
- data/public/images/refinery/icons/email_open.png +0 -0
- data/public/images/refinery/icons/eye.png +0 -0
- data/public/images/refinery/icons/help.png +0 -0
- data/public/images/refinery/icons/image_add.png +0 -0
- data/public/images/refinery/icons/image_edit.png +0 -0
- data/public/images/refinery/icons/layout_add.png +0 -0
- data/public/images/refinery/icons/layout_edit.png +0 -0
- data/public/images/refinery/icons/page_add.png +0 -0
- data/public/images/refinery/icons/page_edit.png +0 -0
- data/public/images/refinery/icons/page_link.png +0 -0
- data/public/images/refinery/icons/page_white_edit.png +0 -0
- data/public/images/refinery/icons/page_white_put.png +0 -0
- data/public/images/refinery/icons/reorder.png +0 -0
- data/public/images/refinery/icons/tick.png +0 -0
- data/public/images/refinery/icons/user.png +0 -0
- data/public/images/refinery/icons/user_add.png +0 -0
- data/public/images/refinery/icons/user_comment.png +0 -0
- data/public/images/refinery/icons/user_edit.png +0 -0
- data/public/images/refinery/info.gif +0 -0
- data/public/images/refinery/logo.png +0 -0
- data/public/images/refinery/m-tools.gif +0 -0
- data/public/images/refinery/magnifier.png +0 -0
- data/public/images/refinery/nav-3-background.gif +0 -0
- data/public/images/refinery/page_bg.png +0 -0
- data/public/images/refinery/resolve-digital.gif +0 -0
- data/public/images/refinery/search.gif +0 -0
- data/public/images/refinery/shad_blcorner.png +0 -0
- data/public/images/refinery/shad_bottom.png +0 -0
- data/public/images/refinery/shad_brcorner.png +0 -0
- data/public/images/refinery/shad_tlcorner.png +0 -0
- data/public/images/refinery/shad_trcorner.png +0 -0
- data/public/images/refinery/tableft.gif +0 -0
- data/public/images/refinery/tabright.gif +0 -0
- data/public/images/refinery/tick.gif +0 -0
- data/public/images/thickbox/cross.png +0 -0
- data/public/images/thickbox/loadingAnimation.gif +0 -0
- data/public/images/thickbox/macFFBgHack.png +0 -0
- data/public/images/wymeditor/skins/refinery/blockquote.png +0 -0
- data/public/images/wymeditor/skins/refinery/center.png +0 -0
- data/public/images/wymeditor/skins/refinery/css.png +0 -0
- data/public/images/wymeditor/skins/refinery/h1.png +0 -0
- data/public/images/wymeditor/skins/refinery/h2.png +0 -0
- data/public/images/wymeditor/skins/refinery/h3.png +0 -0
- data/public/images/wymeditor/skins/refinery/h4.png +0 -0
- data/public/images/wymeditor/skins/refinery/h5.png +0 -0
- data/public/images/wymeditor/skins/refinery/h6.png +0 -0
- data/public/images/wymeditor/skins/refinery/icons.png +0 -0
- data/public/images/wymeditor/skins/refinery/iframe/lbl-blockquote.png +0 -0
- data/public/images/wymeditor/skins/refinery/iframe/lbl-h1.png +0 -0
- data/public/images/wymeditor/skins/refinery/iframe/lbl-h2.png +0 -0
- data/public/images/wymeditor/skins/refinery/iframe/lbl-h3.png +0 -0
- data/public/images/wymeditor/skins/refinery/iframe/lbl-h4.png +0 -0
- data/public/images/wymeditor/skins/refinery/iframe/lbl-h5.png +0 -0
- data/public/images/wymeditor/skins/refinery/iframe/lbl-h6.png +0 -0
- data/public/images/wymeditor/skins/refinery/iframe/lbl-p.png +0 -0
- data/public/images/wymeditor/skins/refinery/iframe/lbl-pre.png +0 -0
- data/public/images/wymeditor/skins/refinery/justify.png +0 -0
- data/public/images/wymeditor/skins/refinery/left.png +0 -0
- data/public/images/wymeditor/skins/refinery/paragraph.png +0 -0
- data/public/images/wymeditor/skins/refinery/right.png +0 -0
- data/public/images/wymeditor/skins/wymeditor_icon.png +0 -0
- data/public/javascripts/admin.js +26 -0
- data/public/javascripts/application.js +2 -0
- data/public/javascripts/builder.js +136 -0
- data/public/javascripts/controls.js +963 -0
- data/public/javascripts/dialog.js +52 -0
- data/public/javascripts/dragdrop.js +973 -0
- data/public/javascripts/effects.js +1128 -0
- data/public/javascripts/fastinit.js +84 -0
- data/public/javascripts/jquery/GPL-LICENSE.txt +278 -0
- data/public/javascripts/jquery/MIT-LICENSE.txt +20 -0
- data/public/javascripts/jquery/README +67 -0
- data/public/javascripts/jquery/jquery.js +11 -0
- data/public/javascripts/jquery/jquery.ui.draggable.js +1 -0
- data/public/javascripts/jquery/jquery.ui.js +1 -0
- data/public/javascripts/jquery/jquery.ui.resizable.js +1 -0
- data/public/javascripts/jquery/jquery.ui.sortable.js +1 -0
- data/public/javascripts/lightbox.js +503 -0
- data/public/javascripts/livepipe.js +356 -0
- data/public/javascripts/overlabel.js +66 -0
- data/public/javascripts/parse_url.js +38 -0
- data/public/javascripts/prototype.enhancements.js +24 -0
- data/public/javascripts/prototype.js +4320 -0
- data/public/javascripts/scriptaculous.js +47 -0
- data/public/javascripts/slider.js +275 -0
- data/public/javascripts/tabs.js +147 -0
- data/public/javascripts/thickbox.js +363 -0
- data/public/javascripts/tooltips.js +173 -0
- data/public/javascripts/wymeditor/boot_wym.js +163 -0
- data/public/javascripts/wymeditor/jquery.refinery.wymeditor.js +4986 -0
- data/public/javascripts/wymeditor/lang/ca.js +45 -0
- data/public/javascripts/wymeditor/lang/cs.js +45 -0
- data/public/javascripts/wymeditor/lang/de.js +45 -0
- data/public/javascripts/wymeditor/lang/en.js +48 -0
- data/public/javascripts/wymeditor/lang/es.js +45 -0
- data/public/javascripts/wymeditor/lang/fa.js +46 -0
- data/public/javascripts/wymeditor/lang/fr.js +45 -0
- data/public/javascripts/wymeditor/lang/he.js +45 -0
- data/public/javascripts/wymeditor/lang/hu.js +45 -0
- data/public/javascripts/wymeditor/lang/it.js +45 -0
- data/public/javascripts/wymeditor/lang/nb.js +45 -0
- data/public/javascripts/wymeditor/lang/nl.js +45 -0
- data/public/javascripts/wymeditor/lang/nn.js +45 -0
- data/public/javascripts/wymeditor/lang/pl.js +45 -0
- data/public/javascripts/wymeditor/lang/pt-br.js +45 -0
- data/public/javascripts/wymeditor/lang/pt.js +45 -0
- data/public/javascripts/wymeditor/lang/ru.js +45 -0
- data/public/javascripts/wymeditor/lang/sv.js +45 -0
- data/public/javascripts/wymeditor/lang/tr.js +45 -0
- data/public/javascripts/wymeditor/lang/zh_cn.js +47 -0
- data/public/javascripts/wymeditor/skins/refinery/skin.js +40 -0
- data/public/robots.txt +2 -0
- data/public/stylesheets/application.css +0 -0
- data/public/stylesheets/application.css.example +76 -0
- data/public/stylesheets/formatting.css +0 -0
- data/public/stylesheets/formatting.css.example +86 -0
- data/public/stylesheets/home.css +0 -0
- data/public/stylesheets/home.css.example +27 -0
- data/public/stylesheets/ie6.css +0 -0
- data/public/stylesheets/ie7.css +0 -0
- data/public/stylesheets/lightbox.css +27 -0
- data/public/stylesheets/overlabel.css +21 -0
- data/public/stylesheets/refinery.css +1036 -0
- data/public/stylesheets/theme.css +36 -0
- data/public/stylesheets/thickbox.css +165 -0
- data/public/stylesheets/tooltips.css +38 -0
- data/public/stylesheets/wymeditor/skins/refinery/skin.css +211 -0
- data/public/stylesheets/wymeditor/skins/refinery/wymiframe.css +92 -0
- data/public/wymeditor/GPL-license.txt +278 -0
- data/public/wymeditor/MIT-license.txt +20 -0
- data/public/wymeditor/README +35 -0
- data/vendor/plugins/acts_as_indexed/CHANGELOG +74 -0
- data/vendor/plugins/acts_as_indexed/MIT-LICENSE +20 -0
- data/vendor/plugins/acts_as_indexed/README.rdoc +114 -0
- data/vendor/plugins/acts_as_indexed/Rakefile +35 -0
- data/vendor/plugins/acts_as_indexed/init.rb +2 -0
- data/vendor/plugins/acts_as_indexed/lib/acts_as_indexed.rb +224 -0
- data/vendor/plugins/acts_as_indexed/lib/search_atom.rb +107 -0
- data/vendor/plugins/acts_as_indexed/lib/search_index.rb +329 -0
- data/vendor/plugins/acts_as_indexed/lib/will_paginate_search.rb +29 -0
- data/vendor/plugins/acts_as_indexed/test/abstract_unit.rb +47 -0
- data/vendor/plugins/acts_as_indexed/test/acts_as_indexed_test.rb +102 -0
- data/vendor/plugins/acts_as_indexed/test/database.yml +10 -0
- data/vendor/plugins/acts_as_indexed/test/fixtures/post.rb +5 -0
- data/vendor/plugins/acts_as_indexed/test/fixtures/posts.yml +31 -0
- data/vendor/plugins/acts_as_indexed/test/schema.rb +6 -0
- data/vendor/plugins/acts_as_tree/README +26 -0
- data/vendor/plugins/acts_as_tree/Rakefile +22 -0
- data/vendor/plugins/acts_as_tree/init.rb +1 -0
- data/vendor/plugins/acts_as_tree/lib/active_record/acts/tree.rb +141 -0
- data/vendor/plugins/acts_as_tree/test/abstract_unit.rb +0 -0
- data/vendor/plugins/acts_as_tree/test/acts_as_tree_test.rb +219 -0
- data/vendor/plugins/acts_as_tree/test/database.yml +0 -0
- data/vendor/plugins/acts_as_tree/test/fixtures/mixin.rb +0 -0
- data/vendor/plugins/acts_as_tree/test/fixtures/mixins.yml +0 -0
- data/vendor/plugins/acts_as_tree/test/schema.rb +0 -0
- data/vendor/plugins/attachment_fu/CHANGELOG +35 -0
- data/vendor/plugins/attachment_fu/LICENSE +20 -0
- data/vendor/plugins/attachment_fu/README +193 -0
- data/vendor/plugins/attachment_fu/Rakefile +22 -0
- data/vendor/plugins/attachment_fu/amazon_s3.yml.tpl +17 -0
- data/vendor/plugins/attachment_fu/init.rb +16 -0
- data/vendor/plugins/attachment_fu/install.rb +7 -0
- data/vendor/plugins/attachment_fu/lib/geometry.rb +93 -0
- data/vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu.rb +514 -0
- data/vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/backends/cloud_file_backend.rb +211 -0
- data/vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/backends/db_file_backend.rb +39 -0
- data/vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/backends/file_system_backend.rb +126 -0
- data/vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/backends/s3_backend.rb +394 -0
- data/vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/processors/core_image_processor.rb +59 -0
- data/vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/processors/gd2_processor.rb +54 -0
- data/vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/processors/image_science_processor.rb +61 -0
- data/vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/processors/mini_magick_processor.rb +132 -0
- data/vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/processors/rmagick_processor.rb +57 -0
- data/vendor/plugins/attachment_fu/rackspace_cloudfiles.yml.tpl +14 -0
- data/vendor/plugins/attachment_fu/test/backends/db_file_test.rb +16 -0
- data/vendor/plugins/attachment_fu/test/backends/file_system_test.rb +143 -0
- data/vendor/plugins/attachment_fu/test/backends/remote/cloudfiles_test.rb +102 -0
- data/vendor/plugins/attachment_fu/test/backends/remote/s3_test.rb +119 -0
- data/vendor/plugins/attachment_fu/test/base_attachment_tests.rb +77 -0
- data/vendor/plugins/attachment_fu/test/basic_test.rb +70 -0
- data/vendor/plugins/attachment_fu/test/database.yml +18 -0
- data/vendor/plugins/attachment_fu/test/extra_attachment_test.rb +67 -0
- data/vendor/plugins/attachment_fu/test/fixtures/attachment.rb +226 -0
- data/vendor/plugins/attachment_fu/test/fixtures/files/fake/rails.png +0 -0
- data/vendor/plugins/attachment_fu/test/fixtures/files/foo.txt +1 -0
- data/vendor/plugins/attachment_fu/test/fixtures/files/rails.png +0 -0
- data/vendor/plugins/attachment_fu/test/geometry_test.rb +108 -0
- data/vendor/plugins/attachment_fu/test/processors/core_image_test.rb +37 -0
- data/vendor/plugins/attachment_fu/test/processors/gd2_test.rb +31 -0
- data/vendor/plugins/attachment_fu/test/processors/image_science_test.rb +31 -0
- data/vendor/plugins/attachment_fu/test/processors/mini_magick_test.rb +103 -0
- data/vendor/plugins/attachment_fu/test/processors/rmagick_test.rb +255 -0
- data/vendor/plugins/attachment_fu/test/schema.rb +134 -0
- data/vendor/plugins/attachment_fu/test/test_helper.rb +150 -0
- data/vendor/plugins/attachment_fu/test/validation_test.rb +55 -0
- data/vendor/plugins/attachment_fu/vendor/red_artisan/core_image/filters/color.rb +27 -0
- data/vendor/plugins/attachment_fu/vendor/red_artisan/core_image/filters/effects.rb +31 -0
- data/vendor/plugins/attachment_fu/vendor/red_artisan/core_image/filters/perspective.rb +25 -0
- data/vendor/plugins/attachment_fu/vendor/red_artisan/core_image/filters/quality.rb +25 -0
- data/vendor/plugins/attachment_fu/vendor/red_artisan/core_image/filters/scale.rb +47 -0
- data/vendor/plugins/attachment_fu/vendor/red_artisan/core_image/filters/watermark.rb +32 -0
- data/vendor/plugins/attachment_fu/vendor/red_artisan/core_image/processor.rb +123 -0
- data/vendor/plugins/authentication/README +0 -0
- data/vendor/plugins/authentication/Rakefile +0 -0
- data/vendor/plugins/authentication/app/controllers/admin/users_controller.rb +93 -0
- data/vendor/plugins/authentication/app/controllers/sessions_controller.rb +30 -0
- data/vendor/plugins/authentication/app/controllers/users_controller.rb +86 -0
- data/vendor/plugins/authentication/app/helpers/sessions_helper.rb +2 -0
- data/vendor/plugins/authentication/app/helpers/users_helper.rb +2 -0
- data/vendor/plugins/authentication/app/models/user.rb +146 -0
- data/vendor/plugins/authentication/app/models/user_mailer.rb +25 -0
- data/vendor/plugins/authentication/app/models/user_observer.rb +11 -0
- data/vendor/plugins/authentication/app/models/user_plugin.rb +5 -0
- data/vendor/plugins/authentication/app/views/admin/users/_form.html.erb +42 -0
- data/vendor/plugins/authentication/app/views/admin/users/edit.html.erb +1 -0
- data/vendor/plugins/authentication/app/views/admin/users/index.html.erb +41 -0
- data/vendor/plugins/authentication/app/views/admin/users/new.html.erb +1 -0
- data/vendor/plugins/authentication/app/views/sessions/new.html.erb +21 -0
- data/vendor/plugins/authentication/app/views/user_mailer/activation.html.erb +3 -0
- data/vendor/plugins/authentication/app/views/user_mailer/signup_notification.html.erb +8 -0
- data/vendor/plugins/authentication/app/views/users/new.html.erb +28 -0
- data/vendor/plugins/authentication/config/routes.rb +10 -0
- data/vendor/plugins/authentication/init.rb +13 -0
- data/vendor/plugins/authentication/lib/authenticated_system.rb +115 -0
- data/vendor/plugins/authentication/lib/authenticated_test_helper.rb +10 -0
- data/vendor/plugins/authentication/test/fixtures/users.yml +19 -0
- data/vendor/plugins/authentication/test/functional/admin/base_controller_test.rb +8 -0
- data/vendor/plugins/authentication/test/functional/admin/dashboard_controller_test.rb +8 -0
- data/vendor/plugins/authentication/test/functional/admin/pages_controller_test.rb +8 -0
- data/vendor/plugins/authentication/test/functional/sessions_controller_test.rb +85 -0
- data/vendor/plugins/authentication/test/functional/users_controller_test.rb +99 -0
- data/vendor/plugins/authentication/test/test_helper.rb +38 -0
- data/vendor/plugins/authentication/test/unit/user_mailer_test.rb +31 -0
- data/vendor/plugins/authentication/test/unit/user_test.rb +164 -0
- data/vendor/plugins/dashboard/app/controllers/admin/dashboard_controller.rb +16 -0
- data/vendor/plugins/dashboard/app/helpers/admin/dashboard_helper.rb +19 -0
- data/vendor/plugins/dashboard/app/views/admin/dashboard/_recent_activity.html.erb +14 -0
- data/vendor/plugins/dashboard/app/views/admin/dashboard/index.html.erb +31 -0
- data/vendor/plugins/dashboard/config/routes.rb +5 -0
- data/vendor/plugins/dashboard/init.rb +7 -0
- data/vendor/plugins/images/app/controllers/admin/images_controller.rb +72 -0
- data/vendor/plugins/images/app/helpers/admin/images_helper.rb +17 -0
- data/vendor/plugins/images/app/models/image.rb +51 -0
- data/vendor/plugins/images/app/views/admin/images/_form.html.erb +36 -0
- data/vendor/plugins/images/app/views/admin/images/_grid_view.html.erb +17 -0
- data/vendor/plugins/images/app/views/admin/images/_list_view.html.erb +21 -0
- data/vendor/plugins/images/app/views/admin/images/edit.html.erb +1 -0
- data/vendor/plugins/images/app/views/admin/images/index.html.erb +43 -0
- data/vendor/plugins/images/app/views/admin/images/insert.html.erb +115 -0
- data/vendor/plugins/images/app/views/admin/images/new.html.erb +1 -0
- data/vendor/plugins/images/config/routes.rb +5 -0
- data/vendor/plugins/images/init.rb +8 -0
- data/vendor/plugins/images/lib/tasks/images.rake +28 -0
- data/vendor/plugins/inquiries/app/controllers/admin/inquiries_controller.rb +29 -0
- data/vendor/plugins/inquiries/app/controllers/admin/inquiry_settings_controller.rb +16 -0
- data/vendor/plugins/inquiries/app/controllers/inquiries_controller.rb +41 -0
- data/vendor/plugins/inquiries/app/helpers/inquiries_helper.rb +13 -0
- data/vendor/plugins/inquiries/app/models/inquiry.rb +18 -0
- data/vendor/plugins/inquiries/app/models/inquiry_mailer.rb +19 -0
- data/vendor/plugins/inquiries/app/models/inquiry_setting.rb +11 -0
- data/vendor/plugins/inquiries/app/views/admin/inquiries/_inquiry.html.erb +27 -0
- data/vendor/plugins/inquiries/app/views/admin/inquiries/index.html.erb +44 -0
- data/vendor/plugins/inquiries/app/views/admin/inquiries/show.html.erb +62 -0
- data/vendor/plugins/inquiries/app/views/admin/inquiry_settings/_confirmation_email_form.html.erb +50 -0
- data/vendor/plugins/inquiries/app/views/admin/inquiry_settings/_notification_recipients_form.html.erb +22 -0
- data/vendor/plugins/inquiries/app/views/admin/inquiry_settings/edit.html.erb +5 -0
- data/vendor/plugins/inquiries/app/views/admin/inquiry_settings/index.html.erb +32 -0
- data/vendor/plugins/inquiries/app/views/inquiries/new.html.erb +33 -0
- data/vendor/plugins/inquiries/app/views/inquiries/thank_you.html.erb +9 -0
- data/vendor/plugins/inquiries/app/views/inquiry_mailer/confirmation.html.erb +1 -0
- data/vendor/plugins/inquiries/app/views/inquiry_mailer/notification.html.erb +18 -0
- data/vendor/plugins/inquiries/config/routes.rb +8 -0
- data/vendor/plugins/inquiries/init.rb +11 -0
- data/vendor/plugins/news/app/controllers/admin/news_items_controller.rb +5 -0
- data/vendor/plugins/news/app/controllers/news_items_controller.rb +20 -0
- data/vendor/plugins/news/app/models/news_item.rb +26 -0
- data/vendor/plugins/news/app/views/admin/news_items/_form.html.erb +33 -0
- data/vendor/plugins/news/app/views/admin/news_items/_news_item.html.erb +15 -0
- data/vendor/plugins/news/app/views/admin/news_items/edit.html.erb +1 -0
- data/vendor/plugins/news/app/views/admin/news_items/index.html.erb +36 -0
- data/vendor/plugins/news/app/views/admin/news_items/new.html.erb +1 -0
- data/vendor/plugins/news/app/views/news_items/_recent_posts.html.erb +8 -0
- data/vendor/plugins/news/app/views/news_items/index.html.erb +23 -0
- data/vendor/plugins/news/app/views/news_items/show.html.erb +18 -0
- data/vendor/plugins/news/config/routes.rb +7 -0
- data/vendor/plugins/news/init.rb +7 -0
- data/vendor/plugins/pages/app/controllers/admin/page_dialogs_controller.rb +48 -0
- data/vendor/plugins/pages/app/controllers/admin/page_parts_controller.rb +35 -0
- data/vendor/plugins/pages/app/controllers/admin/pages_controller.rb +12 -0
- data/vendor/plugins/pages/app/controllers/pages_controller.rb +20 -0
- data/vendor/plugins/pages/app/helpers/pages_helper.rb +2 -0
- data/vendor/plugins/pages/app/models/page.rb +97 -0
- data/vendor/plugins/pages/app/models/page_part.rb +17 -0
- data/vendor/plugins/pages/app/views/admin/page_dialogs/_page_link.html.erb +6 -0
- data/vendor/plugins/pages/app/views/admin/page_dialogs/link_to.html.erb +253 -0
- data/vendor/plugins/pages/app/views/admin/page_parts/new.html.erb +11 -0
- data/vendor/plugins/pages/app/views/admin/pages/_form.html.erb +179 -0
- data/vendor/plugins/pages/app/views/admin/pages/_list.html.erb +29 -0
- data/vendor/plugins/pages/app/views/admin/pages/_sortable_list.html.erb +4 -0
- data/vendor/plugins/pages/app/views/admin/pages/edit.html.erb +1 -0
- data/vendor/plugins/pages/app/views/admin/pages/index.html.erb +42 -0
- data/vendor/plugins/pages/app/views/admin/pages/new.html.erb +1 -0
- data/vendor/plugins/pages/app/views/pages/home.html.erb +9 -0
- data/vendor/plugins/pages/app/views/pages/show.html.erb +10 -0
- data/vendor/plugins/pages/config/routes.rb +12 -0
- data/vendor/plugins/pages/init.rb +8 -0
- data/vendor/plugins/refinery/app/controllers/admin/base_controller.rb +37 -0
- data/vendor/plugins/refinery/app/controllers/admin/refinery_core_controller.rb +14 -0
- data/vendor/plugins/refinery/app/helpers/application_helper.rb +84 -0
- data/vendor/plugins/refinery/app/views/admin/_head.html.erb +27 -0
- data/vendor/plugins/refinery/app/views/admin/_menu.html.erb +85 -0
- data/vendor/plugins/refinery/app/views/layouts/admin.html.erb +25 -0
- data/vendor/plugins/refinery/app/views/layouts/application.html.erb +32 -0
- data/vendor/plugins/refinery/app/views/shared/_footer.html.erb +3 -0
- data/vendor/plugins/refinery/app/views/shared/_google_analytics.html.erb +12 -0
- data/vendor/plugins/refinery/app/views/shared/_ie6check.html.erb +11 -0
- data/vendor/plugins/refinery/app/views/shared/_menu.html.erb +16 -0
- data/vendor/plugins/refinery/app/views/shared/_menu_branch.html.erb +28 -0
- data/vendor/plugins/refinery/app/views/shared/_message.html.erb +10 -0
- data/vendor/plugins/refinery/app/views/shared/_submenu.html.erb +4 -0
- data/vendor/plugins/refinery/app/views/shared/_submenu_branch.html.erb +10 -0
- data/vendor/plugins/refinery/app/views/shared/admin/_make_sortable.html.erb +71 -0
- data/vendor/plugins/refinery/app/views/shared/admin/_search.html.erb +5 -0
- data/vendor/plugins/refinery/app/views/shared/admin/_sortable_list.html.erb +10 -0
- data/vendor/plugins/refinery/app/views/welcome.html.erb +13 -0
- data/vendor/plugins/refinery/app/views/wymiframe.html.erb +8 -0
- data/vendor/plugins/refinery/config/routes.rb +10 -0
- data/vendor/plugins/refinery/init.rb +9 -0
- data/vendor/plugins/refinery/lib/crud.rb +134 -0
- data/vendor/plugins/refinery/lib/generators/refinery/README +29 -0
- data/vendor/plugins/refinery/lib/generators/refinery/Rakefile +12 -0
- data/vendor/plugins/refinery/lib/generators/refinery/USAGE +2 -0
- data/vendor/plugins/refinery/lib/generators/refinery/install.rb +2 -0
- data/vendor/plugins/refinery/lib/generators/refinery/refinery_generator.rb +65 -0
- data/vendor/plugins/refinery/lib/generators/refinery/templates/config/routes.rb +7 -0
- data/vendor/plugins/refinery/lib/generators/refinery/templates/controller.rb +5 -0
- data/vendor/plugins/refinery/lib/generators/refinery/templates/init.rb +7 -0
- data/vendor/plugins/refinery/lib/generators/refinery/templates/migration.rb +36 -0
- data/vendor/plugins/refinery/lib/generators/refinery/templates/model.rb +8 -0
- data/vendor/plugins/refinery/lib/generators/refinery/templates/public_controller.rb +20 -0
- data/vendor/plugins/refinery/lib/generators/refinery/templates/views/admin/_form.html.erb +18 -0
- data/vendor/plugins/refinery/lib/generators/refinery/templates/views/admin/_singular_name.html.erb +15 -0
- data/vendor/plugins/refinery/lib/generators/refinery/templates/views/admin/_sortable_list.html.erb +2 -0
- data/vendor/plugins/refinery/lib/generators/refinery/templates/views/admin/edit.html.erb +1 -0
- data/vendor/plugins/refinery/lib/generators/refinery/templates/views/admin/index.html.erb +45 -0
- data/vendor/plugins/refinery/lib/generators/refinery/templates/views/admin/new.html.erb +1 -0
- data/vendor/plugins/refinery/lib/generators/refinery/templates/views/index.html.erb +15 -0
- data/vendor/plugins/refinery/lib/generators/refinery/templates/views/show.html.erb +23 -0
- data/vendor/plugins/refinery/lib/refinery.rb +15 -0
- data/vendor/plugins/refinery/lib/refinery/activity.rb +16 -0
- data/vendor/plugins/refinery/lib/refinery/application_controller.rb +53 -0
- data/vendor/plugins/refinery/lib/refinery/form_helpers.rb +28 -0
- data/vendor/plugins/refinery/lib/refinery/initializer.rb +28 -0
- data/vendor/plugins/refinery/lib/refinery/link_renderer.rb +45 -0
- data/vendor/plugins/refinery/lib/refinery/plugin.rb +47 -0
- data/vendor/plugins/refinery/lib/refinery/plugins.rb +53 -0
- data/vendor/plugins/refinery/lib/tasks/refinery.rake +28 -0
- data/vendor/plugins/refinery_dialogs/app/controllers/admin/dialogs_controller.rb +24 -0
- data/vendor/plugins/refinery_dialogs/app/views/admin/dialogs/show.html.erb +20 -0
- data/vendor/plugins/refinery_dialogs/app/views/layouts/admin_dialog.html.erb +31 -0
- data/vendor/plugins/refinery_dialogs/config/routes.rb +5 -0
- data/vendor/plugins/refinery_dialogs/init.rb +8 -0
- data/vendor/plugins/refinery_settings/app/controllers/admin/refinery_settings_controller.rb +5 -0
- data/vendor/plugins/refinery_settings/app/models/refinery_setting.rb +62 -0
- data/vendor/plugins/refinery_settings/app/views/admin/refinery_settings/_form.html.erb +21 -0
- data/vendor/plugins/refinery_settings/app/views/admin/refinery_settings/_make_sortable.html.erb +7 -0
- data/vendor/plugins/refinery_settings/app/views/admin/refinery_settings/_refinery_setting.html.erb +13 -0
- data/vendor/plugins/refinery_settings/app/views/admin/refinery_settings/edit.html.erb +4 -0
- data/vendor/plugins/refinery_settings/app/views/admin/refinery_settings/index.html.erb +33 -0
- data/vendor/plugins/refinery_settings/app/views/admin/refinery_settings/new.html.erb +1 -0
- data/vendor/plugins/refinery_settings/config/routes.rb +5 -0
- data/vendor/plugins/refinery_settings/init.rb +9 -0
- data/vendor/plugins/resources/app/controllers/admin/resources_controller.rb +25 -0
- data/vendor/plugins/resources/app/models/resource.rb +36 -0
- data/vendor/plugins/resources/app/views/admin/resources/_form.html.erb +18 -0
- data/vendor/plugins/resources/app/views/admin/resources/_resource.html.erb +16 -0
- data/vendor/plugins/resources/app/views/admin/resources/edit.html.erb +1 -0
- data/vendor/plugins/resources/app/views/admin/resources/index.html.erb +33 -0
- data/vendor/plugins/resources/app/views/admin/resources/new.html.erb +1 -0
- data/vendor/plugins/resources/config/routes.rb +7 -0
- data/vendor/plugins/resources/init.rb +7 -0
- metadata +567 -0
@@ -0,0 +1,31 @@
|
|
1
|
+
# Content generated using the random article feature on Wikipedia, http://en.wikipedia.org/wiki/Special:Random
|
2
|
+
# Wikipedia content may be redistributed under the GNU Free Documentation License; http://en.wikipedia.org/wiki/Wikipedia:Text_of_the_GNU_Free_Documentation_License
|
3
|
+
wikipedia_article_1:
|
4
|
+
id: 1
|
5
|
+
title: Body Count (video game)
|
6
|
+
body: Body Count is a 1994 First-person shooter for the Sega Mega Drive. It is one of the few games that make use of the Menacer light gun and the Mega Mouse. \n In the U.S. the game was released on the Sega Channel.
|
7
|
+
|
8
|
+
wikipedia_article_2:
|
9
|
+
id: 2
|
10
|
+
title: Julien Ellis
|
11
|
+
body: Julien Ellis is a ice hockey goalie, born in Sorel, Quebec on January 27, 1986. He is currently 6'0" and weighs approximately 177 pounds. He wears number 34 and catches left. \n Julien played his entire junior hockey career in the QMJHL with the Shawinigan Cataractes. He was there from 2002 through the 2006 season, and played a total of 173 regular season games for them. During his time there, he recorded eight shutouts, as well as a career high .921 save percentage and 2.41 goals against average. \n Julien was chosen in round six of the 2004 NHL Entry Draft by the Vancouver Canucks, making him 189th overall pick and the 5th pick for Vancouver. \n His 2006-07 season was spent with the Victoria Salmon Kings of the ECHL, where he played 37 games and made 1,212 saves. Julien was called up the the Manitoba Moose of the AHL several times, where he played eight games.
|
12
|
+
|
13
|
+
wikipedia_article_3:
|
14
|
+
id: 3
|
15
|
+
title: Tuen Mun River
|
16
|
+
body: The Tuen Mun River is a river in Tuen Mun, New Territories, Hong Kong. It has many tributaries, with major ones coming from Lam Tei, Kau Keng Shan, Hung Shui Hang and Nai Wai. It flows south, splitting Tuen Mun into a west side and an east side. It eventually feeds into the Tuen Mun Typhoon Shelter, which is part of Castle Peak Bay.
|
17
|
+
|
18
|
+
wikipedia_article_4:
|
19
|
+
id: 4
|
20
|
+
title: So Happily Unsatisfied
|
21
|
+
body: So Happily Unsatisfied is an album that was recorded by the band Nine Days. It was intended to be the follow-up to their successful major-label debut, The Madding Crowd from 2000. The release date of the album was repeatedly delayed by Sony until the band was ultimately dropped. In the interim, the album had leaked onto the internet. The band has also put the whole album on their official website for the public to download.
|
22
|
+
|
23
|
+
wikipedia_article_5:
|
24
|
+
id: 5
|
25
|
+
title: SS Cornhusker State (T-ACS-6)
|
26
|
+
body: SS Cornhusker State (T-ACS-6) is a crane ship in ready reserve for the United States Navy. She is stationed at Cheatham Annex in Williamsburg, Virginia and is in ready reserve under the Military Sealift Command. The ship was named for the state of Nebraska, which is also known as the Cornhusker State. \n The ship was built by the Bath Iron Works. Her keel was laid on 27 November 1967, launched on 2 November 1968, and delivered 20 June 1969 as CV Stag Hound (MA 207). \n Stag Hound was acquired by the US Navy from the Maritime Administration in 1986 and was converted throughout 1987. She re-entered service as Cornhusker State on 12 March 1988, and has been in ready reserve since 1993.
|
27
|
+
|
28
|
+
article_similar_to_5:
|
29
|
+
id: 6
|
30
|
+
title: An article I made up by myself!
|
31
|
+
body: crane crane big ship foo
|
@@ -0,0 +1,26 @@
|
|
1
|
+
acts_as_tree
|
2
|
+
============
|
3
|
+
|
4
|
+
Specify this +acts_as+ extension if you want to model a tree structure by providing a parent association and a children
|
5
|
+
association. This requires that you have a foreign key column, which by default is called +parent_id+.
|
6
|
+
|
7
|
+
class Category < ActiveRecord::Base
|
8
|
+
acts_as_tree :order => "name"
|
9
|
+
end
|
10
|
+
|
11
|
+
Example:
|
12
|
+
root
|
13
|
+
\_ child1
|
14
|
+
\_ subchild1
|
15
|
+
\_ subchild2
|
16
|
+
|
17
|
+
root = Category.create("name" => "root")
|
18
|
+
child1 = root.children.create("name" => "child1")
|
19
|
+
subchild1 = child1.children.create("name" => "subchild1")
|
20
|
+
|
21
|
+
root.parent # => nil
|
22
|
+
child1.parent # => root
|
23
|
+
root.children # => [child1]
|
24
|
+
root.children.first.children.first # => subchild1
|
25
|
+
|
26
|
+
Copyright (c) 2007 David Heinemeier Hansson, released under the MIT license
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rake/testtask'
|
3
|
+
require 'rake/rdoctask'
|
4
|
+
|
5
|
+
desc 'Default: run unit tests.'
|
6
|
+
task :default => :test
|
7
|
+
|
8
|
+
desc 'Test acts_as_tree plugin.'
|
9
|
+
Rake::TestTask.new(:test) do |t|
|
10
|
+
t.libs << 'lib'
|
11
|
+
t.pattern = 'test/**/*_test.rb'
|
12
|
+
t.verbose = true
|
13
|
+
end
|
14
|
+
|
15
|
+
desc 'Generate documentation for acts_as_tree plugin.'
|
16
|
+
Rake::RDocTask.new(:rdoc) do |rdoc|
|
17
|
+
rdoc.rdoc_dir = 'rdoc'
|
18
|
+
rdoc.title = 'acts_as_tree'
|
19
|
+
rdoc.options << '--line-numbers' << '--inline-source'
|
20
|
+
rdoc.rdoc_files.include('README')
|
21
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
22
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
ActiveRecord::Base.send :include, ActiveRecord::Acts::Tree
|
@@ -0,0 +1,141 @@
|
|
1
|
+
module ActiveRecord
|
2
|
+
module Acts
|
3
|
+
module Tree
|
4
|
+
def self.included(base)
|
5
|
+
base.extend(ClassMethods)
|
6
|
+
end
|
7
|
+
|
8
|
+
# Specify this +acts_as+ extension if you want to model a tree structure by providing a parent association and a children
|
9
|
+
# association. This requires that you have a foreign key column, which by default is called +parent_id+.
|
10
|
+
#
|
11
|
+
# class Category < ActiveRecord::Base
|
12
|
+
# acts_as_tree :order => "name"
|
13
|
+
# end
|
14
|
+
#
|
15
|
+
# Example:
|
16
|
+
# root
|
17
|
+
# \_ child1
|
18
|
+
# \_ subchild1
|
19
|
+
# \_ subchild2
|
20
|
+
#
|
21
|
+
# root = Category.create("name" => "root")
|
22
|
+
# child1 = root.children.create("name" => "child1")
|
23
|
+
# subchild1 = child1.children.create("name" => "subchild1")
|
24
|
+
#
|
25
|
+
# root.parent # => nil
|
26
|
+
# child1.parent # => root
|
27
|
+
# root.children # => [child1]
|
28
|
+
# root.children.first.children.first # => subchild1
|
29
|
+
#
|
30
|
+
# In addition to the parent and children associations, the following instance methods are added to the class
|
31
|
+
# after calling <tt>acts_as_tree</tt>:
|
32
|
+
# * <tt>siblings</tt> - Returns all the children of the parent, excluding the current node (<tt>[subchild2]</tt> when called on <tt>subchild1</tt>)
|
33
|
+
# * <tt>self_and_siblings</tt> - Returns all the children of the parent, including the current node (<tt>[subchild1, subchild2]</tt> when called on <tt>subchild1</tt>)
|
34
|
+
# * <tt>ancestors</tt> - Returns all the ancestors of the current node (<tt>[child1, root]</tt> when called on <tt>subchild2</tt>)
|
35
|
+
# * <tt>root</tt> - Returns the root of the current node (<tt>root</tt> when called on <tt>subchild2</tt>)
|
36
|
+
# * <tt>descendants</tt> - Returns a flat list of the descendants of the current node (<tt>[child1, subchild1, subchild2]</tt> when called on <tt>root</tt>)
|
37
|
+
module ClassMethods
|
38
|
+
# Configuration options are:
|
39
|
+
#
|
40
|
+
# * <tt>foreign_key</tt> - specifies the column name to use for tracking of the tree (default: +parent_id+)
|
41
|
+
# * <tt>order</tt> - makes it possible to sort the children according to this SQL snippet.
|
42
|
+
# * <tt>counter_cache</tt> - keeps a count in a +children_count+ column if set to +true+ (default: +false+).
|
43
|
+
# * <tt>include</tt> - ability to add eager loading to tree finds by specifying associations to include. 'children' association eager loaded by default. Disable by supplying :include => nil or :include => []
|
44
|
+
def acts_as_tree(options = {})
|
45
|
+
configuration = { :foreign_key => "parent_id", :order => nil, :counter_cache => nil, :include => [:children] }
|
46
|
+
configuration.update(options) if options.is_a?(Hash) # to avoid something nasty happening check for Hash here.
|
47
|
+
configuration.update({:include => []}) if configuration[:include].nil? # if calling class really doesn't want to eager load its children.
|
48
|
+
|
49
|
+
belongs_to :parent, :class_name => name, :foreign_key => configuration[:foreign_key], :counter_cache => configuration[:counter_cache], :include => configuration[:include]
|
50
|
+
has_many :children, :class_name => name, :foreign_key => configuration[:foreign_key], :order => configuration[:order], :dependent => :delete_all, :include => configuration[:include]
|
51
|
+
|
52
|
+
class_eval <<-EOV
|
53
|
+
include ActiveRecord::Acts::Tree::InstanceMethods
|
54
|
+
|
55
|
+
def self.roots
|
56
|
+
find :all, :conditions => "#{configuration[:foreign_key]} IS NULL", :order => #{configuration[:order].nil? ? "nil" : %Q{"#{configuration[:order]}"}}, :include => %W{#{configuration[:include].join(' ')}}
|
57
|
+
end
|
58
|
+
|
59
|
+
def self.root
|
60
|
+
find :first, :conditions => "#{configuration[:foreign_key]} IS NULL", :order => #{configuration[:order].nil? ? "nil" : %Q{"#{configuration[:order]}"}}, :include => %W{#{configuration[:include].join(' ')}}
|
61
|
+
end
|
62
|
+
|
63
|
+
def self.childless
|
64
|
+
nodes = []
|
65
|
+
|
66
|
+
find(:all, :include => configuration[:include]).each do |node|
|
67
|
+
nodes << node if node.children.empty?
|
68
|
+
end
|
69
|
+
|
70
|
+
nodes
|
71
|
+
end
|
72
|
+
EOV
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
module InstanceMethods
|
77
|
+
# Returns list of ancestors, starting from parent until root.
|
78
|
+
#
|
79
|
+
# subchild1.ancestors # => [child1, root]
|
80
|
+
def ancestors
|
81
|
+
node, nodes = self, []
|
82
|
+
nodes << node = node.parent until node.parent.nil? and return nodes
|
83
|
+
end
|
84
|
+
|
85
|
+
# Returns the root node of the tree.
|
86
|
+
def root
|
87
|
+
node = self
|
88
|
+
node = node.parent until node.parent.nil? and return node
|
89
|
+
end
|
90
|
+
|
91
|
+
# Returns all siblings of the current node.
|
92
|
+
#
|
93
|
+
# subchild1.siblings # => [subchild2]
|
94
|
+
def siblings
|
95
|
+
self_and_siblings - [self]
|
96
|
+
end
|
97
|
+
|
98
|
+
# Returns all siblings and a reference to the current node.
|
99
|
+
#
|
100
|
+
# subchild1.self_and_siblings # => [subchild1, subchild2]
|
101
|
+
def self_and_siblings
|
102
|
+
parent ? parent.children : self.class.roots
|
103
|
+
end
|
104
|
+
|
105
|
+
# Returns a flat list of the descendants of the current node.
|
106
|
+
#
|
107
|
+
# root.descendants # => [child1, subchild1, subchild2]
|
108
|
+
def descendants(node=self)
|
109
|
+
nodes = []
|
110
|
+
nodes << node unless node == self
|
111
|
+
|
112
|
+
node.children.each do |child|
|
113
|
+
nodes += descendants(child)
|
114
|
+
end
|
115
|
+
|
116
|
+
nodes.compact
|
117
|
+
end
|
118
|
+
|
119
|
+
def chain
|
120
|
+
[self.ancestors, self, self.descendants].flatten
|
121
|
+
end
|
122
|
+
|
123
|
+
# Returns a flat list of all of the children under the current node
|
124
|
+
# which don't have any children belonging to them (childless)
|
125
|
+
#
|
126
|
+
# node.childess # => [subchild1, subchild2]
|
127
|
+
def childless
|
128
|
+
nodes = []
|
129
|
+
|
130
|
+
unless self.children.empty?
|
131
|
+
nodes << self.children.collect { |child| child.childless }
|
132
|
+
else
|
133
|
+
nodes << self
|
134
|
+
end
|
135
|
+
|
136
|
+
nodes.flatten.compact
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
File without changes
|
@@ -0,0 +1,219 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'active_record'
|
5
|
+
|
6
|
+
$:.unshift File.dirname(__FILE__) + '/../lib'
|
7
|
+
require File.dirname(__FILE__) + '/../init'
|
8
|
+
|
9
|
+
class Test::Unit::TestCase
|
10
|
+
def assert_queries(num = 1)
|
11
|
+
$query_count = 0
|
12
|
+
yield
|
13
|
+
ensure
|
14
|
+
assert_equal num, $query_count, "#{$query_count} instead of #{num} queries were executed."
|
15
|
+
end
|
16
|
+
|
17
|
+
def assert_no_queries(&block)
|
18
|
+
assert_queries(0, &block)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :dbfile => ":memory:")
|
23
|
+
|
24
|
+
# AR keeps printing annoying schema statements
|
25
|
+
$stdout = StringIO.new
|
26
|
+
|
27
|
+
def setup_db
|
28
|
+
ActiveRecord::Base.logger
|
29
|
+
ActiveRecord::Schema.define(:version => 1) do
|
30
|
+
create_table :mixins do |t|
|
31
|
+
t.column :type, :string
|
32
|
+
t.column :parent_id, :integer
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def teardown_db
|
38
|
+
ActiveRecord::Base.connection.tables.each do |table|
|
39
|
+
ActiveRecord::Base.connection.drop_table(table)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
class Mixin < ActiveRecord::Base
|
44
|
+
end
|
45
|
+
|
46
|
+
class TreeMixin < Mixin
|
47
|
+
acts_as_tree :foreign_key => "parent_id", :order => "id"
|
48
|
+
end
|
49
|
+
|
50
|
+
class TreeMixinWithoutOrder < Mixin
|
51
|
+
acts_as_tree :foreign_key => "parent_id"
|
52
|
+
end
|
53
|
+
|
54
|
+
class RecursivelyCascadedTreeMixin < Mixin
|
55
|
+
acts_as_tree :foreign_key => "parent_id"
|
56
|
+
has_one :first_child, :class_name => 'RecursivelyCascadedTreeMixin', :foreign_key => :parent_id
|
57
|
+
end
|
58
|
+
|
59
|
+
class TreeTest < Test::Unit::TestCase
|
60
|
+
|
61
|
+
def setup
|
62
|
+
setup_db
|
63
|
+
@root1 = TreeMixin.create!
|
64
|
+
@root_child1 = TreeMixin.create! :parent_id => @root1.id
|
65
|
+
@child1_child = TreeMixin.create! :parent_id => @root_child1.id
|
66
|
+
@root_child2 = TreeMixin.create! :parent_id => @root1.id
|
67
|
+
@root2 = TreeMixin.create!
|
68
|
+
@root3 = TreeMixin.create!
|
69
|
+
end
|
70
|
+
|
71
|
+
def teardown
|
72
|
+
teardown_db
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_children
|
76
|
+
assert_equal @root1.children, [@root_child1, @root_child2]
|
77
|
+
assert_equal @root_child1.children, [@child1_child]
|
78
|
+
assert_equal @child1_child.children, []
|
79
|
+
assert_equal @root_child2.children, []
|
80
|
+
end
|
81
|
+
|
82
|
+
def test_parent
|
83
|
+
assert_equal @root_child1.parent, @root1
|
84
|
+
assert_equal @root_child1.parent, @root_child2.parent
|
85
|
+
assert_nil @root1.parent
|
86
|
+
end
|
87
|
+
|
88
|
+
def test_delete
|
89
|
+
assert_equal 6, TreeMixin.count
|
90
|
+
@root1.destroy
|
91
|
+
assert_equal 2, TreeMixin.count
|
92
|
+
@root2.destroy
|
93
|
+
@root3.destroy
|
94
|
+
assert_equal 0, TreeMixin.count
|
95
|
+
end
|
96
|
+
|
97
|
+
def test_insert
|
98
|
+
@extra = @root1.children.create
|
99
|
+
|
100
|
+
assert @extra
|
101
|
+
|
102
|
+
assert_equal @extra.parent, @root1
|
103
|
+
|
104
|
+
assert_equal 3, @root1.children.size
|
105
|
+
assert @root1.children.include?(@extra)
|
106
|
+
assert @root1.children.include?(@root_child1)
|
107
|
+
assert @root1.children.include?(@root_child2)
|
108
|
+
end
|
109
|
+
|
110
|
+
def test_ancestors
|
111
|
+
assert_equal [], @root1.ancestors
|
112
|
+
assert_equal [@root1], @root_child1.ancestors
|
113
|
+
assert_equal [@root_child1, @root1], @child1_child.ancestors
|
114
|
+
assert_equal [@root1], @root_child2.ancestors
|
115
|
+
assert_equal [], @root2.ancestors
|
116
|
+
assert_equal [], @root3.ancestors
|
117
|
+
end
|
118
|
+
|
119
|
+
def test_root
|
120
|
+
assert_equal @root1, TreeMixin.root
|
121
|
+
assert_equal @root1, @root1.root
|
122
|
+
assert_equal @root1, @root_child1.root
|
123
|
+
assert_equal @root1, @child1_child.root
|
124
|
+
assert_equal @root1, @root_child2.root
|
125
|
+
assert_equal @root2, @root2.root
|
126
|
+
assert_equal @root3, @root3.root
|
127
|
+
end
|
128
|
+
|
129
|
+
def test_roots
|
130
|
+
assert_equal [@root1, @root2, @root3], TreeMixin.roots
|
131
|
+
end
|
132
|
+
|
133
|
+
def test_siblings
|
134
|
+
assert_equal [@root2, @root3], @root1.siblings
|
135
|
+
assert_equal [@root_child2], @root_child1.siblings
|
136
|
+
assert_equal [], @child1_child.siblings
|
137
|
+
assert_equal [@root_child1], @root_child2.siblings
|
138
|
+
assert_equal [@root1, @root3], @root2.siblings
|
139
|
+
assert_equal [@root1, @root2], @root3.siblings
|
140
|
+
end
|
141
|
+
|
142
|
+
def test_self_and_siblings
|
143
|
+
assert_equal [@root1, @root2, @root3], @root1.self_and_siblings
|
144
|
+
assert_equal [@root_child1, @root_child2], @root_child1.self_and_siblings
|
145
|
+
assert_equal [@child1_child], @child1_child.self_and_siblings
|
146
|
+
assert_equal [@root_child1, @root_child2], @root_child2.self_and_siblings
|
147
|
+
assert_equal [@root1, @root2, @root3], @root2.self_and_siblings
|
148
|
+
assert_equal [@root1, @root2, @root3], @root3.self_and_siblings
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
class TreeTestWithEagerLoading < Test::Unit::TestCase
|
153
|
+
|
154
|
+
def setup
|
155
|
+
teardown_db
|
156
|
+
setup_db
|
157
|
+
@root1 = TreeMixin.create!
|
158
|
+
@root_child1 = TreeMixin.create! :parent_id => @root1.id
|
159
|
+
@child1_child = TreeMixin.create! :parent_id => @root_child1.id
|
160
|
+
@root_child2 = TreeMixin.create! :parent_id => @root1.id
|
161
|
+
@root2 = TreeMixin.create!
|
162
|
+
@root3 = TreeMixin.create!
|
163
|
+
|
164
|
+
@rc1 = RecursivelyCascadedTreeMixin.create!
|
165
|
+
@rc2 = RecursivelyCascadedTreeMixin.create! :parent_id => @rc1.id
|
166
|
+
@rc3 = RecursivelyCascadedTreeMixin.create! :parent_id => @rc2.id
|
167
|
+
@rc4 = RecursivelyCascadedTreeMixin.create! :parent_id => @rc3.id
|
168
|
+
end
|
169
|
+
|
170
|
+
def teardown
|
171
|
+
teardown_db
|
172
|
+
end
|
173
|
+
|
174
|
+
def test_eager_association_loading
|
175
|
+
roots = TreeMixin.find(:all, :include => :children, :conditions => "mixins.parent_id IS NULL", :order => "mixins.id")
|
176
|
+
assert_equal [@root1, @root2, @root3], roots
|
177
|
+
assert_no_queries do
|
178
|
+
assert_equal 2, roots[0].children.size
|
179
|
+
assert_equal 0, roots[1].children.size
|
180
|
+
assert_equal 0, roots[2].children.size
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
184
|
+
def test_eager_association_loading_with_recursive_cascading_three_levels_has_many
|
185
|
+
root_node = RecursivelyCascadedTreeMixin.find(:first, :include => { :children => { :children => :children } }, :order => 'mixins.id')
|
186
|
+
assert_equal @rc4, assert_no_queries { root_node.children.first.children.first.children.first }
|
187
|
+
end
|
188
|
+
|
189
|
+
def test_eager_association_loading_with_recursive_cascading_three_levels_has_one
|
190
|
+
root_node = RecursivelyCascadedTreeMixin.find(:first, :include => { :first_child => { :first_child => :first_child } }, :order => 'mixins.id')
|
191
|
+
assert_equal @rc4, assert_no_queries { root_node.first_child.first_child.first_child }
|
192
|
+
end
|
193
|
+
|
194
|
+
def test_eager_association_loading_with_recursive_cascading_three_levels_belongs_to
|
195
|
+
leaf_node = RecursivelyCascadedTreeMixin.find(:first, :include => { :parent => { :parent => :parent } }, :order => 'mixins.id DESC')
|
196
|
+
assert_equal @rc1, assert_no_queries { leaf_node.parent.parent.parent }
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
200
|
+
class TreeTestWithoutOrder < Test::Unit::TestCase
|
201
|
+
|
202
|
+
def setup
|
203
|
+
setup_db
|
204
|
+
@root1 = TreeMixinWithoutOrder.create!
|
205
|
+
@root2 = TreeMixinWithoutOrder.create!
|
206
|
+
end
|
207
|
+
|
208
|
+
def teardown
|
209
|
+
teardown_db
|
210
|
+
end
|
211
|
+
|
212
|
+
def test_root
|
213
|
+
assert [@root1, @root2].include?(TreeMixinWithoutOrder.root)
|
214
|
+
end
|
215
|
+
|
216
|
+
def test_roots
|
217
|
+
assert_equal [], [@root1, @root2] - TreeMixinWithoutOrder.roots
|
218
|
+
end
|
219
|
+
end
|