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
@@ -0,0 +1,213 @@
1
+ module ComfortableMexicanSofa::Seeds::Page
2
+ class Importer < ComfortableMexicanSofa::Seeds::Importer
3
+
4
+ # tracking target page linking. Since we might be linking to something that
5
+ # doesn't exist yet, we'll defer linking to the end of import
6
+ attr_accessor :target_pages
7
+
8
+ def initialize(from, to = from)
9
+ super
10
+ self.path = ::File.join(ComfortableMexicanSofa.config.seeds_path, from, "pages/")
11
+ end
12
+
13
+ def import!
14
+ import_page(File.join(self.path, "index/"), nil)
15
+
16
+ link_target_pages
17
+
18
+ # Remove pages not found in seeds
19
+ self.site.pages.where('id NOT IN (?)', self.seed_ids).destroy_all
20
+ end
21
+
22
+ private
23
+
24
+ # Recursive function that will be called for each child page (subfolder)
25
+ def import_page(path, parent)
26
+ slug = path.split("/").last
27
+
28
+ # setting page record
29
+ page = if parent.present?
30
+ self.site.pages.where(parent: parent, slug: slug).first_or_initialize
31
+ else
32
+ self.site.pages.root || self.site.pages.new(slug: slug)
33
+ end
34
+
35
+ content_path = File.join(path, "content.html")
36
+
37
+ # If file is newer than page record we'll process it
38
+ if fresh_seed?(page, content_path)
39
+
40
+ # reading file content in, resulting in a hash
41
+ fragments_hash = parse_file_content(content_path)
42
+
43
+ # parsing attributes section
44
+ attributes_yaml = fragments_hash.delete("attributes")
45
+ attrs = YAML.load(attributes_yaml)
46
+
47
+ # applying attributes
48
+ layout = self.site.layouts.find_by(identifier: attrs.delete("layout")) || parent.try(:layout)
49
+ category_ids = category_names_to_ids(Comfy::Cms::Page, attrs.delete("categories"))
50
+ target_page = attrs.delete("target_page")
51
+
52
+ page.attributes = attrs.merge(
53
+ layout: layout,
54
+ category_ids: category_ids
55
+ )
56
+
57
+ # applying fragments
58
+ old_frag_identifiers = page.fragments.pluck(:identifier)
59
+
60
+ new_frag_identifiers, fragments_attributes =
61
+ construct_fragments_attributes(fragments_hash, page, path)
62
+ page.fragments_attributes = fragments_attributes
63
+
64
+ if page.save
65
+ message = "[CMS SEEDS] Imported Page \t #{page.full_path}"
66
+ ComfortableMexicanSofa.logger.info(message)
67
+
68
+ # defering target page linking
69
+ if target_page.present?
70
+ self.target_pages ||= {}
71
+ self.target_pages[page.id] = target_page
72
+ end
73
+
74
+ # cleaning up old fragments
75
+ page.fragments.where(identifier: old_frag_identifiers - new_frag_identifiers).destroy_all
76
+
77
+ else
78
+ message = "[CMS SEEDS] Failed to import Page \n#{page.errors.inspect}"
79
+ ComfortableMexicanSofa.logger.warn(message)
80
+ end
81
+ end
82
+
83
+ import_translations(path, page)
84
+
85
+ # Tracking what page from seeds we're working with. So we can remove pages
86
+ # that are no longer in seeds
87
+ self.seed_ids << page.id
88
+
89
+ # importing child pages (if there are any)
90
+ Dir["#{path}*/"].each do |path|
91
+ import_page(path, page)
92
+ end
93
+ end
94
+
95
+ # Importing translations for given page. They look like `content.locale.html`
96
+ def import_translations(path, page)
97
+ old_translations = page.translations.pluck(:locale)
98
+ new_translations = []
99
+
100
+ Dir["#{path}content.*.html"].each do |file_path|
101
+ locale = File.basename(file_path).match(/content\.(\w+)\.html/)[1]
102
+ new_translations << locale
103
+
104
+ translation = page.translations.where(locale: locale).first_or_initialize
105
+
106
+ if fresh_seed?(translation, file_path)
107
+ # reading file content in, resulting in a hash
108
+ fragments_hash = parse_file_content(file_path)
109
+
110
+ # parsing attributes section
111
+ attributes_yaml = fragments_hash.delete("attributes")
112
+ attrs = YAML.load(attributes_yaml)
113
+
114
+ # applying attributes
115
+ layout = self.site.layouts.find_by(identifier: attrs.delete("layout")) || page.try(:layout)
116
+ translation.attributes = attrs.merge(
117
+ layout: layout
118
+ )
119
+
120
+ # applying fragments
121
+ old_frag_identifiers = translation.fragments.pluck(:identifier)
122
+
123
+ new_frag_identifiers, fragments_attributes =
124
+ construct_fragments_attributes(fragments_hash, translation, path)
125
+ translation.fragments_attributes = fragments_attributes
126
+
127
+ if translation.save
128
+ message = "[CMS SEEDS] Imported Translation \t #{locale}"
129
+ ComfortableMexicanSofa.logger.info(message)
130
+
131
+ # cleaning up old fragments
132
+ frags_to_remove = old_frag_identifiers - new_frag_identifiers
133
+ translation.fragments.where(identifier: frags_to_remove).destroy_all
134
+
135
+ else
136
+ message = "[CMS SEEDS] Failed to import Translation \n#{locale}"
137
+ ComfortableMexicanSofa.logger.warn(message)
138
+ end
139
+ end
140
+ end
141
+
142
+ # Cleaning up removed translations
143
+ translations_to_remove = old_translations - new_translations
144
+ page.translations.where(locale: translations_to_remove).destroy_all
145
+ end
146
+
147
+ # Constructing frag attributes hash that can be assigned to page or translation
148
+ # also returning list of frag identifiers so we can destroy old ones
149
+ def construct_fragments_attributes(hash, record, path)
150
+ frag_identifiers = []
151
+ frag_attributes = hash.collect do |frag_header, frag_content|
152
+ tag, identifier = frag_header.split
153
+ frag_hash = {
154
+ identifier: identifier,
155
+ tag: tag
156
+ }
157
+
158
+ # tracking fragments that need removing later
159
+ frag_identifiers << identifier
160
+
161
+ # based on tag we need to cram content in proper place and proper format
162
+ case tag
163
+ when "date", "datetime"
164
+ frag_hash[:datetime] = frag_content
165
+ when "checkbox"
166
+ frag_hash[:boolean] = frag_content
167
+ when "file", "files"
168
+ files, file_ids_destroy = files_content(record, identifier, path, frag_content)
169
+ frag_hash[:files] = files
170
+ frag_hash[:file_ids_destroy] = file_ids_destroy
171
+ else
172
+ frag_hash[:content] = frag_content
173
+ end
174
+
175
+ frag_hash
176
+ end
177
+
178
+ return [frag_identifiers, frag_attributes]
179
+ end
180
+
181
+ # Preparing fragment attachments. Returns hashes with file data for
182
+ # ActiveStorage and a list of ids of old attachements to destroy
183
+ def files_content(record, identifier, path, frag_content)
184
+ # preparing attachments
185
+ files = frag_content.split.collect do |filename|
186
+ file_handler = File.open(File.join(path, filename))
187
+ {
188
+ io: file_handler,
189
+ filename: filename,
190
+ content_type: MimeMagic.by_magic(file_handler)
191
+ }
192
+ end
193
+
194
+ # ensuring that old attachments get removed
195
+ ids_destroy = []
196
+ if frag = record.fragments.find_by(identifier: identifier)
197
+ ids_destroy = frag.attachments.pluck(:id)
198
+ end
199
+
200
+ [files, ids_destroy]
201
+ end
202
+
203
+ def link_target_pages
204
+ return unless self.target_pages.present?
205
+
206
+ self.target_pages.each do |page_id, target|
207
+ if target = self.site.pages.find_by(full_path: target)
208
+ @site.pages.find(page_id).update_column(:target_page_id, target.id)
209
+ end
210
+ end
211
+ end
212
+ end
213
+ end
@@ -0,0 +1,31 @@
1
+ module ComfortableMexicanSofa::Seeds::Snippet
2
+ class Exporter < ComfortableMexicanSofa::Seeds::Exporter
3
+
4
+ def initialize(from, to = from)
5
+ super
6
+ self.path = ::File.join(ComfortableMexicanSofa.config.seeds_path, to, "snippets/")
7
+ end
8
+
9
+ def export!
10
+ prepare_folder!(self.path)
11
+
12
+ self.site.snippets.each do |snippet|
13
+ attrs = {
14
+ "label" => snippet.label,
15
+ "categories" => snippet.categories.map{|c| c.label},
16
+ "position" => snippet.position
17
+ }.to_yaml
18
+
19
+ data = []
20
+ data << {header: "attributes", content: attrs}
21
+ data << {header: "content", content: snippet.content}
22
+
23
+ snippet_path = File.join(self.path, "#{snippet.identifier}.html")
24
+ write_file_content(snippet_path, data)
25
+
26
+ message = "[CMS SEEDS] Exported Snippet \t #{snippet.identifier}"
27
+ ComfortableMexicanSofa.logger.info(message)
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,48 @@
1
+ module ComfortableMexicanSofa::Seeds::Snippet
2
+ class Importer < ComfortableMexicanSofa::Seeds::Importer
3
+
4
+ def initialize(from, to = from)
5
+ super
6
+ self.path = ::File.join(ComfortableMexicanSofa.config.seeds_path, from, "snippets/")
7
+ end
8
+
9
+ def import!
10
+ Dir.glob("#{self.path}/*.html").each do |path|
11
+ identifier = File.basename(path, ".html")
12
+
13
+ # reading file content in, resulting in a hash
14
+ content_hash = parse_file_content(path)
15
+
16
+ # parsing attributes section
17
+ attributes_yaml = content_hash.delete("attributes")
18
+ attrs = YAML.load(attributes_yaml)
19
+
20
+ snippet = self.site.snippets.where(identifier: identifier).first_or_initialize
21
+
22
+ if fresh_seed?(snippet, path)
23
+ category_ids = category_names_to_ids(Comfy::Cms::Snippet, attrs.delete("categories"))
24
+
25
+ snippet.attributes = attrs.merge(
26
+ category_ids: category_ids,
27
+ content: content_hash["content"]
28
+ )
29
+
30
+ if snippet.save
31
+ message = "[CMS SEEDS] Imported Snippet \t #{snippet.identifier}"
32
+ ComfortableMexicanSofa.logger.info(message)
33
+ else
34
+ message = "[CMS SEEDS] Failed to import Snippet \n#{snippet.errors.inspect}"
35
+ ComfortableMexicanSofa.logger.warn(message)
36
+ end
37
+ end
38
+
39
+ # Tracking what page from seeds we're working with. So we can remove pages
40
+ # that are no longer in seeds
41
+ self.seed_ids << snippet.id
42
+ end
43
+
44
+ # cleaning up
45
+ self.site.snippets.where("id NOT IN (?)", self.seed_ids).destroy_all
46
+ end
47
+ end
48
+ end
@@ -1,3 +1,3 @@
1
1
  module ComfortableMexicanSofa
