comfortable_mexican_sofa 1.12.11 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (490) hide show
  1. checksums.yaml +5 -5
  2. data/.codeclimate.yml +4 -0
  3. data/.gitattributes +2 -0
  4. data/.github/issue_template.md +22 -0
  5. data/.github/pull_request_template.md +6 -0
  6. data/.gitignore +3 -0
  7. data/.rubocop.yml +5 -0
  8. data/.rubocop_todo.yml +974 -0
  9. data/.travis.yml +2 -10
  10. data/Gemfile +5 -7
  11. data/README.md +40 -39
  12. data/Rakefile +1 -31
  13. data/app/assets/javascripts/comfy/admin/cms/application.js.coffee +7 -4
  14. data/app/assets/javascripts/comfy/admin/cms/base.js.coffee +23 -33
  15. data/app/assets/javascripts/comfy/admin/cms/lib/diff/pretty_text_diff.js +76 -0
  16. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr.min.js +2 -0
  17. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/ar.js +52 -0
  18. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/bg.js +65 -0
  19. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/bn.js +65 -0
  20. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/cat.js +83 -0
  21. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/cs.js +70 -0
  22. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/cy.js +92 -0
  23. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/da.js +71 -0
  24. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/de.js +70 -0
  25. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/default.js +80 -0
  26. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/eo.js +73 -0
  27. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/es.js +69 -0
  28. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/et.js +73 -0
  29. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/fa.js +68 -0
  30. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/fi.js +69 -0
  31. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/fr.js +75 -0
  32. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/gr.js +74 -0
  33. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/he.js +57 -0
  34. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/hi.js +65 -0
  35. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/hr.js +66 -0
  36. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/hu.js +72 -0
  37. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/id.js +61 -0
  38. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/it.js +70 -0
  39. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/ja.js +57 -0
  40. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/ko.js +60 -0
  41. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/lt.js +72 -0
  42. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/lv.js +67 -0
  43. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/mk.js +69 -0
  44. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/mn.js +67 -0
  45. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/ms.js +68 -0
  46. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/my.js +69 -0
  47. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/nl.js +75 -0
  48. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/no.js +73 -0
  49. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/pa.js +65 -0
  50. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/pl.js +68 -0
  51. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/pt-BR.js +66 -0
  52. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/pt.js +66 -0
  53. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/ro.js +69 -0
  54. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/ru.js +66 -0
  55. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/si.js +65 -0
  56. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/sk.js +70 -0
  57. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/sl.js +70 -0
  58. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/sq.js +65 -0
  59. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/sr.js +69 -0
  60. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/sv.js +70 -0
  61. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/th.js +72 -0
  62. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/tr.js +66 -0
  63. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/uk.js +66 -0
  64. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/vn.js +66 -0
  65. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/zh-CN.js +61 -0
  66. data/app/assets/javascripts/comfy/admin/cms/lib/flatpickr/i18n/zh-TW.js +61 -0
  67. data/app/assets/javascripts/comfy/admin/cms/lib/redactor.js +9 -3
  68. data/app/assets/javascripts/comfy/admin/cms/uploader.js.coffee +9 -10
  69. data/app/assets/stylesheets/comfy/admin/cms/application.sass +4 -4
  70. data/app/assets/stylesheets/comfy/admin/cms/base.sass +215 -338
  71. data/app/assets/stylesheets/comfy/admin/cms/lib/flatpickr.min.css +13 -0
  72. data/app/assets/stylesheets/comfy/admin/cms/redactor_overrides.sass +2 -2
  73. data/app/controllers/comfy/admin/base_controller.rb +20 -0
  74. data/app/controllers/comfy/admin/cms/base_controller.rb +9 -22
  75. data/app/controllers/comfy/admin/cms/categories_controller.rb +2 -3
  76. data/app/controllers/comfy/admin/cms/files_controller.rb +50 -31
  77. data/app/controllers/comfy/admin/cms/layouts_controller.rb +12 -13
  78. data/app/controllers/comfy/admin/cms/pages_controller.rb +28 -28
  79. data/app/controllers/comfy/admin/cms/revisions_controller.rb +23 -14
  80. data/app/controllers/comfy/admin/cms/sites_controller.rb +9 -10
  81. data/app/controllers/comfy/admin/cms/snippets_controller.rb +11 -11
  82. data/app/controllers/comfy/admin/cms/translations_controller.rb +98 -0
  83. data/app/controllers/comfy/cms/assets_controller.rb +9 -10
  84. data/app/controllers/comfy/cms/base_controller.rb +0 -2
  85. data/app/controllers/comfy/cms/content_controller.rb +50 -31
  86. data/app/controllers/concerns/comfy/paginate.rb +2 -2
  87. data/app/helpers/comfy/admin/cms_helper.rb +29 -0
  88. data/app/helpers/comfy/cms_helper.rb +40 -60
  89. data/app/models/comfy/cms/categorization.rb +8 -11
  90. data/app/models/comfy/cms/category.rb +10 -14
  91. data/app/models/comfy/cms/file.rb +31 -47
  92. data/app/models/comfy/cms/fragment.rb +55 -0
  93. data/app/models/comfy/cms/layout.rb +45 -40
  94. data/app/models/comfy/cms/page.rb +47 -36
  95. data/app/models/comfy/cms/revision.rb +5 -8
  96. data/app/models/comfy/cms/site.rb +26 -51
  97. data/app/models/comfy/cms/snippet.rb +20 -24
  98. data/app/models/comfy/cms/translation.rb +37 -0
  99. data/app/models/concerns/comfy/cms/with_categories.rb +38 -0
  100. data/app/models/concerns/comfy/cms/with_fragments.rb +121 -0
  101. data/app/views/comfy/admin/cms/categories/_categories.html.haml +2 -1
  102. data/app/views/comfy/admin/cms/categories/_edit.html.haml +7 -6
  103. data/app/views/comfy/admin/cms/categories/_form.html.haml +8 -5
  104. data/app/views/comfy/admin/cms/categories/_index.html.haml +24 -20
  105. data/app/views/comfy/admin/cms/categories/_show.html.haml +10 -9
  106. data/app/views/comfy/admin/cms/categories/create.js.erb +2 -2
  107. data/app/views/comfy/admin/cms/categories/edit.js.erb +1 -1
  108. data/app/views/comfy/admin/cms/categories/update.js.erb +2 -2
  109. data/app/views/comfy/admin/cms/files/_file.html.haml +31 -25
  110. data/app/views/comfy/admin/cms/files/_form.html.haml +16 -12
  111. data/app/views/comfy/admin/cms/files/edit.html.haml +1 -1
  112. data/app/views/comfy/admin/cms/files/index.html.haml +17 -19
  113. data/app/views/comfy/admin/cms/files/new.html.haml +1 -1
  114. data/app/views/comfy/admin/cms/layouts/_form.html.haml +10 -10
  115. data/app/views/comfy/admin/cms/layouts/_index_branch.html.haml +21 -19
  116. data/app/views/comfy/admin/cms/layouts/edit.html.haml +5 -5
  117. data/app/views/comfy/admin/cms/layouts/index.html.haml +4 -7
  118. data/app/views/comfy/admin/cms/pages/_form.html.haml +15 -21
  119. data/app/views/comfy/admin/cms/pages/_form_fragments.html.haml +40 -0
  120. data/app/views/comfy/admin/cms/pages/_fragment_attachments.html.haml +10 -0
  121. data/app/views/comfy/admin/cms/pages/_index_branch.html.haml +34 -26
  122. data/app/views/comfy/admin/cms/pages/edit.html.haml +19 -5
  123. data/app/views/comfy/admin/cms/pages/form_fragments.js.erb +1 -0
  124. data/app/views/comfy/admin/cms/pages/index.html.haml +5 -8
  125. data/app/views/comfy/admin/cms/pages/new.html.haml +1 -1
  126. data/app/views/comfy/admin/cms/revisions/show.html.haml +29 -27
  127. data/app/views/comfy/admin/cms/sites/_form.html.haml +6 -8
  128. data/app/views/comfy/admin/cms/sites/edit.html.haml +1 -1
  129. data/app/views/comfy/admin/cms/sites/index.html.haml +23 -22
  130. data/app/views/comfy/admin/cms/sites/new.html.haml +1 -1
  131. data/app/views/comfy/admin/cms/snippets/_form.html.haml +9 -9
  132. data/app/views/comfy/admin/cms/snippets/edit.html.haml +6 -5
  133. data/app/views/comfy/admin/cms/snippets/index.html.haml +25 -25
  134. data/app/views/comfy/admin/cms/snippets/new.html.haml +1 -1
  135. data/app/views/comfy/admin/cms/translations/_form.html.haml +21 -0
  136. data/app/views/comfy/admin/cms/translations/edit.html.haml +9 -0
  137. data/app/views/comfy/admin/cms/translations/form_fragments.js.erb +1 -0
  138. data/app/views/comfy/admin/cms/translations/new.html.haml +5 -0
  139. data/app/views/kaminari/comfy/_first_page.html.haml +3 -2
  140. data/app/views/kaminari/comfy/_gap.html.haml +2 -2
  141. data/app/views/kaminari/comfy/_last_page.html.haml +3 -2
  142. data/app/views/kaminari/comfy/_next_page.html.haml +2 -2
  143. data/app/views/kaminari/comfy/_page.html.haml +2 -2
  144. data/app/views/kaminari/comfy/_prev_page.html.haml +1 -1
  145. data/app/views/layouts/comfy/admin/cms/_body.html.haml +13 -15
  146. data/app/views/layouts/comfy/admin/cms/_footer_js.html.haml +10 -3
  147. data/app/views/layouts/comfy/admin/cms/_head.html.haml +7 -10
  148. data/app/views/layouts/comfy/admin/cms/_left.html.haml +33 -15
  149. data/app/views/layouts/comfy/admin/cms/_right.html.haml +2 -2
  150. data/comfortable_mexican_sofa.gemspec +19 -19
  151. data/config/application.rb +14 -8
  152. data/config/boot.rb +2 -2
  153. data/config/cms_routes.rb +3 -3
  154. data/config/environments/development.rb +37 -4
  155. data/config/environments/test.rb +12 -14
  156. data/config/initializers/comfortable_mexican_sofa.rb +5 -12
  157. data/config/locales/cs.yml +33 -7
  158. data/config/locales/da.yml +33 -7
  159. data/config/locales/de.yml +32 -6
  160. data/config/locales/en.yml +33 -7
  161. data/config/locales/es.yml +33 -7
  162. data/config/locales/fr.yml +33 -7
  163. data/config/locales/it.yml +33 -7
  164. data/config/locales/ja.yml +33 -7
  165. data/config/locales/nb.yml +33 -7
  166. data/config/locales/nl.yml +33 -7
  167. data/config/locales/pl.yml +33 -7
  168. data/config/locales/pt-BR.yml +33 -7
  169. data/config/locales/ru.yml +33 -7
  170. data/config/locales/sk.yml +33 -7
  171. data/config/locales/sv.yml +33 -7
  172. data/config/locales/tr.yml +33 -7
  173. data/config/locales/uk.yml +33 -7
  174. data/config/locales/zh-CN.yml +33 -7
  175. data/config/locales/zh-TW.yml +33 -7
  176. data/config/storage.yml +35 -0
  177. data/db/cms_seeds/sample-site/files/_default.jpg.yml +5 -0
  178. data/db/{cms_fixtures/sample-site/files/sample.jpg → cms_seeds/sample-site/files/default.jpg} +0 -0
  179. data/db/cms_seeds/sample-site/layouts/default/content.html +16 -0
  180. data/db/cms_seeds/sample-site/layouts/default/nested/content.html +14 -0
  181. data/db/cms_seeds/sample-site/pages/index/child_a/content.html +7 -0
  182. data/db/cms_seeds/sample-site/pages/index/child_b/content.html +6 -0
  183. data/db/cms_seeds/sample-site/pages/index/content.es.html +6 -0
  184. data/db/cms_seeds/sample-site/pages/index/content.fr.html +6 -0
  185. data/db/cms_seeds/sample-site/pages/index/content.html +24 -0
  186. data/db/{cms_fixtures/sample-site/pages/index/child/thumbnail.png → cms_seeds/sample-site/pages/index/footer.png} +0 -0
  187. data/db/cms_seeds/sample-site/pages/index/header.png +0 -0
  188. data/db/cms_seeds/sample-site/snippets/default.html +8 -0
  189. data/db/migrate/00_create_active_storage_tables.active_storage.rb +26 -0
  190. data/db/migrate/01_create_cms.rb +113 -104
  191. data/doc/preview.jpg +0 -0
  192. data/lib/comfortable_mexican_sofa.rb +10 -14
  193. data/lib/comfortable_mexican_sofa/configuration.rb +9 -13
  194. data/lib/comfortable_mexican_sofa/content.rb +28 -0
  195. data/lib/comfortable_mexican_sofa/content/block.rb +11 -0
  196. data/lib/comfortable_mexican_sofa/content/params_parser.rb +80 -0
  197. data/lib/comfortable_mexican_sofa/content/renderer.rb +125 -0
  198. data/lib/comfortable_mexican_sofa/content/tag.rb +37 -0
  199. data/lib/comfortable_mexican_sofa/content/tags/asset.rb +56 -0
  200. data/lib/comfortable_mexican_sofa/content/tags/checkbox.rb +21 -0
  201. data/lib/comfortable_mexican_sofa/content/tags/date.rb +22 -0
  202. data/lib/comfortable_mexican_sofa/content/tags/datetime.rb +22 -0
  203. data/lib/comfortable_mexican_sofa/content/tags/file.rb +77 -0
  204. data/lib/comfortable_mexican_sofa/content/tags/file_link.rb +66 -0
  205. data/lib/comfortable_mexican_sofa/content/tags/files.rb +39 -0
  206. data/lib/comfortable_mexican_sofa/content/tags/fragment.rb +54 -0
  207. data/lib/comfortable_mexican_sofa/content/tags/helper.rb +52 -0
  208. data/lib/comfortable_mexican_sofa/content/tags/markdown.rb +21 -0
  209. data/lib/comfortable_mexican_sofa/content/tags/number.rb +17 -0
  210. data/lib/comfortable_mexican_sofa/content/tags/partial.rb +42 -0
  211. data/lib/comfortable_mexican_sofa/content/tags/snippet.rb +31 -0
  212. data/lib/comfortable_mexican_sofa/content/tags/template.rb +41 -0
  213. data/lib/comfortable_mexican_sofa/content/tags/text.rb +17 -0
  214. data/lib/comfortable_mexican_sofa/content/tags/textarea.rb +17 -0
  215. data/lib/comfortable_mexican_sofa/content/tags/wysiwyg.rb +18 -0
  216. data/lib/comfortable_mexican_sofa/engine.rb +3 -2
  217. data/lib/comfortable_mexican_sofa/extensions/acts_as_tree.rb +33 -30
  218. data/lib/comfortable_mexican_sofa/extensions/has_revisions.rb +27 -23
  219. data/lib/comfortable_mexican_sofa/form_builder.rb +32 -104
  220. data/lib/comfortable_mexican_sofa/render_methods.rb +24 -21
  221. data/lib/comfortable_mexican_sofa/routes/cms.rb +6 -14
  222. data/lib/comfortable_mexican_sofa/routes/cms_admin.rb +39 -29
  223. data/lib/comfortable_mexican_sofa/routing.rb +1 -1
  224. data/lib/comfortable_mexican_sofa/seeds.rb +102 -0
  225. data/lib/comfortable_mexican_sofa/seeds/file/exporter.rb +40 -0
  226. data/lib/comfortable_mexican_sofa/seeds/file/importer.rb +61 -0
  227. data/lib/comfortable_mexican_sofa/seeds/layout/exporter.rb +37 -0
  228. data/lib/comfortable_mexican_sofa/seeds/layout/importer.rb +59 -0
  229. data/lib/comfortable_mexican_sofa/seeds/page/exporter.rb +88 -0
  230. data/lib/comfortable_mexican_sofa/seeds/page/importer.rb +213 -0
  231. data/lib/comfortable_mexican_sofa/seeds/snippet/exporter.rb +31 -0
  232. data/lib/comfortable_mexican_sofa/seeds/snippet/importer.rb +48 -0
  233. data/lib/comfortable_mexican_sofa/version.rb +1 -1
  234. data/lib/comfortable_mexican_sofa/view_hooks.rb +0 -1
  235. data/lib/generators/comfy/cms/assets_generator.rb +0 -1
  236. data/lib/generators/comfy/cms/cms_generator.rb +15 -5
  237. data/lib/generators/comfy/scaffold/scaffold_generator.rb +26 -20
  238. data/lib/generators/comfy/scaffold/templates/{controller.rb → controller.rb.tt} +10 -10
  239. data/lib/generators/comfy/scaffold/templates/{migration.rb → migration.rb.tt} +2 -3
  240. data/lib/generators/comfy/scaffold/templates/{model.rb → model.rb.tt} +7 -7
  241. data/lib/generators/comfy/scaffold/templates/tests/{controller.rb → controller.rb.tt} +37 -24
  242. data/lib/generators/comfy/scaffold/templates/tests/{fixture.yml → fixture.yml.tt} +0 -0
  243. data/lib/generators/comfy/scaffold/templates/tests/{model.rb → model.rb.tt} +3 -4
  244. data/lib/generators/comfy/scaffold/templates/views/_form.haml.tt +7 -0
  245. data/lib/generators/comfy/scaffold/templates/views/{edit.haml → edit.haml.tt} +1 -1
  246. data/lib/generators/comfy/scaffold/templates/views/index.haml.tt +21 -0
  247. data/lib/generators/comfy/scaffold/templates/views/{new.haml → new.haml.tt} +1 -1
  248. data/lib/generators/comfy/scaffold/templates/views/{show.haml → show.haml.tt} +2 -2
  249. data/lib/tasks/cms_seeds.rake +37 -0
  250. data/test/controllers/comfy/admin/cms/base_controller_test.rb +5 -6
  251. data/test/controllers/comfy/admin/cms/categories_controller_test.rb +27 -24
  252. data/test/controllers/comfy/admin/cms/files_controller_test.rb +97 -97
  253. data/test/controllers/comfy/admin/cms/layouts_controller_test.rb +32 -31
  254. data/test/controllers/comfy/admin/cms/pages_controller_test.rb +317 -263
  255. data/test/controllers/comfy/admin/cms/revisions_controller_test.rb +175 -65
  256. data/test/controllers/comfy/admin/cms/sites_controller_test.rb +27 -29
  257. data/test/controllers/comfy/admin/cms/snippets_controller_test.rb +54 -51
  258. data/test/controllers/comfy/admin/cms/translations_controller_test.rb +181 -0
  259. data/test/controllers/comfy/cms/assets_controller_test.rb +24 -22
  260. data/test/controllers/comfy/cms/content_controller_test.rb +126 -140
  261. data/test/fixtures/active_storage/attachments.yml +9 -0
  262. data/test/fixtures/active_storage/blobs.yml +13 -0
  263. data/test/fixtures/comfy/cms/files.yml +2 -6
  264. data/test/fixtures/comfy/cms/fragments.yml +25 -0
  265. data/test/fixtures/comfy/cms/layouts.yml +7 -13
  266. data/test/fixtures/comfy/cms/pages.yml +2 -17
  267. data/test/fixtures/comfy/cms/revisions.yml +16 -8
  268. data/test/fixtures/comfy/cms/sites.yml +0 -1
  269. data/test/fixtures/comfy/cms/snippets.yml +1 -1
  270. data/test/fixtures/comfy/cms/translations.yml +7 -0
  271. data/test/fixtures/generators/cms/application.rb +7 -0
  272. data/test/fixtures/generators/cms/routes.rb +4 -7
  273. data/test/fixtures/generators/scaffold/controller.rb +10 -10
  274. data/test/fixtures/generators/scaffold/migration.rb +2 -3
  275. data/test/fixtures/generators/scaffold/model.rb +7 -7
  276. data/test/fixtures/generators/scaffold/routes.rb +1 -2
  277. data/test/fixtures/generators/scaffold/tests/controller.rb +37 -24
  278. data/test/fixtures/generators/scaffold/tests/model.rb +3 -4
  279. data/test/fixtures/generators/scaffold/views/_form.haml +3 -2
  280. data/test/fixtures/generators/scaffold/views/edit.haml +1 -1
  281. data/test/fixtures/generators/scaffold/views/index.haml +15 -13
  282. data/test/fixtures/generators/scaffold/views/new.haml +1 -1
  283. data/test/fixtures/generators/scaffold/views/show.haml +2 -2
  284. data/test/gemfiles/Gemfile.rails.5.2 +32 -0
  285. data/test/generators/cms_assets_generator_test.rb +1 -2
  286. data/test/generators/cms_generator_test.rb +3 -1
  287. data/test/generators/cms_views_generator_test.rb +1 -1
  288. data/test/generators/scaffold_generator_test.rb +2 -2
  289. data/test/helpers/cms_helper_test.rb +52 -73
  290. data/test/integration/access_control_test.rb +35 -28
  291. data/test/integration/js_variables_test.rb +1 -2
  292. data/test/integration/render_cms_test.rb +37 -37
  293. data/test/integration/routing_test.rb +4 -5
  294. data/test/integration/seeds_test.rb +76 -0
  295. data/test/integration/sites_test.rb +35 -49
  296. data/test/integration/view_hooks_test.rb +12 -13
  297. data/test/lib/configuration_test.rb +3 -4
  298. data/test/lib/content/block_test.rb +26 -0
  299. data/test/lib/content/params_parser_test.rb +125 -0
  300. data/test/lib/content/renderer_test.rb +240 -0
  301. data/test/lib/content/tag_test.rb +48 -0
  302. data/test/lib/content/tags/asset_test.rb +79 -0
  303. data/test/lib/content/tags/checkbox_test.rb +20 -0
  304. data/test/lib/content/tags/date_test.rb +20 -0
  305. data/test/lib/content/tags/datetime_test.rb +20 -0
  306. data/test/lib/content/tags/file_link_test.rb +78 -0
  307. data/test/lib/content/tags/file_test.rb +60 -0
  308. data/test/lib/content/tags/files_test.rb +49 -0
  309. data/test/lib/content/tags/fragment_test.rb +63 -0
  310. data/test/lib/content/tags/helper_test.rb +52 -0
  311. data/test/lib/content/tags/markdown_test.rb +33 -0
  312. data/test/lib/content/tags/number_test.rb +13 -0
  313. data/test/lib/content/tags/partial_test.rb +43 -0
  314. data/test/lib/content/tags/snippet_test.rb +36 -0
  315. data/test/lib/content/tags/template_test.rb +35 -0
  316. data/test/lib/content/tags/text_test.rb +13 -0
  317. data/test/lib/content/tags/textarea_test.rb +13 -0
  318. data/test/lib/content/tags/wysiwyg_test.rb +13 -0
  319. data/test/lib/revisions_test.rb +146 -111
  320. data/test/lib/seeds/files_test.rb +96 -0
  321. data/test/lib/seeds/layouts_test.rb +155 -0
  322. data/test/lib/seeds/pages_test.rb +227 -0
  323. data/test/lib/seeds/snippets_test.rb +98 -0
  324. data/test/lib/seeds_test.rb +50 -0
  325. data/test/models/categorization_test.rb +37 -38
  326. data/test/models/category_test.rb +14 -14
  327. data/test/models/file_test.rb +23 -96
  328. data/test/models/fragment_test.rb +131 -0
  329. data/test/models/layout_test.rb +105 -74
  330. data/test/models/page_test.rb +352 -97
  331. data/test/models/site_test.rb +101 -90
  332. data/test/models/snippet_test.rb +29 -23
  333. data/test/models/translation_test.rb +60 -0
  334. data/test/tasks/cms_seeds_test.rb +33 -0
  335. data/test/test_helper.rb +49 -32
  336. metadata +235 -210
  337. data/_config.yml +0 -1
  338. data/app/assets/images/comfy/admin/cms/arrow_bottom.gif +0 -0
  339. data/app/assets/images/comfy/admin/cms/arrow_right.gif +0 -0
  340. data/app/assets/images/comfy/admin/cms/checkerboard.gif +0 -0
  341. data/app/assets/images/comfy/admin/cms/icon_draft.gif +0 -0
  342. data/app/assets/images/comfy/admin/cms/icon_file.gif +0 -0
  343. data/app/assets/images/comfy/admin/cms/icon_layout.gif +0 -0
  344. data/app/assets/images/comfy/admin/cms/icon_move.gif +0 -0
  345. data/app/assets/images/comfy/admin/cms/icon_page.gif +0 -0
  346. data/app/assets/images/comfy/admin/cms/icon_site.gif +0 -0
  347. data/app/assets/images/comfy/admin/cms/icon_snippet.gif +0 -0
  348. data/app/assets/javascripts/comfy/admin/cms/lib/bootstrap-datetimepicker.js +0 -29
  349. data/app/assets/javascripts/comfy/admin/cms/lib/diff.js.coffee +0 -9
  350. data/app/assets/javascripts/comfy/admin/cms/lib/diff/pretty_text_diff.min.js +0 -5
  351. data/app/assets/stylesheets/comfy/admin/cms/bootstrap_overrides.sass +0 -32
  352. data/app/assets/stylesheets/comfy/admin/cms/lib/bootstrap-datetimepicker.css +0 -9
  353. data/app/models/comfy/cms/block.rb +0 -63
  354. data/app/views/comfy/admin/cms/files/_page_form.html.haml +0 -10
  355. data/app/views/comfy/admin/cms/pages/_form_blocks.html.haml +0 -32
  356. data/app/views/comfy/admin/cms/pages/form_blocks.js.erb +0 -1
  357. data/app/views/comfy/admin/cms/partials/_body_before.html.haml +0 -3
  358. data/app/views/comfy/admin/cms/partials/_file_form_after.html.haml +0 -3
  359. data/app/views/comfy/admin/cms/partials/_file_form_before.html.haml +0 -3
  360. data/app/views/comfy/admin/cms/partials/_files_after.html.haml +0 -3
  361. data/app/views/comfy/admin/cms/partials/_files_before.html.haml +0 -3
  362. data/app/views/comfy/admin/cms/partials/_html_footer.html.haml +0 -2
  363. data/app/views/comfy/admin/cms/partials/_html_head.html.haml +0 -2
  364. data/app/views/comfy/admin/cms/partials/_layout_form_after.html.haml +0 -3
  365. data/app/views/comfy/admin/cms/partials/_layout_form_before.html.haml +0 -3
  366. data/app/views/comfy/admin/cms/partials/_layouts_after.html.haml +0 -3
  367. data/app/views/comfy/admin/cms/partials/_layouts_before.html.haml +0 -3
  368. data/app/views/comfy/admin/cms/partials/_navigation_after.html.haml +0 -3
  369. data/app/views/comfy/admin/cms/partials/_navigation_before.html.haml +0 -3
  370. data/app/views/comfy/admin/cms/partials/_navigation_inner.html.haml +0 -3
  371. data/app/views/comfy/admin/cms/partials/_page_form_after.html.haml +0 -3
  372. data/app/views/comfy/admin/cms/partials/_page_form_before.html.haml +0 -3
  373. data/app/views/comfy/admin/cms/partials/_page_form_inner.html.haml +0 -3
  374. data/app/views/comfy/admin/cms/partials/_pages_after.html.haml +0 -3
  375. data/app/views/comfy/admin/cms/partials/_pages_before.html.haml +0 -3
  376. data/app/views/comfy/admin/cms/partials/_right_column_after.html.haml +0 -3
  377. data/app/views/comfy/admin/cms/partials/_right_column_before.html.haml +0 -3
  378. data/app/views/comfy/admin/cms/partials/_site_form_after.html.haml +0 -3
  379. data/app/views/comfy/admin/cms/partials/_site_form_before.html.haml +0 -3
  380. data/app/views/comfy/admin/cms/partials/_sites_after.html.haml +0 -3
  381. data/app/views/comfy/admin/cms/partials/_sites_before.html.haml +0 -3
  382. data/app/views/comfy/admin/cms/partials/_snippet_form_after.html.haml +0 -3
  383. data/app/views/comfy/admin/cms/partials/_snippet_form_before.html.haml +0 -3
  384. data/app/views/comfy/admin/cms/partials/_snippets_after.html.haml +0 -3
  385. data/app/views/comfy/admin/cms/partials/_snippets_before.html.haml +0 -3
  386. data/app/views/comfy/admin/cms/sites/_mirrors.html.haml +0 -18
  387. data/app/views/comfy/cms/content/render_sitemap.xml.builder +0 -14
  388. data/app/views/layouts/comfy/admin/cms/_footer.html.haml +0 -3
  389. data/config/initializers/paperclip.rb +0 -3
  390. data/config/initializers/secret_token.rb +0 -15
  391. data/db/cms_fixtures/sample-site/categories/files.yml +0 -1
  392. data/db/cms_fixtures/sample-site/categories/pages.yml +0 -1
  393. data/db/cms_fixtures/sample-site/categories/snippets.yml +0 -1
  394. data/db/cms_fixtures/sample-site/files/_sample.jpg.yml +0 -5
  395. data/db/cms_fixtures/sample-site/layouts/default/attributes.yml +0 -1
  396. data/db/cms_fixtures/sample-site/layouts/default/content.html +0 -5
  397. data/db/cms_fixtures/sample-site/layouts/default/javascript.js +0 -1
  398. data/db/cms_fixtures/sample-site/layouts/default/nested/attributes.yml +0 -2
  399. data/db/cms_fixtures/sample-site/layouts/default/nested/content.haml +0 -3
  400. data/db/cms_fixtures/sample-site/layouts/default/nested/javascript.js +0 -1
  401. data/db/cms_fixtures/sample-site/layouts/default/nested/stylesheet.css +0 -1
  402. data/db/cms_fixtures/sample-site/layouts/default/stylesheet.css +0 -1
  403. data/db/cms_fixtures/sample-site/pages/index/attributes.yml +0 -6
  404. data/db/cms_fixtures/sample-site/pages/index/child/attributes.yml +0 -3
  405. data/db/cms_fixtures/sample-site/pages/index/child/left.haml +0 -1
  406. data/db/cms_fixtures/sample-site/pages/index/child/right.html +0 -1
  407. data/db/cms_fixtures/sample-site/pages/index/content.html +0 -2
  408. data/db/cms_fixtures/sample-site/snippets/default/attributes.yml +0 -4
  409. data/db/cms_fixtures/sample-site/snippets/default/content.html +0 -1
  410. data/db/seeds.rb +0 -7
  411. data/db/upgrade_migrations/02_upgrade_to_1_1_0.rb +0 -19
  412. data/db/upgrade_migrations/03_upgrade_to_1_2_0.rb +0 -15
  413. data/db/upgrade_migrations/04_upgrade_to_1_3_0.rb +0 -23
  414. data/db/upgrade_migrations/05_upgrade_to_1_4_0.rb +0 -33
  415. data/db/upgrade_migrations/06_upgrade_to_1_5_0.rb +0 -21
  416. data/db/upgrade_migrations/07_upgrade_to_1_6_0.rb +0 -25
  417. data/db/upgrade_migrations/08_upgrade_to_1_12_0.rb +0 -83
  418. data/doc/preview.png +0 -0
  419. data/lib/comfortable_mexican_sofa/extensions/cms_manageable.rb +0 -106
  420. data/lib/comfortable_mexican_sofa/extensions/is_categorized.rb +0 -49
  421. data/lib/comfortable_mexican_sofa/extensions/is_mirrored.rb +0 -86
  422. data/lib/comfortable_mexican_sofa/extensions/rails.rb +0 -17
  423. data/lib/comfortable_mexican_sofa/fixture.rb +0 -82
  424. data/lib/comfortable_mexican_sofa/fixture/category.rb +0 -42
  425. data/lib/comfortable_mexican_sofa/fixture/file.rb +0 -85
  426. data/lib/comfortable_mexican_sofa/fixture/layout.rb +0 -95
  427. data/lib/comfortable_mexican_sofa/fixture/page.rb +0 -129
  428. data/lib/comfortable_mexican_sofa/fixture/snippet.rb +0 -75
  429. data/lib/comfortable_mexican_sofa/tag.rb +0 -154
  430. data/lib/comfortable_mexican_sofa/tags/asset.rb +0 -30
  431. data/lib/comfortable_mexican_sofa/tags/collection.rb +0 -64
  432. data/lib/comfortable_mexican_sofa/tags/field_boolean.rb +0 -17
  433. data/lib/comfortable_mexican_sofa/tags/field_datetime.rb +0 -17
  434. data/lib/comfortable_mexican_sofa/tags/field_integer.rb +0 -17
  435. data/lib/comfortable_mexican_sofa/tags/field_rich_text.rb +0 -17
  436. data/lib/comfortable_mexican_sofa/tags/field_string.rb +0 -17
  437. data/lib/comfortable_mexican_sofa/tags/field_text.rb +0 -17
  438. data/lib/comfortable_mexican_sofa/tags/file.rb +0 -29
  439. data/lib/comfortable_mexican_sofa/tags/helper.rb +0 -24
  440. data/lib/comfortable_mexican_sofa/tags/page_datetime.rb +0 -13
  441. data/lib/comfortable_mexican_sofa/tags/page_file.rb +0 -62
  442. data/lib/comfortable_mexican_sofa/tags/page_files.rb +0 -51
  443. data/lib/comfortable_mexican_sofa/tags/page_integer.rb +0 -13
  444. data/lib/comfortable_mexican_sofa/tags/page_markdown.rb +0 -16
  445. data/lib/comfortable_mexican_sofa/tags/page_rich_text.rb +0 -13
  446. data/lib/comfortable_mexican_sofa/tags/page_string.rb +0 -13
  447. data/lib/comfortable_mexican_sofa/tags/page_text.rb +0 -13
  448. data/lib/comfortable_mexican_sofa/tags/partial.rb +0 -23
  449. data/lib/comfortable_mexican_sofa/tags/snippet.rb +0 -19
  450. data/lib/comfortable_mexican_sofa/tags/template.rb +0 -22
  451. data/lib/generators/comfy/scaffold/templates/views/_form.haml +0 -6
  452. data/lib/generators/comfy/scaffold/templates/views/index.haml +0 -23
  453. data/lib/tasks/comfortable_mexican_sofa.rake +0 -37
  454. data/test/fixtures/comfy/cms/blocks.yml +0 -12
  455. data/test/gemfiles/Gemfile.rails.4.1 +0 -22
  456. data/test/gemfiles/Gemfile.rails.4.2 +0 -22
  457. data/test/gemfiles/Gemfile.rails.5.0 +0 -23
  458. data/test/gemfiles/Gemfile.rails.master +0 -23
  459. data/test/integration/fixtures_test.rb +0 -65
  460. data/test/integration/mirrors_test.rb +0 -72
  461. data/test/lib/fixtures/categories_test.rb +0 -36
  462. data/test/lib/fixtures/files_test.rb +0 -109
  463. data/test/lib/fixtures/layouts_test.rb +0 -135
  464. data/test/lib/fixtures/pages_test.rb +0 -168
  465. data/test/lib/fixtures/snippets_test.rb +0 -106
  466. data/test/lib/fixtures_test.rb +0 -43
  467. data/test/lib/mirrors_test.rb +0 -254
  468. data/test/lib/tag_test.rb +0 -309
  469. data/test/lib/tags/asset_test.rb +0 -95
  470. data/test/lib/tags/collection_test.rb +0 -117
  471. data/test/lib/tags/field_boolean_test.rb +0 -49
  472. data/test/lib/tags/field_datetime_test.rb +0 -50
  473. data/test/lib/tags/field_integer_test.rb +0 -49
  474. data/test/lib/tags/field_rich_text_test.rb +0 -49
  475. data/test/lib/tags/field_string_test.rb +0 -52
  476. data/test/lib/tags/field_text_test.rb +0 -48
  477. data/test/lib/tags/file_test.rb +0 -67
  478. data/test/lib/tags/helper_test.rb +0 -86
  479. data/test/lib/tags/page_datetime_test.rb +0 -50
  480. data/test/lib/tags/page_file_test.rb +0 -119
  481. data/test/lib/tags/page_files_test.rb +0 -117
  482. data/test/lib/tags/page_integer_test.rb +0 -49
  483. data/test/lib/tags/page_markdown_test.rb +0 -48
  484. data/test/lib/tags/page_rich_text_test.rb +0 -49
  485. data/test/lib/tags/page_string_test.rb +0 -49
  486. data/test/lib/tags/page_text_test.rb +0 -52
  487. data/test/lib/tags/partial_test.rb +0 -76
  488. data/test/lib/tags/snippet_test.rb +0 -45
  489. data/test/lib/tags/template_test.rb +0 -56
  490. data/test/models/block_test.rb +0 -233
