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,4 +1,4 @@
1
- class Create<%= class_name.pluralize %> < ActiveRecord::Migration
1
+ class Create<%= class_name.pluralize %> < ActiveRecord::Migration[5.2]
2
2
 
3
3
  def change
4
4
  create_table :<%= file_name.pluralize %> do |t|
@@ -8,5 +8,4 @@ class Create<%= class_name.pluralize %> < ActiveRecord::Migration
8
8
  t.timestamps
9
9
  end
10
10
  end
11
-
12
- end
11
+ end
@@ -1,21 +1,21 @@
1
1
  class <%= class_name %> < ActiveRecord::Base
2
2
 
3
- # -- Relationships --------------------------------------------------------
3
+ # -- Relationships -----------------------------------------------------------
4
4
 
5
5
 
6
- # -- Callbacks ------------------------------------------------------------
6
+ # -- Callbacks ---------------------------------------------------------------
7
7
 
8
8
 
9
- # -- Validations ----------------------------------------------------------
9
+ # -- Validations -------------------------------------------------------------
10
10
 
11
11
 
12
- # -- Scopes ---------------------------------------------------------------
12
+ # -- Scopes ------------------------------------------------------------------
13
13
 
14
14
 
15
- # -- Class Methods --------------------------------------------------------
15
+ # -- Class Methods -----------------------------------------------------------
16
16
 
17
17
 
18
- # -- Instance Methods -----------------------------------------------------
18
+ # -- Instance Methods --------------------------------------------------------
19
19
 
20
20
 
21
- end
21
+ end
@@ -1,35 +1,48 @@
1
1
  require_relative '../../test_helper'
2
2
 
3
- class Admin::<%= class_name.pluralize %>ControllerTest < ActionController::TestCase
3
+ class Admin::<%= class_name.pluralize %>ControllerTest < ActionDispatch::IntegrationTest
4
4
 
5
- def setup
6
- # TODO: login as admin user
5
+ setup do
7
6
  @<%= file_name %> = <%= file_name.pluralize %>(:default)
8
7
  end
9
8
 
9
+ # Vanilla CMS has BasicAuth, so we need to send that with each request.
10
+ # Change this to fit your app's authentication strategy.
11
+ # Move this to test_helper.rb
12
+ def r(verb, path, options = {})
13
+ headers = options[:headers] || {}
14
+ headers['HTTP_AUTHORIZATION'] =
15
+ ActionController::HttpAuthentication::Basic.encode_credentials(
16
+ ComfortableMexicanSofa::AccessControl::AdminAuthentication.username,
17
+ ComfortableMexicanSofa::AccessControl::AdminAuthentication.password
18
+ )
19
+ options.merge!(headers: headers)
20
+ send(verb, path, options)
21
+ end
22
+
10
23
  def test_get_index
11
- get :index
24
+ r :get, admin_<%= file_name.pluralize %>_path
12
25
  assert_response :success
13
26
  assert assigns(:<%= file_name.pluralize %>)
14
27
  assert_template :index
15
28
  end
16
29
 
17
30
  def test_get_show
18
- get :show, :id => @<%= file_name %>
31
+ r :get, admin_<%= file_name %>_path(@<%= file_name %>)
19
32
  assert_response :success
20
33
  assert assigns(:<%= file_name %>)
21
34
  assert_template :show
22
35
  end
23
36
 
24
37
  def test_get_show_failure
25
- get :show, :id => 'invalid'
38
+ r :get, admin_<%= file_name %>_path('invalid')
26
39
  assert_response :redirect
27
- assert_redirected_to :action => :index
40
+ assert_redirected_to action: :index
28
41
  assert_equal '<%= class_name.titleize %> not found', flash[:danger]
29
42
  end
30
43
 
31
44
  def test_get_new
32
- get :new
45
+ r :get, new_admin_<%= file_name %>_path
33
46
  assert_response :success
34
47
  assert assigns(:<%= file_name %>)
35
48
  assert_template :new
@@ -37,7 +50,7 @@ class Admin::<%= class_name.pluralize %>ControllerTest < ActionController::TestC
37
50
  end
38
51
 
39
52
  def test_get_edit
