ecm_cms_core 0.0.2

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