2
- VERSION = "1.12.11"
2
+ VERSION = "2.0.0"
3
3
  end
@@ -29,5 +29,4 @@ module ComfortableMexicanSofa::ViewHooks
29
29
  def self.remove(name)
30
30
  self.hooks.delete(name)
31
31
  end
32
-
33
32
  end
@@ -5,7 +5,6 @@ module Comfy
5
5
  source_root File.expand_path(File.join(File.dirname(__FILE__), '../../../../app/assets'))
6
6
 
7
7
  def generate_assets
8
- directory 'images/comfy/admin/cms', 'app/assets/images/comfy/admin/cms'
9
8
  directory 'javascripts/comfy/admin/cms', 'app/assets/javascripts/comfy/admin/cms'
10
9
  directory 'stylesheets/comfy/admin/cms', 'app/assets/stylesheets/comfy/admin/cms'
11
10
  end
@@ -26,15 +26,25 @@ module Comfy
26
26
  'config/initializers/comfortable_mexican_sofa.rb'
27
27
  end
28
28
 
29
+ def generate_railties_order
30
+ application <<-RUBY.strip_heredoc
31
+ # Ensuring that ActiveStorage routes are loaded before Comfy's globbing
32
+ # route. Without this file serving routes are inaccessible.
33
+ config.railties_order = [ActiveStorage::Engine, :main_app, :all]
34
+ RUBY
35
+ end
36
+
29
37
  def generate_routing
