qbrick 2.5.0.pre → 2.5.0

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.
Files changed (341) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +69 -379
  3. data/Rakefile +4 -4
  4. data/app/assets/images/logo.png +0 -0
  5. data/app/assets/javascripts/{kuhsaft → qbrick}/application.js.coffee +1 -1
  6. data/app/assets/javascripts/{kuhsaft → qbrick}/cms/application.js.coffee.erb +40 -17
  7. data/app/assets/javascripts/{kuhsaft → qbrick}/views/read_more_view.js.coffee +0 -0
  8. data/app/assets/stylesheets/{kuhsaft → qbrick}/application.css.sass +0 -0
  9. data/app/assets/stylesheets/{kuhsaft → qbrick}/cms/application.css.sass +38 -1
  10. data/app/assets/stylesheets/{kuhsaft → qbrick}/modules/_text_brick.css.sass +1 -1
  11. data/app/controllers/{kuhsaft → qbrick}/api/pages_controller.rb +2 -2
  12. data/app/controllers/qbrick/cms/accounts_controller.rb +28 -0
  13. data/app/controllers/qbrick/cms/admins_controller.rb +79 -0
  14. data/app/controllers/{kuhsaft → qbrick}/cms/assets_controller.rb +9 -9
  15. data/app/controllers/qbrick/cms/backend_controller.rb +25 -0
  16. data/app/controllers/{kuhsaft → qbrick}/cms/bricks_controller.rb +16 -13
  17. data/app/controllers/{kuhsaft → qbrick}/cms/ckimages_controller.rb +6 -6
  18. data/app/controllers/qbrick/cms/pages_controller.rb +87 -0
  19. data/app/controllers/qbrick/cms/settings_collections_controller.rb +26 -0
  20. data/app/controllers/{kuhsaft → qbrick}/pages_controller.rb +10 -5
  21. data/app/controllers/{kuhsaft → qbrick}/sitemaps_controller.rb +3 -3
  22. data/app/helpers/cms_helper.rb +4 -4
  23. data/app/helpers/pages_helper.rb +18 -10
  24. data/app/helpers/{kuhsaft → qbrick}/admin_helper.rb +2 -2
  25. data/app/helpers/qbrick/cms/admin_helper.rb +73 -0
  26. data/app/helpers/{kuhsaft → qbrick}/cms/pages_helper.rb +2 -2
  27. data/app/models/{kuhsaft → qbrick}/accordion_brick.rb +2 -2
  28. data/app/models/{kuhsaft → qbrick}/accordion_item_brick.rb +1 -1
  29. data/app/models/qbrick/admin.rb +8 -0
  30. data/app/models/{kuhsaft → qbrick}/anchor_brick.rb +1 -1
  31. data/app/models/{kuhsaft → qbrick}/asset.rb +2 -2
  32. data/app/models/{kuhsaft → qbrick}/asset_brick.rb +2 -2
  33. data/app/models/{kuhsaft → qbrick}/brick.rb +11 -8
  34. data/app/models/{kuhsaft → qbrick}/brick_type.rb +1 -1
  35. data/app/models/{kuhsaft → qbrick}/brick_type_filter.rb +4 -4
  36. data/app/models/{kuhsaft → qbrick}/ckimage.rb +1 -1
  37. data/app/models/{kuhsaft → qbrick}/cms.rb +2 -2
  38. data/app/models/qbrick/cms_model.rb +25 -0
  39. data/app/models/{kuhsaft → qbrick}/column_brick.rb +2 -2
  40. data/app/models/{kuhsaft → qbrick}/image_brick.rb +2 -2
  41. data/app/models/{kuhsaft → qbrick}/image_size.rb +3 -3
  42. data/app/models/{kuhsaft → qbrick}/link_brick.rb +1 -1
  43. data/app/models/{kuhsaft → qbrick}/page.rb +78 -17
  44. data/app/models/{kuhsaft → qbrick}/page_type.rb +3 -2
  45. data/app/models/{kuhsaft → qbrick}/partition.rb +1 -1
  46. data/app/models/{kuhsaft → qbrick}/placeholder_brick.rb +4 -4
  47. data/app/models/{kuhsaft → qbrick}/publish_state.rb +1 -1
  48. data/app/models/qbrick/setting.rb +13 -0
  49. data/app/models/qbrick/settings_collection.rb +10 -0
  50. data/app/models/{kuhsaft → qbrick}/slider_brick.rb +3 -3
  51. data/app/models/{kuhsaft → qbrick}/text_brick.rb +1 -1
  52. data/app/models/{kuhsaft → qbrick}/two_column_brick.rb +2 -2
  53. data/app/models/{kuhsaft → qbrick}/video_brick.rb +1 -1
  54. data/app/uploaders/qbrick/asset_brick_asset_uploader.rb +26 -0
  55. data/app/uploaders/{kuhsaft → qbrick}/asset_uploader.rb +3 -2
  56. data/app/uploaders/{kuhsaft → qbrick}/ckimage_uploader.rb +1 -1
  57. data/app/uploaders/{kuhsaft → qbrick}/image_brick_image_uploader.rb +4 -4
  58. data/app/views/devise/confirmations/new.html.haml +10 -0
  59. data/app/views/devise/mailer/confirmation_instructions.html.haml +4 -0
  60. data/app/views/devise/mailer/reset_password_instructions.html.haml +6 -0
  61. data/app/views/devise/mailer/unlock_instructions.html.haml +5 -0
  62. data/app/views/devise/passwords/edit.html.haml +10 -0
  63. data/app/views/devise/passwords/new.html.haml +8 -0
  64. data/app/views/devise/registrations/edit.html.haml +9 -0
  65. data/app/views/devise/registrations/new.html.haml +21 -0
  66. data/app/views/devise/sessions/new.html.haml +12 -0
  67. data/app/views/devise/shared/_links.html.haml +19 -0
  68. data/app/views/devise/unlocks/new.html.haml +10 -0
  69. data/app/views/layouts/devise.html.haml +16 -0
  70. data/app/views/layouts/{kuhsaft → qbrick}/cms/application.html.haml +4 -5
  71. data/app/views/layouts/qbrick/cms/ckimages.html.haml +18 -0
  72. data/app/views/{kuhsaft → qbrick}/accordion_bricks/_accordion_brick.html.haml +0 -0
  73. data/app/views/{kuhsaft → qbrick}/accordion_bricks/accordion_brick/_edit.html.haml +0 -0
  74. data/app/views/{kuhsaft → qbrick}/accordion_item_bricks/_accordion_item_brick.html.haml +0 -0
  75. data/app/views/{kuhsaft → qbrick}/accordion_item_bricks/accordion_item_brick/_edit.html.haml +0 -0
  76. data/app/views/{kuhsaft → qbrick}/anchor_bricks/_anchor_brick.html.haml +0 -0
  77. data/app/views/{kuhsaft → qbrick}/anchor_bricks/anchor_brick/_edit.html.haml +0 -0
  78. data/app/views/{kuhsaft → qbrick}/asset_bricks/_asset_brick.html.haml +0 -0
  79. data/app/views/{kuhsaft → qbrick}/asset_bricks/asset_brick/_edit.html.haml +1 -1
  80. data/app/views/qbrick/cms/accounts/edit.html.haml +12 -0
  81. data/app/views/qbrick/cms/admins/_form.html.haml +10 -0
  82. data/app/views/qbrick/cms/admins/edit.html.haml +5 -0
  83. data/app/views/qbrick/cms/admins/index.html.haml +26 -0
  84. data/app/views/qbrick/cms/admins/new.html.haml +5 -0
  85. data/app/views/{kuhsaft → qbrick}/cms/assets/_form.html.haml +0 -0
  86. data/app/views/{kuhsaft → qbrick}/cms/assets/_list.html.haml +0 -0
  87. data/app/views/{kuhsaft → qbrick}/cms/assets/edit.html.haml +0 -0
  88. data/app/views/qbrick/cms/assets/index.html.haml +3 -0
  89. data/app/views/{kuhsaft → qbrick}/cms/assets/new.html.haml +0 -0
  90. data/app/views/qbrick/cms/backend/_brick_clone_menu.html.haml +16 -0
  91. data/app/views/qbrick/cms/backend/_brick_type_dropdown.html.haml +15 -0
  92. data/app/views/{kuhsaft/cms/admin → qbrick/cms/backend}/_empty_state.html.haml +0 -0
  93. data/app/views/{kuhsaft/cms/admin → qbrick/cms/backend}/_flash.html.haml +0 -0
  94. data/app/views/qbrick/cms/backend/_main_navigation.html.haml +20 -0
  95. data/app/views/{kuhsaft → qbrick}/cms/bricks/_brick_header.html.haml +4 -4
  96. data/app/views/{kuhsaft → qbrick}/cms/bricks/_brick_item.html.haml +6 -5
  97. data/app/views/{kuhsaft → qbrick}/cms/bricks/_brick_list.html.haml +1 -1
  98. data/app/views/{kuhsaft → qbrick}/cms/bricks/_new.html.haml +3 -3
  99. data/app/views/{kuhsaft → qbrick}/cms/bricks/_sort_form.html.haml +0 -0
  100. data/app/views/{kuhsaft → qbrick}/cms/bricks/create.js.erb +1 -1
  101. data/app/views/{kuhsaft → qbrick}/cms/bricks/destroy.js.erb +0 -0
  102. data/app/views/{kuhsaft → qbrick}/cms/bricks/new.js.erb +1 -1
  103. data/app/views/{kuhsaft → qbrick}/cms/bricks/update.js.erb +1 -1
  104. data/app/views/{kuhsaft → qbrick}/cms/ckimages/create.html.haml +0 -0
  105. data/app/views/{kuhsaft → qbrick}/cms/ckimages/destroy.js.erb +0 -0
  106. data/app/views/{kuhsaft → qbrick}/cms/ckimages/index.html.haml +1 -1
  107. data/app/views/{kuhsaft → qbrick}/cms/pages/_branch.html.haml +4 -4
  108. data/app/views/{kuhsaft → qbrick}/cms/pages/_form.html.haml +15 -6
  109. data/app/views/qbrick/cms/pages/_mirror_modal.html.haml +52 -0
  110. data/app/views/qbrick/cms/pages/edit.html.haml +16 -0
  111. data/app/views/{kuhsaft → qbrick}/cms/pages/index.html.haml +1 -1
  112. data/app/views/qbrick/cms/pages/mirror.js.haml +5 -0
  113. data/app/views/qbrick/cms/pages/new.html.haml +1 -0
  114. data/app/views/{kuhsaft → qbrick}/cms/pages/show.html.haml +0 -0
  115. data/app/views/{kuhsaft → qbrick}/cms/pages/sort.js.erb +0 -0
  116. data/app/views/qbrick/cms/settings_collections/_form.html.haml +8 -0
  117. data/app/views/qbrick/cms/settings_collections/index.html.haml +6 -0
  118. data/app/views/{kuhsaft → qbrick}/column_bricks/_column_brick.html.haml +0 -0
  119. data/app/views/{kuhsaft → qbrick}/column_bricks/column_brick/_edit.html.haml +0 -0
  120. data/app/views/{kuhsaft → qbrick}/image_bricks/_image_brick.html.haml +0 -0
  121. data/app/views/{kuhsaft → qbrick}/image_bricks/image_brick/_edit.html.haml +1 -1
  122. data/app/views/{kuhsaft → qbrick}/link_bricks/_link_brick.html.haml +0 -0
  123. data/app/views/{kuhsaft → qbrick}/link_bricks/link_brick/_edit.html.haml +1 -1
  124. data/app/views/{kuhsaft → qbrick}/pages/index.html.haml +2 -2
  125. data/app/views/{kuhsaft → qbrick}/pages/show.html.haml +2 -0
  126. data/app/views/{kuhsaft → qbrick}/placeholder_bricks/_placeholder_brick.html.haml +0 -0
  127. data/app/views/qbrick/placeholder_bricks/placeholder_brick/_edit.html.haml +1 -0
  128. data/app/views/{kuhsaft → qbrick}/search/_form.html.haml +0 -0
  129. data/app/views/{kuhsaft → qbrick}/search/_results.html.haml +2 -2
  130. data/app/views/{kuhsaft → qbrick}/search/_results_entry.html.haml +1 -1
  131. data/app/views/{kuhsaft → qbrick}/sitemaps/index.xml.haml +0 -0
  132. data/app/views/{kuhsaft → qbrick}/slider_bricks/_slider_brick.html.haml +0 -0
  133. data/app/views/{kuhsaft → qbrick}/slider_bricks/slider_brick/_edit.html.haml +0 -0
  134. data/app/views/{kuhsaft → qbrick}/text_bricks/_text_brick.html.haml +0 -0
  135. data/app/views/{kuhsaft → qbrick}/text_bricks/text_brick/_edit.html.haml +0 -0
  136. data/app/views/{kuhsaft → qbrick}/two_column_bricks/_two_column_brick.html.haml +1 -1
  137. data/app/views/qbrick/two_column_bricks/two_column_brick/_childs.html.haml +5 -0
  138. data/app/views/qbrick/two_column_bricks/two_column_brick/_edit.html.haml +1 -0
  139. data/app/views/{kuhsaft → qbrick}/video_bricks/_video_brick.html.haml +2 -2
  140. data/app/views/{kuhsaft → qbrick}/video_bricks/video_brick/_edit.html.haml +1 -1
  141. data/config/initializers/devise.rb +259 -0
  142. data/config/locales/cms.de.yml +11 -0
  143. data/config/locales/cms.en.yml +11 -0
  144. data/config/locales/devise.en.yml +60 -0
  145. data/config/locales/models/qbrick/accordion_brick/de.yml +4 -0
  146. data/config/locales/models/qbrick/accordion_brick/en.yml +4 -0
  147. data/config/locales/models/qbrick/accordion_item_brick/de.yml +7 -0
  148. data/config/locales/models/qbrick/accordion_item_brick/en.yml +7 -0
  149. data/config/locales/models/qbrick/admin/de.yml +13 -0
  150. data/config/locales/models/qbrick/admin/en.yml +13 -0
  151. data/config/locales/models/{kuhsaft → qbrick}/anchor_brick/de.yml +2 -2
  152. data/config/locales/models/{kuhsaft → qbrick}/anchor_brick/en.yml +2 -2
  153. data/config/locales/models/{kuhsaft → qbrick}/asset_brick/de.yml +2 -2
  154. data/config/locales/models/{kuhsaft → qbrick}/asset_brick/en.yml +2 -2
  155. data/config/locales/models/{kuhsaft → qbrick}/brick/de.yml +1 -1
  156. data/config/locales/models/{kuhsaft → qbrick}/brick/en.yml +1 -1
  157. data/config/locales/models/qbrick/column_brick/de.yml +4 -0
  158. data/config/locales/models/qbrick/column_brick/en.yml +4 -0
  159. data/config/locales/models/{kuhsaft → qbrick}/image_brick/de.yml +2 -2
  160. data/config/locales/models/{kuhsaft → qbrick}/image_brick/en.yml +2 -2
  161. data/config/locales/models/{kuhsaft → qbrick}/image_size/de.yml +2 -2
  162. data/config/locales/models/{kuhsaft → qbrick}/image_size/en.yml +2 -2
  163. data/config/locales/models/{kuhsaft → qbrick}/link_brick/de.yml +2 -2
  164. data/config/locales/models/{kuhsaft → qbrick}/link_brick/en.yml +2 -2
  165. data/config/locales/models/{kuhsaft → qbrick}/page/de.yml +2 -2
  166. data/config/locales/models/{kuhsaft → qbrick}/page/en.yml +3 -2
  167. data/config/locales/models/{kuhsaft → qbrick}/placeholder_brick/de.yml +2 -2
  168. data/config/locales/models/{kuhsaft → qbrick}/placeholder_brick/en.yml +2 -2
  169. data/config/locales/models/qbrick/slider_brick/de.yml +4 -0
  170. data/config/locales/models/qbrick/slider_brick/en.yml +4 -0
  171. data/config/locales/models/{kuhsaft → qbrick}/text_brick/de.yml +2 -2
  172. data/config/locales/models/{kuhsaft → qbrick}/text_brick/en.yml +2 -2
  173. data/config/locales/models/qbrick/two_column_brick/de.yml +7 -0
  174. data/config/locales/models/qbrick/two_column_brick/en.yml +7 -0
  175. data/config/locales/models/{kuhsaft → qbrick}/video_brick/de.yml +2 -2
  176. data/config/locales/models/{kuhsaft → qbrick}/video_brick/en.yml +2 -2
  177. data/config/locales/views/qbrick/cms/admin/de.yml +36 -0
  178. data/config/locales/views/{kuhsaft → qbrick}/cms/admin/en.yml +1 -1
  179. data/config/locales/views/{kuhsaft → qbrick}/cms/bricks/de.yml +1 -1
  180. data/config/locales/views/{kuhsaft → qbrick}/cms/bricks/en.yml +1 -1
  181. data/config/locales/views/qbrick/cms/navigation.yml +8 -0
  182. data/config/locales/views/{kuhsaft → qbrick}/cms/pages/de.yml +14 -1
  183. data/config/locales/views/{kuhsaft → qbrick}/cms/pages/en.yml +1 -1
  184. data/config/locales/views/qbrick/cms/settings_collection/de.yml +14 -0
  185. data/config/locales/views/qbrick/cms/settings_collection/en.yml +14 -0
  186. data/config/locales/views/{kuhsaft → qbrick}/image_brick/de.yml +1 -1
  187. data/config/locales/views/{kuhsaft → qbrick}/image_brick/en.yml +1 -1
  188. data/config/locales/views/{kuhsaft → qbrick}/search/de.yml +1 -1
  189. data/config/locales/views/{kuhsaft → qbrick}/search/en.yml +1 -1
  190. data/config/locales/views/{kuhsaft → qbrick}/text_brick/de.yml +1 -1
  191. data/config/locales/views/{kuhsaft → qbrick}/text_brick/en.yml +1 -1
  192. data/config/locales/views/{kuhsaft → qbrick}/video_brick/de.yml +1 -1
  193. data/config/locales/views/{kuhsaft → qbrick}/video_brick/en.yml +1 -1
  194. data/config/routes.rb +14 -2
  195. data/db/migrate/{01_create_kuhsaft_pages.rb → 01_create_qbrick_pages.rb} +5 -5
  196. data/db/migrate/{02_create_kuhsaft_bricks.rb → 02_create_qbrick_bricks.rb} +3 -3
  197. data/db/migrate/03_create_qbrick_brick_types.rb +12 -0
  198. data/db/migrate/04_create_qbrick_assets.rb +10 -0
  199. data/db/migrate/05_remove_cms_admin.rb +3 -3
  200. data/db/migrate/06_add_template_name_to_qbrick_bricks.rb +7 -0
  201. data/db/migrate/07_add_default_value_to_brick_type_enabled.rb +2 -2
  202. data/db/migrate/08_add_display_styles_to_bricks.rb +1 -1
  203. data/db/migrate/09_add_additional_fields_to_qbrick_bricks.rb +6 -0
  204. data/db/migrate/10_add_redirect_url_to_qbrick_pages.rb +7 -0
  205. data/db/migrate/11_update_url_and_redirect_url_value.rb +2 -2
  206. data/db/migrate/12_regenerate_fulltext.rb +1 -1
  207. data/db/migrate/13_add_page_title_to_pages.rb +1 -1
  208. data/db/migrate/14_move_qbrick_assets.rb +22 -0
  209. data/db/migrate/15_add_alt_text_to_bricks.rb +1 -1
  210. data/db/migrate/16_update_default_value_for_page_type.rb +2 -2
  211. data/db/migrate/17_set_page_type_to_content_for_empty_fields.rb +2 -2
  212. data/db/migrate/18_add_identifier_to_qbrick_pages.rb +6 -0
  213. data/db/migrate/19_add_col_count_to_bricks.rb +1 -1
  214. data/db/migrate/20_create_qbrick_ckimages.rb +9 -0
  215. data/db/migrate/21_add_google_verification_key_to_qbrick_pages.rb +5 -0
  216. data/db/migrate/22_create_settings.rb +15 -0
  217. data/db/migrate/22_create_settings_collections.rb +11 -0
  218. data/db/migrate/23_add_metadata_to_asset.rb +6 -0
  219. data/db/migrate/23_devise_create_qbrick_admins.rb +42 -0
  220. data/db/seeds.rb +36 -13
  221. data/lib/generators/{kuhsaft → qbrick}/assets/install_generator.rb +5 -5
  222. data/lib/generators/qbrick/custom_model_generator.rb +117 -0
  223. data/lib/generators/{kuhsaft → qbrick}/translations/add_generator.rb +4 -4
  224. data/lib/qbrick.rb +24 -0
  225. data/lib/{kuhsaft → qbrick}/brick_list.rb +3 -3
  226. data/lib/{kuhsaft → qbrick}/engine.rb +5 -5
  227. data/lib/{kuhsaft → qbrick}/gridded.rb +1 -1
  228. data/lib/{kuhsaft → qbrick}/image_uploader_mounting.rb +2 -2
  229. data/lib/{kuhsaft → qbrick}/orderable.rb +1 -1
  230. data/lib/{kuhsaft → qbrick}/page_tree.rb +1 -1
  231. data/lib/{kuhsaft → qbrick}/partial_extractor.rb +1 -1
  232. data/lib/{kuhsaft → qbrick}/searchable.rb +5 -3
  233. data/lib/{kuhsaft → qbrick}/touch_placeholders.rb +4 -4
  234. data/lib/{kuhsaft → qbrick}/translatable.rb +1 -1
  235. data/lib/qbrick/version.rb +3 -0
  236. data/lib/tasks/{kuhsaft_tasks.rake → qbrick_tasks.rake} +5 -5
  237. data/lib/templates/{kuhsaft → qbrick}/assets/ck-config.js.coffee +0 -0
  238. data/lib/templates/{kuhsaft → qbrick}/assets/customizations.css.sass +0 -0
  239. data/lib/templates/{kuhsaft → qbrick}/assets/customizations.js.coffee +0 -0
  240. data/lib/templates/qbrick/custom_model_generator/base_controller.rb +17 -0
  241. data/lib/templates/qbrick/custom_model_generator/inherited_views/base/_form.html.haml +12 -0
  242. data/lib/templates/qbrick/custom_model_generator/inherited_views/base/edit.html.haml +5 -0
  243. data/lib/templates/qbrick/custom_model_generator/inherited_views/base/index.html.haml +28 -0
  244. data/lib/templates/qbrick/custom_model_generator/inherited_views/base/new.html.haml +5 -0
  245. data/lib/templates/qbrick/custom_model_generator/translations/qbrick_base.yml +11 -0
  246. data/lib/templates/qbrick/custom_model_generator/translations/resource.yml.erb +14 -0
  247. data/lib/templates/qbrick/translations/add_translation.erb +8 -0
  248. data/spec/command_wrapper_helper.rb +21 -0
  249. data/spec/controllers/{kuhsaft → qbrick}/api/pages_controller_spec.rb +5 -5
  250. data/spec/controllers/qbrick/cms/pages_controller_spec.rb +61 -0
  251. data/spec/controllers/{kuhsaft → qbrick}/pages_controller_spec.rb +11 -13
  252. data/spec/controllers/{kuhsaft → qbrick}/sitemaps_controller_spec.rb +2 -2
  253. data/spec/dummy/app/assets/javascripts/{kuhsaft → qbrick}/cms/ck-config.js.coffee +0 -0
  254. data/spec/dummy/app/assets/javascripts/{kuhsaft → qbrick}/cms/customizations.js.coffee +0 -0
  255. data/spec/dummy/app/assets/stylesheets/{kuhsaft → qbrick}/cms/customizations.css.sass +0 -0
  256. data/spec/dummy/app/controllers/application_controller.rb +1 -1
  257. data/spec/dummy/config/application.rb +3 -2
  258. data/spec/dummy/config/database.yml +2 -2
  259. data/spec/dummy/config/environments/production.rb +2 -2
  260. data/spec/dummy/config/environments/test.rb +1 -1
  261. data/spec/dummy/config/initializers/{kuhsaft.rb → qbrick.rb} +1 -1
  262. data/spec/dummy/config/routes.rb +4 -1
  263. data/spec/factories.rb +24 -9
  264. data/spec/features/administrator_management_spec.rb +70 -0
  265. data/spec/features/cms_pages_spec.rb +15 -11
  266. data/spec/features/search_spec.rb +15 -15
  267. data/spec/features_helper.rb +36 -0
  268. data/spec/generators/custom_model_generator_spec.rb +83 -0
  269. data/spec/helpers/{kuhsaft → qbrick}/cms/admin_helper_spec.rb +5 -5
  270. data/spec/helpers/{kuhsaft → qbrick}/cms/pages_helper_spec.rb +6 -6
  271. data/spec/helpers/{kuhsaft → qbrick}/pages_helper_spec.rb +4 -5
  272. data/spec/lib/brick_list_spec.rb +12 -11
  273. data/spec/lib/engine_spec.rb +5 -9
  274. data/spec/lib/gridded_spec.rb +4 -5
  275. data/spec/lib/image_uploader_mounting_spec.rb +3 -4
  276. data/spec/lib/page_tree_spec.rb +5 -5
  277. data/spec/lib/searchable_spec.rb +7 -8
  278. data/spec/lib/touch_placeholders_spec.rb +4 -5
  279. data/spec/lib/translatable_spec.rb +20 -20
  280. data/spec/models/accordion_brick_spec.rb +7 -8
  281. data/spec/models/accordion_item_brick_spec.rb +8 -9
  282. data/spec/models/anchor_brick_spec.rb +5 -6
  283. data/spec/models/asset_brick_spec.rb +8 -9
  284. data/spec/models/asset_spec.rb +9 -11
  285. data/spec/models/brick_spec.rb +34 -34
  286. data/spec/models/brick_type_filter_spec.rb +14 -14
  287. data/spec/models/column_brick_spec.rb +6 -7
  288. data/spec/models/image_brick_spec.rb +9 -10
  289. data/spec/models/image_size_spec.rb +8 -8
  290. data/spec/models/link_brick_spec.rb +9 -10
  291. data/spec/models/page_spec.rb +113 -73
  292. data/spec/models/placeholder_brick_spec.rb +12 -13
  293. data/spec/models/publish_state_spec.rb +7 -7
  294. data/spec/models/setting_spec.rb +28 -0
  295. data/spec/models/slider_brick_spec.rb +5 -6
  296. data/spec/models/text_brick_spec.rb +5 -5
  297. data/spec/models/two_column_brick_spec.rb +14 -15
  298. data/spec/models/video_brick_spec.rb +5 -6
  299. data/spec/postgres_helper.rb +66 -0
  300. data/spec/{kuhsaft_spec.rb → qbrick_spec.rb} +2 -2
  301. data/spec/spec_helper.rb +23 -10
  302. data/spec/support/{kuhsaft_spec_helper.rb → qbrick_spec_helper.rb} +1 -1
  303. data/spec/support/write_expectation.rb +2 -2
  304. data/spec/views/{kuhsaft → qbrick}/sitemaps/index.xml.haml_spec.rb +3 -3
  305. metadata +451 -330
  306. data/app/controllers/kuhsaft/cms/admin_controller.rb +0 -18
  307. data/app/controllers/kuhsaft/cms/pages_controller.rb +0 -71
  308. data/app/helpers/kuhsaft/cms/admin_helper.rb +0 -21
  309. data/app/uploaders/kuhsaft/asset_brick_asset_uploader.rb +0 -43
  310. data/app/views/kuhsaft/cms/admin/_brick_type_dropdown.html.haml +0 -14
  311. data/app/views/kuhsaft/cms/admin/_content_language_switch.html.haml +0 -7
  312. data/app/views/kuhsaft/cms/admin/_main_navigation.html.haml +0 -6
  313. data/app/views/kuhsaft/cms/assets/index.html.haml +0 -3
  314. data/app/views/kuhsaft/cms/pages/edit.html.haml +0 -16
  315. data/app/views/kuhsaft/cms/pages/new.html.haml +0 -1
  316. data/app/views/kuhsaft/placeholder_bricks/placeholder_brick/_edit.html.haml +0 -1
  317. data/app/views/kuhsaft/two_column_bricks/two_column_brick/_childs.html.haml +0 -5
  318. data/app/views/kuhsaft/two_column_bricks/two_column_brick/_edit.html.haml +0 -1
  319. data/app/views/layouts/kuhsaft/cms/ckimages.html.haml +0 -18
  320. data/config/locales/models/kuhsaft/accordion_brick/de.yml +0 -4
  321. data/config/locales/models/kuhsaft/accordion_brick/en.yml +0 -4
  322. data/config/locales/models/kuhsaft/accordion_item_brick/de.yml +0 -7
  323. data/config/locales/models/kuhsaft/accordion_item_brick/en.yml +0 -7
  324. data/config/locales/models/kuhsaft/column_brick/de.yml +0 -4
  325. data/config/locales/models/kuhsaft/column_brick/en.yml +0 -4
  326. data/config/locales/models/kuhsaft/slider_brick/de.yml +0 -4
  327. data/config/locales/models/kuhsaft/slider_brick/en.yml +0 -4
  328. data/config/locales/models/kuhsaft/two_column_brick/de.yml +0 -7
  329. data/config/locales/models/kuhsaft/two_column_brick/en.yml +0 -7
  330. data/config/locales/views/kuhsaft/cms/admin/de.yml +0 -13
  331. data/db/migrate/03_create_kuhsaft_brick_types.rb +0 -12
  332. data/db/migrate/04_create_kuhsaft_assets.rb +0 -10
  333. data/db/migrate/06_add_template_name_to_kuhsaft_bricks.rb +0 -7
  334. data/db/migrate/09_add_additional_fields_to_kuhsaft_bricks.rb +0 -6
  335. data/db/migrate/10_add_redirect_url_to_kuhsaft_pages.rb +0 -7
  336. data/db/migrate/14_move_kuhsaft_assets.rb +0 -22
  337. data/db/migrate/18_add_identifier_to_kuhsaft_pages.rb +0 -6
  338. data/db/migrate/20_create_kuhsaft_ckimages.rb +0 -9
  339. data/lib/kuhsaft.rb +0 -22
  340. data/lib/kuhsaft/version.rb +0 -3
  341. data/lib/templates/kuhsaft/translations/add_translation.erb +0 -8