@@ -1,18 +1,20 @@
1
1
  class Comfy::Admin::Cms::RevisionsController < Comfy::Admin::Cms::BaseController
2
2
 
3
3
  before_action :load_record
4
- before_action :load_revision, :except => :index
4
+ before_action :load_revision, except: :index
5
5
  before_action :authorize
6
6
 
7
+ helper_method :record_path
8
+
7
9
  def index
8
- redirect_to :action => :show, :id => @record.revisions.first.try(:id) || 0
10
+ redirect_to action: :show, id: @record.revisions.order(created_at: :desc).first.try(:id) || 0
9
11
  end
10
12
 
11
13
  def show
12
14
  case @record
13
- when Comfy::Cms::Page
14
- @current_content = @record.blocks.inject({}){|c, b| c[b.identifier] = b.content; c }
15
- @versioned_content = @record.blocks.inject({}){|c, b| c[b.identifier] = @revision.data['blocks_attributes'].detect{|r| r[:identifier] == b.identifier}.try(:[], :content); c }
15
+ when Comfy::Cms::Page, Comfy::Cms::Translation
16
+ @current_content = @record.fragments.inject({}){|c, b| c[b.identifier] = b.content; c }
17
+ @versioned_content = @record.fragments.inject({}){|c, b| c[b.identifier] = @revision.data['fragments_attributes'].detect{|r| r[:identifier] == b.identifier}.try(:[], :content); c }
16
18
  else