40
- get :edit, :id => @<%= file_name %>
53
+ r :get, edit_admin_<%= file_name %>_path(@<%= file_name %>)
41
54
  assert_response :success
42
55
  assert assigns(:<%= file_name %>)
43
56
  assert_template :edit
@@ -46,21 +59,21 @@ class Admin::<%= class_name.pluralize %>ControllerTest < ActionController::TestC
46
59
 
47
60
  def test_creation
48
61
  assert_difference '<%= class_name %>.count' do
49
- post :create, :<%= file_name %> => {
62
+ r :post, admin_<%= file_name.pluralize %>_path, params: {<%= file_name %>: {
50
63
  <%- model_attrs.each do |attr| -%>
51
- :<%= attr.name %> => 'test <%= attr.name %>',
64
+ <%= attr.name %>: 'test <%= attr.name %>',
52
65
  <%- end -%>
53
- }
66
+ }}
54
67
  <%= file_name %> = <%= class_name %>.last
55
68
  assert_response :redirect
56
- assert_redirected_to :action => :show, :id => <%= file_name %>
69
+ assert_redirected_to action: :show, id: <%= file_name %>
57
70
  assert_equal '<%= class_name.titleize %> created', flash[:success]
58
71
  end
59
72
  end
60
73
 
61
74
  def test_creation_failure
62
75
  assert_no_difference '<%= class_name %>.count' do
63
- post :create, :<%= file_name %> => { }
76
+ r :post, admin_<%= file_name.pluralize %>_path, params: {<%= file_name %>: { }}
64
77
  assert_response :success
65
78
  assert_template :new
66
79
  assert_equal 'Failed to create <%= class_name.titleize %>', flash[:danger]
@@ -68,22 +81,22 @@ class Admin::<%= class_name.pluralize %>ControllerTest < ActionController::TestC
68
81
  end
69
82
 
70
83
  def test_update
71
- put :update, :id => @<%= file_name %>, :<%= file_name %> => {
84
+ r :put, admin_<%= file_name %>_path(@<%= file_name %>), params: {<%= file_name %>: {
72
85
  <%- if attr = model_attrs.first -%>
73
- :<%= attr.name %> => 'Updated'
86
+ <%= attr.name %>: 'Updated'
74
87
  <%- end -%>
75
- }
88
+ }}
76
89
  assert_response :redirect
77
- assert_redirected_to :action => :show, :id => @<%= file_name %>
90
+ assert_redirected_to action: :show, id: @<%= file_name %>
78
91
  assert_equal '<%= class_name.titleize %> updated', flash[:success]
79
92
  @<%= file_name %>.reload
80
93
  assert_equal 'Updated', @<%= file_name %>.<%= attr.try(:name) || 'attribute' %>
81
94
  end
82
95
 
83
96
  def test_update_failure
84
- put :update, :id => @<%= file_name %>, :<%= file_name %> => {
85
- :<%= attr.try(:name) || 'attribute' %> => ''
86
- }
97
+ r :put, admin_<%= file_name %>_path(@<%= file_name %>), params: {<%= file_name %>: {
98
+ <%= attr.try(:name) || 'attribute' %>: ''
99
+ }}
87
100
  assert_response :success
88
101
  assert_template :edit
89
102
  assert_equal 'Failed to update <%= class_name.titleize %>', flash[:danger]
@@ -93,10 +106,10 @@ class Admin::<%= class_name.pluralize %>ControllerTest < ActionController::TestC
93
106
 
94
107
  def test_destroy
95
108
  assert_difference '<%= class_name %>.count', -1 do
96
- delete :destroy, :id => @<%= file_name %>
109
+ r :delete, admin_<%= file_name %>_path(@<%= file_name %>)
97
110
  assert_response :redirect
98
- assert_redirected_to :action => :index
111
+ assert_redirected_to action: :index
99
112
  assert_equal '<%= class_name.titleize %> deleted', flash[:success]
100
113
  end
101
114
  end
102
- end
115
+ end
@@ -11,17 +11,16 @@ class <%= class_name %>Test < ActiveSupport::TestCase
11
11
  def test_validation
12
12
  <%= file_name %> = <%= class_name %>.new