@@ -1,8 +1,8 @@
1
- require_relative '../../../lib/kuhsaft/brick_list'
1
+ require_relative '../../../lib/qbrick/brick_list'
2
2
 
3
- module Kuhsaft
3
+ module Qbrick
4
4
  class Brick < ActiveRecord::Base
5
- include Kuhsaft::BrickList
5
+ include Qbrick::BrickList
6
6
 
7
7
  belongs_to :brick_list, polymorphic: true, touch: true
8
8
 
@@ -32,13 +32,16 @@ module Kuhsaft
32
32
 
33
33
  after_initialize do
34
34
  self.position ||= has_siblings? ? brick_list.bricks.maximum(:position).to_i + 1 : 1
35
+ self.image_size ||= ImageSize.all.first.name.to_s
35
36
  end
36
37
 
37
38
  after_save do
38
39
  # TODO: replace callback with fulltext row on each
39
40
  # searchable model
40
- brick_list.update_fulltext
41
- brick_list.save!
41
+ if brick_list
42
+ brick_list.update_fulltext
43
+ brick_list.save!
44
+ end
42
45
  end
43
46
 
44
47
  # TODO: yes. temporary workaround. see above
@@ -93,7 +96,7 @@ module Kuhsaft
93
96
  end
94
97
 
95
98
  def brick_list_type