17
19
  @current_content = @record.revision_fields.inject({}){|c, f| c[f] = @record.send(f); c }
18
20
  @versioned_content = @record.revision_fields.inject({}){|c, f| c[f] = @revision.data[f]; c }
@@ -22,7 +24,7 @@ class Comfy::Admin::Cms::RevisionsController < Comfy::Admin::Cms::BaseController
22
24
  def revert
23
25
  @record.restore_from_revision(@revision)
24
26
  flash[:success] = I18n.t('comfy.admin.cms.revisions.reverted')
25
- redirect_to_record
27
+ redirect_to record_path
26
28
  end
27
29
 
28
30
  protected
@@ -30,11 +32,14 @@ protected
30
32
  def load_record
31
33
  @record = if params[:layout_id]
32
34
  ::Comfy::Cms::Layout.find(params[:layout_id])
35
+ elsif params[:translation_id]
36
+ ::Comfy::Cms::Translation.find(params[:translation_id])
33
37
  elsif params[:page_id]
34
38
  ::Comfy::Cms::Page.find(params[:page_id])
35
39
  elsif params[:snippet_id]
36
40
  ::Comfy::Cms::Snippet.find(params[:snippet_id])
37
41
  end
42
+
38
43
  rescue ActiveRecord::RecordNotFound
