trusty-cms 1.0.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.
- checksums.yaml +15 -0
- data/.gitignore +23 -0
- data/CHANGELOG.md +754 -0
- data/CONTRIBUTORS.md +263 -0
- data/Gemfile +40 -0
- data/Gemfile.lock +177 -0
- data/INSTALL.md +10 -0
- data/LICENSE.md +21 -0
- data/README.md +85 -0
- data/Rakefile +7 -0
- data/app/controllers/admin/configuration_controller.rb +50 -0
- data/app/controllers/admin/extensions_controller.rb +11 -0
- data/app/controllers/admin/layouts_controller.rb +8 -0
- data/app/controllers/admin/page_fields_controller.rb +9 -0
- data/app/controllers/admin/page_parts_controller.rb +9 -0
- data/app/controllers/admin/pages_controller.rb +89 -0
- data/app/controllers/admin/preferences_controller.rb +46 -0
- data/app/controllers/admin/references_controller.rb +7 -0
- data/app/controllers/admin/resource_controller.rb +245 -0
- data/app/controllers/admin/users_controller.rb +40 -0
- data/app/controllers/admin/welcome_controller.rb +48 -0
- data/app/controllers/application_controller.rb +114 -0
- data/app/controllers/site_controller.rb +97 -0
- data/app/helpers/admin/configuration_helper.rb +80 -0
- data/app/helpers/admin/export_helper.rb +2 -0
- data/app/helpers/admin/extensions_helper.rb +2 -0
- data/app/helpers/admin/layouts_helper.rb +21 -0
- data/app/helpers/admin/node_helper.rb +96 -0
- data/app/helpers/admin/pages_helper.rb +117 -0
- data/app/helpers/admin/preferences_helper.rb +3 -0
- data/app/helpers/admin/references_helper.rb +46 -0
- data/app/helpers/admin/regions_helper.rb +28 -0
- data/app/helpers/admin/resource_helper.rb +2 -0
- data/app/helpers/admin/users_helper.rb +8 -0
- data/app/helpers/admin/welcome_helper.rb +2 -0
- data/app/helpers/application_helper.rb +241 -0
- data/app/helpers/site_helper.rb +2 -0
- data/app/models/deprecated_tags.rb +42 -0
- data/app/models/file_not_found_page.rb +32 -0
- data/app/models/layout.rb +15 -0
- data/app/models/menu_renderer.rb +140 -0
- data/app/models/page.rb +377 -0
- data/app/models/page_context.rb +53 -0
- data/app/models/page_field.rb +3 -0
- data/app/models/page_part.rb +20 -0
- data/app/models/standard_tags.rb +1318 -0
- data/app/models/status.rb +41 -0
- data/app/models/text_filter.rb +36 -0
- data/app/models/trusty_cms/config.rb +313 -0
- data/app/models/trusty_cms/page_response_cache_director.rb +43 -0
- data/app/models/user.rb +96 -0
- data/app/models/user_action_observer.rb +25 -0
- data/app/views/admin/configuration/edit.html.haml +38 -0
- data/app/views/admin/configuration/show.html.haml +58 -0
- data/app/views/admin/extensions/index.html.haml +41 -0
- data/app/views/admin/layouts/_form.html.haml +39 -0
- data/app/views/admin/layouts/edit.html.haml +9 -0
- data/app/views/admin/layouts/index.html.haml +35 -0
- data/app/views/admin/layouts/new.html.haml +7 -0
- data/app/views/admin/layouts/remove.html.haml +16 -0
- data/app/views/admin/page_fields/_page_field.html.haml +12 -0
- data/app/views/admin/page_parts/_page_part.html.haml +18 -0
- data/app/views/admin/pages/_fields.html.haml +71 -0
- data/app/views/admin/pages/_meta_row.html.haml +8 -0
- data/app/views/admin/pages/_node.html.haml +26 -0
- data/app/views/admin/pages/_popups.html.haml +27 -0
- data/app/views/admin/pages/children.html.haml +2 -0
- data/app/views/admin/pages/edit.html.haml +12 -0
- data/app/views/admin/pages/index.html.haml +26 -0
- data/app/views/admin/pages/new.html.haml +10 -0
- data/app/views/admin/pages/remove.html.haml +18 -0
- data/app/views/admin/preferences/edit.html.haml +44 -0
- data/app/views/admin/references/_tag_reference.haml +3 -0
- data/app/views/admin/references/filters.haml +6 -0
- data/app/views/admin/references/tags.haml +30 -0
- data/app/views/admin/users/_avatar.html.haml +5 -0
- data/app/views/admin/users/_form.html.haml +53 -0
- data/app/views/admin/users/_password_fields.html.haml +18 -0
- data/app/views/admin/users/edit.html.haml +9 -0
- data/app/views/admin/users/index.html.haml +39 -0
- data/app/views/admin/users/new.html.haml +6 -0
- data/app/views/admin/users/remove.html.haml +16 -0
- data/app/views/admin/welcome/login.html.haml +23 -0
- data/app/views/layouts/application.html.haml +50 -0
- data/app/views/site/not_found.html.haml +3 -0
- data/bin/ci/before_script +15 -0
- data/bin/trusty_cms +53 -0
- data/config/application.rb +124 -0
- data/config/boot.rb +9 -0
- data/config/compass.config +15 -0
- data/config/database.db2.yml +20 -0
- data/config/database.mysql.yml +25 -0
- data/config/database.postgresql.yml +25 -0
- data/config/database.sqlite.yml +16 -0
- data/config/database.sqlserver.yml +20 -0
- data/config/environment.rb +5 -0
- data/config/environments/development.rb +19 -0
- data/config/environments/production.rb +27 -0
- data/config/environments/test.rb +35 -0
- data/config/initializers/active_record_extensions.rb +1 -0
- data/config/initializers/configuration_extensions.rb +0 -0
- data/config/initializers/haml.rb +2 -0
- data/config/initializers/object_extensions.rb +1 -0
- data/config/initializers/radiant_config.rb +16 -0
- data/config/initializers/rails_patch.rb +2 -0
- data/config/initializers/response_cache_timeout.rb +3 -0
- data/config/initializers/string_extensions.rb +1 -0
- data/config/initializers/symbol_extensions.rb +1 -0
- data/config/initializers/tmp.rb +2 -0
- data/config/locales/en.yml +230 -0
- data/config/locales/en_available_tags.yml +625 -0
- data/config/preinitializer.rb +18 -0
- data/config/routes.rb +30 -0
- data/db/migrate/001_create_radiant_tables.rb +75 -0
- data/db/migrate/002_insert_initial_data.rb +12 -0
- data/db/migrate/003_rename_behavior_column.rb +9 -0
- data/db/migrate/004_rename_filter_column.rb +11 -0
- data/db/migrate/005_add_virtual_column_to_page.rb +9 -0
- data/db/migrate/006_integer_columns_to_boolean.rb +36 -0
- data/db/migrate/007_remove_virtual_column_from_page.rb +9 -0
- data/db/migrate/008_add_virtual_column_to_page_again.rb +9 -0
- data/db/migrate/009_add_content_type_field_to_layout.rb +9 -0
- data/db/migrate/010_merge_behaviors_and_pages.rb +57 -0
- data/db/migrate/011_rename_type_column_on_page_to_class_name.rb +9 -0
- data/db/migrate/012_create_extension_meta.rb +13 -0
- data/db/migrate/013_add_notes_field_to_user.rb +9 -0
- data/db/migrate/014_rename_config_default_parts_key.rb +17 -0
- data/db/migrate/015_add_optimistic_locking.rb +15 -0
- data/db/migrate/016_add_sessions.rb +16 -0
- data/db/migrate/017_rename_created_by_updated_by_columns.rb +15 -0
- data/db/migrate/018_add_description_and_keywords_to_pages.rb +11 -0
- data/db/migrate/019_add_salt_to_users.rb +11 -0
- data/db/migrate/020_add_session_info_to_users.rb +11 -0
- data/db/migrate/021_remove_session_expire_from_users.rb +9 -0
- data/db/migrate/20081203140407_add_indexes.rb +19 -0
- data/db/migrate/20090226140109_add_user_language.rb +9 -0
- data/db/migrate/20090929164633_rename_developer_role_to_designer.rb +9 -0
- data/db/migrate/20091003095744_change_user_language_to_locale.rb +9 -0
- data/db/migrate/20100805154952_add_page_fields.rb +15 -0
- data/db/migrate/20100805155020_convert_page_metas.rb +24 -0
- data/db/migrate/20100810151922_add_field_name_index.rb +11 -0
- data/db/migrate/20110902203823_add_allowed_children_cache_to_pages.rb +13 -0
- data/db/migrate/20111016150725_extend_page_part_content_limit.rb +15 -0
- data/db/migrate/20120209231801_change_pages_allowed_children_cache_to_text.rb +11 -0
- data/db/schema.rb +128 -0
- data/lib/active_record_extensions/active_record_extensions.rb +27 -0
- data/lib/annotatable.rb +68 -0
- data/lib/configuration_extensions/configuration_extensions.rb +357 -0
- data/lib/generators/extension/USAGE +30 -0
- data/lib/generators/extension/extension_generator.rb +97 -0
- data/lib/generators/extension/templates/README.md +6 -0
- data/lib/generators/extension/templates/RSpecRakefile +109 -0
- data/lib/generators/extension/templates/Rakefile +25 -0
- data/lib/generators/extension/templates/cucumber.yml +1 -0
- data/lib/generators/extension/templates/cucumber_env.rb +11 -0
- data/lib/generators/extension/templates/cucumber_paths.rb +22 -0
- data/lib/generators/extension/templates/en.yml +3 -0
- data/lib/generators/extension/templates/extension.rb +21 -0
- data/lib/generators/extension/templates/functional_test.rb +15 -0
- data/lib/generators/extension/templates/gemspec.rb +29 -0
- data/lib/generators/extension/templates/lib.rb +8 -0
- data/lib/generators/extension/templates/migration.rb +9 -0
- data/lib/generators/extension/templates/radiant_config.rb +3 -0
- data/lib/generators/extension/templates/routes.rb +5 -0
- data/lib/generators/extension/templates/spec.opts +6 -0
- data/lib/generators/extension/templates/spec_helper.rb +42 -0
- data/lib/generators/extension/templates/tasks.rake +47 -0
- data/lib/generators/extension/templates/test_helper.rb +26 -0
- data/lib/generators/extension_controller/USAGE +36 -0
- data/lib/generators/extension_controller/extension_controller_generator.rb +84 -0
- data/lib/generators/extension_controller/templates/controller.rb +10 -0
- data/lib/generators/extension_controller/templates/controller_spec.rb +23 -0
- data/lib/generators/extension_controller/templates/functional_test.rb +11 -0
- data/lib/generators/extension_controller/templates/helper.rb +2 -0
- data/lib/generators/extension_controller/templates/helper_spec.rb +11 -0
- data/lib/generators/extension_controller/templates/helper_test.rb +4 -0
- data/lib/generators/extension_controller/templates/view.html.erb +2 -0
- data/lib/generators/extension_controller/templates/view_spec.rb +12 -0
- data/lib/generators/extension_mailer/USAGE +17 -0
- data/lib/generators/extension_mailer/extension_mailer_generator.rb +68 -0
- data/lib/generators/extension_mailer/templates/fixture.erb +3 -0
- data/lib/generators/extension_mailer/templates/mailer.rb +15 -0
- data/lib/generators/extension_mailer/templates/unit_test.rb +21 -0
- data/lib/generators/extension_mailer/templates/view.erb +3 -0
- data/lib/generators/extension_migration/USAGE +34 -0
- data/lib/generators/extension_migration/extension_migration_generator.rb +25 -0
- data/lib/generators/extension_migration/templates/migration.rb +11 -0
- data/lib/generators/extension_model/USAGE +35 -0
- data/lib/generators/extension_model/extension_model_generator.rb +68 -0
- data/lib/generators/extension_model/templates/fixtures.yml +19 -0
- data/lib/generators/extension_model/templates/migration.rb +16 -0
- data/lib/generators/extension_model/templates/model.rb +2 -0
- data/lib/generators/extension_model/templates/model_spec.rb +11 -0
- data/lib/generators/extension_model/templates/unit_test.rb +8 -0
- data/lib/generators/generator_base_extension.rb +16 -0
- data/lib/generators/instance/instance_generator.rb +148 -0
- data/lib/generators/instance/templates/databases/db2.yml +40 -0
- data/lib/generators/instance/templates/databases/mysql.yml +47 -0
- data/lib/generators/instance/templates/databases/postgresql.yml +44 -0
- data/lib/generators/instance/templates/databases/sqlite3.yml +16 -0
- data/lib/generators/instance/templates/databases/sqlserver.yml +21 -0
- data/lib/generators/instance/templates/instance_boot.rb +122 -0
- data/lib/generators/instance/templates/instance_config.ru +2 -0
- data/lib/generators/instance/templates/instance_environment.rb +83 -0
- data/lib/generators/instance/templates/instance_gemfile +81 -0
- data/lib/generators/instance/templates/instance_generate +6 -0
- data/lib/generators/instance/templates/instance_radiant_config.rb +16 -0
- data/lib/generators/instance/templates/instance_rakefile +3 -0
- data/lib/generators/instance/templates/instance_routes.rb +1 -0
- data/lib/generators/language_extension/USAGE +27 -0
- data/lib/generators/language_extension/language_extension_generator.rb +71 -0
- data/lib/generators/language_extension/templates/README +3 -0
- data/lib/generators/language_extension/templates/RSpecRakefile +123 -0
- data/lib/generators/language_extension/templates/Rakefile +25 -0
- data/lib/generators/language_extension/templates/available_tags.yml +553 -0
- data/lib/generators/language_extension/templates/cucumber.yml +1 -0
- data/lib/generators/language_extension/templates/cucumber_env.rb +16 -0
- data/lib/generators/language_extension/templates/cucumber_paths.rb +14 -0
- data/lib/generators/language_extension/templates/extension.rb +12 -0
- data/lib/generators/language_extension/templates/functional_test.rb +15 -0
- data/lib/generators/language_extension/templates/gemspec.rb +24 -0
- data/lib/generators/language_extension/templates/lang.yml +181 -0
- data/lib/generators/language_extension/templates/lib.rb +8 -0
- data/lib/generators/language_extension/templates/spec.opts +6 -0
- data/lib/generators/language_extension/templates/spec_helper.rb +36 -0
- data/lib/generators/language_extension/templates/tasks.rake +28 -0
- data/lib/generators/language_extension/templates/test_helper.rb +26 -0
- data/lib/inheritable_class_attributes.rb +65 -0
- data/lib/local_time.rb +6 -0
- data/lib/login_system.rb +132 -0
- data/lib/method_observer.rb +50 -0
- data/lib/object_extensions/object_extensions.rb +5 -0
- data/lib/simpleton.rb +21 -0
- data/lib/string_extensions/string_extensions.rb +25 -0
- data/lib/symbol_extensions/symbol_extensions.rb +5 -0
- data/lib/tasks/database.rake +85 -0
- data/lib/tasks/environments.rake +11 -0
- data/lib/tasks/extensions.rake +85 -0
- data/lib/tasks/framework.rake +255 -0
- data/lib/tasks/instance.rake +23 -0
- data/lib/tasks/prototype.rake +31 -0
- data/lib/tasks/radiant_config.rake +18 -0
- data/lib/tasks/release.rake +131 -0
- data/lib/tasks/translate.rake +59 -0
- data/lib/tasks/undefine.rake +28 -0
- data/lib/translation_support.rb +54 -0
- data/lib/trusty_cms/admin_ui/region_partials.rb +23 -0
- data/lib/trusty_cms/admin_ui/region_set.rb +35 -0
- data/lib/trusty_cms/admin_ui.rb +244 -0
- data/lib/trusty_cms/available_locales.rb +19 -0
- data/lib/trusty_cms/cache.rb +100 -0
- data/lib/trusty_cms/config/definition.rb +142 -0
- data/lib/trusty_cms/engine.rb +10 -0
- data/lib/trusty_cms/extension/script.rb +395 -0
- data/lib/trusty_cms/extension.rb +146 -0
- data/lib/trusty_cms/extension_loader.rb +130 -0
- data/lib/trusty_cms/extension_migrator.rb +98 -0
- data/lib/trusty_cms/extension_path.rb +200 -0
- data/lib/trusty_cms/initializer.rb +162 -0
- data/lib/trusty_cms/pagination/controller.rb +41 -0
- data/lib/trusty_cms/pagination/link_renderer.rb +34 -0
- data/lib/trusty_cms/resource_responses.rb +121 -0
- data/lib/trusty_cms/setup.rb +227 -0
- data/lib/trusty_cms/taggable.rb +138 -0
- data/lib/trusty_cms/task_support.rb +66 -0
- data/lib/trusty_cms.rb +19 -0
- data/log/.keep +0 -0
- data/public/.htaccess +40 -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/add_tab.png +0 -0
- data/public/images/admin/avatar_32x32.png +0 -0
- data/public/images/admin/avatar_64x64.png +0 -0
- data/public/images/admin/avatar_96x96.png +0 -0
- data/public/images/admin/brown_bottom_line.gif +0 -0
- data/public/images/admin/calendar_down.gif +0 -0
- data/public/images/admin/collapse.png +0 -0
- data/public/images/admin/draft_page.png +0 -0
- data/public/images/admin/expand.png +0 -0
- data/public/images/admin/image.png +0 -0
- data/public/images/admin/javascript.png +0 -0
- data/public/images/admin/layout.png +0 -0
- data/public/images/admin/metadata_toggle.png +0 -0
- data/public/images/admin/minus.png +0 -0
- data/public/images/admin/minus_disabled.png +0 -0
- data/public/images/admin/minus_grey.png +0 -0
- data/public/images/admin/navigation_secondary_separator.gif +0 -0
- data/public/images/admin/page.png +0 -0
- data/public/images/admin/plus.png +0 -0
- data/public/images/admin/plus_disabled.png +0 -0
- data/public/images/admin/plus_grey.png +0 -0
- data/public/images/admin/popup_border_background.png +0 -0
- data/public/images/admin/popup_border_bottom_left.png +0 -0
- data/public/images/admin/popup_border_bottom_right.png +0 -0
- data/public/images/admin/popup_border_top_left.png +0 -0
- data/public/images/admin/popup_border_top_right.png +0 -0
- data/public/images/admin/search.png +0 -0
- data/public/images/admin/single_form_shadow.png +0 -0
- data/public/images/admin/snippet.png +0 -0
- data/public/images/admin/spinner.gif +0 -0
- data/public/images/admin/status_background.png +0 -0
- data/public/images/admin/status_bottom_left.png +0 -0
- data/public/images/admin/status_bottom_right.png +0 -0
- data/public/images/admin/status_spinner.gif +0 -0
- data/public/images/admin/status_top_left.png +0 -0
- data/public/images/admin/status_top_right.png +0 -0
- data/public/images/admin/stylesheet.png +0 -0
- data/public/images/admin/tab_close.png +0 -0
- data/public/images/admin/upload.png +0 -0
- data/public/images/admin/virtual_page.png +0 -0
- data/public/images/radiant/radiant-badge-color.png +0 -0
- data/public/javascripts/admin/application.js +94 -0
- data/public/javascripts/admin/codearea.js +165 -0
- data/public/javascripts/admin/controls.js +965 -0
- data/public/javascripts/admin/cookie.js +80 -0
- data/public/javascripts/admin/dateinput.js +402 -0
- data/public/javascripts/admin/dragdrop.js +974 -0
- data/public/javascripts/admin/dropdown.js +216 -0
- data/public/javascripts/admin/effects.js +1122 -0
- data/public/javascripts/admin/lowpro.js +340 -0
- data/public/javascripts/admin/overrides.js +1 -0
- data/public/javascripts/admin/page_preview.js +41 -0
- data/public/javascripts/admin/pagefield.js +54 -0
- data/public/javascripts/admin/pagestatus.js +17 -0
- data/public/javascripts/admin/popup.js +339 -0
- data/public/javascripts/admin/prototype.js +4874 -0
- data/public/javascripts/admin/ruledtable.js +13 -0
- data/public/javascripts/admin/shortcuts.js +33 -0
- data/public/javascripts/admin/sitemap.js +149 -0
- data/public/javascripts/admin/status.js +233 -0
- data/public/javascripts/admin/tabcontrol.js +123 -0
- data/public/javascripts/admin/toggle.js +430 -0
- data/public/javascripts/admin/utility.js +53 -0
- data/public/javascripts/admin/validationerror.js +18 -0
- data/public/loading-iframe.html +11 -0
- data/public/robots.txt +1 -0
- data/public/stylesheets/sass/admin/_base.sass +18 -0
- data/public/stylesheets/sass/admin/main.sass +27 -0
- data/public/stylesheets/sass/admin/modules/_boxes.sass +6 -0
- data/public/stylesheets/sass/admin/modules/_gradients.sass +4 -0
- data/public/stylesheets/sass/admin/modules/_links.sass +18 -0
- data/public/stylesheets/sass/admin/overrides.sass +2 -0
- data/public/stylesheets/sass/admin/partials/_actions.sass +96 -0
- data/public/stylesheets/sass/admin/partials/_avatars.sass +10 -0
- data/public/stylesheets/sass/admin/partials/_content.sass +58 -0
- data/public/stylesheets/sass/admin/partials/_dateinput.sass +62 -0
- data/public/stylesheets/sass/admin/partials/_deprecated.sass +55 -0
- data/public/stylesheets/sass/admin/partials/_dropdown.sass +28 -0
- data/public/stylesheets/sass/admin/partials/_footer.sass +12 -0
- data/public/stylesheets/sass/admin/partials/_forms.sass +322 -0
- data/public/stylesheets/sass/admin/partials/_header.sass +114 -0
- data/public/stylesheets/sass/admin/partials/_index.sass +147 -0
- data/public/stylesheets/sass/admin/partials/_layout.sass +10 -0
- data/public/stylesheets/sass/admin/partials/_messages.sass +10 -0
- data/public/stylesheets/sass/admin/partials/_popup.sass +213 -0
- data/public/stylesheets/sass/admin/partials/_tabcontrol.sass +72 -0
- data/public/stylesheets/sass/admin/partials/_toolbar.sass +31 -0
- data/public/stylesheets/sass/admin/partials/_typography.sass +60 -0
- data/public/stylesheets/sass/admin/partials/_validations.sass +19 -0
- data/rails/init.rb +1 -0
- data/script/about +4 -0
- data/script/breakpointer +3 -0
- data/script/console +3 -0
- data/script/dbconsole +3 -0
- data/script/destroy +3 -0
- data/script/extension +5 -0
- data/script/generate +3 -0
- data/script/performance/benchmarker +3 -0
- data/script/performance/profiler +3 -0
- data/script/performance/request +3 -0
- data/script/plugin +3 -0
- data/script/process/inspector +3 -0
- data/script/process/reaper +3 -0
- data/script/process/spawner +3 -0
- data/script/process/spinner +3 -0
- data/script/rails +6 -0
- data/script/runner +3 -0
- data/script/server +3 -0
- data/script/version +5 -0
- data/spec/ci/database.mysql.yml +4 -0
- data/spec/ci/database.postgresql.yml +4 -0
- data/spec/ci/database.sqlite.yml +3 -0
- data/trusty_cms.gemspec +50 -0
- metadata +781 -0
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
require 'ostruct'
|
|
2
|
+
module TrustyCms
|
|
3
|
+
module ResourceResponses
|
|
4
|
+
def self.extended(base)
|
|
5
|
+
base.send :class_attribute, :responses
|
|
6
|
+
base.send :include, InstanceMethods
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def responses
|
|
10
|
+
r = (self.responses = read_inheritable_attribute(:responses) || Collector.new)
|
|
11
|
+
yield r if block_given?
|
|
12
|
+
r
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
module InstanceMethods
|
|
16
|
+
def response_for(action)
|
|
17
|
+
responses = self.class.responses.send(action)
|
|
18
|
+
respond_to do |wants|
|
|
19
|
+
responses.each_format do |f, format_block|
|
|
20
|
+
if format_block
|
|
21
|
+
wants.send(f, &wrap(format_block))
|
|
22
|
+
else
|
|
23
|
+
wants.send(f)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
responses.each_published do |pub, pub_block|
|
|
27
|
+
wants.send(pub, &wrap(pub_block))
|
|
28
|
+
end
|
|
29
|
+
if responses.default
|
|
30
|
+
wants.any(&wrap(responses.default))
|
|
31
|
+
else
|
|
32
|
+
wants.any
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def wrap(proc)
|
|
38
|
+
# Makes sure our response blocks get evaluated in the right context
|
|
39
|
+
lambda do
|
|
40
|
+
# Ruby 1.9.2 yields self in instance_eval... see https://gist.github.com/479572
|
|
41
|
+
# lambdas are as strict as methods in 1.9.x, making sure that the args match, Procs are not.
|
|
42
|
+
if RUBY_VERSION =~ /^1\.9/ and proc.lambda? and proc.arity != 1
|
|
43
|
+
raise "You can only pass a proc ('Proc.new') or a lambda that takes exactly one arg (for self) to the wrap method."
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
instance_eval(&proc)
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
class Collector < OpenStruct
|
|
52
|
+
def initialize
|
|
53
|
+
super
|
|
54
|
+
@table = Hash.new {|h,k| h[k] = Response.new }
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def initialize_copy(orig)
|
|
58
|
+
super
|
|
59
|
+
@table.keys.each do |key|
|
|
60
|
+
@table[key] = orig.send(key).dup
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
class Response
|
|
66
|
+
attr_reader :publish_formats, :publish_block, :blocks, :block_order
|
|
67
|
+
def initialize
|
|
68
|
+
@publish_formats = []
|
|
69
|
+
@blocks = {}
|
|
70
|
+
@block_order = []
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def initialize_copy(orig)
|
|
74
|
+
@publish_formats = orig.publish_formats.dup
|
|
75
|
+
@blocks = orig.blocks.dup
|
|
76
|
+
@block_order = orig.block_order.dup
|
|
77
|
+
@publish_block = orig.publish_block.dup if orig.publish_block
|
|
78
|
+
@default = orig.default.dup if orig.default
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def default(&block)
|
|
82
|
+
if block_given?
|
|
83
|
+
@default = block
|
|
84
|
+
end
|
|
85
|
+
@default
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def publish(*formats, &block)
|
|
89
|
+
@publish_formats.concat(formats)
|
|
90
|
+
if block_given?
|
|
91
|
+
@publish_block = block
|
|
92
|
+
else
|
|
93
|
+
raise ArgumentError, "Block required to publish" unless @publish_block
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def each_published
|
|
98
|
+
publish_formats.each do |format|
|
|
99
|
+
yield format, publish_block if block_given?
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def each_format
|
|
104
|
+
@block_order.each do |format|
|
|
105
|
+
yield format, @blocks[format] if block_given?
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def method_missing(method, *args, &block)
|
|
110
|
+
if block_given?
|
|
111
|
+
@blocks[method] = block
|
|
112
|
+
@block_order << method unless @block_order.include?(method)
|
|
113
|
+
elsif args.empty?
|
|
114
|
+
@block_order << method
|
|
115
|
+
else
|
|
116
|
+
super
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
end
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
require "highline"
|
|
2
|
+
require "forwardable"
|
|
3
|
+
|
|
4
|
+
module TrustyCms
|
|
5
|
+
class Setup
|
|
6
|
+
|
|
7
|
+
class << self
|
|
8
|
+
def bootstrap(config)
|
|
9
|
+
setup = new
|
|
10
|
+
setup.bootstrap(config)
|
|
11
|
+
setup
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
attr_accessor :config
|
|
16
|
+
|
|
17
|
+
def bootstrap(config)
|
|
18
|
+
@config = config
|
|
19
|
+
@admin = create_admin_user(config[:admin_name], config[:admin_username], config[:admin_password])
|
|
20
|
+
UserActionObserver.current_user = @admin
|
|
21
|
+
load_default_configuration
|
|
22
|
+
load_database_template(config[:database_template])
|
|
23
|
+
announce "Finished."
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def create_admin_user(name, username, password)
|
|
27
|
+
unless name and username and password
|
|
28
|
+
announce "Create the admin user (press enter for defaults)."
|
|
29
|
+
name = prompt_for_admin_name unless name
|
|
30
|
+
username = prompt_for_admin_username unless username
|
|
31
|
+
password = prompt_for_admin_password unless password
|
|
32
|
+
end
|
|
33
|
+
attributes = {
|
|
34
|
+
:name => name,
|
|
35
|
+
:login => username,
|
|
36
|
+
:password => password,
|
|
37
|
+
:password_confirmation => password,
|
|
38
|
+
:admin => true
|
|
39
|
+
}
|
|
40
|
+
admin = User.find_by_login(username)
|
|
41
|
+
admin = User.new unless admin
|
|
42
|
+
admin.update_attributes(attributes)
|
|
43
|
+
admin
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def load_default_configuration
|
|
47
|
+
feedback "\nInitializing configuration" do
|
|
48
|
+
step { TrustyCms::Config['admin.title' ] = 'TrustyCms CMS' }
|
|
49
|
+
step { TrustyCms::Config['admin.subtitle'] = 'Publishing for Small Teams' }
|
|
50
|
+
step { TrustyCms::Config['defaults.page.parts' ] = 'body, extended' }
|
|
51
|
+
step { TrustyCms::Config['defaults.page.status' ] = 'Draft' }
|
|
52
|
+
step { TrustyCms::Config['defaults.page.filter' ] = nil }
|
|
53
|
+
step { TrustyCms::Config['defaults.page.fields'] = 'Keywords, Description' }
|
|
54
|
+
step { TrustyCms::Config['session_timeout'] = 2.weeks }
|
|
55
|
+
step { TrustyCms::Config['default_locale'] = 'en' }
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def load_database_template(filename)
|
|
60
|
+
template = nil
|
|
61
|
+
if filename
|
|
62
|
+
name = find_template_in_path(filename)
|
|
63
|
+
unless name
|
|
64
|
+
announce "Invalid template name: #{filename}"
|
|
65
|
+
filename = nil
|
|
66
|
+
else
|
|
67
|
+
template = load_template_file(name)
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
unless filename
|
|
71
|
+
templates = find_and_load_templates("#{TRUSTY_CMS_ROOT}/db/templates/*.yml")
|
|
72
|
+
templates.concat find_and_load_templates("#{TRUSTY_CMS_ROOT}/vendor/extensions/**/db/templates/*.yml")
|
|
73
|
+
TrustyCms::Extension.descendants.each do |d|
|
|
74
|
+
templates.concat find_and_load_templates(d.root + '/db/templates/*.yml')
|
|
75
|
+
end
|
|
76
|
+
templates.concat find_and_load_templates("#{Rails.root}/vendor/extensions/**/db/templates/*.yml")
|
|
77
|
+
templates.concat find_and_load_templates("#{Rails.root}/db/templates/*.yml")
|
|
78
|
+
templates.uniq!
|
|
79
|
+
choose do |menu|
|
|
80
|
+
menu.header = "\nSelect a database template"
|
|
81
|
+
menu.prompt = "[1-#{templates.size}]: "
|
|
82
|
+
menu.select_by = :index
|
|
83
|
+
templates.each { |t| menu.choice(t['name']) { template = t } }
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
create_records(template)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
private
|
|
90
|
+
|
|
91
|
+
def prompt_for_admin_name
|
|
92
|
+
username = ask('Name (Administrator): ', String) do |q|
|
|
93
|
+
q.validate = /^.{0,100}$/
|
|
94
|
+
q.responses[:not_valid] = "Invalid name. Must be at less than 100 characters long."
|
|
95
|
+
q.whitespace = :strip
|
|
96
|
+
end
|
|
97
|
+
username = "Administrator" if username.blank?
|
|
98
|
+
username
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def prompt_for_admin_username
|
|
102
|
+
username = ask('Username (admin): ', String) do |q|
|
|
103
|
+
q.validate = /^(|.{3,40})$/
|
|
104
|
+
q.responses[:not_valid] = "Invalid username. Must be at least 3 characters long."
|
|
105
|
+
q.whitespace = :strip
|
|
106
|
+
end
|
|
107
|
+
username = "admin" if username.blank?
|
|
108
|
+
username
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def prompt_for_admin_password
|
|
112
|
+
password = ask('Password (radiant): ', String) do |q|
|
|
113
|
+
q.echo = false unless defined?(::JRuby) # JRuby doesn't support stty interaction
|
|
114
|
+
q.validate = /^(|.{5,40})$/
|
|
115
|
+
q.responses[:not_valid] = "Invalid password. Must be at least 5 characters long."
|
|
116
|
+
q.whitespace = :strip
|
|
117
|
+
end
|
|
118
|
+
password = "radiant" if password.blank?
|
|
119
|
+
password
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def find_template_in_path(filename)
|
|
123
|
+
(
|
|
124
|
+
[
|
|
125
|
+
filename,
|
|
126
|
+
"#{TRUSTY_CMS_ROOT}/#{filename}",
|
|
127
|
+
"#{TRUSTY_CMS_ROOT}/db/templates/#{filename}",
|
|
128
|
+
"#{Rails.root}/#{filename}",
|
|
129
|
+
"#{Rails.root}/db/templates/#{filename}",
|
|
130
|
+
"#{Dir.pwd}/#{filename}",
|
|
131
|
+
"#{Dir.pwd}/db/templates/#{filename}"
|
|
132
|
+
] +
|
|
133
|
+
Dir.glob("#{TRUSTY_CMS_ROOT}/vendor/extensions/**/db/templates/#{filename}") +
|
|
134
|
+
Dir.glob("#{Rails.root}/vendor/extensions/**/db/templates/#{filename}") +
|
|
135
|
+
TrustyCms::Extension.descendants.inject([]) do |r, d|
|
|
136
|
+
r << "#{d.root}/db/templates/#{filename}"
|
|
137
|
+
end
|
|
138
|
+
).find { |name| File.file?(name) }
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def find_and_load_templates(glob)
|
|
142
|
+
templates = Dir[glob]
|
|
143
|
+
templates.map! { |template| load_template_file(template) }
|
|
144
|
+
templates.sort_by { |template| template['name'] }
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
def load_template_file(filename)
|
|
148
|
+
YAML.load_file(filename)
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
def create_records(template)
|
|
152
|
+
records = template['records']
|
|
153
|
+
if records
|
|
154
|
+
puts
|
|
155
|
+
records.keys.each do |key|
|
|
156
|
+
feedback "Creating #{key.to_s.underscore.humanize}" do
|
|
157
|
+
model = model(key)
|
|
158
|
+
model.reset_column_information
|
|
159
|
+
record_pairs = order_by_id(records[key])
|
|
160
|
+
step do
|
|
161
|
+
record_pairs.each do |id, record|
|
|
162
|
+
model.new(record).save
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
end
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
def model(model_name)
|
|
171
|
+
model_name.to_s.singularize.constantize
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
def order_by_id(records)
|
|
175
|
+
records.map { |name, record| [record['id'], record] }.sort { |a, b| a[0] <=> b[0] }
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
extend Forwardable
|
|
179
|
+
def_delegators :terminal, :agree, :ask, :choose, :say
|
|
180
|
+
|
|
181
|
+
def terminal
|
|
182
|
+
@terminal ||= HighLine.new
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
def output
|
|
186
|
+
terminal.instance_variable_get("@output")
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
def wrap(string)
|
|
190
|
+
string = terminal.send(:wrap, string) unless terminal.wrap_at.nil?
|
|
191
|
+
string
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
def print(string)
|
|
195
|
+
output.print(wrap(string))
|
|
196
|
+
output.flush
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
def puts(string = "\n")
|
|
200
|
+
say string
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
def announce(string)
|
|
204
|
+
puts "\n#{string}"
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
def feedback(process, &block)
|
|
208
|
+
print "#{process}..."
|
|
209
|
+
if yield
|
|
210
|
+
puts "OK"
|
|
211
|
+
true
|
|
212
|
+
else
|
|
213
|
+
puts "FAILED"
|
|
214
|
+
false
|
|
215
|
+
end
|
|
216
|
+
rescue Exception => e
|
|
217
|
+
puts "FAILED"
|
|
218
|
+
raise e
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
def step
|
|
222
|
+
yield if block_given?
|
|
223
|
+
print '.'
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
end
|
|
227
|
+
end
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
module TrustyCms::Taggable
|
|
2
|
+
mattr_accessor :last_description, :tag_descriptions, :tag_deprecations
|
|
3
|
+
@@tag_descriptions = {}
|
|
4
|
+
@@tag_deprecations = {}
|
|
5
|
+
|
|
6
|
+
def self.included(base)
|
|
7
|
+
base.extend(ClassMethods)
|
|
8
|
+
base.module_eval do
|
|
9
|
+
def self.included(new_base)
|
|
10
|
+
super
|
|
11
|
+
new_base.class_eval do
|
|
12
|
+
include Rails.application.routes.url_helpers
|
|
13
|
+
end
|
|
14
|
+
class << new_base
|
|
15
|
+
def default_url_options
|
|
16
|
+
{:controller => "site", :action => "show_page", :only_path => true}
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
new_base.tag_descriptions.merge! self.tag_descriptions
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
protected
|
|
23
|
+
def params
|
|
24
|
+
@params ||= request.parameters unless request.nil?
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def request_uri
|
|
28
|
+
@request_url ||= request.request_uri unless request.nil?
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def render_tag(name, tag_binding)
|
|
34
|
+
tag_method_name = "tag:#{name}"
|
|
35
|
+
tag_method = method(tag_method_name)
|
|
36
|
+
if tag_method.arity == 0
|
|
37
|
+
tag_method.call
|
|
38
|
+
else
|
|
39
|
+
tag_method.call tag_binding
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def tags
|
|
44
|
+
Util.tags_in_array(methods)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def tag_descriptions(hash=nil)
|
|
48
|
+
self.class.tag_descriptions hash
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def warn_of_tag_deprecation(tag_name, options={})
|
|
52
|
+
message = "Deprecated radius tag <r:#{tag_name}>"
|
|
53
|
+
message << " will be removed or significantly changed in radiant #{options[:deadline]}." if options[:deadline]
|
|
54
|
+
message << " Please use <r:#{options[:substitute]}> instead." if options[:substitute]
|
|
55
|
+
ActiveSupport::Deprecation.warn(message)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
module ClassMethods
|
|
59
|
+
def inherited(subclass)
|
|
60
|
+
subclass.tag_descriptions.reverse_merge! self.tag_descriptions
|
|
61
|
+
super
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def tag_descriptions(hash = nil)
|
|
65
|
+
TrustyCms::Taggable.tag_descriptions[self.name] ||= (hash ||{})
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def desc(text)
|
|
69
|
+
TrustyCms::Taggable.last_description = text
|
|
70
|
+
# TrustyCms::Taggable.last_description = RedCloth.new(Util.strip_leading_whitespace(text)).to_html
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def tag(name, &block)
|
|
74
|
+
self.tag_descriptions[name] = TrustyCms::Taggable.last_description if TrustyCms::Taggable.last_description
|
|
75
|
+
TrustyCms::Taggable.last_description = nil
|
|
76
|
+
define_method("tag:#{name}", &block)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def tags
|
|
80
|
+
Util.tags_in_array(self.instance_methods)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# Define a tag while also deprecating it. Normal usage:
|
|
84
|
+
#
|
|
85
|
+
# deprecated_tag 'old:way', :substitute => 'new:way', :deadline => '1.1.1'
|
|
86
|
+
#
|
|
87
|
+
# If no substitute is given then a warning will be issued but nothing rendered.
|
|
88
|
+
# If a deadline version is provided then it will be mentioned in the deprecation warnings.
|
|
89
|
+
#
|
|
90
|
+
# In less standard situations you can use deprecated_tag in exactly the
|
|
91
|
+
# same way as tags are normally defined:
|
|
92
|
+
#
|
|
93
|
+
# desc %{
|
|
94
|
+
# Please note that the old r:busted namespace is no longer supported.
|
|
95
|
+
# Refer to the documentation for more about the new r:hotness tags.
|
|
96
|
+
# }
|
|
97
|
+
# deprecated_tag 'busted' do |tag|
|
|
98
|
+
# raise TagError "..."
|
|
99
|
+
# end
|
|
100
|
+
#
|
|
101
|
+
def deprecated_tag(name, options={}, &dblock)
|
|
102
|
+
TrustyCms::Taggable.tag_deprecations[name] = options.dup
|
|
103
|
+
if dblock
|
|
104
|
+
tag(name) do |tag|
|
|
105
|
+
warn_of_tag_deprecation(name, options)
|
|
106
|
+
dblock.call(tag)
|
|
107
|
+
end
|
|
108
|
+
else
|
|
109
|
+
tag(name) do |tag|
|
|
110
|
+
warn_of_tag_deprecation(name, options)
|
|
111
|
+
tag.render(options[:substitute], tag.attr.dup, &tag.block) if options[:substitute]
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
module Util
|
|
118
|
+
def self.tags_in_array(array)
|
|
119
|
+
array.grep(/^tag:/).map { |name| name[4..-1] }.sort
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def self.strip_leading_whitespace(text)
|
|
123
|
+
text = text.dup
|
|
124
|
+
text.gsub!("\t", " ")
|
|
125
|
+
lines = text.split("\n")
|
|
126
|
+
leading = lines.map do |line|
|
|
127
|
+
unless line =~ /^\s*$/
|
|
128
|
+
line.match(/^(\s*)/)[0].length
|
|
129
|
+
else
|
|
130
|
+
nil
|
|
131
|
+
end
|
|
132
|
+
end.compact.min
|
|
133
|
+
lines.inject([]) {|ary, line| ary << line.sub(/^[ ]{#{leading}}/, "")}.join("\n")
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
end
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
module TrustyCms
|
|
2
|
+
class TaskSupport
|
|
3
|
+
class << self
|
|
4
|
+
def establish_connection
|
|
5
|
+
unless ActiveRecord::Base.connected?
|
|
6
|
+
connection_hash = YAML.load_file("#{Rails.root}/config/database.yml").to_hash
|
|
7
|
+
env_connection = connection_hash[Rails.env]
|
|
8
|
+
ActiveRecord::Base.establish_connection(env_connection)
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
def config_export(path = "#{Rails.root}/config/radiant_config.yml")
|
|
12
|
+
self.establish_connection
|
|
13
|
+
FileUtils.mkdir_p(File.dirname(path))
|
|
14
|
+
if File.open(File.expand_path(path), 'w') { |f| YAML.dump(TrustyCms::Config.to_hash.to_yaml,f) }
|
|
15
|
+
puts "TrustyCms::Config saved to #{path}"
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
def config_import(path = "#{Rails.root}/config/radiant_config.yml", clear = nil)
|
|
19
|
+
self.establish_connection
|
|
20
|
+
if File.exist?(path)
|
|
21
|
+
begin
|
|
22
|
+
TrustyCms::Config.transaction do
|
|
23
|
+
TrustyCms::Config.delete_all if clear
|
|
24
|
+
configs = YAML.load(YAML.load_file(path))
|
|
25
|
+
configs.each do |key, value|
|
|
26
|
+
c = TrustyCms::Config.find_or_initialize_by_key(key)
|
|
27
|
+
c.value = value
|
|
28
|
+
c.save
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
puts "TrustyCms::Config updated from #{path}"
|
|
32
|
+
rescue ActiveRecord::RecordInvalid => e
|
|
33
|
+
puts "IMPORT FAILED and rolled back. #{e}"
|
|
34
|
+
end
|
|
35
|
+
else
|
|
36
|
+
puts "No file exists at #{path}"
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Write the combined content of files in dir into cache_file in the same dir.
|
|
41
|
+
#
|
|
42
|
+
def cache_files(dir, files, cache_file)
|
|
43
|
+
cache_content = files.collect { |f|
|
|
44
|
+
File.read(File.join(dir, f)) }.join("\n\n")
|
|
45
|
+
|
|
46
|
+
cache_path = File.join(dir, cache_file)
|
|
47
|
+
File.delete(cache_path) if File.exists?(cache_path)
|
|
48
|
+
File.open(cache_path, "w+") { |f| f.write(cache_content) }
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# Reads through the layout file and returns an array of JS filenames
|
|
52
|
+
#
|
|
53
|
+
def find_admin_js
|
|
54
|
+
layout = "#{TRUSTY_CMS_ROOT}/app/views/layouts/application.html.haml"
|
|
55
|
+
js_regexp = /javascript_include_tag %w\((.*)\), :cache => 'admin\/all/
|
|
56
|
+
files = File.open(layout) { |f| f.read.match(js_regexp)[1].split }
|
|
57
|
+
files.collect { |f| f.split('/').last + '.js' }
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def cache_admin_js
|
|
61
|
+
dir = "#{Rails.root}/public/javascripts/admin"
|
|
62
|
+
cache_files(dir, find_admin_js, 'all.js')
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
data/lib/trusty_cms.rb
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
TRUSTY_CMS_ROOT = File.expand_path(File.join(File.dirname(__FILE__), "..")) unless defined? TRUSTY_CMS_ROOT
|
|
2
|
+
|
|
3
|
+
unless defined? TrustyCms::Version
|
|
4
|
+
module TrustyCms
|
|
5
|
+
module Version
|
|
6
|
+
Major = '1'
|
|
7
|
+
Minor = '0'
|
|
8
|
+
Tiny = '0'
|
|
9
|
+
Patch = nil # set to nil for normal release
|
|
10
|
+
|
|
11
|
+
class << self
|
|
12
|
+
def to_s
|
|
13
|
+
[Major, Minor, Tiny, Patch].delete_if{|v| v.nil? }.join('.')
|
|
14
|
+
end
|
|
15
|
+
alias :to_str :to_s
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
data/log/.keep
ADDED
|
File without changes
|
data/public/.htaccess
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# General Apache options
|
|
2
|
+
AddHandler fastcgi-script .fcgi
|
|
3
|
+
#AddHandler cgi-script .cgi
|
|
4
|
+
Options +FollowSymLinks +ExecCGI
|
|
5
|
+
|
|
6
|
+
# If you don't want Rails to look in certain directories,
|
|
7
|
+
# use the following rewrite rules so that Apache won't rewrite certain requests
|
|
8
|
+
#
|
|
9
|
+
# Example:
|
|
10
|
+
# RewriteCond %{REQUEST_URI} ^/notrails.*
|
|
11
|
+
# RewriteRule .* - [L]
|
|
12
|
+
|
|
13
|
+
# Redirect all requests not available on the filesystem to Rails
|
|
14
|
+
# By default the cgi dispatcher is used which is very slow
|
|
15
|
+
#
|
|
16
|
+
# For better performance replace the dispatcher with the fastcgi one
|
|
17
|
+
#
|
|
18
|
+
# Example:
|
|
19
|
+
# RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
|
|
20
|
+
RewriteEngine On
|
|
21
|
+
|
|
22
|
+
# If your Rails application is accessed via an Alias directive,
|
|
23
|
+
# then you MUST also set the RewriteBase in this htaccess file.
|
|
24
|
+
#
|
|
25
|
+
# Example:
|
|
26
|
+
# Alias /myrailsapp /path/to/myrailsapp/public
|
|
27
|
+
# RewriteBase /myrailsapp
|
|
28
|
+
|
|
29
|
+
RewriteRule ^$ index.html [QSA]
|
|
30
|
+
RewriteRule ^([^.]+)$ $1.html [QSA]
|
|
31
|
+
RewriteCond %{REQUEST_FILENAME} !-f
|
|
32
|
+
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
|
|
33
|
+
|
|
34
|
+
# In case Rails experiences terminal errors
|
|
35
|
+
# Instead of displaying this message you can supply a file here which will be rendered instead
|
|
36
|
+
#
|
|
37
|
+
# Example:
|
|
38
|
+
# ErrorDocument 500 /500.html
|
|
39
|
+
|
|
40
|
+
ErrorDocument 500 "<h2>Application error</h2>Rails application failed to start properly"
|
data/public/404.html
ADDED
data/public/500.html
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
|
2
|
+
"http://www.w3.org/TR/html4/loose.dtd">
|
|
3
|
+
<html>
|
|
4
|
+
<body>
|
|
5
|
+
<h1>Application error</h1>
|
|
6
|
+
<p>Change this error message for exceptions thrown outside of an action (like in Dispatcher setups or broken Ruby code) in public/500.html</p>
|
|
7
|
+
</body>
|
|
8
|
+
</html>
|
data/public/dispatch.cgi
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
#!/home/rails/bin/ruby
|
|
2
|
+
|
|
3
|
+
require File.dirname(__FILE__) + "/../config/environment" unless defined?(Rails.root)
|
|
4
|
+
|
|
5
|
+
# If you're using RubyGems and mod_ruby, this require should be changed to an absolute path one, like:
|
|
6
|
+
# "/usr/local/lib/ruby/gems/1.8/gems/rails-0.8.0/lib/dispatcher" -- otherwise performance is severely impaired
|
|
7
|
+
require "dispatcher"
|
|
8
|
+
|
|
9
|
+
ADDITIONAL_LOAD_PATHS.reverse.each { |dir| $:.unshift(dir) if File.directory?(dir) } if defined?(Apache::RubyRun)
|
|
10
|
+
Dispatcher.dispatch
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
#
|
|
3
|
+
# You may specify the path to the FastCGI crash log (a log of unhandled
|
|
4
|
+
# exceptions which forced the FastCGI instance to exit, great for debugging)
|
|
5
|
+
# and the number of requests to process before running garbage collection.
|
|
6
|
+
#
|
|
7
|
+
# By default, the FastCGI crash log is Rails.root/log/fastcgi.crash.log
|
|
8
|
+
# and the GC period is nil (turned off). A reasonable number of requests
|
|
9
|
+
# could range from 10-100 depending on the memory footprint of your app.
|
|
10
|
+
#
|
|
11
|
+
# Example:
|
|
12
|
+
# # Default log path, normal GC behavior.
|
|
13
|
+
# RailsFCGIHandler.process!
|
|
14
|
+
#
|
|
15
|
+
# # Default log path, 50 requests between GC.
|
|
16
|
+
# RailsFCGIHandler.process! nil, 50
|
|
17
|
+
#
|
|
18
|
+
# # Custom log path, normal GC behavior.
|
|
19
|
+
# RailsFCGIHandler.process! '/var/log/myapp_fcgi_crash.log'
|
|
20
|
+
#
|
|
21
|
+
require File.dirname(__FILE__) + "/../config/environment"
|
|
22
|
+
require 'fcgi_handler'
|
|
23
|
+
|
|
24
|
+
RailsFCGIHandler.process!
|
data/public/dispatch.rb
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
#!/home/rails/bin/ruby
|
|
2
|
+
|
|
3
|
+
require File.dirname(__FILE__) + "/../config/environment" unless defined?(Rails.root)
|
|
4
|
+
|
|
5
|
+
# If you're using RubyGems and mod_ruby, this require should be changed to an absolute path one, like:
|
|
6
|
+
# "/usr/local/lib/ruby/gems/1.8/gems/rails-0.8.0/lib/dispatcher" -- otherwise performance is severely impaired
|
|
7
|
+
require "dispatcher"
|
|
8
|
+
|
|
9
|
+
ADDITIONAL_LOAD_PATHS.reverse.each { |dir| $:.unshift(dir) if File.directory?(dir) } if defined?(Apache::RubyRun)
|
|
10
|
+
Dispatcher.dispatch
|
data/public/favicon.ico
ADDED
|
File without changes
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|