13
13
  assert <%= file_name %>.invalid?
14
- assert_errors_on <%= file_name %>, <%= model_attrs.collect{|attr| ":#{attr.name}"}.join(', ') %>
14
+ assert_equal [<%= model_attrs.collect{|attr| ":#{attr.name}"}.join(', ')%>], <%= file_name %>.errors.keys
15
15
  end
16
16
 
17
17
  def test_creation
18
18
  assert_difference '<%= class_name %>.count' do
19
19
  <%= class_name %>.create(
20
20
  <%- model_attrs.each do |attr| -%>
21
- :<%= attr.name %> => 'test <%= attr.name %>',
21
+ <%= attr.name %>: 'test <%= attr.name %>',
22
22
  <%- end -%>
23
23
  )
24
24
  end
25
25
  end
26
-
27
- end
26
+ end
@@ -0,0 +1,7 @@
1
+ <%- model_attrs.each do |attr| -%>
2
+ = form.text_field :<%= attr.name %>
3
+ <%- end -%>
4
+
5
+ = form.form_actions do
6
+ = form.submit class: "btn btn-primary"
7
+ = link_to 'Cancel', admin_<%= file_name.pluralize %>_path, class: "btn btn-link"
@@ -2,4 +2,4 @@
2
2
  %h2 Edit <%= class_name.titleize %>
3
3
 
4
4
  = comfy_form_for [:admin, @<%= file_name %>] do |form|
5
- = render form
5
+ = render form
@@ -0,0 +1,21 @@
1
+ .page-header
2
+ = link_to 'New <%= class_name.titleize %>', new_admin_<%= file_name %>_path, class: 'btn btn-secondary pull-right'
3
+ %h2= '<%= class_name.pluralize.titleize %>'
4
+
5
+ = paginate @<%= file_name.pluralize %>, theme: 'comfy'
6
+
7
+ %ul.list
8
+ - @<%= file_name.pluralize %>.each do |<%= file_name %>|
9
+ %li
10
+ .row
11
+ .col-md-8.item
12
+ .item-content
13
+ .item-title
14
+ = <%= file_name%>.<%= model_attrs.first.name %>
15
+
16
+ .col-md-4.d-flex.align-items-center.justify-content-md-end
17
+ .btn-group.btn-group-sm
18
+ = link_to 'Edit', edit_admin_<%= file_name %>_path(<%= file_name %>), class: 'btn btn-outline-secondary'
19
+ = link_to 'Delete', admin_<%= file_name %>_path(<%= file_name %>), method: :delete, data: {confirm: 'Are you sure?'}, class: 'btn btn-danger'
20
+
21
+ = paginate @<%= file_name.pluralize %>, theme: 'comfy'
@@ -2,4 +2,4 @@
2
2
  %h2 New <%= class_name.titleize %>
3
3
 
4
4
  = comfy_form_for [:admin, @<%= file_name %>] do |form|
5
- = render form
5
+ = render form
@@ -1,4 +1,4 @@
1
1
  .page-header
2
2
  %h2 <%= class_name.titleize %>
3
-
4
- = debug @<%= file_name %>
3
+
4
+ = debug @<%= file_name %>
@@ -0,0 +1,37 @@
1
+ namespace :comfy do
2
+ namespace :cms_seeds do
3
+
4
+ desc 'Import CMS Seed data into database (from: folder name, to: site identifier)'
5
+
6
+ task :import, [:from, :to] => [:environment] do |t, args|
7
+ from = args[:from]
8
+ to = args[:to] || from
9
+
10
+ puts "Importing CMS Seed data from Folder [#{from}] to Site [#{to}] ..."
11
+
12
+ # changing so that logger is going straight to screen
13
+ logger = ComfortableMexicanSofa.logger
14
+ ComfortableMexicanSofa.logger = Logger.new(STDOUT)
15
+
16
+ ComfortableMexicanSofa::Seeds::Importer.new(from, to).import!
17
+
18
+ ComfortableMexicanSofa.logger = logger
19
+ end
20
+
21
+ desc 'Export database data into CMS Seed files (from: site identifier, to: folder name)'
22
+ task :export, [:from, :to] => [:environment] do |t, args|
23
+ from = args[:from]
24
+ to = args[:to] || from
25
+
26
+ puts "Exporting CMS data from Site [#{from}] to Folder [#{to}] ..."
27
+
28
+ # changing so that logger is going straight to screen
29
+ logger = ComfortableMexicanSofa.logger
30
+ ComfortableMexicanSofa.logger = Logger.new(STDOUT)
31
+
32
+ ComfortableMexicanSofa::Seeds::Exporter.new(from, to).export!
33
+
34
+ ComfortableMexicanSofa.logger = logger
35
+ end
36
+ end
37
+ end
@@ -1,18 +1,17 @@
1
1
  require_relative '../../../../test_helper'
