exo_cms 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/Rakefile +34 -0
- data/app/assets/images/exo/admin/favicon.ico +0 -0
- data/app/assets/images/exo/admin/logo.png +0 -0
- data/app/assets/images/exo/admin/logo_mini.png +0 -0
- data/app/assets/javascripts/exo/admin/application.js +77 -0
- data/app/assets/javascripts/exo/admin/ckeditor_init.js +7 -0
- data/app/assets/javascripts/exo/admin/ckeditor_path.js.erb +6 -0
- data/app/assets/javascripts/exo/admin/editor_overrides.js.coffee +40 -0
- data/app/assets/javascripts/exo/admin/epiceditor.js +2947 -0
- data/app/assets/javascripts/exo/admin/responsive-tables.js +67 -0
- data/app/assets/javascripts/exo/delayed_foundation.js +7 -0
- data/app/assets/stylesheets/exo/admin/application.sass +68 -0
- data/app/assets/stylesheets/exo/admin/components/colorize.sass +9 -0
- data/app/assets/stylesheets/exo/admin/components/content.sass +28 -0
- data/app/assets/stylesheets/exo/admin/components/header.sass +8 -0
- data/app/assets/stylesheets/exo/admin/components/sidebar.sass +19 -0
- data/app/assets/stylesheets/exo/admin/components/tables.sass +14 -0
- data/app/assets/stylesheets/exo/admin/components/wrapper.sass +15 -0
- data/app/assets/stylesheets/exo/admin/epiceditor/epic-light.css +12 -0
- data/app/assets/stylesheets/exo/admin/epiceditor/epiceditor.css +70 -0
- data/app/assets/stylesheets/exo/admin/epiceditor/github.css +368 -0
- data/app/assets/stylesheets/exo/admin/foundation_and_overrides.scss +1003 -0
- data/app/assets/stylesheets/exo/admin/mercury.css +36 -0
- data/app/assets/stylesheets/exo/admin/mercury_overrides.css +17 -0
- data/app/assets/stylesheets/exo/admin/responsive-tables.css +38 -0
- data/app/assets/stylesheets/exo/foundation_and_overrides copy.scss +993 -0
- data/app/controllers/concerns/exo/admin/site_slug_id_filter.rb +25 -0
- data/app/controllers/concerns/exo/host_filter.rb +22 -0
- data/app/controllers/concerns/exo/route_filter.rb +19 -0
- data/app/controllers/exo/admin/application_controller.rb +12 -0
- data/app/controllers/exo/admin/assets_controller.rb +41 -0
- data/app/controllers/exo/admin/ckeditor_assets_controller.rb +29 -0
- data/app/controllers/exo/admin/ckeditor_blocks_controller.rb +23 -0
- data/app/controllers/exo/admin/contributors_controller.rb +5 -0
- data/app/controllers/exo/admin/items_controller.rb +80 -0
- data/app/controllers/exo/admin/pages_controller.rb +23 -0
- data/app/controllers/exo/admin/resources_controller.rb +5 -0
- data/app/controllers/exo/admin/routes_controller.rb +11 -0
- data/app/controllers/exo/admin/sessions_controller.rb +6 -0
- data/app/controllers/exo/admin/settings_controller.rb +66 -0
- data/app/controllers/exo/admin/site_controller.rb +4 -0
- data/app/controllers/exo/application_controller.rb +6 -0
- data/app/controllers/exo/gridfs_controller.rb +32 -0
- data/app/controllers/exo/pages_controller.rb +24 -0
- data/app/exceptions/exo/route/unknow_path_error.rb +13 -0
- data/app/exceptions/exo/site/unknow_host_error.rb +12 -0
- data/app/helpers/application_helper.rb +2 -0
- data/app/helpers/exo/block_helper.rb +21 -0
- data/app/helpers/exo/pagination_helper.rb +21 -0
- data/app/helpers/exo/resources_helper.rb +65 -0
- data/app/models/concerns/exo/document.rb +8 -0
- data/app/models/exo/asset.rb +32 -0
- data/app/models/exo/block.rb +13 -0
- data/app/models/exo/contributor.rb +42 -0
- data/app/models/exo/resource/item/abstract_relation.rb +21 -0
- data/app/models/exo/resource/item/abstract_value.rb +35 -0
- data/app/models/exo/resource/item/asset_value.rb +17 -0
- data/app/models/exo/resource/item/belongs_to_value.rb +26 -0
- data/app/models/exo/resource/item/has_many_value.rb +24 -0
- data/app/models/exo/resource/item/list_value.rb +23 -0
- data/app/models/exo/resource/item/markdown_value.rb +52 -0
- data/app/models/exo/resource/item/simple_value.rb +15 -0
- data/app/models/exo/resource/item.rb +169 -0
- data/app/models/exo/resource/item_asset.rb +20 -0
- data/app/models/exo/resource/meta_errors.rb +24 -0
- data/app/models/exo/resource/meta_field.rb +20 -0
- data/app/models/exo/resource/meta_relation.rb +25 -0
- data/app/models/exo/resource/meta_value.rb +60 -0
- data/app/models/exo/resource.rb +40 -0
- data/app/models/exo/route/page.rb +11 -0
- data/app/models/exo/route/redirection.rb +8 -0
- data/app/models/exo/route.rb +38 -0
- data/app/models/exo/service.rb +13 -0
- data/app/models/exo/setting.rb +31 -0
- data/app/models/exo/site.rb +63 -0
- data/app/presenters/exo/item_presenter.rb +19 -0
- data/app/presenters/exo/resource_presenter.rb +25 -0
- data/app/presenters/exo/route_presenter.rb +33 -0
- data/app/presenters/exo/scope_wraper.rb +58 -0
- data/app/presenters/exo/site_presenter.rb +35 -0
- data/app/resources/templates/application.html.haml +11 -0
- data/app/resources/templates/page.html.haml +3 -0
- data/app/services/ckeditor_railser.rb +78 -0
- data/app/services/exo/config.rb +138 -0
- data/app/services/exo/generator.rb +59 -0
- data/app/services/exo/item_builder.rb +39 -0
- data/app/services/exo/mongoid.rb +1 -0
- data/app/services/exo/path_matcher.rb +55 -0
- data/app/services/exo/tick.rb +36 -0
- data/app/services/exo/view_generator.rb +74 -0
- data/app/uploaders/exo/asset_uploader.rb +62 -0
- data/app/uploaders/exo/item_asset_uploader.rb +71 -0
- data/app/uploaders/exo/upload_versions.rb +58 -0
- data/app/views/contributors/confirmations/new.html.haml +9 -0
- data/app/views/contributors/mailer/confirmation_instructions.html.haml +4 -0
- data/app/views/contributors/mailer/reset_password_instructions.html.haml +6 -0
- data/app/views/contributors/mailer/unlock_instructions.html.haml +5 -0
- data/app/views/contributors/passwords/edit.html.haml +11 -0
- data/app/views/contributors/passwords/new.html.haml +9 -0
- data/app/views/contributors/registrations/edit.html.haml +18 -0
- data/app/views/contributors/registrations/new.html.haml +10 -0
- data/app/views/contributors/sessions/new.html.haml +10 -0
- data/app/views/contributors/shared/_links.haml +19 -0
- data/app/views/contributors/unlocks/new.html.haml +9 -0
- data/app/views/exo/admin/application/_bheader.html.haml +27 -0
- data/app/views/exo/admin/application/_editor_header.html.haml +12 -0
- data/app/views/exo/admin/application/_header.html.haml +40 -0
- data/app/views/exo/admin/application/_meta_errors.html.haml +5 -0
- data/app/views/exo/admin/application/_sidebar.html.haml +22 -0
- data/app/views/exo/admin/application/_sidenav.html.haml +48 -0
- data/app/views/exo/admin/application/fields/_image.html.haml +3 -0
- data/app/views/exo/admin/application/fields/_markdown.html.haml +3 -0
- data/app/views/exo/admin/assets/_form.html.haml +11 -0
- data/app/views/exo/admin/assets/edit.html.haml +7 -0
- data/app/views/exo/admin/assets/index.html.haml +15 -0
- data/app/views/exo/admin/assets/new.html.haml +5 -0
- data/app/views/exo/admin/assets/show.html.haml +14 -0
- data/app/views/exo/admin/ckeditor_assets/create.html.erb +8 -0
- data/app/views/exo/admin/contributors/index.html.haml +21 -0
- data/app/views/exo/admin/contributors/show.html.haml +26 -0
- data/app/views/exo/admin/items/_form.html.haml +20 -0
- data/app/views/exo/admin/items/edit.html.haml +16 -0
- data/app/views/exo/admin/items/new.html.haml +8 -0
- data/app/views/exo/admin/items/show.html.haml +44 -0
- data/app/views/exo/admin/resources/index.html.haml +13 -0
- data/app/views/exo/admin/resources/show.html.haml +36 -0
- data/app/views/exo/admin/routes/edit.html.haml +1 -0
- data/app/views/exo/admin/routes/index.html.haml +22 -0
- data/app/views/exo/admin/routes/show.html.haml +39 -0
- data/app/views/exo/admin/settings/_form.html.haml +21 -0
- data/app/views/exo/admin/settings/edit.html.haml +22 -0
- data/app/views/exo/admin/settings/index.html.haml +33 -0
- data/app/views/exo/admin/settings/new.html.haml +11 -0
- data/app/views/exo/admin/site/show.html.haml +0 -0
- data/app/views/exo/errors/_unknow_host.html.haml +2 -0
- data/app/views/exo/errors/_unknow_path.html.haml +2 -0
- data/app/views/layouts/application.html.erb +19 -0
- data/app/views/layouts/devise.html.haml +18 -0
- data/app/views/layouts/exo/admin/application.html.haml +22 -0
- data/app/views/layouts/exo/admin/editor.html.haml +11 -0
- data/app/views/layouts/exo/error.html.haml +1 -0
- data/config/initializers/carrier_wave.rb +35 -0
- data/config/initializers/devise.rb +246 -0
- data/config/initializers/simple_form_foundation.rb +27 -0
- data/config/routes.rb +42 -0
- data/lib/exo/engine.rb +7 -0
- data/lib/exo/regexp.rb +6 -0
- data/lib/exo/version.rb +3 -0
- data/lib/exo.rb +30 -0
- data/lib/tasks/ckeditor.rake +9 -0
- data/lib/tasks/contributor.rake +11 -0
- data/lib/tasks/exo_engine_tasks.rake +4 -0
- data/lib/tasks/generate.rake +8 -0
- data/lib/tasks/migration.rake +13 -0
- data/lib/tasks/seed.rake +7 -0
- data/spec/dummy/Rakefile +6 -0
- data/spec/dummy/app/assets/javascripts/application.js +13 -0
- data/spec/dummy/app/assets/stylesheets/application.css +13 -0
- data/spec/dummy/app/controllers/application_controller.rb +5 -0
- data/spec/dummy/app/controllers/exo/admin/customs_controller.rb +7 -0
- data/spec/dummy/app/controllers/my_app/site_customs_controller.rb +10 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/views/a_sierra_theme/a_page.html.haml +1 -0
- data/spec/dummy/app/views/a_sierra_theme/a_page_with_block.html.haml +3 -0
- data/spec/dummy/app/views/demo/home.html.haml +3 -0
- data/spec/dummy/app/views/demo/posts/show.html.haml +3 -0
- data/spec/dummy/app/views/exo/admin/customs/index.html.haml +1 -0
- data/spec/dummy/app/views/layouts/a_sierra_theme/application.html.erb +14 -0
- data/spec/dummy/app/views/layouts/demo/application.html.haml +11 -0
- data/spec/dummy/app/views/my_app/site_customs/index.html.haml +1 -0
- data/spec/dummy/bin/bundle +3 -0
- data/spec/dummy/bin/rails +4 -0
- data/spec/dummy/bin/rake +4 -0
- data/spec/dummy/config/application.rb +27 -0
- data/spec/dummy/config/boot.rb +5 -0
- data/spec/dummy/config/database.yml +25 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +29 -0
- data/spec/dummy/config/environments/production.rb +80 -0
- data/spec/dummy/config/environments/test.rb +36 -0
- data/spec/dummy/config/exo/demo.yml +13 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/exo.rb +3 -0
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/spec/dummy/config/initializers/inflections.rb +16 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/secret_token.rb +12 -0
- data/spec/dummy/config/initializers/session_store.rb +3 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +23 -0
- data/spec/dummy/config/mongoid.yml +78 -0
- data/spec/dummy/config/routes.rb +14 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/log/development.log +16106 -0
- data/spec/dummy/log/test.log +0 -0
- data/spec/dummy/public/404.html +58 -0
- data/spec/dummy/public/422.html +58 -0
- data/spec/dummy/public/500.html +57 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/02ac2db4c4233a0290d18f376407059bb8c9d43c/colorize.sassc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/02ac2db4c4233a0290d18f376407059bb8c9d43c/content.sassc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/02ac2db4c4233a0290d18f376407059bb8c9d43c/header.sassc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/02ac2db4c4233a0290d18f376407059bb8c9d43c/sidebar.sassc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/02ac2db4c4233a0290d18f376407059bb8c9d43c/tables.sassc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/1117950fc1adf8b31294376d9067eb7feadc7de0/colorize.sassc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/1117950fc1adf8b31294376d9067eb7feadc7de0/content.sassc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/1117950fc1adf8b31294376d9067eb7feadc7de0/header.sassc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/1117950fc1adf8b31294376d9067eb7feadc7de0/sidebar.sassc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/1117950fc1adf8b31294376d9067eb7feadc7de0/tables.sassc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/1117950fc1adf8b31294376d9067eb7feadc7de0/wrapper.sassc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_accordion.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_alert-boxes.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_block-grid.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_breadcrumbs.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_button-groups.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_buttons.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_clearing.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_dropdown-buttons.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_dropdown.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_flex-video.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_forms.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_global.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_grid.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_inline-lists.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_joyride.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_keystrokes.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_labels.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_magellan.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_offcanvas.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_orbit.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_pagination.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_panels.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_pricing-tables.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_progress-bars.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_reveal.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_side-nav.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_split-buttons.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_sub-nav.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_switch.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_tables.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_tabs.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_thumbs.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_tooltips.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_top-bar.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_type.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_visibility.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/54bc91a8b995104fa44ba264c53dbd8d0a6ce1eb/font-awesome.css.erbc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/868bdcd3c8e6bd73d750879e972f235f451b00af/application.sassc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/868bdcd3c8e6bd73d750879e972f235f451b00af/foundation_and_overrides.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/868bdcd3c8e6bd73d750879e972f235f451b00af/responsive-tables.cssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/8b743f22fdd8d5759b06979128c44050617d3f73/_functions.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e0f19c3e3433ffd972f6483c2c2cebc0799332b3/application.sassc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e0f19c3e3433ffd972f6483c2c2cebc0799332b3/foundation_and_overrides.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e0f19c3e3433ffd972f6483c2c2cebc0799332b3/responsive-tables.cssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/f3df6673492a24d914db00517c65da0ef5b69493/foundation.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/0123c70bd5e30312ff515d82eb213b31 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/017471d0ab6ff8d09517b238fe3e7c74 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/01abbc5a8fe11302981249d2cba594c0 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/06d7650b175d7850bc0819d0411e6c0d +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/0b8cbd6c43ff11ed3ab96976a2e98e2b +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/0d6d0302ec5d1661cb20ead3e3cfe729 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/0e0e73dbc12f68468bc9813d331495fb +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/12134b245bdcf4dfc47cdd9b2fd05f85 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/142b7b2297d55a50c6d15fd20457cd59 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/183ad03b62e09a44e33c6a89e49be502 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/18c44637348179373a9122410e9dd97f +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/1cca26710c02dc6d0fa2b562b7fd4402 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/1cf836008e16cfe5e1057d9f8eda6957 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/23dd3f3a5bc3511847dbe6fc5c7a2baf +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/24b1f3579f65df49c0801f4abd62b0ea +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/24cee8f6e43f5162d55fd1dcb8387207 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/25909c1bc6f6dc8570bba1f681a299f3 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/262d063e267800f380425e714dfb7377 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/27cec58cf4ba029687152cedc2fb4f31 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/2868201e7752aa2d76c04d6807493e17 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/2bd6f962abf45ed50b78d14ba0904581 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/2d93710bc1b018dbbf68607d1b862b19 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/3176c16477eed7502d9646e03412a047 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/3360fbdb00ed8ef59706becb7dbb41e4 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/34f82b1703cb8350ca18f16392967779 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/3cde31b62e801f1864e3566e83c43dfc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/3f13b6783888bfdb18d8c58b24f62606 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/3f2f49fd9b6431526dee6aaf69dc8dc0 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/447161da5ee42f4d3b0702a328975499 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/44920eab3d362e37f9841d9e5adb59f9 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/4887510ef9b27d0f87d2fcdad555fa2c +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/4c363b6936cf63c23770ad8490f24dca +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/4cef1887720ac882dcc3c407779b5cc6 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/4f53b61a3cb95e2cbe41669c8e52a6e9 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/59f85eee3687eb4ed457a687daec4864 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/5e3f3fcd99b13708971f707016d43020 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/5e9e6e4b1c4bb6da2f89517e17fdca8b +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/5ea76ce82eaf44306e67d57bd758126e +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/65602f2f2646ac35105f3ee8fe0bb8c3 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/676293868de93b34edf64d211de01c51 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/6aa2f8ad895ab9c85a6adaa546654be7 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/6df5499acca0edd86677d5beec5c2b18 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/7124dbdd12afd3bc07d58a0ec3dddc65 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/727bcd360e44edbb990ea53347896a64 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/76d85daa1c4000f529bf26504ebde8d9 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/7a776312a5e143757ba6fddbc33d3569 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/7b2ab31b2e6b523c32133b2ccd942519 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/7f3979d7c79893750db9cc673b603964 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/7fd0671e74c96f97acc46cf12b97d34f +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/808539184f4890b8bc0cd62ddaae16f5 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/818cac0ff4010d81cb9e6a2c5a17f494 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/892ddb9c90db88e3c27b9bcdf13cc874 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/8995a544bd8d9493c79f811452bc53c1 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/8c37b2f2c33ead52769fac2c7aed8483 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/911cbd3125fce783b8020caeb73c3d63 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/9125c95d28b56e41a01d40a3ac95b3a1 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/916fb1d316cf3a47b5fb8750981d020d +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/9a65689623c3096b82dd97819ef02b79 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/9fb3b25a6094ba7546ef5d57ff154168 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/a96fdd6e9cbae9c2f20789797d959cec +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/aaf89432055b14102caf4b80b7119d89 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/ab360497106ba942135a8adee9a5d590 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/ad82812e3dc354abb67d844dd84bf3cc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/afb9268b0a27b448fa720fbbc0bb9628 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/afec8da62e80022371c6a4bd3b0b8f9c +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/b0d34688aa81dc13171af7ebc2f6dda8 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/b1ffcbb1bdbbfb46264e1f4b71d5dcf4 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/b30e4385f999fefded784baa3436ecd3 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/b4306f0aa05caff091d0998f73413207 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/b682063a22ac7898fb5fab4c62304705 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/b9df96c25252b82da00791df6d017199 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/bab9d2b1312356b02c042aa46731369e +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/bc2974a23dfae3959d75891cba8e32f0 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/bdebcd2a8dbc156cff64abc02cd9e669 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/c08bb167930ddaf0637f6bb96a02f85f +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/c097d88a1c22b3559f635ed573e4f48f +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/c4a4a83aca2e4e9e987ec76930c664e7 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/c4fcfae26eaf97324dd20db9b9e6e259 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/c5b02654a71cc6e5646941d266964c8a +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/ca6ae3b0212906e203a675ad02a7729e +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/d081c4fcdb728213519ed45cd995eb11 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/d0dd43eb5157bf58a581d451b38b381b +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/d15ce5f6879e59975286ede4318a248e +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/d340ed6abb07538c8a7f5628f96a321c +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/dbd4c6c705c6eef71f281c5f10aa1c12 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/e3efb6f18e9d6f7f1f7a2bfdb4a616d3 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/e868832c39075b1130b5eb600824cabf +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/e94c184030f553c4dba8000a3112597c +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/efdfaf9c072c61f54f6fe482990d4901 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/f3a1c84ec35a01045bb6b638d1fd975f +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/f444a8ac8dfe6e3fecd2ee1b3eb660d2 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/f5cb53dda9311da5c302df8dde1b98f0 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/f873fbedb1dd78144b7a2d9203979b73 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/f94211d95775b7b113ff83fbab9d96e5 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/fd421c922607b7e36737167c1d5f12f4 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/fde03b35c3de27e23e356c238f398a51 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/fe26af7b1d422e2d98a6f52452bc8576 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/fe2acad4ddcdce6fe73b2deba6fc235d +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/02ac2db4c4233a0290d18f376407059bb8c9d43c/colorize.sassc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/02ac2db4c4233a0290d18f376407059bb8c9d43c/content.sassc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/02ac2db4c4233a0290d18f376407059bb8c9d43c/header.sassc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/02ac2db4c4233a0290d18f376407059bb8c9d43c/sidebar.sassc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/02ac2db4c4233a0290d18f376407059bb8c9d43c/tables.sassc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/1117950fc1adf8b31294376d9067eb7feadc7de0/colorize.sassc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/1117950fc1adf8b31294376d9067eb7feadc7de0/content.sassc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/1117950fc1adf8b31294376d9067eb7feadc7de0/header.sassc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/1117950fc1adf8b31294376d9067eb7feadc7de0/sidebar.sassc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/1117950fc1adf8b31294376d9067eb7feadc7de0/tables.sassc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_accordion.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_alert-boxes.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_block-grid.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_breadcrumbs.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_button-groups.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_buttons.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_clearing.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_dropdown-buttons.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_dropdown.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_flex-video.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_forms.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_global.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_grid.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_inline-lists.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_joyride.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_keystrokes.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_labels.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_magellan.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_offcanvas.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_orbit.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_pagination.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_panels.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_pricing-tables.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_progress-bars.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_reveal.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_side-nav.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_split-buttons.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_sub-nav.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_switch.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_tables.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_tabs.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_thumbs.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_tooltips.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_top-bar.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_type.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/4d2c02410fd2c7d987069b7a4033b725cb831f1f/_visibility.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/54bc91a8b995104fa44ba264c53dbd8d0a6ce1eb/font-awesome.css.erbc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/868bdcd3c8e6bd73d750879e972f235f451b00af/application.sassc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/868bdcd3c8e6bd73d750879e972f235f451b00af/foundation_and_overrides.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/868bdcd3c8e6bd73d750879e972f235f451b00af/responsive-tables.cssc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/8b743f22fdd8d5759b06979128c44050617d3f73/_functions.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/e0f19c3e3433ffd972f6483c2c2cebc0799332b3/application.sassc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/e0f19c3e3433ffd972f6483c2c2cebc0799332b3/foundation_and_overrides.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/e0f19c3e3433ffd972f6483c2c2cebc0799332b3/responsive-tables.cssc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/f3df6673492a24d914db00517c65da0ef5b69493/foundation.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/0123c70bd5e30312ff515d82eb213b31 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/017471d0ab6ff8d09517b238fe3e7c74 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/01abbc5a8fe11302981249d2cba594c0 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/0436b299d86917aa132d8d63a5d974b8 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/0b8cbd6c43ff11ed3ab96976a2e98e2b +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/0d6d0302ec5d1661cb20ead3e3cfe729 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/0e0e73dbc12f68468bc9813d331495fb +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/12134b245bdcf4dfc47cdd9b2fd05f85 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/183ad03b62e09a44e33c6a89e49be502 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/18c44637348179373a9122410e9dd97f +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/1cca26710c02dc6d0fa2b562b7fd4402 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/1cf836008e16cfe5e1057d9f8eda6957 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/24b1f3579f65df49c0801f4abd62b0ea +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/24cee8f6e43f5162d55fd1dcb8387207 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/25909c1bc6f6dc8570bba1f681a299f3 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/262d063e267800f380425e714dfb7377 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/26df301c0de83087195edeb5e88bde36 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/27cec58cf4ba029687152cedc2fb4f31 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/2868201e7752aa2d76c04d6807493e17 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/2bd6f962abf45ed50b78d14ba0904581 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/2d93710bc1b018dbbf68607d1b862b19 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/3360fbdb00ed8ef59706becb7dbb41e4 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/34f82b1703cb8350ca18f16392967779 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/3cde31b62e801f1864e3566e83c43dfc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/3f2f49fd9b6431526dee6aaf69dc8dc0 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/447161da5ee42f4d3b0702a328975499 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/44920eab3d362e37f9841d9e5adb59f9 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/4887510ef9b27d0f87d2fcdad555fa2c +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/4c363b6936cf63c23770ad8490f24dca +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/4cef1887720ac882dcc3c407779b5cc6 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/4f53b61a3cb95e2cbe41669c8e52a6e9 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/59f85eee3687eb4ed457a687daec4864 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/5e3f3fcd99b13708971f707016d43020 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/5e9e6e4b1c4bb6da2f89517e17fdca8b +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/65602f2f2646ac35105f3ee8fe0bb8c3 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/676293868de93b34edf64d211de01c51 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/6aa2f8ad895ab9c85a6adaa546654be7 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/6df5499acca0edd86677d5beec5c2b18 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/7124dbdd12afd3bc07d58a0ec3dddc65 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/76d85daa1c4000f529bf26504ebde8d9 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/7a776312a5e143757ba6fddbc33d3569 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/7f3979d7c79893750db9cc673b603964 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/7fd0671e74c96f97acc46cf12b97d34f +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/808539184f4890b8bc0cd62ddaae16f5 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/892ddb9c90db88e3c27b9bcdf13cc874 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/8995a544bd8d9493c79f811452bc53c1 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/8c37b2f2c33ead52769fac2c7aed8483 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/911cbd3125fce783b8020caeb73c3d63 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/9125c95d28b56e41a01d40a3ac95b3a1 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/916fb1d316cf3a47b5fb8750981d020d +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/9a65689623c3096b82dd97819ef02b79 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/9fb3b25a6094ba7546ef5d57ff154168 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/ad82812e3dc354abb67d844dd84bf3cc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/afec8da62e80022371c6a4bd3b0b8f9c +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/b1ffcbb1bdbbfb46264e1f4b71d5dcf4 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/b30e4385f999fefded784baa3436ecd3 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/b682063a22ac7898fb5fab4c62304705 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/b9df96c25252b82da00791df6d017199 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/bab9d2b1312356b02c042aa46731369e +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/bc2974a23dfae3959d75891cba8e32f0 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/bdebcd2a8dbc156cff64abc02cd9e669 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/c4a4a83aca2e4e9e987ec76930c664e7 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/c4fcfae26eaf97324dd20db9b9e6e259 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/ca6ae3b0212906e203a675ad02a7729e +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/ccf123d21b7729fcc4a32f35152ad7ea +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/d081c4fcdb728213519ed45cd995eb11 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/d15ce5f6879e59975286ede4318a248e +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/dbd4c6c705c6eef71f281c5f10aa1c12 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/e3efb6f18e9d6f7f1f7a2bfdb4a616d3 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/e868832c39075b1130b5eb600824cabf +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/f3a1c84ec35a01045bb6b638d1fd975f +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/f444a8ac8dfe6e3fecd2ee1b3eb660d2 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/f5cb53dda9311da5c302df8dde1b98f0 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/f94211d95775b7b113ff83fbab9d96e5 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/fd421c922607b7e36737167c1d5f12f4 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/fde03b35c3de27e23e356c238f398a51 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/fe26af7b1d422e2d98a6f52452bc8576 +0 -0
- data/spec/dummy/tmp/pids/server.pid +1 -0
- data/spec/features/admin/collaborators/sign_in_spec.rb +17 -0
- data/spec/features/admin/custom/global_service_controller_spec.rb +22 -0
- data/spec/features/admin/custom/sidebar_services_spec.rb +29 -0
- data/spec/features/admin/custom/site_service_controller_spec.rb +37 -0
- data/spec/features/admin/domains/domian_routing_spec.rb +34 -0
- data/spec/features/admin/routes/details_spec.rb +24 -0
- data/spec/features/front/domain_routing_spec.rb +34 -0
- data/spec/features/front/page_blocks/defined_spec.rb +30 -0
- data/spec/features/front/page_blocks/undefined_spec.rb +19 -0
- data/spec/features/front/routes/page_spec.rb +18 -0
- data/spec/features/front/routes/redirection_spec.rb +19 -0
- data/spec/models/sierra/contributor_spec.rb +7 -0
- data/spec/models/sierra/site_spec.rb +37 -0
- data/spec/spec_helper.rb +56 -0
- data/spec/support/contributor_support.rb +75 -0
- data/spec/support/factories/block_factory.rb +10 -0
- data/spec/support/factories/contributor_factory.rb +8 -0
- data/spec/support/factories/route_factory.rb +18 -0
- data/spec/support/factories/service_factory.rb +6 -0
- data/spec/support/factories/site_factory.rb +9 -0
- metadata +1583 -0
@@ -0,0 +1,42 @@
|
|
1
|
+
class Exo
|
2
|
+
class Contributor
|
3
|
+
include ::Exo::Document
|
4
|
+
|
5
|
+
# Include default devise modules. Others available are:
|
6
|
+
# :confirmable, :lockable, :timeoutable and :omniauthable
|
7
|
+
devise :database_authenticatable, #:registerable,
|
8
|
+
:recoverable, :rememberable, :trackable, :validatable
|
9
|
+
|
10
|
+
field :email, :type => String, :default => ""
|
11
|
+
field :encrypted_password, :type => String, :default => ""
|
12
|
+
|
13
|
+
## Recoverable
|
14
|
+
field :reset_password_token, :type => String
|
15
|
+
field :reset_password_sent_at, :type => Time
|
16
|
+
|
17
|
+
## Rememberable
|
18
|
+
field :remember_created_at, :type => Time
|
19
|
+
|
20
|
+
## Trackable
|
21
|
+
field :sign_in_count, :type => Integer, :default => 0
|
22
|
+
field :current_sign_in_at, :type => Time
|
23
|
+
field :last_sign_in_at, :type => Time
|
24
|
+
field :current_sign_in_ip, :type => String
|
25
|
+
field :last_sign_in_ip, :type => String
|
26
|
+
|
27
|
+
##Other stuff
|
28
|
+
|
29
|
+
field :name
|
30
|
+
#field :is_able_to, type: Roles, default: Roles.new
|
31
|
+
|
32
|
+
def name
|
33
|
+
self[:name] || email.split('@').first
|
34
|
+
end
|
35
|
+
|
36
|
+
def avatar_url
|
37
|
+
::Gravatar.new(email).image_url
|
38
|
+
end
|
39
|
+
|
40
|
+
has_and_belongs_to_many :sites, class_name: 'Exo::Site', inverse_of: :contributors
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class Exo
|
2
|
+
class Resource::Item
|
3
|
+
class AbstractRelation < AbstractValue
|
4
|
+
field :resource_slug_id
|
5
|
+
|
6
|
+
validates_presence_of :resource_slug_id
|
7
|
+
validate :resource_existance, if: :item
|
8
|
+
|
9
|
+
protected
|
10
|
+
def resource_existance
|
11
|
+
resource!
|
12
|
+
rescue ::Mongoid::Errors::DocumentMissing => e
|
13
|
+
errors.add :resource_slug_id, :invalid
|
14
|
+
end
|
15
|
+
|
16
|
+
def resource!
|
17
|
+
item.site.slug_scope(Exo::Resource).find_by slug_id: resource_slug_id
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
class Exo
|
2
|
+
class Resource::Item::AbstractValue
|
3
|
+
include Exo::Document
|
4
|
+
|
5
|
+
embedded_in :item, class_name: 'Exo::Resource::Item'
|
6
|
+
|
7
|
+
field :field_slug_id
|
8
|
+
|
9
|
+
validates_presence_of :field_slug_id
|
10
|
+
validate :field_existance
|
11
|
+
|
12
|
+
def site
|
13
|
+
item ? item.site : nil
|
14
|
+
end
|
15
|
+
|
16
|
+
def value_update params
|
17
|
+
raise "value_update should be overrided in #{self.class}"
|
18
|
+
end
|
19
|
+
|
20
|
+
def meta_field_validation meta_field
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
def form_value
|
25
|
+
raise "form_value should be overrided in #{self.class}"
|
26
|
+
end
|
27
|
+
|
28
|
+
protected
|
29
|
+
def field_existance
|
30
|
+
unless item.resource.meta_field_for self.field_slug_id
|
31
|
+
errors.add :field_slug_id, :invalid
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class Exo
|
2
|
+
class Resource::Item
|
3
|
+
class AssetValue < AbstractValue
|
4
|
+
mount_uploader :content, Exo::ItemAssetUploader
|
5
|
+
|
6
|
+
field :content_type
|
7
|
+
field :content_size
|
8
|
+
|
9
|
+
validates_presence_of :content
|
10
|
+
validates_integrity_of :content
|
11
|
+
|
12
|
+
def value_update value
|
13
|
+
self.content = value
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
class Exo
|
2
|
+
class Resource::Item
|
3
|
+
class BelongsToValue < AbstractRelation
|
4
|
+
field :item_id, type: String, default: nil
|
5
|
+
|
6
|
+
before_validation :clean_blank_item_id
|
7
|
+
validate :item_existance, if: :item_id
|
8
|
+
|
9
|
+
def form_value
|
10
|
+
item_id
|
11
|
+
end
|
12
|
+
|
13
|
+
protected
|
14
|
+
def item_existance
|
15
|
+
raise "SHOULD USE SLUG ID"
|
16
|
+
unless resource!.items.where(_id: item_id).exists?
|
17
|
+
errors.add :item_id, :invalid
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def clean_blank_item_id
|
22
|
+
self.item_id = nil if self.item_id.blank?
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
class Exo
|
2
|
+
class Resource::Item
|
3
|
+
class HasManyValue < AbstractRelation
|
4
|
+
field :item_ids, type: Array, default: Array
|
5
|
+
|
6
|
+
validate :item_existance
|
7
|
+
|
8
|
+
def form_value
|
9
|
+
items_ids
|
10
|
+
end
|
11
|
+
|
12
|
+
protected
|
13
|
+
def item_existance
|
14
|
+
raise "SHOULD USE SLUG ID"
|
15
|
+
items_ids.each do |id|
|
16
|
+
unless resource!.items.where(_id: id).exists?
|
17
|
+
errors.add :item_ids, :invalid
|
18
|
+
break
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
class Exo
|
2
|
+
class Resource::Item
|
3
|
+
class ListValue < AbstractValue
|
4
|
+
JOIN_SEPARATOR = ', '
|
5
|
+
SPLIT_REGEXP = /,\s*/
|
6
|
+
|
7
|
+
|
8
|
+
field :array_values, type: Array, default: []
|
9
|
+
|
10
|
+
def form_value
|
11
|
+
list_value
|
12
|
+
end
|
13
|
+
|
14
|
+
def list_value
|
15
|
+
array_values.join JOIN_SEPARATOR
|
16
|
+
end
|
17
|
+
|
18
|
+
def list_value= list
|
19
|
+
self.array_values = list.split SPLIT_REGEXP
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
class Exo
|
2
|
+
class Resource::Item
|
3
|
+
class MarkdownValue < AbstractValue
|
4
|
+
SPLIT = '---PREVIEW---'
|
5
|
+
|
6
|
+
field :html_value
|
7
|
+
field :intro_html_value
|
8
|
+
field :raw_value
|
9
|
+
|
10
|
+
def value_update value
|
11
|
+
self.raw_value = value
|
12
|
+
intro, content = self.raw_value.split(SPLIT)
|
13
|
+
if content
|
14
|
+
self.intro_html_value = markdown_to_html intro
|
15
|
+
self.html_value = markdown_to_html content
|
16
|
+
else
|
17
|
+
self.intro_html_value = ''
|
18
|
+
self.html_value = markdown_to_html self.raw_value
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def value
|
23
|
+
self.intro_html_value + "<hr/>" + self.html_value #FIXME
|
24
|
+
end
|
25
|
+
|
26
|
+
def form_value
|
27
|
+
raw_value
|
28
|
+
end
|
29
|
+
|
30
|
+
protected
|
31
|
+
class HTMLwithPygments < Redcarpet::Render::HTML
|
32
|
+
def block_code(code, language)
|
33
|
+
Pygments.highlight(code, lexer: language) #, options: {linenos: true}
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def markdown_to_html md
|
38
|
+
options = {
|
39
|
+
hard_wrap: true,
|
40
|
+
filter_html: true,
|
41
|
+
autolink: true,
|
42
|
+
no_intraemphasis: true,
|
43
|
+
fenced_code: true,
|
44
|
+
fenced_code_blocks: true,
|
45
|
+
gh_blockcode: true
|
46
|
+
}
|
47
|
+
renderer = HTMLwithPygments.new(:hard_wrap => true)
|
48
|
+
Redcarpet::Markdown.new(renderer, options).render md.to_s
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,169 @@
|
|
1
|
+
class Exo::Resource
|
2
|
+
class Item
|
3
|
+
include Exo::Document
|
4
|
+
|
5
|
+
scope :published, lambda { where(:published_at.lte => DateTime.now, :published_at.ne => nil) }
|
6
|
+
|
7
|
+
field :slug_id
|
8
|
+
field :name
|
9
|
+
field :published_at, type: DateTime, default: nil
|
10
|
+
field :site_slug_id
|
11
|
+
field :resource_slug_id
|
12
|
+
field :values, type: Hash, default: {}
|
13
|
+
|
14
|
+
before_validation :reset_meta_errors
|
15
|
+
before_validation :generate_slug_id
|
16
|
+
validates_presence_of :name
|
17
|
+
validates_presence_of :slug_id
|
18
|
+
validates_presence_of :site_slug_id
|
19
|
+
validates_presence_of :resource_slug_id
|
20
|
+
validate :meta_field_validation
|
21
|
+
|
22
|
+
#embeds_many :assets, class_name: 'Exo::Resource::ItemAsset'
|
23
|
+
|
24
|
+
#field :_values, type: Hash, default: {}
|
25
|
+
embeds_many :values, class_name: 'Exo::Resource::Item::AbstractValue'
|
26
|
+
|
27
|
+
def migrate_values!
|
28
|
+
self._values = values
|
29
|
+
self.save!
|
30
|
+
self[:values] = nil
|
31
|
+
self.save!
|
32
|
+
end
|
33
|
+
|
34
|
+
def slugify value
|
35
|
+
_slug = value.downcase.gsub /([^a-z0-9])+/i, '-'
|
36
|
+
_slug = _slug[1..-1] if _slug[0] == '-'
|
37
|
+
_slug = _slug[0..-2] if _slug[-1] == '-'
|
38
|
+
_slug
|
39
|
+
end
|
40
|
+
|
41
|
+
def set_asset field_slug, value
|
42
|
+
puts "set asset #{field_slug} #{value}"
|
43
|
+
if value == nil
|
44
|
+
puts "empty"
|
45
|
+
nil
|
46
|
+
elsif !value
|
47
|
+
puts "remove"
|
48
|
+
assets.where(slug_id: field_slug).destroy_all
|
49
|
+
nil
|
50
|
+
else
|
51
|
+
puts "push !"
|
52
|
+
asset = assets.where(field_slug_id: field_slug).first || Exo::Resource::ItemAsset.new
|
53
|
+
asset.field_slug_id = field_slug unless asset.field_slug_id
|
54
|
+
asset.item = self unless asset.item
|
55
|
+
asset.content = value
|
56
|
+
asset.save
|
57
|
+
puts "asset #{asset.inspect}"
|
58
|
+
temp_asset[field_slug] = asset
|
59
|
+
asset
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def published= boolean
|
64
|
+
boolean = boolean == 1 if boolean.kind_of?(Fixnum)
|
65
|
+
boolean = boolean == "1" if boolean.kind_of?(String)
|
66
|
+
if boolean
|
67
|
+
self.published_at = DateTime.now unless published_at
|
68
|
+
else
|
69
|
+
self.published_at = nil
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def published
|
74
|
+
published_at && published_at <= DateTime.now
|
75
|
+
end
|
76
|
+
|
77
|
+
def scheduled
|
78
|
+
published_at && published_at > DateTime.now
|
79
|
+
end
|
80
|
+
|
81
|
+
alias :published? :published
|
82
|
+
|
83
|
+
def value_for meta_field
|
84
|
+
meta_field = meta_field.slug_id if meta_field.kind_of?(Exo::Resource::MetaField)
|
85
|
+
self.values.where(field_slug_id: meta_field.to_s).first
|
86
|
+
# if meta_field.kind_of?(Exo::Resource::MetaValue) && meta_field.asset?
|
87
|
+
# v = self.assets.where(field_slug_id: meta_field.slug_id.to_sym).first
|
88
|
+
# v = temp_asset[meta_field.slug_id] unless v
|
89
|
+
# v
|
90
|
+
# else
|
91
|
+
# self._values[meta_field.slug_id]
|
92
|
+
# end
|
93
|
+
end
|
94
|
+
|
95
|
+
def site= site
|
96
|
+
self.site_slug_id = site.slug_id
|
97
|
+
end
|
98
|
+
|
99
|
+
def site
|
100
|
+
Exo::Site.find_by slug_id: site_slug_id
|
101
|
+
end
|
102
|
+
|
103
|
+
def temp_asset_for meta_field
|
104
|
+
temp_asset[meta_field.slug_id]
|
105
|
+
end
|
106
|
+
|
107
|
+
def resource!
|
108
|
+
#NOT TESTED
|
109
|
+
site.resources.find_by slug_id: self.resource_slug_id
|
110
|
+
end
|
111
|
+
|
112
|
+
def resource= r
|
113
|
+
self.resource_slug_id = r.slug_id
|
114
|
+
end
|
115
|
+
|
116
|
+
def resource
|
117
|
+
#NOT TESTED
|
118
|
+
site.resources.where(slug_id: self.resource_slug_id).first
|
119
|
+
end
|
120
|
+
|
121
|
+
def meta_errors
|
122
|
+
@meta_errors ||= Exo::Resource::MetaErrors.new
|
123
|
+
end
|
124
|
+
|
125
|
+
protected
|
126
|
+
def generate_slug_id
|
127
|
+
self.slug_id = slugify self.name
|
128
|
+
end
|
129
|
+
|
130
|
+
def reset_meta_errors
|
131
|
+
@meta_errors = Exo::Resource::MetaErrors.new
|
132
|
+
end
|
133
|
+
|
134
|
+
def temp_asset
|
135
|
+
@temp_asset ||= HashWithIndifferentAccess.new
|
136
|
+
end
|
137
|
+
|
138
|
+
def meta_field_validation
|
139
|
+
reset_meta_errors
|
140
|
+
resource.meta_fields.each do |meta_field|
|
141
|
+
_value = value_for meta_field
|
142
|
+
raise "'#{meta_field.slug_id}' value missing" if !_value
|
143
|
+
_value.meta_field_validation meta_field
|
144
|
+
end
|
145
|
+
|
146
|
+
# if f.kind_of?(Exo::Resource::MetaValue) && !f.asset?
|
147
|
+
# self._values[f.slug_id] = nil if self._values[f.slug_id].blank?
|
148
|
+
# self._values[f.slug_id] = f.default if !self._values[f.slug_id] && f.default
|
149
|
+
# end
|
150
|
+
#
|
151
|
+
# value = value_for f
|
152
|
+
# puts "value for #{f.slug_id} -> #{!!value}"
|
153
|
+
# meta_errors.add f.slug_id, :required if !value && f.required
|
154
|
+
#
|
155
|
+
# if f.kind_of?(Exo::Resource::MetaValue) && f.unique
|
156
|
+
# sibling = resource!.items.where("values.#{f.slug_id}" => value).first
|
157
|
+
# if sibling && sibling != self
|
158
|
+
# meta_errors.add f.slug_id, :already_taken
|
159
|
+
# end
|
160
|
+
# end
|
161
|
+
#
|
162
|
+
# #FIXME format validation
|
163
|
+
# end
|
164
|
+
# unless meta_errors.empty?
|
165
|
+
# errors.add :_values, :errors
|
166
|
+
# end
|
167
|
+
end
|
168
|
+
end
|
169
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class Exo
|
2
|
+
class Resource::ItemAsset
|
3
|
+
include Exo::Document
|
4
|
+
|
5
|
+
embedded_in :item, class_name: 'Exo::Resource::Item'
|
6
|
+
|
7
|
+
mount_uploader :content, Exo::ItemAssetUploader
|
8
|
+
|
9
|
+
field :field_slug_id
|
10
|
+
field :content_type
|
11
|
+
field :content_size
|
12
|
+
|
13
|
+
validates_presence_of :content
|
14
|
+
validates_integrity_of :content
|
15
|
+
|
16
|
+
def site
|
17
|
+
item ? item.site : nil
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
class Exo::Resource::MetaErrors
|
2
|
+
attr_accessor :errors
|
3
|
+
|
4
|
+
def initialize
|
5
|
+
self.errors = {}
|
6
|
+
end
|
7
|
+
|
8
|
+
def each &block
|
9
|
+
errors.each &block
|
10
|
+
end
|
11
|
+
|
12
|
+
def collect &block
|
13
|
+
errors.collect &block
|
14
|
+
end
|
15
|
+
|
16
|
+
def add slug_id, error_type
|
17
|
+
errors[slug_id] ||= []
|
18
|
+
errors[slug_id].push error_type unless errors[slug_id].include?(error_type)
|
19
|
+
end
|
20
|
+
|
21
|
+
def empty?
|
22
|
+
errors.empty?
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class Exo::Resource
|
2
|
+
class MetaField
|
3
|
+
include Exo::Document
|
4
|
+
|
5
|
+
embedded_in :resource, class_name: 'Exo::Resource', inverse_of: :meta_fields
|
6
|
+
|
7
|
+
field :name, type: String
|
8
|
+
field :slug_id, type: String
|
9
|
+
field :required, type: Boolean, default: false
|
10
|
+
|
11
|
+
validates_presence_of :name
|
12
|
+
|
13
|
+
def value_class
|
14
|
+
if self.class == Exo::Resource::MetaField
|
15
|
+
raise "you are using an abstract class"
|
16
|
+
end
|
17
|
+
raise "value_class should be overrided."
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
class Exo::Resource
|
2
|
+
class MetaRelation < MetaField
|
3
|
+
field :resource_slug_id
|
4
|
+
field :many, type: Boolean, default: false
|
5
|
+
|
6
|
+
validates_presence_of :resource_slug_id
|
7
|
+
|
8
|
+
before_validation :genarate_slug_id, on: :create, if: :name
|
9
|
+
|
10
|
+
protected
|
11
|
+
def clean_default
|
12
|
+
self.default = nil if self.default.blank?
|
13
|
+
end
|
14
|
+
|
15
|
+
def genarate_slug_id
|
16
|
+
if !self.slug_id
|
17
|
+
if many
|
18
|
+
self.slug_id = "#{self.name.to_s.underscore}_ids" #fixme
|
19
|
+
else
|
20
|
+
self.slug_id = "#{self.name.to_s.underscore}_ids"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
class Exo::Resource
|
2
|
+
class MetaValue < MetaField
|
3
|
+
DATUM_TYPES = [
|
4
|
+
:string,
|
5
|
+
:text,
|
6
|
+
:image,
|
7
|
+
:file,
|
8
|
+
:datetime,
|
9
|
+
:time,
|
10
|
+
:belongs_to,
|
11
|
+
:has_many,
|
12
|
+
:markdown,
|
13
|
+
:list
|
14
|
+
]
|
15
|
+
|
16
|
+
DEFAULT_VALUE_CLASS = Exo::Resource::Item::SimpleValue
|
17
|
+
VALUE_CLASSES = {
|
18
|
+
belongs_to: Exo::Resource::Item::BelongsToValue,
|
19
|
+
has_many: Exo::Resource::Item::HasManyValue,
|
20
|
+
markdown: Exo::Resource::Item::MarkdownValue,
|
21
|
+
list: Exo::Resource::Item::ListValue,
|
22
|
+
|
23
|
+
image: Exo::Resource::Item::AssetValue,
|
24
|
+
file: Exo::Resource::Item::AssetValue
|
25
|
+
}
|
26
|
+
|
27
|
+
field :datum_type, type: String
|
28
|
+
field :default, type: String
|
29
|
+
field :unique, type: Boolean, default: false
|
30
|
+
|
31
|
+
before_validation :clean_default
|
32
|
+
|
33
|
+
validates_presence_of :name
|
34
|
+
validates_inclusion_of :datum_type, in: DATUM_TYPES.collect {|t| t.to_s}
|
35
|
+
|
36
|
+
before_validation :genarate_slug_id, on: :create, if: :name
|
37
|
+
#FIXME validate uniqueness of name
|
38
|
+
|
39
|
+
def value_class
|
40
|
+
VALUE_CLASSES[datum_sym] || DEFAULT_VALUE_CLASS
|
41
|
+
end
|
42
|
+
|
43
|
+
def datum_sym
|
44
|
+
datum_type.to_sym if datum_type
|
45
|
+
end
|
46
|
+
|
47
|
+
def asset?
|
48
|
+
['image'].include? datum_type.to_s
|
49
|
+
end
|
50
|
+
|
51
|
+
protected
|
52
|
+
def clean_default
|
53
|
+
self.default = nil if self.default.blank?
|
54
|
+
end
|
55
|
+
|
56
|
+
def genarate_slug_id
|
57
|
+
self.slug_id = self.name #fixme
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
class Exo
|
2
|
+
class Resource
|
3
|
+
include Exo::Document
|
4
|
+
|
5
|
+
embedded_in :site, class_name: 'Exo::Site'
|
6
|
+
embeds_many :meta_fields, class_name: 'Exo::Resource::MetaField', inverse_of: :resource
|
7
|
+
|
8
|
+
field :name
|
9
|
+
field :slug_id
|
10
|
+
|
11
|
+
validates_presence_of :name
|
12
|
+
validates_uniqueness_of :name
|
13
|
+
validates_presence_of :slug_id
|
14
|
+
validates_uniqueness_of :slug_id
|
15
|
+
|
16
|
+
before_validation :generate_slug_id, on: :create, if: :name
|
17
|
+
|
18
|
+
def meta_field_for key
|
19
|
+
meta_fields.where(slug_id: key).first
|
20
|
+
end
|
21
|
+
|
22
|
+
def items
|
23
|
+
site.slug_scope(Exo::Resource::Item).where resource_slug_id: self.slug_id
|
24
|
+
end
|
25
|
+
|
26
|
+
protected
|
27
|
+
def generate_slug_id
|
28
|
+
self.slug_id = self.name #fixme
|
29
|
+
end
|
30
|
+
|
31
|
+
# def slug_uniqueness
|
32
|
+
# site.routes.each do |r|
|
33
|
+
# if r.path == self.path && (self.new_record? || r.id != self.id)
|
34
|
+
# errors.add :path, :already_taken
|
35
|
+
# break
|
36
|
+
# end
|
37
|
+
# end
|
38
|
+
# end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class Exo
|
2
|
+
class Route::Page < Route
|
3
|
+
field :view_path
|
4
|
+
field :layout_path, type: String
|
5
|
+
|
6
|
+
embeds_many :blocks, class_name: 'Exo::Block'
|
7
|
+
|
8
|
+
validates_format_of :view_path, with: Exo::Regexp::ABSOLUTE_PATH
|
9
|
+
validates_format_of :layout_path, with: Exo::Regexp::ABSOLUTE_PATH, if: :layout_path
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
class Exo
|
2
|
+
class Route
|
3
|
+
include Exo::Document
|
4
|
+
|
5
|
+
embedded_in :site, class_name: 'Exo::Site'
|
6
|
+
embeds_many :settings, class_name: 'Exo::Setting', as: :setting_container
|
7
|
+
|
8
|
+
field :slug_id
|
9
|
+
field :path
|
10
|
+
|
11
|
+
validates_presence_of :slug_id
|
12
|
+
validates_format_of :path, with: ::Exo::Regexp::ROUTING_PATH
|
13
|
+
#validates_uniqueness_of :path
|
14
|
+
validate :path_uniqueness, if: :site
|
15
|
+
|
16
|
+
def redirection?
|
17
|
+
self.class == Exo::Route::Redirection
|
18
|
+
end
|
19
|
+
|
20
|
+
def url
|
21
|
+
site.url + self.path
|
22
|
+
end
|
23
|
+
|
24
|
+
def redirection?
|
25
|
+
self.class == Exo::Route::Redirection
|
26
|
+
end
|
27
|
+
|
28
|
+
protected
|
29
|
+
def path_uniqueness
|
30
|
+
site.routes.each do |r|
|
31
|
+
if (r.path == self.path) && (self != r)
|
32
|
+
errors.add :path, :already_taken
|
33
|
+
break
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|