30
- route_string = " comfy_route :cms_admin, :path => '/admin'\n\n"
31
- route_string << " # Make sure this routeset is defined last\n"
32
- route_string << " comfy_route :cms, :path => '/', :sitemap => false\n"
33
- route route_string[2..-1]
38
+ route_string = <<-RUBY.strip_heredoc
39
+ comfy_route :cms_admin, path: "/admin"
40
+ # Ensure that this route is defined last
41
+ comfy_route :cms, path: "/"
42
+ RUBY
43
+ route route_string
34
44
  end
35
45
 
36
46
  def generate_cms_seeds
37
- directory 'db/cms_fixtures', 'db/cms_fixtures'
47
+ directory 'db/cms_seeds', 'db/cms_seeds'
38
48
  end
39
49
 
40
50
  def generate_assets
@@ -4,42 +4,42 @@ require 'rails/generators/active_record'
4
4
  module Comfy
5
5
  module Generators
6
6
  class ScaffoldGenerator < Rails::Generators::NamedBase
7
-
7
+
8
8
  include Rails::Generators::Migration
9
-
10
- no_tasks do
9
+
10
+ no_tasks do
11
11
  attr_accessor :model_attrs
12
12
  end
13
-
13
+
14
14
  source_root File.expand_path(File.join(File.dirname(__FILE__), 'templates'))
