browsercms 3.4.2 → 3.5.0.rc1
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/README.markdown +1 -0
- data/app/assets/images/cms/file-uploading.gif +0 -0
- data/app/assets/javascripts/cms/application.js +1 -0
- data/app/assets/javascripts/cms/attachment_manager.js.erb +87 -0
- data/app/assets/javascripts/cms/core_library.js.erb +38 -25
- data/app/assets/stylesheets/cms/application.css.erb +1 -0
- data/app/assets/stylesheets/cms/attachment_manager.css.scss +28 -0
- data/app/controllers/cms/application_controller.rb +1 -1
- data/app/controllers/cms/attachments_controller.rb +45 -10
- data/app/controllers/cms/cache_controller.rb +1 -1
- data/app/controllers/cms/content_block_controller.rb +134 -122
- data/app/controllers/cms/content_controller.rb +143 -155
- data/app/controllers/cms/dashboard_controller.rb +11 -9
- data/app/controllers/cms/error_handling.rb +19 -7
- data/app/controllers/cms/file_blocks_controller.rb +2 -2
- data/app/controllers/cms/home_controller.rb +3 -0
- data/app/controllers/cms/section_nodes_controller.rb +52 -44
- data/app/controllers/cms/sections_controller.rb +4 -2
- data/app/controllers/cms/toolbar_controller.rb +14 -10
- data/app/helpers/cms/application_helper.rb +23 -19
- data/app/helpers/cms/form_builder.rb +65 -18
- data/app/helpers/cms/mobile_helper.rb +19 -0
- data/app/helpers/cms/path_helper.rb +30 -4
- data/app/helpers/cms/rendering_helper.rb +9 -1
- data/app/models/cms/abstract_file_block.rb +6 -6
- data/app/models/cms/attachment.rb +196 -107
- data/app/models/cms/category.rb +3 -0
- data/app/models/cms/category_type.rb +2 -0
- data/app/models/cms/connector.rb +3 -0
- data/app/models/cms/content_type.rb +3 -0
- data/app/models/cms/content_type_group.rb +2 -0
- data/app/models/cms/dynamic_view.rb +4 -0
- data/app/models/cms/email_message.rb +2 -0
- data/app/models/cms/file_block.rb +9 -2
- data/app/models/cms/group.rb +5 -2
- data/app/models/cms/group_permission.rb +2 -0
- data/app/models/cms/group_section.rb +3 -0
- data/app/models/cms/group_type.rb +2 -0
- data/app/models/cms/group_type_permission.rb +2 -0
- data/app/models/cms/html_block.rb +3 -2
- data/app/models/cms/image_block.rb +13 -2
- data/app/models/cms/page.rb +14 -3
- data/app/models/cms/page_route.rb +4 -0
- data/app/models/cms/page_route_condition.rb +1 -0
- data/app/models/cms/page_route_option.rb +2 -0
- data/app/models/cms/page_route_requirement.rb +1 -0
- data/app/models/cms/permission.rb +3 -0
- data/app/models/cms/portlet.rb +2 -2
- data/app/models/cms/redirect.rb +2 -0
- data/app/models/cms/section.rb +15 -1
- data/app/models/cms/section_node.rb +1 -0
- data/app/models/cms/site.rb +3 -0
- data/app/models/cms/tag.rb +2 -0
- data/app/models/cms/tagging.rb +3 -0
- data/app/models/cms/task.rb +5 -1
- data/app/models/cms/user.rb +1 -1
- data/app/models/cms/user_group_membership.rb +3 -0
- data/app/views/cms/attachments/_attachment.html.erb +14 -0
- data/app/views/cms/attachments/_attachment_table.html.erb +17 -0
- data/app/views/cms/attachments/_attachment_wrapper.html.erb +4 -0
- data/app/views/cms/blocks/index.html.erb +2 -3
- data/app/views/cms/blocks/show.html.erb +1 -1
- data/app/views/cms/dynamic_views/index.html.erb +1 -1
- data/app/views/cms/email_messages/index.html.erb +1 -1
- data/app/views/cms/file_blocks/_form.html.erb +1 -27
- data/app/views/cms/file_blocks/_section_selector.html.erb +13 -0
- data/app/views/cms/file_blocks/render.html.erb +3 -3
- data/app/views/cms/form_builder/_cms_attachment_manager.html.erb +26 -0
- data/app/views/cms/form_builder/_cms_file_field.html.erb +27 -35
- data/app/views/cms/groups/index.html.erb +1 -1
- data/app/views/cms/image_blocks/_form.html.erb +1 -27
- data/app/views/cms/image_blocks/render.html.erb +4 -1
- data/app/views/cms/page_routes/index.html.erb +3 -0
- data/app/views/cms/shared/error.xml.erb +8 -0
- data/app/views/cms/tags/render.html.erb +1 -1
- data/app/views/cms/toolbar/_mobile_toggle.html.erb +33 -0
- data/app/views/cms/users/index.html.erb +1 -1
- data/app/views/layouts/_page_toolbar.html.erb +2 -1
- data/bin/bcms +21 -26
- data/config/routes.rb +3 -2
- data/db/browsercms.seeds.rb +2 -1
- data/db/migrate/20111130221145_browsercms340.rb +5 -4
- data/db/migrate/20120329144406_browsercms350.rb +32 -0
- data/{test/dummy/db → db}/schema.rb +97 -128
- data/{performance_tuning_notes.md → doc/performance_tuning_notes.md} +0 -0
- data/doc/release_notes.md +74 -0
- data/lib/browsercms.rb +3 -0
- data/lib/cms/acts/content_block.rb +10 -2
- data/lib/cms/addressable.rb +8 -0
- data/lib/cms/attachments/attachment_serving.rb +59 -0
- data/lib/cms/attachments/configuration.rb +88 -0
- data/lib/cms/behaviors/attaching.rb +305 -136
- data/lib/cms/behaviors/connecting.rb +3 -4
- data/lib/cms/behaviors/dynamic_attributes.rb +121 -118
- data/lib/cms/behaviors/flush_cache_on_change.rb +1 -3
- data/lib/cms/behaviors/naming.rb +16 -0
- data/lib/cms/behaviors/pagination.rb +4 -1
- data/lib/cms/behaviors/publishing.rb +9 -3
- data/lib/cms/behaviors/searching.rb +3 -8
- data/lib/cms/behaviors/soft_deleting.rb +1 -0
- data/lib/cms/behaviors/taggable.rb +2 -0
- data/lib/cms/behaviors/versioning.rb +73 -120
- data/lib/cms/caching.rb +53 -11
- data/lib/cms/commands/actions.rb +19 -2
- data/lib/cms/configuration.rb +44 -0
- data/lib/cms/content_rendering_support.rb +9 -6
- data/lib/cms/default_accessible.rb +13 -0
- data/lib/cms/domain_support.rb +22 -0
- data/lib/cms/engine.rb +40 -19
- data/lib/cms/engine_helper.rb +54 -0
- data/lib/cms/extensions/active_record/connection_adapters/abstract/schema_statements.rb +14 -2
- data/lib/cms/mobile_aware.rb +67 -0
- data/lib/cms/route_extensions.rb +3 -0
- data/lib/cms/upgrades/v3_5_0.rb +155 -0
- data/lib/cms/version.rb +6 -1
- data/lib/generators/cms/content_block/content_block_generator.rb +14 -9
- data/lib/generators/cms/content_block/templates/_form.html.erb +17 -6
- data/lib/generators/cms/content_block/templates/render.html.erb +12 -5
- data/lib/generators/cms/template/template_generator.rb +11 -2
- data/lib/tasks/cms.rake +23 -0
- data/lib/templates/active_record/model/model.rb +6 -0
- metadata +127 -517
- data/.gitignore +0 -24
- data/.rvmrc +0 -2
- data/Gemfile +0 -29
- data/Gemfile.lock +0 -196
- data/Rakefile +0 -97
- data/app/assets/images/browsercms/.gitkeep +0 -0
- data/app/controllers/browsercms/application_controller.rb +0 -4
- data/browsercms.gemspec +0 -35
- data/config/cucumber.yml +0 -8
- data/config/database.jdbcmysql.yml +0 -30
- data/config/database.mysql.yml +0 -27
- data/config/database.postgres.yml +0 -25
- data/config/database.sqlite3.yml +0 -11
- data/config/environment.rb +0 -6
- data/config/initializers/query_reviewer_patch.rb +0 -12
- data/config/initializers/rack_1_2_1_patch.rb +0 -12
- data/config/locales/en.yml +0 -5
- data/features/acts_as_content_page.feature +0 -62
- data/features/add_content_to_pages.feature +0 -45
- data/features/caching.feature +0 -13
- data/features/ckeditor.feature +0 -11
- data/features/commands/confirm_aruba_works.feature +0 -24
- data/features/commands/generate_module.feature +0 -54
- data/features/commands/install_browsercms.feature +0 -21
- data/features/commands/new_demo_project.feature +0 -30
- data/features/commands/new_projects.feature +0 -50
- data/features/commands/upgrade_modules_to_3_4_0_from_3_1_x.feature +0 -19
- data/features/commands/upgrade_project_to_3_4_0_from_3_3_x.feature +0 -52
- data/features/commands/upgrading_modules.feature +0 -67
- data/features/content_blocks/manage_custom_blocks.feature +0 -67
- data/features/content_blocks/manage_html_blocks.feature +0 -48
- data/features/content_blocks/manage_image_blocks.feature +0 -41
- data/features/content_files.feature +0 -37
- data/features/content_pages.feature +0 -21
- data/features/generators/content_blocks_for_modules.feature +0 -58
- data/features/generators/content_blocks_for_projects.feature +0 -109
- data/features/install_content.feature +0 -25
- data/features/jquery-testplan.txt +0 -12
- data/features/manage_groups.feature +0 -33
- data/features/manage_page_routes.feature +0 -72
- data/features/manage_redirects.feature +0 -20
- data/features/manage_sections.feature +0 -12
- data/features/manage_tasks.feature +0 -25
- data/features/manage_users.feature +0 -38
- data/features/page_templates.feature +0 -49
- data/features/portlets/email_friend_portlet.feature +0 -29
- data/features/portlets/portlets.feature +0 -100
- data/features/portlets/tag_cloud_portlet.feature +0 -28
- data/features/sitemap/create_pages.feature +0 -15
- data/features/sitemap/manage_links.feature +0 -29
- data/features/sitemap/sitemap.feature +0 -18
- data/features/step_definitions/acts_as_content_page_steps.rb.rb +0 -3
- data/features/step_definitions/ckeditor_steps.rb +0 -13
- data/features/step_definitions/command_line_steps.rb +0 -212
- data/features/step_definitions/content_pages_steps.rb +0 -170
- data/features/step_definitions/data_steps.rb +0 -48
- data/features/step_definitions/edit_page_templates_steps.rb +0 -21
- data/features/step_definitions/html_blocks_steps.rb +0 -9
- data/features/step_definitions/install_content_steps.rb +0 -4
- data/features/step_definitions/manage_content_blocks_steps.rb +0 -26
- data/features/step_definitions/manage_image_blocks_steps.rb +0 -31
- data/features/step_definitions/manage_sections_steps.rb +0 -18
- data/features/step_definitions/manage_user_steps.rb +0 -22
- data/features/step_definitions/more_custom_block_steps.rb +0 -34
- data/features/step_definitions/page_route_steps.rb +0 -65
- data/features/step_definitions/page_template_steps.rb +0 -5
- data/features/step_definitions/permissions_steps.rb +0 -13
- data/features/step_definitions/portlets_steps.rb +0 -64
- data/features/step_definitions/redirect_steps.rb +0 -12
- data/features/step_definitions/sitemap_steps.rb +0 -18
- data/features/step_definitions/tag_cloud_steps.rb +0 -11
- data/features/step_definitions/task_steps.rb +0 -4
- data/features/step_definitions/taxonomy_steps.rb +0 -16
- data/features/step_definitions/upgrade_module_steps.rb +0 -76
- data/features/step_definitions/web_steps.rb +0 -211
- data/features/support/async_support.rb +0 -17
- data/features/support/command_line_helpers.rb +0 -63
- data/features/support/debug_formatter.rb +0 -7
- data/features/support/debugging.rb +0 -28
- data/features/support/env.rb +0 -73
- data/features/support/git_api.rb +0 -9
- data/features/support/open_on_first_failure.rb +0 -25
- data/features/support/paths.rb +0 -32
- data/features/support/rails_api.rb +0 -8
- data/features/support/selectors.rb +0 -39
- data/features/support/transforms.rb +0 -7
- data/features/taxonomy/add_content_with_category.feature +0 -30
- data/features/taxonomy/manage_categories.feature +0 -20
- data/features/taxonomy/manage_category_types.feature +0 -16
- data/lib/cms/init.rb +0 -105
- data/lib/tasks/data.rake +0 -43
- data/lib/tasks/db.rake +0 -82
- data/public/styled_file_field/index.html +0 -72
- data/script/cucumber +0 -10
- data/script/rails +0 -6
- data/test/console_helper.rb +0 -5
- data/test/custom_assertions.rb +0 -84
- data/test/dummy/Rakefile +0 -7
- data/test/dummy/app/assets/javascripts/application.js +0 -9
- data/test/dummy/app/assets/javascripts/content_page.js +0 -2
- data/test/dummy/app/assets/stylesheets/application.css +0 -7
- data/test/dummy/app/assets/stylesheets/content_page.css +0 -4
- data/test/dummy/app/controllers/application_controller.rb +0 -3
- data/test/dummy/app/controllers/cms/products_controller.rb +0 -2
- data/test/dummy/app/controllers/cms/sample_blocks_controller.rb +0 -3
- data/test/dummy/app/controllers/content_page_controller.rb +0 -13
- data/test/dummy/app/helpers/application_helper.rb +0 -2
- data/test/dummy/app/helpers/content_page_helper.rb +0 -2
- data/test/dummy/app/mailers/.gitkeep +0 -0
- data/test/dummy/app/models/.gitkeep +0 -0
- data/test/dummy/app/models/cms/sample_block.rb +0 -22
- data/test/dummy/app/models/product.rb +0 -5
- data/test/dummy/app/views/cms/products/_form.html.erb +0 -7
- data/test/dummy/app/views/cms/products/render.html.erb +0 -3
- data/test/dummy/app/views/content_page/custom_page.html.erb +0 -3
- data/test/dummy/app/views/content_page/index.html.erb +0 -2
- data/test/dummy/app/views/layouts/application.html.erb +0 -14
- data/test/dummy/app/views/layouts/templates/default.html.erb +0 -17
- data/test/dummy/app/views/layouts/templates/subpage.html.erb +0 -16
- data/test/dummy/app/views/test_route/index.html.erb +0 -14
- data/test/dummy/config.ru +0 -4
- data/test/dummy/config/application.rb +0 -45
- data/test/dummy/config/boot.rb +0 -10
- data/test/dummy/config/database.yml +0 -27
- data/test/dummy/config/environment.rb +0 -5
- data/test/dummy/config/environments/development.rb +0 -32
- data/test/dummy/config/environments/production.rb +0 -60
- data/test/dummy/config/environments/test.rb +0 -46
- data/test/dummy/config/initializers/backtrace_silencers.rb +0 -7
- data/test/dummy/config/initializers/browsercms.rb +0 -7
- data/test/dummy/config/initializers/inflections.rb +0 -10
- data/test/dummy/config/initializers/mime_types.rb +0 -5
- data/test/dummy/config/initializers/quiet_sprocket_assets.rb +0 -13
- data/test/dummy/config/initializers/secret_token.rb +0 -7
- data/test/dummy/config/initializers/session_store.rb +0 -8
- data/test/dummy/config/initializers/wrap_parameters.rb +0 -14
- data/test/dummy/config/locales/en.yml +0 -5
- data/test/dummy/config/routes.rb +0 -23
- data/test/dummy/db/migrate/20111228141250_create_products.rb +0 -16
- data/test/dummy/db/seeds.rb +0 -1
- data/test/dummy/lib/assets/.gitkeep +0 -0
- data/test/dummy/public/404.html +0 -26
- data/test/dummy/public/422.html +0 -26
- data/test/dummy/public/500.html +0 -26
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/script/rails +0 -6
- data/test/dummy/test/functional/content_page_controller_test.rb +0 -9
- data/test/dummy/test/unit/helpers/content_page_helper_test.rb +0 -4
- data/test/factories.rb +0 -235
- data/test/fixtures/multipart/foo.jpg +0 -0
- data/test/fixtures/multipart/sample_upload.txt +0 -1
- data/test/fixtures/multipart/second_upload.txt +0 -1
- data/test/fixtures/multipart/test.jpg +0 -0
- data/test/fixtures/multipart/version1.txt +0 -1
- data/test/fixtures/multipart/version2.txt +0 -1
- data/test/functional/cms/cache_controller_test.rb +0 -16
- data/test/functional/cms/categories_controller_test.rb +0 -28
- data/test/functional/cms/connectors_controller_test.rb +0 -64
- data/test/functional/cms/content_block_controller_test.rb +0 -127
- data/test/functional/cms/content_controller_test.rb +0 -351
- data/test/functional/cms/dashboard_controller_test.rb +0 -20
- data/test/functional/cms/file_blocks_controller_test.rb +0 -55
- data/test/functional/cms/home_controller_test.rb +0 -160
- data/test/functional/cms/html_blocks_controller_test.rb +0 -159
- data/test/functional/cms/image_blocks_controller_test.rb +0 -78
- data/test/functional/cms/links_controller_test.rb +0 -92
- data/test/functional/cms/log/test.log +0 -0
- data/test/functional/cms/pages_controller_test.rb +0 -233
- data/test/functional/cms/portlets_controller_test.rb +0 -57
- data/test/functional/cms/sections_controller_test.rb +0 -234
- data/test/functional/cms/sessions_controller_test.rb +0 -80
- data/test/functional/cms/tasks_controller_test.rb +0 -64
- data/test/functional/cms/toolbar_controller_test.rb +0 -76
- data/test/functional/cms/users_controller_test.rb +0 -218
- data/test/integration/cms/password_management_test.rb +0 -66
- data/test/integration/sitemap_performance_test.rb +0 -26
- data/test/mock_file.rb +0 -33
- data/test/performance/browsing_test.rb +0 -9
- data/test/support/engine_controller_hacks.rb +0 -34
- data/test/support/factory_helpers.rb +0 -57
- data/test/support/rails_3_1_routes_hack.rb +0 -70
- data/test/test_helper.rb +0 -199
- data/test/test_logging.rb +0 -67
- data/test/unit/active_record_callbacks.rb +0 -50
- data/test/unit/behaviors/attaching_test.rb +0 -370
- data/test/unit/behaviors/cms_user_test.rb +0 -67
- data/test/unit/behaviors/connectable_test.rb +0 -32
- data/test/unit/behaviors/connecting_test.rb +0 -56
- data/test/unit/behaviors/dynamic_attributes_test.rb +0 -74
- data/test/unit/behaviors/namespacing_test.rb +0 -76
- data/test/unit/behaviors/publishable_test.rb +0 -83
- data/test/unit/behaviors/rendering_test.rb +0 -68
- data/test/unit/behaviors/searching_test.rb +0 -102
- data/test/unit/behaviors/taggable_test.rb +0 -110
- data/test/unit/behaviors/userstamping_test.rb +0 -27
- data/test/unit/behaviors/versioning_test.rb +0 -102
- data/test/unit/extensions/active_record/base_test.rb +0 -25
- data/test/unit/extensions/hash_test.rb +0 -26
- data/test/unit/extensions/integer_test.rb +0 -10
- data/test/unit/extensions/string_test.rb +0 -14
- data/test/unit/factories_test.rb +0 -50
- data/test/unit/generators/install_generator_test.rb +0 -15
- data/test/unit/helpers/application_helper_test.rb +0 -104
- data/test/unit/helpers/date_picker_test.rb +0 -17
- data/test/unit/helpers/menu_helper_test.rb +0 -240
- data/test/unit/helpers/page_helper_test.rb +0 -69
- data/test/unit/helpers/path_helper_test.rb +0 -38
- data/test/unit/helpers/rendering_helper_test.rb +0 -8
- data/test/unit/lib/acts_as_content_page_test.rb +0 -72
- data/test/unit/lib/cms/authentication/controller_test.rb +0 -20
- data/test/unit/lib/cms/engine_helper_test.rb +0 -119
- data/test/unit/lib/cms/sitemap_test.rb +0 -210
- data/test/unit/lib/cms_domain_support_test.rb +0 -44
- data/test/unit/lib/command_line_test.rb +0 -70
- data/test/unit/lib/content_block_test.rb +0 -304
- data/test/unit/lib/content_rendering_support_test.rb +0 -40
- data/test/unit/lib/generators_test.rb +0 -40
- data/test/unit/lib/routes_test.rb +0 -98
- data/test/unit/mock_file_test.rb +0 -19
- data/test/unit/models/attachment_test.rb +0 -160
- data/test/unit/models/category_test.rb +0 -40
- data/test/unit/models/category_type_test.rb +0 -8
- data/test/unit/models/connector_test.rb +0 -152
- data/test/unit/models/content_type_group_test.rb +0 -26
- data/test/unit/models/content_type_test.rb +0 -177
- data/test/unit/models/dynamic_views_test.rb +0 -36
- data/test/unit/models/email_page_portlet_test.rb +0 -20
- data/test/unit/models/file_block_test.rb +0 -246
- data/test/unit/models/group_test.rb +0 -29
- data/test/unit/models/html_block_test.rb +0 -121
- data/test/unit/models/image_block_test.rb +0 -35
- data/test/unit/models/link_test.rb +0 -52
- data/test/unit/models/namespaces_test.rb +0 -57
- data/test/unit/models/page_partial_test.rb +0 -37
- data/test/unit/models/page_route_test.rb +0 -113
- data/test/unit/models/page_template_test.rb +0 -50
- data/test/unit/models/page_test.rb +0 -879
- data/test/unit/models/permission_test.rb +0 -10
- data/test/unit/models/portlet_test.rb +0 -99
- data/test/unit/models/sections_test.rb +0 -278
- data/test/unit/models/site_test.rb +0 -50
- data/test/unit/models/task_test.rb +0 -150
- data/test/unit/models/user_test.rb +0 -358
- data/test/unit/schema_statements_test.rb +0 -137
- data/todo_list.markdown +0 -50
|
@@ -1,6 +1,48 @@
|
|
|
1
1
|
module Cms
|
|
2
|
+
|
|
3
|
+
class IgnoreSanitizer
|
|
4
|
+
|
|
5
|
+
# Skip sanitizing attributes from mass assignment. This should be used sparingly, since it bypasses security.
|
|
6
|
+
# Ideally used for dynamically created classes (like ::Version or ::Attribute) where the attributes are not known at
|
|
7
|
+
# design time.
|
|
8
|
+
def sanitize(attributes, authorizer)
|
|
9
|
+
attributes
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
2
13
|
module Behaviors
|
|
3
14
|
|
|
15
|
+
# Represents a record as of a specific version in the versions table.
|
|
16
|
+
module VersionRecord
|
|
17
|
+
|
|
18
|
+
# Create an original 'record' of the Versioned about as it existed as of this VersionRecord.
|
|
19
|
+
#
|
|
20
|
+
# @return [Object] i.e. HtmlBlock
|
|
21
|
+
def build_object_from_version()
|
|
22
|
+
obj = versioned_class.new
|
|
23
|
+
|
|
24
|
+
(versioned_class.versioned_columns + [:version, :created_at, :created_by_id, :updated_at, :updated_by_id]).each do |a|
|
|
25
|
+
obj.send("#{a}=", self.send(a))
|
|
26
|
+
end
|
|
27
|
+
obj.id = original_record_id
|
|
28
|
+
|
|
29
|
+
#obj.lock_version = lock_version
|
|
30
|
+
|
|
31
|
+
# Need to do this so associations can be loaded
|
|
32
|
+
obj.instance_variable_set("@persisted", true)
|
|
33
|
+
obj.instance_variable_set("@new_record", false)
|
|
34
|
+
|
|
35
|
+
# Callback to allow us to load other data when an older version is loaded
|
|
36
|
+
obj.after_as_of_version if obj.respond_to?(:after_as_of_version)
|
|
37
|
+
|
|
38
|
+
# Last but not least, clear the changed attributes
|
|
39
|
+
if changed_attrs = obj.send(:changed_attributes)
|
|
40
|
+
changed_attrs.clear
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
obj
|
|
44
|
+
end
|
|
45
|
+
end
|
|
4
46
|
# This behavior adds Versioning to an ActiveRecord object. It seriously monkeys with how objects are saved or updated.
|
|
5
47
|
#
|
|
6
48
|
# This implementation is pretty tied to Rails 3 ActiveRecord. Here's how I understand it works:
|
|
@@ -44,15 +86,18 @@ module Cms
|
|
|
44
86
|
before_validation :initialize_version
|
|
45
87
|
before_save :build_new_version
|
|
46
88
|
attr_accessor :skip_callbacks
|
|
47
|
-
|
|
48
|
-
attr_accessor :revert_to_version
|
|
89
|
+
attr_accessible :version_comment
|
|
49
90
|
|
|
50
91
|
#Define the version class
|
|
92
|
+
#puts "is_version called for #{self}"
|
|
51
93
|
const_set("Version", Class.new(ActiveRecord::Base)).class_eval do
|
|
52
94
|
class << self;
|
|
53
95
|
attr_accessor :versioned_class
|
|
54
96
|
end
|
|
55
97
|
|
|
98
|
+
include VersionRecord
|
|
99
|
+
self.mass_assignment_sanitizer = Cms::IgnoreSanitizer.new
|
|
100
|
+
|
|
56
101
|
def versioned_class
|
|
57
102
|
self.class.versioned_class
|
|
58
103
|
end
|
|
@@ -126,6 +171,7 @@ module Cms
|
|
|
126
171
|
|
|
127
172
|
attrs[:version_comment] = @version_comment || default_version_comment
|
|
128
173
|
@version_comment = nil
|
|
174
|
+
#puts "Im a '#{self.class}', vc = #{self.class.version_class}"
|
|
129
175
|
new_version = versions.build(attrs)
|
|
130
176
|
new_version.version = new_record? ? 1 : (draft.version.to_i + 1)
|
|
131
177
|
after_build_new_version(new_version) if respond_to?(:after_build_new_version)
|
|
@@ -148,7 +194,7 @@ module Cms
|
|
|
148
194
|
end
|
|
149
195
|
|
|
150
196
|
def publish_if_needed
|
|
151
|
-
logger.debug { "#{self.class}#publish_if_needed. publish? = '#{!!@publish_on_save}'"}
|
|
197
|
+
#logger.debug { "#{self.class}#publish_if_needed. publish? = '#{!!@publish_on_save}'" }
|
|
152
198
|
|
|
153
199
|
if @publish_on_save
|
|
154
200
|
publish
|
|
@@ -181,21 +227,21 @@ module Cms
|
|
|
181
227
|
# 2. If its an update, a new version is created and that is saved.
|
|
182
228
|
# 3. If new record, its version is set to 1, and its published if needed.
|
|
183
229
|
def create_or_update
|
|
184
|
-
logger.debug {"#{self.class}#create_or_update called. Published = #{!!publish_on_save}"}
|
|
230
|
+
logger.debug { "#{self.class}#create_or_update called. Published = #{!!publish_on_save}" }
|
|
185
231
|
self.skip_callbacks = false
|
|
186
232
|
unless different_from_last_draft?
|
|
187
|
-
logger.debug {"No difference between this version and last. Skipping save"}
|
|
233
|
+
logger.debug { "No difference between this version and last. Skipping save" }
|
|
188
234
|
self.skip_callbacks = true
|
|
189
235
|
return true
|
|
190
236
|
end
|
|
191
|
-
logger.debug {"Saving #{self.class} #{self.attributes}"}
|
|
237
|
+
logger.debug { "Saving #{self.class} #{self.attributes}" }
|
|
192
238
|
if new_record?
|
|
193
239
|
self.version = 1
|
|
194
240
|
# This should call ActiveRecord::Callbacks#create_or_update, which will correctly trigger the :save callback_chain
|
|
195
241
|
saved_correctly = super
|
|
196
242
|
changed_attributes.clear
|
|
197
243
|
else
|
|
198
|
-
logger.debug {"#{self.class}#update"}
|
|
244
|
+
logger.debug { "#{self.class}#update" }
|
|
199
245
|
# Because we are 'skipping' the normal ActiveRecord update here, we must manually call the save callback chain.
|
|
200
246
|
run_callbacks :save do
|
|
201
247
|
saved_correctly = @new_version.save
|
|
@@ -211,85 +257,11 @@ module Cms
|
|
|
211
257
|
# Called explicitly during update, where it will just define the new_version to be saved.
|
|
212
258
|
def build_new_version
|
|
213
259
|
@new_version = build_new_version_and_add_to_versions_list_for_saving
|
|
214
|
-
logger.debug {"New version of #{self.class}::Version is #{@new_version.attributes}"}
|
|
260
|
+
logger.debug { "New version of #{self.class}::Version is #{@new_version.attributes}" }
|
|
215
261
|
end
|
|
216
262
|
|
|
217
|
-
# Implementation from BrowserCMS 3.1 (Rails 2 API). Left for reference while tests are being fixed for Rails 3 upgrade.
|
|
218
|
-
#
|
|
219
|
-
#
|
|
220
|
-
# This overrides the 'save' method from activerecord
|
|
221
|
-
# Things happening here:
|
|
222
|
-
# 1. If the record is unchanged, no save is performed, but true is returned (Make a separete call back)
|
|
223
|
-
# 2. If its an update, a new version is created and that is saved.
|
|
224
|
-
# 3. If new record, its version is set to 1, and its published if needed.
|
|
225
|
-
#
|
|
226
|
-
# Note: According to AR::Callbacks, save is its own transactions, so should be no need for separate TX.
|
|
227
|
-
# def save(perform_validations=true)
|
|
228
|
-
# transaction do
|
|
229
|
-
# #logger.info "..... Calling valid?"
|
|
230
|
-
# return false unless !perform_validations || valid?
|
|
231
|
-
#
|
|
232
|
-
# if different_from_last_draft?
|
|
233
|
-
# #logger.info "..... Changes => #{changes.inspect}"
|
|
234
|
-
# else
|
|
235
|
-
# #logger.info "..... No Changes"
|
|
236
|
-
# return true
|
|
237
|
-
# end
|
|
238
|
-
#
|
|
239
|
-
# #logger.info "..... Calling before_save"
|
|
240
|
-
# return false if callback(:before_save) == false
|
|
241
|
-
#
|
|
242
|
-
# if new_record?
|
|
243
|
-
# #logger.info "..... Calling before_create"
|
|
244
|
-
# return false if callback(:before_create) == false
|
|
245
|
-
# else
|
|
246
|
-
# #logger.info "..... Calling before_update"
|
|
247
|
-
# return false if callback(:before_update) == false
|
|
248
|
-
# end
|
|
249
|
-
#
|
|
250
|
-
# #logger.info "..... Calling build_new_version"
|
|
251
|
-
# new_version = build_new_version
|
|
252
|
-
# #logger.info "..... Is new version valid? #{new_version.valid?}"
|
|
253
|
-
# if new_record?
|
|
254
|
-
# self.version = 1
|
|
255
|
-
# #logger.info "..... Calling create_without_callbacks"
|
|
256
|
-
# if result = create_without_callbacks
|
|
257
|
-
# #logger.info "..... Calling after_create"
|
|
258
|
-
# if callback(:after_create) != false
|
|
259
|
-
# #logger.info "..... Calling after_save"
|
|
260
|
-
# callback(:after_save)
|
|
261
|
-
# end
|
|
262
|
-
#
|
|
263
|
-
# if @publish_on_save
|
|
264
|
-
# publish
|
|
265
|
-
# @publish_on_save = nil
|
|
266
|
-
# end
|
|
267
|
-
# changed_attributes.clear
|
|
268
|
-
# end
|
|
269
|
-
# result
|
|
270
|
-
# elsif new_version
|
|
271
|
-
# #logger.info "..... Calling save"
|
|
272
|
-
# if result = new_version.save
|
|
273
|
-
# #logger.info "..... Calling after_save"
|
|
274
|
-
# if callback(:after_update) != false
|
|
275
|
-
# #logger.info "..... Calling after_update"
|
|
276
|
-
# callback(:after_save)
|
|
277
|
-
# end
|
|
278
|
-
#
|
|
279
|
-
# if @publish_on_save
|
|
280
|
-
# publish
|
|
281
|
-
# @publish_on_save = nil
|
|
282
|
-
# end
|
|
283
|
-
# changed_attributes.clear
|
|
284
|
-
# end
|
|
285
|
-
# result
|
|
286
|
-
# end
|
|
287
|
-
# true
|
|
288
|
-
# end
|
|
289
|
-
# end
|
|
290
|
-
|
|
291
263
|
def save!(perform_validations=true)
|
|
292
|
-
save(:validate=>perform_validations) || raise(ActiveRecord::RecordNotSaved.new(errors.full_messages))
|
|
264
|
+
save(:validate => perform_validations) || raise(ActiveRecord::RecordNotSaved.new(errors.full_messages))
|
|
293
265
|
end
|
|
294
266
|
|
|
295
267
|
def draft
|
|
@@ -317,7 +289,7 @@ module Cms
|
|
|
317
289
|
end
|
|
318
290
|
|
|
319
291
|
def as_of_draft_version
|
|
320
|
-
build_object_from_version
|
|
292
|
+
draft.build_object_from_version
|
|
321
293
|
end
|
|
322
294
|
|
|
323
295
|
# Find a Content Block as of a specific version.
|
|
@@ -327,7 +299,7 @@ module Cms
|
|
|
327
299
|
def as_of_version(version)
|
|
328
300
|
v = find_version(version)
|
|
329
301
|
raise ActiveRecord::RecordNotFound.new("version #{version.inspect} does not exist for <#{self.class}:#{id}>") unless v
|
|
330
|
-
build_object_from_version
|
|
302
|
+
v.build_object_from_version
|
|
331
303
|
end
|
|
332
304
|
|
|
333
305
|
def revert
|
|
@@ -335,19 +307,30 @@ module Cms
|
|
|
335
307
|
revert_to(draft_version - 1) unless draft_version == 1
|
|
336
308
|
end
|
|
337
309
|
|
|
338
|
-
def revert_to_without_save(version)
|
|
310
|
+
def revert_to_without_save(version, options)
|
|
339
311
|
raise "Version parameter missing" if version.blank?
|
|
340
|
-
|
|
312
|
+
revert_to_version = find_version(version)
|
|
341
313
|
raise "Could not find version #{version}" unless revert_to_version
|
|
314
|
+
self.before_revert(revert_to_version) if self.respond_to?(:before_revert)
|
|
315
|
+
|
|
342
316
|
(self.class.versioned_columns - ["version"]).each do |a|
|
|
343
317
|
send("#{a}=", revert_to_version.send(a))
|
|
344
318
|
end
|
|
319
|
+
|
|
320
|
+
|
|
321
|
+
options.keys.each do |key|
|
|
322
|
+
send("#{key}=", options[key])
|
|
323
|
+
end
|
|
324
|
+
|
|
325
|
+
self.after_revert(revert_to_version) if self.respond_to?(:after_revert)
|
|
345
326
|
self.version_comment = "Reverted to version #{version}"
|
|
346
327
|
self
|
|
347
328
|
end
|
|
348
329
|
|
|
349
|
-
|
|
350
|
-
|
|
330
|
+
# @param [Integer] version To revert to
|
|
331
|
+
# @param [Hash] options Values to set prior to saving the updated record.
|
|
332
|
+
def revert_to(version, options={})
|
|
333
|
+
revert_to_without_save(version, options)
|
|
351
334
|
save
|
|
352
335
|
end
|
|
353
336
|
|
|
@@ -367,37 +350,7 @@ module Cms
|
|
|
367
350
|
(self.class.versioned_columns - %w( version )).each do |col|
|
|
368
351
|
return true if self.send(col) != last_draft.send(col)
|
|
369
352
|
end
|
|
370
|
-
|
|
371
|
-
end
|
|
372
|
-
|
|
373
|
-
private
|
|
374
|
-
|
|
375
|
-
# Given a ::Version object of a given type, create an original object from its attributes.
|
|
376
|
-
#
|
|
377
|
-
# @param [Class#name::Version] version_of_object (i.e. HtmlBlock::Version)
|
|
378
|
-
# @return [Class#name] i.e. HtmlBlock
|
|
379
|
-
def build_object_from_version(version_of_object)
|
|
380
|
-
obj = self.class.new
|
|
381
|
-
|
|
382
|
-
(self.class.versioned_columns + [:version, :created_at, :created_by_id, :updated_at, :updated_by_id]).each do |a|
|
|
383
|
-
obj.send("#{a}=", version_of_object.send(a))
|
|
384
|
-
end
|
|
385
|
-
obj.id = id
|
|
386
|
-
obj.lock_version = lock_version
|
|
387
|
-
|
|
388
|
-
# Need to do this so associations can be loaded
|
|
389
|
-
obj.instance_variable_set("@persisted", true)
|
|
390
|
-
obj.instance_variable_set("@new_record", false)
|
|
391
|
-
|
|
392
|
-
# Callback to allow us to load other data when an older version is loaded
|
|
393
|
-
obj.after_as_of_version if obj.respond_to?(:after_as_of_version)
|
|
394
|
-
|
|
395
|
-
# Last but not least, clear the changed attributes
|
|
396
|
-
if changed_attrs = obj.send(:changed_attributes)
|
|
397
|
-
changed_attrs.clear
|
|
398
|
-
end
|
|
399
|
-
|
|
400
|
-
obj
|
|
353
|
+
false
|
|
401
354
|
end
|
|
402
355
|
end
|
|
403
356
|
end
|
data/lib/cms/caching.rb
CHANGED
|
@@ -1,20 +1,62 @@
|
|
|
1
1
|
module Cms
|
|
2
|
+
module DefaultCaches
|
|
3
|
+
# Returns the directory where BrowserCMS should write out it's Page cache files for the mobile version of the site.
|
|
4
|
+
# (Optionally) It can be configured in environment files via:
|
|
5
|
+
# config.cms.mobile_cache_directory = File.join(Rails.root, 'some', 'mobile_dir')
|
|
6
|
+
def mobile_cache_directory
|
|
7
|
+
Rails.application.config.cms.mobile_cache_directory
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# Returns the directory where BrowserCMS should write out it's Page cache files for the full version of the site.
|
|
11
|
+
# This should be exactly the same as where a typical CMS project stores it's files.
|
|
12
|
+
# (Optionally) It can be configured in environment files via:
|
|
13
|
+
# config.cms.page_cache_directory = File.join(Rails.root, 'some', 'dir')
|
|
14
|
+
def cms_cache_directory
|
|
15
|
+
Rails.application.config.cms.page_cache_directory
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
end
|
|
19
|
+
|
|
2
20
|
module Caching
|
|
21
|
+
include DefaultCaches
|
|
22
|
+
# Determine if page caching in enabled.
|
|
3
23
|
def caching_enabled?
|
|
4
24
|
ActionController::Base.perform_caching
|
|
5
25
|
end
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
File.basename(ActionController::Base.page_cache_directory) != "public"
|
|
12
|
-
FileUtils.rm_rf Dir.glob("#{ActionController::Base.page_cache_directory}/*")
|
|
13
|
-
Rails.logger.info "Cache Flushed"
|
|
26
|
+
|
|
27
|
+
# Flushes page cache if caching has been enabled.
|
|
28
|
+
def flush
|
|
29
|
+
if caching_enabled?
|
|
30
|
+
flush_caches
|
|
14
31
|
end
|
|
15
|
-
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
private
|
|
35
|
+
|
|
36
|
+
def flush_caches
|
|
37
|
+
flush_cache_directory(cms_cache_directory)
|
|
38
|
+
flush_cache_directory(mobile_cache_directory)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def flush_cache_directory(cache)
|
|
42
|
+
if File.exists?(cache) && not_public_directory?(cache)
|
|
43
|
+
FileUtils.rm_rf Dir.glob("#{cache}/*")
|
|
44
|
+
Rails.logger.info "Flush cache in '#{cache}'"
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
#Hmmm...this is kinda scary. What if page cache directory is
|
|
49
|
+
#set to the the default, which is /public?
|
|
50
|
+
#So we are going to check that the directory is not called "public"
|
|
51
|
+
def not_public_directory?(directory)
|
|
52
|
+
File.basename(directory) != "public"
|
|
53
|
+
end
|
|
54
|
+
|
|
16
55
|
end
|
|
17
|
-
|
|
18
|
-
|
|
56
|
+
|
|
57
|
+
class Cache
|
|
58
|
+
class << self
|
|
59
|
+
include Caching
|
|
60
|
+
end
|
|
19
61
|
end
|
|
20
62
|
end
|
data/lib/cms/commands/actions.rb
CHANGED
|
@@ -34,12 +34,29 @@ module Cms
|
|
|
34
34
|
end
|
|
35
35
|
end
|
|
36
36
|
|
|
37
|
+
# Run `bundle update`, exiting if it doesn't work.
|
|
38
|
+
def run_bundle_update
|
|
39
|
+
return if options[:skip_bundle]
|
|
40
|
+
inside current_project do
|
|
41
|
+
result = run "bundle update"
|
|
42
|
+
unless result
|
|
43
|
+
puts "Check your Gemfile to ensure the dependencies are correct. Update them, then rerun the last command.".red
|
|
44
|
+
exit(false)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
RAILS_GEMFILE_PATTERN = /gem ["|']rails["|'],/
|
|
51
|
+
|
|
37
52
|
def comment_out_rails_in_gemfile
|
|
38
|
-
gsub_file "Gemfile",
|
|
53
|
+
gsub_file "Gemfile", RAILS_GEMFILE_PATTERN, "# gem 'rails',", :verbose => false
|
|
54
|
+
say_status :rails, "Commenting out Rails dependency."
|
|
39
55
|
end
|
|
40
56
|
|
|
41
57
|
def update_browsercms_gem_version
|
|
42
|
-
gsub_file "Gemfile", /gem ["|']browsercms.*$/, "gem \"browsercms\", \"#{Cms::VERSION}\""
|
|
58
|
+
gsub_file "Gemfile", /gem ["|']browsercms.*$/, "gem \"browsercms\", \"#{Cms::VERSION}\"", :verbose=>false
|
|
59
|
+
say_status :gemfile, "Update browsercms to v#{Cms::VERSION}"
|
|
43
60
|
end
|
|
44
61
|
|
|
45
62
|
def install_migrations
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
#require 'cms/version'
|
|
2
|
+
|
|
3
|
+
# Used for some misc configuration around the project.
|
|
4
|
+
module Cms
|
|
5
|
+
|
|
6
|
+
class << self
|
|
7
|
+
|
|
8
|
+
attr_accessor :attachment_file_permission
|
|
9
|
+
|
|
10
|
+
# Determines which WYSIWYG editor is the 'default' for a BrowserCMS project
|
|
11
|
+
#
|
|
12
|
+
# bcms modules can changes this by overriding it in their configuration.
|
|
13
|
+
def content_editor
|
|
14
|
+
@wysiwig_editor ||= "ckeditor"
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def content_editor=(editor)
|
|
18
|
+
@wysiwig_editor = editor
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def markdown?
|
|
22
|
+
Object.const_defined?("Markdown")
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def reserved_paths
|
|
26
|
+
@reserved_paths ||= ["/cms", "/cache"]
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
module Errors
|
|
31
|
+
class AccessDenied < StandardError
|
|
32
|
+
def initialize
|
|
33
|
+
super("Access Denied")
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
Time::DATE_FORMATS.merge!(
|
|
40
|
+
:year_month_day => '%Y/%m/%d',
|
|
41
|
+
:date => '%m/%d/%Y'
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
|