ecm_cms_core 0.0.2

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 (280) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.rdoc +3 -0
  3. data/Rakefile +38 -0
  4. data/app/admin/ecm/ecm_core/folders.rb +46 -0
  5. data/app/admin/ecm/ecm_core/templates.rb +57 -0
  6. data/app/controllers/ecm/cms_core/page_controller.rb +55 -0
  7. data/app/controllers/page_controller.rb +2 -0
  8. data/app/helpers/ecm/cms_core_helper.rb +48 -0
  9. data/app/models/ecm/cms_core/folder.rb +65 -0
  10. data/app/models/ecm/cms_core/template.rb +150 -0
  11. data/config/locales/ecm.cms_core.de.yml +22 -0
  12. data/config/locales/ecm.cms_core.en.yml +22 -0
  13. data/config/locales/ecm.cms_core.folder.de.yml +13 -0
  14. data/config/locales/ecm.cms_core.folder.en.yml +13 -0
  15. data/config/locales/ecm.cms_core.forms.de.yml +8 -0
  16. data/config/locales/ecm.cms_core.template.de.yml +21 -0
  17. data/config/locales/ecm.cms_core.template.en.yml +21 -0
  18. data/db/migrate/001_create_ecm_cms_core_folders.rb +16 -0
  19. data/db/migrate/002_create_ecm_cms_core_templates.rb +19 -0
  20. data/lib/ecm/cms_core/engine.rb +25 -0
  21. data/lib/ecm/cms_core/version.rb +5 -0
  22. data/lib/ecm_cms_core.rb +13 -0
  23. data/lib/generators/ecm/cms_core/active_admin/active_admin_generator.rb +16 -0
  24. data/lib/generators/ecm/cms_core/active_admin/templates/folders.rb +44 -0
  25. data/lib/generators/ecm/cms_core/active_admin/templates/templates.rb +52 -0
  26. data/lib/generators/ecm/cms_core/controller/controller_generator.rb +15 -0
  27. data/lib/generators/ecm/cms_core/controller/templates/page_controller.rb +3 -0
  28. data/lib/generators/ecm/cms_core/install/install_generator.rb +34 -0
  29. data/lib/generators/ecm/cms_core/locales/locales_generator.rb +17 -0
  30. data/lib/generators/ecm/cms_core/locales/templates/ecm.cms-core.de.yml +48 -0
  31. data/lib/generators/ecm/cms_core/locales/templates/ecm.cms-core.en.yml +48 -0
  32. data/lib/generators/ecm/cms_core/migrations/migrations_generator.rb +28 -0
  33. data/lib/generators/ecm/cms_core/migrations/templates/create_ecm_cms_core_folders.rb +20 -0
  34. data/lib/generators/ecm/cms_core/migrations/templates/create_ecm_cms_core_templates.rb +23 -0
  35. data/lib/generators/ecm/cms_core/models/models_generator.rb +16 -0
  36. data/lib/generators/ecm/cms_core/models/templates/folder.rb +58 -0
  37. data/lib/generators/ecm/cms_core/models/templates/template.rb +127 -0
  38. data/lib/generators/ecm/cms_core/routes/routes_generator.rb +18 -0
  39. data/lib/generators/ecm/cms_core/routes/templates/routes.rb +14 -0
  40. data/lib/tasks/ecm_cms_core_tasks.rake +4 -0
  41. data/test/dummy/README.rdoc +261 -0
  42. data/test/dummy/Rakefile +7 -0
  43. data/test/dummy/app/admin/dashboards.rb +44 -0
  44. data/test/dummy/app/assets/javascripts/active_admin.js +1 -0
  45. data/test/dummy/app/assets/javascripts/application.js +15 -0
  46. data/test/dummy/app/assets/stylesheets/active_admin.css.scss +6 -0
  47. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  48. data/test/dummy/app/controllers/application_controller.rb +3 -0
  49. data/test/dummy/app/controllers/frontend_controller.rb +5 -0
  50. data/test/dummy/app/helpers/application_helper.rb +2 -0
  51. data/test/dummy/app/models/admin_user.rb +11 -0
  52. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  53. data/test/dummy/config/application.rb +60 -0
  54. data/test/dummy/config/boot.rb +10 -0
  55. data/test/dummy/config/database.yml +25 -0
  56. data/test/dummy/config/environment.rb +5 -0
  57. data/test/dummy/config/environments/development.rb +37 -0
  58. data/test/dummy/config/environments/production.rb +67 -0
  59. data/test/dummy/config/environments/test.rb +37 -0
  60. data/test/dummy/config/initializers/active_admin.rb +133 -0
  61. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  62. data/test/dummy/config/initializers/devise.rb +232 -0
  63. data/test/dummy/config/initializers/inflections.rb +15 -0
  64. data/test/dummy/config/initializers/mime_types.rb +5 -0
  65. data/test/dummy/config/initializers/secret_token.rb +7 -0
  66. data/test/dummy/config/initializers/session_store.rb +8 -0
  67. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  68. data/test/dummy/config/locales/admin_user.de.yml +16 -0
  69. data/test/dummy/config/locales/devise.en.yml +58 -0
  70. data/test/dummy/config/locales/ecm.admin.de.yml +5 -0
  71. data/test/dummy/config/locales/en.yml +5 -0
  72. data/test/dummy/config/routes.rb +75 -0
  73. data/test/dummy/config.ru +4 -0
  74. data/test/dummy/db/development.sqlite3 +0 -0
  75. data/test/dummy/db/migrate/20120622191421_devise_create_admin_users.rb +49 -0
  76. data/test/dummy/db/migrate/20120622211430_create_admin_notes.rb +17 -0
  77. data/test/dummy/db/migrate/20120622211431_move_admin_notes_to_comments.rb +25 -0
  78. data/test/dummy/db/migrate/20120622211432_create_ecm_cms_core_folders.ecm_cms_core_engine.rb +17 -0
  79. data/test/dummy/db/migrate/20120622211433_create_ecm_cms_core_templates.ecm_cms_core_engine.rb +20 -0
  80. data/test/dummy/db/schema.rb +78 -0
  81. data/test/dummy/lib/i18n_controller.rb +13 -0
  82. data/test/dummy/log/development.log +3914 -0
  83. data/test/dummy/public/404.html +26 -0
  84. data/test/dummy/public/422.html +26 -0
  85. data/test/dummy/public/500.html +25 -0
  86. data/test/dummy/public/favicon.ico +0 -0
  87. data/test/dummy/script/rails +6 -0
  88. data/test/dummy/test/fixtures/admin_users.yml +11 -0
  89. data/test/dummy/test/unit/admin_user_test.rb +7 -0
  90. data/test/dummy/tmp/cache/assets/C18/0B0/sprockets%2F35b3b1439378240b7f536115a153938b +0 -0
  91. data/test/dummy/tmp/cache/assets/C71/090/sprockets%2F931c90486b551252ac56132ab76b3d24 +0 -0
  92. data/test/dummy/tmp/cache/assets/C77/210/sprockets%2Ff90b51d7105d6180b8164f81f4018e40 +0 -0
  93. data/test/dummy/tmp/cache/assets/C7A/1D0/sprockets%2F0189934c63685d1fb1126608daf1425a +0 -0
  94. data/test/dummy/tmp/cache/assets/C86/B30/sprockets%2F85e65103906606f93dcb5680baf75803 +0 -0
  95. data/test/dummy/tmp/cache/assets/C88/8B0/sprockets%2F6680b99d2ee676651202ae63a78c4632 +0 -0
  96. data/test/dummy/tmp/cache/assets/CAD/7E0/sprockets%2F935781681cef3fc00956d32115cdd521 +0 -0
  97. data/test/dummy/tmp/cache/assets/CB0/2A0/sprockets%2F3481651900e045da49fced159c2c9814 +0 -0
  98. data/test/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953 +0 -0
  99. data/test/dummy/tmp/cache/assets/CDB/040/sprockets%2Fc732474e67003a4eb840eb44c5ca9385 +0 -0
  100. data/test/dummy/tmp/cache/assets/CDD/E00/sprockets%2Fb2e579afe803008df59253c7710ad551 +0 -0
  101. data/test/dummy/tmp/cache/assets/CEA/0A0/sprockets%2Ff1bd29507924f5fa43fb777b0d681295 +0 -0
  102. data/test/dummy/tmp/cache/assets/CF3/0B0/sprockets%2F0052f1e917b02a5ad4b2ca961221a8f4 +0 -0
  103. data/test/dummy/tmp/cache/assets/CFD/150/sprockets%2Fdb3d5b419b4002d3340c24b493d8bb95 +0 -0
  104. data/test/dummy/tmp/cache/assets/D08/3C0/sprockets%2Fbe501c50446a7f55d74e3d4a7920bb56 +0 -0
  105. data/test/dummy/tmp/cache/assets/D0A/5C0/sprockets%2Fb89637e3b60cf2ddbb055339f23a8421 +0 -0
  106. data/test/dummy/tmp/cache/assets/D0E/A90/sprockets%2Fc50f8f2a758b0942172763af9a33b0ef +0 -0
  107. data/test/dummy/tmp/cache/assets/D1B/200/sprockets%2Fee63896e56c8fa545d2a92d3145a760d +0 -0
  108. data/test/dummy/tmp/cache/assets/D2E/DE0/sprockets%2F7668bdc951df66f9d93210ed7689bb57 +0 -0
  109. data/test/dummy/tmp/cache/assets/D30/D00/sprockets%2F506e8247250c45c101b1f6cefe7b22fb +0 -0
  110. data/test/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
  111. data/test/dummy/tmp/cache/assets/D38/540/sprockets%2F86e1ad844bc9df4491a2a52b870421db +0 -0
  112. data/test/dummy/tmp/cache/assets/D3A/240/sprockets%2Fbd5ec81e43457436f38d6f2e21eb311b +0 -0
  113. data/test/dummy/tmp/cache/assets/D3D/B50/sprockets%2F60f3b6e7ec4196f82f701a039db5a55a +0 -0
  114. data/test/dummy/tmp/cache/assets/D46/720/sprockets%2Fef62800e7785cd1f7f7d7edb3960000e +0 -0
  115. data/test/dummy/tmp/cache/assets/D48/640/sprockets%2F9f4f18d910b678b1d0777e04cdaf6f24 +0 -0
  116. data/test/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
  117. data/test/dummy/tmp/cache/assets/D59/D70/sprockets%2Fed9f0de1b65ae8d7ef89087c83728461 +0 -0
  118. data/test/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6 +0 -0
  119. data/test/dummy/tmp/cache/assets/D5B/860/sprockets%2F79ae2a01f99104da404ed31a8fea230d +0 -0
  120. data/test/dummy/tmp/cache/assets/D5D/6B0/sprockets%2F690ac8bc288fe688ce9d76121687c8bf +0 -0
  121. data/test/dummy/tmp/cache/assets/D5F/AE0/sprockets%2F6057dd9be3e736fad88777c09689bfe1 +0 -0
  122. data/test/dummy/tmp/cache/assets/D6B/E60/sprockets%2Ff93ae30e51558cab50c5867ffa4a714a +0 -0
  123. data/test/dummy/tmp/cache/assets/D7F/600/sprockets%2Fafd454e9dc29d3ce8f5fc810465219f6 +0 -0
  124. data/test/dummy/tmp/cache/assets/D84/500/sprockets%2Fe598c3010e9ff8a9fc930e84eb2b8f38 +0 -0
  125. data/test/dummy/tmp/cache/assets/D93/4C0/sprockets%2F857ecd2092cee11f740b3cf2e373ad2a +0 -0
  126. data/test/dummy/tmp/cache/assets/D96/0A0/sprockets%2F115d14ce48fada6837943c0e5b0a8eda +0 -0
  127. data/test/dummy/tmp/cache/assets/D97/060/sprockets%2F16cc3664c109be5b82c1521e4fe1fdfe +0 -0
  128. data/test/dummy/tmp/cache/assets/D9A/7F0/sprockets%2Fa9dc360a17e439e63ada3f389e053cda +0 -0
  129. data/test/dummy/tmp/cache/assets/D9C/4F0/sprockets%2Ffd36b6361b4bd8d3425f9aa35ff53dc1 +0 -0
  130. data/test/dummy/tmp/cache/assets/DAB/5A0/sprockets%2F2da87e72599a04cc89c8beec9218dd1a +0 -0
  131. data/test/dummy/tmp/cache/assets/DAC/1E0/sprockets%2Faf6be87981984ebc9b4f70a346dbea42 +0 -0
  132. data/test/dummy/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994 +0 -0
  133. data/test/dummy/tmp/cache/assets/DDE/420/sprockets%2Ffb8b186d5bf0307f86f65fc787d2adeb +0 -0
  134. data/test/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
  135. data/test/dummy/tmp/cache/sass/0149e15b7f61f5a238cd1c4ab956828760d53144/_all.css.scssc +0 -0
  136. data/test/dummy/tmp/cache/sass/0149e15b7f61f5a238cd1c4ab956828760d53144/_buttons.css.scssc +0 -0
  137. data/test/dummy/tmp/cache/sass/0149e15b7f61f5a238cd1c4ab956828760d53144/_gradients.css.scssc +0 -0
  138. data/test/dummy/tmp/cache/sass/0149e15b7f61f5a238cd1c4ab956828760d53144/_icons.css.scssc +0 -0
  139. data/test/dummy/tmp/cache/sass/0149e15b7f61f5a238cd1c4ab956828760d53144/_reset.css.scssc +0 -0
  140. data/test/dummy/tmp/cache/sass/0149e15b7f61f5a238cd1c4ab956828760d53144/_rounded.css.scssc +0 -0
  141. data/test/dummy/tmp/cache/sass/0149e15b7f61f5a238cd1c4ab956828760d53144/_sections.css.scssc +0 -0
  142. data/test/dummy/tmp/cache/sass/0149e15b7f61f5a238cd1c4ab956828760d53144/_shadows.css.scssc +0 -0
  143. data/test/dummy/tmp/cache/sass/0149e15b7f61f5a238cd1c4ab956828760d53144/_typography.scssc +0 -0
  144. data/test/dummy/tmp/cache/sass/0149e15b7f61f5a238cd1c4ab956828760d53144/_utilities.scssc +0 -0
  145. data/test/dummy/tmp/cache/sass/0149e15b7f61f5a238cd1c4ab956828760d53144/_variables.css.scssc +0 -0
  146. data/test/dummy/tmp/cache/sass/025ab9f29cb4b11e07ac4b96733b80e57356376f/_dashboard.scssc +0 -0
  147. data/test/dummy/tmp/cache/sass/025ab9f29cb4b11e07ac4b96733b80e57356376f/_logged_out.scssc +0 -0
  148. data/test/dummy/tmp/cache/sass/0a3ebe071aa41297ff474bfea40b9ed55813ab31/_all.css.scssc +0 -0
  149. data/test/dummy/tmp/cache/sass/0a3ebe071aa41297ff474bfea40b9ed55813ab31/_buttons.css.scssc +0 -0
  150. data/test/dummy/tmp/cache/sass/0a3ebe071aa41297ff474bfea40b9ed55813ab31/_gradients.css.scssc +0 -0
  151. data/test/dummy/tmp/cache/sass/0a3ebe071aa41297ff474bfea40b9ed55813ab31/_icons.css.scssc +0 -0
  152. data/test/dummy/tmp/cache/sass/0a3ebe071aa41297ff474bfea40b9ed55813ab31/_reset.css.scssc +0 -0
  153. data/test/dummy/tmp/cache/sass/0a3ebe071aa41297ff474bfea40b9ed55813ab31/_rounded.css.scssc +0 -0
  154. data/test/dummy/tmp/cache/sass/0a3ebe071aa41297ff474bfea40b9ed55813ab31/_sections.css.scssc +0 -0
  155. data/test/dummy/tmp/cache/sass/0a3ebe071aa41297ff474bfea40b9ed55813ab31/_shadows.css.scssc +0 -0
  156. data/test/dummy/tmp/cache/sass/0a3ebe071aa41297ff474bfea40b9ed55813ab31/_typography.scssc +0 -0
  157. data/test/dummy/tmp/cache/sass/0a3ebe071aa41297ff474bfea40b9ed55813ab31/_utilities.scssc +0 -0
  158. data/test/dummy/tmp/cache/sass/0a3ebe071aa41297ff474bfea40b9ed55813ab31/_variables.css.scssc +0 -0
  159. data/test/dummy/tmp/cache/sass/0db19bf6a4f34e09dc67d80432c747832dda1113/_batch_actions.css.scssc +0 -0
  160. data/test/dummy/tmp/cache/sass/0db19bf6a4f34e09dc67d80432c747832dda1113/_blank_slates.scssc +0 -0
  161. data/test/dummy/tmp/cache/sass/0db19bf6a4f34e09dc67d80432c747832dda1113/_breadcrumbs.scssc +0 -0
  162. data/test/dummy/tmp/cache/sass/0db19bf6a4f34e09dc67d80432c747832dda1113/_buttons.scssc +0 -0
  163. data/test/dummy/tmp/cache/sass/0db19bf6a4f34e09dc67d80432c747832dda1113/_columns.scssc +0 -0
  164. data/test/dummy/tmp/cache/sass/0db19bf6a4f34e09dc67d80432c747832dda1113/_comments.css.scssc +0 -0
  165. data/test/dummy/tmp/cache/sass/0db19bf6a4f34e09dc67d80432c747832dda1113/_date_picker.css.scssc +0 -0
  166. data/test/dummy/tmp/cache/sass/0db19bf6a4f34e09dc67d80432c747832dda1113/_flash_messages.css.scssc +0 -0
  167. data/test/dummy/tmp/cache/sass/0db19bf6a4f34e09dc67d80432c747832dda1113/_grid.scssc +0 -0
  168. data/test/dummy/tmp/cache/sass/0db19bf6a4f34e09dc67d80432c747832dda1113/_links.scssc +0 -0
  169. data/test/dummy/tmp/cache/sass/0db19bf6a4f34e09dc67d80432c747832dda1113/_pagination.scssc +0 -0
  170. data/test/dummy/tmp/cache/sass/0db19bf6a4f34e09dc67d80432c747832dda1113/_panels.scssc +0 -0
  171. data/test/dummy/tmp/cache/sass/0db19bf6a4f34e09dc67d80432c747832dda1113/_popovers.css.scssc +0 -0
  172. data/test/dummy/tmp/cache/sass/0db19bf6a4f34e09dc67d80432c747832dda1113/_scopes.scssc +0 -0
  173. data/test/dummy/tmp/cache/sass/0db19bf6a4f34e09dc67d80432c747832dda1113/_status_tags.scssc +0 -0
  174. data/test/dummy/tmp/cache/sass/0db19bf6a4f34e09dc67d80432c747832dda1113/_table_tools.css.scssc +0 -0
  175. data/test/dummy/tmp/cache/sass/0db19bf6a4f34e09dc67d80432c747832dda1113/_tables.css.scssc +0 -0
  176. data/test/dummy/tmp/cache/sass/0f4e444537b0131df87c384df649d22afd80ac5a/_dashboard.scssc +0 -0
  177. data/test/dummy/tmp/cache/sass/0f4e444537b0131df87c384df649d22afd80ac5a/_logged_out.scssc +0 -0
  178. data/test/dummy/tmp/cache/sass/1c415517c309043503f3cb2f5eca65b0c9760f76/active_admin.css.scssc +0 -0
  179. data/test/dummy/tmp/cache/sass/34122bbb9d39040bce83b198dfa3e2499be58cd0/_bourbon.scssc +0 -0
  180. data/test/dummy/tmp/cache/sass/34df7e5f74ec615651dab1b9694e84563b724cb5/_base.css.scssc +0 -0
  181. data/test/dummy/tmp/cache/sass/34df7e5f74ec615651dab1b9694e84563b724cb5/_forms.css.scssc +0 -0
  182. data/test/dummy/tmp/cache/sass/34df7e5f74ec615651dab1b9694e84563b724cb5/_header.css.scssc +0 -0
  183. data/test/dummy/tmp/cache/sass/34df7e5f74ec615651dab1b9694e84563b724cb5/_mixins.css.scssc +0 -0
  184. data/test/dummy/tmp/cache/sass/34df7e5f74ec615651dab1b9694e84563b724cb5/_typography.css.scssc +0 -0
  185. data/test/dummy/tmp/cache/sass/4330ed9682443ec12b5cc9718d9ca0f970e72645/_base.css.scssc +0 -0
  186. data/test/dummy/tmp/cache/sass/4330ed9682443ec12b5cc9718d9ca0f970e72645/_forms.css.scssc +0 -0
  187. data/test/dummy/tmp/cache/sass/4330ed9682443ec12b5cc9718d9ca0f970e72645/_header.css.scssc +0 -0
  188. data/test/dummy/tmp/cache/sass/4330ed9682443ec12b5cc9718d9ca0f970e72645/_mixins.css.scssc +0 -0
  189. data/test/dummy/tmp/cache/sass/4330ed9682443ec12b5cc9718d9ca0f970e72645/_typography.css.scssc +0 -0
  190. data/test/dummy/tmp/cache/sass/4330ed9682443ec12b5cc9718d9ca0f970e72645/print.css.scssc +0 -0
  191. data/test/dummy/tmp/cache/sass/521b993c9acd187272527f2007471941399e49e7/_button.scssc +0 -0
  192. data/test/dummy/tmp/cache/sass/521b993c9acd187272527f2007471941399e49e7/_clearfix.scssc +0 -0
  193. data/test/dummy/tmp/cache/sass/521b993c9acd187272527f2007471941399e49e7/_font-face.scssc +0 -0
  194. data/test/dummy/tmp/cache/sass/521b993c9acd187272527f2007471941399e49e7/_font-family.scssc +0 -0
  195. data/test/dummy/tmp/cache/sass/521b993c9acd187272527f2007471941399e49e7/_hide-text.scssc +0 -0
  196. data/test/dummy/tmp/cache/sass/521b993c9acd187272527f2007471941399e49e7/_html5-input-types.scssc +0 -0
  197. data/test/dummy/tmp/cache/sass/521b993c9acd187272527f2007471941399e49e7/_position.scssc +0 -0
  198. data/test/dummy/tmp/cache/sass/521b993c9acd187272527f2007471941399e49e7/_timing-functions.scssc +0 -0
  199. data/test/dummy/tmp/cache/sass/5a8f06dfcf99c0436939674b51a4e9800b2066e8/_footer.scssc +0 -0
  200. data/test/dummy/tmp/cache/sass/5a8f06dfcf99c0436939674b51a4e9800b2066e8/_main_structure.scssc +0 -0
  201. data/test/dummy/tmp/cache/sass/5a8f06dfcf99c0436939674b51a4e9800b2066e8/_title_bar.scssc +0 -0
  202. data/test/dummy/tmp/cache/sass/686dc179041c7d3a972dc3ec33726e7ae1e4ab05/_animation.scssc +0 -0
  203. data/test/dummy/tmp/cache/sass/686dc179041c7d3a972dc3ec33726e7ae1e4ab05/_appearance.scssc +0 -0
  204. data/test/dummy/tmp/cache/sass/686dc179041c7d3a972dc3ec33726e7ae1e4ab05/_background-image.scssc +0 -0
  205. data/test/dummy/tmp/cache/sass/686dc179041c7d3a972dc3ec33726e7ae1e4ab05/_background-size.scssc +0 -0
  206. data/test/dummy/tmp/cache/sass/686dc179041c7d3a972dc3ec33726e7ae1e4ab05/_border-image.scssc +0 -0
  207. data/test/dummy/tmp/cache/sass/686dc179041c7d3a972dc3ec33726e7ae1e4ab05/_border-radius.scssc +0 -0
  208. data/test/dummy/tmp/cache/sass/686dc179041c7d3a972dc3ec33726e7ae1e4ab05/_box-shadow.scssc +0 -0
  209. data/test/dummy/tmp/cache/sass/686dc179041c7d3a972dc3ec33726e7ae1e4ab05/_box-sizing.scssc +0 -0
  210. data/test/dummy/tmp/cache/sass/686dc179041c7d3a972dc3ec33726e7ae1e4ab05/_columns.scssc +0 -0
  211. data/test/dummy/tmp/cache/sass/686dc179041c7d3a972dc3ec33726e7ae1e4ab05/_flex-box.scssc +0 -0
  212. data/test/dummy/tmp/cache/sass/686dc179041c7d3a972dc3ec33726e7ae1e4ab05/_inline-block.scssc +0 -0
  213. data/test/dummy/tmp/cache/sass/686dc179041c7d3a972dc3ec33726e7ae1e4ab05/_linear-gradient.scssc +0 -0
  214. data/test/dummy/tmp/cache/sass/686dc179041c7d3a972dc3ec33726e7ae1e4ab05/_prefixer.scssc +0 -0
  215. data/test/dummy/tmp/cache/sass/686dc179041c7d3a972dc3ec33726e7ae1e4ab05/_radial-gradient.scssc +0 -0
  216. data/test/dummy/tmp/cache/sass/686dc179041c7d3a972dc3ec33726e7ae1e4ab05/_transform.scssc +0 -0
  217. data/test/dummy/tmp/cache/sass/686dc179041c7d3a972dc3ec33726e7ae1e4ab05/_transition.scssc +0 -0
  218. data/test/dummy/tmp/cache/sass/686dc179041c7d3a972dc3ec33726e7ae1e4ab05/_user-select.scssc +0 -0
  219. data/test/dummy/tmp/cache/sass/799f94dffbb29370035dd8035c06b45b72790fc5/_blank_slates.scssc +0 -0
  220. data/test/dummy/tmp/cache/sass/799f94dffbb29370035dd8035c06b45b72790fc5/_breadcrumbs.scssc +0 -0
  221. data/test/dummy/tmp/cache/sass/799f94dffbb29370035dd8035c06b45b72790fc5/_buttons.scssc +0 -0
  222. data/test/dummy/tmp/cache/sass/799f94dffbb29370035dd8035c06b45b72790fc5/_columns.scssc +0 -0
  223. data/test/dummy/tmp/cache/sass/799f94dffbb29370035dd8035c06b45b72790fc5/_comments.css.scssc +0 -0
  224. data/test/dummy/tmp/cache/sass/799f94dffbb29370035dd8035c06b45b72790fc5/_date_picker.css.scssc +0 -0
  225. data/test/dummy/tmp/cache/sass/799f94dffbb29370035dd8035c06b45b72790fc5/_flash_messages.css.scssc +0 -0
  226. data/test/dummy/tmp/cache/sass/799f94dffbb29370035dd8035c06b45b72790fc5/_grid.scssc +0 -0
  227. data/test/dummy/tmp/cache/sass/799f94dffbb29370035dd8035c06b45b72790fc5/_links.scssc +0 -0
  228. data/test/dummy/tmp/cache/sass/799f94dffbb29370035dd8035c06b45b72790fc5/_pagination.scssc +0 -0
  229. data/test/dummy/tmp/cache/sass/799f94dffbb29370035dd8035c06b45b72790fc5/_panels.scssc +0 -0
  230. data/test/dummy/tmp/cache/sass/799f94dffbb29370035dd8035c06b45b72790fc5/_scopes.scssc +0 -0
  231. data/test/dummy/tmp/cache/sass/799f94dffbb29370035dd8035c06b45b72790fc5/_status_tags.scssc +0 -0
  232. data/test/dummy/tmp/cache/sass/799f94dffbb29370035dd8035c06b45b72790fc5/_table_tools.css.scssc +0 -0
  233. data/test/dummy/tmp/cache/sass/799f94dffbb29370035dd8035c06b45b72790fc5/_tables.css.scssc +0 -0
  234. data/test/dummy/tmp/cache/sass/972efe55173f6628b13c5cb56b5b0f9b84985155/_deprecated-webkit-gradient.scssc +0 -0
  235. data/test/dummy/tmp/cache/sass/972efe55173f6628b13c5cb56b5b0f9b84985155/_flex-grid.scssc +0 -0
  236. data/test/dummy/tmp/cache/sass/972efe55173f6628b13c5cb56b5b0f9b84985155/_grid-width.scssc +0 -0
  237. data/test/dummy/tmp/cache/sass/972efe55173f6628b13c5cb56b5b0f9b84985155/_linear-gradient.scssc +0 -0
  238. data/test/dummy/tmp/cache/sass/972efe55173f6628b13c5cb56b5b0f9b84985155/_modular-scale.scssc +0 -0
  239. data/test/dummy/tmp/cache/sass/972efe55173f6628b13c5cb56b5b0f9b84985155/_radial-gradient.scssc +0 -0
  240. data/test/dummy/tmp/cache/sass/972efe55173f6628b13c5cb56b5b0f9b84985155/_render-gradients.scssc +0 -0
  241. data/test/dummy/tmp/cache/sass/972efe55173f6628b13c5cb56b5b0f9b84985155/_tint-shade.scssc +0 -0
  242. data/test/dummy/tmp/cache/sass/a6e19f0ba7c994b5cd1f8fcd2ef7cb5a62017be7/_bourbon.scssc +0 -0
  243. data/test/dummy/tmp/cache/sass/a86a1245039dd9da2b0a1422db19889ca592daee/_footer.scssc +0 -0
  244. data/test/dummy/tmp/cache/sass/a86a1245039dd9da2b0a1422db19889ca592daee/_main_structure.scssc +0 -0
  245. data/test/dummy/tmp/cache/sass/a86a1245039dd9da2b0a1422db19889ca592daee/_title_bar.scssc +0 -0
  246. data/test/dummy/tmp/cache/sass/c572ddc25b7a57596b711c26460dab735895a907/_animation.scssc +0 -0
  247. data/test/dummy/tmp/cache/sass/c572ddc25b7a57596b711c26460dab735895a907/_appearance.scssc +0 -0
  248. data/test/dummy/tmp/cache/sass/c572ddc25b7a57596b711c26460dab735895a907/_background-image.scssc +0 -0
  249. data/test/dummy/tmp/cache/sass/c572ddc25b7a57596b711c26460dab735895a907/_background-size.scssc +0 -0
  250. data/test/dummy/tmp/cache/sass/c572ddc25b7a57596b711c26460dab735895a907/_border-image.scssc +0 -0
  251. data/test/dummy/tmp/cache/sass/c572ddc25b7a57596b711c26460dab735895a907/_border-radius.scssc +0 -0
  252. data/test/dummy/tmp/cache/sass/c572ddc25b7a57596b711c26460dab735895a907/_box-shadow.scssc +0 -0
  253. data/test/dummy/tmp/cache/sass/c572ddc25b7a57596b711c26460dab735895a907/_box-sizing.scssc +0 -0
  254. data/test/dummy/tmp/cache/sass/c572ddc25b7a57596b711c26460dab735895a907/_columns.scssc +0 -0
  255. data/test/dummy/tmp/cache/sass/c572ddc25b7a57596b711c26460dab735895a907/_flex-box.scssc +0 -0
  256. data/test/dummy/tmp/cache/sass/c572ddc25b7a57596b711c26460dab735895a907/_inline-block.scssc +0 -0
  257. data/test/dummy/tmp/cache/sass/c572ddc25b7a57596b711c26460dab735895a907/_linear-gradient.scssc +0 -0
  258. data/test/dummy/tmp/cache/sass/c572ddc25b7a57596b711c26460dab735895a907/_radial-gradient.scssc +0 -0
  259. data/test/dummy/tmp/cache/sass/c572ddc25b7a57596b711c26460dab735895a907/_transform.scssc +0 -0
  260. data/test/dummy/tmp/cache/sass/c572ddc25b7a57596b711c26460dab735895a907/_transition.scssc +0 -0
  261. data/test/dummy/tmp/cache/sass/c572ddc25b7a57596b711c26460dab735895a907/_user-select.scssc +0 -0
  262. data/test/dummy/tmp/cache/sass/eab4ec523f2b3fe0ce62881e5ddde80ea26c42ed/_deprecated-webkit-gradient.scssc +0 -0
  263. data/test/dummy/tmp/cache/sass/eab4ec523f2b3fe0ce62881e5ddde80ea26c42ed/_flex-grid.scssc +0 -0
  264. data/test/dummy/tmp/cache/sass/eab4ec523f2b3fe0ce62881e5ddde80ea26c42ed/_grid-width.scssc +0 -0
  265. data/test/dummy/tmp/cache/sass/eab4ec523f2b3fe0ce62881e5ddde80ea26c42ed/_linear-gradient.scssc +0 -0
  266. data/test/dummy/tmp/cache/sass/eab4ec523f2b3fe0ce62881e5ddde80ea26c42ed/_modular-scale.scssc +0 -0
  267. data/test/dummy/tmp/cache/sass/eab4ec523f2b3fe0ce62881e5ddde80ea26c42ed/_radial-gradient.scssc +0 -0
  268. data/test/dummy/tmp/cache/sass/eab4ec523f2b3fe0ce62881e5ddde80ea26c42ed/_render-gradients.scssc +0 -0
  269. data/test/dummy/tmp/cache/sass/eab4ec523f2b3fe0ce62881e5ddde80ea26c42ed/_tint-shade.scssc +0 -0
  270. data/test/dummy/tmp/cache/sass/eab4ec523f2b3fe0ce62881e5ddde80ea26c42ed/_transition-property-name.scssc +0 -0
  271. data/test/dummy/tmp/cache/sass/ecba858b902d0403d7e616a9f9672a7729dd00f2/_button.scssc +0 -0
  272. data/test/dummy/tmp/cache/sass/ecba858b902d0403d7e616a9f9672a7729dd00f2/_clearfix.scssc +0 -0
  273. data/test/dummy/tmp/cache/sass/ecba858b902d0403d7e616a9f9672a7729dd00f2/_font-family.scssc +0 -0
  274. data/test/dummy/tmp/cache/sass/ecba858b902d0403d7e616a9f9672a7729dd00f2/_html5-input-types.scssc +0 -0
  275. data/test/dummy/tmp/cache/sass/ecba858b902d0403d7e616a9f9672a7729dd00f2/_position.scssc +0 -0
  276. data/test/dummy/tmp/cache/sass/ecba858b902d0403d7e616a9f9672a7729dd00f2/_timing-functions.scssc +0 -0
  277. data/test/dummy/tmp/pids/server.pid +1 -0
  278. data/test/ecm_cms_core_test.rb +7 -0
  279. data/test/test_helper.rb +15 -0
  280. metadata +669 -0