39
44
  flash[:danger] = I18n.t('comfy.admin.cms.revisions.record_not_found')
40
45
  redirect_to comfy_admin_cms_path
@@ -44,15 +49,19 @@ protected
44
49
  @revision = @record.revisions.find(params[:id])
45
50
  rescue ActiveRecord::RecordNotFound
46
51
  flash[:danger] = I18n.t('comfy.admin.cms.revisions.not_found')
47
- redirect_to_record
52
+ redirect_to record_path
48
53
  end
49
54
 
50
- def redirect_to_record
51
- redirect_to case @record
52
- when ::Comfy::Cms::Layout then edit_comfy_admin_cms_site_layout_path(@site, @record)
53
- when ::Comfy::Cms::Page then edit_comfy_admin_cms_site_page_path(@site, @record)
54
- when ::Comfy::Cms::Snippet then edit_comfy_admin_cms_site_snippet_path(@site, @record)
55
+ def record_path(record = @record)
56
+ case record
57
+ when ::Comfy::Cms::Layout
58
+ edit_comfy_admin_cms_site_layout_path(@site, @record)
59
+ when ::Comfy::Cms::Page
60
+ edit_comfy_admin_cms_site_page_path(@site, @record)
61
+ when ::Comfy::Cms::Translation
62
+ edit_comfy_admin_cms_site_page_translation_path(@site, @record.page, @record)
63
+ when ::Comfy::Cms::Snippet
64
+ edit_comfy_admin_cms_site_snippet_path(@site, @record)
55
65
  end
