qbrick 2.5.0.pre
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/README.md +423 -0
- data/Rakefile +82 -0
- data/app/assets/javascripts/ckeditor/plugins/adv_link/LICENSE.txt +674 -0
- data/app/assets/javascripts/ckeditor/plugins/adv_link/README.md +62 -0
- data/app/assets/javascripts/ckeditor/plugins/adv_link/dialogs/anchor.js.coffee +81 -0
- data/app/assets/javascripts/ckeditor/plugins/adv_link/dialogs/link.js.coffee +1353 -0
- data/app/assets/javascripts/ckeditor/plugins/adv_link/images/anchor.png +0 -0
- data/app/assets/javascripts/ckeditor/plugins/adv_link/images/hidpi/anchor.png +0 -0
- data/app/assets/javascripts/ckeditor/plugins/adv_link/lang/de.js +68 -0
- data/app/assets/javascripts/ckeditor/plugins/adv_link/lang/en.js +68 -0
- data/app/assets/javascripts/ckeditor/plugins/adv_link/plugin.js.coffee +282 -0
- data/app/assets/javascripts/kuhsaft/application.js.coffee +7 -0
- data/app/assets/javascripts/kuhsaft/cms/application.js.coffee.erb +136 -0
- data/app/assets/javascripts/kuhsaft/views/read_more_view.js.coffee +17 -0
- data/app/assets/stylesheets/kuhsaft/application.css.sass +1 -0
- data/app/assets/stylesheets/kuhsaft/cms/application.css.sass +204 -0
- data/app/assets/stylesheets/kuhsaft/modules/_text_brick.css.sass +16 -0
- data/app/controllers/kuhsaft/api/pages_controller.rb +14 -0
- data/app/controllers/kuhsaft/cms/admin_controller.rb +18 -0
- data/app/controllers/kuhsaft/cms/assets_controller.rb +38 -0
- data/app/controllers/kuhsaft/cms/bricks_controller.rb +61 -0
- data/app/controllers/kuhsaft/cms/ckimages_controller.rb +26 -0
- data/app/controllers/kuhsaft/cms/pages_controller.rb +71 -0
- data/app/controllers/kuhsaft/pages_controller.rb +38 -0
- data/app/controllers/kuhsaft/sitemaps_controller.rb +12 -0
- data/app/helpers/cms_helper.rb +27 -0
- data/app/helpers/kuhsaft/admin_helper.rb +20 -0
- data/app/helpers/kuhsaft/cms/admin_helper.rb +21 -0
- data/app/helpers/kuhsaft/cms/pages_helper.rb +17 -0
- data/app/helpers/pages_helper.rb +49 -0
- data/app/helpers/sitemaps_helper.rb +12 -0
- data/app/models/kuhsaft/accordion_brick.rb +15 -0
- data/app/models/kuhsaft/accordion_item_brick.rb +21 -0
- data/app/models/kuhsaft/anchor_brick.rb +17 -0
- data/app/models/kuhsaft/asset.rb +29 -0
- data/app/models/kuhsaft/asset_brick.rb +26 -0
- data/app/models/kuhsaft/brick.rb +137 -0
- data/app/models/kuhsaft/brick_type.rb +7 -0
- data/app/models/kuhsaft/brick_type_filter.rb +18 -0
- data/app/models/kuhsaft/ckimage.rb +5 -0
- data/app/models/kuhsaft/cms.rb +7 -0
- data/app/models/kuhsaft/column_brick.rb +22 -0
- data/app/models/kuhsaft/image_brick.rb +16 -0
- data/app/models/kuhsaft/image_size.rb +51 -0
- data/app/models/kuhsaft/link_brick.rb +21 -0
- data/app/models/kuhsaft/page.rb +160 -0
- data/app/models/kuhsaft/page_type.rb +11 -0
- data/app/models/kuhsaft/partition.rb +18 -0
- data/app/models/kuhsaft/placeholder_brick.rb +23 -0
- data/app/models/kuhsaft/publish_state.rb +24 -0
- data/app/models/kuhsaft/slider_brick.rb +18 -0
- data/app/models/kuhsaft/text_brick.rb +23 -0
- data/app/models/kuhsaft/two_column_brick.rb +46 -0
- data/app/models/kuhsaft/video_brick.rb +22 -0
- data/app/uploaders/kuhsaft/asset_brick_asset_uploader.rb +43 -0
- data/app/uploaders/kuhsaft/asset_uploader.rb +50 -0
- data/app/uploaders/kuhsaft/ckimage_uploader.rb +16 -0
- data/app/uploaders/kuhsaft/image_brick_image_uploader.rb +35 -0
- data/app/views/kuhsaft/accordion_bricks/_accordion_brick.html.haml +3 -0
- data/app/views/kuhsaft/accordion_bricks/accordion_brick/_edit.html.haml +0 -0
- data/app/views/kuhsaft/accordion_item_bricks/_accordion_item_brick.html.haml +8 -0
- data/app/views/kuhsaft/accordion_item_bricks/accordion_item_brick/_edit.html.haml +1 -0
- data/app/views/kuhsaft/anchor_bricks/_anchor_brick.html.haml +1 -0
- data/app/views/kuhsaft/anchor_bricks/anchor_brick/_edit.html.haml +1 -0
- data/app/views/kuhsaft/asset_bricks/_asset_brick.html.haml +2 -0
- data/app/views/kuhsaft/asset_bricks/asset_brick/_edit.html.haml +8 -0
- data/app/views/kuhsaft/cms/admin/_brick_type_dropdown.html.haml +14 -0
- data/app/views/kuhsaft/cms/admin/_content_language_switch.html.haml +7 -0
- data/app/views/kuhsaft/cms/admin/_empty_state.html.haml +5 -0
- data/app/views/kuhsaft/cms/admin/_flash.html.haml +7 -0
- data/app/views/kuhsaft/cms/admin/_main_navigation.html.haml +6 -0
- data/app/views/kuhsaft/cms/assets/_form.html.haml +15 -0
- data/app/views/kuhsaft/cms/assets/_list.html.haml +11 -0
- data/app/views/kuhsaft/cms/assets/edit.html.haml +2 -0
- data/app/views/kuhsaft/cms/assets/index.html.haml +3 -0
- data/app/views/kuhsaft/cms/assets/new.html.haml +2 -0
- data/app/views/kuhsaft/cms/bricks/_brick_header.html.haml +43 -0
- data/app/views/kuhsaft/cms/bricks/_brick_item.html.haml +25 -0
- data/app/views/kuhsaft/cms/bricks/_brick_list.html.haml +4 -0
- data/app/views/kuhsaft/cms/bricks/_new.html.haml +41 -0
- data/app/views/kuhsaft/cms/bricks/_sort_form.html.haml +3 -0
- data/app/views/kuhsaft/cms/bricks/create.js.erb +11 -0
- data/app/views/kuhsaft/cms/bricks/destroy.js.erb +10 -0
- data/app/views/kuhsaft/cms/bricks/new.js.erb +14 -0
- data/app/views/kuhsaft/cms/bricks/update.js.erb +8 -0
- data/app/views/kuhsaft/cms/ckimages/create.html.haml +11 -0
- data/app/views/kuhsaft/cms/ckimages/destroy.js.erb +2 -0
- data/app/views/kuhsaft/cms/ckimages/index.html.haml +13 -0
- data/app/views/kuhsaft/cms/pages/_branch.html.haml +19 -0
- data/app/views/kuhsaft/cms/pages/_form.html.haml +45 -0
- data/app/views/kuhsaft/cms/pages/edit.html.haml +16 -0
- data/app/views/kuhsaft/cms/pages/index.html.haml +14 -0
- data/app/views/kuhsaft/cms/pages/new.html.haml +1 -0
- data/app/views/kuhsaft/cms/pages/show.html.haml +0 -0
- data/app/views/kuhsaft/cms/pages/sort.js.erb +0 -0
- data/app/views/kuhsaft/column_bricks/_column_brick.html.haml +3 -0
- data/app/views/kuhsaft/column_bricks/column_brick/_edit.html.haml +0 -0
- data/app/views/kuhsaft/image_bricks/_image_brick.html.haml +11 -0
- data/app/views/kuhsaft/image_bricks/image_brick/_edit.html.haml +13 -0
- data/app/views/kuhsaft/link_bricks/_link_brick.html.haml +2 -0
- data/app/views/kuhsaft/link_bricks/link_brick/_edit.html.haml +4 -0
- data/app/views/kuhsaft/pages/index.html.haml +7 -0
- data/app/views/kuhsaft/pages/show.html.haml +11 -0
- data/app/views/kuhsaft/placeholder_bricks/_placeholder_brick.html.haml +2 -0
- data/app/views/kuhsaft/placeholder_bricks/placeholder_brick/_edit.html.haml +1 -0
- data/app/views/kuhsaft/search/_form.html.haml +2 -0
- data/app/views/kuhsaft/search/_results.html.haml +8 -0
- data/app/views/kuhsaft/search/_results_entry.html.haml +13 -0
- data/app/views/kuhsaft/sitemaps/index.xml.haml +9 -0
- data/app/views/kuhsaft/slider_bricks/_slider_brick.html.haml +10 -0
- data/app/views/kuhsaft/slider_bricks/slider_brick/_edit.html.haml +0 -0
- data/app/views/kuhsaft/text_bricks/_text_brick.html.haml +11 -0
- data/app/views/kuhsaft/text_bricks/text_brick/_edit.html.haml +2 -0
- data/app/views/kuhsaft/two_column_bricks/_two_column_brick.html.haml +3 -0
- data/app/views/kuhsaft/two_column_bricks/two_column_brick/_childs.html.haml +5 -0
- data/app/views/kuhsaft/two_column_bricks/two_column_brick/_edit.html.haml +1 -0
- data/app/views/kuhsaft/video_bricks/_video_brick.html.haml +9 -0
- data/app/views/kuhsaft/video_bricks/video_brick/_edit.html.haml +8 -0
- data/app/views/layouts/kuhsaft/cms/application.html.haml +25 -0
- data/app/views/layouts/kuhsaft/cms/ckimages.html.haml +18 -0
- data/config/initializers/simple_form.rb +142 -0
- data/config/initializers/simple_form_bootstrap.rb +45 -0
- data/config/locales/de.yml +207 -0
- data/config/locales/en.yml +211 -0
- data/config/locales/models/kuhsaft/accordion_brick/de.yml +4 -0
- data/config/locales/models/kuhsaft/accordion_brick/en.yml +4 -0
- data/config/locales/models/kuhsaft/accordion_item_brick/de.yml +7 -0
- data/config/locales/models/kuhsaft/accordion_item_brick/en.yml +7 -0
- data/config/locales/models/kuhsaft/anchor_brick/de.yml +7 -0
- data/config/locales/models/kuhsaft/anchor_brick/en.yml +7 -0
- data/config/locales/models/kuhsaft/asset_brick/de.yml +9 -0
- data/config/locales/models/kuhsaft/asset_brick/en.yml +9 -0
- data/config/locales/models/kuhsaft/brick/de.yml +5 -0
- data/config/locales/models/kuhsaft/brick/en.yml +5 -0
- data/config/locales/models/kuhsaft/column_brick/de.yml +4 -0
- data/config/locales/models/kuhsaft/column_brick/en.yml +4 -0
- data/config/locales/models/kuhsaft/image_brick/de.yml +11 -0
- data/config/locales/models/kuhsaft/image_brick/en.yml +11 -0
- data/config/locales/models/kuhsaft/image_size/de.yml +13 -0
- data/config/locales/models/kuhsaft/image_size/en.yml +13 -0
- data/config/locales/models/kuhsaft/link_brick/de.yml +10 -0
- data/config/locales/models/kuhsaft/link_brick/en.yml +10 -0
- data/config/locales/models/kuhsaft/page/de.yml +19 -0
- data/config/locales/models/kuhsaft/page/en.yml +19 -0
- data/config/locales/models/kuhsaft/placeholder_brick/de.yml +8 -0
- data/config/locales/models/kuhsaft/placeholder_brick/en.yml +8 -0
- data/config/locales/models/kuhsaft/slider_brick/de.yml +4 -0
- data/config/locales/models/kuhsaft/slider_brick/en.yml +4 -0
- data/config/locales/models/kuhsaft/text_brick/de.yml +11 -0
- data/config/locales/models/kuhsaft/text_brick/en.yml +11 -0
- data/config/locales/models/kuhsaft/two_column_brick/de.yml +7 -0
- data/config/locales/models/kuhsaft/two_column_brick/en.yml +7 -0
- data/config/locales/models/kuhsaft/video_brick/de.yml +9 -0
- data/config/locales/models/kuhsaft/video_brick/en.yml +9 -0
- data/config/locales/simple_form.en.yml +26 -0
- data/config/locales/views/kuhsaft/cms/admin/de.yml +13 -0
- data/config/locales/views/kuhsaft/cms/admin/en.yml +12 -0
- data/config/locales/views/kuhsaft/cms/bricks/de.yml +18 -0
- data/config/locales/views/kuhsaft/cms/bricks/en.yml +18 -0
- data/config/locales/views/kuhsaft/cms/pages/de.yml +31 -0
- data/config/locales/views/kuhsaft/cms/pages/en.yml +31 -0
- data/config/locales/views/kuhsaft/image_brick/de.yml +6 -0
- data/config/locales/views/kuhsaft/image_brick/en.yml +6 -0
- data/config/locales/views/kuhsaft/search/de.yml +12 -0
- data/config/locales/views/kuhsaft/search/en.yml +12 -0
- data/config/locales/views/kuhsaft/text_brick/de.yml +6 -0
- data/config/locales/views/kuhsaft/text_brick/en.yml +6 -0
- data/config/locales/views/kuhsaft/video_brick/de.yml +7 -0
- data/config/locales/views/kuhsaft/video_brick/en.yml +7 -0
- data/config/routes.rb +30 -0
- data/db/migrate/01_create_kuhsaft_pages.rb +31 -0
- data/db/migrate/02_create_kuhsaft_bricks.rb +23 -0
- data/db/migrate/03_create_kuhsaft_brick_types.rb +12 -0
- data/db/migrate/04_create_kuhsaft_assets.rb +10 -0
- data/db/migrate/05_remove_cms_admin.rb +9 -0
- data/db/migrate/06_add_template_name_to_kuhsaft_bricks.rb +7 -0
- data/db/migrate/07_add_default_value_to_brick_type_enabled.rb +6 -0
- data/db/migrate/08_add_display_styles_to_bricks.rb +5 -0
- data/db/migrate/09_add_additional_fields_to_kuhsaft_bricks.rb +6 -0
- data/db/migrate/10_add_redirect_url_to_kuhsaft_pages.rb +7 -0
- data/db/migrate/11_update_url_and_redirect_url_value.rb +45 -0
- data/db/migrate/12_regenerate_fulltext.rb +12 -0
- data/db/migrate/13_add_page_title_to_pages.rb +7 -0
- data/db/migrate/14_move_kuhsaft_assets.rb +22 -0
- data/db/migrate/15_add_alt_text_to_bricks.rb +5 -0
- data/db/migrate/16_update_default_value_for_page_type.rb +9 -0
- data/db/migrate/17_set_page_type_to_content_for_empty_fields.rb +7 -0
- data/db/migrate/18_add_identifier_to_kuhsaft_pages.rb +6 -0
- data/db/migrate/19_add_col_count_to_bricks.rb +5 -0
- data/db/migrate/20_create_kuhsaft_ckimages.rb +9 -0
- data/db/seeds.rb +20 -0
- data/lib/generators/kuhsaft/assets/install_generator.rb +25 -0
- data/lib/generators/kuhsaft/translations/add_generator.rb +41 -0
- data/lib/kuhsaft.rb +22 -0
- data/lib/kuhsaft/brick_list.rb +87 -0
- data/lib/kuhsaft/engine.rb +27 -0
- data/lib/kuhsaft/gridded.rb +20 -0
- data/lib/kuhsaft/image_uploader_mounting.rb +22 -0
- data/lib/kuhsaft/orderable.rb +71 -0
- data/lib/kuhsaft/page_tree.rb +14 -0
- data/lib/kuhsaft/partial_extractor.rb +21 -0
- data/lib/kuhsaft/searchable.rb +69 -0
- data/lib/kuhsaft/touch_placeholders.rb +31 -0
- data/lib/kuhsaft/translatable.rb +54 -0
- data/lib/kuhsaft/version.rb +3 -0
- data/lib/tasks/kuhsaft_tasks.rake +22 -0
- data/lib/templates/kuhsaft/assets/ck-config.js.coffee +48 -0
- data/lib/templates/kuhsaft/assets/customizations.css.sass +0 -0
- data/lib/templates/kuhsaft/assets/customizations.js.coffee +0 -0
- data/lib/templates/kuhsaft/translations/add_translation.erb +8 -0
- data/spec/controllers/kuhsaft/api/pages_controller_spec.rb +70 -0
- data/spec/controllers/kuhsaft/pages_controller_spec.rb +90 -0
- data/spec/controllers/kuhsaft/sitemaps_controller_spec.rb +13 -0
- data/spec/dummy/Rakefile +7 -0
- data/spec/dummy/app/assets/images/spec-image.png +0 -0
- data/spec/dummy/app/assets/javascripts/application.js +15 -0
- data/spec/dummy/app/assets/javascripts/kuhsaft/cms/ck-config.js.coffee +48 -0
- data/spec/dummy/app/assets/javascripts/kuhsaft/cms/customizations.js.coffee +0 -0
- data/spec/dummy/app/assets/stylesheets/application.css +13 -0
- data/spec/dummy/app/assets/stylesheets/kuhsaft/cms/customizations.css.sass +0 -0
- data/spec/dummy/app/controllers/application_controller.rb +4 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -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.ru +4 -0
- data/spec/dummy/config/application.rb +26 -0
- data/spec/dummy/config/boot.rb +3 -0
- data/spec/dummy/config/database.yml +19 -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 +81 -0
- data/spec/dummy/config/environments/test.rb +36 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -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/kuhsaft.rb +5 -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/routes.rb +3 -0
- data/spec/dummy/db/.gitkeep +0 -0
- data/spec/dummy/lib/assets/.gitkeep +0 -0
- data/spec/dummy/log/.gitkeep +0 -0
- data/spec/dummy/public/404.html +26 -0
- data/spec/dummy/public/422.html +26 -0
- data/spec/dummy/public/500.html +25 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/public/stylesheets/.gitkeep +0 -0
- data/spec/dummy/script/rails +6 -0
- data/spec/factories.rb +26 -0
- data/spec/features/cms_pages_spec.rb +76 -0
- data/spec/features/search_spec.rb +78 -0
- data/spec/helpers/kuhsaft/cms/admin_helper_spec.rb +25 -0
- data/spec/helpers/kuhsaft/cms/pages_helper_spec.rb +46 -0
- data/spec/helpers/kuhsaft/pages_helper_spec.rb +21 -0
- data/spec/kuhsaft_spec.rb +7 -0
- data/spec/lib/brick_list_spec.rb +50 -0
- data/spec/lib/engine_spec.rb +25 -0
- data/spec/lib/gridded_spec.rb +24 -0
- data/spec/lib/image_uploader_mounting_spec.rb +14 -0
- data/spec/lib/page_tree_spec.rb +38 -0
- data/spec/lib/searchable_spec.rb +30 -0
- data/spec/lib/touch_placeholders_spec.rb +44 -0
- data/spec/lib/translatable_spec.rb +155 -0
- data/spec/models/accordion_brick_spec.rb +38 -0
- data/spec/models/accordion_item_brick_spec.rb +50 -0
- data/spec/models/anchor_brick_spec.rb +26 -0
- data/spec/models/asset_brick_spec.rb +45 -0
- data/spec/models/asset_spec.rb +41 -0
- data/spec/models/brick_spec.rb +134 -0
- data/spec/models/brick_type_filter_spec.rb +64 -0
- data/spec/models/column_brick_spec.rb +32 -0
- data/spec/models/image_brick_spec.rb +49 -0
- data/spec/models/image_size_spec.rb +36 -0
- data/spec/models/link_brick_spec.rb +51 -0
- data/spec/models/page_spec.rb +472 -0
- data/spec/models/placeholder_brick_spec.rb +46 -0
- data/spec/models/publish_state_spec.rb +33 -0
- data/spec/models/slider_brick_spec.rb +26 -0
- data/spec/models/text_brick_spec.rb +30 -0
- data/spec/models/two_column_brick_spec.rb +82 -0
- data/spec/models/video_brick_spec.rb +32 -0
- data/spec/spec_helper.rb +81 -0
- data/spec/support/kuhsaft_spec_helper.rb +8 -0
- data/spec/support/write_expectation.rb +57 -0
- data/spec/views/kuhsaft/sitemaps/index.xml.haml_spec.rb +67 -0
- data/vendor/assets/javascripts/bootstrap-modal-v2.js +376 -0
- data/vendor/assets/javascripts/bootstrap-modalmanager.js +423 -0
- data/vendor/assets/javascripts/jquery.nestable.js +485 -0
- data/vendor/assets/stylesheets/bootstrap_modal.css +214 -0
- data/vendor/assets/stylesheets/nestable.css +84 -0
- metadata +870 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: aa68b302bf2fad31f0d1e24afa8d9b0408ffc9bb
|
|
4
|
+
data.tar.gz: e76b64ee8157ef3a183db7b4a938b603d3bf2065
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 0c57ecb2927fc22070a4418d622722e7d778d93abc97869f16f02465f0628658d7eb7e884b003e80ed5f9c9ba8e37f83d6f29db1123e8980f73288b9c771b060
|
|
7
|
+
data.tar.gz: ab7e185baadf339aaa5c4edce29ef1eb55888e26fd4c00160ba768414859f973c2ffa28d52b59324d888503d1386e111dcf8bf60a6c5f27bc927acb7b782d7e4
|
data/README.md
ADDED
|
@@ -0,0 +1,423 @@
|
|
|
1
|
+
[](https://travis-ci.org/screenconcept/kuhsaft)
|
|
2
|
+
[](https://codeclimate.com/github/screenconcept/kuhsaft)
|
|
3
|
+
[](http://badge.fury.io/rb/kuhsaft)
|
|
4
|
+
|
|
5
|
+
# Kuhsaft. A CMS as simple as it could be
|
|
6
|
+
|
|
7
|
+
## The Who, What and Why?
|
|
8
|
+
|
|
9
|
+
Kuhsaft is made by some Rails developers at Screen Concept that got tired of
|
|
10
|
+
fiddling with unusable content management sytems. We are trying hard to make a
|
|
11
|
+
minimalistic and developer friendly CMS. Our goal is to provide a system for
|
|
12
|
+
ourselves and our customers that makes the of-the-shelf website project a
|
|
13
|
+
hasslefree thing. On one side easy to set up, integrate and customize (good for
|
|
14
|
+
devs) on the other hand it should be easily usable by anyone.
|
|
15
|
+
|
|
16
|
+
## What's in it
|
|
17
|
+
|
|
18
|
+
* A modular system to integrate any type of content structure
|
|
19
|
+
* Multilanguage content
|
|
20
|
+
* much more
|
|
21
|
+
|
|
22
|
+
# Requirements
|
|
23
|
+
|
|
24
|
+
Kuhsaft requires:
|
|
25
|
+
|
|
26
|
+
* A Rails 4 app to be integrated into
|
|
27
|
+
* ImageMagick
|
|
28
|
+
* An ActiveRecord compatible DB
|
|
29
|
+
|
|
30
|
+
# Installation
|
|
31
|
+
|
|
32
|
+
Add Kuhsaft to your Gemfile:
|
|
33
|
+
|
|
34
|
+
gem 'kuhsaft'
|
|
35
|
+
|
|
36
|
+
And run
|
|
37
|
+
|
|
38
|
+
bundle install
|
|
39
|
+
|
|
40
|
+
to get the gem
|
|
41
|
+
|
|
42
|
+
Then install the assets and the migrations and run them:
|
|
43
|
+
|
|
44
|
+
rake kuhsaft:install:migrations
|
|
45
|
+
rake db:migrate
|
|
46
|
+
rake db:seed
|
|
47
|
+
rails generate kuhsaft:assets:install
|
|
48
|
+
|
|
49
|
+
You might want to change the language suffixes on the fields inside the create_kuhsaft_pages migration, depending on your app's default_locale.
|
|
50
|
+
|
|
51
|
+
Mount the kuhsaft engine in your routing file:
|
|
52
|
+
|
|
53
|
+
MyApp::Application.routes.draw do
|
|
54
|
+
# add your app routes here
|
|
55
|
+
mount Kuhsaft::Engine => "/"
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
Load the Kuhsaft assets into your app, so you have working grids, widgets etc:
|
|
59
|
+
|
|
60
|
+
# application.css.sass
|
|
61
|
+
@import 'kuhsaft/application'
|
|
62
|
+
|
|
63
|
+
# application.js.coffee
|
|
64
|
+
//= require 'kuhsaft/application'
|
|
65
|
+
|
|
66
|
+
Finally, you need to define the image sizes for the image brick or use
|
|
67
|
+
the defaults:
|
|
68
|
+
|
|
69
|
+
# your_app/config/initializers/kuhsaft.rb
|
|
70
|
+
Rails.application.config.to_prepare do
|
|
71
|
+
Kuhsaft::Engine.configure do
|
|
72
|
+
config.image_sizes.build_defaults! # creates 960x540 and 320x180 sizes
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
See "Configuring the image brick" for more details.
|
|
77
|
+
|
|
78
|
+
## Authentication
|
|
79
|
+
|
|
80
|
+
Kuhsaft itself does not ship with any form of authentication. However, it is fairly easy to add by plugging into the Kuhsaft::Cms::AdminController. An example with devise:
|
|
81
|
+
|
|
82
|
+
```ruby
|
|
83
|
+
# config/initializers/kuhsaft.rb
|
|
84
|
+
Rails.application.config.to_prepare do
|
|
85
|
+
Kuhsaft::Cms::AdminController.class_eval do
|
|
86
|
+
before_filter :authenticate_user!
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Also, be sure to have override the navigation partial in `app/views/kuhsaft/cms/admin/_main_navigation.html.haml` so you get a working logout button.
|
|
92
|
+
|
|
93
|
+
## Extending the backend CSS/javascript
|
|
94
|
+
Kuhsaft installs a sass file in `assets/stylesheets/kuhsaft/cms/customizations.css.sass` and a coffeescript file in `assets/javascripts/kuhsaft/cms/customizations.js.coffee` which are loaded by the backend layout. Those files can be installed by running `rails generate kuhsaft:assets:install`.
|
|
95
|
+
|
|
96
|
+
Make sure they are in the `config.assets.precompile` array in environments like production where you usually precompile the assets. The generator will only add the necessary configs for the production env!
|
|
97
|
+
|
|
98
|
+
## Testing
|
|
99
|
+
|
|
100
|
+
There's a dummy app inside spec/dummy. Get it running by executing the following steps:
|
|
101
|
+
|
|
102
|
+
```
|
|
103
|
+
rake setup
|
|
104
|
+
rake start_dummy
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
# Usage
|
|
108
|
+
|
|
109
|
+
## Making Kuhsaft helpers available to your app
|
|
110
|
+
|
|
111
|
+
As defined in the rails docs, load the helpers from our isolated Kuhsaft engine inside your application controller:
|
|
112
|
+
|
|
113
|
+
class ApplicationController < ActionController::Base
|
|
114
|
+
helper Kuhsaft::Engine.helpers
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
## Adding sublime video
|
|
118
|
+
|
|
119
|
+
Create an initializer file in your app inside `config/initializers` and set the `sublime_video_token`:
|
|
120
|
+
|
|
121
|
+
Rails.application.config.to_prepare do
|
|
122
|
+
Kuhsaft::Engine.configure do
|
|
123
|
+
# Get the token from the MySites section on the sublime video site
|
|
124
|
+
config.sublime_video_token = '123abcd'
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
Require the sublime javascript with the following helper:
|
|
129
|
+
|
|
130
|
+
# in your application layout in the head section
|
|
131
|
+
sublime_video_include_tag
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
## Configuring the image brick
|
|
135
|
+
|
|
136
|
+
The image brick can process uploaded images into specific sizes. These sizes can be configured inside the engine configuration. You can also use the built-in default sizes:
|
|
137
|
+
|
|
138
|
+
# your_app/config/initializers/kuhsaft.rb
|
|
139
|
+
Rails.application.config.to_prepare do
|
|
140
|
+
Kuhsaft::Engine.configure do
|
|
141
|
+
config.image_sizes.build_defaults! # creates 960x540 and 320x180 sizes
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
You can also remove the default sizes:
|
|
146
|
+
|
|
147
|
+
# your_app/config/initializers/kuhsaft.rb
|
|
148
|
+
Rails.application.config.to_prepare do
|
|
149
|
+
Kuhsaft::Engine.configure do
|
|
150
|
+
config.image_sizes.clear! # .all is now empty
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
And most importantly, you can add custom sizes:
|
|
155
|
+
|
|
156
|
+
# your_app/config/initializers/kuhsaft.rb
|
|
157
|
+
Rails.application.config.to_prepare do
|
|
158
|
+
Kuhsaft::Engine.configure do
|
|
159
|
+
config.image_sizes.add(:side_box_vertical, 180, 460)
|
|
160
|
+
config.image_sizes.add(:footer_teaser, 320, 220)
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
The `name` option is a unique identifier, which is also used for translating the dropdown in the brick. You can add your translation by using the translation path:
|
|
165
|
+
|
|
166
|
+
activerecord.attributes.kuhsaft/image_size.sizes.#{name}
|
|
167
|
+
|
|
168
|
+
## Configuring custom styles for bricks
|
|
169
|
+
|
|
170
|
+
Implement the `available_display_styles` on a brick model and return an array of css classnames: `['module-big', 'module-small']`. These styles can be applied to a brick instance through the UI. In the frontend, use `to_style_class` to get the configured styles:
|
|
171
|
+
|
|
172
|
+
%my-brick{ :class => brick.to_style_class}
|
|
173
|
+
= brick.text # ... etc
|
|
174
|
+
|
|
175
|
+
After setting up display styles in specific model add your translations
|
|
176
|
+
for the UI dropdown. E.g. you've added display styles to the TextBrick model:
|
|
177
|
+
|
|
178
|
+
```
|
|
179
|
+
de:
|
|
180
|
+
text_brick:
|
|
181
|
+
display_styles:
|
|
182
|
+
style1: 'My Style 1'
|
|
183
|
+
style2: 'My Style 2'
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
## Configuring Grid settings for Bricks
|
|
187
|
+
|
|
188
|
+
Include the Kuhsaft::Gridded Module on every Brick you want to display in a grid. Default grid options are 1 to 12 (representing columns) wich can be configured via the class method `available_grid_sizes` (should return an array of integers).
|
|
189
|
+
Each instance of a gridded class will have a method `gridded?` wich returns true if a column size is set.
|
|
190
|
+
|
|
191
|
+
If the Gridded Module is added to a Custom Brick, it should provide a col_count integer field with default value 0.
|
|
192
|
+
|
|
193
|
+
```
|
|
194
|
+
add_column :your_awesome_brick, :col_count, :integer, default: 0
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
## Adding custom templates with placeholder bricks
|
|
198
|
+
|
|
199
|
+
* Save your partial in `views/kuhsaft/placeholder_bricks/partials/_your_partial.html.haml`
|
|
200
|
+
* Add translations for your partial in `config/locales/models/kuhsaft/placeholder_brick/locale.yml`
|
|
201
|
+
|
|
202
|
+
```
|
|
203
|
+
de:
|
|
204
|
+
your_partial: Your Partial
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
## Invalidating placeholder bricks containing other models on model changes
|
|
208
|
+
|
|
209
|
+
Include the TouchPlaceholders module if your model is used within a
|
|
210
|
+
placeholder brick and define which templates it appears in:
|
|
211
|
+
|
|
212
|
+
```ruby
|
|
213
|
+
class Dummy < ActiveRecord::Base
|
|
214
|
+
include Kuhsaft::TouchPlaceholders
|
|
215
|
+
placeholder_templates 'some_template', 'some_other_template'
|
|
216
|
+
end
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
## Adding additional content languages
|
|
220
|
+
|
|
221
|
+
If you want to translate your pages into another language, generate a new translation migration:
|
|
222
|
+
|
|
223
|
+
# translate your pages into french
|
|
224
|
+
rails g kuhsaft:translations:add fr
|
|
225
|
+
Or
|
|
226
|
+
|
|
227
|
+
# translate your pages into swiss german
|
|
228
|
+
rails g kuhsaft:translations:add de-CH
|
|
229
|
+
|
|
230
|
+
This creates a new migration file inside `db/migrate` of your app. Run the migration as you normally do:
|
|
231
|
+
|
|
232
|
+
rake db:migrate
|
|
233
|
+
|
|
234
|
+
Finally, add the new translation locale to your `available_locales` inside your apps `application.rb`:
|
|
235
|
+
|
|
236
|
+
config.available_locales = [:en, :fr]
|
|
237
|
+
Or
|
|
238
|
+
|
|
239
|
+
config.available_locales = [:en, 'de-CH']
|
|
240
|
+
|
|
241
|
+
## Adding a language switch
|
|
242
|
+
|
|
243
|
+
Add scope around routes:
|
|
244
|
+
|
|
245
|
+
scope "(:locale)", locale: /de|en|fr/ do
|
|
246
|
+
root 'kuhsaft/pages#show'
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
Set the locale in the ApplicationController in a before_action and set default url options:
|
|
250
|
+
|
|
251
|
+
before_action :set_locale
|
|
252
|
+
|
|
253
|
+
def set_locale
|
|
254
|
+
if I18n.available_locales.map{|sym| sym.to_s }.include?(params[:locale])
|
|
255
|
+
I18n.locale = params[:locale]
|
|
256
|
+
else
|
|
257
|
+
I18n.locale = I18n.default_locale
|
|
258
|
+
end
|
|
259
|
+
end
|
|
260
|
+
|
|
261
|
+
def default_url_options(options={})
|
|
262
|
+
{ locale: I18n.locale }
|
|
263
|
+
end
|
|
264
|
+
|
|
265
|
+
Add method to ApplicationHelper which redirects to homepage when current page is not translated.
|
|
266
|
+
Make sure to have the homepage translated in every available language.
|
|
267
|
+
|
|
268
|
+
def localized_url(url, target_locale)
|
|
269
|
+
page = Kuhsaft::Page.find_by_url("#{I18n.locale}/#{url}")
|
|
270
|
+
I18n.with_locale target_locale do
|
|
271
|
+
translated_url = page.presence && page.url
|
|
272
|
+
if translated_url.present?
|
|
273
|
+
"/#{translated_url}"
|
|
274
|
+
else
|
|
275
|
+
root_path(locale: target_locale)
|
|
276
|
+
end
|
|
277
|
+
end
|
|
278
|
+
end
|
|
279
|
+
|
|
280
|
+
def language_link(url, locale)
|
|
281
|
+
localized_url(params[:url], locale)
|
|
282
|
+
end
|
|
283
|
+
|
|
284
|
+
Add language switch to navigation:
|
|
285
|
+
|
|
286
|
+
SimpleNavigation::Configuration.run do |navigation|
|
|
287
|
+
I18n.available_locales.each do |locale|
|
|
288
|
+
primary.item locale, locale.to_s.upcase, language_link(params[:url], locale), highlights_on: Proc.new { I18n.locale == locale }
|
|
289
|
+
end
|
|
290
|
+
end
|
|
291
|
+
|
|
292
|
+
Make sure to render only pages which are translated and published by using `published` and `translated` scope, so pages
|
|
293
|
+
without translation and which are not published will not be displayed in the navigation.
|
|
294
|
+
Here is an example of a possible navigation:
|
|
295
|
+
|
|
296
|
+
SimpleNavigation::Configuration.run do |navigation|
|
|
297
|
+
navigation.items do |primary|
|
|
298
|
+
primary.dom_class = 'right'
|
|
299
|
+
primary.selected_class = 'active'
|
|
300
|
+
Kuhsaft::Page.find_by(slug_de: 'meta-navigation').children.published.translated.each do |page|
|
|
301
|
+
primary.item page.id, page.title, page.link, class: 'contact icon'
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
primary.item '', 'Sprache', '#', class: 'language icon has-dropdown'do |language|
|
|
305
|
+
I18n.available_locales.each do |locale|
|
|
306
|
+
language.dom_class = 'dropdown'
|
|
307
|
+
language.item locale, language_text(locale), language_link(params[:url], locale), highlights_on: Proc.new { I18n.locale == locale }, class: "icon lang-#{locale}"
|
|
308
|
+
end
|
|
309
|
+
end
|
|
310
|
+
end
|
|
311
|
+
end
|
|
312
|
+
|
|
313
|
+
## Styling the content
|
|
314
|
+
|
|
315
|
+
By default, the text editor lets you add the following tags, for which you should supply some styles in your app:
|
|
316
|
+
|
|
317
|
+
p, h1, h2, h3, h4, table, a, strong, em
|
|
318
|
+
|
|
319
|
+
## Building a navigation
|
|
320
|
+
|
|
321
|
+
Building a navigation is simple, access to the page tree is available through the common methods built into the ancestry gem.
|
|
322
|
+
Just make sure you are only accessing published pages for your production site, using the `published` scope.
|
|
323
|
+
Or if your page is translated, using the `translated` scope and the `published` scope.
|
|
324
|
+
|
|
325
|
+
### 2 level navigation example using simple-navigation
|
|
326
|
+
|
|
327
|
+
SimpleNavigation::Configuration.run do |navigation|
|
|
328
|
+
navigation.items do |primary|
|
|
329
|
+
# build first level
|
|
330
|
+
Kuhsaft::Page.roots.published.translated.each do |page|
|
|
331
|
+
primary.item page.id, page.title, page.link do |sub_item|
|
|
332
|
+
# build second level
|
|
333
|
+
page.children.published.translated.each do |subpage|
|
|
334
|
+
sub_item.item subpage.id, subpage.title, subpage.link
|
|
335
|
+
end
|
|
336
|
+
end
|
|
337
|
+
end
|
|
338
|
+
end
|
|
339
|
+
end
|
|
340
|
+
|
|
341
|
+
## Use the `page_title` attribute in your app
|
|
342
|
+
|
|
343
|
+
Kuhsaft::Pages will provide a `%title` tag containing its `page_title`
|
|
344
|
+
(or the required `title`if no title is present). Simply yield for
|
|
345
|
+
`:head` in your `application.html` to use it.
|
|
346
|
+
|
|
347
|
+
%head
|
|
348
|
+
= yield(:head)
|
|
349
|
+
|
|
350
|
+
## Modifying the backend navigation
|
|
351
|
+
|
|
352
|
+
Simply override the default partial for the main navigation in your app with your own file at `kuhsaft/cms/admin/_main_navigation.html.haml`
|
|
353
|
+
|
|
354
|
+
## Adding your own Bricks
|
|
355
|
+
|
|
356
|
+
* Create your Brick model in `app/models`, for example `CaptionBrick`, which inherits from `Kuhsaft::Brick`.
|
|
357
|
+
* If u use a string field add a max-length validation of 255 characters.
|
|
358
|
+
To prevent a `ActiveRecord::StatementInvalid` Error.
|
|
359
|
+
* Create a migration which adds the necessary fields to the `kuhsaft_bricks` table.
|
|
360
|
+
* If your brick should be accessible via UI, add a BrickType into the seeds or add a migration:
|
|
361
|
+
`Kuhsaft::BrickType.create(:class_name => 'CaptionBrick', :group => 'elements')`
|
|
362
|
+
* Add the `edit` and `show` partials to your views, e.g: `app/views/caption_bricks/caption_brick/_edit.html.haml`
|
|
363
|
+
* Add the `childs` partial to your views, if you want to render your bricks childs with your own html: `app/views/caption_bricks/caption_brick/_childs.html.haml`
|
|
364
|
+
* Implement the `fulltext` method on your brick, return anything you want to be searchable.
|
|
365
|
+
* Customize the edit form behaviour of your brick by overriding methods like `to_style_class?`. See the `Brick` and `BrickList` files for more methods.
|
|
366
|
+
|
|
367
|
+
### Use the Kuhsaft ImageBrickImageUploader for your own Brick
|
|
368
|
+
|
|
369
|
+
Kuhsaft has a module called `ImageUploaderMounting`. This module mounts the ImageBrickImageUploader
|
|
370
|
+
and includes a callback method which handles that the image sizes will be updated after save.
|
|
371
|
+
|
|
372
|
+
class CustomBrick < Brick
|
|
373
|
+
include Kuhsaft::ImageUploaderMounting
|
|
374
|
+
...
|
|
375
|
+
end
|
|
376
|
+
|
|
377
|
+
If you do not include this module, then the images will not be changed when selecting one of your own image
|
|
378
|
+
sizes. See "Configuring the image brick" for more details on creating your own image sizes.
|
|
379
|
+
|
|
380
|
+
## Integrating search
|
|
381
|
+
|
|
382
|
+
Kuhsaft supports fulltext search when using PostgreSQL with a simple
|
|
383
|
+
LIKE fallback for any other ActiveRecord DB.
|
|
384
|
+
|
|
385
|
+
Add a call to the `search_page_form` helper in your views. This renders
|
|
386
|
+
the default search form. The query will be executed by kuhsaft.
|
|
387
|
+
|
|
388
|
+
# e.g. _footer.html.haml
|
|
389
|
+
= search_page_form
|
|
390
|
+
|
|
391
|
+
To customize the search and result views you can add your own partials
|
|
392
|
+
to your rails app. The following partials are overridable.
|
|
393
|
+
|
|
394
|
+
app/views/kuhsaft/search
|
|
395
|
+
├── _form.html.haml # Search form
|
|
396
|
+
├── _results.html.haml # Results list (@pages)
|
|
397
|
+
└── _results_entry.html.haml # Single result entry (@page)
|
|
398
|
+
|
|
399
|
+
When using PostgreSQL, an additional attribute `excerpt` will be
|
|
400
|
+
available on the page model. It includes a highlighted excerpt of the
|
|
401
|
+
matching `fulltext` column.
|
|
402
|
+
|
|
403
|
+
## Selecting CMS pages in CKEditor (API)
|
|
404
|
+
|
|
405
|
+
The pages API is available under `/:locale/api/pages.json`. Only the
|
|
406
|
+
title and url attribute is rendered in the json.
|
|
407
|
+
|
|
408
|
+
### Usage
|
|
409
|
+
Add the following lines to your `ck-config.js` file. The first line
|
|
410
|
+
disables the standard link plugin. The second line enables the adv_link
|
|
411
|
+
plugin, which we need for the CMS Page link dialogue in CKEditor.
|
|
412
|
+
|
|
413
|
+
```
|
|
414
|
+
config.removePlugins = 'link'
|
|
415
|
+
config.extraPlugins = 'adv_link'
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
Do not forget to update your `config.assets.precompile` array. Add the
|
|
419
|
+
following to your existing array `ckeditor/adv_link/*`.
|
|
420
|
+
|
|
421
|
+
# LICENSE
|
|
422
|
+
|
|
423
|
+
See the file LICENSE.
|
data/Rakefile
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
require 'bundler/gem_tasks'
|
|
2
|
+
require 'rake/testtask'
|
|
3
|
+
require 'rspec/core/rake_task'
|
|
4
|
+
require 'fileutils'
|
|
5
|
+
|
|
6
|
+
begin
|
|
7
|
+
require 'rdoc/task'
|
|
8
|
+
rescue LoadError
|
|
9
|
+
require 'rdoc/rdoc'
|
|
10
|
+
require 'rake/rdoctask'
|
|
11
|
+
RDoc::Task = Rake::RDocTask
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
module Postgres
|
|
15
|
+
class << self
|
|
16
|
+
def exec(query)
|
|
17
|
+
`psql postgres -tAc "#{query}"`
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def user_exists?(username)
|
|
21
|
+
exec("SELECT 1 FROM pg_user WHERE usename='#{username}'").strip == '1'
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def drop_user(username)
|
|
25
|
+
puts "dropping user #{username}"
|
|
26
|
+
puts exec("DROP USER #{username}").inspect
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def create_user(username)
|
|
30
|
+
user_exists?(username) ? false : `createuser -s #{username}`
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def within_dummy_app
|
|
36
|
+
Dir.chdir('spec/dummy') do
|
|
37
|
+
ENV['BUNDLE_GEMFILE'] = File.join File.dirname(__FILE__), 'Gemfile'
|
|
38
|
+
yield
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
desc 'Run specs'
|
|
43
|
+
RSpec::Core::RakeTask.new(spec: :setup)
|
|
44
|
+
|
|
45
|
+
RDoc::Task.new(:rdoc) do |rdoc|
|
|
46
|
+
rdoc.rdoc_dir = 'rdoc'
|
|
47
|
+
rdoc.title = 'Kuhsaft'
|
|
48
|
+
rdoc.options << '--line-numbers'
|
|
49
|
+
rdoc.rdoc_files.include('README.rdoc')
|
|
50
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
desc 'set up the dummy app for testing'
|
|
54
|
+
task :setup do
|
|
55
|
+
Postgres.create_user 'screenconcept'
|
|
56
|
+
within_dummy_app do
|
|
57
|
+
`bundle exec rake kuhsaft:install:migrations`
|
|
58
|
+
`bundle exec rails generate kuhsaft:install:assets`
|
|
59
|
+
`bundle exec rake db:create`
|
|
60
|
+
`bundle exec rake db:migrate`
|
|
61
|
+
`bundle exec rake db:test:prepare`
|
|
62
|
+
`bundle exec rake db:seed`
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
task default: [:spec]
|
|
67
|
+
|
|
68
|
+
desc 'start the dummy app'
|
|
69
|
+
task :start_dummy do
|
|
70
|
+
within_dummy_app do
|
|
71
|
+
`bundle exec rails server`
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
namespace :dummy_db do
|
|
76
|
+
desc 'migrate in dummy app'
|
|
77
|
+
task :migrate do
|
|
78
|
+
within_dummy_app do
|
|
79
|
+
`bundle exec rake db:migrate 2>&1`
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|