15
-
16
- argument :model_args, :type => :array, :default => [], :banner => 'attribute:type'
17
-
15
+
16
+ argument :model_args, type: :array, default: [], banner: 'attribute:type'
17
+
18
18
  def initialize(*args, &block)
19
19
  super
20
20
  @model_attrs = []
21
21
  model_args.each do |arg|
22
22
  next unless arg.include?(':')
23
- @model_attrs << Rails::Generators::GeneratedAttribute.new(*arg.split(':'))
23
+ @model_attrs << Rails::Generators::GeneratedAttribute.new(*arg.split(':'))
24
24
  end
25
25
  end
26
-
26
+
27
27
  def self.next_migration_number(dirname)
28
28
  ActiveRecord::Generators::Base.next_migration_number(dirname)
29
29
  end
30
-
30
+
31
31
  def generate_model
32
32
  migration_template 'migration.rb', "db/migrate/create_#{file_name.pluralize}.rb"
33
33
  template 'model.rb', "app/models/#{file_name}.rb"
34
34
  template 'tests/model.rb', "test/models/#{file_name}_test.rb"
35
35
  template 'tests/fixture.yml', "test/fixtures/#{file_name.pluralize}.yml"
36
36
  end
37
-
37
+
38
38
  def generate_controller
39
39
  template 'controller.rb', "app/controllers/admin/#{file_name.pluralize}_controller.rb"
40
40
  template 'tests/controller.rb', "test/controllers/admin/#{file_name.pluralize}_controller_test.rb"
41
41
  end
42
-
42
+
43
43
  def generate_views
44
44
  template 'views/index.haml', "app/views/admin/#{file_name.pluralize}/index.html.haml"
45
45
  template 'views/show.haml', "app/views/admin/#{file_name.pluralize}/show.html.haml"
@@ -47,23 +47,29 @@ module Comfy
47
47
  template 'views/edit.haml', "app/views/admin/#{file_name.pluralize}/edit.html.haml"
48
48
  template 'views/_form.haml', "app/views/admin/#{file_name.pluralize}/_form.html.haml"