@@ -0,0 +1,5 @@
1
+ module Ecm
2
+ module CmsCore
3
+ VERSION = "0.0.2"
4
+ end
5
+ end
@@ -0,0 +1,13 @@
1
+ require 'rubygems'
2
+
3
+ require 'awesome_nested_set'
4
+ require 'i18n_routing'
5
+ require 'texterb'
6
+
7
+ # Ecm::Admin should do this!
8
+ require 'activeadmin'
9
+ require 'sass-rails'
10
+ require 'meta_search'
11
+
12
+ require 'ecm/cms_core/engine'
13
+ require 'ecm/cms_core/version'
@@ -0,0 +1,16 @@
1
+ module Ecm
2
+ module CmsCore
3
+ module Generators
4
+ class ActiveAdminGenerator < Rails::Generators::Base
5
+ desc "Generates the active admin files"
6
+
7
+ source_root File.expand_path('../templates', __FILE__)
8
+
9
+ def generate_models
10
+ copy_file "folders.rb", "app/admin/ecm/cms_core/folders.rb"
11
+ copy_file "templates.rb", "app/admin/ecm/cms_core/templates.rb"
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,44 @@
1
+ include CollectiveIdea::Acts::NestedSet::Helper
2
+
3
+ ActiveAdmin.register Ecm::CmsCore::Folder do
4
+ scope :all
5
+ scope :root_folders
6
+
7
+ menu :label => Ecm::CmsCore::Folder.model_name.human(:count => 10)
8
+
9
+ form do |f|
10
+ f.inputs do
11
+ f.input :parent, :as => :select, :collection => nested_set_options(Ecm::CmsCore::Folder, f.object) { |i| "#{'&#160;&#160;&#160;&#160;' * i.level} |--#{i.basename}".html_safe }
12
+ f.input :basename
13
+ end
14
+ f.buttons
15
+ end
16
+
17
+ index :title => Ecm::CmsCore::Folder.model_name.human(:count => 10) do
18
+ column :tree_label, :sortable => false
19
+ column :templates_count
20
+ column :created_at
21
+ column :updated_at
22
+
23
+ default_actions
24
+ end
25
+
26
+ show :title => :to_s do |folder|
27
+ attributes_table do
28
+ row :parent
29
+ row :basename
30
+ end
31
+
32
+ panel Ecm::CmsCore::Template.model_name.human(:count => 10) do
33
+ table_for folder.templates do
34
+ column Ecm::CmsCore::Template.human_attribute_name(:filename), :filename
35
+ column Ecm::CmsCore::Template.human_attribute_name(:partial), :formatted_partial_flag
36
+ column Ecm::CmsCore::Template.human_attribute_name(:created_at), :created_at
37
+ column Ecm::CmsCore::Template.human_attribute_name(:updated_at), :updated_at
38
+ column do |template|
39
+ link_to I18n.t('active_admin.view'), admin_template_path(template), :class => "member_link view_link"
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,52 @@
1
+ ActiveAdmin.register Ecm::CmsCore::Template do
2
+ menu :label => Ecm::CmsCore::Template.model_name.human(:count => 10)
3
+
4
+ scope :all
5
+ scope :templates
6
+ scope :partials
7
+
8
+
9
+ form do |f|
10
+ f.inputs do
11
+ f.input :folder, :as => :select, :collection => nested_set_options(Ecm::CmsCore::Folder) { |i| "#{'&#160;&#160;&#160;&#160;' * i.level} |--#{i.basename}".html_safe }
12
+ f.input :basename
13
+ f.input :title
14
+ f.input :meta_description
15
+ f.input :body
16
+ f.input :layout
17
+ f.input :locale, :as => :select, :collection => I18n.available_locales.map(&:to_s)
18
+ f.input :format, :as => :select, :collection => Mime::SET.symbols.map(&:to_s)
19
+ f.input :handler, :as => :select, :collection => ActionView::Template::Handlers.extensions.map(&:to_s)
20
+ f.input :partial
21
+ end
22
+ f.buttons
23
+ end
24
+
25
+ index :title => Ecm::CmsCore::Template.model_name.human(:count => 10) do
26
+ column :folder, :sortable => :pathname
27
+ column :filename, :sortable => :basename
28
+ column :formatted_partial_flag, :sortable => :partial
29
+ column :created_at
30
+ column :updated_at
31
+
32
+ default_actions
33
+ end
34
+
35
+ show :title => :to_s do
36
+ attributes_table do
37
+ row :folder
38
+ row :filename
39
+ row :title
40
+ row :meta_description
41
+ row :formatted_partial_flag
42
+ row :created_at
43
+ row :updated_at
44
+ end
45
+
46
+ panel Ecm::CmsCore::Template.human_attribute_name(:body) do
47
+ div do
48
+ t(ecm_cms_core_template.body).html_safe
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,15 @@
1
+ module Ecm
2
+ module CmsCore
3
+ module Generators
4
+ class ControllerGenerator < Rails::Generators::Base
5
+ desc "Generates the pages controller"
6
+
7
+ source_root File.expand_path('../templates', __FILE__)
8
+
9
+ def generate_controller
10
+ copy_file "page_controller.rb", "app/controllers/page_controller.rb"
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,3 @@
1
+ class PageController < Ecm::CmsCore::PageController
2
+ layout 'application'
3
+ end
@@ -0,0 +1,34 @@
1
+ module Ecm
2
+ module CmsCore
3
+ module Generators
4
+ class InstallGenerator < ::Rails::Generators::Base
5
+ desc "Installs the ECM CMS Core module"
6
+ # class_option :skip_migration, :default => false
7
+ class_option :skip_migration, :type => :boolean, :default => false
8
+
9
+ def generate_migrations
10
+ unless options[:skip_migration]
11
+ generate 'ecm:cms_core:migrations'
12
+ end
13
+ end
14
+
15
+ # def generate_models
16
+ # generate 'ecm:cms_core:models'
17
+ # end
18
+
19
+ def generate_controller
20
+ generate 'ecm:cms_core:controller'
21
+ end
22
+
23
+ def generate_locales
24
+ generate 'ecm:cms_core:locales'
25
+ end
26
+
27
+ def generate_active_admin
28
+ generate 'ecm:cms_core:active_admin'
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+
@@ -0,0 +1,17 @@
1
+ module Ecm
2
+ module CmsCore
3
+ module Generators
4
+ class LocalesGenerator < ::Rails::Generators::Base
5
+ source_root File.expand_path('../templates', __FILE__)
6
+ desc "Installs the needed locales"
7
+
8
+
9
+ def generate_locales
10
+ copy_file "ecm.cms-core.en.yml", "config/locales/ecm.cms-core.en.yml"
11
+ copy_file "ecm.cms-core.de.yml", "config/locales/ecm.cms-core.de.yml"
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+
@@ -0,0 +1,48 @@
1
+ de:
2
+ :false: "nein"
3
+ :true: "ja"
4
+ active_admin:
5
+ scopes:
6
+ all: "Alle"
7
+ templates: "Seiten"
8
+ root_folders: "Wurzelordner"
9
+ partials: "Fragmente"
10
+ activerecord:
11
+ attributes:
12
+ ecm/cms_core/folder:
13
+ basename: "Name"
14
+ parent: "Übergeordneter Ordner"
15
+ pathname: "Pfad"
16
+ templates_count: "Seiten"
17
+ tree_label: "Pfad"
18
+ ecm/cms_core/template:
19
+ basename: "Name"
20
+ body: "Inhalt"
21
+ layout: "Layout"
22
+ locale: "Sprache"
23
+ filename: "Dateiname"
24
+ folder: "Ordner"
25
+ formatted_partial_flag: "Fragment"
26
+ format: "Format"
27
+ handler: "Handler"
28
+ meta_description: "Meta Description"
29
+ partial: "Fragment"
30
+ pathname: "Pfad"
31
+ title: "Titel"
32
+ models:
33
+ ecm/cms_core/folder:
34
+ one: "Ordner"
35
+ other: "Ordner"
36
+ ecm/cms_core/template:
37
+ one: "Seite"
38
+ other: "Seiten"
39
+ attributes:
40
+ created_at: "Erstellt"
41
+ updated_at: "Aktualisiert"
42
+ formtastic:
43
+ :yes: 'Ja'
44
+ :no: 'Nein'
45
+ :create: '%{model} erstellen'
46
+ :update: '%{model} aktualisieren'
47
+ :submit: '%{model} speichern'
48
+ :required: 'benötigt'
@@ -0,0 +1,48 @@
1
+ en:
2
+ :false: "nein"
3
+ :true: "ja"
4
+ active_admin:
5
+ scopes:
6
+ all: "All"
7
+ templates: "Templates"
8
+ root_folders: "Root folders"
9
+ partials: "Partials"
10
+ activerecord:
11
+ attributes:
12
+ ecm/cms_core/folder:
13
+ basename: "Name"
14
+ parent: "Parent Folder"
15
+ pathname: "Path"
16
+ templates_count: "Pages"
17
+ tree_label: "Path"
18
+ ecm/cms_core/template:
19
+ basename: "Name"
20
+ body: "Content"
21
+ layout: "Layout"
22
+ locale: "Language"
23
+ filename: "Filename"
24
+ folder: "Folder"
25
+ formatted_partial_flag: "Partial"
26
+ format: "Format"
27
+ handler: "Handler"
28
+ meta_description: "Meta Description"
29
+ partial: "Partial"
30
+ pathname: "Path"
31
+ title: "Title"
32
+ models:
33
+ ecm/cms_core/folder:
34
+ one: "Folder"
35
+ other: "Folders"
36
+ ecm/cms_core/template:
37
+ one: "Page"
38
+ other: "Pages"
39
+ attributes:
40
+ created_at: "Created"
41
+ updated_at: "Updated"
42
+ formtastic:
43
+ :yes: 'Yes'
44
+ :no: 'No'
45
+ :create: 'create %{model}'
46
+ :update: 'update %{model}'
47
+ :submit: 'submit %{model}'
48
+ :required: 'required'
@@ -0,0 +1,28 @@
1
+ require 'rails/generators/migration'
2
+
3
+ module Ecm
4
+ module CmsCore
5
+ module Generators
6
+ class MigrationsGenerator < ::Rails::Generators::Base
7
+ include Rails::Generators::Migration
8
+ source_root File.expand_path('../templates', __FILE__)
9
+ desc "Installs the needed migrations"
10
+
11
+ def self.next_migration_number(path)
12
+ unless @prev_migration_nr
13
+ @prev_migration_nr = Time.now.utc.strftime("%Y%m%d%H%M%S").to_i
14
+ else
15
+ @prev_migration_nr += 1
16
+ end
17
+ @prev_migration_nr.to_s
18
+ end
19
+
20
+ def copy_migrations
21
+ migration_template "create_ecm_cms_core_folders.rb", "db/migrate/create_ecm_cms_core_folders.rb"
22
+ migration_template "create_ecm_cms_core_templates.rb", "db/migrate/create_ecm_cms_core_templates.rb"
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+
@@ -0,0 +1,20 @@
1
+ class CreateEcmCmsCoreFolders < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :ecm_cms_core_folders do |t|
4
+ t.references :parent
5
+ t.string :basename
6
+ t.string :pathname
7
+ t.integer :lft
8
+ t.integer :rgt
9
+ t.integer :depth
10
+ t.integer :children_count, :default => 0
11
+ t.integer :templates_count, :default => 0
12
+
13
+ t.timestamps
14
+ end
15
+ end
16
+
17
+ def self.down
18
+ drop_table :ecm_cms_core_folders
19
+ end
20
+ end
@@ -0,0 +1,23 @@
1
+ class CreateEcmCmsCoreTemplates < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :ecm_cms_core_templates do |t|
4
+ t.references :folder
5
+ t.string :pathname
6
+ t.string :basename
7
+ t.string :title
8
+ t.text :meta_description
9
+ t.text :body
10
+ t.string :layout
11
+ t.string :locale
12
+ t.string :format
13
+ t.string :handler
14
+ t.boolean :partial, :default => false
15
+
16
+ t.timestamps
17
+ end
18
+ end
19
+
20
+ def self.down
21
+ drop_table :ecm_cms_core_templates
22
+ end
23
+ end
@@ -0,0 +1,16 @@
1
+ module Ecm
2
+ module CmsCore
3
+ module Generators
4
+ class ModelsGenerator < Rails::Generators::Base
5
+ desc "Generates the models"
6
+
7
+ source_root File.expand_path('../templates', __FILE__)
8
+
9
+ def generate_models
10
+ copy_file "folder.rb", "app/models/folder.rb"
11
+ copy_file "template.rb", "app/models/template.rb"
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,58 @@
1
+ class Folder < ActiveRecord::Base
2
+ has_many :templates, :dependent => :destroy
3
+
4
+ validates :basename, :presence => true, :uniqueness => { :scope => :parent_id }
5
+
6
+ acts_as_nested_set :depth_column => 'depth', :counter_cache => :children_count
7
+ attr_protected :lft, :rgt
8
+
9
+ before_validation :update_path
10
+ after_save :update_children, :if => Proc.new { |folder| folder.pathname_changed? or folder.basename_changed? }
11
+ after_save :update_templates, :if => Proc.new { |folder| folder.pathname_changed? or folder.basename_changed? }
12
+
13
+ default_scope order(:lft)
14
+
15
+ def to_s
16
+ self.fullname
17
+ # self.tree_label
18
+ end
19
+
20
+ def tree_label
21
+ "#{'&#160;&#160;&#160;&#160;' * self.level} |--#{self.basename}".html_safe
22
+ end
23
+
24
+ def fullname
25
+ if self.basename == "/"
26
+ "/"
27
+ else
28
+ "#{self.pathname}#{self.basename}/"
29
+ end
30
+ end
31
+
32
+ def update_path
33
+ if self.parent
34
+ self.pathname = self.parent.fullname
35
+ end
36
+ end
37
+
38
+ def update_path!
39
+ self.update_path
40
+ self.save
41
+ end
42
+
43
+ def update_children
44
+ self.children.each do |folder|
45
+ folder.update_path!
46
+ end
47
+ end
48
+
49
+ def update_templates
50
+ self.templates.each do |template|
51
+ template.update_pathname!
52
+ end
53
+ end
54
+
55
+ def self.root_folders
56
+ self.roots
57
+ end
58
+ end
@@ -0,0 +1,127 @@
1
+ class Template < ActiveRecord::Base
2
+ belongs_to :folder, :counter_cache => true
3
+
4
+ validates :pathname, :presence => true
5
+ validates :basename, :presence => true, :uniqueness => { :scope => :folder_id }
6
+ validates :format, :inclusion => Mime::SET.symbols.map(&:to_s), :allow_nil => true, :allow_blank => true
7
+ validates :locale, :inclusion => I18n.available_locales.map(&:to_s)
8
+ validates :handler, :inclusion => ActionView::Template::Handlers.extensions.map(&:to_s)
9
+
10
+ before_validation :update_pathname
11
+
12
+ def update_pathname
13
+ self.pathname = self.folder.fullname
14
+ end
15
+
16
+ def update_pathname!
17
+ self.update_pathname
18
+ self.save
19
+ end
20
+
21
+ after_save do
22
+ Resolver.instance.clear_cache
23
+ end
24
+
25
+ def self.partials
26
+ where("partial = ?", true)
27
+ end
28
+
29
+ def self.templates
30
+ where("partial = ?", false)
31
+ end
32
+
33
+ def filename
34
+ if format.blank?
35
+ "#{basename}.#{locale}.#{handler}"
36
+ else
37
+ "#{basename}.#{locale}.#{format}.#{handler}"
38
+ end
39
+ end
40
+
41
+ def formatted_partial_flag
42
+ I18n.t(self.partial.to_s)
43
+ end
44
+
45
+ def to_s
46
+ "#{self.pathname}#{self.basename}"
47
+ end
48
+
49
+ class Resolver < ActionView::Resolver
50
+ require "singleton"
51
+ include Singleton
52
+
53
+ def find_templates(name, prefix, partial, details)
54
+ if prefix.length > 0
55
+ pathname = "#{normalize_array(details[:locale]).first}/#{prefix}/"
56
+ else
57
+ pathname = "#{normalize_array(details[:locale]).first}/"
58
+ end
59
+ conditions = {
60
+ # :pathname => normalize_path(name, prefix),
61
+ :pathname => pathname,
62
+ :basename => name,
63
+ :locale => normalize_array(details[:locale]).first,
64
+ :format => normalize_array(details[:formats]).first,
65
+ :handler => normalize_array(details[:handlers]),
66
+ :partial => partial || false
67
+ }
68
+
69
+ format = conditions.delete(:format)
70
+ query = ::Template.where(conditions)
71
+
72
+ # 2) Check for templates with the given format or format is nil
73
+ query = query.where(["format = ? OR format = ''", format])
74
+
75
+ # 3) Ensure templates with format come first
76
+ query = query.order("format DESC")
77
+
78
+ # 4) Now trigger the query passing on conditions to initialization
79
+ query.map do |record|
80
+ initialize_template(record, details)
81
+ end
82
+ end
83
+
84
+ # Normalize name and prefix, so the tuple ["index", "users"] becomes
85
+ # "users/index" and the tuple ["template", nil] becomes "template".
86
+ def normalize_path(name, prefix)
87
+ prefix.present? ? "#{prefix}/#{name}" : name
88
+ end
89
+
90
+ # Normalize arrays by converting all symbols to strings.
91
+ def normalize_array(array)
92
+ array.map(&:to_s)
93
+ end
94
+
95
+ # Initialize an ActionView::Template object based on the record found.
96
+ def initialize_template(record, details)
97
+ source = record.body
98
+ identifier = "Template - #{record.id} - #{record.pathname.inspect}"
99
+ handler = ActionView::Template.registered_template_handler(record.handler)
100
+
101
+ # 5) Check for the record.format, if none is given, try the template
102
+ # handler format and fallback to the one given on conditions
103
+ format = record.format && Mime[record.format]
104
+ format ||= handler.default_format if handler.respond_to?(:default_format)
105
+ format ||= details[:formats]
106
+
107
+ details = {
108
+ :format => format,
109
+ :updated_at => record.updated_at,
110
+ :virtual_path => virtual_path(record.pathname, record.partial)
111
+ }
112
+
113
+ ActionView::Template.new(source, identifier, handler, details)
114
+ end
115
+
116
+ # Make paths as "users/user" become "users/_user" for partials.
117
+ def virtual_path(path, partial)
118
+ return path unless partial
119
+ if index = path.rindex("/")
120
+ path.insert(index + 1, "_")
121
+ else
122
+ "_#{path}"
123
+ end
124
+ end
125
+ end
126
+ end
127
+
@@ -0,0 +1,18 @@
1
+ module Ecm
2
+ module CmsCore
3
+ module Generators
4
+ class RoutesGenerator < Rails::Generators::Base
5
+ desc "Generates the routes"
6
+
7
+ source_root File.expand_path('../templates', __FILE__)
8
+
9
+ def generate_routes
10
+ inject_into_file "config/routes.rb" , :before => "\nend" do
11
+ File.read(File.join(File.dirname(__FILE__), 'templates', 'routes.rb'))
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+
@@ -0,0 +1,14 @@
1
+
2
+ # localized(I18n.available_locales, :verbose => true) do
3
+ # scope "/:i18n_locale", :constraints => {:i18n_locale => /#{I18n.available_locales.join('|')}/} do
4
+ #
5
+ # # match '/' => "page#respond", :page => '/home/index', :as => :root
6
+ # root :to => "home#index", :i18n_locale => I18n.locale, :to => "page#respond", :page => '/home/index'
7
+ # match "/*page", :to => "page#respond", :as => :page
8
+ # end
9
+ # end
10
+ # match "/", :to => redirect("/#{I18n.locale}")
11
+
12
+ match "/*page", :to => "page#respond", :as => :page
13
+ # match '/' => "page#respond", :page => 'home/index', :as => :root
14
+ root :to => "home#index", :to => "page#respond", :page => '/home/index'
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :ecm_cms_core do
3
+ # # Task goes here
4
+ # end