comfortable_mexican_sofa 1.12.11 → 2.0.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 (490) hide show
  1. checksums.yaml +5 -5
  2. data/.codeclimate.yml +4 -0
  3. data/.gitattributes +2 -0
  4. data/.github/issue_template.md +22 -0
  5. data/.github/pull_request_template.md +6 -0
  6. data/.gitignore +3 -0
  7. data/.rubocop.yml +5 -0
  8. data/.rubocop_todo.yml +974 -0
  9. data/.travis.yml +2 -10
  10. data/Gemfile +5 -7
  11. data/README.md +40 -39
  12. data/Rakefile +1 -31
  13. data/app/assets/javascripts/comfy/admin/cms/application.js.coffee +7 -4
  14. data/app/assets/javascripts/comfy/admin/cms/base.js.coffee +23 -33
  15. data/app/assets/javascripts/comfy/admin/cms/lib/diff/pretty_text_diff.js +76 -0
  16. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr.min.js +2 -0
  17. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/ar.js +52 -0
  18. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/bg.js +65 -0
  19. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/bn.js +65 -0
  20. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/cat.js +83 -0
  21. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/cs.js +70 -0
  22. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/cy.js +92 -0
  23. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/da.js +71 -0
  24. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/de.js +70 -0
  25. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/default.js +80 -0
  26. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/eo.js +73 -0
  27. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/es.js +69 -0
  28. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/et.js +73 -0
  29. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/fa.js +68 -0
  30. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/fi.js +69 -0
  31. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/fr.js +75 -0
  32. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/gr.js +74 -0
  33. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/he.js +57 -0
  34. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/hi.js +65 -0
  35. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/hr.js +66 -0
  36. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/hu.js +72 -0
  37. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/id.js +61 -0
  38. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/it.js +70 -0
  39. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/ja.js +57 -0
  40. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/ko.js +60 -0
  41. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/lt.js +72 -0
  42. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/lv.js +67 -0
  43. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/mk.js +69 -0
  44. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/mn.js +67 -0
  45. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/ms.js +68 -0
  46. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/my.js +69 -0
  47. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/nl.js +75 -0
  48. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/no.js +73 -0
  49. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/pa.js +65 -0
  50. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/pl.js +68 -0
  51. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/pt-BR.js +66 -0
  52. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/pt.js +66 -0
  53. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/ro.js +69 -0
  54. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/ru.js +66 -0
  55. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/si.js +65 -0
  56. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/sk.js +70 -0
  57. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/sl.js +70 -0
  58. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/sq.js +65 -0
  59. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/sr.js +69 -0
  60. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/sv.js +70 -0
  61. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/th.js +72 -0
  62. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/tr.js +66 -0
  63. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/uk.js +66 -0
  64. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/vn.js +66 -0
  65. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/zh-CN.js +61 -0
  66. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/zh-TW.js +61 -0
  67. data/app/assets/javascripts/comfy/admin/cms/lib/redactor.js +9 -3
  68. data/app/assets/javascripts/comfy/admin/cms/uploader.js.coffee +9 -10
  69. data/app/assets/stylesheets/comfy/admin/cms/application.sass +4 -4
  70. data/app/assets/stylesheets/comfy/admin/cms/base.sass +215 -338
  71. data/app/assets/stylesheets/comfy/admin/cms/lib/flatpickr.min.css +13 -0
  72. data/app/assets/stylesheets/comfy/admin/cms/redactor_overrides.sass +2 -2
  73. data/app/controllers/comfy/admin/base_controller.rb +20 -0
  74. data/app/controllers/comfy/admin/cms/base_controller.rb +9 -22
  75. data/app/controllers/comfy/admin/cms/categories_controller.rb +2 -3
  76. data/app/controllers/comfy/admin/cms/files_controller.rb +50 -31
  77. data/app/controllers/comfy/admin/cms/layouts_controller.rb +12 -13
  78. data/app/controllers/comfy/admin/cms/pages_controller.rb +28 -28
  79. data/app/controllers/comfy/admin/cms/revisions_controller.rb +23 -14
  80. data/app/controllers/comfy/admin/cms/sites_controller.rb +9 -10
  81. data/app/controllers/comfy/admin/cms/snippets_controller.rb +11 -11
  82. data/app/controllers/comfy/admin/cms/translations_controller.rb +98 -0
  83. data/app/controllers/comfy/cms/assets_controller.rb +9 -10
  84. data/app/controllers/comfy/cms/base_controller.rb +0 -2
  85. data/app/controllers/comfy/cms/content_controller.rb +50 -31
  86. data/app/controllers/concerns/comfy/paginate.rb +2 -2
  87. data/app/helpers/comfy/admin/cms_helper.rb +29 -0
  88. data/app/helpers/comfy/cms_helper.rb +40 -60
  89. data/app/models/comfy/cms/categorization.rb +8 -11
  90. data/app/models/comfy/cms/category.rb +10 -14
  91. data/app/models/comfy/cms/file.rb +31 -47
  92. data/app/models/comfy/cms/fragment.rb +55 -0
  93. data/app/models/comfy/cms/layout.rb +45 -40
  94. data/app/models/comfy/cms/page.rb +47 -36
  95. data/app/models/comfy/cms/revision.rb +5 -8
  96. data/app/models/comfy/cms/site.rb +26 -51
  97. data/app/models/comfy/cms/snippet.rb +20 -24
  98. data/app/models/comfy/cms/translation.rb +37 -0
  99. data/app/models/concerns/comfy/cms/with_categories.rb +38 -0
  100. data/app/models/concerns/comfy/cms/with_fragments.rb +121 -0
  101. data/app/views/comfy/admin/cms/categories/_categories.html.haml +2 -1
  102. data/app/views/comfy/admin/cms/categories/_edit.html.haml +7 -6
  103. data/app/views/comfy/admin/cms/categories/_form.html.haml +8 -5
  104. data/app/views/comfy/admin/cms/categories/_index.html.haml +24 -20
  105. data/app/views/comfy/admin/cms/categories/_show.html.haml +10 -9
  106. data/app/views/comfy/admin/cms/categories/create.js.erb +2 -2
  107. data/app/views/comfy/admin/cms/categories/edit.js.erb +1 -1
  108. data/app/views/comfy/admin/cms/categories/update.js.erb +2 -2
  109. data/app/views/comfy/admin/cms/files/_file.html.haml +31 -25
  110. data/app/views/comfy/admin/cms/files/_form.html.haml +16 -12
  111. data/app/views/comfy/admin/cms/files/edit.html.haml +1 -1
  112. data/app/views/comfy/admin/cms/files/index.html.haml +17 -19
  113. data/app/views/comfy/admin/cms/files/new.html.haml +1 -1
  114. data/app/views/comfy/admin/cms/layouts/_form.html.haml +10 -10
  115. data/app/views/comfy/admin/cms/layouts/_index_branch.html.haml +21 -19
  116. data/app/views/comfy/admin/cms/layouts/edit.html.haml +5 -5
  117. data/app/views/comfy/admin/cms/layouts/index.html.haml +4 -7
  118. data/app/views/comfy/admin/cms/pages/_form.html.haml +15 -21
  119. data/app/views/comfy/admin/cms/pages/_form_fragments.html.haml +40 -0
  120. data/app/views/comfy/admin/cms/pages/_fragment_attachments.html.haml +10 -0
  121. data/app/views/comfy/admin/cms/pages/_index_branch.html.haml +34 -26
  122. data/app/views/comfy/admin/cms/pages/edit.html.haml +19 -5
  123. data/app/views/comfy/admin/cms/pages/form_fragments.js.erb +1 -0
  124. data/app/views/comfy/admin/cms/pages/index.html.haml +5 -8
  125. data/app/views/comfy/admin/cms/pages/new.html.haml +1 -1
  126. data/app/views/comfy/admin/cms/revisions/show.html.haml +29 -27
  127. data/app/views/comfy/admin/cms/sites/_form.html.haml +6 -8
  128. data/app/views/comfy/admin/cms/sites/edit.html.haml +1 -1
  129. data/app/views/comfy/admin/cms/sites/index.html.haml +23 -22
  130. data/app/views/comfy/admin/cms/sites/new.html.haml +1 -1
  131. data/app/views/comfy/admin/cms/snippets/_form.html.haml +9 -9
  132. data/app/views/comfy/admin/cms/snippets/edit.html.haml +6 -5
  133. data/app/views/comfy/admin/cms/snippets/index.html.haml +25 -25
  134. data/app/views/comfy/admin/cms/snippets/new.html.haml +1 -1
  135. data/app/views/comfy/admin/cms/translations/_form.html.haml +21 -0
  136. data/app/views/comfy/admin/cms/translations/edit.html.haml +9 -0
  137. data/app/views/comfy/admin/cms/translations/form_fragments.js.erb +1 -0
  138. data/app/views/comfy/admin/cms/translations/new.html.haml +5 -0
  139. data/app/views/kaminari/comfy/_first_page.html.haml +3 -2
  140. data/app/views/kaminari/comfy/_gap.html.haml +2 -2
  141. data/app/views/kaminari/comfy/_last_page.html.haml +3 -2
  142. data/app/views/kaminari/comfy/_next_page.html.haml +2 -2
  143. data/app/views/kaminari/comfy/_page.html.haml +2 -2
  144. data/app/views/kaminari/comfy/_prev_page.html.haml +1 -1
  145. data/app/views/layouts/comfy/admin/cms/_body.html.haml +13 -15
  146. data/app/views/layouts/comfy/admin/cms/_footer_js.html.haml +10 -3
  147. data/app/views/layouts/comfy/admin/cms/_head.html.haml +7 -10
  148. data/app/views/layouts/comfy/admin/cms/_left.html.haml +33 -15
  149. data/app/views/layouts/comfy/admin/cms/_right.html.haml +2 -2
  150. data/comfortable_mexican_sofa.gemspec +19 -19
  151. data/config/application.rb +14 -8
  152. data/config/boot.rb +2 -2
  153. data/config/cms_routes.rb +3 -3
  154. data/config/environments/development.rb +37 -4
  155. data/config/environments/test.rb +12 -14
  156. data/config/initializers/comfortable_mexican_sofa.rb +5 -12
  157. data/config/locales/cs.yml +33 -7
  158. data/config/locales/da.yml +33 -7
  159. data/config/locales/de.yml +32 -6
  160. data/config/locales/en.yml +33 -7
  161. data/config/locales/es.yml +33 -7
  162. data/config/locales/fr.yml +33 -7
  163. data/config/locales/it.yml +33 -7
  164. data/config/locales/ja.yml +33 -7
  165. data/config/locales/nb.yml +33 -7
  166. data/config/locales/nl.yml +33 -7
  167. data/config/locales/pl.yml +33 -7
  168. data/config/locales/pt-BR.yml +33 -7
  169. data/config/locales/ru.yml +33 -7
  170. data/config/locales/sk.yml +33 -7
  171. data/config/locales/sv.yml +33 -7
  172. data/config/locales/tr.yml +33 -7
  173. data/config/locales/uk.yml +33 -7
  174. data/config/locales/zh-CN.yml +33 -7
  175. data/config/locales/zh-TW.yml +33 -7
  176. data/config/storage.yml +35 -0
  177. data/db/cms_seeds/sample-site/files/_default.jpg.yml +5 -0
  178. data/db/{cms_fixtures/sample-site/files/sample.jpg → cms_seeds/sample-site/files/default.jpg} +0 -0
  179. data/db/cms_seeds/sample-site/layouts/default/content.html +16 -0
  180. data/db/cms_seeds/sample-site/layouts/default/nested/content.html +14 -0
  181. data/db/cms_seeds/sample-site/pages/index/child_a/content.html +7 -0
  182. data/db/cms_seeds/sample-site/pages/index/child_b/content.html +6 -0
  183. data/db/cms_seeds/sample-site/pages/index/content.es.html +6 -0
  184. data/db/cms_seeds/sample-site/pages/index/content.fr.html +6 -0
  185. data/db/cms_seeds/sample-site/pages/index/content.html +24 -0
  186. data/db/{cms_fixtures/sample-site/pages/index/child/thumbnail.png → cms_seeds/sample-site/pages/index/footer.png} +0 -0
  187. data/db/cms_seeds/sample-site/pages/index/header.png +0 -0
  188. data/db/cms_seeds/sample-site/snippets/default.html +8 -0
  189. data/db/migrate/00_create_active_storage_tables.active_storage.rb +26 -0
  190. data/db/migrate/01_create_cms.rb +113 -104
  191. data/doc/preview.jpg +0 -0
  192. data/lib/comfortable_mexican_sofa.rb +10 -14
  193. data/lib/comfortable_mexican_sofa/configuration.rb +9 -13
  194. data/lib/comfortable_mexican_sofa/content.rb +28 -0
  195. data/lib/comfortable_mexican_sofa/content/block.rb +11 -0
  196. data/lib/comfortable_mexican_sofa/content/params_parser.rb +80 -0
  197. data/lib/comfortable_mexican_sofa/content/renderer.rb +125 -0
  198. data/lib/comfortable_mexican_sofa/content/tag.rb +37 -0
  199. data/lib/comfortable_mexican_sofa/content/tags/asset.rb +56 -0
  200. data/lib/comfortable_mexican_sofa/content/tags/checkbox.rb +21 -0
  201. data/lib/comfortable_mexican_sofa/content/tags/date.rb +22 -0
  202. data/lib/comfortable_mexican_sofa/content/tags/datetime.rb +22 -0
  203. data/lib/comfortable_mexican_sofa/content/tags/file.rb +77 -0
  204. data/lib/comfortable_mexican_sofa/content/tags/file_link.rb +66 -0
  205. data/lib/comfortable_mexican_sofa/content/tags/files.rb +39 -0
  206. data/lib/comfortable_mexican_sofa/content/tags/fragment.rb +54 -0
  207. data/lib/comfortable_mexican_sofa/content/tags/helper.rb +52 -0
  208. data/lib/comfortable_mexican_sofa/content/tags/markdown.rb +21 -0
  209. data/lib/comfortable_mexican_sofa/content/tags/number.rb +17 -0
  210. data/lib/comfortable_mexican_sofa/content/tags/partial.rb +42 -0
  211. data/lib/comfortable_mexican_sofa/content/tags/snippet.rb +31 -0
  212. data/lib/comfortable_mexican_sofa/content/tags/template.rb +41 -0
  213. data/lib/comfortable_mexican_sofa/content/tags/text.rb +17 -0
  214. data/lib/comfortable_mexican_sofa/content/tags/textarea.rb +17 -0
  215. data/lib/comfortable_mexican_sofa/content/tags/wysiwyg.rb +18 -0
  216. data/lib/comfortable_mexican_sofa/engine.rb +3 -2
  217. data/lib/comfortable_mexican_sofa/extensions/acts_as_tree.rb +33 -30
  218. data/lib/comfortable_mexican_sofa/extensions/has_revisions.rb +27 -23
  219. data/lib/comfortable_mexican_sofa/form_builder.rb +32 -104
  220. data/lib/comfortable_mexican_sofa/render_methods.rb +24 -21
  221. data/lib/comfortable_mexican_sofa/routes/cms.rb +6 -14
  222. data/lib/comfortable_mexican_sofa/routes/cms_admin.rb +39 -29
  223. data/lib/comfortable_mexican_sofa/routing.rb +1 -1
  224. data/lib/comfortable_mexican_sofa/seeds.rb +102 -0
  225. data/lib/comfortable_mexican_sofa/seeds/file/exporter.rb +40 -0
  226. data/lib/comfortable_mexican_sofa/seeds/file/importer.rb +61 -0
  227. data/lib/comfortable_mexican_sofa/seeds/layout/exporter.rb +37 -0
  228. data/lib/comfortable_mexican_sofa/seeds/layout/importer.rb +59 -0
  229. data/lib/comfortable_mexican_sofa/seeds/page/exporter.rb +88 -0
  230. data/lib/comfortable_mexican_sofa/seeds/page/importer.rb +213 -0
  231. data/lib/comfortable_mexican_sofa/seeds/snippet/exporter.rb +31 -0
  232. data/lib/comfortable_mexican_sofa/seeds/snippet/importer.rb +48 -0
  233. data/lib/comfortable_mexican_sofa/version.rb +1 -1
  234. data/lib/comfortable_mexican_sofa/view_hooks.rb +0 -1
  235. data/lib/generators/comfy/cms/assets_generator.rb +0 -1
  236. data/lib/generators/comfy/cms/cms_generator.rb +15 -5
  237. data/lib/generators/comfy/scaffold/scaffold_generator.rb +26 -20
  238. data/lib/generators/comfy/scaffold/templates/{controller.rb → controller.rb.tt} +10 -10
  239. data/lib/generators/comfy/scaffold/templates/{migration.rb → migration.rb.tt} +2 -3
  240. data/lib/generators/comfy/scaffold/templates/{model.rb → model.rb.tt} +7 -7
  241. data/lib/generators/comfy/scaffold/templates/tests/{controller.rb → controller.rb.tt} +37 -24
  242. data/lib/generators/comfy/scaffold/templates/tests/{fixture.yml → fixture.yml.tt} +0 -0
  243. data/lib/generators/comfy/scaffold/templates/tests/{model.rb → model.rb.tt} +3 -4
  244. data/lib/generators/comfy/scaffold/templates/views/_form.haml.tt +7 -0
  245. data/lib/generators/comfy/scaffold/templates/views/{edit.haml → edit.haml.tt} +1 -1
  246. data/lib/generators/comfy/scaffold/templates/views/index.haml.tt +21 -0
  247. data/lib/generators/comfy/scaffold/templates/views/{new.haml → new.haml.tt} +1 -1
  248. data/lib/generators/comfy/scaffold/templates/views/{show.haml → show.haml.tt} +2 -2
  249. data/lib/tasks/cms_seeds.rake +37 -0
  250. data/test/controllers/comfy/admin/cms/base_controller_test.rb +5 -6
  251. data/test/controllers/comfy/admin/cms/categories_controller_test.rb +27 -24
  252. data/test/controllers/comfy/admin/cms/files_controller_test.rb +97 -97
  253. data/test/controllers/comfy/admin/cms/layouts_controller_test.rb +32 -31
  254. data/test/controllers/comfy/admin/cms/pages_controller_test.rb +317 -263
  255. data/test/controllers/comfy/admin/cms/revisions_controller_test.rb +175 -65
  256. data/test/controllers/comfy/admin/cms/sites_controller_test.rb +27 -29
  257. data/test/controllers/comfy/admin/cms/snippets_controller_test.rb +54 -51
  258. data/test/controllers/comfy/admin/cms/translations_controller_test.rb +181 -0
  259. data/test/controllers/comfy/cms/assets_controller_test.rb +24 -22
  260. data/test/controllers/comfy/cms/content_controller_test.rb +126 -140
  261. data/test/fixtures/active_storage/attachments.yml +9 -0
  262. data/test/fixtures/active_storage/blobs.yml +13 -0
  263. data/test/fixtures/comfy/cms/files.yml +2 -6
  264. data/test/fixtures/comfy/cms/fragments.yml +25 -0
  265. data/test/fixtures/comfy/cms/layouts.yml +7 -13
  266. data/test/fixtures/comfy/cms/pages.yml +2 -17
  267. data/test/fixtures/comfy/cms/revisions.yml +16 -8
  268. data/test/fixtures/comfy/cms/sites.yml +0 -1
  269. data/test/fixtures/comfy/cms/snippets.yml +1 -1
  270. data/test/fixtures/comfy/cms/translations.yml +7 -0
  271. data/test/fixtures/generators/cms/application.rb +7 -0
  272. data/test/fixtures/generators/cms/routes.rb +4 -7
  273. data/test/fixtures/generators/scaffold/controller.rb +10 -10
  274. data/test/fixtures/generators/scaffold/migration.rb +2 -3
  275. data/test/fixtures/generators/scaffold/model.rb +7 -7
  276. data/test/fixtures/generators/scaffold/routes.rb +1 -2
  277. data/test/fixtures/generators/scaffold/tests/controller.rb +37 -24
  278. data/test/fixtures/generators/scaffold/tests/model.rb +3 -4
  279. data/test/fixtures/generators/scaffold/views/_form.haml +3 -2
  280. data/test/fixtures/generators/scaffold/views/edit.haml +1 -1
  281. data/test/fixtures/generators/scaffold/views/index.haml +15 -13
  282. data/test/fixtures/generators/scaffold/views/new.haml +1 -1
  283. data/test/fixtures/generators/scaffold/views/show.haml +2 -2
  284. data/test/gemfiles/Gemfile.rails.5.2 +32 -0
  285. data/test/generators/cms_assets_generator_test.rb +1 -2
  286. data/test/generators/cms_generator_test.rb +3 -1
  287. data/test/generators/cms_views_generator_test.rb +1 -1
  288. data/test/generators/scaffold_generator_test.rb +2 -2
  289. data/test/helpers/cms_helper_test.rb +52 -73
  290. data/test/integration/access_control_test.rb +35 -28
  291. data/test/integration/js_variables_test.rb +1 -2
  292. data/test/integration/render_cms_test.rb +37 -37
  293. data/test/integration/routing_test.rb +4 -5
  294. data/test/integration/seeds_test.rb +76 -0
  295. data/test/integration/sites_test.rb +35 -49
  296. data/test/integration/view_hooks_test.rb +12 -13
  297. data/test/lib/configuration_test.rb +3 -4
  298. data/test/lib/content/block_test.rb +26 -0
  299. data/test/lib/content/params_parser_test.rb +125 -0
  300. data/test/lib/content/renderer_test.rb +240 -0
  301. data/test/lib/content/tag_test.rb +48 -0
  302. data/test/lib/content/tags/asset_test.rb +79 -0
  303. data/test/lib/content/tags/checkbox_test.rb +20 -0
  304. data/test/lib/content/tags/date_test.rb +20 -0
  305. data/test/lib/content/tags/datetime_test.rb +20 -0
  306. data/test/lib/content/tags/file_link_test.rb +78 -0
  307. data/test/lib/content/tags/file_test.rb +60 -0
  308. data/test/lib/content/tags/files_test.rb +49 -0
  309. data/test/lib/content/tags/fragment_test.rb +63 -0
  310. data/test/lib/content/tags/helper_test.rb +52 -0
  311. data/test/lib/content/tags/markdown_test.rb +33 -0
  312. data/test/lib/content/tags/number_test.rb +13 -0
  313. data/test/lib/content/tags/partial_test.rb +43 -0
  314. data/test/lib/content/tags/snippet_test.rb +36 -0
  315. data/test/lib/content/tags/template_test.rb +35 -0
  316. data/test/lib/content/tags/text_test.rb +13 -0
  317. data/test/lib/content/tags/textarea_test.rb +13 -0
  318. data/test/lib/content/tags/wysiwyg_test.rb +13 -0
  319. data/test/lib/revisions_test.rb +146 -111
  320. data/test/lib/seeds/files_test.rb +96 -0
  321. data/test/lib/seeds/layouts_test.rb +155 -0
  322. data/test/lib/seeds/pages_test.rb +227 -0
  323. data/test/lib/seeds/snippets_test.rb +98 -0
  324. data/test/lib/seeds_test.rb +50 -0
  325. data/test/models/categorization_test.rb +37 -38
  326. data/test/models/category_test.rb +14 -14
  327. data/test/models/file_test.rb +23 -96
  328. data/test/models/fragment_test.rb +131 -0
  329. data/test/models/layout_test.rb +105 -74
  330. data/test/models/page_test.rb +352 -97
  331. data/test/models/site_test.rb +101 -90
  332. data/test/models/snippet_test.rb +29 -23
  333. data/test/models/translation_test.rb +60 -0
  334. data/test/tasks/cms_seeds_test.rb +33 -0
  335. data/test/test_helper.rb +49 -32
  336. metadata +235 -210
  337. data/_config.yml +0 -1
  338. data/app/assets/images/comfy/admin/cms/arrow_bottom.gif +0 -0
  339. data/app/assets/images/comfy/admin/cms/arrow_right.gif +0 -0
  340. data/app/assets/images/comfy/admin/cms/checkerboard.gif +0 -0
  341. data/app/assets/images/comfy/admin/cms/icon_draft.gif +0 -0
  342. data/app/assets/images/comfy/admin/cms/icon_file.gif +0 -0
  343. data/app/assets/images/comfy/admin/cms/icon_layout.gif +0 -0
  344. data/app/assets/images/comfy/admin/cms/icon_move.gif +0 -0
  345. data/app/assets/images/comfy/admin/cms/icon_page.gif +0 -0
  346. data/app/assets/images/comfy/admin/cms/icon_site.gif +0 -0
  347. data/app/assets/images/comfy/admin/cms/icon_snippet.gif +0 -0
  348. data/app/assets/javascripts/comfy/admin/cms/lib/bootstrap-datetimepicker.js +0 -29
  349. data/app/assets/javascripts/comfy/admin/cms/lib/diff.js.coffee +0 -9
  350. data/app/assets/javascripts/comfy/admin/cms/lib/diff/pretty_text_diff.min.js +0 -5
  351. data/app/assets/stylesheets/comfy/admin/cms/bootstrap_overrides.sass +0 -32
  352. data/app/assets/stylesheets/comfy/admin/cms/lib/bootstrap-datetimepicker.css +0 -9
  353. data/app/models/comfy/cms/block.rb +0 -63
  354. data/app/views/comfy/admin/cms/files/_page_form.html.haml +0 -10
  355. data/app/views/comfy/admin/cms/pages/_form_blocks.html.haml +0 -32
  356. data/app/views/comfy/admin/cms/pages/form_blocks.js.erb +0 -1
  357. data/app/views/comfy/admin/cms/partials/_body_before.html.haml +0 -3
  358. data/app/views/comfy/admin/cms/partials/_file_form_after.html.haml +0 -3
  359. data/app/views/comfy/admin/cms/partials/_file_form_before.html.haml +0 -3
  360. data/app/views/comfy/admin/cms/partials/_files_after.html.haml +0 -3
  361. data/app/views/comfy/admin/cms/partials/_files_before.html.haml +0 -3
  362. data/app/views/comfy/admin/cms/partials/_html_footer.html.haml +0 -2
  363. data/app/views/comfy/admin/cms/partials/_html_head.html.haml +0 -2
  364. data/app/views/comfy/admin/cms/partials/_layout_form_after.html.haml +0 -3
  365. data/app/views/comfy/admin/cms/partials/_layout_form_before.html.haml +0 -3
  366. data/app/views/comfy/admin/cms/partials/_layouts_after.html.haml +0 -3
  367. data/app/views/comfy/admin/cms/partials/_layouts_before.html.haml +0 -3
  368. data/app/views/comfy/admin/cms/partials/_navigation_after.html.haml +0 -3
  369. data/app/views/comfy/admin/cms/partials/_navigation_before.html.haml +0 -3
  370. data/app/views/comfy/admin/cms/partials/_navigation_inner.html.haml +0 -3
  371. data/app/views/comfy/admin/cms/partials/_page_form_after.html.haml +0 -3
  372. data/app/views/comfy/admin/cms/partials/_page_form_before.html.haml +0 -3
  373. data/app/views/comfy/admin/cms/partials/_page_form_inner.html.haml +0 -3
  374. data/app/views/comfy/admin/cms/partials/_pages_after.html.haml +0 -3
  375. data/app/views/comfy/admin/cms/partials/_pages_before.html.haml +0 -3
  376. data/app/views/comfy/admin/cms/partials/_right_column_after.html.haml +0 -3
  377. data/app/views/comfy/admin/cms/partials/_right_column_before.html.haml +0 -3
  378. data/app/views/comfy/admin/cms/partials/_site_form_after.html.haml +0 -3
  379. data/app/views/comfy/admin/cms/partials/_site_form_before.html.haml +0 -3
  380. data/app/views/comfy/admin/cms/partials/_sites_after.html.haml +0 -3
  381. data/app/views/comfy/admin/cms/partials/_sites_before.html.haml +0 -3
  382. data/app/views/comfy/admin/cms/partials/_snippet_form_after.html.haml +0 -3
  383. data/app/views/comfy/admin/cms/partials/_snippet_form_before.html.haml +0 -3
  384. data/app/views/comfy/admin/cms/partials/_snippets_after.html.haml +0 -3
  385. data/app/views/comfy/admin/cms/partials/_snippets_before.html.haml +0 -3
  386. data/app/views/comfy/admin/cms/sites/_mirrors.html.haml +0 -18
  387. data/app/views/comfy/cms/content/render_sitemap.xml.builder +0 -14
  388. data/app/views/layouts/comfy/admin/cms/_footer.html.haml +0 -3
  389. data/config/initializers/paperclip.rb +0 -3
  390. data/config/initializers/secret_token.rb +0 -15
  391. data/db/cms_fixtures/sample-site/categories/files.yml +0 -1
  392. data/db/cms_fixtures/sample-site/categories/pages.yml +0 -1
  393. data/db/cms_fixtures/sample-site/categories/snippets.yml +0 -1
  394. data/db/cms_fixtures/sample-site/files/_sample.jpg.yml +0 -5
  395. data/db/cms_fixtures/sample-site/layouts/default/attributes.yml +0 -1
  396. data/db/cms_fixtures/sample-site/layouts/default/content.html +0 -5
  397. data/db/cms_fixtures/sample-site/layouts/default/javascript.js +0 -1
  398. data/db/cms_fixtures/sample-site/layouts/default/nested/attributes.yml +0 -2
  399. data/db/cms_fixtures/sample-site/layouts/default/nested/content.haml +0 -3
  400. data/db/cms_fixtures/sample-site/layouts/default/nested/javascript.js +0 -1
  401. data/db/cms_fixtures/sample-site/layouts/default/nested/stylesheet.css +0 -1
  402. data/db/cms_fixtures/sample-site/layouts/default/stylesheet.css +0 -1
  403. data/db/cms_fixtures/sample-site/pages/index/attributes.yml +0 -6
  404. data/db/cms_fixtures/sample-site/pages/index/child/attributes.yml +0 -3
  405. data/db/cms_fixtures/sample-site/pages/index/child/left.haml +0 -1
  406. data/db/cms_fixtures/sample-site/pages/index/child/right.html +0 -1
  407. data/db/cms_fixtures/sample-site/pages/index/content.html +0 -2
  408. data/db/cms_fixtures/sample-site/snippets/default/attributes.yml +0 -4
  409. data/db/cms_fixtures/sample-site/snippets/default/content.html +0 -1
  410. data/db/seeds.rb +0 -7
  411. data/db/upgrade_migrations/02_upgrade_to_1_1_0.rb +0 -19
  412. data/db/upgrade_migrations/03_upgrade_to_1_2_0.rb +0 -15
  413. data/db/upgrade_migrations/04_upgrade_to_1_3_0.rb +0 -23
  414. data/db/upgrade_migrations/05_upgrade_to_1_4_0.rb +0 -33
  415. data/db/upgrade_migrations/06_upgrade_to_1_5_0.rb +0 -21
  416. data/db/upgrade_migrations/07_upgrade_to_1_6_0.rb +0 -25
  417. data/db/upgrade_migrations/08_upgrade_to_1_12_0.rb +0 -83
  418. data/doc/preview.png +0 -0
  419. data/lib/comfortable_mexican_sofa/extensions/cms_manageable.rb +0 -106
  420. data/lib/comfortable_mexican_sofa/extensions/is_categorized.rb +0 -49
  421. data/lib/comfortable_mexican_sofa/extensions/is_mirrored.rb +0 -86
  422. data/lib/comfortable_mexican_sofa/extensions/rails.rb +0 -17
  423. data/lib/comfortable_mexican_sofa/fixture.rb +0 -82
  424. data/lib/comfortable_mexican_sofa/fixture/category.rb +0 -42
  425. data/lib/comfortable_mexican_sofa/fixture/file.rb +0 -85
  426. data/lib/comfortable_mexican_sofa/fixture/layout.rb +0 -95
  427. data/lib/comfortable_mexican_sofa/fixture/page.rb +0 -129
  428. data/lib/comfortable_mexican_sofa/fixture/snippet.rb +0 -75
  429. data/lib/comfortable_mexican_sofa/tag.rb +0 -154
  430. data/lib/comfortable_mexican_sofa/tags/asset.rb +0 -30
  431. data/lib/comfortable_mexican_sofa/tags/collection.rb +0 -64
  432. data/lib/comfortable_mexican_sofa/tags/field_boolean.rb +0 -17
  433. data/lib/comfortable_mexican_sofa/tags/field_datetime.rb +0 -17
  434. data/lib/comfortable_mexican_sofa/tags/field_integer.rb +0 -17
  435. data/lib/comfortable_mexican_sofa/tags/field_rich_text.rb +0 -17
  436. data/lib/comfortable_mexican_sofa/tags/field_string.rb +0 -17
  437. data/lib/comfortable_mexican_sofa/tags/field_text.rb +0 -17
  438. data/lib/comfortable_mexican_sofa/tags/file.rb +0 -29
  439. data/lib/comfortable_mexican_sofa/tags/helper.rb +0 -24
  440. data/lib/comfortable_mexican_sofa/tags/page_datetime.rb +0 -13
  441. data/lib/comfortable_mexican_sofa/tags/page_file.rb +0 -62
  442. data/lib/comfortable_mexican_sofa/tags/page_files.rb +0 -51
  443. data/lib/comfortable_mexican_sofa/tags/page_integer.rb +0 -13
  444. data/lib/comfortable_mexican_sofa/tags/page_markdown.rb +0 -16
  445. data/lib/comfortable_mexican_sofa/tags/page_rich_text.rb +0 -13
  446. data/lib/comfortable_mexican_sofa/tags/page_string.rb +0 -13
  447. data/lib/comfortable_mexican_sofa/tags/page_text.rb +0 -13
  448. data/lib/comfortable_mexican_sofa/tags/partial.rb +0 -23
  449. data/lib/comfortable_mexican_sofa/tags/snippet.rb +0 -19
  450. data/lib/comfortable_mexican_sofa/tags/template.rb +0 -22
  451. data/lib/generators/comfy/scaffold/templates/views/_form.haml +0 -6
  452. data/lib/generators/comfy/scaffold/templates/views/index.haml +0 -23
  453. data/lib/tasks/comfortable_mexican_sofa.rake +0 -37
  454. data/test/fixtures/comfy/cms/blocks.yml +0 -12
  455. data/test/gemfiles/Gemfile.rails.4.1 +0 -22
  456. data/test/gemfiles/Gemfile.rails.4.2 +0 -22
  457. data/test/gemfiles/Gemfile.rails.5.0 +0 -23
  458. data/test/gemfiles/Gemfile.rails.master +0 -23
  459. data/test/integration/fixtures_test.rb +0 -65
  460. data/test/integration/mirrors_test.rb +0 -72
  461. data/test/lib/fixtures/categories_test.rb +0 -36
  462. data/test/lib/fixtures/files_test.rb +0 -109
  463. data/test/lib/fixtures/layouts_test.rb +0 -135
  464. data/test/lib/fixtures/pages_test.rb +0 -168
  465. data/test/lib/fixtures/snippets_test.rb +0 -106
  466. data/test/lib/fixtures_test.rb +0 -43
  467. data/test/lib/mirrors_test.rb +0 -254
  468. data/test/lib/tag_test.rb +0 -309
  469. data/test/lib/tags/asset_test.rb +0 -95
  470. data/test/lib/tags/collection_test.rb +0 -117
  471. data/test/lib/tags/field_boolean_test.rb +0 -49
  472. data/test/lib/tags/field_datetime_test.rb +0 -50
  473. data/test/lib/tags/field_integer_test.rb +0 -49
  474. data/test/lib/tags/field_rich_text_test.rb +0 -49
  475. data/test/lib/tags/field_string_test.rb +0 -52
  476. data/test/lib/tags/field_text_test.rb +0 -48
  477. data/test/lib/tags/file_test.rb +0 -67
  478. data/test/lib/tags/helper_test.rb +0 -86
  479. data/test/lib/tags/page_datetime_test.rb +0 -50
  480. data/test/lib/tags/page_file_test.rb +0 -119
  481. data/test/lib/tags/page_files_test.rb +0 -117
  482. data/test/lib/tags/page_integer_test.rb +0 -49
  483. data/test/lib/tags/page_markdown_test.rb +0 -48
  484. data/test/lib/tags/page_rich_text_test.rb +0 -49
  485. data/test/lib/tags/page_string_test.rb +0 -49
  486. data/test/lib/tags/page_text_test.rb +0 -52
  487. data/test/lib/tags/partial_test.rb +0 -76
  488. data/test/lib/tags/snippet_test.rb +0 -45
  489. data/test/lib/tags/template_test.rb +0 -56
  490. data/test/models/block_test.rb +0 -233