96
- 'Kuhsaft::Brick'
99
+ 'Qbrick::Brick'
97
100
  end
98
101
 
99
102
  # Returns a css classname suitable for use in the frontend
@@ -127,11 +130,11 @@ module Kuhsaft
127
130
  end
128
131
 
129
132
  def partial_digest(name)
130
- ActionView::Digestor.digest(name, 'haml', ApplicationController.new.lookup_context, partial: true)
133
+ ActionView::Digestor.digest(name: name, finder: ApplicationController.new.lookup_context, partial: true)
131
134
  end
132
135
 
133
136
  def cache_key
134
- super + partial_digest(to_partial_path)
137
+ super + partial_digest(to_partial_path)
135
138
  end
136
139
  end
137
140
  end
@@ -1,4 +1,4 @@
1
- module Kuhsaft
1
+ module Qbrick
2
2
  class BrickType < ActiveRecord::Base
3
3
  scope :grouped, -> { order('`group`, `id` asc') }
4
4
  scope :enabled, -> { where(enabled: true) }
@@ -1,17 +1,17 @@
1
1
 
2
- module Kuhsaft
2
+ module Qbrick
3
3
  class BrickTypeFilter < SimpleDelegator
4
4
  def empty?
5
5
  !(respond_to?(:user_can_add_childs?) && user_can_add_childs? && !allowed.empty?)
