spontaneous 0.1.0.alpha1 → 0.2.0.alpha1
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/Gemfile +40 -35
- data/LICENSE +20 -0
- data/Rakefile +39 -42
- data/Readme.markdown +155 -0
- data/application/css/definitions.scss +3 -0
- data/application/css/editing.scss +9 -4
- data/application/css/min/565d4c25e82148acb01c45c8d675b37a08676d77.css +1 -0
- data/application/css/min/84dbe894ea96eafd321c30823d630817bfc4b03b.css +1 -0
- data/application/css/min/d1b54ff4847c613618267ca1c15658e2aee0a4e5.css +1 -0
- data/application/css/v2.scss +144 -50
- data/application/js/add_alias_dialogue.js +18 -8
- data/application/js/ajax.js +1 -1
- data/application/js/authentication.js +8 -1
- data/application/js/box.js +37 -7
- data/application/js/box_container.js +1 -1
- data/application/js/compatibility.js +7 -0
- data/application/js/content.js +7 -0
- data/application/js/content_area.js +4 -0
- data/application/js/edit_panel.js +44 -18
- data/application/js/editing.js +12 -0
- data/application/js/event_source.js +17 -0
- data/application/js/extensions.js +2 -0
- data/application/js/field_types/file_field.js +2 -1
- data/application/js/field_types/image_field.js +35 -48
- data/application/js/field_types/long_string_field.js +12 -0
- data/application/js/field_types/markdown_field.js +2 -5
- data/application/js/field_types/string_field.js +5 -1
- data/application/js/field_types/webvideo_field.js +15 -0
- data/application/js/init.js +1 -0
- data/application/js/location.js +30 -19
- data/application/js/login.js +1 -2
- data/application/js/min/2a0c2962537a3181fedfff5c92596ba6d3122dc9.js +3 -0
- data/application/js/min/4cf1c493d3379ecba5287758c61238034c0893f9.js +2 -0
- data/application/js/min/78ac6b99d96750bb6b9f9aad4cb9cd91cd03f391.js +3 -0
- data/application/js/min/c8efb9b9f7c3f6613fcebc6be60f605b6570a382.js +90 -0
- data/application/js/page.js +1 -0
- data/application/js/page_entry.js +6 -40
- data/application/js/preview.js +2 -3
- data/application/js/top_bar.js +76 -31
- data/application/js/upload.js +5 -2
- data/application/js/upload_manager.js +2 -81
- data/application/js/vendor/jquery-1.7.1.min.js +4 -0
- data/application/js/vendor/jquery-ui-1.8.16.custom.min.js +791 -0
- data/application/js/views.js +3 -3
- data/application/js/views/box_view.js +164 -83
- data/application/js/views/page_piece_view.js +2 -2
- data/application/js/views/page_view.js +46 -15
- data/application/js/views/piece_view.js +29 -8
- data/application/static/diagonal-texture.png +0 -0
- data/application/static/item-buttons-highlight.png +0 -0
- data/application/static/plus-box.png +0 -0
- data/application/static/plus_alt.svg +8 -0
- data/application/static/slot-up-arrow.png +0 -0
- data/application/views/{index.erubis → index.erb} +9 -5
- data/application/views/{login.erubis → login.erb} +14 -10
- data/application/views/schema_modification_error.html.erb +18 -6
- data/application/views/{unsupported.erubis → unsupported.erb} +0 -0
- data/bin/spot +15 -2
- data/db/migrations/20100610142136_init.rb +2 -2
- data/db/migrations/20101130104334_timestamps.rb +2 -2
- data/db/migrations/20110209152710_users_and_groups.rb +11 -11
- data/db/migrations/20120106171423_visibility_path.rb +19 -0
- data/db/migrations/20120107124541_owner_id.rb +19 -0
- data/docs/recipe-interface-screenshot.png +0 -0
- data/lib/cutaneous.rb +11 -10
- data/lib/cutaneous/context_helper.rb +119 -14
- data/lib/cutaneous/preview_context.rb +4 -3
- data/lib/cutaneous/preview_renderer.rb +1 -6
- data/lib/cutaneous/publish_context.rb +1 -0
- data/lib/cutaneous/{first_pass_renderer.rb → publish_renderer.rb} +2 -6
- data/lib/cutaneous/publish_template.rb +62 -0
- data/lib/cutaneous/publish_token_parser.rb +8 -0
- data/lib/cutaneous/renderer.rb +4 -2
- data/lib/cutaneous/request_context.rb +1 -0
- data/lib/cutaneous/{second_pass_renderer.rb → request_renderer.rb} +2 -5
- data/lib/cutaneous/request_template.rb +11 -0
- data/lib/cutaneous/request_token_parser.rb +9 -0
- data/lib/cutaneous/token_parser.rb +125 -0
- data/lib/sequel/plugins/content_table_inheritance.rb +19 -12
- data/lib/sequel/plugins/scoped_table_name.rb +45 -0
- data/lib/spontaneous.rb +123 -126
- data/lib/spontaneous/box.rb +127 -47
- data/lib/spontaneous/box_style.rb +39 -22
- data/lib/spontaneous/change.rb +2 -2
- data/lib/spontaneous/cli.rb +1 -0
- data/lib/spontaneous/cli/base.rb +12 -4
- data/lib/spontaneous/cli/console.rb +72 -0
- data/lib/spontaneous/cli/server.rb +36 -12
- data/lib/spontaneous/cli/site.rb +175 -1
- data/lib/spontaneous/collections/box_set.rb +19 -1
- data/lib/spontaneous/collections/entry_set.rb +70 -22
- data/lib/spontaneous/collections/field_set.rb +3 -3
- data/lib/spontaneous/collections/prototype_set.rb +28 -0
- data/lib/spontaneous/config.rb +14 -5
- data/lib/spontaneous/content.rb +23 -24
- data/lib/spontaneous/errors.rb +20 -4
- data/lib/spontaneous/extensions/array.rb +2 -2
- data/lib/spontaneous/extensions/json.rb +1 -1
- data/lib/spontaneous/extensions/nil.rb +13 -0
- data/lib/spontaneous/facet.rb +61 -7
- data/lib/spontaneous/field_types.rb +1 -3
- data/lib/spontaneous/field_types/date_field.rb +1 -0
- data/lib/spontaneous/field_types/field.rb +32 -15
- data/lib/spontaneous/field_types/image_field.rb +138 -69
- data/lib/spontaneous/field_types/location_field.rb +59 -0
- data/lib/spontaneous/field_types/long_string_field.rb +13 -0
- data/lib/spontaneous/field_types/markdown_field.rb +2 -1
- data/lib/spontaneous/field_types/string_field.rb +2 -2
- data/lib/spontaneous/field_types/webvideo_field.rb +255 -0
- data/lib/spontaneous/generators/page/inline.html.cut +1 -1
- data/lib/spontaneous/generators/page/page.html.cut.tt +5 -4
- data/lib/spontaneous/generators/page/page.rb.tt +1 -5
- data/lib/spontaneous/generators/site.rb +1 -0
- data/lib/spontaneous/generators/site/.gitignore +2 -0
- data/lib/spontaneous/generators/site/Gemfile.tt +3 -5
- data/lib/spontaneous/generators/site/config/environment.rb.tt +1 -0
- data/lib/spontaneous/generators/site/config/environments/development.rb.tt +3 -1
- data/lib/spontaneous/generators/site/config/environments/production.rb.tt +3 -1
- data/lib/spontaneous/generators/site/config/indexes.rb.tt +23 -0
- data/lib/spontaneous/generators/site/public/css/{site.css → site.scss} +0 -0
- data/lib/spontaneous/generators/site/schema/box.rb.tt +5 -0
- data/lib/spontaneous/generators/site/templates/layouts/standard.html.cut.tt +11 -5
- data/lib/spontaneous/image_size.rb +0 -1
- data/lib/spontaneous/loader.rb +335 -218
- data/lib/spontaneous/logger.rb +7 -2
- data/lib/spontaneous/media.rb +64 -59
- data/lib/spontaneous/media/file.rb +74 -0
- data/lib/spontaneous/page.rb +47 -18
- data/lib/spontaneous/page_piece.rb +29 -27
- data/lib/spontaneous/paths.rb +0 -1
- data/lib/spontaneous/permissions.rb +3 -21
- data/lib/spontaneous/permissions/user.rb +5 -1
- data/lib/spontaneous/permissions/user_level.rb +6 -7
- data/lib/spontaneous/piece.rb +12 -7
- data/lib/spontaneous/plugins/aliases.rb +76 -31
- data/lib/spontaneous/plugins/allowed_types.rb +36 -37
- data/lib/spontaneous/plugins/application/facets.rb +7 -10
- data/lib/spontaneous/plugins/application/features.rb +17 -0
- data/lib/spontaneous/plugins/application/paths.rb +25 -31
- data/lib/spontaneous/plugins/application/render.rb +1 -5
- data/lib/spontaneous/plugins/application/serialisation.rb +2 -0
- data/lib/spontaneous/plugins/application/state.rb +6 -9
- data/lib/spontaneous/plugins/boxes.rb +65 -40
- data/lib/spontaneous/plugins/controllers.rb +22 -22
- data/lib/spontaneous/plugins/entries.rb +149 -150
- data/lib/spontaneous/plugins/entry.rb +50 -35
- data/lib/spontaneous/plugins/field/editor_class.rb +13 -0
- data/lib/spontaneous/plugins/fields.rb +41 -33
- data/lib/spontaneous/plugins/instance_code.rb +9 -9
- data/lib/spontaneous/plugins/layouts.rb +31 -35
- data/lib/spontaneous/plugins/media.rb +31 -32
- data/lib/spontaneous/plugins/page/formats.rb +56 -31
- data/lib/spontaneous/plugins/page/request.rb +15 -9
- data/lib/spontaneous/plugins/page_search.rb +30 -31
- data/lib/spontaneous/plugins/page_tree.rb +59 -12
- data/lib/spontaneous/plugins/paths.rb +84 -79
- data/lib/spontaneous/plugins/permissions.rb +26 -28
- data/lib/spontaneous/plugins/prototypes.rb +42 -37
- data/lib/spontaneous/plugins/publishing.rb +50 -94
- data/lib/spontaneous/plugins/render.rb +8 -16
- data/lib/spontaneous/plugins/schema_hierarchy.rb +20 -21
- data/lib/spontaneous/plugins/schema_id.rb +33 -25
- data/lib/spontaneous/plugins/schema_title.rb +3 -4
- data/lib/spontaneous/plugins/serialisation.rb +32 -35
- data/lib/spontaneous/plugins/site/features.rb +32 -0
- data/lib/spontaneous/plugins/site/instance.rb +3 -2
- data/lib/spontaneous/plugins/site/level.rb +18 -0
- data/lib/spontaneous/plugins/site/map.rb +2 -1
- data/lib/spontaneous/plugins/site/publishing.rb +56 -59
- data/lib/spontaneous/plugins/site/revisions.rb +24 -19
- data/lib/spontaneous/plugins/site/schema.rb +33 -0
- data/lib/spontaneous/plugins/site/search.rb +43 -0
- data/lib/spontaneous/plugins/site/selectors.rb +35 -30
- data/lib/spontaneous/plugins/site/storage.rb +63 -0
- data/lib/spontaneous/plugins/site_map.rb +23 -25
- data/lib/spontaneous/plugins/styles.rb +35 -43
- data/lib/spontaneous/plugins/supertype.rb +3 -1
- data/lib/spontaneous/plugins/visibility.rb +90 -83
- data/lib/spontaneous/prototypes/box_prototype.rb +55 -25
- data/lib/spontaneous/prototypes/field_prototype.rb +66 -19
- data/lib/spontaneous/prototypes/style_prototype.rb +2 -2
- data/lib/spontaneous/publishing.rb +1 -1
- data/lib/spontaneous/publishing/immediate.rb +128 -49
- data/lib/spontaneous/publishing/simultaneous.rb +70 -0
- data/lib/spontaneous/rack.rb +38 -26
- data/lib/spontaneous/rack/around_back.rb +3 -23
- data/lib/spontaneous/rack/around_preview.rb +3 -8
- data/lib/spontaneous/rack/assets.rb +7 -6
- data/lib/spontaneous/rack/authentication.rb +21 -0
- data/lib/spontaneous/rack/back.rb +310 -331
- data/lib/spontaneous/rack/cacheable_file.rb +27 -0
- data/lib/spontaneous/rack/cookie_authentication.rb +38 -0
- data/lib/spontaneous/rack/css.rb +43 -0
- data/lib/spontaneous/rack/event_source.rb +31 -0
- data/lib/spontaneous/rack/front.rb +30 -8
- data/lib/spontaneous/rack/helpers.rb +31 -0
- data/lib/spontaneous/rack/media.rb +22 -21
- data/lib/spontaneous/rack/public.rb +2 -1
- data/lib/spontaneous/rack/query_authentication.rb +35 -0
- data/lib/spontaneous/rack/reloader.rb +6 -3
- data/lib/spontaneous/rack/user_helpers.rb +28 -0
- data/lib/spontaneous/render.rb +64 -23
- data/lib/spontaneous/render/context_base.rb +143 -0
- data/lib/spontaneous/render/format.rb +24 -19
- data/lib/spontaneous/render/helpers.rb +14 -0
- data/lib/spontaneous/render/helpers/html_helper.rb +69 -0
- data/lib/spontaneous/render/helpers/script_helper.rb +17 -0
- data/lib/spontaneous/render/helpers/stylesheet_helper.rb +16 -0
- data/lib/spontaneous/render/preview_context.rb +8 -0
- data/lib/spontaneous/render/preview_renderer.rb +6 -0
- data/lib/spontaneous/render/publish_context.rb +22 -0
- data/lib/spontaneous/render/published_renderer.rb +12 -13
- data/lib/spontaneous/render/publishing_renderer.rb +3 -0
- data/lib/spontaneous/render/render_cache.rb +26 -0
- data/lib/spontaneous/render/renderer.rb +5 -1
- data/lib/spontaneous/render/request_context.rb +8 -0
- data/lib/spontaneous/schema.rb +56 -24
- data/lib/spontaneous/schema/schema_modification.rb +2 -2
- data/lib/spontaneous/schema/uid.rb +22 -106
- data/lib/spontaneous/schema/uid_map.rb +120 -0
- data/lib/spontaneous/search.rb +11 -0
- data/lib/spontaneous/search/compound_indexer.rb +26 -0
- data/lib/spontaneous/search/database.rb +72 -0
- data/lib/spontaneous/search/field.rb +95 -0
- data/lib/spontaneous/search/index.rb +184 -0
- data/lib/spontaneous/search/results.rb +34 -0
- data/lib/spontaneous/server.rb +5 -1
- data/lib/spontaneous/site.rb +56 -16
- data/lib/spontaneous/storage.rb +22 -0
- data/lib/spontaneous/storage/backend.rb +10 -0
- data/lib/spontaneous/storage/cloud.rb +104 -0
- data/lib/spontaneous/storage/local.rb +52 -0
- data/lib/spontaneous/style.rb +27 -9
- data/lib/spontaneous/version.rb +1 -1
- data/spontaneous.gemspec +719 -0
- data/test/disabled/test_slots.rb +1 -1
- data/test/experimental/test_cutaneous.rb +309 -0
- data/test/experimental/test_features.rb +129 -0
- data/test/fixtures/application/views/{index.erubis → index.erb} +0 -0
- data/test/fixtures/back/public/css/sass_include.scss +5 -0
- data/test/fixtures/back/public/css/sass_template.scss +4 -0
- data/test/fixtures/example_application/templates/client_project.html.cut +4 -4
- data/test/fixtures/example_application/templates/client_project/images.html.cut +1 -1
- data/test/fixtures/example_application/templates/client_projects.html.cut +2 -2
- data/test/fixtures/example_application/templates/inline_image.html.cut +1 -1
- data/test/fixtures/example_application/templates/layouts/home.html.cut +7 -7
- data/test/fixtures/example_application/templates/layouts/info.html.cut +1 -1
- data/test/fixtures/example_application/templates/layouts/project.html.cut +4 -4
- data/test/fixtures/example_application/templates/layouts/projects.html.cut +2 -2
- data/test/fixtures/example_application/templates/project.html.cut +2 -2
- data/test/fixtures/example_application/templates/project/inline.html.cut +3 -3
- data/test/fixtures/example_application/templates/project_image.html.cut +1 -1
- data/test/fixtures/example_application/templates/text.html.cut +1 -1
- data/test/fixtures/fields/youtube_api_response.xml +102 -0
- data/test/fixtures/layouts/layouts/custom4.html.cut +0 -0
- data/test/fixtures/plugins/schema_plugin/public/css/plugin.css +1 -0
- data/test/fixtures/plugins/schema_plugin/public/js/plugin.js +1 -0
- data/test/fixtures/plugins/schema_plugin/public/static.html +1 -0
- data/test/fixtures/plugins/schema_plugin/public/subdir/image.gif +1 -0
- data/test/fixtures/plugins/schema_plugin/public/subdir/include1.scss +3 -0
- data/test/fixtures/plugins/schema_plugin/public/subdir/sass.scss +4 -0
- data/test/fixtures/plugins/schema_plugin/public/subdir/sass/include2.scss +4 -0
- data/test/fixtures/public/templates/layouts/default.html.cut +1 -1
- data/test/fixtures/public/templates/layouts/default.pdf.cut +1 -1
- data/test/fixtures/public/templates/layouts/default.rss.cut +1 -1
- data/test/fixtures/public/templates/layouts/dynamic.html.cut +1 -1
- data/test/fixtures/schema_modification/config/database.yml +0 -0
- data/test/fixtures/schema_modification/config/environment.rb +2 -0
- data/test/fixtures/schema_modification/schema/box.rb +1 -0
- data/test/fixtures/schema_modification/schema/custom_box.rb +1 -0
- data/test/fixtures/schema_modification/schema/page.rb +6 -0
- data/test/fixtures/schema_modification/schema/piece.rb +1 -0
- data/test/fixtures/search/config/database.yml +1 -0
- data/test/fixtures/search/config/indexes.rb +4 -0
- data/test/fixtures/serialisation/root_hash.yaml.erb +16 -20
- data/test/fixtures/storage/cloud/environment.rb +12 -0
- data/test/fixtures/storage/default/environment.rb +1 -0
- data/test/fixtures/templates/aliases/layouts/c_alias.html.cut +1 -1
- data/test/fixtures/templates/content/include.html.cut +1 -1
- data/test/fixtures/templates/content/include_dir.html.cut +1 -1
- data/test/fixtures/templates/content/included.epub.cut +1 -1
- data/test/fixtures/templates/content/included.html.cut +1 -1
- data/test/fixtures/templates/content/partial/included.html.cut +1 -1
- data/test/fixtures/templates/content/preprocess.html.cut +1 -1
- data/test/fixtures/templates/content/second.html.cut +1 -1
- data/test/fixtures/templates/content/template.epub.cut +1 -1
- data/test/fixtures/templates/content/template.html.cut +1 -1
- data/test/fixtures/templates/default_style_class.html.cut +1 -1
- data/test/fixtures/templates/engine/braces.html.cut +6 -0
- data/test/fixtures/templates/engine/multiline.html.cut +5 -0
- data/test/fixtures/templates/extended/grandparent.html.cut +7 -7
- data/test/fixtures/templates/extended/main.html.cut +5 -5
- data/test/fixtures/templates/extended/parent.html.cut +10 -8
- data/test/fixtures/templates/extended/partial.html.cut +1 -0
- data/test/fixtures/templates/extended/partial_with_locals.html.cut +1 -0
- data/test/fixtures/templates/extended/with_includes.html.cut +9 -0
- data/test/fixtures/templates/extended/with_includes_and_locals.html.cut +9 -0
- data/test/fixtures/templates/layouts/entries.html.cut +7 -7
- data/test/fixtures/templates/layouts/page_style.html.cut +1 -1
- data/test/fixtures/templates/layouts/params.html.cut +1 -1
- data/test/fixtures/templates/layouts/preview_render.html.cut +2 -2
- data/test/fixtures/templates/layouts/standard_page.html.cut +1 -1
- data/test/fixtures/templates/layouts/subdir_style.html.cut +1 -1
- data/test/fixtures/templates/layouts/template_params.html.cut +1 -1
- data/test/fixtures/templates/layouts/variables.html.cut +7 -0
- data/test/fixtures/templates/page_class/inline_style.html.cut +1 -1
- data/test/fixtures/templates/preview_render/variables.html.cut +1 -0
- data/test/fixtures/templates/publishing/templates/layouts/dynamic.html.cut +1 -0
- data/test/fixtures/templates/publishing/templates/layouts/dynamic.rtf.cut +1 -0
- data/test/fixtures/templates/publishing/templates/layouts/static.html.cut +1 -0
- data/test/fixtures/templates/template_class/anonymous_style.html.cut +2 -2
- data/test/fixtures/templates/template_class/complex_template.html.cut +4 -4
- data/test/fixtures/templates/template_class/complex_template.pdf.cut +4 -4
- data/test/fixtures/templates/template_class/default_template_style.html.cut +2 -2
- data/test/fixtures/templates/template_class/images_with_template.html.cut +3 -3
- data/test/fixtures/templates/template_class/slots_template.html.cut +3 -3
- data/test/fixtures/templates/template_class/slots_template.pdf.cut +3 -3
- data/test/fixtures/templates/template_class/this_template.epub.cut +1 -1
- data/test/fixtures/templates/template_class/this_template.html.cut +1 -1
- data/test/fixtures/templates/template_class/this_template.pdf.cut +1 -1
- data/test/fixtures/templates/with_default_style_class.html.cut +1 -1
- data/test/functional/test_application.rb +19 -15
- data/test/functional/test_back.rb +130 -98
- data/test/functional/test_front.rb +72 -28
- data/test/javascript/test_dom.rb +1 -1
- data/test/javascript/test_markdown.rb +1 -1
- data/test/slow/test_publishing.rb +94 -75
- data/test/slow/test_visibility.rb +47 -14
- data/test/test_helper.rb +30 -3
- data/test/ui/test_page_editing.rb +1 -1
- data/test/unit/test_alias.rb +200 -16
- data/test/unit/test_authentication.rb +26 -28
- data/test/unit/test_boxes.rb +146 -75
- data/test/unit/test_config.rb +42 -20
- data/test/unit/test_content.rb +156 -37
- data/test/unit/test_content_inheritance.rb +4 -2
- data/test/unit/test_extensions.rb +7 -1
- data/test/unit/test_fields.rb +558 -290
- data/test/{experimental → unit}/test_formats.rb +42 -3
- data/test/unit/test_generators.rb +3 -2
- data/test/unit/test_helpers.rb +54 -0
- data/test/unit/test_image_size.rb +1 -1
- data/test/unit/test_images.rb +51 -40
- data/test/unit/test_layouts.rb +21 -4
- data/test/unit/test_logger.rb +1 -1
- data/test/unit/test_media.rb +165 -7
- data/test/unit/test_page.rb +158 -27
- data/test/unit/test_permissions.rb +170 -187
- data/test/unit/test_piece.rb +27 -9
- data/test/unit/test_plugins.rb +153 -0
- data/test/unit/test_prototype_set.rb +60 -2
- data/test/unit/test_prototypes.rb +81 -20
- data/test/unit/test_render.rb +97 -9
- data/test/unit/test_schema.rb +167 -120
- data/test/unit/test_search.rb +588 -0
- data/test/unit/test_serialisation.rb +26 -10
- data/test/unit/test_site.rb +42 -25
- data/test/unit/test_storage.rb +88 -0
- data/test/unit/test_structure.rb +11 -5
- data/test/unit/test_styles.rb +64 -3
- data/test/unit/test_table_scoping.rb +76 -0
- data/test/unit/test_templates.rb +69 -31
- data/test/unit/test_type_hierarchy.rb +9 -1
- metadata +274 -208
- data/Gemfile.lock +0 -146
- data/application/css/min/54ee0ed3c7fac7632bd5c020d69e9a2503e0c88c.css +0 -1
- data/application/css/min/c256adc144e2bdd0b0539356b04eb62db01e1dc3.css +0 -1
- data/application/js/edit_dialogue.js +0 -137
- data/application/js/min/492a209de8ee955fa9c729a765377495001e11b1.js +0 -17
- data/application/js/min/80f684d77c940887a1d4a63e3a96102e993baa98.js +0 -88
- data/application/js/min/c7140ec9475e5bf868b901e0621338d7d162358b.js +0 -3
- data/application/js/min/f07f2bd6630ee31e1c2288ec223383d8f0658ba6.js +0 -2
- data/application/js/vendor/.DS_Store +0 -0
- data/application/js/vendor/JS.Class-2.1.5/src/command.js +0 -93
- data/application/js/vendor/JS.Class-2.1.5/src/comparable.js +0 -37
- data/application/js/vendor/JS.Class-2.1.5/src/constant_scope.js +0 -48
- data/application/js/vendor/JS.Class-2.1.5/src/core.js +0 -1060
- data/application/js/vendor/JS.Class-2.1.5/src/decorator.js +0 -50
- data/application/js/vendor/JS.Class-2.1.5/src/enumerable.js +0 -505
- data/application/js/vendor/JS.Class-2.1.5/src/forwardable.js +0 -22
- data/application/js/vendor/JS.Class-2.1.5/src/hash.js +0 -334
- data/application/js/vendor/JS.Class-2.1.5/src/linked_list.js +0 -114
- data/application/js/vendor/JS.Class-2.1.5/src/loader.js +0 -553
- data/application/js/vendor/JS.Class-2.1.5/src/method_chain.js +0 -172
- data/application/js/vendor/JS.Class-2.1.5/src/observable.js +0 -55
- data/application/js/vendor/JS.Class-2.1.5/src/package.js +0 -472
- data/application/js/vendor/JS.Class-2.1.5/src/proxy.js +0 -58
- data/application/js/vendor/JS.Class-2.1.5/src/ruby.js +0 -44
- data/application/js/vendor/JS.Class-2.1.5/src/set.js +0 -332
- data/application/js/vendor/JS.Class-2.1.5/src/stack_trace.js +0 -151
- data/application/js/vendor/JS.Class-2.1.5/src/state.js +0 -95
- data/application/js/vendor/JS.Class-2.1.5/src/stdlib.js +0 -2612
- data/application/js/vendor/jquery-1.4.2.min.js +0 -154
- data/application/js/vendor/jquery-1.4.3.min.js +0 -166
- data/application/js/vendor/jquery-1.5.1.min.js +0 -16
- data/application/js/vendor/jquery-1.5.1rc1.min.js +0 -24
- data/application/js/vendor/jquery-ui-1.8.6.custom.min.js +0 -265
- data/application/js/vendor/jquery-ui-1.8.custom.min.js +0 -106
- data/application/js/vendor/jquery.hotkeys-0.7.9.js +0 -248
- data/application/js/vendor/jquery.hotkeys-0.7.9.min.js +0 -19
- data/application/js/vendor/jsdiff.js +0 -169
- data/lib/cutaneous/first_pass_parser.rb +0 -23
- data/lib/cutaneous/parser_core.rb +0 -18
- data/lib/cutaneous/second_pass_parser.rb +0 -23
- data/lib/sequel/plugins/yajl_serialization.rb +0 -154
- data/lib/spontaneous/plugins.rb +0 -20
- data/lib/spontaneous/proxy_object.rb +0 -12
- data/lib/spontaneous/publishing/fire_and_forget.rb +0 -57
- data/lib/spontaneous/render/context.rb +0 -100
- data/spontaneous.gemspec.tmpl +0 -66
- data/test/experimental/test_plugins.rb +0 -64
- data/test/fixtures/templates/publishing/layouts/dynamic.html.cut +0 -1
- data/test/fixtures/templates/publishing/layouts/static.html.cut +0 -1
data/test/unit/test_schema.rb
CHANGED
|
@@ -1,20 +1,19 @@
|
|
|
1
1
|
# encoding: UTF-8
|
|
2
2
|
|
|
3
|
-
require 'test_helper'
|
|
3
|
+
require File.expand_path('../../test_helper', __FILE__)
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
class SchemaTest < MiniTest::Spec
|
|
7
7
|
include Spontaneous
|
|
8
8
|
|
|
9
|
-
UID = Spontaneous::Schema::UID
|
|
10
9
|
|
|
11
|
-
# declare these early so that Piece & Page get loaded
|
|
12
|
-
# and are then cleared early by the Schema.reset! call
|
|
13
|
-
class X < Spontaneous::Piece; end
|
|
14
|
-
class Y < Spontaneous::Page; end
|
|
15
10
|
def setup
|
|
16
|
-
|
|
17
|
-
Spontaneous::Schema
|
|
11
|
+
@site = setup_site
|
|
12
|
+
@site.schema_loader_class = Spontaneous::Schema::PersistentMap
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def teardown
|
|
16
|
+
teardown_site
|
|
18
17
|
end
|
|
19
18
|
|
|
20
19
|
context "Configurable names" do
|
|
@@ -62,7 +61,7 @@ class SchemaTest < MiniTest::Spec
|
|
|
62
61
|
context "Persistent maps" do
|
|
63
62
|
context "Schema UIDs" do
|
|
64
63
|
setup do
|
|
65
|
-
|
|
64
|
+
@site.schema.schema_map_file = File.expand_path('../../fixtures/schema/schema.yml', __FILE__)
|
|
66
65
|
class SchemaClass < Page
|
|
67
66
|
field :description
|
|
68
67
|
style :simple
|
|
@@ -70,6 +69,7 @@ class SchemaTest < MiniTest::Spec
|
|
|
70
69
|
box :posts
|
|
71
70
|
end
|
|
72
71
|
@instance = SchemaClass.new
|
|
72
|
+
@uids = @site.uid
|
|
73
73
|
end
|
|
74
74
|
|
|
75
75
|
teardown do
|
|
@@ -81,84 +81,92 @@ class SchemaTest < MiniTest::Spec
|
|
|
81
81
|
# end
|
|
82
82
|
|
|
83
83
|
should "be unique" do
|
|
84
|
-
ids = (0..10000).map { Schema::
|
|
84
|
+
ids = (0..10000).map { Schema::UIDMap.generate }
|
|
85
85
|
ids.uniq.length.should == ids.length
|
|
86
86
|
end
|
|
87
87
|
|
|
88
|
+
|
|
88
89
|
should "be singletons" do
|
|
89
|
-
a =
|
|
90
|
-
b =
|
|
91
|
-
c =
|
|
90
|
+
a = @uids["xxxxxxxxxxxx"]
|
|
91
|
+
b = @uids["xxxxxxxxxxxx"]
|
|
92
|
+
c = @uids["ffffffffffff"]
|
|
92
93
|
a.object_id.should == b.object_id
|
|
93
94
|
a.should == b
|
|
94
95
|
c.object_id.should_not == b.object_id
|
|
95
96
|
c.should_not == b
|
|
96
97
|
end
|
|
97
98
|
|
|
98
|
-
should "not be creatable" do
|
|
99
|
-
|
|
100
|
-
end
|
|
99
|
+
# should "not be creatable" do
|
|
100
|
+
# lambda { UID.new('sadf') }.must_raise(NoMethodError)
|
|
101
|
+
# end
|
|
101
102
|
|
|
102
103
|
should "return nil if passed nil" do
|
|
103
|
-
|
|
104
|
+
@uids[nil].should be_nil
|
|
104
105
|
end
|
|
105
106
|
|
|
106
107
|
should "return nil if passed an empty string" do
|
|
107
|
-
|
|
108
|
+
@uids[""].should be_nil
|
|
108
109
|
end
|
|
109
110
|
|
|
110
111
|
should "return the same UID if passed one" do
|
|
111
|
-
a =
|
|
112
|
-
|
|
112
|
+
a = @uids["xxxxxxxxxxxx"]
|
|
113
|
+
@uids[a].should == a
|
|
113
114
|
end
|
|
114
115
|
|
|
115
116
|
should "test as equal to its string representation" do
|
|
116
|
-
|
|
117
|
+
@uids["llllllllllll"].should == "llllllllllll"
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
should "test as eql? if they have the same id" do
|
|
121
|
+
a = @uids["llllllllllll"]
|
|
122
|
+
b = a.dup
|
|
123
|
+
assert a.eql?(b), "Identical IDs should pass eql? test"
|
|
117
124
|
end
|
|
118
125
|
|
|
119
126
|
should "be readable by content classes" do
|
|
120
|
-
SchemaClass.schema_id.should ==
|
|
127
|
+
SchemaClass.schema_id.should == @uids["xxxxxxxxxxxx"]
|
|
121
128
|
end
|
|
122
129
|
|
|
123
130
|
should "be readable by fields" do
|
|
124
|
-
@instance.fields[:description].schema_id.should ==
|
|
131
|
+
@instance.fields[:description].schema_id.should == @uids["ffffffffffff"]
|
|
125
132
|
end
|
|
126
133
|
|
|
127
134
|
should "be readable by boxes" do
|
|
128
|
-
@instance.boxes[:posts].schema_id.should ==
|
|
135
|
+
@instance.boxes[:posts].schema_id.should == @uids["bbbbbbbbbbbb"]
|
|
129
136
|
end
|
|
130
137
|
|
|
131
138
|
should "be readable by styles" do
|
|
132
|
-
@instance.styles[:simple].schema_id.should ==
|
|
139
|
+
@instance.styles[:simple].schema_id.should == @uids["ssssssssssss"]
|
|
133
140
|
end
|
|
134
141
|
|
|
135
142
|
should "be readable by layouts" do
|
|
136
143
|
@instance.layout.name.should == :clean
|
|
137
|
-
@instance.layout.schema_id.should ==
|
|
144
|
+
@instance.layout.schema_id.should == @uids["llllllllllll"]
|
|
138
145
|
end
|
|
139
146
|
|
|
140
147
|
context "lookups" do
|
|
141
148
|
should "return classes" do
|
|
142
|
-
|
|
149
|
+
Site.schema["xxxxxxxxxxxx"].should == SchemaClass
|
|
143
150
|
end
|
|
144
151
|
should "return fields" do
|
|
145
|
-
|
|
152
|
+
Site.schema["ffffffffffff"].should == SchemaClass.field_prototypes[:description]
|
|
146
153
|
end
|
|
147
154
|
should "return boxes" do
|
|
148
|
-
|
|
155
|
+
Site.schema["bbbbbbbbbbbb"].should == SchemaClass.box_prototypes[:posts]
|
|
149
156
|
end
|
|
150
157
|
should "return styles" do
|
|
151
|
-
|
|
158
|
+
Site.schema["ssssssssssss"].should == SchemaClass.style_prototypes[:simple]
|
|
152
159
|
end
|
|
153
160
|
should "return layouts" do
|
|
154
|
-
|
|
161
|
+
Site.schema["llllllllllll"].should == SchemaClass.layout_prototypes[:clean]
|
|
155
162
|
end
|
|
156
163
|
end
|
|
164
|
+
|
|
157
165
|
end
|
|
158
166
|
|
|
159
167
|
context "schema verification" do
|
|
160
168
|
setup do
|
|
161
|
-
|
|
169
|
+
@site.schema.schema_map_file = File.expand_path('../../fixtures/schema/before.yml', __FILE__)
|
|
162
170
|
class ::Page < Spontaneous::Page
|
|
163
171
|
field :title
|
|
164
172
|
end
|
|
@@ -191,11 +199,12 @@ class SchemaTest < MiniTest::Spec
|
|
|
191
199
|
# between tests
|
|
192
200
|
# Schema.stubs(:classes).returns([B, C, D, O])
|
|
193
201
|
# Schema.classes.should == [B, C, D, O]
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
202
|
+
@uids = @site.schema.uids
|
|
203
|
+
::Page.schema_id.should == @uids["tttttttttttt"]
|
|
204
|
+
B.schema_id.should == @uids["bbbbbbbbbbbb"]
|
|
205
|
+
C.schema_id.should == @uids["cccccccccccc"]
|
|
206
|
+
D.schema_id.should == @uids["dddddddddddd"]
|
|
207
|
+
O.schema_id.should == @uids["oooooooooooo"]
|
|
199
208
|
end
|
|
200
209
|
|
|
201
210
|
teardown do
|
|
@@ -216,10 +225,10 @@ class SchemaTest < MiniTest::Spec
|
|
|
216
225
|
|
|
217
226
|
should "detect addition of classes" do
|
|
218
227
|
class E < Content; end
|
|
219
|
-
|
|
228
|
+
@site.schema.stubs(:classes).returns([B, C, D, E])
|
|
220
229
|
exception = nil
|
|
221
230
|
begin
|
|
222
|
-
|
|
231
|
+
@site.schema.validate_schema
|
|
223
232
|
flunk("Validation should raise an exception")
|
|
224
233
|
rescue Spontaneous::SchemaModificationError => e
|
|
225
234
|
exception = e
|
|
@@ -233,9 +242,9 @@ class SchemaTest < MiniTest::Spec
|
|
|
233
242
|
should "detect removal of classes" do
|
|
234
243
|
SchemaTest.send(:remove_const, :C) rescue nil
|
|
235
244
|
SchemaTest.send(:remove_const, :D) rescue nil
|
|
236
|
-
|
|
245
|
+
@site.schema.stubs(:classes).returns([::Page, B, O])
|
|
237
246
|
begin
|
|
238
|
-
|
|
247
|
+
@site.schema.validate_schema
|
|
239
248
|
flunk("Validation should raise an exception")
|
|
240
249
|
rescue Spontaneous::SchemaModificationError => e
|
|
241
250
|
exception = e
|
|
@@ -248,9 +257,9 @@ class SchemaTest < MiniTest::Spec
|
|
|
248
257
|
SchemaTest.send(:remove_const, :D) rescue nil
|
|
249
258
|
class E < Content; end
|
|
250
259
|
class F < Content; end
|
|
251
|
-
|
|
260
|
+
@site.schema.stubs(:classes).returns([::Page, B, E, F, O])
|
|
252
261
|
begin
|
|
253
|
-
|
|
262
|
+
@site.schema.validate_schema
|
|
254
263
|
flunk("Validation should raise an exception if schema is modified")
|
|
255
264
|
rescue Spontaneous::SchemaModificationError => e
|
|
256
265
|
exception = e
|
|
@@ -264,7 +273,7 @@ class SchemaTest < MiniTest::Spec
|
|
|
264
273
|
C.field :location
|
|
265
274
|
C.field :description
|
|
266
275
|
begin
|
|
267
|
-
|
|
276
|
+
@site.schema.validate_schema
|
|
268
277
|
flunk("Validation should raise an exception if new fields are added")
|
|
269
278
|
rescue Spontaneous::SchemaModificationError => e
|
|
270
279
|
exception = e
|
|
@@ -277,7 +286,7 @@ class SchemaTest < MiniTest::Spec
|
|
|
277
286
|
B.stubs(:field_prototypes).returns({:author => field})
|
|
278
287
|
B.stubs(:fields).returns([field])
|
|
279
288
|
begin
|
|
280
|
-
|
|
289
|
+
@site.schema.validate_schema
|
|
281
290
|
flunk("Validation should raise an exception if fields are removed")
|
|
282
291
|
rescue Spontaneous::SchemaModificationError => e
|
|
283
292
|
exception = e
|
|
@@ -292,7 +301,7 @@ class SchemaTest < MiniTest::Spec
|
|
|
292
301
|
B.box :changes
|
|
293
302
|
B.box :updates
|
|
294
303
|
begin
|
|
295
|
-
|
|
304
|
+
@site.schema.validate_schema
|
|
296
305
|
flunk("Validation should raise an exception if new boxes are added")
|
|
297
306
|
rescue Spontaneous::SchemaModificationError => e
|
|
298
307
|
exception = e
|
|
@@ -306,7 +315,7 @@ class SchemaTest < MiniTest::Spec
|
|
|
306
315
|
|
|
307
316
|
B.stubs(:box_prototypes).returns(boxes)
|
|
308
317
|
begin
|
|
309
|
-
|
|
318
|
+
@site.schema.validate_schema
|
|
310
319
|
flunk("Validation should raise an exception if fields are removed")
|
|
311
320
|
rescue Spontaneous::SchemaModificationError => e
|
|
312
321
|
exception = e
|
|
@@ -321,7 +330,7 @@ class SchemaTest < MiniTest::Spec
|
|
|
321
330
|
B.style :fancy
|
|
322
331
|
B.style :dirty
|
|
323
332
|
begin
|
|
324
|
-
|
|
333
|
+
@site.schema.validate_schema
|
|
325
334
|
flunk("Validation should raise an exception if new styles are added")
|
|
326
335
|
rescue Spontaneous::SchemaModificationError => e
|
|
327
336
|
exception = e
|
|
@@ -335,7 +344,7 @@ class SchemaTest < MiniTest::Spec
|
|
|
335
344
|
B.styles.stubs(:[]).with(:inline).returns(style)
|
|
336
345
|
B.styles.stubs(:[]).with(:outline).returns(nil)
|
|
337
346
|
begin
|
|
338
|
-
|
|
347
|
+
@site.schema.validate_schema
|
|
339
348
|
flunk("Validation should raise an exception if styles are removed")
|
|
340
349
|
rescue Spontaneous::SchemaModificationError => e
|
|
341
350
|
exception = e
|
|
@@ -350,7 +359,7 @@ class SchemaTest < MiniTest::Spec
|
|
|
350
359
|
B.layout :fancy
|
|
351
360
|
B.layout :dirty
|
|
352
361
|
begin
|
|
353
|
-
|
|
362
|
+
@site.schema.validate_schema
|
|
354
363
|
flunk("Validation should raise an exception if new layouts are added")
|
|
355
364
|
rescue Spontaneous::SchemaModificationError => e
|
|
356
365
|
exception = e
|
|
@@ -364,7 +373,7 @@ class SchemaTest < MiniTest::Spec
|
|
|
364
373
|
B.layouts.stubs(:[]).with(:thin).returns(layout)
|
|
365
374
|
B.layouts.stubs(:[]).with(:fat).returns(nil)
|
|
366
375
|
begin
|
|
367
|
-
|
|
376
|
+
@site.schema.validate_schema
|
|
368
377
|
flunk("Validation should raise an exception if fields are removed")
|
|
369
378
|
rescue Spontaneous::SchemaModificationError => e
|
|
370
379
|
exception = e
|
|
@@ -379,7 +388,7 @@ class SchemaTest < MiniTest::Spec
|
|
|
379
388
|
f1 = B.boxes[:publishers].instance_class.field :field3
|
|
380
389
|
f2 = B.boxes[:promotions].instance_class.field :field3
|
|
381
390
|
begin
|
|
382
|
-
|
|
391
|
+
@site.schema.validate_schema
|
|
383
392
|
flunk("Validation should raise an exception if new fields are added to anonymous boxes")
|
|
384
393
|
rescue Spontaneous::SchemaModificationError => e
|
|
385
394
|
exception = e
|
|
@@ -392,7 +401,7 @@ class SchemaTest < MiniTest::Spec
|
|
|
392
401
|
B.boxes[:promotions].instance_class.stubs(:field_prototypes).returns({:field2 => f2})
|
|
393
402
|
B.boxes[:promotions].instance_class.stubs(:fields).returns([f2])
|
|
394
403
|
begin
|
|
395
|
-
|
|
404
|
+
@site.schema.validate_schema
|
|
396
405
|
flunk("Validation should raise an exception if fields are removed from anonymous boxes")
|
|
397
406
|
rescue Spontaneous::SchemaModificationError => e
|
|
398
407
|
exception = e
|
|
@@ -406,7 +415,7 @@ class SchemaTest < MiniTest::Spec
|
|
|
406
415
|
should "detect addition of fields to box types" do
|
|
407
416
|
O.field :name
|
|
408
417
|
begin
|
|
409
|
-
|
|
418
|
+
@site.schema.validate_schema
|
|
410
419
|
flunk("Validation should raise an exception if new fields are added to boxes")
|
|
411
420
|
rescue Spontaneous::SchemaModificationError => e
|
|
412
421
|
exception = e
|
|
@@ -419,7 +428,7 @@ class SchemaTest < MiniTest::Spec
|
|
|
419
428
|
# fields = [O.field_prototypes[:ofield1]]
|
|
420
429
|
# O.stubs(:fields).returns(fields)
|
|
421
430
|
# begin
|
|
422
|
-
#
|
|
431
|
+
# @site.schema.validate_schema
|
|
423
432
|
# flunk("Validation should raise an exception if fields are removed")
|
|
424
433
|
# rescue Spontaneous::SchemaModificationError => e
|
|
425
434
|
# exception = e
|
|
@@ -437,7 +446,7 @@ class SchemaTest < MiniTest::Spec
|
|
|
437
446
|
s1 = B.boxes[:publishers].instance_class.style :style3
|
|
438
447
|
s2 = B.boxes[:promotions].instance_class.style :style3
|
|
439
448
|
begin
|
|
440
|
-
|
|
449
|
+
@site.schema.validate_schema
|
|
441
450
|
flunk("Validation should raise an exception if new fields are added to anonymous boxes")
|
|
442
451
|
rescue Spontaneous::SchemaModificationError => e
|
|
443
452
|
exception = e
|
|
@@ -452,7 +461,7 @@ class SchemaTest < MiniTest::Spec
|
|
|
452
461
|
klass.styles.stubs(:[]).with(style.name).returns(style)
|
|
453
462
|
klass.styles.stubs(:[]).with(:style2).returns(nil)
|
|
454
463
|
begin
|
|
455
|
-
|
|
464
|
+
@site.schema.validate_schema
|
|
456
465
|
flunk("Validation should raise an exception if styles are removed")
|
|
457
466
|
rescue Spontaneous::SchemaModificationError => e
|
|
458
467
|
exception = e
|
|
@@ -464,10 +473,10 @@ class SchemaTest < MiniTest::Spec
|
|
|
464
473
|
end
|
|
465
474
|
end
|
|
466
475
|
end
|
|
476
|
+
|
|
467
477
|
context "Transient (testing) maps" do
|
|
468
478
|
setup do
|
|
469
|
-
|
|
470
|
-
Spontaneous::Schema.reset!
|
|
479
|
+
@site.schema.schema_loader_class = Spontaneous::Schema::TransientMap
|
|
471
480
|
class V < Spontaneous::Piece; end
|
|
472
481
|
class W < Spontaneous::Piece; end
|
|
473
482
|
end
|
|
@@ -491,15 +500,39 @@ class SchemaTest < MiniTest::Spec
|
|
|
491
500
|
should "return UID objects" do
|
|
492
501
|
V.schema_id.must_be_instance_of(Spontaneous::Schema::UID)
|
|
493
502
|
end
|
|
503
|
+
|
|
504
|
+
context "for inherited boxes" do
|
|
505
|
+
setup do
|
|
506
|
+
class ::A < Spontaneous::Piece
|
|
507
|
+
box :a
|
|
508
|
+
end
|
|
509
|
+
class ::B < ::A
|
|
510
|
+
box :a
|
|
511
|
+
end
|
|
512
|
+
class ::C < ::B
|
|
513
|
+
box :a
|
|
514
|
+
end
|
|
515
|
+
end
|
|
516
|
+
teardown do
|
|
517
|
+
Object.send(:remove_const, :A) rescue nil
|
|
518
|
+
Object.send(:remove_const, :B) rescue nil
|
|
519
|
+
Object.send(:remove_const, :C) rescue nil
|
|
520
|
+
end
|
|
521
|
+
should "be the same as the box in the supertype" do
|
|
522
|
+
B.boxes[:a].schema_id.should == A.boxes[:a].schema_id
|
|
523
|
+
C.boxes[:a].schema_id.should == A.boxes[:a].schema_id
|
|
524
|
+
B.boxes[:a].instance_class.schema_id.should == A.boxes[:a].instance_class.schema_id
|
|
525
|
+
C.boxes[:a].instance_class.schema_id.should == A.boxes[:a].instance_class.schema_id
|
|
526
|
+
end
|
|
527
|
+
end
|
|
494
528
|
end
|
|
495
529
|
|
|
496
530
|
context "Map writing" do
|
|
497
531
|
context "Non-existant maps" do
|
|
498
532
|
setup do
|
|
499
|
-
S::Schema.reset!
|
|
500
533
|
@map_file = File.expand_path('../../../tmp/schema.yml', __FILE__)
|
|
501
534
|
::File.exists?(@map_file).should be_false
|
|
502
|
-
|
|
535
|
+
@site.schema.schema_map_file = @map_file
|
|
503
536
|
class ::A < Spontaneous::Page
|
|
504
537
|
field :title
|
|
505
538
|
field :introduction
|
|
@@ -519,8 +552,9 @@ class SchemaTest < MiniTest::Spec
|
|
|
519
552
|
FileUtils.rm(@map_file) if ::File.exists?(@map_file)
|
|
520
553
|
end
|
|
521
554
|
should "get created with verification" do
|
|
522
|
-
S
|
|
555
|
+
S.schema.validate!
|
|
523
556
|
classes = [ ::A, ::B]
|
|
557
|
+
@inheritance_map = nil
|
|
524
558
|
# would like to do all of this using mocks, but don't know how to do that
|
|
525
559
|
# without fecking up the whole schema id creation process
|
|
526
560
|
expected = Hash[ classes.map { |klass| [ klass.schema_id.to_s, klass.schema_name ] } ]
|
|
@@ -537,13 +571,13 @@ class SchemaTest < MiniTest::Spec
|
|
|
537
571
|
YAML.load_file(@map_file).should == expected
|
|
538
572
|
end
|
|
539
573
|
end
|
|
574
|
+
|
|
540
575
|
context "change resolution" do
|
|
541
576
|
setup do
|
|
542
|
-
S::Schema.reset!
|
|
543
577
|
@map_file = File.expand_path('../../../tmp/schema.yml', __FILE__)
|
|
544
578
|
FileUtils.mkdir_p(File.dirname(@map_file))
|
|
545
579
|
FileUtils.cp(File.expand_path('../../fixtures/schema/resolvable.yml', __FILE__), @map_file)
|
|
546
|
-
|
|
580
|
+
@site.schema.schema_map_file = @map_file
|
|
547
581
|
class ::A < Spontaneous::Page
|
|
548
582
|
field :title
|
|
549
583
|
field :introduction
|
|
@@ -557,8 +591,8 @@ class SchemaTest < MiniTest::Spec
|
|
|
557
591
|
field :duration
|
|
558
592
|
style :daring
|
|
559
593
|
end
|
|
560
|
-
|
|
561
|
-
A.schema_id.should == S
|
|
594
|
+
@site.schema.validate!
|
|
595
|
+
A.schema_id.should == S.schema.uids["qLcxinA008"]
|
|
562
596
|
end
|
|
563
597
|
|
|
564
598
|
teardown do
|
|
@@ -567,9 +601,25 @@ class SchemaTest < MiniTest::Spec
|
|
|
567
601
|
Object.send(:remove_const, :X) rescue nil
|
|
568
602
|
Object.send(:remove_const, :Y) rescue nil
|
|
569
603
|
S::Content.delete
|
|
570
|
-
FileUtils.rm(@map_file) if ::File.exists?(@map_file)
|
|
604
|
+
FileUtils.rm(@map_file) if ::File.exists?(@map_file) rescue nil
|
|
605
|
+
end
|
|
606
|
+
|
|
607
|
+
should "update the STI map after addition of classes" do
|
|
608
|
+
::A.sti_subclasses_array.should == [::A.schema_id.to_s]
|
|
609
|
+
class ::X < ::A
|
|
610
|
+
field :wild
|
|
611
|
+
box :monkeys do
|
|
612
|
+
field :banana
|
|
613
|
+
end
|
|
614
|
+
layout :rich
|
|
615
|
+
end
|
|
616
|
+
S.schema.validate!
|
|
617
|
+
::X.schema_id.should_not be_nil
|
|
618
|
+
::X.sti_key_array.should == [::X.schema_id.to_s]
|
|
619
|
+
::A.sti_subclasses_array.should == [::A.schema_id.to_s, ::X.schema_id.to_s]
|
|
571
620
|
end
|
|
572
621
|
|
|
622
|
+
|
|
573
623
|
should "be done automatically if only additions are found" do
|
|
574
624
|
A.field :moose
|
|
575
625
|
class ::X < ::A
|
|
@@ -582,7 +632,7 @@ class SchemaTest < MiniTest::Spec
|
|
|
582
632
|
class ::Y < ::B
|
|
583
633
|
style :risky
|
|
584
634
|
end
|
|
585
|
-
S
|
|
635
|
+
S.schema.validate!
|
|
586
636
|
::X.schema_id.should_not be_nil
|
|
587
637
|
::Y.schema_id.should_not be_nil
|
|
588
638
|
::A.field_prototypes[:moose].schema_id.should_not be_nil
|
|
@@ -601,9 +651,9 @@ class SchemaTest < MiniTest::Spec
|
|
|
601
651
|
should "be done automatically if only classes have been removed" do
|
|
602
652
|
uid = B.schema_id.to_s
|
|
603
653
|
Object.send(:remove_const, :B)
|
|
604
|
-
S
|
|
605
|
-
S
|
|
606
|
-
S
|
|
654
|
+
S.schema.stubs(:classes).returns([::A])
|
|
655
|
+
S.schema.reload!
|
|
656
|
+
S.schema.validate!
|
|
607
657
|
m = YAML.load_file(@map_file)
|
|
608
658
|
m.key?(uid).should be_false
|
|
609
659
|
end
|
|
@@ -611,9 +661,9 @@ class SchemaTest < MiniTest::Spec
|
|
|
611
661
|
should "be done automatically if only boxes have been removed" do
|
|
612
662
|
uid = A.boxes[:posts].schema_id.to_s
|
|
613
663
|
A.stubs(:box_prototypes).returns(S::Collections::PrototypeSet.new)
|
|
614
|
-
S
|
|
615
|
-
S
|
|
616
|
-
S
|
|
664
|
+
S.schema.stubs(:classes).returns([A, B])
|
|
665
|
+
S.schema.reload!
|
|
666
|
+
S.schema.validate!
|
|
617
667
|
m = YAML.load_file(@map_file)
|
|
618
668
|
m.key?(uid).should be_false
|
|
619
669
|
end
|
|
@@ -624,8 +674,8 @@ class SchemaTest < MiniTest::Spec
|
|
|
624
674
|
f2 = A.field_prototypes[:introduction]
|
|
625
675
|
A.stubs(:field_prototypes).returns({:introduction => f2})
|
|
626
676
|
A.stubs(:fields).returns([f2])
|
|
627
|
-
S
|
|
628
|
-
S
|
|
677
|
+
S.schema.reload!
|
|
678
|
+
S.schema.validate!
|
|
629
679
|
m = YAML.load_file(@map_file)
|
|
630
680
|
m.key?(uid).should be_false
|
|
631
681
|
end
|
|
@@ -634,9 +684,9 @@ class SchemaTest < MiniTest::Spec
|
|
|
634
684
|
A.field :moose
|
|
635
685
|
uid = B.schema_id.to_s
|
|
636
686
|
Object.send(:remove_const, :B)
|
|
637
|
-
S
|
|
638
|
-
S
|
|
639
|
-
S
|
|
687
|
+
S.schema.stubs(:classes).returns([::A])
|
|
688
|
+
S.schema.reload!
|
|
689
|
+
S.schema.validate!
|
|
640
690
|
::A.field_prototypes[:moose].schema_id.should_not be_nil
|
|
641
691
|
|
|
642
692
|
m = YAML.load_file(@map_file)
|
|
@@ -651,8 +701,8 @@ class SchemaTest < MiniTest::Spec
|
|
|
651
701
|
f2 = B.field_prototypes[:duration]
|
|
652
702
|
B.stubs(:field_prototypes).returns({:duration => f2})
|
|
653
703
|
B.stubs(:fields).returns([f2])
|
|
654
|
-
S
|
|
655
|
-
S
|
|
704
|
+
S.schema.reload!
|
|
705
|
+
S.schema.validate!
|
|
656
706
|
|
|
657
707
|
::A.field_prototypes[:moose].schema_id.should_not be_nil
|
|
658
708
|
|
|
@@ -665,9 +715,9 @@ class SchemaTest < MiniTest::Spec
|
|
|
665
715
|
B.field :crisis
|
|
666
716
|
uid = A.boxes[:posts].schema_id.to_s
|
|
667
717
|
A.stubs(:box_prototypes).returns(S::Collections::PrototypeSet.new)
|
|
668
|
-
S
|
|
669
|
-
S
|
|
670
|
-
S
|
|
718
|
+
S.schema.stubs(:classes).returns([A, B])
|
|
719
|
+
S.schema.reload!
|
|
720
|
+
S.schema.validate!
|
|
671
721
|
|
|
672
722
|
::B.field_prototypes[:crisis].schema_id.should_not be_nil
|
|
673
723
|
m = YAML.load_file(@map_file)
|
|
@@ -681,9 +731,9 @@ class SchemaTest < MiniTest::Spec
|
|
|
681
731
|
B.field :crisis
|
|
682
732
|
B.box :circus
|
|
683
733
|
A.field :crisis
|
|
684
|
-
S
|
|
685
|
-
S
|
|
686
|
-
S
|
|
734
|
+
S.schema.stubs(:classes).returns([::A, ::B, ::X])
|
|
735
|
+
S.schema.reload!
|
|
736
|
+
S.schema.validate!
|
|
687
737
|
|
|
688
738
|
::A.field_prototypes[:crisis].schema_id.should_not be_nil
|
|
689
739
|
m = YAML.load_file(@map_file)
|
|
@@ -710,17 +760,17 @@ class SchemaTest < MiniTest::Spec
|
|
|
710
760
|
f3 = A.field_prototypes[:introduction]
|
|
711
761
|
A.stubs(:field_prototypes).returns({:added => f2, :introduction => f3})
|
|
712
762
|
A.stubs(:fields).returns([f2, f3])
|
|
713
|
-
S
|
|
714
|
-
lambda { S
|
|
763
|
+
S.schema.reload!
|
|
764
|
+
lambda { S.schema.validate! }.must_raise(Spontaneous::SchemaModificationError)
|
|
715
765
|
end
|
|
716
766
|
|
|
717
767
|
should "still raise error in case of addition & deletion of classes" do
|
|
718
768
|
class ::X < A; end
|
|
719
769
|
uid = B.schema_id.to_s
|
|
720
770
|
Object.send(:remove_const, :B)
|
|
721
|
-
S
|
|
722
|
-
S
|
|
723
|
-
lambda { S
|
|
771
|
+
S.schema.stubs(:classes).returns([::A, ::X])
|
|
772
|
+
S.schema.reload!
|
|
773
|
+
lambda { S.schema.validate! }.must_raise(Spontaneous::SchemaModificationError)
|
|
724
774
|
end
|
|
725
775
|
|
|
726
776
|
should "delete box content when a box is removed" do
|
|
@@ -735,9 +785,9 @@ class SchemaTest < MiniTest::Spec
|
|
|
735
785
|
Content.count.should == 3
|
|
736
786
|
uid = A.boxes[:posts].schema_id.to_s
|
|
737
787
|
A.stubs(:box_prototypes).returns(S::Collections::PrototypeSet.new)
|
|
738
|
-
S
|
|
739
|
-
S
|
|
740
|
-
S
|
|
788
|
+
S.schema.stubs(:classes).returns([A, B])
|
|
789
|
+
S.schema.reload!
|
|
790
|
+
S.schema.validate!
|
|
741
791
|
Content.count.should == 1
|
|
742
792
|
S::Content[instance.id].should == instance
|
|
743
793
|
end
|
|
@@ -754,9 +804,9 @@ class SchemaTest < MiniTest::Spec
|
|
|
754
804
|
@f3 = A.field_prototypes[:introduction]
|
|
755
805
|
A.stubs(:field_prototypes).returns({:a => @af1, :b => @af2, :introduction => @f3})
|
|
756
806
|
A.stubs(:fields).returns([@af1, @af2, @f3])
|
|
757
|
-
S
|
|
807
|
+
S.schema.reload!
|
|
758
808
|
begin
|
|
759
|
-
S
|
|
809
|
+
S.schema.validate!
|
|
760
810
|
flunk("Validation should raise error when adding & deleting fields")
|
|
761
811
|
rescue Spontaneous::SchemaModificationError => e
|
|
762
812
|
@modification = e.modification
|
|
@@ -785,7 +835,7 @@ class SchemaTest < MiniTest::Spec
|
|
|
785
835
|
should "enable fixing the problem by deleting field from schema" do
|
|
786
836
|
action = @modification.actions[0]
|
|
787
837
|
begin
|
|
788
|
-
S
|
|
838
|
+
S.schema.apply(action)
|
|
789
839
|
rescue Spontaneous::SchemaModificationError => e
|
|
790
840
|
flunk("Deletion of field should have resolved schema error")
|
|
791
841
|
end
|
|
@@ -797,7 +847,7 @@ class SchemaTest < MiniTest::Spec
|
|
|
797
847
|
should "enable fixing the problem by renaming field 'a'" do
|
|
798
848
|
action = @modification.actions[1]
|
|
799
849
|
begin
|
|
800
|
-
S
|
|
850
|
+
S.schema.apply(action)
|
|
801
851
|
rescue Spontaneous::SchemaModificationError => e
|
|
802
852
|
flunk("Renaming of field should have resolved schema error")
|
|
803
853
|
end
|
|
@@ -808,7 +858,7 @@ class SchemaTest < MiniTest::Spec
|
|
|
808
858
|
should "enable fixing the problem by renaming field 'b'" do
|
|
809
859
|
action = @modification.actions[2]
|
|
810
860
|
begin
|
|
811
|
-
S
|
|
861
|
+
S.schema.apply(action)
|
|
812
862
|
rescue Spontaneous::SchemaModificationError => e
|
|
813
863
|
flunk("Renaming of field should have resolved schema error")
|
|
814
864
|
end
|
|
@@ -831,9 +881,9 @@ class SchemaTest < MiniTest::Spec
|
|
|
831
881
|
@uid2 = @df2.schema_id.to_s
|
|
832
882
|
A.stubs(:field_prototypes).returns({:a => @af1, :b => @af2, :c => @af3})
|
|
833
883
|
A.stubs(:fields).returns([@af1, @af2, @af3])
|
|
834
|
-
S
|
|
884
|
+
S.schema.reload!
|
|
835
885
|
begin
|
|
836
|
-
S
|
|
886
|
+
S.schema.validate!
|
|
837
887
|
flunk("Validation should raise error when adding & deleting fields")
|
|
838
888
|
rescue Spontaneous::SchemaModificationError => e
|
|
839
889
|
@modification = e.modification
|
|
@@ -870,7 +920,7 @@ class SchemaTest < MiniTest::Spec
|
|
|
870
920
|
should "enable fixing the problem by deleting both fields" do
|
|
871
921
|
action = @modification.actions[0]
|
|
872
922
|
begin
|
|
873
|
-
S
|
|
923
|
+
S.schema.apply(action)
|
|
874
924
|
flunk("Deletion of field should not have resolved schema error")
|
|
875
925
|
rescue Spontaneous::SchemaModificationError => e
|
|
876
926
|
modification = e.modification
|
|
@@ -878,7 +928,7 @@ class SchemaTest < MiniTest::Spec
|
|
|
878
928
|
action = modification.actions[0]
|
|
879
929
|
|
|
880
930
|
begin
|
|
881
|
-
S
|
|
931
|
+
S.schema.apply(action)
|
|
882
932
|
rescue Spontaneous::SchemaModificationError => e
|
|
883
933
|
flunk("Deletion of field should have resolved schema error")
|
|
884
934
|
end
|
|
@@ -890,7 +940,7 @@ class SchemaTest < MiniTest::Spec
|
|
|
890
940
|
should "enable fixing the problem by deleting one field and renaming other as 'a'" do
|
|
891
941
|
action = @modification.actions[0]
|
|
892
942
|
begin
|
|
893
|
-
S
|
|
943
|
+
S.schema.apply(action)
|
|
894
944
|
flunk("Deletion of field should not have resolved schema error")
|
|
895
945
|
rescue Spontaneous::SchemaModificationError => e
|
|
896
946
|
modification = e.modification
|
|
@@ -898,7 +948,7 @@ class SchemaTest < MiniTest::Spec
|
|
|
898
948
|
action = modification.actions[1]
|
|
899
949
|
|
|
900
950
|
begin
|
|
901
|
-
S
|
|
951
|
+
S.schema.apply(action)
|
|
902
952
|
rescue Spontaneous::SchemaModificationError => e
|
|
903
953
|
flunk("Deletion of field should have resolved schema error")
|
|
904
954
|
end
|
|
@@ -911,7 +961,7 @@ class SchemaTest < MiniTest::Spec
|
|
|
911
961
|
should "enable fixing the problem by renaming one field as 'c' and deleting other" do
|
|
912
962
|
action = @modification.actions[3]
|
|
913
963
|
begin
|
|
914
|
-
S
|
|
964
|
+
S.schema.apply(action)
|
|
915
965
|
flunk("Renaming of field should not have resolved schema error")
|
|
916
966
|
rescue Spontaneous::SchemaModificationError => e
|
|
917
967
|
modification = e.modification
|
|
@@ -919,7 +969,7 @@ class SchemaTest < MiniTest::Spec
|
|
|
919
969
|
action = modification.actions[0]
|
|
920
970
|
|
|
921
971
|
begin
|
|
922
|
-
S
|
|
972
|
+
S.schema.apply(action)
|
|
923
973
|
rescue Spontaneous::SchemaModificationError => e
|
|
924
974
|
flunk("Deletion of field should have resolved schema error")
|
|
925
975
|
end
|
|
@@ -932,7 +982,7 @@ class SchemaTest < MiniTest::Spec
|
|
|
932
982
|
should "enable fixing the problem by renaming one field as 'c' and renaming other as 'b'" do
|
|
933
983
|
action = @modification.actions[3]
|
|
934
984
|
begin
|
|
935
|
-
S
|
|
985
|
+
S.schema.apply(action)
|
|
936
986
|
flunk("Renaming of field should not have resolved schema error")
|
|
937
987
|
rescue Spontaneous::SchemaModificationError => e
|
|
938
988
|
modification = e.modification
|
|
@@ -940,7 +990,7 @@ class SchemaTest < MiniTest::Spec
|
|
|
940
990
|
action = modification.actions[2]
|
|
941
991
|
|
|
942
992
|
begin
|
|
943
|
-
S
|
|
993
|
+
S.schema.apply(action)
|
|
944
994
|
rescue Spontaneous::SchemaModificationError => e
|
|
945
995
|
flunk("Deletion of field should have resolved schema error")
|
|
946
996
|
end
|
|
@@ -962,12 +1012,12 @@ class SchemaTest < MiniTest::Spec
|
|
|
962
1012
|
boxes[:added1] = @ab1
|
|
963
1013
|
boxes[:added2] = @ab2
|
|
964
1014
|
A.stubs(:box_prototypes).returns(boxes)
|
|
965
|
-
classes = S
|
|
1015
|
+
classes = S.schema.classes.dup
|
|
966
1016
|
classes.delete(A::PostsBox)
|
|
967
|
-
S
|
|
968
|
-
S
|
|
1017
|
+
S.schema.stubs(:classes).returns(classes)
|
|
1018
|
+
S.schema.reload!
|
|
969
1019
|
begin
|
|
970
|
-
S
|
|
1020
|
+
S.schema.validate!
|
|
971
1021
|
flunk("Validation should raise error when adding & deleting fields")
|
|
972
1022
|
rescue Spontaneous::SchemaModificationError => e
|
|
973
1023
|
@modification = e.modification
|
|
@@ -976,7 +1026,7 @@ class SchemaTest < MiniTest::Spec
|
|
|
976
1026
|
should "enable fixing by deleting both fields and renaming a box" do
|
|
977
1027
|
action = @modification.actions[0]
|
|
978
1028
|
begin
|
|
979
|
-
S
|
|
1029
|
+
S.schema.apply(action)
|
|
980
1030
|
flunk("Deleting of field should not have resolved schema error")
|
|
981
1031
|
rescue Spontaneous::SchemaModificationError => e
|
|
982
1032
|
modification = e.modification
|
|
@@ -984,7 +1034,7 @@ class SchemaTest < MiniTest::Spec
|
|
|
984
1034
|
action = modification.actions[0]
|
|
985
1035
|
|
|
986
1036
|
begin
|
|
987
|
-
S
|
|
1037
|
+
S.schema.apply(action)
|
|
988
1038
|
flunk("Deleting of field should not have resolved schema error")
|
|
989
1039
|
rescue Spontaneous::SchemaModificationError => e
|
|
990
1040
|
modification = e.modification
|
|
@@ -992,7 +1042,7 @@ class SchemaTest < MiniTest::Spec
|
|
|
992
1042
|
action = modification.actions[1]
|
|
993
1043
|
|
|
994
1044
|
begin
|
|
995
|
-
S
|
|
1045
|
+
S.schema.apply(action)
|
|
996
1046
|
rescue Spontaneous::SchemaModificationError => e
|
|
997
1047
|
flunk("Schema changes should have resolved error")
|
|
998
1048
|
end
|
|
@@ -1000,10 +1050,7 @@ class SchemaTest < MiniTest::Spec
|
|
|
1000
1050
|
end
|
|
1001
1051
|
end
|
|
1002
1052
|
end
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
1053
|
end
|
|
1006
1054
|
end
|
|
1007
1055
|
end
|
|
1008
1056
|
end
|
|
1009
|
-
|