2
2
 
3
- class Comfy::Admin::Cms::BaseControllerTest < ActionController::TestCase
3
+ class Comfy::Admin::Cms::BaseControllerTest < ActionDispatch::IntegrationTest
4
4
 
5
5
  def test_get_jump
6
- get :jump
6
+ r :get, comfy_admin_cms_path
7
7
  assert_response :redirect
8
8
  assert_redirected_to comfy_admin_cms_site_pages_path(comfy_cms_sites(:default))
9
9
  end
10
-
10
+
11
11
  def test_get_jump_with_redirect_setting
12
12
  ComfortableMexicanSofa.config.admin_route_redirect = '/cms-admin/sites'
13
- get :jump
13
+ r :get, comfy_admin_cms_path
14
14
  assert_response :redirect
15
15
  assert_redirected_to '/cms-admin/sites'
16
16
  end
17
-
18
- end
17
+ end
@@ -1,70 +1,73 @@
1
1
  require_relative '../../../../test_helper'
2
2
 
3
- class Comfy::Admin::Cms::CategoriesControllerTest < ActionController::TestCase
4
-
3
+ class Comfy::Admin::Cms::CategoriesControllerTest < ActionDispatch::IntegrationTest
4
+
5
+ def setup
6
+ @site = comfy_cms_sites(:default)
7
+ end
8
+
5
9
  def test_get_edit
6
- xhr :get, :edit, :site_id => comfy_cms_sites(:default), :id => comfy_cms_categories(:default)
10
+ r :get, edit_comfy_admin_cms_site_category_path(site_id: @site, id: comfy_cms_categories(:default)), xhr: true
7
11
  assert_response :success
8
12
  assert_template :edit
9
13
  assert assigns(:category)
10
14
  end
11
-
15
+
12
16
  def test_get_edit_failure
13
- xhr :get, :edit, :site_id => comfy_cms_sites(:default), :id => 'invalid'
17
+ r :get, edit_comfy_admin_cms_site_category_path(site_id: @site, id: 'invalid'), xhr: true
14
18
  assert_response :success
15
19
  assert response.body.blank?
16
20
  end
17
-
21
+
18
22
  def test_creation
19
23
  assert_difference 'Comfy::Cms::Category.count' do
20
- xhr :post, :create, :site_id => comfy_cms_sites(:default), :category => {
21
- :label => 'Test Label',
22
- :categorized_type => 'Comfy::Cms::Snippet'
23
- }
24
+ r :post, comfy_admin_cms_site_categories_path(site_id: @site), xhr: true, params: {category: {
25
+ label: 'Test Label',
26
+ categorized_type: 'Comfy::Cms::Snippet'
27
+ }}
24
28
  assert_response :success
25
29
  assert_template :create
26
30
  assert assigns(:category)
27
31
  end
28
32
  end
29
-
33
+
30
34
  def test_creation_failure
31
35
  assert_no_difference 'Comfy::Cms::Category.count' do
32
- xhr :post, :create, :site_id => comfy_cms_sites(:default), :category => { }
36
+ r :post, comfy_admin_cms_site_categories_path(site_id: @site), xhr: true, params: {category: {}}
33
37
  assert_response :success
34
38
  assert response.body.blank?
35
39
  end
36
40
  end
37
-
41
+
38
42
  def test_update
39
43
  category = comfy_cms_categories(:default)