6
6
  end
7
7
 
8
8
  def allowed
9
- if Kuhsaft::BrickType.enabled.count.zero?
9
+ if Qbrick::BrickType.enabled.count.zero?
10
10
  []
11
11
  elsif allowed_brick_types.empty?
12
- Kuhsaft::BrickType.enabled
12
+ Qbrick::BrickType.enabled
13
13
  else
14
- Kuhsaft::BrickType.enabled.constrained(allowed_brick_types)
14
+ Qbrick::BrickType.enabled.constrained(allowed_brick_types)
15
15
  end
16
16
  end
17
17
  end
@@ -1,4 +1,4 @@
1
- module Kuhsaft
1
+ module Qbrick
2
2
  class Ckimage < ActiveRecord::Base
3
3
  mount_uploader :file, CkimageUploader
4
4
  end
@@ -1,7 +1,7 @@
1
- module Kuhsaft
1
+ module Qbrick
2
2
  module Cms
3
3
  def self.table_name_prefix
4
- 'kuhsaft_cms_'
4
+ 'qbrick_cms_'
5
5
  end
6
6
  end
7
7
  end
@@ -0,0 +1,25 @@
1
+ module Qbrick
2
+ module CMSModel
3
+ def self.included(base)
4
+ base.extend(ClassMethods)
5
+ end
6
+
7
+ module ClassMethods
8
+ def index_attributes(*attributes)
9
+ if attributes.empty?
10
+ @shoestrap_index_attributes
11
+ else
12
+ @shoestrap_index_attributes = attributes
13
+ end
14
+ end
15
+
16
+ def editable_attributes(*attributes)
17
+ if attributes.empty?
18
+ @shoestrap_editable_attributes
19
+ else
20
+ @shoestrap_editable_attributes = attributes
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -1,6 +1,6 @@
1
- module Kuhsaft
1
+ module Qbrick
2
2
  class ColumnBrick < Brick
