comfortable_mexican_sofa 1.12.11 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
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