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,31 @@
|
|
1
|
+
class Exo
|
2
|
+
class Setting
|
3
|
+
include Exo::Document
|
4
|
+
|
5
|
+
embedded_in :setting_container, polymorphic: true
|
6
|
+
|
7
|
+
field :slug_id
|
8
|
+
field :name
|
9
|
+
field :value
|
10
|
+
field :required, type: Boolean, default: false
|
11
|
+
field :system, type: Boolean, default: false
|
12
|
+
|
13
|
+
validates_presence_of :slug_id
|
14
|
+
validates_presence_of :name
|
15
|
+
validates_presence_of :value, if: :required
|
16
|
+
validate :slug_id_uniquness, if: :setting_container
|
17
|
+
|
18
|
+
def name
|
19
|
+
self[:name] || self.slug_id
|
20
|
+
end
|
21
|
+
|
22
|
+
protected
|
23
|
+
def slug_id_uniquness
|
24
|
+
setting_container.settings.each do |s|
|
25
|
+
next if s == self || s.slug_id.to_s != self.slug_id
|
26
|
+
errors.add :slug_id, :already_taken
|
27
|
+
break
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
class Exo
|
2
|
+
class Site
|
3
|
+
include ::Exo::Document
|
4
|
+
|
5
|
+
field :slug_id
|
6
|
+
field :theme_path
|
7
|
+
|
8
|
+
field :main_host
|
9
|
+
field :hosts, type: Array, default: []
|
10
|
+
|
11
|
+
embeds_many :settings, class_name: 'Exo::Setting', as: :setting_container
|
12
|
+
embeds_many :routes, class_name: 'Exo::Route'
|
13
|
+
embeds_many :resources, class_name: 'Exo::Resource'
|
14
|
+
embeds_many :services, class_name: 'Exo::Service'
|
15
|
+
|
16
|
+
has_and_belongs_to_many :contributors, class_name: 'Exo::Contributor', inverse_of: :sites
|
17
|
+
|
18
|
+
validate :hosting_validation
|
19
|
+
validates_presence_of :slug_id
|
20
|
+
validates_uniqueness_of :slug_id
|
21
|
+
validates_format_of :theme_path, with: Exo::Regexp::REL_PATH
|
22
|
+
|
23
|
+
def name
|
24
|
+
unless (array = main_host.split('.')[0..-2]).empty?
|
25
|
+
array.join(' ')
|
26
|
+
else
|
27
|
+
main_host
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def slug_scope scope
|
32
|
+
scope.where site_slug_id: self.slug_id
|
33
|
+
end
|
34
|
+
|
35
|
+
def url path=nil
|
36
|
+
"http://#{main_host}#{path}"
|
37
|
+
end
|
38
|
+
|
39
|
+
def nest_path path
|
40
|
+
File.join theme_path, path.to_s
|
41
|
+
end
|
42
|
+
|
43
|
+
def resource_name name
|
44
|
+
resources.find_by slug_id: name.to_s
|
45
|
+
end
|
46
|
+
|
47
|
+
protected
|
48
|
+
def hosting_validation
|
49
|
+
hosts.each do |host|
|
50
|
+
unless host =~ Exo::Regexp::HOST || host == 'localhost'
|
51
|
+
errors.add :hosts, :invalid_format
|
52
|
+
break
|
53
|
+
end
|
54
|
+
end
|
55
|
+
if main_host =~ Exo::Regexp::HOST || main_host == 'localhost'
|
56
|
+
self.hosts.push main_host
|
57
|
+
self.hosts = self.hosts.uniq
|
58
|
+
else
|
59
|
+
errors.add :main_host, :invalid_format
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class Exo
|
2
|
+
class ItemPresenter
|
3
|
+
attr_accessor :item, :resource
|
4
|
+
|
5
|
+
def initialize item, decorated_resource=nil
|
6
|
+
self.item = item
|
7
|
+
self.resource = decorated_resource || ResourcePresenter.new(item.resource)
|
8
|
+
end
|
9
|
+
|
10
|
+
def method_missing meth, *params, &block
|
11
|
+
_field = resource.meta_field(meth)
|
12
|
+
if _field
|
13
|
+
item.value_for _field
|
14
|
+
else
|
15
|
+
item.send meth, *params, &block
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
class Exo
|
2
|
+
class ResourcePresenter
|
3
|
+
attr_accessor :resource
|
4
|
+
|
5
|
+
def initialize resource
|
6
|
+
self.resource = resource
|
7
|
+
end
|
8
|
+
|
9
|
+
def items
|
10
|
+
ScopeWraper.new resource.items, self
|
11
|
+
end
|
12
|
+
|
13
|
+
def item slug_id
|
14
|
+
ItemPresenter.new items.find_by(slug_id: slug_id), self
|
15
|
+
end
|
16
|
+
|
17
|
+
def meta_field name
|
18
|
+
resource.meta_fields.where(slug_id: name.to_s).first
|
19
|
+
end
|
20
|
+
|
21
|
+
def wrap_item i
|
22
|
+
ItemPresenter.new i, self
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
class Exo
|
2
|
+
class RoutePresenter < Struct.new(:route)
|
3
|
+
DEFAULT_LAYOUT = '/application'
|
4
|
+
|
5
|
+
def redirection?
|
6
|
+
route.class == Exo::Route::Redirection
|
7
|
+
end
|
8
|
+
|
9
|
+
def nil?
|
10
|
+
route.nil?
|
11
|
+
end
|
12
|
+
|
13
|
+
def to_url
|
14
|
+
route.to_url
|
15
|
+
end
|
16
|
+
|
17
|
+
def view_path
|
18
|
+
route.site.nest_path route.view_path
|
19
|
+
end
|
20
|
+
|
21
|
+
def layout_path
|
22
|
+
route.site.nest_path(route.layout_path || DEFAULT_LAYOUT)
|
23
|
+
end
|
24
|
+
|
25
|
+
def blocks
|
26
|
+
route.blocks
|
27
|
+
end
|
28
|
+
|
29
|
+
def block slug_id
|
30
|
+
route.blocks.where(slug_id: slug_id.to_s).first
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
class Exo
|
2
|
+
class ScopeWraper
|
3
|
+
attr_accessor :_scope, :delegate
|
4
|
+
|
5
|
+
include Enumerable
|
6
|
+
|
7
|
+
def initialize scope, delegate=nil
|
8
|
+
self.delegate = delegate
|
9
|
+
self._scope = scope.kind_of?(Exo::ScopeWraper) ? scope._scope : scope
|
10
|
+
end
|
11
|
+
|
12
|
+
def each &block
|
13
|
+
if delegate
|
14
|
+
_scope.each do |item|
|
15
|
+
block.call delegate.wrap_item(item)
|
16
|
+
end
|
17
|
+
else
|
18
|
+
_scope.each &block
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def keep? obj
|
23
|
+
obj.kind_of? ::Mongoid::Criteria
|
24
|
+
end
|
25
|
+
|
26
|
+
def first
|
27
|
+
wrap _scope.first
|
28
|
+
end
|
29
|
+
|
30
|
+
def last
|
31
|
+
wrap _scope.last
|
32
|
+
end
|
33
|
+
|
34
|
+
def find *params
|
35
|
+
wrap _scope.find *params
|
36
|
+
end
|
37
|
+
|
38
|
+
def find_by *params
|
39
|
+
wrap _scope.find_by *params
|
40
|
+
end
|
41
|
+
|
42
|
+
def method_missing meth, *args, &block
|
43
|
+
_rez = _scope.send meth, *args, &block
|
44
|
+
if keep? _rez
|
45
|
+
self._scope = _rez
|
46
|
+
self
|
47
|
+
else
|
48
|
+
_rez
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
protected
|
53
|
+
def wrap item
|
54
|
+
item = delegate.wrap_item(item) if delegate
|
55
|
+
item
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
class Exo
|
2
|
+
class SitePresenter
|
3
|
+
attr_accessor :site, :_resources
|
4
|
+
|
5
|
+
def initialize site
|
6
|
+
self.site = site
|
7
|
+
self._resources = {}
|
8
|
+
end
|
9
|
+
|
10
|
+
def resource name
|
11
|
+
name = name.to_s
|
12
|
+
_resources[name] = decorated_resource name if _resources[name] == nil
|
13
|
+
_resources[name] || nil
|
14
|
+
end
|
15
|
+
|
16
|
+
def setting name
|
17
|
+
self.site.settings.where(slug_id: name.to_sym).first
|
18
|
+
end
|
19
|
+
|
20
|
+
def routes
|
21
|
+
site.routes
|
22
|
+
end
|
23
|
+
|
24
|
+
def method_missing meth, *args, &block
|
25
|
+
site.send meth.to_sym, *args, &block
|
26
|
+
end
|
27
|
+
|
28
|
+
protected
|
29
|
+
def decorated_resource name
|
30
|
+
_resource = self.site.resources.where(slug_id: name).first || false
|
31
|
+
_resource = ResourcePresenter.new _resource if _resource
|
32
|
+
_resource
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
!!!
|
2
|
+
%html
|
3
|
+
%head
|
4
|
+
%title= @page_name || tick.site.slug_id
|
5
|
+
%meta{'http-equiv' => "content-language", :content => 'fr'}
|
6
|
+
%meta{'http-equiv' => "Content-Type", :content => "text/html; charset=ISO-8859-1"}
|
7
|
+
= stylesheet_link_tag tick.site.nest_path(:application), media: "all", "data-turbolinks-track" => true
|
8
|
+
= javascript_include_tag tick.site.nest_path(:application), "data-turbolinks-track" => true
|
9
|
+
= csrf_meta_tags
|
10
|
+
%body
|
11
|
+
= yield
|
@@ -0,0 +1,78 @@
|
|
1
|
+
class CkeditorRailser
|
2
|
+
RAILS_STRUCTURE = {
|
3
|
+
rails_assets: {
|
4
|
+
javascripts: /\.js\z/,
|
5
|
+
stylesheets: /\.css\z/,
|
6
|
+
images: /\.(png|jpg|jpeg)\z/,
|
7
|
+
otheres: nil
|
8
|
+
}
|
9
|
+
}
|
10
|
+
|
11
|
+
attr_accessor :base_path, :actions
|
12
|
+
|
13
|
+
def process path=nil
|
14
|
+
self.base_path = path || '.'
|
15
|
+
raise "base path #{base_path} does not exist" unless Pathname.new(base_path).exist?
|
16
|
+
init_structure
|
17
|
+
railsing!
|
18
|
+
end
|
19
|
+
|
20
|
+
protected
|
21
|
+
def init_structure
|
22
|
+
puts " ! Init structure"
|
23
|
+
rails_assets_path = File.join base_path, 'rails_assets'
|
24
|
+
if Pathname.new(rails_assets_path).exist?
|
25
|
+
puts " - #{rails_assets_path}/*"
|
26
|
+
FileUtils.rm_rf rails_assets_path
|
27
|
+
end
|
28
|
+
self.actions = {}
|
29
|
+
init_recursivly base_path, RAILS_STRUCTURE do |path, action|
|
30
|
+
self.actions[action] = path
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def init_recursivly path, structure_hash, ®ister
|
35
|
+
structure_hash.each do |_folder, action|
|
36
|
+
folder = _folder.to_s
|
37
|
+
folder_path = File.join(path, folder)
|
38
|
+
puts " + #{folder_path}"
|
39
|
+
Dir.mkdir folder_path
|
40
|
+
if action.kind_of?(Hash)
|
41
|
+
init_recursivly folder_path, action, ®ister
|
42
|
+
else
|
43
|
+
puts " > #{action} -> #{_folder}"
|
44
|
+
register.call folder_path, action
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def railsing!
|
50
|
+
puts " ! Railsing"
|
51
|
+
Dir[File.join(base_path, '**', '*')].each do |path|
|
52
|
+
next if Pathname.new(path).directory?
|
53
|
+
actions.each do |regexp, group_path|
|
54
|
+
next unless regexp =~ path
|
55
|
+
copy_file path, group_path
|
56
|
+
break
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def copy_file file_path, group_path
|
62
|
+
rel_path = file_path[base_path.size..-1]
|
63
|
+
folder_destination = group_path
|
64
|
+
rel_path.split('/')[0..-2].each do |folder|
|
65
|
+
folder_destination = File.join folder_destination, folder
|
66
|
+
next if Pathname.new(folder_destination).exist?
|
67
|
+
puts " + #{folder_destination} f"
|
68
|
+
Dir.mkdir folder_destination
|
69
|
+
end
|
70
|
+
destination_path = File.join group_path, rel_path
|
71
|
+
puts " + #{destination_path}"
|
72
|
+
File.open(file_path, 'r') do |source|
|
73
|
+
File.open(destination_path, 'w') do |destination|
|
74
|
+
destination.write source.read
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -0,0 +1,138 @@
|
|
1
|
+
class Exo
|
2
|
+
class Config
|
3
|
+
attr_accessor :config_slug, :options
|
4
|
+
def initialize config_slug, options
|
5
|
+
self.config_slug = config_slug
|
6
|
+
self.options = options
|
7
|
+
end
|
8
|
+
|
9
|
+
def install!
|
10
|
+
raise 'Target missing! specify it this way "seed[site_name]"' if config_slug.blank?
|
11
|
+
|
12
|
+
_site_conf = load_site_config config_slug
|
13
|
+
_site = up_site config_slug, _site_conf
|
14
|
+
_site.save!
|
15
|
+
|
16
|
+
if path = ViewGenerator.ensure_site_layout(_site)
|
17
|
+
puts " + #{path}".colorize(:green)
|
18
|
+
end
|
19
|
+
|
20
|
+
(_site_conf[:resources] || []).each do |_slug, _conf|
|
21
|
+
r = up_resource _slug, _site, _conf
|
22
|
+
r = r.save!
|
23
|
+
end
|
24
|
+
|
25
|
+
(_site_conf[:routes] || []).each do |_slug, _conf|
|
26
|
+
r = up_route _slug, _site, _conf
|
27
|
+
r.save!
|
28
|
+
if r.class == Exo::Route::Page
|
29
|
+
if path = ViewGenerator.ensure_page_view(r)
|
30
|
+
puts " + #{path}".colorize(:green)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
#FIXME: r.clean_item_fields
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
protected
|
38
|
+
def load_site_config slug
|
39
|
+
_hash = YAML.load_file File.join(
|
40
|
+
Rails.root,
|
41
|
+
'config',
|
42
|
+
'exo',
|
43
|
+
"#{slug}.yml"
|
44
|
+
)
|
45
|
+
HashWithIndifferentAccess.new _hash
|
46
|
+
end
|
47
|
+
|
48
|
+
def up_site slug, conf
|
49
|
+
m = Site.where(slug_id: slug).first || Site.new
|
50
|
+
|
51
|
+
m.slug_id = slug
|
52
|
+
m.main_host = conf[:main_host]
|
53
|
+
m.hosts = conf[:hosts] || []
|
54
|
+
m.theme_path = conf[:theme]
|
55
|
+
|
56
|
+
(conf[:contributors] || []).each do |email|
|
57
|
+
c = Exo::Contributor.where(email: email).first
|
58
|
+
unless c
|
59
|
+
puts " ! Contributor #{email} not registred"
|
60
|
+
next
|
61
|
+
end
|
62
|
+
unless m.contributor_ids.include?(c.id)
|
63
|
+
puts " + contributor #{email}"
|
64
|
+
m.contributors.push c
|
65
|
+
end
|
66
|
+
end
|
67
|
+
m
|
68
|
+
end
|
69
|
+
|
70
|
+
def up_route slug, site, conf
|
71
|
+
route = site.routes.where(path: conf[:path]).first
|
72
|
+
|
73
|
+
_is_page = conf[:to].blank?
|
74
|
+
_class = _is_page ? Route::Page : Route::Redirection
|
75
|
+
|
76
|
+
if route && route.class != _class
|
77
|
+
puts " ! change route type for #{route.path}"
|
78
|
+
route.destroy
|
79
|
+
route = nil
|
80
|
+
end
|
81
|
+
|
82
|
+
unless route
|
83
|
+
puts " + #{conf[:path]}"
|
84
|
+
route = _class.new
|
85
|
+
end
|
86
|
+
|
87
|
+
route.slug_id = slug
|
88
|
+
route.path = conf[:path]
|
89
|
+
if _is_page
|
90
|
+
route.view_path = conf[:view]
|
91
|
+
else
|
92
|
+
route.to_url = conf[:to]
|
93
|
+
end
|
94
|
+
|
95
|
+
route.site = site unless route.site
|
96
|
+
route
|
97
|
+
end
|
98
|
+
|
99
|
+
def up_resource slug, site, fields
|
100
|
+
fields ||= {}
|
101
|
+
|
102
|
+
r = site.resources.where(slug_id: slug).first
|
103
|
+
|
104
|
+
unless r
|
105
|
+
puts " + resource #{slug}"
|
106
|
+
r = Resource.new
|
107
|
+
end
|
108
|
+
|
109
|
+
r.slug_id = slug
|
110
|
+
r.name = slug
|
111
|
+
|
112
|
+
fields.each do |name, opt|
|
113
|
+
if opt[:resource]
|
114
|
+
f = Resource::MetaRelation.new
|
115
|
+
f.resource_slug_id = opt[:resource]
|
116
|
+
f.many = opt[:type].to_sym == :many
|
117
|
+
if f.many
|
118
|
+
f.slug_id = "#{name}_ids"
|
119
|
+
else
|
120
|
+
f.slug_id = "#{name}_id"
|
121
|
+
end
|
122
|
+
else
|
123
|
+
f = Resource::MetaValue.new
|
124
|
+
f.slug_id = name
|
125
|
+
f.datum_type = opt[:type]
|
126
|
+
f.unique = !!opt[:unique]
|
127
|
+
end
|
128
|
+
f.name = opt[:name] || name
|
129
|
+
f.required = !!opt[:required]
|
130
|
+
|
131
|
+
f.resource = r
|
132
|
+
end
|
133
|
+
|
134
|
+
r.site = site unless r.site
|
135
|
+
r
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
class Exo::Generator
|
4
|
+
APP_FOLDER_EXCLUDED = ['assets', 'helpers']
|
5
|
+
|
6
|
+
attr_accessor :slug, :options
|
7
|
+
|
8
|
+
def initialize slug, options=nil
|
9
|
+
self.slug = slug
|
10
|
+
self.options = options || {}
|
11
|
+
end
|
12
|
+
|
13
|
+
def generates_config
|
14
|
+
exo_config_path = File.join root_path, 'config', 'exo', "#{slug}.yml"
|
15
|
+
|
16
|
+
dir = File.dirname exo_config_path
|
17
|
+
FileUtils.mkdir_p dir unless File.directory? dir
|
18
|
+
unless File.exists?(exo_config_path)
|
19
|
+
puts " + #{exo_config_path}"
|
20
|
+
yaml = {
|
21
|
+
'theme' => slug,
|
22
|
+
'main_host' => "#{slug}.com",
|
23
|
+
'hosts' => nil,
|
24
|
+
'contributors' => nil,
|
25
|
+
'resources' => nil,
|
26
|
+
'routes' => nil
|
27
|
+
}.to_yaml
|
28
|
+
File.open(exo_config_path, 'w') {|f| f.write yaml }
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def generates_folders
|
33
|
+
app_folder = File.join root_path, 'app'
|
34
|
+
|
35
|
+
generates_slug_subfolder_of app_folder
|
36
|
+
generates_slug_subfolder_of File.join app_folder, 'assets'
|
37
|
+
end
|
38
|
+
|
39
|
+
protected
|
40
|
+
def generates_slug_subfolder_of folder_path
|
41
|
+
Dir[File.join(folder_path, '**')].each do |sub_path|
|
42
|
+
item_name = sub_path.split('/').last
|
43
|
+
|
44
|
+
next if item_name == '.' or item_name == '..'
|
45
|
+
next unless File.directory? sub_path
|
46
|
+
next if APP_FOLDER_EXCLUDED.include? item_name
|
47
|
+
|
48
|
+
slug_path = File.join sub_path, slug
|
49
|
+
next if File.exists?(slug_path)
|
50
|
+
puts " + #{slug_path}"
|
51
|
+
|
52
|
+
FileUtils.mkdir slug_path
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def root_path
|
57
|
+
@root_path ||= Rails.root
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
class Exo::ItemBuilder < Struct.new(:item)
|
2
|
+
def update_values params
|
3
|
+
puts "[Exo::ItemBuilder] Update values ..."
|
4
|
+
_resource = item.resource
|
5
|
+
params.each do |k, v|
|
6
|
+
puts " * #{k}"
|
7
|
+
_field = _resource.meta_field_for k
|
8
|
+
_value = item.value_for k
|
9
|
+
|
10
|
+
if _value && _value.class != _field.value_class
|
11
|
+
_value.destroy
|
12
|
+
_value = nil
|
13
|
+
end
|
14
|
+
|
15
|
+
unless _value
|
16
|
+
_value = _field.value_class.new
|
17
|
+
_value.field_slug_id = k.to_s
|
18
|
+
_value.item = item
|
19
|
+
end
|
20
|
+
|
21
|
+
_value.value_update v
|
22
|
+
|
23
|
+
puts "=> #{item.values.inspect}"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def update_item params
|
28
|
+
puts "[Exo::ItemBuilder] Update item ..."
|
29
|
+
if item.new_record?
|
30
|
+
item.save
|
31
|
+
else
|
32
|
+
item.update_attributes params
|
33
|
+
end
|
34
|
+
# Values post save is required to trigger assets content to persist.
|
35
|
+
item.values.each do |r|
|
36
|
+
r.save!
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
module Exo::Mongoid; end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
class Exo
|
2
|
+
class PathMatcher
|
3
|
+
def self.test
|
4
|
+
raise '1' unless new('/home').match?('/home')
|
5
|
+
|
6
|
+
hash = {}
|
7
|
+
raise '2' unless new('/home/:test').match?('/home/a', hash)
|
8
|
+
raise '3' unless hash[:test] == 'a'
|
9
|
+
|
10
|
+
hash = {}
|
11
|
+
raise '4' unless new('/home/:test/another/:lol').match?('/home/abc/another/def', hash)
|
12
|
+
raise '5' unless hash[:test] == 'abc'
|
13
|
+
raise '6' unless hash[:lol] == 'def'
|
14
|
+
|
15
|
+
hash = {}
|
16
|
+
raise '7' unless new('/home/:test/another/:lol/fun').match?('/home/abc/another/def/fun', hash)
|
17
|
+
raise '8' unless hash[:test] == 'abc'
|
18
|
+
raise '9' unless hash[:lol] == 'def'
|
19
|
+
end
|
20
|
+
|
21
|
+
attr_accessor :regexp, :keys
|
22
|
+
def self.route_for routes, params, key=:route_path, &builder
|
23
|
+
path = params[key]
|
24
|
+
raise "Params does not countain any path" unless path
|
25
|
+
path = "/#{path}" unless path[0] == '/'
|
26
|
+
|
27
|
+
routes.each do |route|
|
28
|
+
if new(route.path).match? path, params
|
29
|
+
builder.call route
|
30
|
+
break
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def initialize path_pattern
|
36
|
+
self.keys = []
|
37
|
+
regpath = path_pattern.gsub(/:([^\/]+)/) do |match|
|
38
|
+
key = $1
|
39
|
+
keys.push key.to_sym
|
40
|
+
"(?<#{key}>.+)"
|
41
|
+
end
|
42
|
+
self.regexp = /\A#{regpath}\z/i
|
43
|
+
end
|
44
|
+
|
45
|
+
def match? path, params=nil
|
46
|
+
matching = regexp.match path
|
47
|
+
if matching && params
|
48
|
+
keys.each do |k|
|
49
|
+
params[k] = matching[k]
|
50
|
+
end
|
51
|
+
end
|
52
|
+
!!matching
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|