3
- include Kuhsaft::BrickList
3
+ include Qbrick::BrickList
4
4
  acts_as_brick_list
5
5
 
6
6
  #
@@ -1,6 +1,6 @@
1
- module Kuhsaft
1
+ module Qbrick
2
2
  class ImageBrick < Brick
3
- include Kuhsaft::ImageUploaderMounting
3
+ include Qbrick::ImageUploaderMounting
4
4
 
5
5
  validates :image,
6
6
  :image_size, presence: true
@@ -1,9 +1,9 @@
1
- module Kuhsaft
1
+ module Qbrick
2
2
  class ImageSize
3
3
  attr_accessor :name, :width, :height
4
4
 
5
5
  def label
6
- I18n.t("activerecord.attributes.kuhsaft/image_size.sizes.#{name}")
6
+ I18n.t("activerecord.attributes.qbrick/image_size.sizes.#{name}")
7
7
  end
8
8
 
9
9
  class << self
@@ -24,7 +24,7 @@ module Kuhsaft
24
24
  end
25
25
 
26
26
  def add(name, width, height)
27
- @all << ImageSize.new.tap do |size|
27
+ all << ImageSize.new.tap do |size|
28
28
  size.name = name.to_sym
29
29
  size.width = width
30
30
  size.height = height
@@ -1,4 +1,4 @@
1
- module Kuhsaft
1
+ module Qbrick
2
2
  class LinkBrick < Brick
