ecm_cms_core 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/MIT-LICENSE +20 -0
- data/README.rdoc +3 -0
- data/Rakefile +38 -0
- data/app/admin/ecm/ecm_core/folders.rb +46 -0
- data/app/admin/ecm/ecm_core/templates.rb +57 -0
- data/app/controllers/ecm/cms_core/page_controller.rb +55 -0
- data/app/controllers/page_controller.rb +2 -0
- data/app/helpers/ecm/cms_core_helper.rb +48 -0
- data/app/models/ecm/cms_core/folder.rb +65 -0
- data/app/models/ecm/cms_core/template.rb +150 -0
- data/config/locales/ecm.cms_core.de.yml +22 -0
- data/config/locales/ecm.cms_core.en.yml +22 -0
- data/config/locales/ecm.cms_core.folder.de.yml +13 -0
- data/config/locales/ecm.cms_core.folder.en.yml +13 -0
- data/config/locales/ecm.cms_core.forms.de.yml +8 -0
- data/config/locales/ecm.cms_core.template.de.yml +21 -0
- data/config/locales/ecm.cms_core.template.en.yml +21 -0
- data/db/migrate/001_create_ecm_cms_core_folders.rb +16 -0
- data/db/migrate/002_create_ecm_cms_core_templates.rb +19 -0
- data/lib/ecm/cms_core/engine.rb +25 -0
- data/lib/ecm/cms_core/version.rb +5 -0
- data/lib/ecm_cms_core.rb +13 -0
- data/lib/generators/ecm/cms_core/active_admin/active_admin_generator.rb +16 -0
- data/lib/generators/ecm/cms_core/active_admin/templates/folders.rb +44 -0
- data/lib/generators/ecm/cms_core/active_admin/templates/templates.rb +52 -0
- data/lib/generators/ecm/cms_core/controller/controller_generator.rb +15 -0
- data/lib/generators/ecm/cms_core/controller/templates/page_controller.rb +3 -0
- data/lib/generators/ecm/cms_core/install/install_generator.rb +34 -0
- data/lib/generators/ecm/cms_core/locales/locales_generator.rb +17 -0
- data/lib/generators/ecm/cms_core/locales/templates/ecm.cms-core.de.yml +48 -0
- data/lib/generators/ecm/cms_core/locales/templates/ecm.cms-core.en.yml +48 -0
- data/lib/generators/ecm/cms_core/migrations/migrations_generator.rb +28 -0
- data/lib/generators/ecm/cms_core/migrations/templates/create_ecm_cms_core_folders.rb +20 -0
- data/lib/generators/ecm/cms_core/migrations/templates/create_ecm_cms_core_templates.rb +23 -0
- data/lib/generators/ecm/cms_core/models/models_generator.rb +16 -0
- data/lib/generators/ecm/cms_core/models/templates/folder.rb +58 -0
- data/lib/generators/ecm/cms_core/models/templates/template.rb +127 -0
- data/lib/generators/ecm/cms_core/routes/routes_generator.rb +18 -0
- data/lib/generators/ecm/cms_core/routes/templates/routes.rb +14 -0
- data/lib/tasks/ecm_cms_core_tasks.rake +4 -0
- data/test/dummy/README.rdoc +261 -0
- data/test/dummy/Rakefile +7 -0
- data/test/dummy/app/admin/dashboards.rb +44 -0
- data/test/dummy/app/assets/javascripts/active_admin.js +1 -0
- data/test/dummy/app/assets/javascripts/application.js +15 -0
- data/test/dummy/app/assets/stylesheets/active_admin.css.scss +6 -0
- data/test/dummy/app/assets/stylesheets/application.css +13 -0
- data/test/dummy/app/controllers/application_controller.rb +3 -0
- data/test/dummy/app/controllers/frontend_controller.rb +5 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/models/admin_user.rb +11 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/config/application.rb +60 -0
- data/test/dummy/config/boot.rb +10 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +37 -0
- data/test/dummy/config/environments/production.rb +67 -0
- data/test/dummy/config/environments/test.rb +37 -0
- data/test/dummy/config/initializers/active_admin.rb +133 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/devise.rb +232 -0
- data/test/dummy/config/initializers/inflections.rb +15 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/secret_token.rb +7 -0
- data/test/dummy/config/initializers/session_store.rb +8 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/admin_user.de.yml +16 -0
- data/test/dummy/config/locales/devise.en.yml +58 -0
- data/test/dummy/config/locales/ecm.admin.de.yml +5 -0
- data/test/dummy/config/locales/en.yml +5 -0
- data/test/dummy/config/routes.rb +75 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/db/migrate/20120622191421_devise_create_admin_users.rb +49 -0
- data/test/dummy/db/migrate/20120622211430_create_admin_notes.rb +17 -0
- data/test/dummy/db/migrate/20120622211431_move_admin_notes_to_comments.rb +25 -0
- data/test/dummy/db/migrate/20120622211432_create_ecm_cms_core_folders.ecm_cms_core_engine.rb +17 -0
- data/test/dummy/db/migrate/20120622211433_create_ecm_cms_core_templates.ecm_cms_core_engine.rb +20 -0
- data/test/dummy/db/schema.rb +78 -0
- data/test/dummy/lib/i18n_controller.rb +13 -0
- data/test/dummy/log/development.log +3914 -0
- data/test/dummy/public/404.html +26 -0
- data/test/dummy/public/422.html +26 -0
- data/test/dummy/public/500.html +25 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/script/rails +6 -0
- data/test/dummy/test/fixtures/admin_users.yml +11 -0
- data/test/dummy/test/unit/admin_user_test.rb +7 -0
- data/test/dummy/tmp/cache/assets/C18/0B0/sprockets%2F35b3b1439378240b7f536115a153938b +0 -0
- data/test/dummy/tmp/cache/assets/C71/090/sprockets%2F931c90486b551252ac56132ab76b3d24 +0 -0
- data/test/dummy/tmp/cache/assets/C77/210/sprockets%2Ff90b51d7105d6180b8164f81f4018e40 +0 -0
- data/test/dummy/tmp/cache/assets/C7A/1D0/sprockets%2F0189934c63685d1fb1126608daf1425a +0 -0
- data/test/dummy/tmp/cache/assets/C86/B30/sprockets%2F85e65103906606f93dcb5680baf75803 +0 -0
- data/test/dummy/tmp/cache/assets/C88/8B0/sprockets%2F6680b99d2ee676651202ae63a78c4632 +0 -0
- data/test/dummy/tmp/cache/assets/CAD/7E0/sprockets%2F935781681cef3fc00956d32115cdd521 +0 -0
- data/test/dummy/tmp/cache/assets/CB0/2A0/sprockets%2F3481651900e045da49fced159c2c9814 +0 -0
- data/test/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953 +0 -0
- data/test/dummy/tmp/cache/assets/CDB/040/sprockets%2Fc732474e67003a4eb840eb44c5ca9385 +0 -0
- data/test/dummy/tmp/cache/assets/CDD/E00/sprockets%2Fb2e579afe803008df59253c7710ad551 +0 -0
- data/test/dummy/tmp/cache/assets/CEA/0A0/sprockets%2Ff1bd29507924f5fa43fb777b0d681295 +0 -0
- data/test/dummy/tmp/cache/assets/CF3/0B0/sprockets%2F0052f1e917b02a5ad4b2ca961221a8f4 +0 -0
- data/test/dummy/tmp/cache/assets/CFD/150/sprockets%2Fdb3d5b419b4002d3340c24b493d8bb95 +0 -0
- data/test/dummy/tmp/cache/assets/D08/3C0/sprockets%2Fbe501c50446a7f55d74e3d4a7920bb56 +0 -0
- data/test/dummy/tmp/cache/assets/D0A/5C0/sprockets%2Fb89637e3b60cf2ddbb055339f23a8421 +0 -0
- data/test/dummy/tmp/cache/assets/D0E/A90/sprockets%2Fc50f8f2a758b0942172763af9a33b0ef +0 -0
- data/test/dummy/tmp/cache/assets/D1B/200/sprockets%2Fee63896e56c8fa545d2a92d3145a760d +0 -0
- data/test/dummy/tmp/cache/assets/D2E/DE0/sprockets%2F7668bdc951df66f9d93210ed7689bb57 +0 -0
- data/test/dummy/tmp/cache/assets/D30/D00/sprockets%2F506e8247250c45c101b1f6cefe7b22fb +0 -0
- data/test/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
- data/test/dummy/tmp/cache/assets/D38/540/sprockets%2F86e1ad844bc9df4491a2a52b870421db +0 -0
- data/test/dummy/tmp/cache/assets/D3A/240/sprockets%2Fbd5ec81e43457436f38d6f2e21eb311b +0 -0
- data/test/dummy/tmp/cache/assets/D3D/B50/sprockets%2F60f3b6e7ec4196f82f701a039db5a55a +0 -0
- data/test/dummy/tmp/cache/assets/D46/720/sprockets%2Fef62800e7785cd1f7f7d7edb3960000e +0 -0
- data/test/dummy/tmp/cache/assets/D48/640/sprockets%2F9f4f18d910b678b1d0777e04cdaf6f24 +0 -0
- data/test/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
- data/test/dummy/tmp/cache/assets/D59/D70/sprockets%2Fed9f0de1b65ae8d7ef89087c83728461 +0 -0
- data/test/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6 +0 -0
- data/test/dummy/tmp/cache/assets/D5B/860/sprockets%2F79ae2a01f99104da404ed31a8fea230d +0 -0
- data/test/dummy/tmp/cache/assets/D5D/6B0/sprockets%2F690ac8bc288fe688ce9d76121687c8bf +0 -0
- data/test/dummy/tmp/cache/assets/D5F/AE0/sprockets%2F6057dd9be3e736fad88777c09689bfe1 +0 -0
- data/test/dummy/tmp/cache/assets/D6B/E60/sprockets%2Ff93ae30e51558cab50c5867ffa4a714a +0 -0
- data/test/dummy/tmp/cache/assets/D7F/600/sprockets%2Fafd454e9dc29d3ce8f5fc810465219f6 +0 -0
- data/test/dummy/tmp/cache/assets/D84/500/sprockets%2Fe598c3010e9ff8a9fc930e84eb2b8f38 +0 -0
- data/test/dummy/tmp/cache/assets/D93/4C0/sprockets%2F857ecd2092cee11f740b3cf2e373ad2a +0 -0
- data/test/dummy/tmp/cache/assets/D96/0A0/sprockets%2F115d14ce48fada6837943c0e5b0a8eda +0 -0
- data/test/dummy/tmp/cache/assets/D97/060/sprockets%2F16cc3664c109be5b82c1521e4fe1fdfe +0 -0
- data/test/dummy/tmp/cache/assets/D9A/7F0/sprockets%2Fa9dc360a17e439e63ada3f389e053cda +0 -0
- data/test/dummy/tmp/cache/assets/D9C/4F0/sprockets%2Ffd36b6361b4bd8d3425f9aa35ff53dc1 +0 -0
- data/test/dummy/tmp/cache/assets/DAB/5A0/sprockets%2F2da87e72599a04cc89c8beec9218dd1a +0 -0
- data/test/dummy/tmp/cache/assets/DAC/1E0/sprockets%2Faf6be87981984ebc9b4f70a346dbea42 +0 -0
- data/test/dummy/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994 +0 -0
- data/test/dummy/tmp/cache/assets/DDE/420/sprockets%2Ffb8b186d5bf0307f86f65fc787d2adeb +0 -0
- data/test/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
- data/test/dummy/tmp/cache/sass/0149e15b7f61f5a238cd1c4ab956828760d53144/_all.css.scssc +0 -0
- data/test/dummy/tmp/cache/sass/0149e15b7f61f5a238cd1c4ab956828760d53144/_buttons.css.scssc +0 -0
- data/test/dummy/tmp/cache/sass/0149e15b7f61f5a238cd1c4ab956828760d53144/_gradients.css.scssc +0 -0
- data/test/dummy/tmp/cache/sass/0149e15b7f61f5a238cd1c4ab956828760d53144/_icons.css.scssc +0 -0
- data/test/dummy/tmp/cache/sass/0149e15b7f61f5a238cd1c4ab956828760d53144/_reset.css.scssc +0 -0
- data/test/dummy/tmp/cache/sass/0149e15b7f61f5a238cd1c4ab956828760d53144/_rounded.css.scssc +0 -0
- data/test/dummy/tmp/cache/sass/0149e15b7f61f5a238cd1c4ab956828760d53144/_sections.css.scssc +0 -0
- data/test/dummy/tmp/cache/sass/0149e15b7f61f5a238cd1c4ab956828760d53144/_shadows.css.scssc +0 -0
- data/test/dummy/tmp/cache/sass/0149e15b7f61f5a238cd1c4ab956828760d53144/_typography.scssc +0 -0
- data/test/dummy/tmp/cache/sass/0149e15b7f61f5a238cd1c4ab956828760d53144/_utilities.scssc +0 -0
- data/test/dummy/tmp/cache/sass/0149e15b7f61f5a238cd1c4ab956828760d53144/_variables.css.scssc +0 -0
- data/test/dummy/tmp/cache/sass/025ab9f29cb4b11e07ac4b96733b80e57356376f/_dashboard.scssc +0 -0
- data/test/dummy/tmp/cache/sass/025ab9f29cb4b11e07ac4b96733b80e57356376f/_logged_out.scssc +0 -0
- data/test/dummy/tmp/cache/sass/0a3ebe071aa41297ff474bfea40b9ed55813ab31/_all.css.scssc +0 -0
- data/test/dummy/tmp/cache/sass/0a3ebe071aa41297ff474bfea40b9ed55813ab31/_buttons.css.scssc +0 -0
- data/test/dummy/tmp/cache/sass/0a3ebe071aa41297ff474bfea40b9ed55813ab31/_gradients.css.scssc +0 -0
- data/test/dummy/tmp/cache/sass/0a3ebe071aa41297ff474bfea40b9ed55813ab31/_icons.css.scssc +0 -0
- data/test/dummy/tmp/cache/sass/0a3ebe071aa41297ff474bfea40b9ed55813ab31/_reset.css.scssc +0 -0
- data/test/dummy/tmp/cache/sass/0a3ebe071aa41297ff474bfea40b9ed55813ab31/_rounded.css.scssc +0 -0
- data/test/dummy/tmp/cache/sass/0a3ebe071aa41297ff474bfea40b9ed55813ab31/_sections.css.scssc +0 -0
- data/test/dummy/tmp/cache/sass/0a3ebe071aa41297ff474bfea40b9ed55813ab31/_shadows.css.scssc +0 -0
- data/test/dummy/tmp/cache/sass/0a3ebe071aa41297ff474bfea40b9ed55813ab31/_typography.scssc +0 -0
- data/test/dummy/tmp/cache/sass/0a3ebe071aa41297ff474bfea40b9ed55813ab31/_utilities.scssc +0 -0
- data/test/dummy/tmp/cache/sass/0a3ebe071aa41297ff474bfea40b9ed55813ab31/_variables.css.scssc +0 -0
- data/test/dummy/tmp/cache/sass/0db19bf6a4f34e09dc67d80432c747832dda1113/_batch_actions.css.scssc +0 -0
- data/test/dummy/tmp/cache/sass/0db19bf6a4f34e09dc67d80432c747832dda1113/_blank_slates.scssc +0 -0
- data/test/dummy/tmp/cache/sass/0db19bf6a4f34e09dc67d80432c747832dda1113/_breadcrumbs.scssc +0 -0
- data/test/dummy/tmp/cache/sass/0db19bf6a4f34e09dc67d80432c747832dda1113/_buttons.scssc +0 -0
- data/test/dummy/tmp/cache/sass/0db19bf6a4f34e09dc67d80432c747832dda1113/_columns.scssc +0 -0
- data/test/dummy/tmp/cache/sass/0db19bf6a4f34e09dc67d80432c747832dda1113/_comments.css.scssc +0 -0
- data/test/dummy/tmp/cache/sass/0db19bf6a4f34e09dc67d80432c747832dda1113/_date_picker.css.scssc +0 -0
- data/test/dummy/tmp/cache/sass/0db19bf6a4f34e09dc67d80432c747832dda1113/_flash_messages.css.scssc +0 -0
- data/test/dummy/tmp/cache/sass/0db19bf6a4f34e09dc67d80432c747832dda1113/_grid.scssc +0 -0
- data/test/dummy/tmp/cache/sass/0db19bf6a4f34e09dc67d80432c747832dda1113/_links.scssc +0 -0
- data/test/dummy/tmp/cache/sass/0db19bf6a4f34e09dc67d80432c747832dda1113/_pagination.scssc +0 -0
- data/test/dummy/tmp/cache/sass/0db19bf6a4f34e09dc67d80432c747832dda1113/_panels.scssc +0 -0
- data/test/dummy/tmp/cache/sass/0db19bf6a4f34e09dc67d80432c747832dda1113/_popovers.css.scssc +0 -0
- data/test/dummy/tmp/cache/sass/0db19bf6a4f34e09dc67d80432c747832dda1113/_scopes.scssc +0 -0
- data/test/dummy/tmp/cache/sass/0db19bf6a4f34e09dc67d80432c747832dda1113/_status_tags.scssc +0 -0
- data/test/dummy/tmp/cache/sass/0db19bf6a4f34e09dc67d80432c747832dda1113/_table_tools.css.scssc +0 -0
- data/test/dummy/tmp/cache/sass/0db19bf6a4f34e09dc67d80432c747832dda1113/_tables.css.scssc +0 -0
- data/test/dummy/tmp/cache/sass/0f4e444537b0131df87c384df649d22afd80ac5a/_dashboard.scssc +0 -0
- data/test/dummy/tmp/cache/sass/0f4e444537b0131df87c384df649d22afd80ac5a/_logged_out.scssc +0 -0
- data/test/dummy/tmp/cache/sass/1c415517c309043503f3cb2f5eca65b0c9760f76/active_admin.css.scssc +0 -0
- data/test/dummy/tmp/cache/sass/34122bbb9d39040bce83b198dfa3e2499be58cd0/_bourbon.scssc +0 -0
- data/test/dummy/tmp/cache/sass/34df7e5f74ec615651dab1b9694e84563b724cb5/_base.css.scssc +0 -0
- data/test/dummy/tmp/cache/sass/34df7e5f74ec615651dab1b9694e84563b724cb5/_forms.css.scssc +0 -0
- data/test/dummy/tmp/cache/sass/34df7e5f74ec615651dab1b9694e84563b724cb5/_header.css.scssc +0 -0
- data/test/dummy/tmp/cache/sass/34df7e5f74ec615651dab1b9694e84563b724cb5/_mixins.css.scssc +0 -0
- data/test/dummy/tmp/cache/sass/34df7e5f74ec615651dab1b9694e84563b724cb5/_typography.css.scssc +0 -0
- data/test/dummy/tmp/cache/sass/4330ed9682443ec12b5cc9718d9ca0f970e72645/_base.css.scssc +0 -0
- data/test/dummy/tmp/cache/sass/4330ed9682443ec12b5cc9718d9ca0f970e72645/_forms.css.scssc +0 -0
- data/test/dummy/tmp/cache/sass/4330ed9682443ec12b5cc9718d9ca0f970e72645/_header.css.scssc +0 -0
- data/test/dummy/tmp/cache/sass/4330ed9682443ec12b5cc9718d9ca0f970e72645/_mixins.css.scssc +0 -0
- data/test/dummy/tmp/cache/sass/4330ed9682443ec12b5cc9718d9ca0f970e72645/_typography.css.scssc +0 -0
- data/test/dummy/tmp/cache/sass/4330ed9682443ec12b5cc9718d9ca0f970e72645/print.css.scssc +0 -0
- data/test/dummy/tmp/cache/sass/521b993c9acd187272527f2007471941399e49e7/_button.scssc +0 -0
- data/test/dummy/tmp/cache/sass/521b993c9acd187272527f2007471941399e49e7/_clearfix.scssc +0 -0
- data/test/dummy/tmp/cache/sass/521b993c9acd187272527f2007471941399e49e7/_font-face.scssc +0 -0
- data/test/dummy/tmp/cache/sass/521b993c9acd187272527f2007471941399e49e7/_font-family.scssc +0 -0
- data/test/dummy/tmp/cache/sass/521b993c9acd187272527f2007471941399e49e7/_hide-text.scssc +0 -0
- data/test/dummy/tmp/cache/sass/521b993c9acd187272527f2007471941399e49e7/_html5-input-types.scssc +0 -0
- data/test/dummy/tmp/cache/sass/521b993c9acd187272527f2007471941399e49e7/_position.scssc +0 -0
- data/test/dummy/tmp/cache/sass/521b993c9acd187272527f2007471941399e49e7/_timing-functions.scssc +0 -0
- data/test/dummy/tmp/cache/sass/5a8f06dfcf99c0436939674b51a4e9800b2066e8/_footer.scssc +0 -0
- data/test/dummy/tmp/cache/sass/5a8f06dfcf99c0436939674b51a4e9800b2066e8/_main_structure.scssc +0 -0
- data/test/dummy/tmp/cache/sass/5a8f06dfcf99c0436939674b51a4e9800b2066e8/_title_bar.scssc +0 -0
- data/test/dummy/tmp/cache/sass/686dc179041c7d3a972dc3ec33726e7ae1e4ab05/_animation.scssc +0 -0
- data/test/dummy/tmp/cache/sass/686dc179041c7d3a972dc3ec33726e7ae1e4ab05/_appearance.scssc +0 -0
- data/test/dummy/tmp/cache/sass/686dc179041c7d3a972dc3ec33726e7ae1e4ab05/_background-image.scssc +0 -0
- data/test/dummy/tmp/cache/sass/686dc179041c7d3a972dc3ec33726e7ae1e4ab05/_background-size.scssc +0 -0
- data/test/dummy/tmp/cache/sass/686dc179041c7d3a972dc3ec33726e7ae1e4ab05/_border-image.scssc +0 -0
- data/test/dummy/tmp/cache/sass/686dc179041c7d3a972dc3ec33726e7ae1e4ab05/_border-radius.scssc +0 -0
- data/test/dummy/tmp/cache/sass/686dc179041c7d3a972dc3ec33726e7ae1e4ab05/_box-shadow.scssc +0 -0
- data/test/dummy/tmp/cache/sass/686dc179041c7d3a972dc3ec33726e7ae1e4ab05/_box-sizing.scssc +0 -0
- data/test/dummy/tmp/cache/sass/686dc179041c7d3a972dc3ec33726e7ae1e4ab05/_columns.scssc +0 -0
- data/test/dummy/tmp/cache/sass/686dc179041c7d3a972dc3ec33726e7ae1e4ab05/_flex-box.scssc +0 -0
- data/test/dummy/tmp/cache/sass/686dc179041c7d3a972dc3ec33726e7ae1e4ab05/_inline-block.scssc +0 -0
- data/test/dummy/tmp/cache/sass/686dc179041c7d3a972dc3ec33726e7ae1e4ab05/_linear-gradient.scssc +0 -0
- data/test/dummy/tmp/cache/sass/686dc179041c7d3a972dc3ec33726e7ae1e4ab05/_prefixer.scssc +0 -0
- data/test/dummy/tmp/cache/sass/686dc179041c7d3a972dc3ec33726e7ae1e4ab05/_radial-gradient.scssc +0 -0
- data/test/dummy/tmp/cache/sass/686dc179041c7d3a972dc3ec33726e7ae1e4ab05/_transform.scssc +0 -0
- data/test/dummy/tmp/cache/sass/686dc179041c7d3a972dc3ec33726e7ae1e4ab05/_transition.scssc +0 -0
- data/test/dummy/tmp/cache/sass/686dc179041c7d3a972dc3ec33726e7ae1e4ab05/_user-select.scssc +0 -0
- data/test/dummy/tmp/cache/sass/799f94dffbb29370035dd8035c06b45b72790fc5/_blank_slates.scssc +0 -0
- data/test/dummy/tmp/cache/sass/799f94dffbb29370035dd8035c06b45b72790fc5/_breadcrumbs.scssc +0 -0
- data/test/dummy/tmp/cache/sass/799f94dffbb29370035dd8035c06b45b72790fc5/_buttons.scssc +0 -0
- data/test/dummy/tmp/cache/sass/799f94dffbb29370035dd8035c06b45b72790fc5/_columns.scssc +0 -0
- data/test/dummy/tmp/cache/sass/799f94dffbb29370035dd8035c06b45b72790fc5/_comments.css.scssc +0 -0
- data/test/dummy/tmp/cache/sass/799f94dffbb29370035dd8035c06b45b72790fc5/_date_picker.css.scssc +0 -0
- data/test/dummy/tmp/cache/sass/799f94dffbb29370035dd8035c06b45b72790fc5/_flash_messages.css.scssc +0 -0
- data/test/dummy/tmp/cache/sass/799f94dffbb29370035dd8035c06b45b72790fc5/_grid.scssc +0 -0
- data/test/dummy/tmp/cache/sass/799f94dffbb29370035dd8035c06b45b72790fc5/_links.scssc +0 -0
- data/test/dummy/tmp/cache/sass/799f94dffbb29370035dd8035c06b45b72790fc5/_pagination.scssc +0 -0
- data/test/dummy/tmp/cache/sass/799f94dffbb29370035dd8035c06b45b72790fc5/_panels.scssc +0 -0
- data/test/dummy/tmp/cache/sass/799f94dffbb29370035dd8035c06b45b72790fc5/_scopes.scssc +0 -0
- data/test/dummy/tmp/cache/sass/799f94dffbb29370035dd8035c06b45b72790fc5/_status_tags.scssc +0 -0
- data/test/dummy/tmp/cache/sass/799f94dffbb29370035dd8035c06b45b72790fc5/_table_tools.css.scssc +0 -0
- data/test/dummy/tmp/cache/sass/799f94dffbb29370035dd8035c06b45b72790fc5/_tables.css.scssc +0 -0
- data/test/dummy/tmp/cache/sass/972efe55173f6628b13c5cb56b5b0f9b84985155/_deprecated-webkit-gradient.scssc +0 -0
- data/test/dummy/tmp/cache/sass/972efe55173f6628b13c5cb56b5b0f9b84985155/_flex-grid.scssc +0 -0
- data/test/dummy/tmp/cache/sass/972efe55173f6628b13c5cb56b5b0f9b84985155/_grid-width.scssc +0 -0
- data/test/dummy/tmp/cache/sass/972efe55173f6628b13c5cb56b5b0f9b84985155/_linear-gradient.scssc +0 -0
- data/test/dummy/tmp/cache/sass/972efe55173f6628b13c5cb56b5b0f9b84985155/_modular-scale.scssc +0 -0
- data/test/dummy/tmp/cache/sass/972efe55173f6628b13c5cb56b5b0f9b84985155/_radial-gradient.scssc +0 -0
- data/test/dummy/tmp/cache/sass/972efe55173f6628b13c5cb56b5b0f9b84985155/_render-gradients.scssc +0 -0
- data/test/dummy/tmp/cache/sass/972efe55173f6628b13c5cb56b5b0f9b84985155/_tint-shade.scssc +0 -0
- data/test/dummy/tmp/cache/sass/a6e19f0ba7c994b5cd1f8fcd2ef7cb5a62017be7/_bourbon.scssc +0 -0
- data/test/dummy/tmp/cache/sass/a86a1245039dd9da2b0a1422db19889ca592daee/_footer.scssc +0 -0
- data/test/dummy/tmp/cache/sass/a86a1245039dd9da2b0a1422db19889ca592daee/_main_structure.scssc +0 -0
- data/test/dummy/tmp/cache/sass/a86a1245039dd9da2b0a1422db19889ca592daee/_title_bar.scssc +0 -0
- data/test/dummy/tmp/cache/sass/c572ddc25b7a57596b711c26460dab735895a907/_animation.scssc +0 -0
- data/test/dummy/tmp/cache/sass/c572ddc25b7a57596b711c26460dab735895a907/_appearance.scssc +0 -0
- data/test/dummy/tmp/cache/sass/c572ddc25b7a57596b711c26460dab735895a907/_background-image.scssc +0 -0
- data/test/dummy/tmp/cache/sass/c572ddc25b7a57596b711c26460dab735895a907/_background-size.scssc +0 -0
- data/test/dummy/tmp/cache/sass/c572ddc25b7a57596b711c26460dab735895a907/_border-image.scssc +0 -0
- data/test/dummy/tmp/cache/sass/c572ddc25b7a57596b711c26460dab735895a907/_border-radius.scssc +0 -0
- data/test/dummy/tmp/cache/sass/c572ddc25b7a57596b711c26460dab735895a907/_box-shadow.scssc +0 -0
- data/test/dummy/tmp/cache/sass/c572ddc25b7a57596b711c26460dab735895a907/_box-sizing.scssc +0 -0
- data/test/dummy/tmp/cache/sass/c572ddc25b7a57596b711c26460dab735895a907/_columns.scssc +0 -0
- data/test/dummy/tmp/cache/sass/c572ddc25b7a57596b711c26460dab735895a907/_flex-box.scssc +0 -0
- data/test/dummy/tmp/cache/sass/c572ddc25b7a57596b711c26460dab735895a907/_inline-block.scssc +0 -0
- data/test/dummy/tmp/cache/sass/c572ddc25b7a57596b711c26460dab735895a907/_linear-gradient.scssc +0 -0
- data/test/dummy/tmp/cache/sass/c572ddc25b7a57596b711c26460dab735895a907/_radial-gradient.scssc +0 -0
- data/test/dummy/tmp/cache/sass/c572ddc25b7a57596b711c26460dab735895a907/_transform.scssc +0 -0
- data/test/dummy/tmp/cache/sass/c572ddc25b7a57596b711c26460dab735895a907/_transition.scssc +0 -0
- data/test/dummy/tmp/cache/sass/c572ddc25b7a57596b711c26460dab735895a907/_user-select.scssc +0 -0
- data/test/dummy/tmp/cache/sass/eab4ec523f2b3fe0ce62881e5ddde80ea26c42ed/_deprecated-webkit-gradient.scssc +0 -0
- data/test/dummy/tmp/cache/sass/eab4ec523f2b3fe0ce62881e5ddde80ea26c42ed/_flex-grid.scssc +0 -0
- data/test/dummy/tmp/cache/sass/eab4ec523f2b3fe0ce62881e5ddde80ea26c42ed/_grid-width.scssc +0 -0
- data/test/dummy/tmp/cache/sass/eab4ec523f2b3fe0ce62881e5ddde80ea26c42ed/_linear-gradient.scssc +0 -0
- data/test/dummy/tmp/cache/sass/eab4ec523f2b3fe0ce62881e5ddde80ea26c42ed/_modular-scale.scssc +0 -0
- data/test/dummy/tmp/cache/sass/eab4ec523f2b3fe0ce62881e5ddde80ea26c42ed/_radial-gradient.scssc +0 -0
- data/test/dummy/tmp/cache/sass/eab4ec523f2b3fe0ce62881e5ddde80ea26c42ed/_render-gradients.scssc +0 -0
- data/test/dummy/tmp/cache/sass/eab4ec523f2b3fe0ce62881e5ddde80ea26c42ed/_tint-shade.scssc +0 -0
- data/test/dummy/tmp/cache/sass/eab4ec523f2b3fe0ce62881e5ddde80ea26c42ed/_transition-property-name.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ecba858b902d0403d7e616a9f9672a7729dd00f2/_button.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ecba858b902d0403d7e616a9f9672a7729dd00f2/_clearfix.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ecba858b902d0403d7e616a9f9672a7729dd00f2/_font-family.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ecba858b902d0403d7e616a9f9672a7729dd00f2/_html5-input-types.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ecba858b902d0403d7e616a9f9672a7729dd00f2/_position.scssc +0 -0
- data/test/dummy/tmp/cache/sass/ecba858b902d0403d7e616a9f9672a7729dd00f2/_timing-functions.scssc +0 -0
- data/test/dummy/tmp/pids/server.pid +1 -0
- data/test/ecm_cms_core_test.rb +7 -0
- data/test/test_helper.rb +15 -0
- metadata +669 -0
data/lib/ecm_cms_core.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
|
3
|
+
require 'awesome_nested_set'
|
4
|
+
require 'i18n_routing'
|
5
|
+
require 'texterb'
|
6
|
+
|
7
|
+
# Ecm::Admin should do this!
|
8
|
+
require 'activeadmin'
|
9
|
+
require 'sass-rails'
|
10
|
+
require 'meta_search'
|
11
|
+
|
12
|
+
require 'ecm/cms_core/engine'
|
13
|
+
require 'ecm/cms_core/version'
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Ecm
|
2
|
+
module CmsCore
|
3
|
+
module Generators
|
4
|
+
class ActiveAdminGenerator < Rails::Generators::Base
|
5
|
+
desc "Generates the active admin files"
|
6
|
+
|
7
|
+
source_root File.expand_path('../templates', __FILE__)
|
8
|
+
|
9
|
+
def generate_models
|
10
|
+
copy_file "folders.rb", "app/admin/ecm/cms_core/folders.rb"
|
11
|
+
copy_file "templates.rb", "app/admin/ecm/cms_core/templates.rb"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
include CollectiveIdea::Acts::NestedSet::Helper
|
2
|
+
|
3
|
+
ActiveAdmin.register Ecm::CmsCore::Folder do
|
4
|
+
scope :all
|
5
|
+
scope :root_folders
|
6
|
+
|
7
|
+
menu :label => Ecm::CmsCore::Folder.model_name.human(:count => 10)
|
8
|
+
|
9
|
+
form do |f|
|
10
|
+
f.inputs do
|
11
|
+
f.input :parent, :as => :select, :collection => nested_set_options(Ecm::CmsCore::Folder, f.object) { |i| "#{'    ' * i.level} |--#{i.basename}".html_safe }
|
12
|
+
f.input :basename
|
13
|
+
end
|
14
|
+
f.buttons
|
15
|
+
end
|
16
|
+
|
17
|
+
index :title => Ecm::CmsCore::Folder.model_name.human(:count => 10) do
|
18
|
+
column :tree_label, :sortable => false
|
19
|
+
column :templates_count
|
20
|
+
column :created_at
|
21
|
+
column :updated_at
|
22
|
+
|
23
|
+
default_actions
|
24
|
+
end
|
25
|
+
|
26
|
+
show :title => :to_s do |folder|
|
27
|
+
attributes_table do
|
28
|
+
row :parent
|
29
|
+
row :basename
|
30
|
+
end
|
31
|
+
|
32
|
+
panel Ecm::CmsCore::Template.model_name.human(:count => 10) do
|
33
|
+
table_for folder.templates do
|
34
|
+
column Ecm::CmsCore::Template.human_attribute_name(:filename), :filename
|
35
|
+
column Ecm::CmsCore::Template.human_attribute_name(:partial), :formatted_partial_flag
|
36
|
+
column Ecm::CmsCore::Template.human_attribute_name(:created_at), :created_at
|
37
|
+
column Ecm::CmsCore::Template.human_attribute_name(:updated_at), :updated_at
|
38
|
+
column do |template|
|
39
|
+
link_to I18n.t('active_admin.view'), admin_template_path(template), :class => "member_link view_link"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
ActiveAdmin.register Ecm::CmsCore::Template do
|
2
|
+
menu :label => Ecm::CmsCore::Template.model_name.human(:count => 10)
|
3
|
+
|
4
|
+
scope :all
|
5
|
+
scope :templates
|
6
|
+
scope :partials
|
7
|
+
|
8
|
+
|
9
|
+
form do |f|
|
10
|
+
f.inputs do
|
11
|
+
f.input :folder, :as => :select, :collection => nested_set_options(Ecm::CmsCore::Folder) { |i| "#{'    ' * i.level} |--#{i.basename}".html_safe }
|
12
|
+
f.input :basename
|
13
|
+
f.input :title
|
14
|
+
f.input :meta_description
|
15
|
+
f.input :body
|
16
|
+
f.input :layout
|
17
|
+
f.input :locale, :as => :select, :collection => I18n.available_locales.map(&:to_s)
|
18
|
+
f.input :format, :as => :select, :collection => Mime::SET.symbols.map(&:to_s)
|
19
|
+
f.input :handler, :as => :select, :collection => ActionView::Template::Handlers.extensions.map(&:to_s)
|
20
|
+
f.input :partial
|
21
|
+
end
|
22
|
+
f.buttons
|
23
|
+
end
|
24
|
+
|
25
|
+
index :title => Ecm::CmsCore::Template.model_name.human(:count => 10) do
|
26
|
+
column :folder, :sortable => :pathname
|
27
|
+
column :filename, :sortable => :basename
|
28
|
+
column :formatted_partial_flag, :sortable => :partial
|
29
|
+
column :created_at
|
30
|
+
column :updated_at
|
31
|
+
|
32
|
+
default_actions
|
33
|
+
end
|
34
|
+
|
35
|
+
show :title => :to_s do
|
36
|
+
attributes_table do
|
37
|
+
row :folder
|
38
|
+
row :filename
|
39
|
+
row :title
|
40
|
+
row :meta_description
|
41
|
+
row :formatted_partial_flag
|
42
|
+
row :created_at
|
43
|
+
row :updated_at
|
44
|
+
end
|
45
|
+
|
46
|
+
panel Ecm::CmsCore::Template.human_attribute_name(:body) do
|
47
|
+
div do
|
48
|
+
t(ecm_cms_core_template.body).html_safe
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Ecm
|
2
|
+
module CmsCore
|
3
|
+
module Generators
|
4
|
+
class ControllerGenerator < Rails::Generators::Base
|
5
|
+
desc "Generates the pages controller"
|
6
|
+
|
7
|
+
source_root File.expand_path('../templates', __FILE__)
|
8
|
+
|
9
|
+
def generate_controller
|
10
|
+
copy_file "page_controller.rb", "app/controllers/page_controller.rb"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Ecm
|
2
|
+
module CmsCore
|
3
|
+
module Generators
|
4
|
+
class InstallGenerator < ::Rails::Generators::Base
|
5
|
+
desc "Installs the ECM CMS Core module"
|
6
|
+
# class_option :skip_migration, :default => false
|
7
|
+
class_option :skip_migration, :type => :boolean, :default => false
|
8
|
+
|
9
|
+
def generate_migrations
|
10
|
+
unless options[:skip_migration]
|
11
|
+
generate 'ecm:cms_core:migrations'
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
# def generate_models
|
16
|
+
# generate 'ecm:cms_core:models'
|
17
|
+
# end
|
18
|
+
|
19
|
+
def generate_controller
|
20
|
+
generate 'ecm:cms_core:controller'
|
21
|
+
end
|
22
|
+
|
23
|
+
def generate_locales
|
24
|
+
generate 'ecm:cms_core:locales'
|
25
|
+
end
|
26
|
+
|
27
|
+
def generate_active_admin
|
28
|
+
generate 'ecm:cms_core:active_admin'
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Ecm
|
2
|
+
module CmsCore
|
3
|
+
module Generators
|
4
|
+
class LocalesGenerator < ::Rails::Generators::Base
|
5
|
+
source_root File.expand_path('../templates', __FILE__)
|
6
|
+
desc "Installs the needed locales"
|
7
|
+
|
8
|
+
|
9
|
+
def generate_locales
|
10
|
+
copy_file "ecm.cms-core.en.yml", "config/locales/ecm.cms-core.en.yml"
|
11
|
+
copy_file "ecm.cms-core.de.yml", "config/locales/ecm.cms-core.de.yml"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
@@ -0,0 +1,48 @@
|
|
1
|
+
de:
|
2
|
+
:false: "nein"
|
3
|
+
:true: "ja"
|
4
|
+
active_admin:
|
5
|
+
scopes:
|
6
|
+
all: "Alle"
|
7
|
+
templates: "Seiten"
|
8
|
+
root_folders: "Wurzelordner"
|
9
|
+
partials: "Fragmente"
|
10
|
+
activerecord:
|
11
|
+
attributes:
|
12
|
+
ecm/cms_core/folder:
|
13
|
+
basename: "Name"
|
14
|
+
parent: "Übergeordneter Ordner"
|
15
|
+
pathname: "Pfad"
|
16
|
+
templates_count: "Seiten"
|
17
|
+
tree_label: "Pfad"
|
18
|
+
ecm/cms_core/template:
|
19
|
+
basename: "Name"
|
20
|
+
body: "Inhalt"
|
21
|
+
layout: "Layout"
|
22
|
+
locale: "Sprache"
|
23
|
+
filename: "Dateiname"
|
24
|
+
folder: "Ordner"
|
25
|
+
formatted_partial_flag: "Fragment"
|
26
|
+
format: "Format"
|
27
|
+
handler: "Handler"
|
28
|
+
meta_description: "Meta Description"
|
29
|
+
partial: "Fragment"
|
30
|
+
pathname: "Pfad"
|
31
|
+
title: "Titel"
|
32
|
+
models:
|
33
|
+
ecm/cms_core/folder:
|
34
|
+
one: "Ordner"
|
35
|
+
other: "Ordner"
|
36
|
+
ecm/cms_core/template:
|
37
|
+
one: "Seite"
|
38
|
+
other: "Seiten"
|
39
|
+
attributes:
|
40
|
+
created_at: "Erstellt"
|
41
|
+
updated_at: "Aktualisiert"
|
42
|
+
formtastic:
|
43
|
+
:yes: 'Ja'
|
44
|
+
:no: 'Nein'
|
45
|
+
:create: '%{model} erstellen'
|
46
|
+
:update: '%{model} aktualisieren'
|
47
|
+
:submit: '%{model} speichern'
|
48
|
+
:required: 'benötigt'
|
@@ -0,0 +1,48 @@
|
|
1
|
+
en:
|
2
|
+
:false: "nein"
|
3
|
+
:true: "ja"
|
4
|
+
active_admin:
|
5
|
+
scopes:
|
6
|
+
all: "All"
|
7
|
+
templates: "Templates"
|
8
|
+
root_folders: "Root folders"
|
9
|
+
partials: "Partials"
|
10
|
+
activerecord:
|
11
|
+
attributes:
|
12
|
+
ecm/cms_core/folder:
|
13
|
+
basename: "Name"
|
14
|
+
parent: "Parent Folder"
|
15
|
+
pathname: "Path"
|
16
|
+
templates_count: "Pages"
|
17
|
+
tree_label: "Path"
|
18
|
+
ecm/cms_core/template:
|
19
|
+
basename: "Name"
|
20
|
+
body: "Content"
|
21
|
+
layout: "Layout"
|
22
|
+
locale: "Language"
|
23
|
+
filename: "Filename"
|
24
|
+
folder: "Folder"
|
25
|
+
formatted_partial_flag: "Partial"
|
26
|
+
format: "Format"
|
27
|
+
handler: "Handler"
|
28
|
+
meta_description: "Meta Description"
|
29
|
+
partial: "Partial"
|
30
|
+
pathname: "Path"
|
31
|
+
title: "Title"
|
32
|
+
models:
|
33
|
+
ecm/cms_core/folder:
|
34
|
+
one: "Folder"
|
35
|
+
other: "Folders"
|
36
|
+
ecm/cms_core/template:
|
37
|
+
one: "Page"
|
38
|
+
other: "Pages"
|
39
|
+
attributes:
|
40
|
+
created_at: "Created"
|
41
|
+
updated_at: "Updated"
|
42
|
+
formtastic:
|
43
|
+
:yes: 'Yes'
|
44
|
+
:no: 'No'
|
45
|
+
:create: 'create %{model}'
|
46
|
+
:update: 'update %{model}'
|
47
|
+
:submit: 'submit %{model}'
|
48
|
+
:required: 'required'
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'rails/generators/migration'
|
2
|
+
|
3
|
+
module Ecm
|
4
|
+
module CmsCore
|
5
|
+
module Generators
|
6
|
+
class MigrationsGenerator < ::Rails::Generators::Base
|
7
|
+
include Rails::Generators::Migration
|
8
|
+
source_root File.expand_path('../templates', __FILE__)
|
9
|
+
desc "Installs the needed migrations"
|
10
|
+
|
11
|
+
def self.next_migration_number(path)
|
12
|
+
unless @prev_migration_nr
|
13
|
+
@prev_migration_nr = Time.now.utc.strftime("%Y%m%d%H%M%S").to_i
|
14
|
+
else
|
15
|
+
@prev_migration_nr += 1
|
16
|
+
end
|
17
|
+
@prev_migration_nr.to_s
|
18
|
+
end
|
19
|
+
|
20
|
+
def copy_migrations
|
21
|
+
migration_template "create_ecm_cms_core_folders.rb", "db/migrate/create_ecm_cms_core_folders.rb"
|
22
|
+
migration_template "create_ecm_cms_core_templates.rb", "db/migrate/create_ecm_cms_core_templates.rb"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class CreateEcmCmsCoreFolders < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table :ecm_cms_core_folders do |t|
|
4
|
+
t.references :parent
|
5
|
+
t.string :basename
|
6
|
+
t.string :pathname
|
7
|
+
t.integer :lft
|
8
|
+
t.integer :rgt
|
9
|
+
t.integer :depth
|
10
|
+
t.integer :children_count, :default => 0
|
11
|
+
t.integer :templates_count, :default => 0
|
12
|
+
|
13
|
+
t.timestamps
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.down
|
18
|
+
drop_table :ecm_cms_core_folders
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
class CreateEcmCmsCoreTemplates < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table :ecm_cms_core_templates do |t|
|
4
|
+
t.references :folder
|
5
|
+
t.string :pathname
|
6
|
+
t.string :basename
|
7
|
+
t.string :title
|
8
|
+
t.text :meta_description
|
9
|
+
t.text :body
|
10
|
+
t.string :layout
|
11
|
+
t.string :locale
|
12
|
+
t.string :format
|
13
|
+
t.string :handler
|
14
|
+
t.boolean :partial, :default => false
|
15
|
+
|
16
|
+
t.timestamps
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.down
|
21
|
+
drop_table :ecm_cms_core_templates
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Ecm
|
2
|
+
module CmsCore
|
3
|
+
module Generators
|
4
|
+
class ModelsGenerator < Rails::Generators::Base
|
5
|
+
desc "Generates the models"
|
6
|
+
|
7
|
+
source_root File.expand_path('../templates', __FILE__)
|
8
|
+
|
9
|
+
def generate_models
|
10
|
+
copy_file "folder.rb", "app/models/folder.rb"
|
11
|
+
copy_file "template.rb", "app/models/template.rb"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
class Folder < ActiveRecord::Base
|
2
|
+
has_many :templates, :dependent => :destroy
|
3
|
+
|
4
|
+
validates :basename, :presence => true, :uniqueness => { :scope => :parent_id }
|
5
|
+
|
6
|
+
acts_as_nested_set :depth_column => 'depth', :counter_cache => :children_count
|
7
|
+
attr_protected :lft, :rgt
|
8
|
+
|
9
|
+
before_validation :update_path
|
10
|
+
after_save :update_children, :if => Proc.new { |folder| folder.pathname_changed? or folder.basename_changed? }
|
11
|
+
after_save :update_templates, :if => Proc.new { |folder| folder.pathname_changed? or folder.basename_changed? }
|
12
|
+
|
13
|
+
default_scope order(:lft)
|
14
|
+
|
15
|
+
def to_s
|
16
|
+
self.fullname
|
17
|
+
# self.tree_label
|
18
|
+
end
|
19
|
+
|
20
|
+
def tree_label
|
21
|
+
"#{'    ' * self.level} |--#{self.basename}".html_safe
|
22
|
+
end
|
23
|
+
|
24
|
+
def fullname
|
25
|
+
if self.basename == "/"
|
26
|
+
"/"
|
27
|
+
else
|
28
|
+
"#{self.pathname}#{self.basename}/"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def update_path
|
33
|
+
if self.parent
|
34
|
+
self.pathname = self.parent.fullname
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def update_path!
|
39
|
+
self.update_path
|
40
|
+
self.save
|
41
|
+
end
|
42
|
+
|
43
|
+
def update_children
|
44
|
+
self.children.each do |folder|
|
45
|
+
folder.update_path!
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def update_templates
|
50
|
+
self.templates.each do |template|
|
51
|
+
template.update_pathname!
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def self.root_folders
|
56
|
+
self.roots
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,127 @@
|
|
1
|
+
class Template < ActiveRecord::Base
|
2
|
+
belongs_to :folder, :counter_cache => true
|
3
|
+
|
4
|
+
validates :pathname, :presence => true
|
5
|
+
validates :basename, :presence => true, :uniqueness => { :scope => :folder_id }
|
6
|
+
validates :format, :inclusion => Mime::SET.symbols.map(&:to_s), :allow_nil => true, :allow_blank => true
|
7
|
+
validates :locale, :inclusion => I18n.available_locales.map(&:to_s)
|
8
|
+
validates :handler, :inclusion => ActionView::Template::Handlers.extensions.map(&:to_s)
|
9
|
+
|
10
|
+
before_validation :update_pathname
|
11
|
+
|
12
|
+
def update_pathname
|
13
|
+
self.pathname = self.folder.fullname
|
14
|
+
end
|
15
|
+
|
16
|
+
def update_pathname!
|
17
|
+
self.update_pathname
|
18
|
+
self.save
|
19
|
+
end
|
20
|
+
|
21
|
+
after_save do
|
22
|
+
Resolver.instance.clear_cache
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.partials
|
26
|
+
where("partial = ?", true)
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.templates
|
30
|
+
where("partial = ?", false)
|
31
|
+
end
|
32
|
+
|
33
|
+
def filename
|
34
|
+
if format.blank?
|
35
|
+
"#{basename}.#{locale}.#{handler}"
|
36
|
+
else
|
37
|
+
"#{basename}.#{locale}.#{format}.#{handler}"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def formatted_partial_flag
|
42
|
+
I18n.t(self.partial.to_s)
|
43
|
+
end
|
44
|
+
|
45
|
+
def to_s
|
46
|
+
"#{self.pathname}#{self.basename}"
|
47
|
+
end
|
48
|
+
|
49
|
+
class Resolver < ActionView::Resolver
|
50
|
+
require "singleton"
|
51
|
+
include Singleton
|
52
|
+
|
53
|
+
def find_templates(name, prefix, partial, details)
|
54
|
+
if prefix.length > 0
|
55
|
+
pathname = "#{normalize_array(details[:locale]).first}/#{prefix}/"
|
56
|
+
else
|
57
|
+
pathname = "#{normalize_array(details[:locale]).first}/"
|
58
|
+
end
|
59
|
+
conditions = {
|
60
|
+
# :pathname => normalize_path(name, prefix),
|
61
|
+
:pathname => pathname,
|
62
|
+
:basename => name,
|
63
|
+
:locale => normalize_array(details[:locale]).first,
|
64
|
+
:format => normalize_array(details[:formats]).first,
|
65
|
+
:handler => normalize_array(details[:handlers]),
|
66
|
+
:partial => partial || false
|
67
|
+
}
|
68
|
+
|
69
|
+
format = conditions.delete(:format)
|
70
|
+
query = ::Template.where(conditions)
|
71
|
+
|
72
|
+
# 2) Check for templates with the given format or format is nil
|
73
|
+
query = query.where(["format = ? OR format = ''", format])
|
74
|
+
|
75
|
+
# 3) Ensure templates with format come first
|
76
|
+
query = query.order("format DESC")
|
77
|
+
|
78
|
+
# 4) Now trigger the query passing on conditions to initialization
|
79
|
+
query.map do |record|
|
80
|
+
initialize_template(record, details)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
# Normalize name and prefix, so the tuple ["index", "users"] becomes
|
85
|
+
# "users/index" and the tuple ["template", nil] becomes "template".
|
86
|
+
def normalize_path(name, prefix)
|
87
|
+
prefix.present? ? "#{prefix}/#{name}" : name
|
88
|
+
end
|
89
|
+
|
90
|
+
# Normalize arrays by converting all symbols to strings.
|
91
|
+
def normalize_array(array)
|
92
|
+
array.map(&:to_s)
|
93
|
+
end
|
94
|
+
|
95
|
+
# Initialize an ActionView::Template object based on the record found.
|
96
|
+
def initialize_template(record, details)
|
97
|
+
source = record.body
|
98
|
+
identifier = "Template - #{record.id} - #{record.pathname.inspect}"
|
99
|
+
handler = ActionView::Template.registered_template_handler(record.handler)
|
100
|
+
|
101
|
+
# 5) Check for the record.format, if none is given, try the template
|
102
|
+
# handler format and fallback to the one given on conditions
|
103
|
+
format = record.format && Mime[record.format]
|
104
|
+
format ||= handler.default_format if handler.respond_to?(:default_format)
|
105
|
+
format ||= details[:formats]
|
106
|
+
|
107
|
+
details = {
|
108
|
+
:format => format,
|
109
|
+
:updated_at => record.updated_at,
|
110
|
+
:virtual_path => virtual_path(record.pathname, record.partial)
|
111
|
+
}
|
112
|
+
|
113
|
+
ActionView::Template.new(source, identifier, handler, details)
|
114
|
+
end
|
115
|
+
|
116
|
+
# Make paths as "users/user" become "users/_user" for partials.
|
117
|
+
def virtual_path(path, partial)
|
118
|
+
return path unless partial
|
119
|
+
if index = path.rindex("/")
|
120
|
+
path.insert(index + 1, "_")
|
121
|
+
else
|
122
|
+
"_#{path}"
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Ecm
|
2
|
+
module CmsCore
|
3
|
+
module Generators
|
4
|
+
class RoutesGenerator < Rails::Generators::Base
|
5
|
+
desc "Generates the routes"
|
6
|
+
|
7
|
+
source_root File.expand_path('../templates', __FILE__)
|
8
|
+
|
9
|
+
def generate_routes
|
10
|
+
inject_into_file "config/routes.rb" , :before => "\nend" do
|
11
|
+
File.read(File.join(File.dirname(__FILE__), 'templates', 'routes.rb'))
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
@@ -0,0 +1,14 @@
|
|
1
|
+
|
2
|
+
# localized(I18n.available_locales, :verbose => true) do
|
3
|
+
# scope "/:i18n_locale", :constraints => {:i18n_locale => /#{I18n.available_locales.join('|')}/} do
|
4
|
+
#
|
5
|
+
# # match '/' => "page#respond", :page => '/home/index', :as => :root
|
6
|
+
# root :to => "home#index", :i18n_locale => I18n.locale, :to => "page#respond", :page => '/home/index'
|
7
|
+
# match "/*page", :to => "page#respond", :as => :page
|
8
|
+
# end
|
9
|
+
# end
|
10
|
+
# match "/", :to => redirect("/#{I18n.locale}")
|
11
|
+
|
12
|
+
match "/*page", :to => "page#respond", :as => :page
|
13
|
+
# match '/' => "page#respond", :page => 'home/index', :as => :root
|
14
|
+
root :to => "home#index", :to => "page#respond", :page => '/home/index'
|