@@ -1,106 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require_relative '../../test_helper'
4
-
5
- class FixtureSnippetsTest < ActiveSupport::TestCase
6
-
7
- def test_creation
8
- Comfy::Cms::Snippet.delete_all
9
-
10
- # need to have categories present before linking
11
- site = comfy_cms_sites(:default)
12
- site.categories.create!(:categorized_type => 'Comfy::Cms::Snippet', :label => 'category_a')
13
- site.categories.create!(:categorized_type => 'Comfy::Cms::Snippet', :label => 'category_b')
14
-
15
- assert_difference 'Comfy::Cms::Snippet.count' do
16
- ComfortableMexicanSofa::Fixture::Snippet::Importer.new('sample-site', 'default-site').import!
17
- assert snippet = Comfy::Cms::Snippet.last
18
- assert_equal 'default', snippet.identifier
19
- assert_equal 'Default Fixture Snippet', snippet.label
20
- assert_equal 'Fixture Content for Default Snippet', snippet.content
21
- assert_equal 2, snippet.categories.count
22
- assert_equal ['category_a', 'category_b'], snippet.categories.map{|c| c.label}
23
- end
24
- end
25
-
26
- def test_update
27
- snippet = comfy_cms_snippets(:default)
28
- snippet.update_column(:updated_at, 10.years.ago)
29
- assert_equal 'default', snippet.identifier
30
- assert_equal 'Default Snippet', snippet.label
31
- assert_equal 'default_snippet_content', snippet.content
32
-
33
- assert_no_difference 'Comfy::Cms::Snippet.count' do
34
- ComfortableMexicanSofa::Fixture::Snippet::Importer.new('sample-site', 'default-site').import!
35
- snippet.reload
36
- assert_equal 'default', snippet.identifier
37
- assert_equal 'Default Fixture Snippet', snippet.label
38
- assert_equal 'Fixture Content for Default Snippet', snippet.content
39
- end
40
- end
41
-
42
- def test_delete
43
- old_snippet = comfy_cms_snippets(:default)
44
- old_snippet.update_column(:identifier, 'old')
45
-
46
- assert_no_difference 'Comfy::Cms::Snippet.count' do
47
- ComfortableMexicanSofa::Fixture::Snippet::Importer.new('sample-site', 'default-site').import!
48
- assert snippet = Comfy::Cms::Snippet.last
49
- assert_equal 'default', snippet.identifier
50
- assert_equal 'Default Fixture Snippet', snippet.label
51
- assert_equal 'Fixture Content for Default Snippet', snippet.content
52
-
53
- assert_nil Comfy::Cms::Snippet.where(:id => old_snippet.id).first
54
- end
55
- end
56
-
57
- def test_update_ignoring
58
- snippet = comfy_cms_snippets(:default)
59
- snippet_path = File.join(ComfortableMexicanSofa.config.fixtures_path, 'sample-site', 'snippets', 'default')
60
- attr_file_path = File.join(snippet_path, 'attributes.yml')
61
- content_file_path = File.join(snippet_path, 'content.html')
62
-
63
- assert snippet.updated_at >= File.mtime(attr_file_path)
64
- assert snippet.updated_at >= File.mtime(content_file_path)
65
-
66
- ComfortableMexicanSofa::Fixture::Snippet::Importer.new('sample-site', 'default-site').import!
67
- snippet.reload
68
- assert_equal 'default', snippet.identifier
69
- assert_equal 'Default Snippet', snippet.label
70
- assert_equal 'default_snippet_content', snippet.content
71
- end
72
-
73
- def test_update_force
74
- snippet = comfy_cms_snippets(:default)
75
- ComfortableMexicanSofa::Fixture::Snippet::Importer.new('sample-site', 'default-site').import!
76
- snippet.reload
77
- assert_equal 'Default Snippet', snippet.label
78
-
79
- ComfortableMexicanSofa::Fixture::Snippet::Importer.new('sample-site', 'default-site', :forced).import!
80
- snippet.reload
81
- assert_equal 'Default Fixture Snippet', snippet.label
82
- end
83
-
84
- def test_export
85
- comfy_cms_categories(:default).categorizations.create!(
86
- :categorized => comfy_cms_snippets(:default)
87
- )
88
-
89
- host_path = File.join(ComfortableMexicanSofa.config.fixtures_path, 'test-site')
90
- attr_path = File.join(host_path, 'snippets/default/attributes.yml')
91
- content_path = File.join(host_path, 'snippets/default/content.html')
92
-
93
- ComfortableMexicanSofa::Fixture::Snippet::Exporter.new('default-site', 'test-site').export!
94
-
95
- assert File.exists?(attr_path)
96
- assert File.exists?(content_path)
97
- assert_equal ({
98
- 'label' => 'Default Snippet',
99
- 'categories' => ['Default']
100
- }), YAML.load_file(attr_path)
101
- assert_equal comfy_cms_snippets(:default).content, IO.read(content_path)
102
-
103
- FileUtils.rm_rf(host_path)
104
- end
105
-
106
- end
@@ -1,43 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require_relative '../test_helper'
4
-
5
- class FixtureTest < ActiveSupport::TestCase
6
-
7
- def test_import_all
8
- Comfy::Cms::Page.destroy_all
9
- Comfy::Cms::Layout.destroy_all
10
- Comfy::Cms::Snippet.destroy_all
11
-
12
- assert_difference 'Comfy::Cms::Layout.count', 2 do
13
- assert_difference 'Comfy::Cms::Page.count', 2 do
14
- assert_difference 'Comfy::Cms::Snippet.count', 1 do
15
- ComfortableMexicanSofa::Fixture::Importer.new('sample-site', 'default-site').import!
16
- end
17
- end
18
- end
19
- end
20
-
21
- def test_import_all_with_no_site
22
- comfy_cms_sites(:default).destroy
23
-
24
- assert_exception_raised ActiveRecord::RecordNotFound do
25
- ComfortableMexicanSofa::Fixture::Importer.new('sample-site', 'default-site').import!
26
- end
27
- end
28
-
29
- def test_export_all
30
- host_path = File.join(ComfortableMexicanSofa.config.fixtures_path, 'test-site')
31
- ComfortableMexicanSofa::Fixture::Exporter.new('default-site', 'test-site').export!
32
- FileUtils.rm_rf(host_path)
33
- end
34
-
35
- def test_export_all_with_no_site
36
- comfy_cms_sites(:default).destroy
37
-
38
- assert_exception_raised ActiveRecord::RecordNotFound do
39
- ComfortableMexicanSofa::Fixture::Exporter.new('sample-site', 'default-site').export!
40
- end
41
- end
42
-
43
- end
@@ -1,254 +0,0 @@
1
- require_relative '../test_helper'
2
-
3
- class MirrorsTest < ActiveSupport::TestCase
4
-
5
- def test_layout_creation
6
- setup_sites
7
- assert_difference 'Comfy::Cms::Layout.count', 2 do
8
- layout = @site_a.layouts.create!(:identifier => 'test')
9
- assert_equal 1, layout.mirrors.size
10
- assert_equal 'test', layout.mirrors.first.identifier
11
- end
12
- end
13
-
14
- def test_page_creation
15
- setup_sites
16
- layout = @site_a.layouts.create!(:identifier => 'test')
17
- label = 'Root'
18
- mirror_label = 'Mirror Root'
19
-
20
- assert_difference 'Comfy::Cms::Page.count', 2 do
21
- page = @site_a.pages.create!(
22
- :layout => layout,
23
- :label => label
24
- )
25
- page_mirror = page.mirrors.first
26
-
27
- assert_equal 1, page.mirrors.size
28
- assert_equal '/', page_mirror.full_path
29
- assert_equal page_mirror.label, label
30
-
31
- page_mirror.update_attributes!(
32
- :label => mirror_label
33
- )
34
- page.reload
35
- assert_equal page.label, label
36
- assert_equal page_mirror.label, mirror_label
37
- end
38
- end
39
-
40
- def test_snippet_creation
41
- setup_sites
42
- assert_difference 'Comfy::Cms::Snippet.count', 2 do
43
- snippet = @site_a.snippets.create(:identifier => 'test')
44
- assert_equal 1, snippet.mirrors.size
45
- assert_equal 'test', snippet.mirrors.first.identifier
46
- end
47
- end
48
-
49
- def test_layout_update
50
- setup_sites
51
- layout_1a = @site_a.layouts.create!(:identifier => 'test_a')
52
- layout_1b = @site_a.layouts.create!(:identifier => 'test_b')
53
- layout_1c = @site_a.layouts.create!(:identifier => 'nested', :parent => layout_1a)
54
-
55
- assert layout_2a = layout_1a.mirrors.first
56
- assert layout_2b = layout_1b.mirrors.first
57
- assert layout_2c = layout_1c.mirrors.first
58
- assert_equal layout_2a, layout_2c.parent
59
-
60
- layout_1c.update_attributes!(
61
- :identifier => 'updated',
62
- :parent => layout_1b,
63
- :content => 'updated content'
64
- )
65
- layout_2c.reload
66
- assert_equal 'updated', layout_2c.identifier
67
- assert_equal layout_2b, layout_2c.parent
68
- assert_not_equal 'updated content', layout_2c
69
- end
70
-
71
- def test_page_update
72
- setup_sites
73
- layout_1a = @site_a.layouts.create!(:identifier => 'test_a')
74
- layout_1b = @site_a.layouts.create!(:identifier => 'test_b')
75
-
76
- page_1r = @site_a.pages.create!(:slug => 'root', :layout => layout_1a)
77
- page_1a = @site_a.pages.create!(:slug => 'test_a', :layout => layout_1a)
78
- page_1b = @site_a.pages.create!(:slug => 'test_b', :layout => layout_1a)
79
- assert_equal page_1r, page_1b.parent
80
-
81
- assert layout_2b = layout_1b.mirrors.first
82
- assert page_2a = page_1a.mirrors.first
83
- assert page_2b = page_1b.mirrors.first
84
-
85
- page_1b.update_attributes!(
86
- :slug => 'updated',
87
- :parent => page_1a,
88
- :layout => layout_1b
89
- )
90
- page_2b.reload
91
- assert_equal 'updated', page_2b.slug
92
- assert_equal page_2a, page_2b.parent
93
- assert_equal '/test_a/updated', page_2b.full_path
94
- assert_equal layout_2b, page_2b.layout
95
- end
96
-
97
- def test_snippet_update
98
- setup_sites
99
- snippet_1 = @site_a.snippets.create(:identifier => 'test')
100
- assert snippet_2 = snippet_1.mirrors.first
101
- snippet_1.update_attributes!(
102
- :identifier => 'updated',
103
- :content => 'updated content'
104
- )
105
- snippet_2.reload
106
- assert_equal 'updated', snippet_2.identifier
107
- assert_not_equal 'updated content', snippet_2.content
108
- end
109
-
110
- def test_layout_destroy
111
- setup_sites
112
- layout_1a = @site_a.layouts.create!(:identifier => 'test_a')
113
- layout_1b = @site_a.layouts.create!(:identifier => 'test_b')
114
- layout_1c = @site_a.layouts.create!(:identifier => 'nested', :parent => layout_1b)
115
-
116
- assert layout_2a = layout_1a.mirrors.first
117
- assert layout_2b = layout_1b.mirrors.first
118
- assert layout_2c = layout_1c.mirrors.first
119
-
120
- assert_difference ['@site_a.layouts.count', '@site_b.layouts.count'], -1 do
121
- layout_1a.destroy
122
- assert_nil Comfy::Cms::Layout.find_by_id(layout_2a.id)
123
- end
124
-
125
- assert_difference ['@site_a.layouts.count', '@site_b.layouts.count'], -2 do
126
- layout_1b.destroy
127
- assert_nil Comfy::Cms::Layout.find_by_id(layout_2b.id)
128
- end
129
- end
130
-
131
- def test_page_destroy
132
- setup_sites
133
- layout = @site_a.layouts.create!(:identifier => 'test')
134
- page_1r = @site_a.pages.create!(:slug => 'root', :layout => layout)
135
- page_1a = @site_a.pages.create!(:slug => 'test_a', :layout => layout)
136
- page_1b = @site_a.pages.create!(:slug => 'test_b', :layout => layout)
137
-
138
- assert page_2r = page_1r.mirrors.first
139
- assert page_2a = page_1a.mirrors.first
140
- assert page_2b = page_1b.mirrors.first
141
-
142
- assert_difference ['@site_a.pages.count', '@site_b.pages.count'], -1 do
143
- page_1a.destroy
144
- assert_nil Comfy::Cms::Page.find_by_id(page_2a.id)
145
- end
146
-
147
- assert_difference ['@site_a.pages.count', '@site_b.pages.count'], -2 do
148
- page_1r.destroy
149
- assert_nil Comfy::Cms::Page.find_by_id(page_2r.id)
150
- end
151
- end
152
-
153
- def test_snippet_destroy
154
- setup_sites
155
- snippet_1 = @site_a.snippets.create(:identifier => 'test')
156
- assert snippet_2 = snippet_1.mirrors.first
157
-
158
- assert_difference ['@site_a.snippets.count', '@site_b.snippets.count'], -1 do
159
- snippet_1.destroy
160
- assert_nil Comfy::Cms::Snippet.find_by_id(snippet_2.id)
161
- end
162
- end
163
-
164
- def test_site_creation_as_mirror
165
- site = comfy_cms_sites(:default)
166
- Comfy::Cms::Site.update_all(:is_mirrored => true) # bypassing callbacks
167
-
168
- assert_difference 'Comfy::Cms::Site.count' do
169
- assert_difference 'Comfy::Cms::Layout.count', site.layouts.count do
170
- assert_difference 'Comfy::Cms::Page.count', site.pages.count do
171
- assert_difference 'Comfy::Cms::Snippet.count', site.snippets.count do
172
- mirror = Comfy::Cms::Site.create!(
173
- :identifier => 'mirror',
174
- :hostname => 'mirror.host',
175
- :is_mirrored => true
176
- )
177
- end
178
- end
179
- end
180
- end
181
- end
182
-
183
- def test_site_update_to_mirror
184
- site = comfy_cms_sites(:default)
185
- Comfy::Cms::Site.update_all(:is_mirrored => true) # bypassing callbacks
186
-
187
- mirror = Comfy::Cms::Site.create!(
188
- :identifier => 'mirror',
189
- :hostname => 'mirror.host'
190
- )
191
- layout = mirror.layouts.create!(
192
- :identifier => 'mirror_layout'
193
- )
194
- home_page = mirror.pages.create!(
195
- :label => 'mirror home',
196
- :layout => layout
197
- )
198
- child_page = mirror.pages.create!(
199
- :label => 'mirror child',
200
- :layout => layout,
201
- :slug => 'mirror-child',
202
- :parent => home_page
203
- )
204
- snippet = mirror.snippets.create!(
205
- :identifier => 'mirror_snippet'
206
- )
207
-
208
- assert_difference ['site.layouts.count', 'site.pages.count', 'site.snippets.count'], 1 do
209
- assert_difference 'mirror.layouts.count', 3 do
210
- assert_difference 'mirror.pages.count', 1 do
211
- assert_difference 'mirror.snippets.count', 1 do
212
-
213
- mirror.update_attributes(:is_mirrored => true)
214
-
215
- site.reload
216
- assert site.layouts.where(:identifier => 'mirror_layout').present?
217
- assert site.pages.where(:slug => 'mirror-child').present?
218
- assert site.snippets.where(:identifier => 'mirror_snippet').present?
219
-
220
- mirror.reload
221
- assert mirror.layouts.where(:identifier => 'default').present?
222
- assert mirror.pages.where(:slug => 'child-page').present?
223
- assert mirror.snippets.where(:identifier => 'default').present?
224
- end
225
- end
226
- end
227
- end
228
- end
229
-
230
- def test_site_destruction
231
- site = comfy_cms_sites(:default)
232
- Comfy::Cms::Site.update_all(:is_mirrored => true) # bypassing callbacks
233
-
234
- mirror = Comfy::Cms::Site.create!(
235
- :identifier => 'mirror',
236
- :hostname => 'mirror.host',
237
- :is_mirrored => true
238
- )
239
- mirror.reload
240
- assert_no_difference ['site.layouts.count', 'site.pages.count', 'site.snippets.count'] do
241
- mirror.destroy
242
- site.reload
243
- end
244
- end
245
-
246
- protected
247
-
248
- def setup_sites
249
- Comfy::Cms::Site.delete_all
250
- @site_a = Comfy::Cms::Site.create!(:identifier => 'site_a', :hostname => 'site-a.host', :is_mirrored => true)
251
- @site_b = Comfy::Cms::Site.create!(:identifier => 'site_b', :hostname => 'site-b.host', :is_mirrored => true)
252
- end
253
-
254
- end
@@ -1,309 +0,0 @@
1
- require_relative '../test_helper'
2
-
3
- class TagTest < ActiveSupport::TestCase
4
-
5
- def test_tokenizer_regex
6
- regex = ComfortableMexicanSofa::Tag::TOKENIZER_REGEX
7
-
8
- tokens = 'text { text } text'.scan(regex)
9
- assert_nil tokens[0][0]
10
- assert_equal 'text { text } text', tokens[0][1]
11
-
12
- tokens = 'content<{{cms:some_tag content'.scan(regex)
13
- assert_nil tokens[0][0]
14
- assert_equal 'content<', tokens[0][1]
15
- assert_nil tokens[1][0]
16
- assert_equal '{{', tokens[1][1]
17
- assert_nil tokens[2][0]
18
- assert_equal 'cms:some_tag content', tokens[2][1]
19
-
20
- tokens = 'content<{{cms some_tag}}>content'.scan(regex)
21
- assert_nil tokens[0][0]
22
- assert_equal 'content<', tokens[0][1]
23
- assert_nil tokens[1][0]
24
- assert_equal '{{', tokens[1][1]
25
- assert_nil tokens[2][0]
26
- assert_equal 'cms some_tag}}>content',tokens[2][1]
27
-
28
- tokens = 'content<{{cms:some_tag}}>content'.scan(regex)
29
- assert_nil tokens[0][0]
30
- assert_equal 'content<', tokens[0][1]
31
- assert_equal '{{cms:some_tag}}', tokens[1][0]
32
- assert_nil tokens[1][1]
33
- assert_nil tokens[2][0]
34
- assert_equal '>content', tokens[2][1]
35
-
36
- tokens = 'content<{{cms:type:label}}>content'.scan(regex)
37
- assert_nil tokens[0][0]
38
- assert_equal 'content<', tokens[0][1]
39
- assert_equal '{{cms:type:label}}', tokens[1][0]
40
- assert_nil tokens[1][1]
41
- assert_nil tokens[2][0]
42
- assert_equal '>content', tokens[2][1]
43
-
44
- tokens = 'content<{{cms:type:label }}>content'.scan(regex)
45
- assert_nil tokens[0][0]
46
- assert_equal 'content<', tokens[0][1]
47
- assert_equal '{{cms:type:label }}', tokens[1][0]
48
- assert_nil tokens[1][1]
49
- assert_nil tokens[2][0]
50
- assert_equal '>content', tokens[2][1]
51
-
52
- tokens = 'content<{{ cms:type:la/b el }}>content'.scan(regex)
53
- assert_nil tokens[0][0]
54
- assert_equal 'content<', tokens[0][1]
55
- assert_equal '{{ cms:type:la/b el }}',tokens[1][0]
56
- assert_nil tokens[1][1]
57
- assert_nil tokens[2][0]
58
- assert_equal '>content', tokens[2][1]
59
- end
60
-
61
- def test_tokenizer_regex_limit
62
- string = '<p>text</p>' * 400
63
- tokens = string.scan(ComfortableMexicanSofa::Tag::TOKENIZER_REGEX)
64
- assert_equal 1, tokens.count
65
- assert_nil tokens[0][0]
66
- assert_equal string, tokens[0][1]
67
- end
68
-
69
- def test_content_for_existing_page
70
- page = comfy_cms_pages(:default)
71
- assert page.tags.blank?
72
- assert_equal rendered_content_formatter(
73
- '
74
- layout_content_a
75
- default_page_text_content_a
76
- default_snippet_content
77
- default_page_text_content_b
78
- layout_content_b
79
- default_snippet_content
80
- layout_content_c'
81
- ), page.render
82
-
83
- assert_equal 4, page.tags.size
84
- assert_equal 'field_text_default_field_text', page.tags[0].id
85
- assert_equal 'page_text_default_page_text', page.tags[1].id
86
- assert_equal 'snippet_default', page.tags[2].id
87
- assert_equal page.tags[1], page.tags[2].parent
88
- assert_equal 'snippet_default', page.tags[3].id
89
- end
90
-
91
- def test_content_for_new_page
92
- page = Comfy::Cms::Page.new
93
- assert page.blocks.blank?
94
- assert page.tags.blank?
95
- assert_equal '', page.content_cache
96
- assert page.tags.blank?
97
- end
98
-
99
- def test_content_for_new_page_with_layout
100
- page = comfy_cms_sites(:default).pages.new(:layout => comfy_cms_layouts(:default))
101
- assert page.blocks.blank?
102
- assert page.tags.blank?
103
- assert_equal rendered_content_formatter(
104
- '
105
- layout_content_a
106
-
107
- layout_content_b
108
- default_snippet_content
109
- layout_content_c'
110
- ), page.render
111
-
112
- assert_equal 3, page.tags.size
113
- assert_equal 'field_text_default_field_text', page.tags[0].id
114
- assert_equal 'page_text_default_page_text', page.tags[1].id
115
- assert_equal 'snippet_default', page.tags[2].id
116
- end
117
-
118
- def test_content_for_new_page_with_initilized_comfy_cms_blocks
119
- page = comfy_cms_sites(:default).pages.new(:layout => comfy_cms_layouts(:default))
120
- assert page.blocks.blank?
121
- assert page.tags.blank?
122
- page.blocks_attributes = [
123
- { :identifier => 'default_field_text',
124
- :content => 'new_default_field_content'
125
- },
126
- { :identifier => 'default_page_text',
127
- :content => "new_default_page_text_content\n{{cms:snippet:default}}"
128
- },
129
- { :identifier => 'bogus_field_that_never_will_get_rendered',
130
- :content => 'some_content_that_doesnot_matter'
131
- }
132
- ]
133
- assert_equal 3, page.blocks.size
134
-
135
- assert_equal rendered_content_formatter(
136
- '
137
- layout_content_a
138
- new_default_page_text_content
139
- default_snippet_content
140
- layout_content_b
141
- default_snippet_content
142
- layout_content_c'
143
- ), page.render
144
-
145
- assert_equal 4, page.tags.size
146
- assert_equal 'field_text_default_field_text', page.tags[0].id
147
- assert_equal 'page_text_default_page_text', page.tags[1].id
148
- assert_equal 'snippet_default', page.tags[2].id
149
- assert_equal page.tags[1], page.tags[2].parent
150
- assert_equal 'snippet_default', page.tags[3].id
151
- end
152
-
153
- def test_content_with_repeated_tags
154
- page = comfy_cms_pages(:default)
155
- page.layout.content << "\n{{cms:page:default_page_text:text}}"
156
- page.layout.save!
157
-
158
- assert_equal rendered_content_formatter(
159
- '
160
- layout_content_a
161
- default_page_text_content_a
162
- default_snippet_content
163
- default_page_text_content_b
164
- layout_content_b
165
- default_snippet_content
166
- layout_content_c
167
- default_page_text_content_a
168
- default_snippet_content
169
- default_page_text_content_b'
170
- ), page.render
171
-
172
- assert_equal 6, page.tags.size
173
- assert_equal 'field_text_default_field_text', page.tags[0].id
174
- assert_equal 'page_text_default_page_text', page.tags[1].id
175
- assert_equal 'snippet_default', page.tags[2].id
176
- assert_equal page.tags[1], page.tags[2].parent
177
- assert_equal 'snippet_default', page.tags[3].id
178
- assert_equal 'page_text_default_page_text', page.tags[4].id
179
- assert_equal 'snippet_default', page.tags[5].id
180
- assert_equal page.tags[4], page.tags[5].parent
181
- end
182
-
183
- def test_content_with_cyclical_tags
184
- page = comfy_cms_pages(:default)
185
- snippet = comfy_cms_snippets(:default)
186
- snippet.update_attributes(:content => "infinite {{cms:page:default}} loop")
187
- assert_equal rendered_content_formatter(
188
- '
189
- layout_content_a
190
- default_page_text_content_a
191
- infinite loop
192
- default_page_text_content_b
193
- layout_content_b
194
- infinite loop
195
- layout_content_c'
196
- ), page.render
197
- assert_equal 6, page.tags.size
198
- end
199
-
200
- def test_is_cms_block?
201
- tag = ComfortableMexicanSofa::Tag::PageText.initialize_tag(
202
- comfy_cms_pages(:default), '{{ cms:page:content:text }}'
203
- )
204
- assert tag.is_cms_block?
205
-
206
- tag = ComfortableMexicanSofa::Tag::FieldText.initialize_tag(
207
- comfy_cms_pages(:default), '{{ cms:field:content:text }}'
208
- )
209
- assert tag.is_cms_block?
210
-
211
- tag = ComfortableMexicanSofa::Tag::Snippet.initialize_tag(
212
- comfy_cms_pages(:default), '{{ cms:snippet:label }}'
213
- )
214
- assert !tag.is_cms_block?
215
-
216
- tag = ComfortableMexicanSofa::Tag::File.initialize_tag(
217
- comfy_cms_pages(:default), '{{ cms:file:sample.jpg }}'
218
- )
219
- assert !tag.is_cms_block?
220
- end
221
-
222
- def test_content_with_irb_disabled
223
- assert_equal false, ComfortableMexicanSofa.config.allow_irb
224
-
225
- site = comfy_cms_sites(:default)
226
- layout = site.layouts.create!(
227
- :identifier => 'no-irb-layout',
228
- :content => '<% 1 + 1 %> {{cms:page:content}} {{cms:collection:snippet:comfy/cms/snippet}} <%= 1 + 1 %>'
229
- )
230
- snippet = site.snippets.create!(
231
- :identifier => 'no-irb-snippet',
232
- :content => '<% 2 + 2 %> snippet <%= 2 + 2 %>'
233
- )
234
- page = site.pages.create!(
235
- :slug => 'no-irb-page',
236
- :parent_id => comfy_cms_pages(:default).id,
237
- :layout_id => layout.id,
238
- :blocks_attributes => [
239
- { :identifier => 'content',
240
- :content => 'text {{ cms:snippet:no-irb-snippet }} {{ cms:partial:path/to }} {{ cms:helper:method }} text' },
241
- { :identifier => 'snippet',
242
- :content => snippet.id }
243
- ]
244
- )
245
- assert_equal "&lt;% 1 + 1 %&gt; text &lt;% 2 + 2 %&gt; snippet &lt;%= 2 + 2 %&gt; <%= render :partial => 'path/to' %> <%= method() %> text <%= render :partial => 'partials/comfy/cms/snippets', :locals => {:model => 'Comfy::Cms::Snippet', :identifier => '#{snippet.id}'} %> &lt;%= 1 + 1 %&gt;", page.content_cache
246
- end
247
-
248
- def test_content_with_irb_enabled
249
- ComfortableMexicanSofa.config.allow_irb = true
250
-
251
- site = comfy_cms_sites(:default)
252
- layout = site.layouts.create!(
253
- :identifier => 'irb-layout',
254
- :content => '<% 1 + 1 %> {{cms:page:content}} {{cms:collection:snippet:comfy/cms/snippet}} <%= 1 + 1 %>'
255
- )
256
- snippet = site.snippets.create!(
257
- :identifier => 'irb-snippet',
258
- :content => '<% 2 + 2 %> snippet <%= 2 + 2 %>'
259
- )
260
- page = site.pages.create!(
261
- :slug => 'irb-page',
262
- :parent_id => comfy_cms_pages(:default).id,
263
- :layout_id => layout.id,
264
- :blocks_attributes => [
265
- { :identifier => 'content',
266
- :content => 'text {{ cms:snippet:irb-snippet }} {{ cms:partial:path/to }} {{ cms:helper:method }} text' },
267
- { :identifier => 'snippet',
268
- :content => snippet.id.to_s }
269
- ]
270
- )
271
-
272
- assert_equal "<% 1 + 1 %> text <% 2 + 2 %> snippet <%= 2 + 2 %> <%= render :partial => 'path/to' %> <%= method() %> text <%= render :partial => 'partials/comfy/cms/snippets', :locals => {:model => 'Comfy::Cms::Snippet', :identifier => '#{snippet.id}'} %> <%= 1 + 1 %>", page.render
273
- end
274
-
275
- def test_escaping_of_parameters
276
- tag = ComfortableMexicanSofa::Tag::Helper.initialize_tag(
277
- comfy_cms_pages(:default), '{{cms:helper:h:"\'+User.first.inspect+\'"}}'
278
- )
279
- assert_equal %{<%= h('\\'+User.first.inspect+\\'') %>}, tag.content
280
- assert_equal %{<%= h('\\'+User.first.inspect+\\'') %>}, tag.render
281
- end
282
-
283
- def test_tag_initialization_with_namespace
284
- assert tag = ComfortableMexicanSofa::Tag::PageString.initialize_tag(
285
- comfy_cms_pages(:default), '{{ cms:page:content:string }}'
286
- )
287
- assert_equal 'content', tag.identifier
288
- assert_nil tag.namespace
289
-
290
- assert tag = ComfortableMexicanSofa::Tag::PageString.initialize_tag(
291
- comfy_cms_pages(:default), '{{ cms:page:home.content:string }}'
292
- )
293
- assert_equal 'home.content', tag.identifier
294
- assert_equal 'home', tag.namespace
295
-
296
- assert tag = ComfortableMexicanSofa::Tag::PageString.initialize_tag(
297
- comfy_cms_pages(:default), '{{ cms:page:home.main.content:string }}'
298
- )
299
- assert_equal 'home.main.content', tag.identifier
300
- assert_equal 'home.main', tag.namespace
301
-
302
- assert tag = ComfortableMexicanSofa::Tag::PageString.initialize_tag(
303
- comfy_cms_pages(:default), '{{ cms:page:ho-me.ma-in.con-tent:string }}'
304
- )
305
- assert_equal 'ho-me.ma-in.con-tent', tag.identifier
306
- assert_equal 'ho-me.ma-in', tag.namespace
307
- end
308
-
309
- end