3
3
  validates :href, :caption, presence: true
4
4
 
@@ -1,10 +1,10 @@
1
- module Kuhsaft
1
+ module Qbrick
2
2
  class Page < ActiveRecord::Base
3
- include Kuhsaft::Engine.routes.url_helpers
4
- include Kuhsaft::Orderable
5
- include Kuhsaft::Translatable
6
- include Kuhsaft::BrickList
7
- include Kuhsaft::Searchable
3
+ include Qbrick::Engine.routes.url_helpers
4
+ include Qbrick::Orderable
5
+ include Qbrick::Translatable
6
+ include Qbrick::BrickList
7
+ include Qbrick::Searchable
8
8
 
9
9
  has_ancestry
10
10
  acts_as_brick_list
@@ -14,15 +14,15 @@ module Kuhsaft
14
14
 
15
15
  default_scope { order 'position ASC' }
16
16
 
17
- scope :published, -> { where published: Kuhsaft::PublishState::PUBLISHED }
17
+ scope :published, -> { where published: Qbrick::PublishState::PUBLISHED }
18
18
  scope :translated, -> { where "url_#{I18n.locale.to_s.underscore} is not null" }
19
19
 
20
- scope :content_page, -> { where page_type: Kuhsaft::PageType::CONTENT }
20
+ scope :content_page, -> { where page_type: Qbrick::PageType::CONTENT }
21
21
 