56
66
  end
57
-
58
- end
67
+ end
@@ -1,14 +1,14 @@
1
1
  class Comfy::Admin::Cms::SitesController < Comfy::Admin::Cms::BaseController
2
2
 
3
3
  skip_before_action :load_admin_site,
4
- :load_fixtures
4
+ :load_seeds
5
5
 
6
- before_action :build_site, :only => [:new, :create]
7
- before_action :load_site, :only => [:edit, :update, :destroy]
6
+ before_action :build_site, only: [:new, :create]
7
+ before_action :load_site, only: [:edit, :update, :destroy]
8
8
  before_action :authorize
9
9
 
10
10
  def index
11
- return redirect_to :action => :new if ::Comfy::Cms::Site.count == 0
11
+ return redirect_to action: :new if ::Comfy::Cms::Site.count == 0
12
12
  @site = ::Comfy::Cms::Site.find_by_id(session[:site_id])
13
13
  @sites ||= ::Comfy::Cms::Site.all
14
14
  end
@@ -27,22 +27,22 @@ class Comfy::Admin::Cms::SitesController < Comfy::Admin::Cms::BaseController
27
27
  redirect_to comfy_admin_cms_site_layouts_path(@site)
28
28
  rescue ActiveRecord::RecordInvalid
29
29
  flash.now[:danger] = I18n.t('comfy.admin.cms.sites.creation_failure')