40
- xhr :put, :update, :site_id => comfy_cms_sites(:default), :id => category, :category => {
41
- :label => 'Updated Label'
42
- }
44
+ r :put, comfy_admin_cms_site_category_path(site_id: @site, id: category), xhr: true, params: {category: {
45
+ label: 'Updated Label'
46
+ }}
43
47
  assert_response :success
44
48
  assert_template :update
45
49
  assert assigns(:category)
46
50
  category.reload
47
51
  assert_equal 'Updated Label', category.label
48
52
  end
49
-
53
+
50
54
  def test_update_failure
51
55
  category = comfy_cms_categories(:default)
52
- xhr :put, :update, :site_id => comfy_cms_sites(:default), :id => category, :category => {
53
- :label => ''
54
- }
56
+ r :put, comfy_admin_cms_site_category_path(site_id: @site, id: category), xhr: true, params: {category: {
57
+ label: ''
58
+ }}
55
59
  assert_response :success
56
60
  assert response.body.blank?
57
61
  category.reload
58
62
  assert_not_equal '', category.label
59
63
  end
60
-
64
+
61
65
  def test_destroy
62
66
  assert_difference 'Comfy::Cms::Category.count', -1 do
63
- xhr :delete, :destroy, :site_id => comfy_cms_sites(:default), :id => comfy_cms_categories(:default)
67
+ r :delete, comfy_admin_cms_site_category_path(site_id: @site, id: comfy_cms_categories(:default)), xhr: true
64
68
  assert assigns(:category)
65
69
  assert_response :success
66
70
  assert_template :destroy
67
71
  end
68
72
  end
69
-
70
- end
73
+ end
@@ -1,6 +1,6 @@
1
1
  require_relative '../../../../test_helper'
2
2
 
3
- class Comfy::Admin::Cms::FilesControllerTest < ActionController::TestCase
3
+ class Comfy::Admin::Cms::FilesControllerTest < ActionDispatch::IntegrationTest
4
4
 
5
5
  def setup
6
6
  @site = comfy_cms_sites(:default)
@@ -8,64 +8,61 @@ class Comfy::Admin::Cms::FilesControllerTest < ActionController::TestCase
8
8
  end
9
9
 
10
10
  def test_get_index
11
- get :index, :site_id => @site
11
+ r :get, comfy_admin_cms_site_files_path(site_id: @site)
12
12
  assert_response :success
13
13
  assert assigns(:files)
14
14
  assert_template :index
15
15
  end
16
16
 
17
17
  def test_get_index_with_category
18
- get :index, :site_id => @site, :category => comfy_cms_categories(:default).label
18
+ category = comfy_cms_categories(:default)
19
+ r :get, comfy_admin_cms_site_files_path(site_id: @site), params: {
20
+ categories: category.label
21
+ }
19
22
  assert_response :success
20
23
  assert assigns(:files)
21
24
  assert_equal 1, assigns(:files).count
22
- assert assigns(:files).first.categories.member? comfy_cms_categories(:default)
25
+ assert assigns(:files).first.categories.member? category
23
26
  end
24
27
 
25
28
  def test_get_index_with_category_invalid
26
- get :index, :site_id => @site, :category => 'invalid'
29
+ r :get, comfy_admin_cms_site_files_path(site_id: @site), params: {
30
+ categories: "invalid"
31
+ }
27
32
  assert_response :success
28
33
  assert assigns(:files)
29
34
  assert_equal 0, assigns(:files).count
30
35
  end
31
36
 
32
- def test_get_index_with_page_files
33
- file = comfy_cms_files(:default)
34
- file.update_column(:block_id, comfy_cms_blocks(:default_field_text).id)
35
- get :index, :site_id => @site
36
- assert_response :success
37
- assert_equal 0, assigns(:files).count
38
- end
39
-
40
37
  def test_get_index_with_redactor_images
41
- file = comfy_cms_files(:default)
42
-
43
- get :index, :site_id => @site, :source => 'redactor', :type => 'image'
38
+ r :get, comfy_admin_cms_site_files_path(site_id: @site), params: {
39
+ source: "redactor", type: "image"
40
+ }
44
41
  assert_response :success
45
42
 
