typo 4.0.3 → 4.1
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/CHANGES-4.1 +83 -0
- data/MAINTAINERS +3 -7
- data/README +1 -1
- data/{components/sidebars/README → README.SIDEBARS} +3 -0
- data/Rakefile +1 -1
- data/TODO-4.1 +16 -0
- data/app/apis/blogger_service.rb +3 -3
- data/app/apis/meta_weblog_service.rb +4 -21
- data/app/apis/movable_type_service.rb +5 -5
- data/app/controllers/accounts_controller.rb +6 -3
- data/app/controllers/admin/blacklist_controller.rb +1 -1
- data/app/controllers/admin/cache_controller.rb +3 -7
- data/app/controllers/admin/content_controller.rb +46 -24
- data/app/controllers/admin/feedback_controller.rb +3 -3
- data/app/controllers/admin/general_controller.rb +3 -3
- data/app/controllers/admin/pages_controller.rb +7 -3
- data/app/controllers/admin/sidebar_controller.rb +19 -26
- data/app/controllers/admin/textfilters_controller.rb +3 -1
- data/app/controllers/admin/themes_controller.rb +1 -1
- data/app/controllers/admin/users_controller.rb +1 -1
- data/app/controllers/application.rb +25 -27
- data/app/controllers/articles_controller.rb +14 -18
- data/app/controllers/content_controller.rb +7 -7
- data/app/controllers/live_controller.rb +1 -1
- data/app/controllers/redirect_controller.rb +2 -0
- data/app/controllers/textfilter_controller.rb +0 -3
- data/app/controllers/theme_controller.rb +10 -5
- data/app/controllers/xml_controller.rb +7 -9
- data/app/helpers/admin/base_helper.rb +10 -5
- data/app/helpers/admin/content_helper.rb +6 -0
- data/app/helpers/admin/feedback_helper.rb +1 -1
- data/app/helpers/admin/pages_helper.rb +5 -0
- data/app/helpers/application_helper.rb +84 -51
- data/app/helpers/articles_helper.rb +29 -29
- data/app/helpers/mail_helper.rb +3 -2
- data/app/helpers/sidebar_helper.rb +25 -16
- data/app/helpers/xml_helper.rb +0 -16
- data/app/models/article.rb +90 -32
- data/app/models/blog.rb +82 -74
- data/app/models/blog_sweeper.rb +33 -8
- data/app/models/categorization.rb +4 -0
- data/app/models/category.rb +21 -4
- data/app/models/comment.rb +23 -21
- data/app/models/content.rb +106 -64
- data/app/models/content_state/base.rb +12 -3
- data/app/models/content_state/draft.rb +2 -3
- data/app/models/content_state/factory.rb +1 -1
- data/app/models/content_state/ham.rb +0 -1
- data/app/models/content_state/just_marked_as_ham.rb +8 -1
- data/app/models/content_state/just_marked_as_spam.rb +4 -1
- data/app/models/content_state/just_presumed_ham.rb +14 -14
- data/app/models/content_state/just_published.rb +11 -18
- data/app/models/content_state/just_withdrawn.rb +11 -0
- data/app/models/content_state/new.rb +0 -1
- data/app/models/content_state/presumed_ham.rb +9 -3
- data/app/models/content_state/presumed_spam.rb +4 -1
- data/app/models/content_state/publication_pending.rb +4 -4
- data/app/models/content_state/published.rb +7 -8
- data/app/models/content_state/spam.rb +0 -1
- data/app/models/content_state/unclassified.rb +12 -3
- data/app/models/content_state/withdrawn.rb +5 -6
- data/app/models/email_notifier.rb +1 -1
- data/app/models/feedback.rb +31 -11
- data/app/models/notification.rb +4 -0
- data/app/models/notification_mailer.rb +8 -8
- data/app/models/page.rb +19 -5
- data/app/models/ping.rb +27 -40
- data/app/models/sidebar.rb +241 -11
- data/app/models/tag.rb +12 -1
- data/app/models/text_filter.rb +33 -39
- data/app/models/theme.rb +9 -0
- data/app/models/trackback.rb +1 -5
- data/app/models/user.rb +7 -5
- data/app/views/accounts/login.rhtml +19 -15
- data/app/views/accounts/logout.rhtml +4 -4
- data/app/views/accounts/signup.rhtml +9 -9
- data/app/views/admin/base/_recent_comments.rhtml +2 -2
- data/app/views/admin/base/_recent_trackbacks.rhtml +2 -2
- data/app/views/admin/blacklist/_blacklist_patterns.rhtml +4 -4
- data/app/views/admin/blacklist/_form.rhtml +3 -3
- data/app/views/admin/blacklist/_quick_post.rhtml +7 -6
- data/app/views/admin/blacklist/destroy.rhtml +5 -5
- data/app/views/admin/blacklist/edit.rhtml +7 -7
- data/app/views/admin/blacklist/list.rhtml +2 -2
- data/app/views/admin/cache/list.rhtml +2 -2
- data/app/views/admin/categories/_categories.rhtml +3 -3
- data/app/views/admin/categories/_form.rhtml +1 -1
- data/app/views/admin/categories/_quick_post.rhtml +5 -5
- data/app/views/admin/categories/destroy.rhtml +7 -7
- data/app/views/admin/categories/edit.rhtml +6 -6
- data/app/views/admin/categories/list.rhtml +7 -4
- data/app/views/admin/categories/reorder.rhtml +1 -1
- data/app/views/admin/categories/show.rhtml +6 -6
- data/app/views/admin/comments/_form.rhtml +4 -4
- data/app/views/admin/comments/comments.rhtml +1 -1
- data/app/views/admin/comments/destroy.rhtml +6 -6
- data/app/views/admin/comments/edit.rhtml +8 -8
- data/app/views/admin/comments/list.rhtml +11 -11
- data/app/views/admin/comments/new.rhtml +7 -7
- data/app/views/admin/comments/show.rhtml +7 -7
- data/app/views/admin/content/_articles.rhtml +12 -10
- data/app/views/admin/content/_attachment.rhtml +15 -17
- data/app/views/admin/content/_form.rhtml +68 -45
- data/app/views/admin/content/_pages.rhtml +2 -2
- data/app/views/admin/content/_quick_post.rhtml +6 -6
- data/app/views/admin/content/_show_categories.rhtml +2 -2
- data/app/views/admin/content/_show_resources.rhtml +2 -2
- data/app/views/admin/content/destroy.rhtml +8 -8
- data/app/views/admin/content/edit.rhtml +8 -26
- data/app/views/admin/content/list.rhtml +4 -4
- data/app/views/admin/content/new.rhtml +5 -25
- data/app/views/admin/content/preview.rhtml +9 -2
- data/app/views/admin/content/show.rhtml +10 -9
- data/app/views/admin/feedback/_item.rhtml +2 -2
- data/app/views/admin/feedback/list.rhtml +21 -20
- data/app/views/admin/general/index.rhtml +261 -239
- data/app/views/admin/general/update_database.rhtml +15 -15
- data/app/views/admin/pages/_form.rhtml +32 -15
- data/app/views/admin/pages/_pages.rhtml +9 -8
- data/app/views/admin/pages/_quick_post.rhtml +2 -2
- data/app/views/admin/pages/destroy.rhtml +7 -7
- data/app/views/admin/pages/edit.rhtml +7 -26
- data/app/views/admin/pages/list.rhtml +4 -3
- data/app/views/admin/pages/new.rhtml +5 -22
- data/app/views/admin/pages/preview.rhtml +1 -1
- data/app/views/admin/pages/show.rhtml +5 -5
- data/app/views/admin/resources/_itunes_category_edit.rhtml +2 -2
- data/app/views/admin/resources/_metadata_add.rhtml +13 -13
- data/app/views/admin/resources/_metadata_edit.rhtml +14 -14
- data/app/views/admin/resources/_mime_edit.rhtml +5 -5
- data/app/views/admin/resources/_pages.rhtml +2 -2
- data/app/views/admin/resources/_resources.rhtml +8 -8
- data/app/views/admin/resources/destroy.rhtml +7 -7
- data/app/views/admin/resources/list.rhtml +6 -3
- data/app/views/admin/resources/new.rhtml +7 -3
- data/app/views/admin/shared/_edit.rhtml +17 -0
- data/app/views/admin/sidebar/_active.rhtml +5 -5
- data/app/views/admin/sidebar/_availables.rhtml +1 -1
- data/app/views/admin/sidebar/_publish.rhtml +1 -1
- data/app/views/admin/sidebar/_target.rhtml +1 -1
- data/app/views/admin/sidebar/index.rhtml +9 -5
- data/app/views/admin/textfilters/_form.rhtml +13 -5
- data/app/views/admin/textfilters/_macros.rhtml +4 -4
- data/app/views/admin/textfilters/_textfilters.rhtml +6 -6
- data/app/views/admin/textfilters/destroy.rhtml +5 -8
- data/app/views/admin/textfilters/edit.rhtml +2 -5
- data/app/views/admin/textfilters/list.rhtml +4 -2
- data/app/views/admin/textfilters/macro_help.rhtml +1 -1
- data/app/views/admin/textfilters/new.rhtml +9 -7
- data/app/views/admin/textfilters/show.rhtml +5 -5
- data/app/views/admin/textfilters/show_help.rhtml +3 -3
- data/app/views/admin/themes/index.rhtml +8 -2
- data/app/views/admin/trackbacks/_form.rhtml +4 -4
- data/app/views/admin/trackbacks/destroy.rhtml +4 -4
- data/app/views/admin/trackbacks/edit.rhtml +6 -6
- data/app/views/admin/trackbacks/list.rhtml +10 -10
- data/app/views/admin/trackbacks/new.rhtml +6 -6
- data/app/views/admin/trackbacks/show.rhtml +8 -8
- data/app/views/admin/users/_form.rhtml +10 -10
- data/app/views/admin/users/_user.rhtml +6 -6
- data/app/views/admin/users/destroy.rhtml +7 -7
- data/app/views/admin/users/edit.rhtml +9 -5
- data/app/views/admin/users/list.rhtml +2 -2
- data/app/views/admin/users/new.rhtml +9 -7
- data/app/views/admin/users/show.rhtml +10 -10
- data/app/views/articles/_article.rhtml +3 -3
- data/app/views/articles/_comment.rhtml +3 -3
- data/app/views/articles/_comment_box.rhtml +6 -6
- data/app/views/articles/_trackback.rhtml +1 -1
- data/app/views/articles/archives.rhtml +3 -3
- data/app/views/articles/comment_preview.rhtml +2 -2
- data/app/views/articles/groupings.rhtml +1 -1
- data/app/views/articles/index.rhtml +2 -2
- data/app/views/articles/read.rhtml +15 -15
- data/app/views/articles/view_page.rhtml +1 -1
- data/app/views/layouts/administration.rhtml +11 -17
- data/app/views/layouts/minimal.rhtml +13 -0
- data/app/views/live/search.rhtml +1 -1
- data/app/views/notification_mailer/_mail_footer.rhtml +2 -2
- data/app/views/notification_mailer/article.rhtml +1 -1
- data/app/views/notification_mailer/comment.rhtml +4 -4
- data/app/views/settings/done.rhtml +1 -1
- data/app/views/settings/install.rhtml +3 -3
- data/app/views/shared/_search.rhtml +4 -4
- data/app/views/xml/_atom10_item_article.rxml +9 -7
- data/app/views/xml/_atom10_item_comment.rxml +2 -3
- data/app/views/xml/_atom10_item_trackback.rxml +1 -1
- data/app/views/xml/_googlesitemap_item_article.rxml +2 -2
- data/app/views/xml/_googlesitemap_item_category.rxml +1 -1
- data/app/views/xml/_googlesitemap_item_page.rxml +2 -2
- data/app/views/xml/_googlesitemap_item_tag.rxml +2 -2
- data/app/views/xml/_itunes_item_resource.rxml +2 -4
- data/app/views/xml/_rss20_item_article.rxml +4 -10
- data/app/views/xml/_rss20_item_comment.rxml +2 -2
- data/app/views/xml/rsd.rxml +4 -4
- data/bin/typo +0 -1
- data/config/boot.rb +4 -3
- data/config/environment.rb +37 -28
- data/config/environments/test.rb +1 -1
- data/config/routes.rb +6 -5
- data/db/migrate/051_fix_canonical_server_url.rb +17 -0
- data/db/migrate/052_remove_cached_html.rb +11 -0
- data/db/migrate/053_promote_canonical_server_url.rb +22 -0
- data/db/migrate/054_upgrade_sidebar_objects.rb +26 -0
- data/db/migrate/055_link_sidebars_to_blog.rb +17 -0
- data/db/migrate/056_create_notifications.rb +32 -0
- data/db/migrate/057_add_categorization_model.rb +45 -0
- data/db/migrate/058_separate_entries_and_feedback.rb +68 -0
- data/db/migrate/059_cleanup_feedback_table.rb +25 -0
- data/db/migrate/060_cleanup_contents_table.rb +29 -0
- data/db/migrate/061_convert_title_prefix_setting.rb +25 -0
- data/db/schema.mysql.sql +139 -108
- data/db/schema.postgresql.sql +140 -108
- data/db/schema.rb +97 -75
- data/db/schema.sqlite.sql +140 -108
- data/db/schema.sqlserver.sql +144 -109
- data/db/schema_version +1 -1
- data/lang/fr_FR.rb +469 -0
- data/lib/email_notify.rb +4 -4
- data/lib/generators/sidebar/sidebar_generator.rb +15 -6
- data/lib/generators/sidebar/templates/Rakefile +22 -0
- data/lib/generators/sidebar/templates/content.rhtml +10 -0
- data/lib/generators/sidebar/templates/init.rb +4 -0
- data/lib/generators/sidebar/templates/sidebar.rb +16 -0
- data/lib/generators/sidebar/templates/unit_test.rb +8 -0
- data/lib/jabber_notify.rb +8 -7
- data/lib/memory_profiler.rb +60 -0
- data/lib/rails_patch/active_record.rb +0 -27
- data/lib/route_cache.rb +15 -0
- data/lib/sidebars/component_plugin.rb +3 -0
- data/lib/sidebars/consolidated_plugin.rb +26 -0
- data/lib/sidebars/plugin.rb +8 -13
- data/lib/spam_protection.rb +35 -23
- data/lib/tasks/release.rake +7 -7
- data/lib/text_filter_plugin.rb +55 -15
- data/lib/typo_deprecated.rb +19 -0
- data/lib/typo_version.rb +1 -1
- data/public/images/bracket.gif +0 -0
- data/public/images/cancel.png +0 -0
- data/public/images/checked.png +0 -0
- data/public/images/delete.png +0 -0
- data/public/images/edit.png +0 -0
- data/public/images/help.png +0 -0
- data/public/images/show.png +0 -0
- data/public/javascripts/codecollapse.js +8 -0
- data/public/javascripts/controls.js +41 -23
- data/public/javascripts/dragdrop.js +105 -76
- data/public/javascripts/effects.js +293 -163
- data/public/javascripts/prototype.js +900 -391
- data/public/stylesheets/administration.css +390 -318
- data/public/stylesheets/codecollapse.css +3 -0
- data/public/stylesheets/minimal.css +142 -0
- data/public/stylesheets/textmate/dawn.css +209 -0
- data/public/stylesheets/textmate/iplastic.css +142 -0
- data/public/stylesheets/textmate/space_cadet.css +99 -0
- data/public/stylesheets/textmate/textmate.css +48 -0
- data/public/stylesheets/textmate/twilight.css +227 -0
- data/script/process/inspector +3 -0
- data/spec/controllers/accounts_controller_spec.rb +184 -0
- data/spec/controllers/articles_controller_spec.rb +47 -0
- data/spec/fixtures/articles_tags.yml +19 -0
- data/spec/fixtures/blacklist_patterns.yml +10 -0
- data/spec/fixtures/blogs.yml +77 -0
- data/spec/fixtures/categories.yml +35 -0
- data/{test/fixtures/articles_categories.yml → spec/fixtures/categorizations.yml} +0 -0
- data/spec/fixtures/contents.yml +215 -0
- data/spec/fixtures/feedback.yml +159 -0
- data/spec/fixtures/notifications.yml +0 -0
- data/spec/fixtures/page_caches.yml +7 -0
- data/spec/fixtures/redirects.yml +13 -0
- data/spec/fixtures/resources.yml +24 -0
- data/spec/fixtures/sidebars.yml +12 -0
- data/spec/fixtures/tags.yml +13 -0
- data/spec/fixtures/text_filters.yml +42 -0
- data/spec/fixtures/triggers.yml +1 -0
- data/spec/fixtures/users.yml +56 -0
- data/spec/fixtures/whiteboards.yml +13 -0
- data/spec/helpers/admin_base_helper_spec.rb +13 -0
- data/spec/models/amazon_sidebar_spec.rb +40 -0
- data/spec/models/audioscrobbler_spec.rb +134 -0
- data/spec/models/blog_spec.rb +28 -0
- data/spec/models/cache_support_spec.rb +55 -0
- data/spec/models/category_spec.rb +48 -0
- data/spec/models/configuration_spec.rb +108 -0
- data/spec/models/content_state_spec.rb +1010 -0
- data/spec/models/delegate_to_content_state_spec.rb +126 -0
- data/spec/models/delicious_spec.rb +101 -0
- data/spec/models/flickr_spec.rb +128 -0
- data/spec/models/metafragment_spec.rb +65 -0
- data/spec/models/page_cache_spec.rb +35 -0
- data/spec/models/page_spec.rb +88 -0
- data/spec/models/ping_spec.rb +133 -0
- data/spec/models/redirect_spec.rb +17 -0
- data/spec/models/resource_spec.rb +43 -0
- data/spec/models/static_sidebar_spec.rb +17 -0
- data/spec/models/tag_spec.rb +54 -0
- data/spec/models/text_filter_spec.rb +38 -0
- data/spec/models/theme_spec.rb +45 -0
- data/spec/models/trackback_spec.rb +60 -0
- data/spec/models/trigger_spec.rb +41 -0
- data/spec/models/user_spec.rb +105 -0
- data/test/fixtures/blogs.yml +5 -4
- data/test/fixtures/categorizations.yml +31 -0
- data/test/fixtures/contents.yml +2 -160
- data/test/fixtures/feedback.yml +159 -0
- data/test/fixtures/sidebars.yml +11 -4
- data/test/functional/accounts_controller_test.rb +6 -10
- data/test/functional/admin/article_preview_test.rb +21 -6
- data/test/functional/admin/blacklist_controller_test.rb +11 -11
- data/test/functional/admin/categories_controller_test.rb +13 -13
- data/test/functional/admin/comments_controller_test.rb +21 -21
- data/test/functional/admin/content_controller_test.rb +30 -38
- data/test/functional/admin/feedback_controller_test.rb +12 -12
- data/test/functional/admin/general_controller_test.rb +2 -2
- data/test/functional/admin/pages_controller_test.rb +3 -18
- data/test/functional/admin/resources_controller_test.rb +7 -7
- data/test/functional/admin/textfilters_controller_test.rb +2 -2
- data/test/functional/admin/themes_controller_test.rb +1 -1
- data/test/functional/admin/trackbacks_controller_test.rb +21 -21
- data/test/functional/admin/users_controller_test.rb +21 -18
- data/test/functional/articles_controller_test.rb +62 -46
- data/test/functional/backend_controller_test.rb +6 -6
- data/test/functional/redirect_controller_test.rb +3 -3
- data/test/functional/textfilter_controller_test.rb +10 -12
- data/test/functional/theme_controller_test.rb +1 -1
- data/test/functional/xml_controller_test.rb +7 -5
- data/test/mocks/themes/azure/layouts/default.rhtml +2 -2
- data/test/test_helper.rb +75 -0
- data/test/unit/amazon_sidebar_test.rb +36 -0
- data/test/unit/article_test.rb +36 -4
- data/test/unit/blog_test.rb +5 -36
- data/test/unit/cache_support_test.rb +62 -0
- data/test/unit/category_test.rb +6 -1
- data/test/unit/comment_test.rb +34 -9
- data/test/unit/content_state/factory_test.rb +8 -0
- data/test/unit/content_state/feedback_states_test.rb +71 -0
- data/test/unit/magnolia_test.rb +1 -1
- data/test/unit/notification_test.rb +10 -0
- data/test/unit/page_test.rb +20 -0
- data/test/unit/ping_test.rb +1 -1
- data/test/unit/sidebar_test.rb +2 -7
- data/test/unit/static_sidebar_test.rb +19 -0
- data/test/unit/tag_test.rb +6 -1
- data/test/unit/text_filter_test.rb +21 -21
- data/test/unit/theme_test.rb +1 -1
- data/test/unit/trackback_test.rb +16 -1
- data/themes/azure/layouts/default.rhtml +2 -2
- data/themes/scribbish/layouts/default.rhtml +2 -2
- data/themes/scribbish/stylesheets/content.css +6 -8
- data/themes/scribbish/views/articles/_article.rhtml +10 -10
- data/themes/scribbish/views/articles/_comment.rhtml +16 -12
- data/themes/scribbish/views/articles/_comment_form.rhtml +25 -22
- data/themes/scribbish/views/articles/_search.rhtml +14 -13
- data/themes/scribbish/views/articles/comment_preview.rhtml +3 -3
- data/themes/scribbish/views/articles/index.rhtml +1 -1
- data/themes/scribbish/views/articles/read.rhtml +8 -8
- data/vendor/cached_model/History.txt +30 -0
- data/vendor/cached_model/LICENSE.txt +30 -0
- data/vendor/cached_model/Manifest.txt +7 -0
- data/vendor/cached_model/README.txt +96 -0
- data/vendor/cached_model/Rakefile +25 -0
- data/vendor/cached_model/lib/cached_model.rb +287 -0
- data/vendor/cached_model/test/test_cached_model.rb +593 -0
- data/vendor/flickr/flickr.rb +1 -1
- data/vendor/memcache-client/History.txt +25 -0
- data/vendor/memcache-client/LICENSE.txt +30 -0
- data/vendor/memcache-client/Manifest.txt +8 -0
- data/vendor/memcache-client/README.txt +46 -0
- data/vendor/memcache-client/Rakefile +23 -0
- data/vendor/memcache-client/lib/memcache.rb +491 -0
- data/vendor/memcache-client/lib/memcache_util.rb +71 -0
- data/vendor/memcache-client/test/test_mem_cache.rb +284 -0
- data/vendor/plugins/action_view_patch/Rakefile +22 -0
- data/vendor/plugins/action_view_patch/init.rb +1 -0
- data/vendor/plugins/action_view_patch/lib/action_view_patch.rb +18 -0
- data/vendor/plugins/action_view_patch/test/action_view_patch_test.rb +56 -0
- data/vendor/plugins/aimpresence_sidebar/Rakefile +22 -0
- data/vendor/plugins/aimpresence_sidebar/init.rb +4 -0
- data/vendor/plugins/aimpresence_sidebar/lib/aimpresence_sidebar.rb +21 -0
- data/vendor/plugins/aimpresence_sidebar/test/aimpresence_sidebar_test.rb +33 -0
- data/vendor/plugins/aimpresence_sidebar/views/content.rhtml +4 -0
- data/vendor/plugins/amazon_sidebar/init.rb +5 -0
- data/vendor/plugins/amazon_sidebar/lib/amazon_sidebar.rb +16 -0
- data/vendor/plugins/amazon_sidebar/views/content.rhtml +4 -0
- data/vendor/plugins/archives_sidebar/Rakefile +22 -0
- data/vendor/plugins/archives_sidebar/init.rb +5 -0
- data/{components/plugins/sidebars/archives_controller.rb → vendor/plugins/archives_sidebar/lib/archives_sidebar.rb} +7 -6
- data/vendor/plugins/archives_sidebar/test/archives_sidebar_test.rb +8 -0
- data/{components/plugins/sidebars/archives → vendor/plugins/archives_sidebar/views}/content.rhtml +2 -2
- data/vendor/plugins/audioscrobbler_sidebar/Rakefile +22 -0
- data/vendor/plugins/audioscrobbler_sidebar/init.rb +5 -0
- data/{app/models/aggregations → vendor/plugins/audioscrobbler_sidebar/lib}/audioscrobbler.rb +0 -0
- data/{components/plugins/sidebars/audioscrobbler_controller.rb → vendor/plugins/audioscrobbler_sidebar/lib/audioscrobbler_sidebar.rb} +7 -4
- data/vendor/plugins/audioscrobbler_sidebar/test/audioscrobbler_sidebar_test.rb +8 -0
- data/{components/plugins/sidebars/audioscrobbler → vendor/plugins/audioscrobbler_sidebar/views}/content.rhtml +4 -4
- data/vendor/plugins/backpack_sidebar/Rakefile +22 -0
- data/vendor/plugins/backpack_sidebar/init.rb +5 -0
- data/{app/models/aggregations → vendor/plugins/backpack_sidebar/lib}/backpack.rb +0 -0
- data/{components/plugins/sidebars/backpack_controller.rb → vendor/plugins/backpack_sidebar/lib/backpack_sidebar.rb} +6 -3
- data/vendor/plugins/backpack_sidebar/test/backpack_sidebar_test.rb +8 -0
- data/{components/plugins/sidebars/backpack → vendor/plugins/backpack_sidebar/views}/content.rhtml +4 -4
- data/vendor/plugins/category_sidebar/Rakefile +22 -0
- data/vendor/plugins/category_sidebar/init.rb +5 -0
- data/{components/plugins/sidebars/category_controller.rb → vendor/plugins/category_sidebar/lib/category_sidebar.rb} +3 -5
- data/vendor/plugins/category_sidebar/test/category_sidebar_test.rb +8 -0
- data/vendor/plugins/category_sidebar/views/content.rhtml +10 -0
- data/vendor/plugins/delicious_sidebar/Rakefile +22 -0
- data/vendor/plugins/delicious_sidebar/init.rb +5 -0
- data/{app/models/aggregations → vendor/plugins/delicious_sidebar/lib}/delicious.rb +0 -0
- data/{components/plugins/sidebars/delicious_controller.rb → vendor/plugins/delicious_sidebar/lib/delicious_sidebar.rb} +16 -10
- data/vendor/plugins/delicious_sidebar/test/delicious_sidebar_test.rb +8 -0
- data/vendor/plugins/delicious_sidebar/views/content.rhtml +20 -0
- data/vendor/plugins/flickr_sidebar/Rakefile +22 -0
- data/vendor/plugins/flickr_sidebar/init.rb +5 -0
- data/{app/models/aggregations → vendor/plugins/flickr_sidebar/lib}/flickr.rb +1 -1
- data/vendor/plugins/flickr_sidebar/lib/flickr_sidebar.rb +15 -0
- data/vendor/plugins/flickr_sidebar/test/flickr_sidebar_test.rb +8 -0
- data/{components/plugins/sidebars/flickr → vendor/plugins/flickr_sidebar/views}/content.rhtml +5 -5
- data/vendor/plugins/fortythree_sidebar/Rakefile +22 -0
- data/vendor/plugins/fortythree_sidebar/init.rb +5 -0
- data/{app/models/aggregations → vendor/plugins/fortythree_sidebar/lib}/fortythree.rb +0 -0
- data/{components/plugins/sidebars/fortythree_controller.rb → vendor/plugins/fortythree_sidebar/lib/fortythree_sidebar.rb} +5 -4
- data/vendor/plugins/fortythree_sidebar/test/fortythree_sidebar_test.rb +8 -0
- data/vendor/plugins/fortythree_sidebar/views/content.rhtml +8 -0
- data/vendor/plugins/fortythreeplaces_sidebar/Rakefile +22 -0
- data/vendor/plugins/fortythreeplaces_sidebar/init.rb +5 -0
- data/vendor/plugins/fortythreeplaces_sidebar/lib/fortythree.rb +62 -0
- data/{components/plugins/sidebars/fortythreeplaces_controller.rb → vendor/plugins/fortythreeplaces_sidebar/lib/fortythreeplaces_sidebar.rb} +5 -4
- data/vendor/plugins/fortythreeplaces_sidebar/test/fortythreeplaces_sidebar_test.rb +8 -0
- data/vendor/plugins/fortythreeplaces_sidebar/views/content.rhtml +8 -0
- data/vendor/plugins/haml/MIT-LICENSE +20 -0
- data/vendor/plugins/haml/REFERENCE +662 -0
- data/vendor/plugins/haml/Rakefile +171 -0
- data/vendor/plugins/haml/VERSION +1 -0
- data/vendor/plugins/haml/bin/haml +18 -0
- data/vendor/plugins/haml/init.rb +3 -0
- data/vendor/plugins/haml/lib/haml/buffer.rb +224 -0
- data/vendor/plugins/haml/lib/haml/engine.rb +557 -0
- data/vendor/plugins/haml/lib/haml/helpers.rb +220 -0
- data/vendor/plugins/haml/lib/haml/helpers/action_view_mods.rb +54 -0
- data/vendor/plugins/haml/lib/haml/template.rb +138 -0
- data/vendor/plugins/haml/test/benchmark.rb +62 -0
- data/vendor/plugins/haml/test/engine_test.rb +93 -0
- data/vendor/plugins/haml/test/helper_test.rb +105 -0
- data/vendor/plugins/haml/test/mocks/article.rb +6 -0
- data/vendor/plugins/haml/test/profile.rb +45 -0
- data/vendor/plugins/haml/test/results/content_for_layout.xhtml +16 -0
- data/vendor/plugins/haml/test/results/eval_suppressed.xhtml +2 -0
- data/vendor/plugins/haml/test/results/helpers.xhtml +50 -0
- data/vendor/plugins/haml/test/results/helpful.xhtml +5 -0
- data/vendor/plugins/haml/test/results/just_stuff.xhtml +38 -0
- data/vendor/plugins/haml/test/results/list.xhtml +12 -0
- data/vendor/plugins/haml/test/results/original_engine.xhtml +24 -0
- data/vendor/plugins/haml/test/results/partials.xhtml +20 -0
- data/vendor/plugins/haml/test/results/silent_script.xhtml +74 -0
- data/vendor/plugins/haml/test/results/standard.xhtml +42 -0
- data/vendor/plugins/haml/test/results/tag_parsing.xhtml +28 -0
- data/vendor/plugins/haml/test/results/very_basic.xhtml +7 -0
- data/vendor/plugins/haml/test/results/whitespace_handling.xhtml +51 -0
- data/vendor/plugins/haml/test/rhtml/standard.rhtml +51 -0
- data/vendor/plugins/haml/test/runner.rb +15 -0
- data/vendor/plugins/haml/test/template_test.rb +137 -0
- data/vendor/plugins/haml/test/templates/_partial.haml +7 -0
- data/vendor/plugins/haml/test/templates/_text_area.haml +3 -0
- data/vendor/plugins/haml/test/templates/content_for_layout.haml +10 -0
- data/vendor/plugins/haml/test/templates/eval_suppressed.haml +5 -0
- data/vendor/plugins/haml/test/templates/helpers.haml +39 -0
- data/vendor/plugins/haml/test/templates/helpful.haml +6 -0
- data/vendor/plugins/haml/test/templates/just_stuff.haml +34 -0
- data/vendor/plugins/haml/test/templates/list.haml +12 -0
- data/vendor/plugins/haml/test/templates/original_engine.haml +17 -0
- data/vendor/plugins/haml/test/templates/partialize.haml +1 -0
- data/vendor/plugins/haml/test/templates/partials.haml +12 -0
- data/vendor/plugins/haml/test/templates/silent_script.haml +40 -0
- data/vendor/plugins/haml/test/templates/standard.haml +40 -0
- data/vendor/plugins/haml/test/templates/tag_parsing.haml +24 -0
- data/vendor/plugins/haml/test/templates/very_basic.haml +4 -0
- data/vendor/plugins/haml/test/templates/whitespace_handling.haml +66 -0
- data/vendor/plugins/localization/CHANGELOG +1 -0
- data/vendor/plugins/localization/README +85 -0
- data/vendor/plugins/localization/init.rb +3 -0
- data/vendor/plugins/localization/lib/localization.rb +46 -0
- data/vendor/plugins/magnolia_sidebar/Rakefile +22 -0
- data/vendor/plugins/magnolia_sidebar/init.rb +5 -0
- data/{app/models/aggregations/magnolia.rb → vendor/plugins/magnolia_sidebar/lib/magnolia_aggregation.rb} +0 -0
- data/vendor/plugins/magnolia_sidebar/lib/magnolia_sidebar.rb +16 -0
- data/vendor/plugins/magnolia_sidebar/test/magnolia_sidebar_test.rb +8 -0
- data/vendor/plugins/magnolia_sidebar/views/content.rhtml +12 -0
- data/vendor/plugins/recent_comments_sidebar/Rakefile +22 -0
- data/vendor/plugins/recent_comments_sidebar/init.rb +5 -0
- data/vendor/plugins/recent_comments_sidebar/lib/recent_comments_sidebar.rb +16 -0
- data/vendor/plugins/recent_comments_sidebar/test/recent_comments_sidebar_test.rb +8 -0
- data/{components/plugins/sidebars/recent_comments → vendor/plugins/recent_comments_sidebar/views}/content.rhtml +2 -2
- data/vendor/plugins/static_sidebar/init.rb +4 -0
- data/{components/plugins/sidebars/static_controller.rb → vendor/plugins/static_sidebar/lib/static_sidebar.rb} +4 -7
- data/vendor/plugins/static_sidebar/views/content.rhtml +2 -0
- data/vendor/plugins/tada_sidebar/Rakefile +22 -0
- data/vendor/plugins/tada_sidebar/init.rb +5 -0
- data/{app/models/aggregations → vendor/plugins/tada_sidebar/lib}/tada.rb +0 -0
- data/{components/plugins/sidebars/tada_controller.rb → vendor/plugins/tada_sidebar/lib/tada_sidebar.rb} +8 -4
- data/vendor/plugins/tada_sidebar/test/tada_sidebar_test.rb +8 -0
- data/{components/plugins/sidebars/tada → vendor/plugins/tada_sidebar/views}/content.rhtml +4 -4
- data/vendor/plugins/tag_sidebar/Rakefile +22 -0
- data/vendor/plugins/tag_sidebar/init.rb +5 -0
- data/vendor/plugins/tag_sidebar/lib/tag_sidebar.rb +24 -0
- data/vendor/plugins/tag_sidebar/test/tag_sidebar_test.rb +8 -0
- data/vendor/plugins/tag_sidebar/views/content.rhtml +8 -0
- data/vendor/plugins/technorati_sidebar/Rakefile +22 -0
- data/vendor/plugins/technorati_sidebar/init.rb +5 -0
- data/{app/models/aggregations → vendor/plugins/technorati_sidebar/lib}/technorati.rb +0 -0
- data/{components/plugins/sidebars/technorati_controller.rb → vendor/plugins/technorati_sidebar/lib/technorati_sidebar.rb} +8 -4
- data/vendor/plugins/technorati_sidebar/test/technorati_sidebar_test.rb +8 -0
- data/vendor/plugins/technorati_sidebar/views/content.rhtml +8 -0
- data/vendor/plugins/typo_textfilter_amazon/README +5 -0
- data/vendor/plugins/typo_textfilter_amazon/Rakefile +22 -0
- data/vendor/plugins/typo_textfilter_amazon/init.rb +4 -0
- data/vendor/plugins/typo_textfilter_amazon/install.rb +1 -0
- data/vendor/plugins/typo_textfilter_amazon/lib/typo_textfilter_amazon.rb +45 -0
- data/vendor/plugins/typo_textfilter_amazon/tasks/typo_textfilter_amazon_tasks.rake +4 -0
- data/vendor/plugins/typo_textfilter_amazon/test/typo_textfilter_amazon_test.rb +8 -0
- data/vendor/plugins/typo_textfilter_code/README +4 -0
- data/vendor/plugins/typo_textfilter_code/Rakefile +22 -0
- data/vendor/plugins/typo_textfilter_code/init.rb +4 -0
- data/vendor/plugins/typo_textfilter_code/install.rb +1 -0
- data/vendor/plugins/typo_textfilter_code/lib/typo_textfilter_code.rb +62 -0
- data/vendor/plugins/typo_textfilter_code/tasks/typo_textfilter_code_tasks.rake +4 -0
- data/vendor/plugins/typo_textfilter_code/test/typo_textfilter_code_test.rb +8 -0
- data/vendor/plugins/typo_textfilter_flickr/README +4 -0
- data/vendor/plugins/typo_textfilter_flickr/Rakefile +22 -0
- data/vendor/plugins/typo_textfilter_flickr/init.rb +4 -0
- data/vendor/plugins/typo_textfilter_flickr/install.rb +1 -0
- data/vendor/plugins/typo_textfilter_flickr/lib/typo_textfilter_flickr.rb +79 -0
- data/vendor/plugins/typo_textfilter_flickr/tasks/typo_textfilter_flickr_tasks.rake +4 -0
- data/vendor/plugins/typo_textfilter_flickr/test/typo_textfilter_flickr_test.rb +8 -0
- data/vendor/plugins/typo_textfilter_htmlfilter/README +4 -0
- data/vendor/plugins/typo_textfilter_htmlfilter/Rakefile +22 -0
- data/vendor/plugins/typo_textfilter_htmlfilter/init.rb +2 -0
- data/vendor/plugins/typo_textfilter_htmlfilter/install.rb +1 -0
- data/vendor/plugins/typo_textfilter_htmlfilter/lib/typo_textfilter_htmlfilter.rb +12 -0
- data/vendor/plugins/typo_textfilter_htmlfilter/tasks/typo_textfilter_htmlfilter_tasks.rake +4 -0
- data/vendor/plugins/typo_textfilter_htmlfilter/test/typo_textfilter_htmlfilter_test.rb +8 -0
- data/vendor/plugins/typo_textfilter_lightbox/README +4 -0
- data/vendor/plugins/typo_textfilter_lightbox/Rakefile +22 -0
- data/vendor/plugins/typo_textfilter_lightbox/init.rb +2 -0
- data/vendor/plugins/typo_textfilter_lightbox/install.rb +1 -0
- data/{components/plugins/textfilters/lightbox_controller.rb → vendor/plugins/typo_textfilter_lightbox/lib/typo_textfilter_lightbox.rb} +64 -61
- data/vendor/plugins/typo_textfilter_lightbox/tasks/typo_textfilter_lightbox_tasks.rake +4 -0
- data/vendor/plugins/typo_textfilter_lightbox/test/typo_textfilter_lightbox_test.rb +8 -0
- data/vendor/plugins/typo_textfilter_markdown/README +4 -0
- data/vendor/plugins/typo_textfilter_markdown/Rakefile +22 -0
- data/vendor/plugins/typo_textfilter_markdown/init.rb +2 -0
- data/vendor/plugins/typo_textfilter_markdown/install.rb +1 -0
- data/{components/plugins/textfilters/markdown_controller.rb → vendor/plugins/typo_textfilter_markdown/lib/typo_textfilter_markdown.rb} +13 -9
- data/vendor/plugins/typo_textfilter_markdown/tasks/typo_textfilter_markdown_tasks.rake +4 -0
- data/vendor/plugins/typo_textfilter_markdown/test/typo_textfilter_markdown_test.rb +8 -0
- data/vendor/plugins/typo_textfilter_none/README +4 -0
- data/vendor/plugins/typo_textfilter_none/Rakefile +22 -0
- data/vendor/plugins/typo_textfilter_none/init.rb +2 -0
- data/vendor/plugins/typo_textfilter_none/install.rb +1 -0
- data/vendor/plugins/typo_textfilter_none/lib/typo_textfilter_none.rb +12 -0
- data/vendor/plugins/typo_textfilter_none/tasks/typo_textfilter_none_tasks.rake +4 -0
- data/vendor/plugins/typo_textfilter_none/test/typo_textfilter_none_test.rb +8 -0
- data/vendor/plugins/typo_textfilter_smartypants/README +4 -0
- data/vendor/plugins/typo_textfilter_smartypants/Rakefile +22 -0
- data/vendor/plugins/typo_textfilter_smartypants/init.rb +2 -0
- data/vendor/plugins/typo_textfilter_smartypants/install.rb +1 -0
- data/vendor/plugins/typo_textfilter_smartypants/lib/typo_textfilter_smartypants.rb +12 -0
- data/vendor/plugins/typo_textfilter_smartypants/tasks/typo_textfilter_smartypants_tasks.rake +4 -0
- data/vendor/plugins/typo_textfilter_smartypants/test/typo_textfilter_smartypants_test.rb +8 -0
- data/vendor/plugins/typo_textfilter_sparkline/README +4 -0
- data/vendor/plugins/typo_textfilter_sparkline/Rakefile +22 -0
- data/vendor/plugins/typo_textfilter_sparkline/init.rb +2 -0
- data/vendor/plugins/typo_textfilter_sparkline/install.rb +1 -0
- data/vendor/plugins/typo_textfilter_sparkline/lib/typo_textfilter_sparkline.rb +92 -0
- data/vendor/plugins/typo_textfilter_sparkline/tasks/typo_textfilter_sparkline_tasks.rake +4 -0
- data/vendor/plugins/typo_textfilter_sparkline/test/typo_textfilter_sparkline_test.rb +8 -0
- data/vendor/plugins/typo_textfilter_textile/README +4 -0
- data/vendor/plugins/typo_textfilter_textile/Rakefile +22 -0
- data/vendor/plugins/typo_textfilter_textile/init.rb +2 -0
- data/vendor/plugins/typo_textfilter_textile/install.rb +1 -0
- data/vendor/plugins/typo_textfilter_textile/lib/typo_textfilter_textile.rb +18 -0
- data/vendor/plugins/typo_textfilter_textile/tasks/typo_textfilter_textile_tasks.rake +4 -0
- data/vendor/plugins/typo_textfilter_textile/test/typo_textfilter_textile_test.rb +8 -0
- data/vendor/plugins/typo_textfilter_textile_and_markdown/README +4 -0
- data/vendor/plugins/typo_textfilter_textile_and_markdown/Rakefile +22 -0
- data/vendor/plugins/typo_textfilter_textile_and_markdown/init.rb +2 -0
- data/vendor/plugins/typo_textfilter_textile_and_markdown/install.rb +1 -0
- data/vendor/plugins/typo_textfilter_textile_and_markdown/lib/typo_textfilter_textile_and_markdown.rb +12 -0
- data/vendor/plugins/typo_textfilter_textile_and_markdown/tasks/typo_textfilter_textile_and_markdown_tasks.rake +4 -0
- data/vendor/plugins/typo_textfilter_textile_and_markdown/test/typo_textfilter_textile_and_markdown_test.rb +8 -0
- data/vendor/plugins/typo_textfilter_tmcode/README +4 -0
- data/vendor/plugins/typo_textfilter_tmcode/Rakefile +22 -0
- data/vendor/plugins/typo_textfilter_tmcode/init.rb +3 -0
- data/vendor/plugins/typo_textfilter_tmcode/install.rb +1 -0
- data/vendor/plugins/typo_textfilter_tmcode/lib/typo_textfilter_tmcode.rb +86 -0
- data/vendor/plugins/typo_textfilter_tmcode/tasks/typo_textfilter_tmcode_tasks.rake +4 -0
- data/vendor/plugins/typo_textfilter_tmcode/test/typo_textfilter_tmcode_test.rb +8 -0
- data/vendor/plugins/upcoming_sidebar/Rakefile +22 -0
- data/vendor/plugins/upcoming_sidebar/init.rb +5 -0
- data/{app/models/aggregations → vendor/plugins/upcoming_sidebar/lib}/upcoming.rb +0 -0
- data/vendor/plugins/upcoming_sidebar/lib/upcoming_sidebar.rb +15 -0
- data/vendor/plugins/upcoming_sidebar/test/upcoming_sidebar_test.rb +8 -0
- data/{components/plugins/sidebars/upcoming → vendor/plugins/upcoming_sidebar/views}/content.rhtml +3 -3
- data/vendor/plugins/xbox_sidebar/Rakefile +22 -0
- data/vendor/plugins/xbox_sidebar/init.rb +5 -0
- data/{components/plugins/sidebars/xbox_controller.rb → vendor/plugins/xbox_sidebar/lib/xbox_sidebar.rb} +1 -1
- data/vendor/plugins/xbox_sidebar/test/xbox_sidebar_test.rb +8 -0
- data/vendor/plugins/xbox_sidebar/views/content.rhtml +2 -0
- data/vendor/plugins/xml_sidebar/Rakefile +22 -0
- data/vendor/plugins/xml_sidebar/init.rb +5 -0
- data/{components/plugins/sidebars/xml_controller.rb → vendor/plugins/xml_sidebar/lib/xml_sidebar.rb} +1 -1
- data/vendor/plugins/xml_sidebar/test/xml_sidebar_test.rb +8 -0
- data/vendor/plugins/xml_sidebar/views/content.rhtml +12 -0
- metadata +505 -101
- data/app/controllers/sidebar_controller.rb +0 -50
- data/app/models/content_observer.rb +0 -5
- data/components/plugins/sidebars/aimpresence/content.rhtml +0 -4
- data/components/plugins/sidebars/aimpresence_controller.rb +0 -10
- data/components/plugins/sidebars/amazon/content.rhtml +0 -4
- data/components/plugins/sidebars/amazon_controller.rb +0 -17
- data/components/plugins/sidebars/category/content.rhtml +0 -10
- data/components/plugins/sidebars/delicious/content.rhtml +0 -20
- data/components/plugins/sidebars/flickr_controller.rb +0 -16
- data/components/plugins/sidebars/fortythree/content.rhtml +0 -8
- data/components/plugins/sidebars/fortythreeplaces/content.rhtml +0 -8
- data/components/plugins/sidebars/magnolia/content.rhtml +0 -12
- data/components/plugins/sidebars/magnolia_controller.rb +0 -17
- data/components/plugins/sidebars/recent_comments_controller.rb +0 -23
- data/components/plugins/sidebars/static/content.rhtml +0 -2
- data/components/plugins/sidebars/tag/content.rhtml +0 -8
- data/components/plugins/sidebars/tag_controller.rb +0 -18
- data/components/plugins/sidebars/technorati/content.rhtml +0 -8
- data/components/plugins/sidebars/upcoming_controller.rb +0 -11
- data/components/plugins/sidebars/xbox/content.rhtml +0 -2
- data/components/plugins/sidebars/xml/content.rhtml +0 -12
- data/components/plugins/textfilters/amazon_controller.rb +0 -39
- data/components/plugins/textfilters/code_controller.rb +0 -59
- data/components/plugins/textfilters/flickr_controller.rb +0 -75
- data/components/plugins/textfilters/htmlfilter_controller.rb +0 -8
- data/components/plugins/textfilters/macropost_controller.rb +0 -14
- data/components/plugins/textfilters/macropre_controller.rb +0 -14
- data/components/plugins/textfilters/none_controller.rb +0 -8
- data/components/plugins/textfilters/smartypants_controller.rb +0 -8
- data/components/plugins/textfilters/sparkline_controller.rb +0 -88
- data/components/plugins/textfilters/textile_and_markdown_controller.rb +0 -8
- data/components/plugins/textfilters/textile_controller.rb +0 -14
- data/db/schema.mysql-v3.sql +0 -218
- data/lib/generators/sidebar/templates/components/plugins/sidebars/controller_template.rb +0 -20
- data/lib/generators/sidebar/templates/components/plugins/sidebars/views/content_template.rhtml +0 -4
- data/lib/rails_patch/components.rb +0 -14
- data/public/images/checked.gif +0 -0
- data/test/unit/observer_test.rb +0 -40
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
<%= form_remote_tag :url => {:action => 'comment', :id => @article},
|
|
1
|
+
<%= form_remote_tag :url => {:action => 'comment', :id => @article},
|
|
2
2
|
:update => 'comments_div',
|
|
3
|
-
:loading => 'commentLoading()',
|
|
3
|
+
:loading => 'commentLoading()',
|
|
4
4
|
:complete => 'commentComplete()',
|
|
5
5
|
:html => {:id => 'commentform', :class => 'comments' } %>
|
|
6
6
|
|
|
@@ -9,38 +9,41 @@
|
|
|
9
9
|
<fieldset>
|
|
10
10
|
<legend>Comments</legend>
|
|
11
11
|
<p>
|
|
12
|
-
<label>Name:<br />
|
|
12
|
+
<label>Name:<br />
|
|
13
13
|
<%= text_field "comment", "author" %>
|
|
14
|
-
<small>(<%= link_to_function("leave url/email »", "
|
|
14
|
+
<small>(<%= link_to_function("leave url/email »", "Effect.toggle('extra_fields', 'blind', {duration: .3})") %>)</small>
|
|
15
15
|
</label>
|
|
16
16
|
</p>
|
|
17
|
-
|
|
18
|
-
<div id="extra_fields" style="display:none;">
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
17
|
+
|
|
18
|
+
<div id="extra_fields" style="display:none;">
|
|
19
|
+
<p>
|
|
20
|
+
<label>Email: <%= content_tag('small', "(#{link_to('gravatar', 'http://gravatar.com')} enabled)") if this_blog.use_gravatar %><br />
|
|
21
|
+
<%= text_field "comment", "email" %>
|
|
22
|
+
</label>
|
|
23
|
+
</p>
|
|
24
|
+
<p>
|
|
25
|
+
<label>Url:<br />
|
|
26
|
+
<%= text_field "comment", "url" %>
|
|
27
|
+
</label>
|
|
28
|
+
</p>
|
|
29
29
|
</div>
|
|
30
|
-
|
|
30
|
+
|
|
31
31
|
<p>
|
|
32
32
|
<label>
|
|
33
33
|
Comments:
|
|
34
|
-
<%= content_tag('small', link_to("Textile enabled", "http://hobix.com/textile/")) if
|
|
35
|
-
<%= content_tag('small', link_to("Markdown enabled", "http://daringfireball.net/projects/markdown/")) if
|
|
34
|
+
<%= content_tag('small', link_to("Textile enabled", "http://hobix.com/textile/")) if this_blog.comment_text_filter.include? 'textile' %>
|
|
35
|
+
<%= content_tag('small', link_to("Markdown enabled", "http://daringfireball.net/projects/markdown/")) if this_blog.comment_text_filter.include? 'markdown' %>
|
|
36
36
|
<br />
|
|
37
37
|
<%= text_area 'comment', 'body' %>
|
|
38
38
|
</label>
|
|
39
39
|
</p>
|
|
40
|
-
|
|
40
|
+
|
|
41
41
|
<p>
|
|
42
|
-
|
|
43
|
-
|
|
42
|
+
<%= submit_to_remote('preview', 'Preview!',
|
|
43
|
+
:update => 'preview',
|
|
44
|
+
:complete => "Element.show('preview')",
|
|
45
|
+
:url => { :action => 'comment_preview' }) %>
|
|
46
|
+
<%= submit_tag 'Submit', :onclick => "$('commentform').onsubmit();this.disabled=true;Element.hide('preview');return false;" %>
|
|
44
47
|
<%= image_tag '/images/theme/spinner.gif', :id => 'spinner', :style => 'display:none' %>
|
|
45
48
|
</p>
|
|
46
49
|
</fieldset>
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
<div id="search" class="search">
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
2
|
+
<% form_tag({ :controller => 'articles', :action => 'search' },
|
|
3
|
+
{ :method => 'get', :id => 'sform' }) do -%>
|
|
4
|
+
<p><input type="text" id="q" name="q" value="" /></p>
|
|
5
|
+
<% end -%>
|
|
6
|
+
|
|
7
|
+
<div id="loading" class="loading" style="display:none;">Searching...</div>
|
|
8
|
+
<div id="results" class="results"></div>
|
|
9
|
+
<%= observe_field 'q',
|
|
10
|
+
:url => { :controller => 'live', :action => 'search' },
|
|
11
|
+
:frequency => 1,
|
|
12
|
+
:loading => "Element.show('loading')",
|
|
13
|
+
:complete => "Element.hide('loading')",
|
|
14
|
+
:update => 'results',
|
|
15
|
+
:with => "'q=' + escape($F('q'))" %>
|
|
15
16
|
</div>
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
<div class="comment preview">
|
|
2
2
|
<div class="author">
|
|
3
|
-
<%= content_tag(:div, gravatar_tag(@comment.email)) if
|
|
3
|
+
<%= content_tag(:div, gravatar_tag(@comment.email)) if this_blog.use_gravatar and @comment.email %>
|
|
4
4
|
<cite><%= (@comment.url.blank?) ? h(@comment.author) : link_to(h(@comment.author), @comment.url) %></cite>
|
|
5
5
|
<abbr>is about to say</abbr>
|
|
6
6
|
</div>
|
|
7
7
|
<div class="content">
|
|
8
|
-
<%=
|
|
8
|
+
<%= @comment.html %>
|
|
9
9
|
</div>
|
|
10
|
-
</div>
|
|
10
|
+
</div>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<%= render :partial => 'article', :collection => @articles %>
|
|
2
2
|
|
|
3
|
-
<% unless @pages.item_count <=
|
|
3
|
+
<% unless @pages.item_count <= this_blog.limit_article_display -%>
|
|
4
4
|
<p class="pagination">Older posts: <%= pagination_links @pages, :params => { :action => @controller.action_name } %></p>
|
|
5
5
|
<% end -%>
|
|
@@ -5,32 +5,32 @@
|
|
|
5
5
|
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
|
6
6
|
<rdf:Description
|
|
7
7
|
rdf:about=""
|
|
8
|
-
trackback:ping="<%=
|
|
8
|
+
trackback:ping="<%= @article.trackback_url %>"
|
|
9
9
|
dc:title="<%=h @article.title.gsub(/-+/, '-') %>"
|
|
10
|
-
dc:identifier="<%=
|
|
11
|
-
dc:description="<%=h
|
|
10
|
+
dc:identifier="<%= @article.permalink_url %>"
|
|
11
|
+
dc:description="<%=h (@article.html.strip_html[0..255]).gsub(/-+/, '-') %>"
|
|
12
12
|
dc:creator="<%= h @article.author %>"
|
|
13
13
|
dc:date="<%= @article.updated_at.xmlschema %>" />
|
|
14
14
|
</rdf:RDF>
|
|
15
15
|
-->
|
|
16
16
|
|
|
17
|
-
<%= render :partial => 'article' %>
|
|
17
|
+
<%= render :partial => 'article', :object => @article %>
|
|
18
18
|
|
|
19
19
|
<% if @article.allow_pings? -%>
|
|
20
20
|
<h5><a name="trackbacks">Trackbacks</a></h5>
|
|
21
21
|
<p>
|
|
22
22
|
Use the following link to trackback from your own site:<br />
|
|
23
|
-
<%=
|
|
23
|
+
<%= @article.trackback_url %>
|
|
24
24
|
</p>
|
|
25
25
|
|
|
26
|
-
<% unless @article.
|
|
26
|
+
<% unless @article.published_trackbacks.blank? -%>
|
|
27
27
|
<ol id="trackbacks" class="trackbacks">
|
|
28
|
-
<%= render(:partial => "trackback", :collection => @article.
|
|
28
|
+
<%= render(:partial => "trackback", :collection => @article.published_trackbacks) %>
|
|
29
29
|
</ol>
|
|
30
30
|
<% end -%>
|
|
31
31
|
<% end -%>
|
|
32
32
|
|
|
33
|
-
<% if @article.allow_comments? or @article.
|
|
33
|
+
<% if @article.allow_comments? or @article.published_comments.size > 0 -%>
|
|
34
34
|
<h5><a name="comments">Comments</a></h5>
|
|
35
35
|
<p><a href="#commentform">Leave a response</a></p>
|
|
36
36
|
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
= 1.3.1
|
|
2
|
+
|
|
3
|
+
* Match behavior of ActiveRecord::Base#transaction
|
|
4
|
+
|
|
5
|
+
= 1.3.0
|
|
6
|
+
|
|
7
|
+
* Added support for transaction
|
|
8
|
+
* Use ZenTest's assertions
|
|
9
|
+
* Switched to Hoe
|
|
10
|
+
|
|
11
|
+
= 1.2.1
|
|
12
|
+
|
|
13
|
+
* Lost to time
|
|
14
|
+
|
|
15
|
+
= 1.2.0
|
|
16
|
+
|
|
17
|
+
* Support Rails 1.1.2+
|
|
18
|
+
* Moved work into find_by_sql
|
|
19
|
+
|
|
20
|
+
= 1.1.0
|
|
21
|
+
|
|
22
|
+
* Lost to time
|
|
23
|
+
|
|
24
|
+
= 1.0.1
|
|
25
|
+
|
|
26
|
+
* Lost to time
|
|
27
|
+
|
|
28
|
+
= 1.0.0
|
|
29
|
+
|
|
30
|
+
* Birthday!
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
All original code copyright 2005 Bob Cottrell and Eric Hodel, The Robot Co-op.
|
|
2
|
+
All rights reserved.
|
|
3
|
+
|
|
4
|
+
Redistribution and use in source and binary forms, with or without
|
|
5
|
+
modification, are permitted provided that the following conditions
|
|
6
|
+
are met:
|
|
7
|
+
|
|
8
|
+
1. Redistributions of source code must retain the above copyright
|
|
9
|
+
notice, this list of conditions and the following disclaimer.
|
|
10
|
+
2. Redistributions in binary form must reproduce the above copyright
|
|
11
|
+
notice, this list of conditions and the following disclaimer in the
|
|
12
|
+
documentation and/or other materials provided with the distribution.
|
|
13
|
+
3. Neither the names of the authors nor the names of their contributors
|
|
14
|
+
may be used to endorse or promote products derived from this software
|
|
15
|
+
without specific prior written permission.
|
|
16
|
+
4. Redistribution in Rails or any sub-projects of Rails is not allowed
|
|
17
|
+
until Rails runs without warnings with the ``-W2'' flag enabled.
|
|
18
|
+
|
|
19
|
+
THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
|
|
20
|
+
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
21
|
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
22
|
+
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE
|
|
23
|
+
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
|
|
24
|
+
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
|
25
|
+
OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
|
26
|
+
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
27
|
+
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
|
28
|
+
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
|
29
|
+
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
30
|
+
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
= CachedModel
|
|
2
|
+
|
|
3
|
+
Rubyforge Project:
|
|
4
|
+
|
|
5
|
+
http://rubyforge.org/projects/rctools/
|
|
6
|
+
|
|
7
|
+
Documentation:
|
|
8
|
+
|
|
9
|
+
http://dev.robotcoop.com/Libraries/cached_model/
|
|
10
|
+
|
|
11
|
+
== About
|
|
12
|
+
|
|
13
|
+
CachedModel stores Rails ActiveRecord objects in memcache allowing for very
|
|
14
|
+
fast retrievals. CachedModel uses the ActiveRecord::Locking to ensure that
|
|
15
|
+
you don't perform multiple updates.
|
|
16
|
+
|
|
17
|
+
== CachedModel Doesn't...
|
|
18
|
+
|
|
19
|
+
CachedModel is not magic.
|
|
20
|
+
|
|
21
|
+
CachedModel only accelerates simple finds for single rows.
|
|
22
|
+
|
|
23
|
+
CachedModel won't cache every query you run.
|
|
24
|
+
|
|
25
|
+
CachedModel isn't smart enough to determine the dependencies between your
|
|
26
|
+
queries so that it can accelerate more complicated queries. Without these
|
|
27
|
+
smarts you'll only end up with a broken application.
|
|
28
|
+
|
|
29
|
+
If you want to cache more complicated queries you need do it by hand.
|
|
30
|
+
|
|
31
|
+
== Using CachedModel
|
|
32
|
+
|
|
33
|
+
First, install the cached_model gem:
|
|
34
|
+
|
|
35
|
+
$ sudo gem install cached_model
|
|
36
|
+
|
|
37
|
+
Then set up memcache-client for CachedModel by setting CACHE in your
|
|
38
|
+
config/environment files:
|
|
39
|
+
|
|
40
|
+
CACHE = MemCache.new 'localhost:11211', :namespace => 'my_rails_app'
|
|
41
|
+
|
|
42
|
+
You will need separate namespaces for production and development, if
|
|
43
|
+
you are using memcache on the same machine.
|
|
44
|
+
|
|
45
|
+
Note that using memcache with tests will cause test failures, so set your
|
|
46
|
+
memcache to be readonly for the test environment.
|
|
47
|
+
|
|
48
|
+
Then make Rails load the gem:
|
|
49
|
+
|
|
50
|
+
$ tail -n 4 config/environment.rb
|
|
51
|
+
# Include your application configuration below
|
|
52
|
+
|
|
53
|
+
require 'cached_model'
|
|
54
|
+
|
|
55
|
+
Then edit your ActiveRecord model to inherit from CachedModel instead of
|
|
56
|
+
ActiveRecord::Base:
|
|
57
|
+
|
|
58
|
+
$ head -n 8 app/models/photo.rb
|
|
59
|
+
##
|
|
60
|
+
# A Photo from Flickr.
|
|
61
|
+
|
|
62
|
+
class Photo < CachedModel
|
|
63
|
+
|
|
64
|
+
belongs_to :point
|
|
65
|
+
belongs_to :route
|
|
66
|
+
|
|
67
|
+
== Extra Features
|
|
68
|
+
|
|
69
|
+
=== Local Cache
|
|
70
|
+
|
|
71
|
+
CachedModel also incorporates an in-process cache, but it is disabled by
|
|
72
|
+
default. In order to enable the in-process cache enable it in your
|
|
73
|
+
environment.rb:
|
|
74
|
+
|
|
75
|
+
CachedModel.use_local_cache = true
|
|
76
|
+
|
|
77
|
+
And add a after_filter that flushes the local cache:
|
|
78
|
+
|
|
79
|
+
class ApplicationController < ActionController::Base
|
|
80
|
+
|
|
81
|
+
after_filter { CachedModel.cache_reset }
|
|
82
|
+
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
IF YOU DO NOT ADD THE AFTER FILTER YOU WILL EXPERIENCE EXTREME PROCESS GROWTH.
|
|
86
|
+
|
|
87
|
+
=== Memcache
|
|
88
|
+
|
|
89
|
+
Memcache may be disabled and the TTL for objects stored in memcache may be
|
|
90
|
+
changed:
|
|
91
|
+
|
|
92
|
+
CachedModel.use_memcache = false
|
|
93
|
+
CachedModel.ttl = 86400
|
|
94
|
+
|
|
95
|
+
The default TTL for memcache objects is 900 seconds.
|
|
96
|
+
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# vim: syntax=Ruby
|
|
2
|
+
|
|
3
|
+
require 'hoe'
|
|
4
|
+
|
|
5
|
+
DEV_DOC_PATH = 'Libraries/cached_model'
|
|
6
|
+
|
|
7
|
+
hoe = Hoe.new 'cached_model', '1.3.1' do |p|
|
|
8
|
+
p.summary = 'An ActiveRecord abstract model that caches records in memcached'
|
|
9
|
+
p.description = 'CachedModel caches simple (by id) finds in memcached reducing the amount of work the database needs to perform for simple queries.'
|
|
10
|
+
p.author = ['Eric Hodel', 'Robert Cottrell']
|
|
11
|
+
p.email = 'eric@robotcoop.com'
|
|
12
|
+
p.url = "http://dev.robotcoop.com/#{DEV_DOC_PATH}"
|
|
13
|
+
p.rubyforge_name = 'rctools'
|
|
14
|
+
|
|
15
|
+
p.changes = File.read('History.txt').scan(/\A(=.*?)^=/m).first.first
|
|
16
|
+
|
|
17
|
+
p.extra_deps << ['memcache-client', '>= 1.1.0']
|
|
18
|
+
p.extra_deps << ['activerecord', '>= 1.14.4']
|
|
19
|
+
p.extra_deps << ['ZenTest', '>= 3.4.1']
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
SPEC = hoe.spec
|
|
23
|
+
|
|
24
|
+
require '../tasks'
|
|
25
|
+
|
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
$TESTING_CM = defined? $TESTING_CM
|
|
2
|
+
|
|
3
|
+
require 'timeout'
|
|
4
|
+
require 'memcache_util' unless $TESTING_CM
|
|
5
|
+
|
|
6
|
+
##
|
|
7
|
+
# An abstract ActiveRecord descendant that caches records in memcache and in
|
|
8
|
+
# local memory.
|
|
9
|
+
#
|
|
10
|
+
# CachedModel can store into both a local in-memory cache and in memcached.
|
|
11
|
+
# By default memcached is enabled and the local cache is disabled.
|
|
12
|
+
#
|
|
13
|
+
# Local cache use can be enabled or disabled with
|
|
14
|
+
# CachedModel::use_local_cache=. If you do enable the local cache be sure to
|
|
15
|
+
# add a before filter that calls CachedModel::cache_reset for every request.
|
|
16
|
+
#
|
|
17
|
+
# memcached use can be enabled or disabled with CachedModel::use_memcache=.
|
|
18
|
+
#
|
|
19
|
+
# You can adjust the memcached TTL with CachedModel::ttl=
|
|
20
|
+
|
|
21
|
+
class CachedModel < ActiveRecord::Base
|
|
22
|
+
|
|
23
|
+
@cache_delay_commit = {}
|
|
24
|
+
@cache_local = {}
|
|
25
|
+
@cache_transaction_level = 0
|
|
26
|
+
@use_local_cache = false
|
|
27
|
+
@use_memcache = true
|
|
28
|
+
@ttl = 60 * 15
|
|
29
|
+
|
|
30
|
+
class << self
|
|
31
|
+
|
|
32
|
+
# :stopdoc:
|
|
33
|
+
|
|
34
|
+
##
|
|
35
|
+
# The transaction commit buffer. You shouldn't touch me.
|
|
36
|
+
|
|
37
|
+
attr_accessor :cache_delay_commit
|
|
38
|
+
|
|
39
|
+
##
|
|
40
|
+
# The local process cache. You shouldn't touch me.
|
|
41
|
+
|
|
42
|
+
attr_reader :cache_local
|
|
43
|
+
|
|
44
|
+
##
|
|
45
|
+
# The transaction nesting level. You shouldn't touch me.
|
|
46
|
+
|
|
47
|
+
attr_accessor :cache_transaction_level
|
|
48
|
+
|
|
49
|
+
# :startdoc:
|
|
50
|
+
|
|
51
|
+
##
|
|
52
|
+
# Enables or disables use of the local cache.
|
|
53
|
+
#
|
|
54
|
+
# NOTE if you enable this you must call #cache_reset or you will
|
|
55
|
+
# experience uncontrollable process growth!
|
|
56
|
+
#
|
|
57
|
+
# Defaults to false.
|
|
58
|
+
|
|
59
|
+
attr_writer :use_local_cache
|
|
60
|
+
|
|
61
|
+
##
|
|
62
|
+
# Enables or disables the use of memcache.
|
|
63
|
+
|
|
64
|
+
attr_writer :use_memcache
|
|
65
|
+
|
|
66
|
+
##
|
|
67
|
+
# Memcache record time-to-live for stored records.
|
|
68
|
+
|
|
69
|
+
attr_accessor :ttl
|
|
70
|
+
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
##
|
|
74
|
+
# We only work on 1.1.2 + because Rails broke backwards compatibility
|
|
75
|
+
# despite a bug http://dev.rubyonrails.org/ticket/3704
|
|
76
|
+
|
|
77
|
+
if Rails::VERSION::MAJOR > 1 or
|
|
78
|
+
(Rails::VERSION::MAJOR == 1 and Rails::VERSION::MINOR > 1) or
|
|
79
|
+
(Rails::VERSION::MAJOR == 1 and Rails::VERSION::MINOR == 1 and
|
|
80
|
+
Rails::VERSION::TINY >= 2) then
|
|
81
|
+
|
|
82
|
+
##
|
|
83
|
+
# Override the flawed assumption ActiveRecord::Base makes about
|
|
84
|
+
# inheritance.
|
|
85
|
+
|
|
86
|
+
self.abstract_class = true
|
|
87
|
+
else
|
|
88
|
+
raise NotImplementedError, 'upgrade to Rails 1.1.2+'
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
##
|
|
92
|
+
# Invalidate the cache entry for a record. The update method will
|
|
93
|
+
# automatically invalidate the cache when updates are made through
|
|
94
|
+
# ActiveRecord model record. However, several methods update tables with
|
|
95
|
+
# direct sql queries for effeciency. These methods should call this method
|
|
96
|
+
# to invalidate the cache after making those changes.
|
|
97
|
+
#
|
|
98
|
+
# NOTE - if a SQL query updates multiple rows with one query, there is
|
|
99
|
+
# currently no way to invalidate the affected entries unless the entire
|
|
100
|
+
# cache is dumped or until the TTL expires, so try not to do this.
|
|
101
|
+
|
|
102
|
+
def self.cache_delete(klass, id)
|
|
103
|
+
key = "#{klass}:#{id}"
|
|
104
|
+
CachedModel.cache_local.delete key if CachedModel.use_local_cache?
|
|
105
|
+
Cache.delete "active_record:#{key}" if CachedModel.use_memcache?
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
##
|
|
109
|
+
# Invalidate the local process cache. This should be called from a before
|
|
110
|
+
# filter at the beginning of each request.
|
|
111
|
+
|
|
112
|
+
def self.cache_reset
|
|
113
|
+
CachedModel.cache_local.clear if CachedModel.use_local_cache?
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
##
|
|
117
|
+
# Override the find method to look for values in the cache before going to
|
|
118
|
+
# the database.
|
|
119
|
+
#--
|
|
120
|
+
# TODO Push a bunch of code down into find_by_sql where it really should
|
|
121
|
+
# belong.
|
|
122
|
+
|
|
123
|
+
def self.find(*args)
|
|
124
|
+
args[0] = args.first.to_i if args.first =~ /\A\d+\Z/
|
|
125
|
+
# Only handle simple find requests. If the request was more complicated,
|
|
126
|
+
# let the base class handle it, but store the retrieved records in the
|
|
127
|
+
# local cache in case we need them later.
|
|
128
|
+
if args.length != 1 or not Fixnum === args.first then
|
|
129
|
+
# Rails requires multiple levels of indirection to look up a record
|
|
130
|
+
# First call super
|
|
131
|
+
records = super
|
|
132
|
+
# Then, if it was a :all, just return
|
|
133
|
+
return records if args.first == :all
|
|
134
|
+
return records if RAILS_ENV == 'test'
|
|
135
|
+
case records
|
|
136
|
+
when Array then
|
|
137
|
+
records.each { |r| r.cache_store }
|
|
138
|
+
end
|
|
139
|
+
return records
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
return super
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
##
|
|
146
|
+
# Find by primary key from the cache.
|
|
147
|
+
|
|
148
|
+
def self.find_by_sql(*args)
|
|
149
|
+
return super unless args.first =~ /^SELECT \* FROM #{table_name} WHERE \(#{table_name}\.#{primary_key} = '?(\d+)'?\) +LIMIT 1/
|
|
150
|
+
|
|
151
|
+
id = $1.to_i
|
|
152
|
+
|
|
153
|
+
# Try to find the record in the local cache.
|
|
154
|
+
cache_key_local = "#{name}:#{id}"
|
|
155
|
+
if CachedModel.use_local_cache? then
|
|
156
|
+
record = CachedModel.cache_local[cache_key_local]
|
|
157
|
+
return [record] unless record.nil?
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
# Try to find the record in memcache and add it to the local cache
|
|
161
|
+
if CachedModel.use_memcache? then
|
|
162
|
+
record = Cache.get "active_record:#{cache_key_local}"
|
|
163
|
+
unless record.nil? then
|
|
164
|
+
if CachedModel.use_local_cache? then
|
|
165
|
+
CachedModel.cache_local[cache_key_local] = record
|
|
166
|
+
end
|
|
167
|
+
return [record]
|
|
168
|
+
end
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
# Fetch the record from the DB
|
|
172
|
+
records = super
|
|
173
|
+
records.first.cache_store unless records.empty? # only one
|
|
174
|
+
return records
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
##
|
|
178
|
+
# Delay updating the cache while in a transaction.
|
|
179
|
+
|
|
180
|
+
def self.transaction(*args)
|
|
181
|
+
level = CachedModel.cache_transaction_level += 1
|
|
182
|
+
CachedModel.cache_delay_commit[level] = []
|
|
183
|
+
|
|
184
|
+
value = super
|
|
185
|
+
|
|
186
|
+
waiting = CachedModel.cache_delay_commit.delete level
|
|
187
|
+
waiting.each do |obj| obj.cache_store end
|
|
188
|
+
|
|
189
|
+
return value
|
|
190
|
+
ensure
|
|
191
|
+
CachedModel.cache_transaction_level -= 1
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
##
|
|
195
|
+
# Returns true if use of the local cache is enabled.
|
|
196
|
+
|
|
197
|
+
def self.use_local_cache?
|
|
198
|
+
return @use_local_cache
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
##
|
|
202
|
+
# Returns true if use of memcache is enabled.
|
|
203
|
+
|
|
204
|
+
def self.use_memcache?
|
|
205
|
+
return @use_memcache
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
##
|
|
209
|
+
# Delete the entry from the cache now that it isn't in the DB.
|
|
210
|
+
|
|
211
|
+
def destroy
|
|
212
|
+
return super
|
|
213
|
+
ensure
|
|
214
|
+
cache_delete
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
##
|
|
218
|
+
# Invalidate the cache for this record before reloading from the DB.
|
|
219
|
+
|
|
220
|
+
def reload
|
|
221
|
+
cache_delete
|
|
222
|
+
return super
|
|
223
|
+
ensure
|
|
224
|
+
cache_store
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
##
|
|
228
|
+
# Store a new copy of ourselves into the cache.
|
|
229
|
+
|
|
230
|
+
def update
|
|
231
|
+
return super
|
|
232
|
+
ensure
|
|
233
|
+
cache_store
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
##
|
|
237
|
+
# Remove this record from the cache.
|
|
238
|
+
|
|
239
|
+
def cache_delete
|
|
240
|
+
cache_local.delete cache_key_local if CachedModel.use_local_cache?
|
|
241
|
+
Cache.delete cache_key_memcache if CachedModel.use_memcache?
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
##
|
|
245
|
+
# The local cache key for this record.
|
|
246
|
+
|
|
247
|
+
def cache_key_local
|
|
248
|
+
return "#{self.class}:#{id}"
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
##
|
|
252
|
+
# The memcache key for this record.
|
|
253
|
+
|
|
254
|
+
def cache_key_memcache
|
|
255
|
+
return "active_record:#{cache_key_local}"
|
|
256
|
+
end
|
|
257
|
+
|
|
258
|
+
##
|
|
259
|
+
# The local object cache.
|
|
260
|
+
|
|
261
|
+
def cache_local
|
|
262
|
+
return CachedModel.cache_local
|
|
263
|
+
end
|
|
264
|
+
|
|
265
|
+
##
|
|
266
|
+
# Store this record in the cache without associations. Storing associations
|
|
267
|
+
# leads to wasted cache space and hard-to-debug problems.
|
|
268
|
+
|
|
269
|
+
def cache_store
|
|
270
|
+
logger.info "Storing #{self} in the cache"
|
|
271
|
+
obj = dup
|
|
272
|
+
obj.send :instance_variable_set, :@attributes, attributes_before_type_cast
|
|
273
|
+
if CachedModel.cache_delay_commit[CachedModel.cache_transaction_level].nil? then
|
|
274
|
+
if CachedModel.use_local_cache? then
|
|
275
|
+
cache_local[cache_key_local] = obj
|
|
276
|
+
end
|
|
277
|
+
if CachedModel.use_memcache? then
|
|
278
|
+
Cache.put cache_key_memcache, obj, CachedModel.ttl
|
|
279
|
+
end
|
|
280
|
+
else
|
|
281
|
+
CachedModel.cache_delay_commit[CachedModel.cache_transaction_level] << obj
|
|
282
|
+
end
|
|
283
|
+
nil
|
|
284
|
+
end
|
|
285
|
+
|
|
286
|
+
end
|
|
287
|
+
|