22
22
  scope :navigation, lambda { |slug|
23
23
  where(
24
24
  locale_attr(:slug) => slug,
25
- locale_attr(:page_type) => Kuhsaft::PageType::NAVIGATION)
25
+ locale_attr(:page_type) => Qbrick::PageType::NAVIGATION)
26
26
  }
27
27
 
28
28
  before_validation :create_slug, :create_url
@@ -52,7 +52,12 @@ module Kuhsaft
52
52
  end
53
53
 
54
54
  def by_identifier(identifier)
55
- where(identifier: identifier).first
55
+ find_by(identifier: identifier)
56
+ end
57
+
58
+ def all_urls
59
+ url_columns = column_names.select { |col| col.start_with? 'url_' }
60
+ pluck(*url_columns).flatten.compact.sort.uniq.map { |r| "/#{r}" }
56
61
  end
57
62
  end
58
63
 
@@ -61,7 +66,7 @@ module Kuhsaft
61
66
  end
62
67
 
63
68
  def published?
64
- published == Kuhsaft::PublishState::PUBLISHED
69
+ published == Qbrick::PublishState::PUBLISHED
65
70
  end
66
71
 
67
72
  def state_class
@@ -69,11 +74,11 @@ module Kuhsaft
69
74
  end
70
75
 
71
76
  def redirect?
72
- page_type == Kuhsaft::PageType::REDIRECT
77
+ page_type == Qbrick::PageType::REDIRECT || page_type == Qbrick::PageType::CUSTOM
73
78
  end
74
79
 
75
80
  def navigation?
76
- page_type == Kuhsaft::PageType::NAVIGATION
81
+ page_type == Qbrick::PageType::NAVIGATION
77
82
  end
78
83
 
79
84
  def parent_pages
@@ -84,6 +89,21 @@ module Kuhsaft
84
89
  url.present? && title.present? && slug.present?
85
90
  end
86
91
 
92
+ def translated_to?(raw_locale)
93
+ locale = raw_locale.to_s.underscore
94
+ send("url_#{locale}").present? && send("title_#{locale}").present? && send("slug_#{locale}").present?
95
+ end
96
+
97
+ def translated_link_for(locale)
98
+ if translated_to? locale
99
+ I18n.with_locale locale do
100
+ url_with_locale
101
+ end
102
+ else
103
+ Qbrick::Page.roots.first.link
104
+ end
105
+ end
106
+
87
107
  def link
88
108
  if bricks.count == 0 && children.count > 0
89
109
  children.first.link
@@ -134,15 +154,15 @@ module Kuhsaft
134
154
  end
135
155
 
136
156
  def brick_list_type
137
- 'Kuhsaft::Page'
157
+ 'Qbrick::Page'
138
158
  end
139
159
 
140
160
  def to_style_class
141
- 'kuhsaft-page'
161
+ 'qbrick-page'
142
162
  end
143
163
 
144
164
  def allowed_brick_types