46
43
  assert_equal [{
47
- 'thumb' => file.file.url(:cms_thumb),
48
- 'image' => file.file.url,
49
- 'title' => file.label
44
+ "thumb" => url_for(@file.attachment.variant(Comfy::Cms::File::VARIANT_SIZE[:redactor])),
45
+ "image" => url_for(@file.attachment),
46
+ "title" => @file.label
50
47
  }], JSON.parse(response.body)
51
48
  end
52
49
 
53
50
  def test_get_index_with_redactor_files
54
- file = comfy_cms_files(:default)
55
-
56
- get :index, :site_id => @site, :source => 'redactor', :type => 'file'
51
+ r :get, comfy_admin_cms_site_files_path(site_id: @site), params: {
52
+ source: "redactor", type: "file"
53
+ }
57
54
  assert_response :success
58
55
 
59
56
  assert_equal [{
60
- 'title' => file.label,
61
- 'name' => file.file_file_name,
62
- 'link' => file.file.url,
63
- 'size' => '19.6 KB'
57
+ "title" => @file.label,
58
+ "name" => @file.attachment.filename.to_s,
59
+ "link" => url_for(@file.attachment),
60
+ "size" => "12.1 KB"
64
61
  }], JSON.parse(response.body)
65
62
  end
66
63
 
67
64
  def test_get_new
68
- get :new, :site_id => @site
65
+ r :get, new_comfy_admin_cms_site_file_path(site_id: @site)
69
66
  assert_response :success
70
67
  assert assigns(:file)
71
68
  assert_template :new
@@ -73,7 +70,7 @@ class Comfy::Admin::Cms::FilesControllerTest < ActionController::TestCase
73
70
  end
74
71
 
75
72
  def test_get_edit
76
- get :edit, :site_id => @site, :id => @file
73
+ r :get, edit_comfy_admin_cms_site_file_path(site_id: @site, id: @file)
77
74
  assert_response :success
78
75
  assert assigns(:file)
79
76
  assert_template :edit
@@ -81,33 +78,34 @@ class Comfy::Admin::Cms::FilesControllerTest < ActionController::TestCase
81
78
  end
82
79
 
83
80
  def test_get_edit_failure
84
- get :edit, :site_id => @site, :id => 'not_found'
81
+ r :get, edit_comfy_admin_cms_site_file_path(site_id: @site, id: 'invalid')
85
82
  assert_response :redirect
86
- assert_redirected_to :action => :index
83
+ assert_redirected_to action: :index
87
84
  assert_equal 'File not found', flash[:danger]
88
85
  end
89
86
 
90
87
  def test_create
91
- assert_difference ['Comfy::Cms::File.count', 'Comfy::Cms::Categorization.count'] do
92
- post :create, :site_id => @site, :file => {
93
- :label => 'Test File',
94
- :description => 'Test Description',
95
- :file => fixture_file_upload('files/image.jpg', 'image/jpeg'),
96
- :category_ids => {comfy_cms_categories(:default).id => '1'}
97
- }
88
+ models = [Comfy::Cms::File, Comfy::Cms::Categorization, ActiveStorage::Attachment]
89
+ assert_count_difference models do
90
+ r :post, comfy_admin_cms_site_files_path(site_id: @site), params:{file: {
91
+ label: 'Test File',
92
+ description: 'Test Description',
93
+ file: fixture_file_upload('files/image.jpg', 'image/jpeg'),
94
+ category_ids: {comfy_cms_categories(:default).id => '1'}
95
+ }}
98
96
  assert_response :redirect
99
97
  file = Comfy::Cms::File.last
100
98
  assert_equal comfy_cms_sites(:default), file.site
101
99
  assert_equal 'Test File', file.label
102
100
  assert_equal 'Test Description', file.description
103
- assert_redirected_to :action => :edit, :id => file
101
+ assert_redirected_to action: :edit, id: file
104
102
  assert_equal 'Files uploaded', flash[:success]
105
103
  end
106
104
  end
107
105
 
108
106
  def test_create_failure
109
- assert_no_difference 'Comfy::Cms::File.count' do
110
- post :create, :site_id => @site, :file => { }
107
+ assert_count_no_difference Comfy::Cms::File do
108
+ r :post, comfy_admin_cms_site_files_path(site_id: @site), params: {file: {}}
111
109
  assert_response :success