30
- render :action => :new
30
+ render action: :new
31
31
  end
32
32
 
33
33
  def update
34
34
  @site.update_attributes!(site_params)
35
35
  flash[:success] = I18n.t('comfy.admin.cms.sites.updated')
36
- redirect_to :action => :edit, :id => @site
36
+ redirect_to action: :edit, id: @site
37
37
  rescue ActiveRecord::RecordInvalid
38
38
  flash.now[:danger] = I18n.t('comfy.admin.cms.sites.update_failure')
39
- render :action => :edit
39
+ render action: :edit
40
40
  end
41
41
 
42
42
  def destroy
43
43
  @site.destroy
44
44
  flash[:success] = I18n.t('comfy.admin.cms.sites.deleted')
45
- redirect_to :action => :index
45
+ redirect_to action: :index
46
46
  end
47
47
 
48
48
  protected
@@ -57,11 +57,10 @@ protected
57
57
  I18n.locale = ComfortableMexicanSofa.config.admin_locale || @site.locale
58
58
  rescue ActiveRecord::RecordNotFound
59
59
  flash[:danger] = I18n.t('comfy.admin.cms.sites.not_found')
60
- redirect_to :action => :index
60
+ redirect_to action: :index
61
61
  end
62
62
 
63
63
  def site_params