145
- Kuhsaft::BrickType.enabled.pluck(:class_name) - ['Kuhsaft::AccordionItemBrick']
165
+ Qbrick::BrickType.enabled.pluck(:class_name) - ['Qbrick::AccordionItemBrick']
146
166
  end
147
167
 
148
168
  def cache_key
@@ -150,11 +170,52 @@ module Kuhsaft
150
170
  end
151
171
 
152
172
  def as_json
153
- Hash.new.tap do |json|
173
+ {}.tap do |json|
154
174
  json['title'] = send("title_#{I18n.locale.to_s.underscore}")
155
175
  json['pretty_url'] = '/' + send("url_#{I18n.locale.to_s.underscore}")
156
176
  json['url'] = "/pages/#{id}"
157
177
  end
158
178
  end
179
+
180
+ def clear_bricks_for_locale(locale)
181
+ I18n.with_locale locale do
182
+ bricks.destroy_all
183
+ end
184
+ end
185
+
186
+ def copy_assets_to_cloned_brick(brick, new_brick)
187
+ brick.class.uploaders.keys.each do |key|
188
+ new_brick.update_attribute(key.to_s, File.open(brick.send(key.to_s).path))
189
+ end
190
+ end
191
+
192
+ def clone_child_bricks(brick, to_locale, new_brick_list_id)
193
+ brick.bricks.each do |nested_brick|
194
+ clone_brick_to(nested_brick, to_locale, new_brick_list_id)
195
+ end
196
+ end
197
+
198
+ def clone_bricks_to(locale)
199
+ failed_to_clone = []
200
+ clear_association_cache
201
+
202
+ bricks.each do |brick|
203
+ failed_to_clone << brick unless clone_brick_to(brick, locale, id)
204
+ end
205
+ failed_to_clone
206
+ end
207
+
208
+ def clone_brick_to(brick, to_locale, new_brick_list_id)
209
+ new_brick = brick.deep_dup
210
+
211
+ copy_assets_to_cloned_brick(brick, new_brick) if brick.uploader?
212
+
213
+ new_brick.update_attribute(:locale, to_locale)
214
+ new_brick.update_attribute(:brick_list_id, new_brick_list_id)
215
+
216
+ clone_child_bricks(brick, to_locale, new_brick.id) if brick.respond_to?(:bricks)
217
+
218
+ new_brick.save
219
+ end
159
220
  end
160
221
  end
@@ -1,11 +1,12 @@
1
- module Kuhsaft
1
+ module Qbrick
2
2
  class PageType
3
3
  REDIRECT = 'redirect'
4
4
  NAVIGATION = 'navigation'
5
5
  CONTENT = 'content'
6
+ CUSTOM = 'custom'
6
7
 
7
8
  def self.all
8
- [CONTENT, REDIRECT, NAVIGATION]
9
+ [CONTENT, REDIRECT, NAVIGATION, CUSTOM]
9
10
  end
10
11
  end
11
12
  end
@@ -1,4 +1,4 @@
1
- module Kuhsaft
1
+ module Qbrick
2
2
  class Partition
3
3
  attr_reader :name, :id
4
4
 
@@ -1,11 +1,11 @@
1
1
  require_relative './brick'
2
2
 
3
- module Kuhsaft
3
+ module Qbrick
4
4
  class PlaceholderBrick < Brick
5
- PARTIAL_PATH = '/app/views/kuhsaft/placeholder_bricks/partials/_*.haml'
5
+ PARTIAL_PATH = '/app/views/qbrick/placeholder_bricks/partials/_*.haml'
6
6
 
7
7
  def self.available_partials
8
- @partials ||= Kuhsaft::PartialExtractor.new.partials(PARTIAL_PATH)
8
+ @partials ||= Qbrick::PartialExtractor.new.partials(PARTIAL_PATH)
9
9
  end
10
10
 
11
11
  def user_can_add_childs?
@@ -13,7 +13,7 @@ module Kuhsaft
13
13
  end
14
14
 
15
15
  def partial_name
16
- "kuhsaft/placeholder_bricks/partials/#{template_name}"
16
+ "qbrick/placeholder_bricks/partials/#{template_name}"
17
17
  end
18
18
 
19
19
  def cache_key
@@ -1,4 +1,4 @@
1
- module Kuhsaft
1
+ module Qbrick
2
2
  class PublishState
3
3
  extend ActiveModel::Translation
4
4
 
@@ -0,0 +1,13 @@
1
+ module Qbrick
2
+ class Setting < ActiveRecord::Base
3
+ belongs_to :settings_collection
4
+
5
+ default_scope { order('id ASC') }
6
+
7
+ class << self
8
+ def [](key)
9
+ find_by_key(key.to_s).try(:value) || ''
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,10 @@
1
+ module Qbrick
2
+ class SettingsCollection < ActiveRecord::Base
3
+ has_many :settings
4
+
5
+ accepts_nested_attributes_for :settings
6
+
7
+ # TODO: handle localized settings
8
+ # TODO: Settings attached to page/etc
9
+ end
10
+ end
@@ -1,6 +1,6 @@
1
- module Kuhsaft
1
+ module Qbrick
2
2
  class SliderBrick < Brick
3
- include Kuhsaft::BrickList
3
+ include Qbrick::BrickList
4
4
 
5
5
  acts_as_brick_list
6
6
 
@@ -12,7 +12,7 @@ module Kuhsaft
12
12
  end
13
13
 
14
14
  def allowed_brick_types
15
- %w(Kuhsaft::ImageBrick Kuhsaft::VideoBrick)
15
+ %w(Qbrick::ImageBrick Qbrick::VideoBrick)
16
16
  end
17
17
  end
18
18
  end
@@ -1,6 +1,6 @@
1
1
  require 'htmlentities'
2
2
 
3
- module Kuhsaft
3
+ module Qbrick
4
4
  class TextBrick < Brick
5
5
  include ActionView::Helpers::SanitizeHelper
6
6
  HTML_ENTITIES = HTMLEntities.new