49
49
  end
50
-
50
+
51
51
  def generate_route
52
- route_string = " namespace :admin do\n"
53
- route_string << " resources :#{file_name.pluralize}\n"
54
- route_string << " end\n"
55
- route route_string[2..-1]
52
+ route_string = <<-TEXT.strip_heredoc
53
+ namespace :admin do
54
+ resources :#{file_name.pluralize}
55
+ end
56
+
57
+ TEXT
58
+ route route_string
56
59
  end
57
-
60
+
58
61
  def generate_navigation_link
59
62
  partial_path = 'app/views/comfy/admin/cms/partials/_navigation_inner.html.haml'
60
63
  unless File.exist?(File.join(destination_root, partial_path))
61
64
  create_file partial_path
62
65
  end
63
66
  append_file partial_path do
64
- "\n%li= active_link_to '#{class_name.pluralize}', admin_#{file_name.pluralize}_path\n"
67
+ <<-HAML.strip_heredoc
68
+ %li.nav-item
69
+ = active_link_to '#{class_name.pluralize}', admin_#{file_name.pluralize}_path, class: 'nav-link'
70
+ HAML
65
71
  end
66
72
  end
67
73
  end
68
74
  end
69
- end
75
+ end
@@ -1,7 +1,7 @@
1
- class Admin::<%= class_name.pluralize %>Controller < Comfy::Admin::Cms::BaseController
1
+ class Admin::<%= class_name.pluralize %>Controller < Comfy::Admin::BaseController
2
2
 
3
- before_action :build_<%= file_name %>, :only => [:new, :create]
4
- before_action :load_<%= file_name %>, :only => [:show, :edit, :update, :destroy]
3
+ before_action :build_<%= file_name %>, only: [:new, :create]
4
+ before_action :load_<%= file_name %>, only: [:show, :edit, :update, :destroy]
5
5
 
6
6
  def index
7
7
  @<%= file_name.pluralize %> = <%= class_name %>.page(params[:page])
@@ -22,25 +22,25 @@ class Admin::<%= class_name.pluralize %>Controller < Comfy::Admin::Cms::BaseCont
22
22
  def create
23
23
  @<%= file_name %>.save!
24
24
  flash[:success] = '<%= class_name.titleize %> created'
25
- redirect_to :action => :show, :id => @<%= file_name %>
25
+ redirect_to action: :show, id: @<%= file_name %>
26
26
  rescue ActiveRecord::RecordInvalid
27
27
  flash.now[:danger] = 'Failed to create <%= class_name.titleize %>'
28
- render :action => :new
28
+ render action: :new
29
29
  end
30
30
 
31
31
  def update
32
32
  @<%= file_name %>.update_attributes!(<%= file_name %>_params)
33
33
  flash[:success] = '<%= class_name.titleize %> updated'
34
- redirect_to :action => :show, :id => @<%= file_name %>
34
+ redirect_to action: :show, id: @<%= file_name %>
35
35
  rescue ActiveRecord::RecordInvalid
36
36
  flash.now[:danger] = 'Failed to update <%= class_name.titleize %>'
37
- render :action => :edit
37
+ render action: :edit
38
38
  end
39
39
 
40
40
  def destroy
41
41
  @<%= file_name %>.destroy
42
42
  flash[:success] = '<%= class_name.titleize %> deleted'
43
- redirect_to :action => :index
43
+ redirect_to action: :index
44
44
  end
45
45
 
46
46
  protected
@@ -53,10 +53,10 @@ protected
53
53
  @<%= file_name %> = <%= class_name %>.find(params[:id])
54
54
  rescue ActiveRecord::RecordNotFound
55
55
  flash[:danger] = '<%= class_name.titleize %> not found'
56
- redirect_to :action => :index
56
+ redirect_to action: :index
57
57
  end
58
58
 
59
59
  def <%= file_name %>_params
60
60
  params.fetch(:<%= file_name %>, {}).permit(<%= model_attrs.collect{|attr| ":#{attr.name}"}.join(', ') %>)
61
61
  end
62
- end
62
+ end