64
64
  params.fetch(:site, {}).permit!
65
65
  end
66
-
67
66
  end
@@ -1,12 +1,12 @@
1
1
  class Comfy::Admin::Cms::SnippetsController < Comfy::Admin::Cms::BaseController
2
2
 
3
- before_action :build_snippet, :only => [:new, :create]
4
- before_action :load_snippet, :only => [:edit, :update, :destroy]
3
+ before_action :build_snippet, only: [:new, :create]
4
+ before_action :load_snippet, only: [:edit, :update, :destroy]
5
5
  before_action :authorize
6
6
 
7
7
  def index
8
- return redirect_to :action => :new if @site.snippets.count == 0
9
- @snippets = @site.snippets.includes(:categories).for_category(params[:category])
8
+ return redirect_to action: :new if @site.snippets.count == 0
9
+ @snippets = @site.snippets.includes(:categories).for_category(params[:categories]).order(:position)
10
10
  end
11
11
 
12
12
  def new
@@ -20,30 +20,30 @@ class Comfy::Admin::Cms::SnippetsController < Comfy::Admin::Cms::BaseController
20
20
  def create
21
21
  @snippet.save!
22
22
  flash[:success] = I18n.t('comfy.admin.cms.snippets.created')
23
- redirect_to :action => :edit, :id => @snippet
23
+ redirect_to action: :edit, id: @snippet
24
24
  rescue ActiveRecord::RecordInvalid
25
25
  flash.now[:danger] = I18n.t('comfy.admin.cms.snippets.creation_failure')
26
- render :action => :new
26
+ render action: :new
27
27
  end
28
28
 
29
29
  def update
30
30
  @snippet.update_attributes!(snippet_params)
31
31
  flash[:success] = I18n.t('comfy.admin.cms.snippets.updated')
32
- redirect_to :action => :edit, :id => @snippet
32
+ redirect_to action: :edit, id: @snippet
33
33
  rescue ActiveRecord::RecordInvalid
34
34
  flash.now[:danger] = I18n.t('comfy.admin.cms.snippets.update_failure')
35
- render :action => :edit
35
+ render action: :edit
36
36
  end
37
37
 
38
38
  def destroy
39
39
  @snippet.destroy
40
40
  flash[:success] = I18n.t('comfy.admin.cms.snippets.deleted')
41
- redirect_to :action => :index
41
+ redirect_to action: :index
42
42
  end
43
43
 
44
44
  def reorder
45
45
  (params[:comfy_cms_snippet] || []).each_with_index do |id, index|
46
- ::Comfy::Cms::Snippet.where(:id => id).update_all(:position => index)
46
+ ::Comfy::Cms::Snippet.where(id: id).update_all(position: index)
47
47
  end
48
48
  head :ok
49
49
  end
@@ -58,7 +58,7 @@ protected
58
58
  @snippet = @site.snippets.find(params[:id])
59
59
  rescue ActiveRecord::RecordNotFound
60
60
  flash[:danger] = I18n.t('comfy.admin.cms.snippets.not_found')
61
- redirect_to :action => :index
61
+ redirect_to action: :index
62
62
  end
63
63
 
64
64
  def snippet_params
@@ -0,0 +1,98 @@
1
+ class Comfy::Admin::Cms::TranslationsController < Comfy::Admin::Cms::BaseController
2
+
3
+ helper_method :translation_select_options
4
+
5
+ before_action :load_page
6
+ before_action :build_translation, only: [:new, :create]
7
+ before_action :load_translation, only: [:edit, :update, :destroy]
8
+ before_action :authorize
9
+ before_action :preview_translation, only: [:create, :update]
10
+
11
+ def new
12
+ render
13
+ end
14
+
15
+ def edit
16
+ render
17
+ end
18
+
19
+ def create
20
+ @translation.save!
21
+ flash[:success] = I18n.t('comfy.admin.cms.translations.created')
22
+ redirect_to action: :edit, id: @translation
23
+ rescue ActiveRecord::RecordInvalid
24
+ flash.now[:danger] = I18n.t('comfy.admin.cms.translations.creation_failure')
25
+ render action: :new
26
+ end
27
+
28
+ def update
29
+ @translation.update_attributes!(translation_params)
30
+ flash[:success] = I18n.t('comfy.admin.cms.translations.updated')
31
+ redirect_to action: :edit, id: @translation
32
+ rescue ActiveRecord::RecordInvalid
33
+ flash.now[:danger] = I18n.t('comfy.admin.cms.translations.update_failure')
34
+ render action: :edit
35
+ end
36
+
37
+ def destroy
38
+ @translation.destroy
39
+ flash[:success] = I18n.t('comfy.admin.cms.translations.deleted')
40
+ redirect_to edit_comfy_admin_cms_site_page_path(@site, @page)
41
+ end
42
+
43
+ def form_fragments
44
+ @translation = @page.translations.find_by(id: params[:id]) || @page.translations.new
45
+ @translation.layout = @site.layouts.find_by(id: params[:layout_id])
46
+ end
47
+
48
+ private
49
+
50
+ def translation_select_options
51
+ all = ComfortableMexicanSofa.config.locales
52
+ taken = @page.translations.pluck(:locale) + [@site.locale] - [@translation.locale]
53
+ all.except(*taken).map{|k, v| ["#{v} (#{k})", k]}
54
+ end
55
+
56
+ def load_page
57
+ @page = @site.pages.find(params[:page_id])
58
+ rescue ActiveRecord::RecordNotFound
59
+ flash[:danger] = I18n.t('comfy.admin.cms.pages.not_found')
60
+ redirect_to comfy_admin_cms_site_pages_path(@site)
61
+ end
62
+
63
+ def build_translation
64
+ @translation = @page.translations.new(translation_params)
65
+ @translation.layout ||= @page.layout
66
+ end
67
+
68
+ def load_translation
69
+ @translation = @page.translations.find(params[:id])
70
+ @translation.attributes = translation_params
71
+ rescue ActiveRecord::RecordNotFound
72
+ flash[:danger] = I18n.t('comfy.admin.cms.translations.not_found')
73
+ redirect_to edit_comfy_admin_cms_site_page_path(@site, @page)
74
+ end
75
+
76
+ def translation_params
77
+ params.fetch(:translation, {}).permit!
78
+ end
79
+
80
+ def preview_translation
81
+ if params[:preview]
82
+ layout = @translation.layout.app_layout.blank?? false : @translation.layout.app_layout
83
+ @cms_site = @page.site
84
+ @cms_layout = @translation.layout
85
+ @cms_page = @page
86
+
87
+ # Make sure to use the site locale to render the preview becaue it might
88
+ # be different from the admin locale.
89
+ I18n.locale = @translation.locale
90
+
91
+ # Chrome chokes on content with iframes. Issue #434
92
+ response.headers['X-XSS-Protection'] = '0'
93
+
94
+ # raise
95
+ render inline: @translation.render, layout: layout, content_type: 'text/html'
96
+ end
97
+ end
98
+ end
@@ -1,18 +1,18 @@
1
1
  class Comfy::Cms::AssetsController < Comfy::Cms::BaseController
