typo 3.99.0
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/.DS_Store +0 -0
- data/CHANGELOG +718 -0
- data/MAINTAINERS +30 -0
- data/MIT-LICENSE +21 -0
- data/README +92 -0
- data/Rakefile +10 -0
- data/app/apis/blogger_service.rb +94 -0
- data/app/apis/meta_weblog_service.rb +197 -0
- data/app/apis/movable_type_service.rb +150 -0
- data/app/apis/typo_web_service.rb +26 -0
- data/app/controllers/accounts_controller.rb +52 -0
- data/app/controllers/admin/base_controller.rb +21 -0
- data/app/controllers/admin/blacklist_controller.rb +50 -0
- data/app/controllers/admin/cache_controller.rb +31 -0
- data/app/controllers/admin/categories_controller.rb +64 -0
- data/app/controllers/admin/comments_controller.rb +57 -0
- data/app/controllers/admin/content_controller.rb +147 -0
- data/app/controllers/admin/general_controller.rb +42 -0
- data/app/controllers/admin/pages_controller.rb +50 -0
- data/app/controllers/admin/resources_controller.rb +98 -0
- data/app/controllers/admin/sidebar_controller.rb +74 -0
- data/app/controllers/admin/textfilters_controller.rb +104 -0
- data/app/controllers/admin/themes_controller.rb +20 -0
- data/app/controllers/admin/trackbacks_controller.rb +54 -0
- data/app/controllers/admin/users_controller.rb +41 -0
- data/app/controllers/application.rb +66 -0
- data/app/controllers/articles_controller.rb +218 -0
- data/app/controllers/backend_controller.rb +11 -0
- data/app/controllers/content_controller.rb +98 -0
- data/app/controllers/live_controller.rb +10 -0
- data/app/controllers/redirect_controller.rb +16 -0
- data/app/controllers/sidebar_controller.rb +50 -0
- data/app/controllers/textfilter_controller.rb +22 -0
- data/app/controllers/theme_controller.rb +52 -0
- data/app/controllers/xml_controller.rb +111 -0
- data/app/helpers/accounts_helper.rb +2 -0
- data/app/helpers/admin/base_helper.rb +124 -0
- data/app/helpers/admin/blacklist_helper.rb +2 -0
- data/app/helpers/admin/cache_helper.rb +2 -0
- data/app/helpers/admin/comments_helper.rb +2 -0
- data/app/helpers/admin/content_helper.rb +2 -0
- data/app/helpers/admin/general_helper.rb +2 -0
- data/app/helpers/admin/pages_helper.rb +2 -0
- data/app/helpers/admin/resources_helper.rb +2 -0
- data/app/helpers/admin/sidebar_helper.rb +2 -0
- data/app/helpers/admin/textfilters_helper.rb +2 -0
- data/app/helpers/admin/themes_helper.rb +2 -0
- data/app/helpers/admin/trackbacks_helper.rb +2 -0
- data/app/helpers/admin/users_helper.rb +2 -0
- data/app/helpers/application_helper.rb +92 -0
- data/app/helpers/articles_helper.rb +163 -0
- data/app/helpers/backend_helper.rb +2 -0
- data/app/helpers/content_helper.rb +3 -0
- data/app/helpers/mail_helper.rb +6 -0
- data/app/helpers/redirect_helper.rb +2 -0
- data/app/helpers/sidebar_helper.rb +22 -0
- data/app/helpers/sidebars/plugin_helper.rb +2 -0
- data/app/helpers/text_filter_plugin_helper.rb +2 -0
- data/app/helpers/textfilter_helper.rb +2 -0
- data/app/helpers/theme_helper.rb +23 -0
- data/app/helpers/xml_helper.rb +21 -0
- data/app/models/aggregations/audioscrobbler.rb +54 -0
- data/app/models/aggregations/backpack.rb +57 -0
- data/app/models/aggregations/delicious.rb +57 -0
- data/app/models/aggregations/flickr.rb +89 -0
- data/app/models/aggregations/fortythree.rb +62 -0
- data/app/models/aggregations/magnolia.rb +81 -0
- data/app/models/aggregations/tada.rb +75 -0
- data/app/models/aggregations/technorati.rb +51 -0
- data/app/models/aggregations/upcoming.rb +74 -0
- data/app/models/article.rb +211 -0
- data/app/models/blacklist_pattern.rb +22 -0
- data/app/models/blog.rb +162 -0
- data/app/models/blog_sweeper.rb +23 -0
- data/app/models/category.rb +62 -0
- data/app/models/comment.rb +76 -0
- data/app/models/config_manager.rb +80 -0
- data/app/models/content.rb +222 -0
- data/app/models/content_observer.rb +5 -0
- data/app/models/content_state/base.rb +51 -0
- data/app/models/content_state/draft.rb +40 -0
- data/app/models/content_state/factory.rb +16 -0
- data/app/models/content_state/just_published.rb +47 -0
- data/app/models/content_state/new.rb +45 -0
- data/app/models/content_state/publication_pending.rb +43 -0
- data/app/models/content_state/published.rb +35 -0
- data/app/models/email_notifier.rb +9 -0
- data/app/models/notification_mailer.rb +34 -0
- data/app/models/page.rb +20 -0
- data/app/models/page_cache.rb +29 -0
- data/app/models/ping.rb +129 -0
- data/app/models/redirect.rb +3 -0
- data/app/models/resource.rb +76 -0
- data/app/models/sidebar.rb +32 -0
- data/app/models/simple_cache.rb +37 -0
- data/app/models/tag.rb +63 -0
- data/app/models/text_filter.rb +111 -0
- data/app/models/theme.rb +44 -0
- data/app/models/trackback.rb +51 -0
- data/app/models/trigger.rb +31 -0
- data/app/models/user.rb +113 -0
- data/app/models/web_notifier.rb +7 -0
- data/app/views/accounts/login.rhtml +24 -0
- data/app/views/accounts/logout.rhtml +12 -0
- data/app/views/accounts/signup.rhtml +26 -0
- data/app/views/accounts/welcome.rhtml +13 -0
- data/app/views/admin/base/_recent_comments.rhtml +10 -0
- data/app/views/admin/base/_recent_trackbacks.rhtml +10 -0
- data/app/views/admin/blacklist/_blacklist_patterns.rhtml +16 -0
- data/app/views/admin/blacklist/_form.rhtml +15 -0
- data/app/views/admin/blacklist/_quick_post.rhtml +16 -0
- data/app/views/admin/blacklist/destroy.rhtml +10 -0
- data/app/views/admin/blacklist/edit.rhtml +14 -0
- data/app/views/admin/blacklist/list.rhtml +13 -0
- data/app/views/admin/cache/list.rhtml +8 -0
- data/app/views/admin/categories/_categories.rhtml +14 -0
- data/app/views/admin/categories/_form.rhtml +7 -0
- data/app/views/admin/categories/_quick_post.rhtml +11 -0
- data/app/views/admin/categories/destroy.rhtml +10 -0
- data/app/views/admin/categories/edit.rhtml +13 -0
- data/app/views/admin/categories/list.rhtml +15 -0
- data/app/views/admin/categories/reorder.rhtml +9 -0
- data/app/views/admin/categories/show.rhtml +18 -0
- data/app/views/admin/comments/_form.rhtml +19 -0
- data/app/views/admin/comments/comments.rhtml +4 -0
- data/app/views/admin/comments/destroy.rhtml +11 -0
- data/app/views/admin/comments/edit.rhtml +18 -0
- data/app/views/admin/comments/list.rhtml +31 -0
- data/app/views/admin/comments/new.rhtml +15 -0
- data/app/views/admin/comments/show.rhtml +10 -0
- data/app/views/admin/content/_articles.rhtml +20 -0
- data/app/views/admin/content/_attachment.rhtml +17 -0
- data/app/views/admin/content/_form.rhtml +51 -0
- data/app/views/admin/content/_pages.rhtml +3 -0
- data/app/views/admin/content/_quick_post.rhtml +20 -0
- data/app/views/admin/content/_show_categories.rhtml +9 -0
- data/app/views/admin/content/_show_resources.rhtml +9 -0
- data/app/views/admin/content/destroy.rhtml +11 -0
- data/app/views/admin/content/edit.rhtml +28 -0
- data/app/views/admin/content/list.rhtml +20 -0
- data/app/views/admin/content/new.rhtml +27 -0
- data/app/views/admin/content/preview.rhtml +3 -0
- data/app/views/admin/content/show.rhtml +25 -0
- data/app/views/admin/general/index.rhtml +216 -0
- data/app/views/admin/general/update_database.rhtml +44 -0
- data/app/views/admin/pages/_form.rhtml +19 -0
- data/app/views/admin/pages/_pages.rhtml +18 -0
- data/app/views/admin/pages/_quick_post.rhtml +21 -0
- data/app/views/admin/pages/destroy.rhtml +11 -0
- data/app/views/admin/pages/edit.rhtml +28 -0
- data/app/views/admin/pages/list.rhtml +13 -0
- data/app/views/admin/pages/new.rhtml +24 -0
- data/app/views/admin/pages/preview.rhtml +1 -0
- data/app/views/admin/pages/show.rhtml +14 -0
- data/app/views/admin/resources/_itunes_category_add.rhtml +11 -0
- data/app/views/admin/resources/_itunes_category_edit.rhtml +32 -0
- data/app/views/admin/resources/_metadata_add.rhtml +22 -0
- data/app/views/admin/resources/_metadata_edit.rhtml +22 -0
- data/app/views/admin/resources/_mime_edit.rhtml +8 -0
- data/app/views/admin/resources/_pages.rhtml +3 -0
- data/app/views/admin/resources/_resources.rhtml +40 -0
- data/app/views/admin/resources/destroy.rhtml +11 -0
- data/app/views/admin/resources/list.rhtml +9 -0
- data/app/views/admin/resources/new.rhtml +12 -0
- data/app/views/admin/sidebar/_active.rhtml +14 -0
- data/app/views/admin/sidebar/_actives.rhtml +9 -0
- data/app/views/admin/sidebar/_available.rhtml +5 -0
- data/app/views/admin/sidebar/_availables.rhtml +5 -0
- data/app/views/admin/sidebar/_publish.rhtml +2 -0
- data/app/views/admin/sidebar/_target.rhtml +1 -0
- data/app/views/admin/sidebar/index.rhtml +34 -0
- data/app/views/admin/sidebar/publish.rjs +6 -0
- data/app/views/admin/sidebar/remove.rjs +5 -0
- data/app/views/admin/sidebar/set_active.rjs +10 -0
- data/app/views/admin/textfilters/_form.rhtml +45 -0
- data/app/views/admin/textfilters/_macros.rhtml +16 -0
- data/app/views/admin/textfilters/_textfilters.rhtml +20 -0
- data/app/views/admin/textfilters/destroy.rhtml +10 -0
- data/app/views/admin/textfilters/edit.rhtml +17 -0
- data/app/views/admin/textfilters/list.rhtml +15 -0
- data/app/views/admin/textfilters/macro_help.rhtml +3 -0
- data/app/views/admin/textfilters/new.rhtml +15 -0
- data/app/views/admin/textfilters/preview.rhtml +3 -0
- data/app/views/admin/textfilters/show.rhtml +34 -0
- data/app/views/admin/textfilters/show_help.rhtml +8 -0
- data/app/views/admin/themes/index.rhtml +12 -0
- data/app/views/admin/trackbacks/_form.rhtml +19 -0
- data/app/views/admin/trackbacks/destroy.rhtml +6 -0
- data/app/views/admin/trackbacks/edit.rhtml +14 -0
- data/app/views/admin/trackbacks/list.rhtml +31 -0
- data/app/views/admin/trackbacks/new.rhtml +15 -0
- data/app/views/admin/trackbacks/show.rhtml +14 -0
- data/app/views/admin/users/_form.rhtml +48 -0
- data/app/views/admin/users/_user.rhtml +9 -0
- data/app/views/admin/users/destroy.rhtml +14 -0
- data/app/views/admin/users/edit.rhtml +14 -0
- data/app/views/admin/users/list.rhtml +9 -0
- data/app/views/admin/users/new.rhtml +15 -0
- data/app/views/admin/users/show.rhtml +18 -0
- data/app/views/articles/_article.rhtml +4 -0
- data/app/views/articles/_comment.rhtml +7 -0
- data/app/views/articles/_comment_box.rhtml +43 -0
- data/app/views/articles/_comment_error.rhtml +1 -0
- data/app/views/articles/_trackback.rhtml +7 -0
- data/app/views/articles/archives.rhtml +22 -0
- data/app/views/articles/comment_preview.rhtml +3 -0
- data/app/views/articles/error.rhtml +3 -0
- data/app/views/articles/groupings.rhtml +14 -0
- data/app/views/articles/index.rhtml +11 -0
- data/app/views/articles/read.rhtml +70 -0
- data/app/views/articles/trackback.rxml +5 -0
- data/app/views/articles/view_page.rhtml +3 -0
- data/app/views/layouts/accounts.rhtml +22 -0
- data/app/views/layouts/administration.rhtml +75 -0
- data/app/views/layouts/sidebar.rhtml +40 -0
- data/app/views/live/search.rhtml +10 -0
- data/app/views/notification_mailer/_mail_footer.rhtml +7 -0
- data/app/views/notification_mailer/_mail_header.rhtml +1 -0
- data/app/views/notification_mailer/article.rhtml +6 -0
- data/app/views/notification_mailer/comment.rhtml +11 -0
- data/app/views/notification_mailer/trackback.rhtml +3 -0
- data/app/views/settings/done.rhtml +2 -0
- data/app/views/settings/install.rhtml +12 -0
- data/app/views/shared/_search.rhtml +10 -0
- data/app/views/sidebar/_row.rhtml +1 -0
- data/app/views/sidebar/_sidebar.rhtml +5 -0
- data/app/views/sidebar/display_plugins.rhtml +5 -0
- data/app/views/sidebar/show.rhtml +1 -0
- data/app/views/theme/static_view_test.rhtml +1 -0
- data/app/views/xml/_atom10_item_article.rxml +39 -0
- data/app/views/xml/_atom10_item_comment.rxml +13 -0
- data/app/views/xml/_atom10_item_trackback.rxml +16 -0
- data/app/views/xml/_itunes_item_resource.rxml +30 -0
- data/app/views/xml/_rss20_item_article.rxml +35 -0
- data/app/views/xml/_rss20_item_comment.rxml +7 -0
- data/app/views/xml/_rss20_item_trackback.rxml +7 -0
- data/app/views/xml/atom10_feed.rxml +18 -0
- data/app/views/xml/itunes_feed.rxml +29 -0
- data/app/views/xml/rsd.rxml +19 -0
- data/app/views/xml/rss20_feed.rxml +18 -0
- data/bin/typo +12 -0
- data/cache/META/DATA/ACTION_PARAM/localhost.3000/articles/index/.cache +540 -0
- data/cache/META/DATA/ACTION_PARAM/localhost.3000/articles/permalink/day=09&month=09&title=i-need-a-new-keyboard-and-mouse&year=2005.cache +414 -0
- data/cache/META/META/ACTION_PARAM/localhost.3000/articles/index/.cache +3 -0
- data/cache/META/META/ACTION_PARAM/localhost.3000/articles/permalink/day=09&month=09&title=i-need-a-new-keyboard-and-mouse&year=2005.cache +3 -0
- data/components/plugins/sidebars/aimpresence/content.rhtml +4 -0
- data/components/plugins/sidebars/aimpresence_controller.rb +10 -0
- data/components/plugins/sidebars/amazon/content.rhtml +4 -0
- data/components/plugins/sidebars/amazon_controller.rb +17 -0
- data/components/plugins/sidebars/archives/content.rhtml +11 -0
- data/components/plugins/sidebars/archives_controller.rb +24 -0
- data/components/plugins/sidebars/audioscrobbler/content.rhtml +10 -0
- data/components/plugins/sidebars/audioscrobbler_controller.rb +10 -0
- data/components/plugins/sidebars/backpack/content.rhtml +12 -0
- data/components/plugins/sidebars/backpack_controller.rb +17 -0
- data/components/plugins/sidebars/category/content.rhtml +10 -0
- data/components/plugins/sidebars/category_controller.rb +13 -0
- data/components/plugins/sidebars/delicious/content.rhtml +20 -0
- data/components/plugins/sidebars/delicious_controller.rb +29 -0
- data/components/plugins/sidebars/flickr/content.rhtml +15 -0
- data/components/plugins/sidebars/flickr_controller.rb +16 -0
- data/components/plugins/sidebars/fortythree/content.rhtml +8 -0
- data/components/plugins/sidebars/fortythree_controller.rb +12 -0
- data/components/plugins/sidebars/fortythreeplaces/content.rhtml +8 -0
- data/components/plugins/sidebars/fortythreeplaces_controller.rb +12 -0
- data/components/plugins/sidebars/magnolia/content.rhtml +12 -0
- data/components/plugins/sidebars/magnolia_controller.rb +17 -0
- data/components/plugins/sidebars/recent_comments/content.rhtml +12 -0
- data/components/plugins/sidebars/recent_comments_controller.rb +23 -0
- data/components/plugins/sidebars/static/content.rhtml +2 -0
- data/components/plugins/sidebars/static_controller.rb +23 -0
- data/components/plugins/sidebars/tada/content.rhtml +12 -0
- data/components/plugins/sidebars/tada_controller.rb +12 -0
- data/components/plugins/sidebars/tag/content.rhtml +8 -0
- data/components/plugins/sidebars/tag_controller.rb +18 -0
- data/components/plugins/sidebars/technorati/content.rhtml +8 -0
- data/components/plugins/sidebars/technorati_controller.rb +12 -0
- data/components/plugins/sidebars/upcoming/content.rhtml +8 -0
- data/components/plugins/sidebars/upcoming_controller.rb +11 -0
- data/components/plugins/sidebars/xbox/content.rhtml +2 -0
- data/components/plugins/sidebars/xbox_controller.rb +6 -0
- data/components/plugins/sidebars/xml/content.rhtml +12 -0
- data/components/plugins/sidebars/xml_controller.rb +11 -0
- data/components/plugins/textfilters/amazon_controller.rb +39 -0
- data/components/plugins/textfilters/code_controller.rb +59 -0
- data/components/plugins/textfilters/flickr_controller.rb +75 -0
- data/components/plugins/textfilters/htmlfilter_controller.rb +8 -0
- data/components/plugins/textfilters/lightbox_controller.rb +122 -0
- data/components/plugins/textfilters/macropost_controller.rb +14 -0
- data/components/plugins/textfilters/macropre_controller.rb +14 -0
- data/components/plugins/textfilters/markdown_controller.rb +32 -0
- data/components/plugins/textfilters/none_controller.rb +8 -0
- data/components/plugins/textfilters/smartypants_controller.rb +8 -0
- data/components/plugins/textfilters/sparkline_controller.rb +87 -0
- data/components/plugins/textfilters/textile_controller.rb +8 -0
- data/components/sidebars/README +36 -0
- data/config/boot.rb +44 -0
- data/config/database.yml +17 -0
- data/config/database.yml-pgsql +17 -0
- data/config/database.yml.example +18 -0
- data/config/environment.rb +145 -0
- data/config/environments/development.rb +17 -0
- data/config/environments/production.rb +19 -0
- data/config/environments/test.rb +26 -0
- data/config/iTunes.yml +72 -0
- data/config/lighttpd.conf +46 -0
- data/config/mail.yml +8 -0
- data/config/mail.yml.example +8 -0
- data/config/routes.rb +92 -0
- data/db/DB +0 -0
- data/db/DB.test +0 -0
- data/db/converters/README +14 -0
- data/db/converters/feed.rb +68 -0
- data/db/converters/mt-import.rb +72 -0
- data/db/converters/mt3.rb +172 -0
- data/db/converters/rss.rb +67 -0
- data/db/converters/s9y.rb +182 -0
- data/db/converters/textpattern.rb +137 -0
- data/db/converters/wordpress.rb +187 -0
- data/db/development_structure.sql +691 -0
- data/db/migrate/001_initial_schema.rb +127 -0
- data/db/migrate/002_add_user_email.rb +17 -0
- data/db/migrate/003_add_article_user_id.rb +20 -0
- data/db/migrate/004_add_sidebars.rb +31 -0
- data/db/migrate/005_add_cache_table.rb +20 -0
- data/db/migrate/006_add_pages.rb +17 -0
- data/db/migrate/007_add_permalink.rb +36 -0
- data/db/migrate/008_add_page_title.rb +9 -0
- data/db/migrate/009_add_article_guid.rb +10 -0
- data/db/migrate/010_add_tags.rb +19 -0
- data/db/migrate/011_add_article_id.rb +17 -0
- data/db/migrate/012_enlarge_settings.rb +11 -0
- data/db/migrate/013_add_textfilters.rb +33 -0
- data/db/migrate/014_move_text_filter_to_text_filter_id.rb +43 -0
- data/db/migrate/015_convert_mysql_to_innodb.rb +19 -0
- data/db/migrate/016_fix_is_primary_postgres.rb +19 -0
- data/db/migrate/017_add_comment_user_id.rb +23 -0
- data/db/migrate/018_add_guids.rb +13 -0
- data/db/migrate/019_add_whiteboards_to_content.rb +15 -0
- data/db/migrate/020_superclass_articles.rb +167 -0
- data/db/migrate/021_superclass_comments.rb +94 -0
- data/db/migrate/022_superclass_trackbacks.rb +71 -0
- data/db/migrate/023_superclass_pages.rb +64 -0
- data/db/migrate/024_cleanup_contents.rb +54 -0
- data/db/migrate/025_add_itunes_metadata.rb +29 -0
- data/db/migrate/026_add_redirect_table.rb +13 -0
- data/db/migrate/027_set_comment_published_flag.rb +19 -0
- data/db/migrate/028_rename_redirect_to.rb +12 -0
- data/db/migrate/029_add_user_notification.rb +29 -0
- data/db/migrate/030_index_sessions.rb +9 -0
- data/db/migrate/031_add_notifications_table.rb +14 -0
- data/db/migrate/032_add_jabber_notification.rb +11 -0
- data/db/migrate/033_add_count_caching.rb +34 -0
- data/db/migrate/034_boolify_published.rb +36 -0
- data/db/migrate/035_boolify_content_allow_foo.rb +36 -0
- data/db/migrate/036_add_tag_display_name.rb +53 -0
- data/db/migrate/037_enlarge_ip_field.rb +9 -0
- data/db/migrate/038_add_blog_object.rb +52 -0
- data/db/migrate/039_serialize_blog_attributes.rb +160 -0
- data/db/migrate/040_attach_content_to_blog.rb +28 -0
- data/db/migrate/041_fixup_default_sidebars.rb +18 -0
- data/db/migrate/042_remove_sidebar_staged_config.rb +22 -0
- data/db/migrate/043_create_triggers.rb +14 -0
- data/db/migrate/044_add_published_at_to_content.rb +18 -0
- data/db/migrate/045_fix_contents_published_default.rb +9 -0
- data/db/migrate/046_fixup_forthcoming_publications.rb +40 -0
- data/db/schema.mysql-v3.sql +218 -0
- data/db/schema.mysql.sql +218 -0
- data/db/schema.postgresql.sql +218 -0
- data/db/schema.rb +169 -0
- data/db/schema.sqlite.sql +218 -0
- data/db/schema.sqlserver.sql +232 -0
- data/db/schema_version +1 -0
- data/db/scripts/fix_permalinks.rb +5 -0
- data/db/updates/update.168.to.200.mysql.sql +33 -0
- data/db/updates/update.168.to.200.psql.sql +30 -0
- data/doc/Installer.txt +55 -0
- data/doc/README_FOR_APP +2 -0
- data/installer/rails-installer.rb +488 -0
- data/installer/rails_installer_defaults.yml +4 -0
- data/installer/typo-installer.rb +35 -0
- data/lib/backpack_api.rb +202 -0
- data/lib/bare_migration.rb +142 -0
- data/lib/email_notify.rb +32 -0
- data/lib/format.rb +19 -0
- data/lib/generators/sidebar/sidebar_generator.rb +13 -0
- data/lib/generators/sidebar/templates/components/plugins/sidebars/controller_template.rb +20 -0
- data/lib/generators/sidebar/templates/components/plugins/sidebars/views/content_template.rhtml +4 -0
- data/lib/jabber_notify.rb +32 -0
- data/lib/login_system.rb +85 -0
- data/lib/migrator.rb +28 -0
- data/lib/rails_patch/active_record.rb +36 -0
- data/lib/rails_patch/components.rb +14 -0
- data/lib/sidebars/component_plugin.rb +5 -0
- data/lib/sidebars/plugin.rb +241 -0
- data/lib/spam_protection.rb +126 -0
- data/lib/tasks/release.rake +171 -0
- data/lib/tasks/schemas.rake +6 -0
- data/lib/tasks/sweep_cache.rake +6 -0
- data/lib/text_filter_plugin.rb +97 -0
- data/lib/transforms.rb +26 -0
- data/lib/typo_guid.rb +10 -0
- data/lib/typo_plugins.rb +19 -0
- data/lib/typo_version.rb +1 -0
- data/lib/xmlrpc_fix.rb +13 -0
- data/public/.htaccess +34 -0
- data/public/404.html +8 -0
- data/public/500.html +8 -0
- data/public/dispatch.cgi +10 -0
- data/public/dispatch.fcgi +24 -0
- data/public/dispatch.rb +10 -0
- data/public/favicon.ico +0 -0
- data/public/images/admin/dot-vertical.gif +0 -0
- data/public/images/admin/h-tile.gif +0 -0
- data/public/images/admin/hdr-tile.gif +0 -0
- data/public/images/admin/toggle.gif +0 -0
- data/public/images/bg.jpg +0 -0
- data/public/images/bgcolor.jpg +0 -0
- data/public/images/body_bg.png +0 -0
- data/public/images/branding_bg.png +0 -0
- data/public/images/branding_logo.png +0 -0
- data/public/images/checked.gif +0 -0
- data/public/images/content_bg.png +0 -0
- data/public/images/delete.png +0 -0
- data/public/images/footer.jpg +0 -0
- data/public/images/footer.png +0 -0
- data/public/images/global_bg.png +0 -0
- data/public/images/global_logo.png +0 -0
- data/public/images/go.png +0 -0
- data/public/images/header.jpg +0 -0
- data/public/images/loading.gif +0 -0
- data/public/images/not-checked copy.gif +0 -0
- data/public/images/not-checked.gif +0 -0
- data/public/images/overlay.png +0 -0
- data/public/images/powered.gif +0 -0
- data/public/images/section_bg.png +0 -0
- data/public/images/sections_bg.png +0 -0
- data/public/images/sections_hilite.png +0 -0
- data/public/images/sections_hover.png +0 -0
- data/public/images/spinner-blue.gif +0 -0
- data/public/images/spinner.gif +0 -0
- data/public/images/spot-header.gif +0 -0
- data/public/images/spot-title.gif +0 -0
- data/public/images/x-ed.gif +0 -0
- data/public/javascripts/application.js +2 -0
- data/public/javascripts/controls.js +815 -0
- data/public/javascripts/cookies.js +60 -0
- data/public/javascripts/dragdrop.js +724 -0
- data/public/javascripts/effects.js +953 -0
- data/public/javascripts/lightbox.js +348 -0
- data/public/javascripts/prototype.js +1985 -0
- data/public/javascripts/scriptaculous.js +47 -0
- data/public/javascripts/slider.js +258 -0
- data/public/javascripts/typo.js +85 -0
- data/public/robots.txt +2 -0
- data/public/stylesheets/administration.css +585 -0
- data/public/stylesheets/lightbox.css +22 -0
- data/public/stylesheets/rss.css +54 -0
- data/public/stylesheets/user-styles.css +0 -0
- data/script/about +3 -0
- data/script/benchmarker +19 -0
- data/script/breakpointer +3 -0
- data/script/console +3 -0
- data/script/destroy +3 -0
- data/script/generate +3 -0
- data/script/lighttpd +2 -0
- data/script/logreport +79 -0
- data/script/migrate +31 -0
- data/script/performance/benchmarker +3 -0
- data/script/performance/profiler +3 -0
- data/script/plugin +3 -0
- data/script/process/reaper +3 -0
- data/script/process/spawner +3 -0
- data/script/process/spinner +3 -0
- data/script/profiler +34 -0
- data/script/runner +3 -0
- data/script/server +3 -0
- data/script/spacecheck +40 -0
- data/test/fixtures/articles_categories.yml +31 -0
- data/test/fixtures/articles_tags.yml +19 -0
- data/test/fixtures/blacklist_patterns.yml +10 -0
- data/test/fixtures/blogs.yml +74 -0
- data/test/fixtures/categories.yml +35 -0
- data/test/fixtures/contents.yml +297 -0
- data/test/fixtures/notification_mailer/article +3 -0
- data/test/fixtures/notification_mailer/comment +3 -0
- data/test/fixtures/notification_mailer/trackback +3 -0
- data/test/fixtures/notifications.yml +0 -0
- data/test/fixtures/page_caches.yml +7 -0
- data/test/fixtures/redirects.yml +13 -0
- data/test/fixtures/resources.yml +24 -0
- data/test/fixtures/sidebars.yml +5 -0
- data/test/fixtures/tags.yml +13 -0
- data/test/fixtures/text_filters.yml +42 -0
- data/test/fixtures/triggers.yml +1 -0
- data/test/fixtures/users.yml +56 -0
- data/test/functional/accounts_controller_test.rb +82 -0
- data/test/functional/admin/article_preview_test.rb +67 -0
- data/test/functional/admin/blacklist_controller_test.rb +63 -0
- data/test/functional/admin/categories_controller_test.rb +112 -0
- data/test/functional/admin/comments_controller_test.rb +78 -0
- data/test/functional/admin/content_controller_test.rb +234 -0
- data/test/functional/admin/general_controller_test.rb +26 -0
- data/test/functional/admin/pages_controller_test.rb +103 -0
- data/test/functional/admin/resources_controller_test.rb +49 -0
- data/test/functional/admin/textfilters_controller_test.rb +29 -0
- data/test/functional/admin/themes_controller_test.rb +34 -0
- data/test/functional/admin/trackbacks_controller_test.rb +76 -0
- data/test/functional/admin/users_controller_test.rb +72 -0
- data/test/functional/articles_controller_test.rb +525 -0
- data/test/functional/backend_controller_test.rb +273 -0
- data/test/functional/redirect_controller_test.rb +40 -0
- data/test/functional/textfilter_controller_test.rb +275 -0
- data/test/functional/theme_controller_test.rb +45 -0
- data/test/functional/xml_controller_test.rb +353 -0
- data/test/mocks/test/dns_mock.rb +13 -0
- data/test/mocks/test/flickr_mock.rb +30 -0
- data/test/mocks/test/http_mock.rb +38 -0
- data/test/mocks/test/theme_mock.rb +5 -0
- data/test/mocks/test/xmlrpc_mock.rb +27 -0
- data/test/mocks/themes/123-numbers-in-path/about.markdown +0 -0
- data/test/mocks/themes/CamelCaseDirectory/about.markdown +0 -0
- data/test/mocks/themes/azure/about.markdown +5 -0
- data/test/mocks/themes/azure/layouts/default.rhtml +50 -0
- data/test/mocks/themes/azure/preview.png +0 -0
- data/test/mocks/themes/azure/views/theme/static_view_test.rhtml +1 -0
- data/test/mocks/themes/i-have-special-chars/about.markdown +0 -0
- data/test/test_helper.rb +95 -0
- data/test/unit/article_test.rb +245 -0
- data/test/unit/assumptions_tests.rb +54 -0
- data/test/unit/audioscrobbler_test.rb +132 -0
- data/test/unit/blacklist_pattern_test.rb +14 -0
- data/test/unit/blog_test.rb +83 -0
- data/test/unit/category_test.rb +37 -0
- data/test/unit/comment_test.rb +117 -0
- data/test/unit/configuration_test.rb +21 -0
- data/test/unit/content_state/factory_test.rb +84 -0
- data/test/unit/delicious_test.rb +96 -0
- data/test/unit/flickr_test.rb +134 -0
- data/test/unit/fortythree_test.rb +66 -0
- data/test/unit/magnolia_test.rb +87 -0
- data/test/unit/metafragment_test.rb +63 -0
- data/test/unit/notification_mailer_test.rb +55 -0
- data/test/unit/observer_test.rb +40 -0
- data/test/unit/page_cache_test.rb +34 -0
- data/test/unit/page_test.rb +25 -0
- data/test/unit/ping_test.rb +111 -0
- data/test/unit/redirect_test.rb +19 -0
- data/test/unit/resource_test.rb +71 -0
- data/test/unit/sidebar_test.rb +14 -0
- data/test/unit/tag_test.rb +66 -0
- data/test/unit/text_filter_test.rb +126 -0
- data/test/unit/theme_test.rb +44 -0
- data/test/unit/trackback_test.rb +45 -0
- data/test/unit/trigger_test.rb +40 -0
- data/test/unit/user_test.rb +111 -0
- data/themes/azure/about.markdown +5 -0
- data/themes/azure/images/bg-tile.gif +0 -0
- data/themes/azure/images/bracket.gif +0 -0
- data/themes/azure/images/bullet.gif +0 -0
- data/themes/azure/images/hdr.gif +0 -0
- data/themes/azure/images/q-close.gif +0 -0
- data/themes/azure/images/q-open.gif +0 -0
- data/themes/azure/images/sbar-tile.gif +0 -0
- data/themes/azure/images/spinner.gif +0 -0
- data/themes/azure/images/xlink.gif +0 -0
- data/themes/azure/layouts/default.rhtml +50 -0
- data/themes/azure/preview.png +0 -0
- data/themes/azure/stylesheets/azure.css +436 -0
- data/themes/azure/stylesheets/print.css +30 -0
- data/themes/azure/views/theme/static_view_test.rhtml +1 -0
- data/vendor/akismet/Akismet.rb +140 -0
- data/vendor/bluecloth/CHANGES +366 -0
- data/vendor/bluecloth/LICENSE +340 -0
- data/vendor/bluecloth/README +99 -0
- data/vendor/bluecloth/bin/bluecloth +83 -0
- data/vendor/bluecloth/install.rb +150 -0
- data/vendor/bluecloth/lib/bluecloth.rb +1144 -0
- data/vendor/bluecloth/test.rb +117 -0
- data/vendor/bluecloth/tests/00_Class.tests.rb +71 -0
- data/vendor/bluecloth/tests/05_Markdown.tests.rb +1527 -0
- data/vendor/bluecloth/tests/10_Bug.tests.rb +57 -0
- data/vendor/bluecloth/tests/15_Contrib.tests.rb +132 -0
- data/vendor/bluecloth/tests/bctestcase.rb +274 -0
- data/vendor/bluecloth/tests/data/antsugar.txt +34 -0
- data/vendor/bluecloth/tests/data/ml-announce.txt +17 -0
- data/vendor/bluecloth/tests/data/re-overflow.txt +67 -0
- data/vendor/bluecloth/tests/data/re-overflow2.txt +281 -0
- data/vendor/bluecloth/utils.rb +553 -0
- data/vendor/flickr/Rakefile +36 -0
- data/vendor/flickr/flickr.rb +490 -0
- data/vendor/flickr/index.html +129 -0
- data/vendor/flickr/test_flickr.rb +173 -0
- data/vendor/jabber4r/CHANGES +8 -0
- data/vendor/jabber4r/LICENSE.txt +12 -0
- data/vendor/jabber4r/README +180 -0
- data/vendor/jabber4r/Rakefile.rb +143 -0
- data/vendor/jabber4r/lib/jabber4r/jabber4r.rb +22 -0
- data/vendor/jabber4r/lib/jabber4r/jid.rb +93 -0
- data/vendor/jabber4r/lib/jabber4r/protocol.rb +1384 -0
- data/vendor/jabber4r/lib/jabber4r/rexml_1.8_patch.rb +16 -0
- data/vendor/jabber4r/lib/jabber4r/roster.rb +322 -0
- data/vendor/jabber4r/lib/jabber4r/session.rb +615 -0
- data/vendor/jabber4r/lib/jabber4r/vcard.rb +42 -0
- data/vendor/plugins/expiring_action_cache/init.rb +2 -0
- data/vendor/plugins/expiring_action_cache/lib/actionparamcache.rb +113 -0
- data/vendor/plugins/expiring_action_cache/lib/metafragment.rb +46 -0
- data/vendor/plugins/upload_progress/CHANGELOG +3 -0
- data/vendor/plugins/upload_progress/MIT-LICENSE +20 -0
- data/vendor/plugins/upload_progress/README +45 -0
- data/vendor/plugins/upload_progress/Rakefile +23 -0
- data/vendor/plugins/upload_progress/init.rb +7 -0
- data/vendor/plugins/upload_progress/lib/multipart_progress.rb +169 -0
- data/vendor/plugins/upload_progress/lib/progress.rb +145 -0
- data/vendor/plugins/upload_progress/lib/upload_progress.rb +303 -0
- data/vendor/plugins/upload_progress/lib/upload_progress_helper.rb +424 -0
- data/vendor/plugins/upload_progress/public/stylesheets/upload_progress.css +21 -0
- data/vendor/plugins/upload_progress/test/multipart_progress_testx.rb +364 -0
- data/vendor/plugins/upload_progress/test/upload_progress_helper_testx.rb +134 -0
- data/vendor/plugins/upload_progress/test/upload_progress_testx.rb +88 -0
- data/vendor/redcloth/RedCloth.gemspec +52 -0
- data/vendor/redcloth/bin/redcloth +3 -0
- data/vendor/redcloth/doc/CHANGELOG +160 -0
- data/vendor/redcloth/doc/COPYING +25 -0
- data/vendor/redcloth/doc/README +106 -0
- data/vendor/redcloth/doc/REFERENCE +216 -0
- data/vendor/redcloth/doc/make.rb +359 -0
- data/vendor/redcloth/install.rb +1032 -0
- data/vendor/redcloth/lib/redcloth.rb +1130 -0
- data/vendor/redcloth/run-tests.rb +28 -0
- data/vendor/redcloth/setup.rb +1376 -0
- data/vendor/redcloth/tests/code.yml +105 -0
- data/vendor/redcloth/tests/hard_breaks.yml +26 -0
- data/vendor/redcloth/tests/images.yml +171 -0
- data/vendor/redcloth/tests/instiki.yml +39 -0
- data/vendor/redcloth/tests/links.yml +155 -0
- data/vendor/redcloth/tests/lists.yml +77 -0
- data/vendor/redcloth/tests/markdown.yml +218 -0
- data/vendor/redcloth/tests/poignant.yml +64 -0
- data/vendor/redcloth/tests/table.yml +198 -0
- data/vendor/redcloth/tests/textism.yml +406 -0
- data/vendor/ruby-mp3info/lib/mp3info.rb +720 -0
- data/vendor/rubypants/README +114 -0
- data/vendor/rubypants/Rakefile +55 -0
- data/vendor/rubypants/html/classes/RubyPants.html +924 -0
- data/vendor/rubypants/html/created.rid +1 -0
- data/vendor/rubypants/html/files/README.html +248 -0
- data/vendor/rubypants/html/files/rubypants_rb.html +125 -0
- data/vendor/rubypants/html/fr_class_index.html +27 -0
- data/vendor/rubypants/html/fr_file_index.html +28 -0
- data/vendor/rubypants/html/fr_method_index.html +38 -0
- data/vendor/rubypants/html/index.html +24 -0
- data/vendor/rubypants/html/rdoc-style.css +172 -0
- data/vendor/rubypants/install.rb +9 -0
- data/vendor/rubypants/rubypants.rb +490 -0
- data/vendor/rubypants/test_rubypants.rb +162 -0
- data/vendor/sparklines/README.txt +47 -0
- data/vendor/sparklines/USAGE +14 -0
- data/vendor/sparklines/lib/sparklines.rb +435 -0
- data/vendor/sparklines/samples/sparklinestest.rb +26 -0
- data/vendor/sparklines/sparklines_generator.rb +9 -0
- data/vendor/sparklines/templates/sparklines_controller.rb +30 -0
- data/vendor/sparklines/templates/sparklines_helper.rb +30 -0
- data/vendor/syntax/LICENSE +27 -0
- data/vendor/syntax/NEWS +16 -0
- data/vendor/syntax/README +38 -0
- data/vendor/syntax/Rakefile +194 -0
- data/vendor/syntax/api/classes/Syntax.html +173 -0
- data/vendor/syntax/api/classes/Syntax/Convertors.html +91 -0
- data/vendor/syntax/api/classes/Syntax/Convertors/Abstract.html +159 -0
- data/vendor/syntax/api/classes/Syntax/Convertors/HTML.html +149 -0
- data/vendor/syntax/api/classes/Syntax/Default.html +123 -0
- data/vendor/syntax/api/classes/Syntax/Ruby.html +319 -0
- data/vendor/syntax/api/classes/Syntax/Token.html +151 -0
- data/vendor/syntax/api/classes/Syntax/Tokenizer.html +324 -0
- data/vendor/syntax/api/classes/Syntax/Version.html +109 -0
- data/vendor/syntax/api/classes/Syntax/XML.html +205 -0
- data/vendor/syntax/api/classes/Syntax/YAML.html +189 -0
- data/vendor/syntax/api/created.rid +1 -0
- data/vendor/syntax/api/files/README.html +155 -0
- data/vendor/syntax/api/files/lib/syntax/common_rb.html +96 -0
- data/vendor/syntax/api/files/lib/syntax/convertors/abstract_rb.html +96 -0
- data/vendor/syntax/api/files/lib/syntax/convertors/html_rb.html +96 -0
- data/vendor/syntax/api/files/lib/syntax/lang/ruby_rb.html +96 -0
- data/vendor/syntax/api/files/lib/syntax/lang/xml_rb.html +96 -0
- data/vendor/syntax/api/files/lib/syntax/lang/yaml_rb.html +96 -0
- data/vendor/syntax/api/files/lib/syntax/version_rb.html +92 -0
- data/vendor/syntax/api/files/lib/syntax_rb.html +96 -0
- data/vendor/syntax/api/fr_class_index.html +56 -0
- data/vendor/syntax/api/fr_file_index.html +54 -0
- data/vendor/syntax/api/fr_method_index.html +65 -0
- data/vendor/syntax/api/index.html +26 -0
- data/vendor/syntax/api/rdoc-style.css +175 -0
- data/vendor/syntax/doc/manual-html/chapter-1.html +198 -0
- data/vendor/syntax/doc/manual-html/chapter-2.html +262 -0
- data/vendor/syntax/doc/manual-html/chapter-3.html +266 -0
- data/vendor/syntax/doc/manual-html/chapter-4.html +267 -0
- data/vendor/syntax/doc/manual-html/index.html +152 -0
- data/vendor/syntax/doc/manual-html/stylesheets/manual.css +270 -0
- data/vendor/syntax/doc/manual-html/stylesheets/ruby.css +17 -0
- data/vendor/syntax/doc/manual/chapter.erb +38 -0
- data/vendor/syntax/doc/manual/example.erb +18 -0
- data/vendor/syntax/doc/manual/index.erb +29 -0
- data/vendor/syntax/doc/manual/manual.rb +311 -0
- data/vendor/syntax/doc/manual/manual.yml +43 -0
- data/vendor/syntax/doc/manual/page.erb +87 -0
- data/vendor/syntax/doc/manual/parts/0000.txt +5 -0
- data/vendor/syntax/doc/manual/parts/0001.txt +16 -0
- data/vendor/syntax/doc/manual/parts/0002.txt +24 -0
- data/vendor/syntax/doc/manual/parts/0003.txt +6 -0
- data/vendor/syntax/doc/manual/parts/0004.txt +32 -0
- data/vendor/syntax/doc/manual/parts/0005.txt +18 -0
- data/vendor/syntax/doc/manual/parts/0006.txt +62 -0
- data/vendor/syntax/doc/manual/parts/0007.txt +3 -0
- data/vendor/syntax/doc/manual/parts/0008.txt +5 -0
- data/vendor/syntax/doc/manual/parts/0009.txt +29 -0
- data/vendor/syntax/doc/manual/parts/0010.txt +21 -0
- data/vendor/syntax/doc/manual/stylesheets/manual.css +270 -0
- data/vendor/syntax/doc/manual/stylesheets/ruby.css +17 -0
- data/vendor/syntax/doc/manual/tutorial.erb +30 -0
- data/vendor/syntax/lib/syntax.rb +38 -0
- data/vendor/syntax/lib/syntax/common.rb +163 -0
- data/vendor/syntax/lib/syntax/convertors/abstract.rb +27 -0
- data/vendor/syntax/lib/syntax/convertors/html.rb +51 -0
- data/vendor/syntax/lib/syntax/lang/ruby.rb +317 -0
- data/vendor/syntax/lib/syntax/lang/xml.rb +108 -0
- data/vendor/syntax/lib/syntax/lang/yaml.rb +105 -0
- data/vendor/syntax/lib/syntax/version.rb +9 -0
- data/vendor/syntax/setup.rb +1331 -0
- data/vendor/syntax/syntax.gemspec +24 -0
- data/vendor/syntax/test/ALL-TESTS.rb +5 -0
- data/vendor/syntax/test/syntax/tc_ruby.rb +871 -0
- data/vendor/syntax/test/syntax/tc_xml.rb +202 -0
- data/vendor/syntax/test/syntax/tc_yaml.rb +228 -0
- data/vendor/syntax/test/syntax/tokenizer_testcase.rb +40 -0
- data/vendor/syntax/test/tc_syntax.rb +22 -0
- data/vendor/uuidtools/CHANGELOG +4 -0
- data/vendor/uuidtools/README +13 -0
- data/vendor/uuidtools/install.rb +30 -0
- data/vendor/uuidtools/lib/uuidtools.rb +555 -0
- data/vendor/uuidtools/rakefile +112 -0
- metadata +1022 -0
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
-- This file is autogenerated by the Rail schema generator, using
|
|
2
|
+
-- the schema defined in db/migration/*.rb
|
|
3
|
+
--
|
|
4
|
+
-- Do not edit this file. Instead, add a new migration using
|
|
5
|
+
-- ./script/generate migration <name>, and then run
|
|
6
|
+
-- ./script/generate schema
|
|
7
|
+
|
|
8
|
+
-- tables
|
|
9
|
+
|
|
10
|
+
CREATE TABLE articles_categories (
|
|
11
|
+
[article_id] int,
|
|
12
|
+
[category_id] int,
|
|
13
|
+
[is_primary] int
|
|
14
|
+
);
|
|
15
|
+
|
|
16
|
+
CREATE TABLE articles_tags (
|
|
17
|
+
[article_id] int,
|
|
18
|
+
[tag_id] int
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
CREATE TABLE blacklist_patterns (
|
|
22
|
+
[id] int NOT NULL IDENTITY(1,
|
|
23
|
+
1) PRIMARY KEY,
|
|
24
|
+
[type] varchar(255),
|
|
25
|
+
[pattern] varchar(255)
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
CREATE TABLE blogs (
|
|
29
|
+
[id] int NOT NULL IDENTITY(1,
|
|
30
|
+
1) PRIMARY KEY,
|
|
31
|
+
[settings] text
|
|
32
|
+
);
|
|
33
|
+
|
|
34
|
+
CREATE TABLE categories (
|
|
35
|
+
[id] int NOT NULL IDENTITY(1,
|
|
36
|
+
1) PRIMARY KEY,
|
|
37
|
+
[name] varchar(255),
|
|
38
|
+
[position] int,
|
|
39
|
+
[permalink] varchar(255)
|
|
40
|
+
);
|
|
41
|
+
|
|
42
|
+
CREATE TABLE contents (
|
|
43
|
+
[id] int NOT NULL IDENTITY(1,
|
|
44
|
+
1) PRIMARY KEY,
|
|
45
|
+
[type] varchar(255),
|
|
46
|
+
[title] varchar(255),
|
|
47
|
+
[author] varchar(255),
|
|
48
|
+
[body] text,
|
|
49
|
+
[body_html] text,
|
|
50
|
+
[extended] text,
|
|
51
|
+
[excerpt] text,
|
|
52
|
+
[keywords] varchar(255),
|
|
53
|
+
[created_at] datetime,
|
|
54
|
+
[updated_at] datetime,
|
|
55
|
+
[extended_html] text,
|
|
56
|
+
[user_id] int,
|
|
57
|
+
[permalink] varchar(255),
|
|
58
|
+
[guid] varchar(255),
|
|
59
|
+
[text_filter_id] int,
|
|
60
|
+
[whiteboard] text,
|
|
61
|
+
[article_id] int,
|
|
62
|
+
[email] varchar(255),
|
|
63
|
+
[url] varchar(255),
|
|
64
|
+
[ip] varchar(40),
|
|
65
|
+
[blog_name] varchar(255),
|
|
66
|
+
[name] varchar(255),
|
|
67
|
+
[comments_count] int,
|
|
68
|
+
[trackbacks_count] int,
|
|
69
|
+
[published] bit DEFAULT 0,
|
|
70
|
+
[allow_pings] bit,
|
|
71
|
+
[allow_comments] bit,
|
|
72
|
+
[blog_id] int NOT NULL,
|
|
73
|
+
[published_at] datetime
|
|
74
|
+
);
|
|
75
|
+
|
|
76
|
+
CREATE TABLE notifications (
|
|
77
|
+
[notify_user_id] int,
|
|
78
|
+
[notify_content_id] int,
|
|
79
|
+
[created_at] datetime,
|
|
80
|
+
[updated_at] datetime
|
|
81
|
+
);
|
|
82
|
+
|
|
83
|
+
CREATE TABLE page_caches (
|
|
84
|
+
[id] int NOT NULL IDENTITY(1,
|
|
85
|
+
1) PRIMARY KEY,
|
|
86
|
+
[name] varchar(255)
|
|
87
|
+
);
|
|
88
|
+
|
|
89
|
+
CREATE TABLE pings (
|
|
90
|
+
[id] int NOT NULL IDENTITY(1,
|
|
91
|
+
1) PRIMARY KEY,
|
|
92
|
+
[article_id] int,
|
|
93
|
+
[url] varchar(255),
|
|
94
|
+
[created_at] datetime
|
|
95
|
+
);
|
|
96
|
+
|
|
97
|
+
CREATE TABLE redirects (
|
|
98
|
+
[id] int NOT NULL IDENTITY(1,
|
|
99
|
+
1) PRIMARY KEY,
|
|
100
|
+
[from_path] varchar(255),
|
|
101
|
+
[to_path] varchar(255)
|
|
102
|
+
);
|
|
103
|
+
|
|
104
|
+
CREATE TABLE resources (
|
|
105
|
+
[id] int NOT NULL IDENTITY(1,
|
|
106
|
+
1) PRIMARY KEY,
|
|
107
|
+
[size] int,
|
|
108
|
+
[filename] varchar(255),
|
|
109
|
+
[mime] varchar(255),
|
|
110
|
+
[created_at] datetime,
|
|
111
|
+
[updated_at] datetime,
|
|
112
|
+
[article_id] int,
|
|
113
|
+
[itunes_metadata] bit,
|
|
114
|
+
[itunes_author] varchar(255),
|
|
115
|
+
[itunes_subtitle] varchar(255),
|
|
116
|
+
[itunes_duration] int,
|
|
117
|
+
[itunes_summary] text,
|
|
118
|
+
[itunes_keywords] varchar(255),
|
|
119
|
+
[itunes_category] varchar(255),
|
|
120
|
+
[itunes_explicit] bit
|
|
121
|
+
);
|
|
122
|
+
|
|
123
|
+
CREATE TABLE sessions (
|
|
124
|
+
[id] int NOT NULL IDENTITY(1,
|
|
125
|
+
1) PRIMARY KEY,
|
|
126
|
+
[sessid] varchar(255),
|
|
127
|
+
[data] text,
|
|
128
|
+
[created_at] datetime,
|
|
129
|
+
[updated_at] datetime
|
|
130
|
+
);
|
|
131
|
+
|
|
132
|
+
CREATE TABLE sidebars (
|
|
133
|
+
[id] int NOT NULL IDENTITY(1,
|
|
134
|
+
1) PRIMARY KEY,
|
|
135
|
+
[controller] varchar(255),
|
|
136
|
+
[active_position] int,
|
|
137
|
+
[config] text,
|
|
138
|
+
[staged_position] int
|
|
139
|
+
);
|
|
140
|
+
|
|
141
|
+
CREATE TABLE tags (
|
|
142
|
+
[id] int NOT NULL IDENTITY(1,
|
|
143
|
+
1) PRIMARY KEY,
|
|
144
|
+
[name] varchar(255),
|
|
145
|
+
[created_at] datetime,
|
|
146
|
+
[updated_at] datetime,
|
|
147
|
+
[display_name] varchar(255)
|
|
148
|
+
);
|
|
149
|
+
|
|
150
|
+
CREATE TABLE text_filters (
|
|
151
|
+
[id] int NOT NULL IDENTITY(1,
|
|
152
|
+
1) PRIMARY KEY,
|
|
153
|
+
[name] varchar(255),
|
|
154
|
+
[description] varchar(255),
|
|
155
|
+
[markup] varchar(255),
|
|
156
|
+
[filters] text,
|
|
157
|
+
[params] text
|
|
158
|
+
);
|
|
159
|
+
|
|
160
|
+
CREATE TABLE triggers (
|
|
161
|
+
[id] int NOT NULL IDENTITY(1,
|
|
162
|
+
1) PRIMARY KEY,
|
|
163
|
+
[pending_item_id] int,
|
|
164
|
+
[pending_item_type] varchar(255),
|
|
165
|
+
[due_at] datetime,
|
|
166
|
+
[trigger_method] varchar(255)
|
|
167
|
+
);
|
|
168
|
+
|
|
169
|
+
CREATE TABLE users (
|
|
170
|
+
[id] int NOT NULL IDENTITY(1,
|
|
171
|
+
1) PRIMARY KEY,
|
|
172
|
+
[login] varchar(255),
|
|
173
|
+
[password] varchar(255),
|
|
174
|
+
[email] text,
|
|
175
|
+
[name] text,
|
|
176
|
+
[notify_via_email] bit,
|
|
177
|
+
[notify_on_new_articles] bit,
|
|
178
|
+
[notify_on_comments] bit,
|
|
179
|
+
[notify_watch_my_articles] bit,
|
|
180
|
+
[notify_via_jabber] bit,
|
|
181
|
+
[jabber] varchar(255)
|
|
182
|
+
);
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
-- indexes
|
|
186
|
+
|
|
187
|
+
CREATE INDEX [blacklist_patterns_pattern_index] ON blacklist_patterns ([pattern]);
|
|
188
|
+
CREATE INDEX [categories_permalink_index] ON categories ([permalink]);
|
|
189
|
+
CREATE INDEX [contents_blog_id_index] ON contents ([blog_id]);
|
|
190
|
+
CREATE INDEX [contents_article_id_index] ON contents ([article_id]);
|
|
191
|
+
CREATE INDEX [page_caches_name_index] ON page_caches ([name]);
|
|
192
|
+
CREATE INDEX [pings_article_id_index] ON pings ([article_id]);
|
|
193
|
+
CREATE INDEX [sessions_sessid_index] ON sessions ([sessid]);
|
|
194
|
+
|
|
195
|
+
-- data
|
|
196
|
+
|
|
197
|
+
INSERT INTO sidebars ([config], [staged_position], [active_position], [controller]) VALUES(NULL, NULL, 0, 'category');
|
|
198
|
+
INSERT INTO sidebars ([config], [staged_position], [active_position], [controller]) VALUES(NULL, NULL, 1, 'static');
|
|
199
|
+
INSERT INTO sidebars ([config], [staged_position], [active_position], [controller]) VALUES(NULL, NULL, 2, 'xml');
|
|
200
|
+
INSERT INTO text_filters ([name], [filters], [description], [params], [markup]) VALUES('none', '--- []
|
|
201
|
+
|
|
202
|
+
', 'None', '--- {}
|
|
203
|
+
|
|
204
|
+
', 'none');
|
|
205
|
+
INSERT INTO text_filters ([name], [filters], [description], [params], [markup]) VALUES('markdown', '--- []
|
|
206
|
+
|
|
207
|
+
', 'Markdown', '--- {}
|
|
208
|
+
|
|
209
|
+
', 'markdown');
|
|
210
|
+
INSERT INTO text_filters ([name], [filters], [description], [params], [markup]) VALUES('smartypants', '---
|
|
211
|
+
- :smartypants
|
|
212
|
+
', 'SmartyPants', '--- {}
|
|
213
|
+
|
|
214
|
+
', 'none');
|
|
215
|
+
INSERT INTO text_filters ([name], [filters], [description], [params], [markup]) VALUES('markdown smartypants', '---
|
|
216
|
+
- :smartypants
|
|
217
|
+
', 'Markdown with SmartyPants', '--- {}
|
|
218
|
+
|
|
219
|
+
', 'markdown');
|
|
220
|
+
INSERT INTO text_filters ([name], [filters], [description], [params], [markup]) VALUES('textile', '--- []
|
|
221
|
+
|
|
222
|
+
', 'Textile', '--- {}
|
|
223
|
+
|
|
224
|
+
', 'textile');
|
|
225
|
+
|
|
226
|
+
-- schema version meta-info
|
|
227
|
+
|
|
228
|
+
CREATE TABLE schema_info (
|
|
229
|
+
[version] int
|
|
230
|
+
);
|
|
231
|
+
|
|
232
|
+
insert into schema_info (version) values (46);
|
data/db/schema_version
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
46
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
CREATE TABLE IF NOT EXISTS `blacklist_patterns` (
|
|
2
|
+
`id` int(11) NOT NULL auto_increment,
|
|
3
|
+
`type` varchar(15) default NULL,
|
|
4
|
+
`pattern` varchar(255) default NULL,
|
|
5
|
+
PRIMARY KEY (`id`)
|
|
6
|
+
);
|
|
7
|
+
|
|
8
|
+
CREATE TABLE IF NOT EXISTS `settings` (
|
|
9
|
+
`id` int(11) NOT NULL auto_increment,
|
|
10
|
+
`name` varchar(40) default NULL,
|
|
11
|
+
`value` varchar(40) default NULL,
|
|
12
|
+
PRIMARY KEY (`id`)
|
|
13
|
+
);
|
|
14
|
+
|
|
15
|
+
CREATE TABLE IF NOT EXISTS `sessions` (
|
|
16
|
+
`id` int(11) unsigned NOT NULL auto_increment,
|
|
17
|
+
`sessid` varchar(32) default NULL,
|
|
18
|
+
`data` text,
|
|
19
|
+
`updated_at` datetime default NULL,
|
|
20
|
+
PRIMARY KEY (`id`),
|
|
21
|
+
UNIQUE KEY `sessid` (`sessid`)
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
CREATE TABLE IF NOT EXISTS `users` (
|
|
25
|
+
`id` int(11) NOT NULL auto_increment,
|
|
26
|
+
`login` varchar(80) default NULL,
|
|
27
|
+
`password` varchar(40) default NULL,
|
|
28
|
+
PRIMARY KEY (`id`),
|
|
29
|
+
UNIQUE KEY `login` (`login`)
|
|
30
|
+
);
|
|
31
|
+
|
|
32
|
+
ALTER TABLE `comments` ADD `ip` varchar(15) DEFAULT NULL;
|
|
33
|
+
ALTER TABLE `articles` ADD `text_filter` varchar(20) DEFAULT NULL;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
CREATE TABLE blacklist_patterns (
|
|
2
|
+
id SERIAL PRIMARY KEY NOT NULL,
|
|
3
|
+
type varchar(15) default NULL,
|
|
4
|
+
pattern varchar(255) default NULL
|
|
5
|
+
);
|
|
6
|
+
|
|
7
|
+
CREATE TABLE sessions (
|
|
8
|
+
id SERIAL PRIMARY KEY NOT NULL,
|
|
9
|
+
sessid varchar(255) default NULL,
|
|
10
|
+
data text,
|
|
11
|
+
created_at TIMESTAMP DEFAULT now(),
|
|
12
|
+
updated_at TIMESTAMP DEFAULT now()
|
|
13
|
+
);
|
|
14
|
+
|
|
15
|
+
CREATE TABLE settings (
|
|
16
|
+
id SERIAL PRIMARY KEY NOT NULL,
|
|
17
|
+
name varchar(255) default NULL,
|
|
18
|
+
value varchar(255) default NULL,
|
|
19
|
+
position int default NULL
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
CREATE TABLE users (
|
|
23
|
+
id SERIAL PRIMARY KEY NOT NULL,
|
|
24
|
+
login varchar(40) default NULL,
|
|
25
|
+
password varchar(40) default NULL,
|
|
26
|
+
UNIQUE (login)
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
ALTER TABLE comments ADD ip varchar(15) DEFAULT NULL;
|
|
30
|
+
ALTER TABLE articles ADD text_filter varchar(20) DEFAULT NULL;
|
data/doc/Installer.txt
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
How to use the Typo Rails installer
|
|
2
|
+
===================================
|
|
3
|
+
|
|
4
|
+
Typo 4.0 includes an installer that makes it easy to install Typo.
|
|
5
|
+
|
|
6
|
+
Quick Start
|
|
7
|
+
-----------
|
|
8
|
+
|
|
9
|
+
Here's the short version:
|
|
10
|
+
|
|
11
|
+
$ gem install typo
|
|
12
|
+
$ typo install /var/www/my_typo_site
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
Prerequisites
|
|
16
|
+
-------------
|
|
17
|
+
|
|
18
|
+
You'll need the following software installed on your system:
|
|
19
|
+
|
|
20
|
+
1. Ruby 1.8.4
|
|
21
|
+
2. RubyGems (http://www.rubygems.org)
|
|
22
|
+
3. SWIG (http://www.swig.org)
|
|
23
|
+
4. SQLite 3
|
|
24
|
+
|
|
25
|
+
Most modern Unix systems should have all four of these easily available in pre-built form.
|
|
26
|
+
|
|
27
|
+
Installing Typo
|
|
28
|
+
---------------
|
|
29
|
+
|
|
30
|
+
1. Install the Typo GEM.
|
|
31
|
+
|
|
32
|
+
Run 'gem install typo'. This will install the current version of Typo
|
|
33
|
+
along with all dependencies.
|
|
34
|
+
|
|
35
|
+
2. Create a working Typo installation in a directory somewhere.
|
|
36
|
+
|
|
37
|
+
Run 'typo install DIRECTORY'. Replace DIRECTORY with the name of the
|
|
38
|
+
directory that you want Typo to live in. This will copy all of Typo's
|
|
39
|
+
files into DIRECTORY, create a new database for Typo to use, and start
|
|
40
|
+
Typo running on a random port number.
|
|
41
|
+
|
|
42
|
+
3. Verify that Typo works for you. The installer will print a URL at the end
|
|
43
|
+
of the installation process; load it in a browser to test out Typo.
|
|
44
|
+
|
|
45
|
+
4. Once you're happy with Typo's configuration, follow the directions in
|
|
46
|
+
installer/apache.conf.example to run your Typo installation under Apache.
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
TODO
|
|
50
|
+
----
|
|
51
|
+
|
|
52
|
+
1. Actually write the Apache HTTP proxy instructions (for 1.3 and 2.x)
|
|
53
|
+
2. Add lighttpd proxy directions.
|
|
54
|
+
3. Figure out how to best have Typo restart on reboot.
|
|
55
|
+
4. Handle the "missing swig" problem better.
|
data/doc/README_FOR_APP
ADDED
|
@@ -0,0 +1,488 @@
|
|
|
1
|
+
require 'fileutils'
|
|
2
|
+
require 'readline'
|
|
3
|
+
require 'rubygems'
|
|
4
|
+
require 'yaml'
|
|
5
|
+
require 'digest/sha1'
|
|
6
|
+
|
|
7
|
+
class RailsInstaller
|
|
8
|
+
include FileUtils
|
|
9
|
+
attr_accessor :install_directory, :source_directory, :config
|
|
10
|
+
attr_accessor :message_proc
|
|
11
|
+
|
|
12
|
+
class InstallFailed < StandardError; end
|
|
13
|
+
|
|
14
|
+
@@rails_version = nil
|
|
15
|
+
|
|
16
|
+
def self.application_name(name)
|
|
17
|
+
@@app_name = name
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def self.support_location(location)
|
|
21
|
+
@@support_location = location
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def self.rails_version(svn_tag)
|
|
25
|
+
@@rails_version = svn_tag
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def initialize(install_directory)
|
|
29
|
+
@install_directory = install_directory
|
|
30
|
+
|
|
31
|
+
@config = read_yml(config_file) rescue nil
|
|
32
|
+
@config ||= Hash.new
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Display a status message
|
|
36
|
+
def message(string)
|
|
37
|
+
if message_proc
|
|
38
|
+
message_proc.call(string)
|
|
39
|
+
else
|
|
40
|
+
STDERR.puts string
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Install Application
|
|
45
|
+
def install(version=nil)
|
|
46
|
+
@source_directory = find_source_directory(@@app_name,version)
|
|
47
|
+
|
|
48
|
+
if config.size == 0
|
|
49
|
+
@config = read_yml(backup_config_file)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
install_sequence
|
|
53
|
+
|
|
54
|
+
message ''
|
|
55
|
+
message "#{@@app_name.capitalize} is now running on http://#{`hostname`.chomp}:#{config['port-number']}"
|
|
56
|
+
message "Use '#{@@app_name} start #{install_directory}' to restart after boot."
|
|
57
|
+
message "Look in installer/apache.conf.example to see how to integrate with Apache."
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# The default install sequence. Override this if you need to add extra
|
|
61
|
+
# steps to the installer.
|
|
62
|
+
def install_sequence
|
|
63
|
+
stop
|
|
64
|
+
|
|
65
|
+
backup_database
|
|
66
|
+
pre_migrate_database
|
|
67
|
+
copy_files
|
|
68
|
+
freeze_rails
|
|
69
|
+
create_default_config_files
|
|
70
|
+
create_directories
|
|
71
|
+
create_initial_database
|
|
72
|
+
set_initial_port_number
|
|
73
|
+
|
|
74
|
+
migrate
|
|
75
|
+
save
|
|
76
|
+
|
|
77
|
+
run_rails_tests
|
|
78
|
+
|
|
79
|
+
start
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
# Start application in the background
|
|
84
|
+
def start(foreground = false)
|
|
85
|
+
return unless config['web-server'] == 'mongrel'
|
|
86
|
+
|
|
87
|
+
args = {}
|
|
88
|
+
args['-p'] = config['port-number']
|
|
89
|
+
args['-a'] = config['bind-address']
|
|
90
|
+
args['-e'] = config['rails-environment']
|
|
91
|
+
args['-d'] = foreground
|
|
92
|
+
args['-P'] = pid_file
|
|
93
|
+
|
|
94
|
+
# Remove keys with nil values
|
|
95
|
+
args.delete_if {|k,v| v==nil}
|
|
96
|
+
|
|
97
|
+
args_array = args.to_a.flatten.map {|e| e.to_s}
|
|
98
|
+
args_array = ['mongrel_rails', 'start', install_directory] + args_array
|
|
99
|
+
message "Starting #{@@app_name.capitalize} on port #{config['port-number']}"
|
|
100
|
+
system(args_array.join(' '))
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
# Stop application
|
|
104
|
+
def stop
|
|
105
|
+
return unless File.exists? pid_file
|
|
106
|
+
return unless config['web-server'] == 'mongrel'
|
|
107
|
+
|
|
108
|
+
args = {}
|
|
109
|
+
args['-P'] = pid_file
|
|
110
|
+
|
|
111
|
+
args_array = args.to_a.flatten.map {|e| e.to_s}
|
|
112
|
+
args_array = ['mongrel_rails', 'stop', install_directory] + args_array
|
|
113
|
+
message "Stopping #{@@app_name.capitalize}"
|
|
114
|
+
system(args_array.join(' '))
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
# private
|
|
118
|
+
|
|
119
|
+
# The name of the sqlite database file
|
|
120
|
+
def db_file
|
|
121
|
+
File.join(install_directory,'db','database.sqlite')
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
# Backup the database
|
|
125
|
+
def backup_database
|
|
126
|
+
return unless File.exists? db_file
|
|
127
|
+
return unless config['database'] == 'sqlite'
|
|
128
|
+
new_db_file = db_file+"-#{Time.now.strftime('%Y%m%d-%H%M')}.sql"
|
|
129
|
+
|
|
130
|
+
message "Backing up existing SQLite database into #{new_db_file}"
|
|
131
|
+
system("sqlite3 #{db_file} .dump > #{new_db_file}")
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
# Copy files from the source directory to the target directory.
|
|
135
|
+
def copy_files
|
|
136
|
+
message "Checking for existing #{@@app_name.capitalize} install in #{install_directory}"
|
|
137
|
+
files_yml = File.join(install_directory,'installer','files.yml')
|
|
138
|
+
old_files = read_yml(files_yml) rescue Hash.new
|
|
139
|
+
|
|
140
|
+
message "Reading files from #{source_directory}"
|
|
141
|
+
new_files = sha1_hash_directory_tree(source_directory)
|
|
142
|
+
|
|
143
|
+
# Next, we compare the original install hash to the current hash. For each
|
|
144
|
+
# entry:
|
|
145
|
+
#
|
|
146
|
+
# - in new_file but not in old_files: copy
|
|
147
|
+
# - in old files but not in new_files: delete
|
|
148
|
+
# - in both, but hash different: copy
|
|
149
|
+
# - in both, hash same: don't copy
|
|
150
|
+
#
|
|
151
|
+
# We really should add a third hash (existing_files) and compare against that
|
|
152
|
+
# so we don't overwrite changed files.
|
|
153
|
+
|
|
154
|
+
added, changed, deleted, same = hash_diff(old_files, new_files)
|
|
155
|
+
|
|
156
|
+
if added.size > 0
|
|
157
|
+
message "Copying #{added.size} new files into #{install_directory}"
|
|
158
|
+
added.keys.sort.each do |file|
|
|
159
|
+
message " copying #{file}"
|
|
160
|
+
copy_one_file(file)
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
if changed.size > 0
|
|
165
|
+
message "Updating #{changed.size} files in #{install_directory}"
|
|
166
|
+
changed.keys.sort.each do |file|
|
|
167
|
+
message " updating #{file}"
|
|
168
|
+
copy_one_file(file)
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
if deleted.size > 0
|
|
173
|
+
message "Deleting #{deleted.size} files from #{install_directory}"
|
|
174
|
+
|
|
175
|
+
deleted.keys.sort.each do |file|
|
|
176
|
+
message " deleting #{file}"
|
|
177
|
+
rm(File.join(install_directory,file))
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
write_yml(files_yml,new_files)
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
# Copy one file from source_directory to install_directory, creating directories as needed.
|
|
185
|
+
def copy_one_file(filename)
|
|
186
|
+
source_name = File.join(source_directory,filename)
|
|
187
|
+
install_name = File.join(install_directory,filename)
|
|
188
|
+
dir_name = File.dirname(install_name)
|
|
189
|
+
|
|
190
|
+
mkdir_p(dir_name)
|
|
191
|
+
cp(source_name,install_name,:preserve => true)
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
# Compute the different between two hashes. Returns four hashes,
|
|
195
|
+
# one contains the keys that are in 'b' but not in 'a' (added entries),
|
|
196
|
+
# the next contains keys that are in 'a' and 'b', but have different values
|
|
197
|
+
# (changed). The third contains keys that are in 'b' but not 'a' (added).
|
|
198
|
+
# The final hash contains items that are the same in each.
|
|
199
|
+
def hash_diff(a, b)
|
|
200
|
+
added = {}
|
|
201
|
+
changed = {}
|
|
202
|
+
deleted = {}
|
|
203
|
+
same = {}
|
|
204
|
+
|
|
205
|
+
seen = {}
|
|
206
|
+
|
|
207
|
+
a.each_key do |k|
|
|
208
|
+
seen[k] = true
|
|
209
|
+
|
|
210
|
+
if b.has_key? k
|
|
211
|
+
if b[k] == a[k]
|
|
212
|
+
same[k] = true
|
|
213
|
+
else
|
|
214
|
+
changed[k] = true
|
|
215
|
+
end
|
|
216
|
+
else
|
|
217
|
+
deleted[k] = true
|
|
218
|
+
end
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
b.each_key do |k|
|
|
222
|
+
unless seen[k]
|
|
223
|
+
added[k] = true
|
|
224
|
+
end
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
[added, changed, deleted, same]
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
# Freeze to a specific version of Rails
|
|
231
|
+
def freeze_rails
|
|
232
|
+
return unless @@rails_version
|
|
233
|
+
version_file = File.join(install_directory,'vendor','rails-version')
|
|
234
|
+
vendor_rails = File.join(install_directory,'vendor','rails')
|
|
235
|
+
|
|
236
|
+
old_version = File.read(version_file).chomp rescue nil
|
|
237
|
+
|
|
238
|
+
if @@rails_version == old_version
|
|
239
|
+
return
|
|
240
|
+
elsif old_version != nil
|
|
241
|
+
rm_rf(vendor_rails)
|
|
242
|
+
mkdir_p(vendor_rails)
|
|
243
|
+
end
|
|
244
|
+
|
|
245
|
+
package_map = {
|
|
246
|
+
'rails' => File.join(vendor_rails,'railties'),
|
|
247
|
+
'actionmailer' => File.join(vendor_rails,'actionmailer'),
|
|
248
|
+
'actionpack' => File.join(vendor_rails,'actionpack'),
|
|
249
|
+
'actionwebservice' => File.join(vendor_rails,'actionwebservice'),
|
|
250
|
+
'activerecord' => File.join(vendor_rails,'activerecord'),
|
|
251
|
+
'activesupport' => File.join(vendor_rails,'activesupport'),
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
specs = Gem.source_index.find_name('rails',["= #{@@rails_version}"])
|
|
255
|
+
|
|
256
|
+
unless specs.to_a.size > 0
|
|
257
|
+
raise InstallFailed, "Can't locate Rails #{@@rails_version}!"
|
|
258
|
+
end
|
|
259
|
+
|
|
260
|
+
copy_gem(specs.first, package_map[specs.first.name])
|
|
261
|
+
|
|
262
|
+
specs.first.dependencies.each do |dep|
|
|
263
|
+
next unless package_map[dep.name]
|
|
264
|
+
|
|
265
|
+
dep_spec = Gem.source_index.find_name(dep.name,[dep.version_requirements.to_s])
|
|
266
|
+
if dep_spec.size == 0
|
|
267
|
+
raise InstallFailed, "Can't locate dependency #{dep.name} #{dep.version_requirements.to_s}"
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
copy_gem(dep_spec.first, package_map[dep.name])
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
File.open(version_file,'w') do |f|
|
|
274
|
+
f.puts @@rails_version
|
|
275
|
+
end
|
|
276
|
+
end
|
|
277
|
+
|
|
278
|
+
def copy_gem(spec, destination)
|
|
279
|
+
message("copying #{spec.name} #{spec.version} to #{destination}")
|
|
280
|
+
cp_r("#{spec.full_gem_path}/.",destination)
|
|
281
|
+
end
|
|
282
|
+
|
|
283
|
+
# Create all default config files
|
|
284
|
+
def create_default_config_files
|
|
285
|
+
create_default_database_yml
|
|
286
|
+
end
|
|
287
|
+
|
|
288
|
+
# Create the default database.yml
|
|
289
|
+
def create_default_database_yml
|
|
290
|
+
database_yml = File.join(install_directory,'config','database.yml')
|
|
291
|
+
return if File.exist?(database_yml)
|
|
292
|
+
return unless config['database'] == 'sqlite'
|
|
293
|
+
|
|
294
|
+
message "Creating default database configuration file"
|
|
295
|
+
cp("#{database_yml}.sqlite",database_yml)
|
|
296
|
+
end
|
|
297
|
+
|
|
298
|
+
# Create required directories, like tmp
|
|
299
|
+
def create_directories
|
|
300
|
+
mkdir_p(File.join(install_directory,'tmp','cache'))
|
|
301
|
+
mkdir_p(File.join(install_directory,'tmp','session'))
|
|
302
|
+
mkdir_p(File.join(install_directory,'tmp','sockets'))
|
|
303
|
+
mkdir_p(File.join(install_directory,'log'))
|
|
304
|
+
File.open(File.join(install_directory,'log','development.log'),'w')
|
|
305
|
+
File.open(File.join(install_directory,'log','production.log'),'w')
|
|
306
|
+
File.open(File.join(install_directory,'log','testing.log'),'w')
|
|
307
|
+
end
|
|
308
|
+
|
|
309
|
+
# Create the initial SQLite database
|
|
310
|
+
def create_initial_database
|
|
311
|
+
return if File.exists? db_file
|
|
312
|
+
return unless config['database'] == 'sqlite'
|
|
313
|
+
|
|
314
|
+
message "Creating initial #{@@app_name.capitalize} SQLite database"
|
|
315
|
+
schema_file = File.join(install_directory,'db','schema.sqlite.sql')
|
|
316
|
+
system("sqlite3 #{db_file} < #{schema_file}")
|
|
317
|
+
end
|
|
318
|
+
|
|
319
|
+
# Get the current schema version
|
|
320
|
+
def get_schema_version
|
|
321
|
+
File.read(File.join(install_directory,'db','schema_version')).to_i rescue 0
|
|
322
|
+
end
|
|
323
|
+
|
|
324
|
+
# The path to the installed config file
|
|
325
|
+
def config_file
|
|
326
|
+
File.join(install_directory,'installer','rails_installer.yml')
|
|
327
|
+
end
|
|
328
|
+
|
|
329
|
+
# The path to the config file that comes with the GEM
|
|
330
|
+
def backup_config_file
|
|
331
|
+
File.join(source_directory,'installer','rails_installer_defaults.yml')
|
|
332
|
+
end
|
|
333
|
+
|
|
334
|
+
# Pick a default port number
|
|
335
|
+
def set_initial_port_number
|
|
336
|
+
config['port-number'] ||= (rand(1000)+4000)
|
|
337
|
+
end
|
|
338
|
+
|
|
339
|
+
def pre_migrate_database
|
|
340
|
+
old_schema_version = get_schema_version
|
|
341
|
+
new_schema_version = File.read(File.join(source_directory,'db','schema_version')).to_i
|
|
342
|
+
|
|
343
|
+
return unless old_schema_version > 0
|
|
344
|
+
|
|
345
|
+
Dir.chdir(install_directory)
|
|
346
|
+
|
|
347
|
+
# Are we downgrading?
|
|
348
|
+
if old_schema_version > new_schema_version
|
|
349
|
+
message "Downgrading schema from #{old_schema_version} to #{new_schema_version}"
|
|
350
|
+
status = system("rake -s migrate VERSION=#{new_schema_version}")
|
|
351
|
+
|
|
352
|
+
unless status
|
|
353
|
+
raise InstallFailed, "Downgrade migrating from #{old_schema_version} to #{new_schema_version} failed."
|
|
354
|
+
end
|
|
355
|
+
end
|
|
356
|
+
end
|
|
357
|
+
|
|
358
|
+
# Migrate the database
|
|
359
|
+
def migrate
|
|
360
|
+
Dir.chdir(install_directory)
|
|
361
|
+
message "Migrating #{@@app_name.capitalize}'s database to newest release"
|
|
362
|
+
status = system("rake -s migrate")
|
|
363
|
+
|
|
364
|
+
unless status
|
|
365
|
+
raise InstallFailed, "Migration failed"
|
|
366
|
+
end
|
|
367
|
+
end
|
|
368
|
+
|
|
369
|
+
# Sweep the cache
|
|
370
|
+
def run_rails_tests
|
|
371
|
+
Dir.chdir(install_directory)
|
|
372
|
+
message "Running tests. This may take a minute or two"
|
|
373
|
+
status = system("rake -s test > /dev/null 2> /dev/null")
|
|
374
|
+
|
|
375
|
+
if status
|
|
376
|
+
message "All tests pass. Congratulations."
|
|
377
|
+
else
|
|
378
|
+
message "***** Tests failed *****"
|
|
379
|
+
message "** Please run 'rake test' by hand in your install directory."
|
|
380
|
+
message "** Report problems to #{@@support_location}."
|
|
381
|
+
message "***** Tests failed *****"
|
|
382
|
+
end
|
|
383
|
+
end
|
|
384
|
+
|
|
385
|
+
def sha1_hash_directory_tree(directory, prefix='', hash={})
|
|
386
|
+
Dir.entries(directory).each do |file|
|
|
387
|
+
next if file =~ /^\./
|
|
388
|
+
pathname = File.join(directory,file)
|
|
389
|
+
if File.directory?(pathname)
|
|
390
|
+
sha1_hash_directory_tree(pathname, File.join(prefix,file), hash)
|
|
391
|
+
else
|
|
392
|
+
hash[File.join(prefix,file)] = Digest::SHA1.hexdigest(File.read(pathname))
|
|
393
|
+
end
|
|
394
|
+
end
|
|
395
|
+
|
|
396
|
+
hash
|
|
397
|
+
end
|
|
398
|
+
|
|
399
|
+
def save
|
|
400
|
+
write_yml(config_file,@config)
|
|
401
|
+
end
|
|
402
|
+
|
|
403
|
+
def read_yml(filename)
|
|
404
|
+
YAML.load(File.read(filename))
|
|
405
|
+
end
|
|
406
|
+
|
|
407
|
+
def write_yml(filename,object)
|
|
408
|
+
File.open(filename,'w') do |f|
|
|
409
|
+
f.write(YAML.dump(object))
|
|
410
|
+
end
|
|
411
|
+
end
|
|
412
|
+
|
|
413
|
+
def pid_file
|
|
414
|
+
File.join(install_directory,'tmp','pid.txt')
|
|
415
|
+
end
|
|
416
|
+
|
|
417
|
+
# Locate the source directory for a specific Version
|
|
418
|
+
def find_source_directory(gem_name, version)
|
|
419
|
+
if version == 'cwd'
|
|
420
|
+
return Dir.pwd
|
|
421
|
+
elsif version
|
|
422
|
+
version_array = ["= #{version}"]
|
|
423
|
+
else
|
|
424
|
+
version_array = ["> 0.0.0"]
|
|
425
|
+
end
|
|
426
|
+
|
|
427
|
+
specs = Gem.source_index.find_name(gem_name,version_array)
|
|
428
|
+
unless specs.to_a.size > 0
|
|
429
|
+
raise InstallFailed, "Can't locate version #{version}!"
|
|
430
|
+
end
|
|
431
|
+
|
|
432
|
+
specs.last.full_gem_path
|
|
433
|
+
end
|
|
434
|
+
|
|
435
|
+
# Execute a command-line command
|
|
436
|
+
def execute_command(*args)
|
|
437
|
+
if args.size < 2
|
|
438
|
+
display_help
|
|
439
|
+
exit(1)
|
|
440
|
+
end
|
|
441
|
+
|
|
442
|
+
case args[0]
|
|
443
|
+
when 'install'
|
|
444
|
+
install(args[2])
|
|
445
|
+
when 'upgrade'
|
|
446
|
+
install(args[2])
|
|
447
|
+
when 'start'
|
|
448
|
+
start
|
|
449
|
+
when 'stop'
|
|
450
|
+
stop
|
|
451
|
+
when 'run'
|
|
452
|
+
start(true)
|
|
453
|
+
when 'config'
|
|
454
|
+
if args.size < 3
|
|
455
|
+
config.keys.sort.each do |k|
|
|
456
|
+
puts "#{k}=#{config[k]}"
|
|
457
|
+
end
|
|
458
|
+
else
|
|
459
|
+
args[2..-1].each do |arg|
|
|
460
|
+
if(arg=~/^([^=]+)=(.*)$/)
|
|
461
|
+
config[$1.to_s]=$2.to_s
|
|
462
|
+
else
|
|
463
|
+
STDERR.puts "Unknown config command: #{arg}"
|
|
464
|
+
end
|
|
465
|
+
end
|
|
466
|
+
save
|
|
467
|
+
end
|
|
468
|
+
else
|
|
469
|
+
display_help('Unknown command')
|
|
470
|
+
end
|
|
471
|
+
end
|
|
472
|
+
|
|
473
|
+
def display_help(error=nil)
|
|
474
|
+
STDERR.puts error if error
|
|
475
|
+
STDERR.puts "Commands:"
|
|
476
|
+
STDERR.puts " typo install DIRECTORY [VERSION]"
|
|
477
|
+
STDERR.puts " Installs Typo into DIRECTORY. If there's an existing Typo install in"
|
|
478
|
+
STDERR.puts " DIRECTORY, then the installer will upgrade the installation instead."
|
|
479
|
+
STDERR.puts " typo start DIRECTORY"
|
|
480
|
+
STDERR.puts " Starts a Typo server in DIRECTORY."
|
|
481
|
+
STDERR.puts " typo stop DIRECTORY"
|
|
482
|
+
STDERR.puts " Shuts down a Typo server in DIRECTORY."
|
|
483
|
+
STDERR.puts " typo config DIRECTORY"
|
|
484
|
+
STDERR.puts " Shows configuration variables for Typo."
|
|
485
|
+
STDERR.puts " typo config DIRECTORY NAME=VALUE..."
|
|
486
|
+
STDERR.puts " Sets configuration variables for Typo."
|
|
487
|
+
end
|
|
488
|
+
end
|