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.
Files changed (297) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +423 -0
  3. data/Rakefile +82 -0
  4. data/app/assets/javascripts/ckeditor/plugins/adv_link/LICENSE.txt +674 -0
  5. data/app/assets/javascripts/ckeditor/plugins/adv_link/README.md +62 -0
  6. data/app/assets/javascripts/ckeditor/plugins/adv_link/dialogs/anchor.js.coffee +81 -0
  7. data/app/assets/javascripts/ckeditor/plugins/adv_link/dialogs/link.js.coffee +1353 -0
  8. data/app/assets/javascripts/ckeditor/plugins/adv_link/images/anchor.png +0 -0
  9. data/app/assets/javascripts/ckeditor/plugins/adv_link/images/hidpi/anchor.png +0 -0
  10. data/app/assets/javascripts/ckeditor/plugins/adv_link/lang/de.js +68 -0
  11. data/app/assets/javascripts/ckeditor/plugins/adv_link/lang/en.js +68 -0
  12. data/app/assets/javascripts/ckeditor/plugins/adv_link/plugin.js.coffee +282 -0
  13. data/app/assets/javascripts/kuhsaft/application.js.coffee +7 -0
  14. data/app/assets/javascripts/kuhsaft/cms/application.js.coffee.erb +136 -0
  15. data/app/assets/javascripts/kuhsaft/views/read_more_view.js.coffee +17 -0
  16. data/app/assets/stylesheets/kuhsaft/application.css.sass +1 -0
  17. data/app/assets/stylesheets/kuhsaft/cms/application.css.sass +204 -0
  18. data/app/assets/stylesheets/kuhsaft/modules/_text_brick.css.sass +16 -0
  19. data/app/controllers/kuhsaft/api/pages_controller.rb +14 -0
  20. data/app/controllers/kuhsaft/cms/admin_controller.rb +18 -0
  21. data/app/controllers/kuhsaft/cms/assets_controller.rb +38 -0
  22. data/app/controllers/kuhsaft/cms/bricks_controller.rb +61 -0
  23. data/app/controllers/kuhsaft/cms/ckimages_controller.rb +26 -0
  24. data/app/controllers/kuhsaft/cms/pages_controller.rb +71 -0
  25. data/app/controllers/kuhsaft/pages_controller.rb +38 -0
  26. data/app/controllers/kuhsaft/sitemaps_controller.rb +12 -0
  27. data/app/helpers/cms_helper.rb +27 -0
  28. data/app/helpers/kuhsaft/admin_helper.rb +20 -0
  29. data/app/helpers/kuhsaft/cms/admin_helper.rb +21 -0
  30. data/app/helpers/kuhsaft/cms/pages_helper.rb +17 -0
  31. data/app/helpers/pages_helper.rb +49 -0
  32. data/app/helpers/sitemaps_helper.rb +12 -0
  33. data/app/models/kuhsaft/accordion_brick.rb +15 -0
  34. data/app/models/kuhsaft/accordion_item_brick.rb +21 -0
  35. data/app/models/kuhsaft/anchor_brick.rb +17 -0
  36. data/app/models/kuhsaft/asset.rb +29 -0
  37. data/app/models/kuhsaft/asset_brick.rb +26 -0
  38. data/app/models/kuhsaft/brick.rb +137 -0
  39. data/app/models/kuhsaft/brick_type.rb +7 -0
  40. data/app/models/kuhsaft/brick_type_filter.rb +18 -0
  41. data/app/models/kuhsaft/ckimage.rb +5 -0
  42. data/app/models/kuhsaft/cms.rb +7 -0
  43. data/app/models/kuhsaft/column_brick.rb +22 -0
  44. data/app/models/kuhsaft/image_brick.rb +16 -0
  45. data/app/models/kuhsaft/image_size.rb +51 -0
  46. data/app/models/kuhsaft/link_brick.rb +21 -0
  47. data/app/models/kuhsaft/page.rb +160 -0
  48. data/app/models/kuhsaft/page_type.rb +11 -0
  49. data/app/models/kuhsaft/partition.rb +18 -0
  50. data/app/models/kuhsaft/placeholder_brick.rb +23 -0
  51. data/app/models/kuhsaft/publish_state.rb +24 -0
  52. data/app/models/kuhsaft/slider_brick.rb +18 -0
  53. data/app/models/kuhsaft/text_brick.rb +23 -0
  54. data/app/models/kuhsaft/two_column_brick.rb +46 -0
  55. data/app/models/kuhsaft/video_brick.rb +22 -0
  56. data/app/uploaders/kuhsaft/asset_brick_asset_uploader.rb +43 -0
  57. data/app/uploaders/kuhsaft/asset_uploader.rb +50 -0
  58. data/app/uploaders/kuhsaft/ckimage_uploader.rb +16 -0
  59. data/app/uploaders/kuhsaft/image_brick_image_uploader.rb +35 -0
  60. data/app/views/kuhsaft/accordion_bricks/_accordion_brick.html.haml +3 -0
  61. data/app/views/kuhsaft/accordion_bricks/accordion_brick/_edit.html.haml +0 -0
  62. data/app/views/kuhsaft/accordion_item_bricks/_accordion_item_brick.html.haml +8 -0
  63. data/app/views/kuhsaft/accordion_item_bricks/accordion_item_brick/_edit.html.haml +1 -0
  64. data/app/views/kuhsaft/anchor_bricks/_anchor_brick.html.haml +1 -0
  65. data/app/views/kuhsaft/anchor_bricks/anchor_brick/_edit.html.haml +1 -0
  66. data/app/views/kuhsaft/asset_bricks/_asset_brick.html.haml +2 -0
  67. data/app/views/kuhsaft/asset_bricks/asset_brick/_edit.html.haml +8 -0
  68. data/app/views/kuhsaft/cms/admin/_brick_type_dropdown.html.haml +14 -0
  69. data/app/views/kuhsaft/cms/admin/_content_language_switch.html.haml +7 -0
  70. data/app/views/kuhsaft/cms/admin/_empty_state.html.haml +5 -0
  71. data/app/views/kuhsaft/cms/admin/_flash.html.haml +7 -0
  72. data/app/views/kuhsaft/cms/admin/_main_navigation.html.haml +6 -0
  73. data/app/views/kuhsaft/cms/assets/_form.html.haml +15 -0
  74. data/app/views/kuhsaft/cms/assets/_list.html.haml +11 -0
  75. data/app/views/kuhsaft/cms/assets/edit.html.haml +2 -0
  76. data/app/views/kuhsaft/cms/assets/index.html.haml +3 -0
  77. data/app/views/kuhsaft/cms/assets/new.html.haml +2 -0
  78. data/app/views/kuhsaft/cms/bricks/_brick_header.html.haml +43 -0
  79. data/app/views/kuhsaft/cms/bricks/_brick_item.html.haml +25 -0
  80. data/app/views/kuhsaft/cms/bricks/_brick_list.html.haml +4 -0
  81. data/app/views/kuhsaft/cms/bricks/_new.html.haml +41 -0
  82. data/app/views/kuhsaft/cms/bricks/_sort_form.html.haml +3 -0
  83. data/app/views/kuhsaft/cms/bricks/create.js.erb +11 -0
  84. data/app/views/kuhsaft/cms/bricks/destroy.js.erb +10 -0
  85. data/app/views/kuhsaft/cms/bricks/new.js.erb +14 -0
  86. data/app/views/kuhsaft/cms/bricks/update.js.erb +8 -0
  87. data/app/views/kuhsaft/cms/ckimages/create.html.haml +11 -0
  88. data/app/views/kuhsaft/cms/ckimages/destroy.js.erb +2 -0
  89. data/app/views/kuhsaft/cms/ckimages/index.html.haml +13 -0
  90. data/app/views/kuhsaft/cms/pages/_branch.html.haml +19 -0
  91. data/app/views/kuhsaft/cms/pages/_form.html.haml +45 -0
  92. data/app/views/kuhsaft/cms/pages/edit.html.haml +16 -0
  93. data/app/views/kuhsaft/cms/pages/index.html.haml +14 -0
  94. data/app/views/kuhsaft/cms/pages/new.html.haml +1 -0
  95. data/app/views/kuhsaft/cms/pages/show.html.haml +0 -0
  96. data/app/views/kuhsaft/cms/pages/sort.js.erb +0 -0
  97. data/app/views/kuhsaft/column_bricks/_column_brick.html.haml +3 -0
  98. data/app/views/kuhsaft/column_bricks/column_brick/_edit.html.haml +0 -0
  99. data/app/views/kuhsaft/image_bricks/_image_brick.html.haml +11 -0
  100. data/app/views/kuhsaft/image_bricks/image_brick/_edit.html.haml +13 -0
  101. data/app/views/kuhsaft/link_bricks/_link_brick.html.haml +2 -0
  102. data/app/views/kuhsaft/link_bricks/link_brick/_edit.html.haml +4 -0
  103. data/app/views/kuhsaft/pages/index.html.haml +7 -0
  104. data/app/views/kuhsaft/pages/show.html.haml +11 -0
  105. data/app/views/kuhsaft/placeholder_bricks/_placeholder_brick.html.haml +2 -0
  106. data/app/views/kuhsaft/placeholder_bricks/placeholder_brick/_edit.html.haml +1 -0
  107. data/app/views/kuhsaft/search/_form.html.haml +2 -0
  108. data/app/views/kuhsaft/search/_results.html.haml +8 -0
  109. data/app/views/kuhsaft/search/_results_entry.html.haml +13 -0
  110. data/app/views/kuhsaft/sitemaps/index.xml.haml +9 -0
  111. data/app/views/kuhsaft/slider_bricks/_slider_brick.html.haml +10 -0
  112. data/app/views/kuhsaft/slider_bricks/slider_brick/_edit.html.haml +0 -0
  113. data/app/views/kuhsaft/text_bricks/_text_brick.html.haml +11 -0
  114. data/app/views/kuhsaft/text_bricks/text_brick/_edit.html.haml +2 -0
  115. data/app/views/kuhsaft/two_column_bricks/_two_column_brick.html.haml +3 -0
  116. data/app/views/kuhsaft/two_column_bricks/two_column_brick/_childs.html.haml +5 -0
  117. data/app/views/kuhsaft/two_column_bricks/two_column_brick/_edit.html.haml +1 -0
  118. data/app/views/kuhsaft/video_bricks/_video_brick.html.haml +9 -0
  119. data/app/views/kuhsaft/video_bricks/video_brick/_edit.html.haml +8 -0
  120. data/app/views/layouts/kuhsaft/cms/application.html.haml +25 -0
  121. data/app/views/layouts/kuhsaft/cms/ckimages.html.haml +18 -0
  122. data/config/initializers/simple_form.rb +142 -0
  123. data/config/initializers/simple_form_bootstrap.rb +45 -0
  124. data/config/locales/de.yml +207 -0
  125. data/config/locales/en.yml +211 -0
  126. data/config/locales/models/kuhsaft/accordion_brick/de.yml +4 -0
  127. data/config/locales/models/kuhsaft/accordion_brick/en.yml +4 -0
  128. data/config/locales/models/kuhsaft/accordion_item_brick/de.yml +7 -0
  129. data/config/locales/models/kuhsaft/accordion_item_brick/en.yml +7 -0
  130. data/config/locales/models/kuhsaft/anchor_brick/de.yml +7 -0
  131. data/config/locales/models/kuhsaft/anchor_brick/en.yml +7 -0
  132. data/config/locales/models/kuhsaft/asset_brick/de.yml +9 -0
  133. data/config/locales/models/kuhsaft/asset_brick/en.yml +9 -0
  134. data/config/locales/models/kuhsaft/brick/de.yml +5 -0
  135. data/config/locales/models/kuhsaft/brick/en.yml +5 -0
  136. data/config/locales/models/kuhsaft/column_brick/de.yml +4 -0
  137. data/config/locales/models/kuhsaft/column_brick/en.yml +4 -0
  138. data/config/locales/models/kuhsaft/image_brick/de.yml +11 -0
  139. data/config/locales/models/kuhsaft/image_brick/en.yml +11 -0
  140. data/config/locales/models/kuhsaft/image_size/de.yml +13 -0
  141. data/config/locales/models/kuhsaft/image_size/en.yml +13 -0
  142. data/config/locales/models/kuhsaft/link_brick/de.yml +10 -0
  143. data/config/locales/models/kuhsaft/link_brick/en.yml +10 -0
  144. data/config/locales/models/kuhsaft/page/de.yml +19 -0
  145. data/config/locales/models/kuhsaft/page/en.yml +19 -0
  146. data/config/locales/models/kuhsaft/placeholder_brick/de.yml +8 -0
  147. data/config/locales/models/kuhsaft/placeholder_brick/en.yml +8 -0
  148. data/config/locales/models/kuhsaft/slider_brick/de.yml +4 -0
  149. data/config/locales/models/kuhsaft/slider_brick/en.yml +4 -0
  150. data/config/locales/models/kuhsaft/text_brick/de.yml +11 -0
  151. data/config/locales/models/kuhsaft/text_brick/en.yml +11 -0
  152. data/config/locales/models/kuhsaft/two_column_brick/de.yml +7 -0
  153. data/config/locales/models/kuhsaft/two_column_brick/en.yml +7 -0
  154. data/config/locales/models/kuhsaft/video_brick/de.yml +9 -0
  155. data/config/locales/models/kuhsaft/video_brick/en.yml +9 -0
  156. data/config/locales/simple_form.en.yml +26 -0
  157. data/config/locales/views/kuhsaft/cms/admin/de.yml +13 -0
  158. data/config/locales/views/kuhsaft/cms/admin/en.yml +12 -0
  159. data/config/locales/views/kuhsaft/cms/bricks/de.yml +18 -0
  160. data/config/locales/views/kuhsaft/cms/bricks/en.yml +18 -0
  161. data/config/locales/views/kuhsaft/cms/pages/de.yml +31 -0
  162. data/config/locales/views/kuhsaft/cms/pages/en.yml +31 -0
  163. data/config/locales/views/kuhsaft/image_brick/de.yml +6 -0
  164. data/config/locales/views/kuhsaft/image_brick/en.yml +6 -0
  165. data/config/locales/views/kuhsaft/search/de.yml +12 -0
  166. data/config/locales/views/kuhsaft/search/en.yml +12 -0
  167. data/config/locales/views/kuhsaft/text_brick/de.yml +6 -0
  168. data/config/locales/views/kuhsaft/text_brick/en.yml +6 -0
  169. data/config/locales/views/kuhsaft/video_brick/de.yml +7 -0
  170. data/config/locales/views/kuhsaft/video_brick/en.yml +7 -0
  171. data/config/routes.rb +30 -0
  172. data/db/migrate/01_create_kuhsaft_pages.rb +31 -0
  173. data/db/migrate/02_create_kuhsaft_bricks.rb +23 -0
  174. data/db/migrate/03_create_kuhsaft_brick_types.rb +12 -0
  175. data/db/migrate/04_create_kuhsaft_assets.rb +10 -0
  176. data/db/migrate/05_remove_cms_admin.rb +9 -0
  177. data/db/migrate/06_add_template_name_to_kuhsaft_bricks.rb +7 -0
  178. data/db/migrate/07_add_default_value_to_brick_type_enabled.rb +6 -0
  179. data/db/migrate/08_add_display_styles_to_bricks.rb +5 -0
  180. data/db/migrate/09_add_additional_fields_to_kuhsaft_bricks.rb +6 -0
  181. data/db/migrate/10_add_redirect_url_to_kuhsaft_pages.rb +7 -0
  182. data/db/migrate/11_update_url_and_redirect_url_value.rb +45 -0
  183. data/db/migrate/12_regenerate_fulltext.rb +12 -0
  184. data/db/migrate/13_add_page_title_to_pages.rb +7 -0
  185. data/db/migrate/14_move_kuhsaft_assets.rb +22 -0
  186. data/db/migrate/15_add_alt_text_to_bricks.rb +5 -0
  187. data/db/migrate/16_update_default_value_for_page_type.rb +9 -0
  188. data/db/migrate/17_set_page_type_to_content_for_empty_fields.rb +7 -0
  189. data/db/migrate/18_add_identifier_to_kuhsaft_pages.rb +6 -0
  190. data/db/migrate/19_add_col_count_to_bricks.rb +5 -0
  191. data/db/migrate/20_create_kuhsaft_ckimages.rb +9 -0
  192. data/db/seeds.rb +20 -0
  193. data/lib/generators/kuhsaft/assets/install_generator.rb +25 -0
  194. data/lib/generators/kuhsaft/translations/add_generator.rb +41 -0
  195. data/lib/kuhsaft.rb +22 -0
  196. data/lib/kuhsaft/brick_list.rb +87 -0
  197. data/lib/kuhsaft/engine.rb +27 -0
  198. data/lib/kuhsaft/gridded.rb +20 -0
  199. data/lib/kuhsaft/image_uploader_mounting.rb +22 -0
  200. data/lib/kuhsaft/orderable.rb +71 -0
  201. data/lib/kuhsaft/page_tree.rb +14 -0
  202. data/lib/kuhsaft/partial_extractor.rb +21 -0
  203. data/lib/kuhsaft/searchable.rb +69 -0
  204. data/lib/kuhsaft/touch_placeholders.rb +31 -0
  205. data/lib/kuhsaft/translatable.rb +54 -0
  206. data/lib/kuhsaft/version.rb +3 -0
  207. data/lib/tasks/kuhsaft_tasks.rake +22 -0
  208. data/lib/templates/kuhsaft/assets/ck-config.js.coffee +48 -0
  209. data/lib/templates/kuhsaft/assets/customizations.css.sass +0 -0
  210. data/lib/templates/kuhsaft/assets/customizations.js.coffee +0 -0
  211. data/lib/templates/kuhsaft/translations/add_translation.erb +8 -0
  212. data/spec/controllers/kuhsaft/api/pages_controller_spec.rb +70 -0
  213. data/spec/controllers/kuhsaft/pages_controller_spec.rb +90 -0
  214. data/spec/controllers/kuhsaft/sitemaps_controller_spec.rb +13 -0
  215. data/spec/dummy/Rakefile +7 -0
  216. data/spec/dummy/app/assets/images/spec-image.png +0 -0
  217. data/spec/dummy/app/assets/javascripts/application.js +15 -0
  218. data/spec/dummy/app/assets/javascripts/kuhsaft/cms/ck-config.js.coffee +48 -0
  219. data/spec/dummy/app/assets/javascripts/kuhsaft/cms/customizations.js.coffee +0 -0
  220. data/spec/dummy/app/assets/stylesheets/application.css +13 -0
  221. data/spec/dummy/app/assets/stylesheets/kuhsaft/cms/customizations.css.sass +0 -0
  222. data/spec/dummy/app/controllers/application_controller.rb +4 -0
  223. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  224. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  225. data/spec/dummy/bin/bundle +3 -0
  226. data/spec/dummy/bin/rails +4 -0
  227. data/spec/dummy/bin/rake +4 -0
  228. data/spec/dummy/config.ru +4 -0
  229. data/spec/dummy/config/application.rb +26 -0
  230. data/spec/dummy/config/boot.rb +3 -0
  231. data/spec/dummy/config/database.yml +19 -0
  232. data/spec/dummy/config/environment.rb +5 -0
  233. data/spec/dummy/config/environments/development.rb +29 -0
  234. data/spec/dummy/config/environments/production.rb +81 -0
  235. data/spec/dummy/config/environments/test.rb +36 -0
  236. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  237. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  238. data/spec/dummy/config/initializers/inflections.rb +16 -0
  239. data/spec/dummy/config/initializers/kuhsaft.rb +5 -0
  240. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  241. data/spec/dummy/config/initializers/secret_token.rb +12 -0
  242. data/spec/dummy/config/initializers/session_store.rb +3 -0
  243. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  244. data/spec/dummy/config/locales/en.yml +23 -0
  245. data/spec/dummy/config/routes.rb +3 -0
  246. data/spec/dummy/db/.gitkeep +0 -0
  247. data/spec/dummy/lib/assets/.gitkeep +0 -0
  248. data/spec/dummy/log/.gitkeep +0 -0
  249. data/spec/dummy/public/404.html +26 -0
  250. data/spec/dummy/public/422.html +26 -0
  251. data/spec/dummy/public/500.html +25 -0
  252. data/spec/dummy/public/favicon.ico +0 -0
  253. data/spec/dummy/public/stylesheets/.gitkeep +0 -0
  254. data/spec/dummy/script/rails +6 -0
  255. data/spec/factories.rb +26 -0
  256. data/spec/features/cms_pages_spec.rb +76 -0
  257. data/spec/features/search_spec.rb +78 -0
  258. data/spec/helpers/kuhsaft/cms/admin_helper_spec.rb +25 -0
  259. data/spec/helpers/kuhsaft/cms/pages_helper_spec.rb +46 -0
  260. data/spec/helpers/kuhsaft/pages_helper_spec.rb +21 -0
  261. data/spec/kuhsaft_spec.rb +7 -0
  262. data/spec/lib/brick_list_spec.rb +50 -0
  263. data/spec/lib/engine_spec.rb +25 -0
  264. data/spec/lib/gridded_spec.rb +24 -0
  265. data/spec/lib/image_uploader_mounting_spec.rb +14 -0
  266. data/spec/lib/page_tree_spec.rb +38 -0
  267. data/spec/lib/searchable_spec.rb +30 -0
  268. data/spec/lib/touch_placeholders_spec.rb +44 -0
  269. data/spec/lib/translatable_spec.rb +155 -0
  270. data/spec/models/accordion_brick_spec.rb +38 -0
  271. data/spec/models/accordion_item_brick_spec.rb +50 -0
  272. data/spec/models/anchor_brick_spec.rb +26 -0
  273. data/spec/models/asset_brick_spec.rb +45 -0
  274. data/spec/models/asset_spec.rb +41 -0
  275. data/spec/models/brick_spec.rb +134 -0
  276. data/spec/models/brick_type_filter_spec.rb +64 -0
  277. data/spec/models/column_brick_spec.rb +32 -0
  278. data/spec/models/image_brick_spec.rb +49 -0
  279. data/spec/models/image_size_spec.rb +36 -0
  280. data/spec/models/link_brick_spec.rb +51 -0
  281. data/spec/models/page_spec.rb +472 -0
  282. data/spec/models/placeholder_brick_spec.rb +46 -0
  283. data/spec/models/publish_state_spec.rb +33 -0
  284. data/spec/models/slider_brick_spec.rb +26 -0
  285. data/spec/models/text_brick_spec.rb +30 -0
  286. data/spec/models/two_column_brick_spec.rb +82 -0
  287. data/spec/models/video_brick_spec.rb +32 -0
  288. data/spec/spec_helper.rb +81 -0
  289. data/spec/support/kuhsaft_spec_helper.rb +8 -0
  290. data/spec/support/write_expectation.rb +57 -0
  291. data/spec/views/kuhsaft/sitemaps/index.xml.haml_spec.rb +67 -0
  292. data/vendor/assets/javascripts/bootstrap-modal-v2.js +376 -0
  293. data/vendor/assets/javascripts/bootstrap-modalmanager.js +423 -0
  294. data/vendor/assets/javascripts/jquery.nestable.js +485 -0
  295. data/vendor/assets/stylesheets/bootstrap_modal.css +214 -0
  296. data/vendor/assets/stylesheets/nestable.css +84 -0
  297. metadata +870 -0
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ describe Kuhsaft::Searchable do
4
+
5
+ context 'with missing includes' do
6
+ it 'raises exteption when class does not include Kuhsaft::Bricklist' do
7
+ expect do
8
+ class Foo
9
+ include Kuhsaft::Searchable
10
+ end
11
+ end.to raise_error(/needs Kuhsaft::BrickList to be included/)
12
+ end
13
+ end
14
+
15
+ context 'with Bricklist included' do
16
+ class SearchableDemo < ActiveRecord::Base
17
+ include Kuhsaft::BrickList
18
+ end
19
+
20
+ context 'without postgresql' do
21
+ it 'initializes scope' do
22
+ expect(ActiveRecord::Base.connection.instance_values).not_to eq('postgresql')
23
+ SearchableDemo.should_receive :scope
24
+ SearchableDemo.class_eval do
25
+ include Kuhsaft::Searchable
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,44 @@
1
+ require 'spec_helper'
2
+ require_relative '../../lib/kuhsaft/touch_placeholders'
3
+
4
+ describe Kuhsaft::TouchPlaceholders do
5
+
6
+ before :all do
7
+ m = ActiveRecord::Migration.new
8
+ m.verbose = false
9
+ m.create_table :dummy_models do |t|
10
+ t.timestamps
11
+ end
12
+
13
+ class DummyModel < ActiveRecord::Base
14
+ include Kuhsaft::TouchPlaceholders
15
+ end
16
+
17
+ @page = FactoryGirl.create(:page)
18
+ @placeholder = FactoryGirl.create(:placeholder_brick, brick_list: @page, template_name: 'foo')
19
+ end
20
+
21
+ after :all do
22
+ m = ActiveRecord::Migration.new
23
+ m.verbose = false
24
+ m.drop_table :dummy_models
25
+
26
+ @page.destroy
27
+ @placeholder.destroy
28
+ end
29
+
30
+ describe 'placeholder_templates class method' do
31
+ it 'returns the attribute names defined with class macro' do
32
+ DummyModel.class_eval { placeholder_templates 'key_benefit_slider', 'key_benefit_grid' }
33
+ expect(DummyModel.placeholder_templates).to eq %w(key_benefit_slider key_benefit_grid)
34
+ end
35
+ end
36
+
37
+ describe 'after_save_callback' do
38
+ it 'looks for the bricks with affected templates and touches them' do
39
+ DummyModel.class_eval { placeholder_templates 'foo' }
40
+ expect_any_instance_of(Kuhsaft::PlaceholderBrick).to receive(:touch)
41
+ DummyModel.create
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,155 @@
1
+ require 'spec_helper'
2
+
3
+ describe Kuhsaft::Translatable do
4
+
5
+ class Demo
6
+ include Kuhsaft::Translatable
7
+ translate :name
8
+ end
9
+
10
+ let :model do
11
+ Demo.new
12
+ end
13
+
14
+ describe 'normal locale' do
15
+ before do
16
+ I18n.locale = :en
17
+ end
18
+
19
+ describe '.translate' do
20
+ it 'defines a getter for each attribute' do
21
+ expect(model).to respond_to(:name)
22
+ end
23
+
24
+ it 'defines a setter for each attributes' do
25
+ expect(model).to respond_to(:name=)
26
+ end
27
+ end
28
+
29
+ describe '.locale_attr' do
30
+ it 'returns a suffixed attribute name' do
31
+ expect(Demo.locale_attr('text')).to eq('text_en')
32
+ end
33
+ end
34
+
35
+ describe '#locale_attr' do
36
+ it 'returns a suffixed attribute name' do
37
+ expect(model.locale_attr('text')).to eq('text_en')
38
+ end
39
+ end
40
+
41
+ describe 'translated attributes' do
42
+ it 'delegates the getter to the suffixed attribute' do
43
+ model.should_receive(:name_en).and_return('John')
44
+ model.name.should == 'John'
45
+ end
46
+
47
+ it 'delegates the setter to the suffixed attribute' do
48
+ model.should_receive(:name_en=).with('Johnny')
49
+ model.name = 'Johnny'
50
+ end
51
+
52
+ context 'dynamic methods' do
53
+ it 'delegates boolean accessors' do
54
+ model.should_receive(:name_en?)
55
+ model.name?
56
+ end
57
+
58
+ it 'delegates simple dynamic finders' do
59
+ Demo.should_receive(:find_by_name_en).with('Max')
60
+ Demo.find_by_name('Max')
61
+ end
62
+ end
63
+
64
+ context 'when changing the locale' do
65
+ before do
66
+ I18n.locale = :de
67
+ end
68
+
69
+ it 'delegates the getter to current locale' do
70
+ model.should_receive(:name_de).and_return('Johannes')
71
+ model.name.should == 'Johannes'
72
+ end
73
+
74
+ it 'delegates the getter to current locale' do
75
+ model.should_receive(:name_de=).with('Johannes')
76
+ model.name = 'Johannes'
77
+ end
78
+ end
79
+ end
80
+ end
81
+
82
+ describe 'country specific locale' do
83
+ before do
84
+ I18n.available_locales = [:de, 'de-CH']
85
+ I18n.locale = 'de-CH'
86
+ end
87
+
88
+ after do
89
+ I18n.available_locales = [:en]
90
+ I18n.locale = :en
91
+ end
92
+
93
+ describe '.translate' do
94
+ it 'defines a getter for each attribute' do
95
+ expect(model).to respond_to(:name)
96
+ end
97
+
98
+ it 'defines a setter for each attributes' do
99
+ expect(model).to respond_to(:name=)
100
+ end
101
+ end
102
+
103
+ describe '.locale_attr' do
104
+ it 'returns a suffixed attribute name' do
105
+ expect(Demo.locale_attr('text')).to eq('text_de_ch')
106
+ end
107
+ end
108
+
109
+ describe '#locale_attr' do
110
+ it 'returns a suffixed attribute name' do
111
+ expect(Demo.locale_attr('text')).to eq('text_de_ch')
112
+ end
113
+ end
114
+
115
+ describe 'translated attributes' do
116
+ it 'delegates the getter to the suffixed attribute' do
117
+ model.should_receive(:name_de_ch).and_return('John')
118
+ model.name.should == 'John'
119
+ end
120
+
121
+ it 'delegates the setter to the suffixed attribute' do
122
+ model.should_receive(:name_de_ch=).with('Johnny')
123
+ model.name = 'Johnny'
124
+ end
125
+
126
+ context 'dynamic methods' do
127
+ it 'delegates boolean accessors' do
128
+ model.should_receive(:name_de_ch?)
129
+ model.name?
130
+ end
131
+
132
+ it 'delegates simple dynamic finders' do
133
+ Demo.should_receive(:find_by_name_de_ch).with('Max')
134
+ Demo.find_by_name('Max')
135
+ end
136
+ end
137
+
138
+ context 'when changing the locale' do
139
+ before do
140
+ I18n.locale = :de
141
+ end
142
+
143
+ it 'delegates the getter to current locale' do
144
+ model.should_receive(:name_de).and_return('Johannes')
145
+ model.name.should == 'Johannes'
146
+ end
147
+
148
+ it 'delegates the getter to current locale' do
149
+ model.should_receive(:name_de=).with('Johannes')
150
+ model.name = 'Johannes'
151
+ end
152
+ end
153
+ end
154
+ end
155
+ end
@@ -0,0 +1,38 @@
1
+ require 'spec_helper'
2
+
3
+ describe Kuhsaft::AccordionBrick do
4
+
5
+ let :accordion_brick do
6
+ Kuhsaft::AccordionBrick.new
7
+ end
8
+
9
+ describe '#user_can_delete?' do
10
+ it 'returns true' do
11
+ accordion_brick.user_can_delete?.should be_true
12
+ end
13
+ end
14
+
15
+ describe '#renders_own_childs?' do
16
+ it 'returns false' do
17
+ accordion_brick.renders_own_childs?.should be_false
18
+ end
19
+ end
20
+
21
+ describe '#bricks' do
22
+ it 'can have childs' do
23
+ accordion_brick.should respond_to(:bricks)
24
+ end
25
+ end
26
+
27
+ describe '#to_style_class' do
28
+ it 'includes the bootstrap classname' do
29
+ accordion_brick.to_style_class.should == 'kuhsaft-accordion-brick accordion'
30
+ end
31
+ end
32
+
33
+ describe '#allowed_brick_types' do
34
+ it 'only allows AccordionItems' do
35
+ accordion_brick.allowed_brick_types.should == %w(Kuhsaft::AccordionItemBrick)
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,50 @@
1
+ require 'spec_helper'
2
+
3
+ describe Kuhsaft::AccordionItemBrick do
4
+
5
+ let :accordion_item_brick do
6
+ Kuhsaft::AccordionItemBrick.new
7
+ end
8
+
9
+ describe '#valid' do
10
+ before do
11
+ accordion_item_brick.valid?
12
+ end
13
+
14
+ context 'without a #caption' do
15
+ it 'has en error' do
16
+ accordion_item_brick.should have(1).error_on(:caption)
17
+ end
18
+ end
19
+ end
20
+
21
+ describe '#user_can_delete?' do
22
+ it 'returns true' do
23
+ accordion_item_brick.user_can_delete?.should be_true
24
+ end
25
+ end
26
+
27
+ describe '#user_can_save' do
28
+ it 'returns true' do
29
+ accordion_item_brick.user_can_save?.should == true
30
+ end
31
+ end
32
+
33
+ describe '#renders_own_childs?' do
34
+ it 'returns false' do
35
+ accordion_item_brick.renders_own_childs?.should be_false
36
+ end
37
+ end
38
+
39
+ describe '#bricks' do
40
+ it 'can have childs' do
41
+ accordion_item_brick.should respond_to(:bricks)
42
+ end
43
+ end
44
+
45
+ describe '#to_style_class' do
46
+ it 'includes the bootstrap classname' do
47
+ accordion_item_brick.to_style_class.should == 'kuhsaft-accordion-item-brick accordion-group'
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+
3
+ describe Kuhsaft::AnchorBrick do
4
+
5
+ let :anchor_brick do
6
+ Kuhsaft::AnchorBrick.new(caption: 'test-anchor')
7
+ end
8
+
9
+ describe '#bricks' do
10
+ it 'can not have childs' do
11
+ anchor_brick.should_not respond_to(:bricks)
12
+ end
13
+ end
14
+
15
+ describe '#user_can_add_childs?' do
16
+ it 'returns false' do
17
+ anchor_brick.user_can_add_childs?.should be_false
18
+ end
19
+ end
20
+
21
+ describe '#to_id' do
22
+ it 'returns a parameterized id' do
23
+ anchor_brick.to_id.should == 'anchor-test-anchor'
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,45 @@
1
+ require 'spec_helper'
2
+
3
+ describe Kuhsaft::AssetBrick do
4
+
5
+ let :asset_brick do
6
+ Kuhsaft::AssetBrick.new
7
+ end
8
+
9
+ describe '#valid' do
10
+ before do
11
+ asset_brick.valid?
12
+ end
13
+
14
+ context 'without a #caption' do
15
+ it 'has an error' do
16
+ asset_brick.should have(1).error_on(:caption)
17
+ end
18
+ end
19
+ end
20
+
21
+ describe '#bricks' do
22
+ it 'can not have childs' do
23
+ asset_brick.should_not respond_to(:bricks)
24
+ end
25
+ end
26
+
27
+ describe '.styles' do
28
+ it 'returns the available link styles' do
29
+ Kuhsaft::AssetBrick.styles.should == %w(pdf word excel button)
30
+ end
31
+ end
32
+
33
+ describe '#to_style_class' do
34
+ it 'includes the link style' do
35
+ asset_brick.stub(:link_style).and_return('pdf')
36
+ asset_brick.to_style_class.should == 'kuhsaft-asset-brick pdf'
37
+ end
38
+ end
39
+
40
+ describe '#user_can_add_childs?' do
41
+ it 'returns false' do
42
+ asset_brick.user_can_add_childs?.should be_false
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,41 @@
1
+ require 'spec_helper'
2
+
3
+ describe Kuhsaft::Asset do
4
+
5
+ let :asset do
6
+ create(:asset)
7
+ end
8
+
9
+ let :uploader do
10
+ u = Kuhsaft::AssetUploader.new(asset, :file)
11
+ u.store!(File.open(File.join(Kuhsaft::Engine.root, 'spec', 'dummy', 'app', 'assets', 'images', 'spec-image.png')))
12
+ u
13
+ end
14
+
15
+ before do
16
+ Kuhsaft::AssetUploader.enable_processing = true
17
+ end
18
+
19
+ after do
20
+ Kuhsaft::AssetUploader.enable_processing = false
21
+ end
22
+
23
+ it 'has a thumbnail' do
24
+ uploader.should respond_to(:thumb)
25
+ end
26
+
27
+ it 'makes the image readable only to the owner and not executable' do
28
+ pending 'how and where do we ensure permissions?'
29
+ uploader.should have_permissions(0600)
30
+ end
31
+
32
+ describe '#file_type' do
33
+ it 'has a file_type' do
34
+ asset.should respond_to(:file_type)
35
+ end
36
+
37
+ it 'is symbolized' do
38
+ asset.file_type.should be_a(Symbol)
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,134 @@
1
+ require 'spec_helper'
2
+
3
+ describe Kuhsaft::Brick do
4
+ let :brick do
5
+ Kuhsaft::Brick.new
6
+ end
7
+
8
+ describe '#valid?' do
9
+ it 'sets a default position' do
10
+ brick.should_receive(:set_position)
11
+ brick.valid?
12
+ end
13
+ end
14
+
15
+ describe '#set_position' do
16
+ context 'witout a position' do
17
+ it 'sets a default' do
18
+ brick.set_position
19
+ brick.position.should be(1)
20
+ end
21
+ end
22
+
23
+ context 'with a position' do
24
+ it 'does not change' do
25
+ brick.position = 3
26
+ expect { brick.set_position }.to_not change(brick, :position)
27
+ end
28
+ end
29
+ end
30
+
31
+ describe '#brick_list_type' do
32
+ it 'returns Kuhsaft::Brick' do
33
+ brick.brick_list_type.should == 'Kuhsaft::Brick'
34
+ end
35
+ end
36
+
37
+ describe '#parents' do
38
+ it 'returns the chain of parents' do
39
+ item1, item2, item3 = double, double, Kuhsaft::Brick.new
40
+ item2.stub(:brick_list).and_return(item1)
41
+ item3.stub(:brick_list).and_return(item2)
42
+ item3.parents.should == [item1, item2]
43
+ end
44
+ end
45
+
46
+ describe '#to_edit_partial_path' do
47
+ it 'returns the path to the form partial' do
48
+ Kuhsaft::TextBrick.new.to_edit_partial_path.should == 'kuhsaft/text_bricks/text_brick/edit'
49
+ end
50
+ end
51
+
52
+ describe '#has_siblings?' do
53
+ it 'returns false if the brick has no siblings' do
54
+ brick = Kuhsaft::Brick.new
55
+ brick.has_siblings?.should be_false
56
+ end
57
+
58
+ it 'returns true if the brick has siblings' do
59
+ item1, item2, item3 = double, double, Kuhsaft::Brick.new
60
+ item1.stub(:bricks).and_return([item2, item3])
61
+ item2.stub(:brick_list).and_return(item1)
62
+ item3.stub(:brick_list).and_return(item1)
63
+ item3.has_siblings?.should be_true
64
+ end
65
+ end
66
+
67
+ describe '#to_edit_childs_partial_path' do
68
+ it 'returns the path to the form partial' do
69
+ Kuhsaft::TextBrick.new.to_edit_childs_partial_path.should == 'kuhsaft/text_bricks/text_brick/childs'
70
+ end
71
+ end
72
+
73
+ describe '#bricks' do
74
+ it 'can not have childs by default' do
75
+ brick.should_not respond_to(:bricks)
76
+ end
77
+ end
78
+
79
+ describe '#to_style_class' do
80
+ it 'returns a css classname' do
81
+ Kuhsaft::TextBrick.new.to_style_class.should == 'kuhsaft-text-brick'
82
+ end
83
+ end
84
+
85
+ describe '#to_style_id' do
86
+ it 'returns a unique DOM id' do
87
+ brick = Kuhsaft::TextBrick.new
88
+ brick.stub(:id).and_return(104)
89
+ brick.to_style_id.should == 'kuhsaft-text-brick-104'
90
+ end
91
+ end
92
+
93
+ describe '#backend_label' do
94
+ it 'returns the name of the brick' do
95
+ brick = Kuhsaft::TextBrick.new
96
+ brick.backend_label.should == 'Text'
97
+ end
98
+
99
+ context 'with the parenthesis option given' do
100
+ brick = Kuhsaft::TextBrick.new
101
+ brick.backend_label(parenthesis: true).should == '(Text)'
102
+ end
103
+ end
104
+
105
+ describe '#uploader?' do
106
+ it 'returns false' do
107
+ brick.uploader?.should be_false
108
+ end
109
+ end
110
+
111
+ describe '#after_save' do
112
+ describe 'update_fulltext' do
113
+ let! :brick do
114
+ Kuhsaft::Brick.new.tap do |b|
115
+ b.type = Kuhsaft::BrickType.new
116
+ end
117
+ end
118
+
119
+ let! :brick_list do
120
+ p = create(:page)
121
+ p.bricks << brick
122
+ p.save
123
+ p
124
+ end
125
+
126
+ it 'updates fulltext on bricklist after saving a single brick' do
127
+ brick.brick_list.should_receive(:update_fulltext)
128
+ brick.brick_list.should_receive(:save!)
129
+ brick.text = 'foobar'
130
+ brick.save
131
+ end
132
+ end
133
+ end
134
+ end