112
110
  assert_template :new
113
111
  assert_equal 'Failed to upload files', flash[:danger]
@@ -115,104 +113,105 @@ class Comfy::Admin::Cms::FilesControllerTest < ActionController::TestCase
115
113
  end
116
114
 
117
115
  def test_create_as_plupload
118
- assert_difference 'Comfy::Cms::File.count' do
119
- post :create,
120
- :source => 'plupload',
121
- :site_id => @site,
122
- :file => {
123
- :file => fixture_file_upload('files/image.jpg', 'image/jpeg')
116
+ assert_count_difference [Comfy::Cms::File, ActiveStorage::Attachment] do
117
+ r :post, comfy_admin_cms_site_files_path(site_id: @site), params: {
118
+ source: "plupload",
119
+ file: {
120
+ file: fixture_file_upload("files/image.jpg", "image/jpeg")
124
121
  }
122
+ }
125
123
  assert_response :success
126
124
  assert_no_select "body"
127
- assert_select "tr[id=comfy_cms_file_#{Comfy::Cms::File.last.id}]"
125
+ assert_select "li[id=comfy_cms_file_#{Comfy::Cms::File.last.id}]"
128
126
  end
129
127
  end
130
128
 
131
129
  def test_create_as_plupload_failure
132
- assert_no_difference 'Comfy::Cms::File.count' do
133
- post :create, :source => 'plupload', :site_id => @site, :file => { }
130
+ assert_count_no_difference Comfy::Cms::File do
131
+ r :post, comfy_admin_cms_site_files_path(site_id: @site), params: {
132
+ source: "plupload",
133
+ file: {}
134
+ }
134
135
  assert_response :unprocessable_entity
135
136
  end
136
137
  end
137
138
 
138
139
  def test_create_as_redactor
139
- assert_difference 'Comfy::Cms::File.count' do
140
- post :create,
141
- :source => 'redactor',
142
- :site_id => @site,
143
- :file => fixture_file_upload('files/image.jpg', 'image/jpeg')
140
+ assert_count_difference [Comfy::Cms::File, ActiveStorage::Attachment, Comfy::Cms::Categorization] do
141
+ r :post, comfy_admin_cms_site_files_path(site_id: @site), params: {
142
+ source: "redactor",
143
+ file: fixture_file_upload("files/image.jpg", "image/jpeg")
144
+ }
144
145
  assert_response :success
145
146
 
146
147
  file = Comfy::Cms::File.last
147
148
  assert_equal ({
148
- 'filelink' => file.file.url,
149
- 'filename' => file.label
149
+ "filelink" => url_for(file.attachment),
150
+ "filename" => file.attachment.filename
150
151
  }), JSON.parse(response.body)
152
+
153
+ category = Comfy::Cms::Category.last
154
+ assert_equal "wysiwyg", category.label
155
+ assert_equal [category], file.categories
151
156
  end
152
157
  end
153
158
 
154
159
  def test_create_as_redactor_failure
155
- assert_no_difference 'Comfy::Cms::File.count' do
156
- post :create, :source => 'redactor', :site_id => @site, :file => { }
160
+ assert_count_no_difference Comfy::Cms::File do
161
+ r :post, comfy_admin_cms_site_files_path(site_id: @site), params: {
162
+ source: "redactor",
163
+ file: {}
164
+ }
157
165
  assert_response :unprocessable_entity
158
166
  end
159
167
  end
160
-
168
+
161
169
  def test_create_as_plupload_with_selected_category
162
170
  category = comfy_cms_categories(:default)
163
-
164
- assert_difference 'Comfy::Cms::File.count' do
165
- post :create,
166
- :source => 'plupload',
167
- :site_id => @site,
168
- :file => {
169
- :file => fixture_file_upload('files/image.jpg', 'image/jpeg')
171
+
172
+ assert_count_difference [Comfy::Cms::File, ActiveStorage::Attachment] do
173
+ r :post, comfy_admin_cms_site_files_path(site_id: @site), params: {
174
+ category: [category.label],
175
+ source: "plupload",
176
+ file: {
177
+ file: fixture_file_upload("files/image.jpg", "image/jpeg")
170
178
  },
171
- :category => [category.label]
179
+
180
+ }
172
181
  assert_response :success
173
-
182
+
174
183
  file = Comfy::Cms::File.last
175
184
  assert_equal [category], file.categories
176
185
  end
177
186
  end
178
187
 
179
188
  def test_update
180
- put :update, :site_id => @site, :id => @file, :file => {
181
- :label => 'New File',
182
- :description => 'New Description',
183
- :file => fixture_file_upload('files/image.jpg', 'image/jpeg')
184
- }
189
+ r :put, comfy_admin_cms_site_file_path(site_id: @site, id: @file), params: { file: {
190
+ label: "Updated File",
191
+ description: "Updated Description",
192
+ file: fixture_file_upload("files/image.jpg", "image/jpeg")
193
+ }}
185
194
  assert_response :redirect
186
- assert_redirected_to :action => :edit, :site_id => @site, :id => @file
187
- assert_equal 'File updated', flash[:success]
195
+ assert_redirected_to action: :edit, site_id: @site, id: @file
196
+ assert_equal "File updated", flash[:success]
188
197
  @file.reload
189
- assert_equal 'New File', @file.label
190
- assert_equal 'New Description', @file.description
191
- end
192
-
193
- def test_update_failure
194
- put :update, :site_id => @site, :id => @file, :file => {
195
- :file_file_name => ""
196
- }
197
- assert_response :success
198
- assert_template :edit
199
- @file.reload
200
- assert_not_equal nil, @file.file
201
- assert_equal 'Failed to update file', flash[:danger]
198
+ assert_equal "Updated File", @file.label
199
+ assert_equal "Updated Description", @file.description
200
+ assert_equal "image.jpg", @file.attachment.filename.to_s
202
201
  end
203
202
 
204
203
  def test_destroy
205
- assert_difference 'Comfy::Cms::File.count', -1 do
206
- delete :destroy, :site_id => @site, :id => @file
204
+ assert_count_difference [Comfy::Cms::File, ActiveStorage::Attachment], -1 do
205
+ r :delete, comfy_admin_cms_site_file_path(site_id: @site, id: @file)
207
206
  assert_response :redirect
208
- assert_redirected_to :action => :index
209
- assert_equal 'File deleted', flash[:success]
207
+ assert_redirected_to action: :index
208
+ assert_equal "File deleted", flash[:success]
210
209
  end
211
210
  end
212
211
 
213
212
  def test_destroy_as_xhr
214
- assert_difference 'Comfy::Cms::File.count', -1 do
215
- xhr :delete, :destroy, :site_id => @site, :id => @file
213
+ assert_count_difference [Comfy::Cms::File], -1 do
214
+ r :delete, comfy_admin_cms_site_file_path(site_id: @site, id: @file), xhr: true
216
215
  assert_response :success
217
216
  end
218
217
  end
@@ -220,12 +219,14 @@ class Comfy::Admin::Cms::FilesControllerTest < ActionController::TestCase
220
219
  def test_reorder
221
220
  file_one = @file
222
221
  file_two = @site.files.create(
223
- :file => fixture_file_upload('files/image.jpg', 'image/jpeg')
222
+ file: fixture_file_upload('files/image.jpg', 'image/jpeg')
224
223
  )
225
224
  assert_equal 0, file_one.position
226
225
  assert_equal 1, file_two.position
227
226
 
228
- put :reorder, :site_id => @site, :comfy_cms_file => [file_two.id, file_one.id]
227
+ r :put, reorder_comfy_admin_cms_site_files_path(site_id: @site), params: {
228
+ :comfy_cms_file => [file_two.id, file_one.id]
229
+ }
229
230
  assert_response :success
230
231
  file_one.reload
231
232
  file_two.reload
@@ -233,5 +234,4 @@ class Comfy::Admin::Cms::FilesControllerTest < ActionController::TestCase
233
234
  assert_equal 1, file_one.position
234
235
  assert_equal 0, file_two.position
235
236
  end
236
-
237
237
  end