2
-
2
+
3
3
  skip_before_action :verify_authenticity_token
4
-
4
+
5
5
  before_action :load_cms_layout,
6
6
  :use_null_session
7
-
7
+
8
8
  after_action :set_cache_control_header
9
-
9
+
10
10
  def render_css
11
- render :body => @cms_layout.css, :content_type => 'text/css'
11
+ render body: @cms_layout.css, content_type: 'text/css'
12
12
  end
13
13
 
14
14
  def render_js
15
- render :body => @cms_layout.js, :content_type => 'application/javascript'
15
+ render body: @cms_layout.js, content_type: 'application/javascript'
16
16
  end
17
17
 
18
18
  protected
@@ -20,9 +20,9 @@ protected
20
20
  def load_cms_layout
21
21
  @cms_layout = @cms_site.layouts.find_by_identifier!(params[:identifier])
22
22
  rescue ActiveRecord::RecordNotFound
23
- render :body => nil, :status => 404
23
+ render body: nil, status: 404
24
24
  end
25
-
25
+
26
26
  # null_session avoids cookies and flash updates
27
27
  def use_null_session
28
28
  ActionController::RequestForgeryProtection::ProtectionMethods::NullSession.new(self)
@@ -34,5 +34,4 @@ protected
34
34
  response.headers['Cache-Control'] = "public, max-age=#{1.year.to_i}"
35
35
  end
36
36
  end
37
-
38
- end
37
+ end
@@ -20,9 +20,7 @@ protected
20
20
  raise ActionController::RoutingError.new('Site Not Found')
21
21
  end
22
22
  end
23
- I18n.locale = @locale = @cms_site.locale.to_sym
24
23
  else
25
- I18n.locale = @locale = I18n.default_locale
26
24
  raise ActionController::RoutingError.new('Site Not Found')
27
25
  end
28
26
  end
@@ -6,65 +6,84 @@ class Comfy::Cms::ContentController < Comfy::Cms::BaseController
6
6
  # Authorization module must have `authorize` method
7
7
  include ComfortableMexicanSofa.config.public_authorization.to_s.constantize
8
8
 
9
- before_action :load_fixtures
9
+ before_action :load_seeds
10
10
  before_action :load_cms_page,
11
11
  :authenticate,
12
12
  :authorize,
13
- :only => :show
14
-
15
- rescue_from ActiveRecord::RecordNotFound, :with => :page_not_found
13
+ only: :show
16
14
 
17
15
  def show
18
16
  if @cms_page.target_page.present?
19
- redirect_to @cms_page.target_page.url(:relative)
17
+ redirect_to @cms_page.target_page.url(relative: true)
20
18
  else
21
19
  respond_to do |format|
22
20
  format.html { render_page }
23
- format.json { render :json => @cms_page }
21
+ format.json {
22
+ json_page = @cms_page.as_json(except: [:content_cache])
23
+ json_page.merge!(content: render_to_string(
24
+ inline: @cms_page.content_cache,
25
+ layout: false
26
+ ))
27
+ render json: json_page
28
+ }
24
29
  end
25
30
  end
26
31
  end
27
32
 
28
- def render_sitemap
29
- render
30
- end
31
-
32
33
  protected
33
34
 
34
- def render_page(status = 200)
35
- if @cms_layout = @cms_page.layout
36
- app_layout = (@cms_layout.app_layout.blank? || request.xhr?) ? false : @cms_layout.app_layout
37
- render :inline => @cms_page.content_cache,
38
- :layout => app_layout,
39
- :status => status,
40
- :content_type => mime_type
41
- else
42
- render :plain => I18n.t('comfy.cms.content.layout_not_found'), :status => 404
43
- end
35
+ def render_page(status = :ok)
36
+ render inline: @cms_page.content_cache,
37
+ layout: app_layout,
38
+ status: status,
39
+ content_type: mime_type
44
40
  end
45
41
 
46
42
  # it's possible to control mimetype of a page by creating a `mime_type` field
47
43
  def mime_type
48
- mime_block = @cms_page.blocks.find_by_identifier(:mime_type)
49
- mime_block && mime_block.content || 'text/html'
44
+ mime_block = @cms_page.fragments.detect{|f| f.identifier == "mime_type"}
45
+ mime_block && mime_block.content || "text/html"
50
46
  end
51
47
 
52
- def load_fixtures
53
- return unless ComfortableMexicanSofa.config.enable_fixtures
54
- ComfortableMexicanSofa::Fixture::Importer.new(@cms_site.identifier).import!
48
+ def app_layout
49
+ return false if request.xhr? || !@cms_layout
50
+ @cms_layout.app_layout.present?? @cms_layout.app_layout : false
55
51
  end
56
52
 
53
+ def load_seeds
54
+ return unless ComfortableMexicanSofa.config.enable_seeds
55
+ ComfortableMexicanSofa::Seeds::Importer.new(@cms_site.identifier).import!
56
+ end
57
+
58
+ # Attempting to populate @cms_page and @cms_layout instance variables so they
59
+ # can be used in view helpers/partials
57
60
  def load_cms_page
58
- @cms_page = @cms_site.pages.published.find_by_full_path!("/#{params[:cms_path]}")
61
+ unless find_cms_page_by_full_path("/#{params[:cms_path]}")
62
+ if find_cms_page_by_full_path("/404")
63
+ render_page(:not_found)
64
+ else
65
+ message = "Page Not Found at: \"#{params[:cms_path]}\""
66
+ raise ActionController::RoutingError.new(message)
67
+ end
68
+ end
59
69
  end
60
70
 
61
- def page_not_found
62
- @cms_page = @cms_site.pages.published.find_by_full_path!('/404')
71
+ # Getting page and setting content_cache and fragments data if we need to
72
+ # serve translation data
73
+ def find_cms_page_by_full_path(full_path)
74
+ @cms_page = @cms_site.pages.published.find_by!(full_path: full_path)
75
+ @cms_layout = @cms_page.layout
63
76
 
64
- respond_to do |format|
65
- format.html { render_page(404) }
77
+ # There are translations for this page and locale is not the default site
78
+ # locale, so we need to grab translation data.
79
+ if @cms_page.translations.any? && @cms_site.locale != I18n.locale.to_s
80
+ @cms_page.translate!(I18n.locale)
81
+ @cms_layout = @cms_page.layout
66
82
  end
83
+
84
+ return @cms_page
85
+
67
86
  rescue ActiveRecord::RecordNotFound
68
- raise ActionController::RoutingError.new("Page Not Found at: \"#{params[:cms_path]}\"")
87
+ nil
69
88
  end
70
89
  end