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
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2012 YOURNAME
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,3 @@
1
+ = EcmCmsCore
2
+
3
+ This project rocks and uses MIT-LICENSE.
data/Rakefile ADDED
@@ -0,0 +1,38 @@
1
+ #!/usr/bin/env rake
2
+ begin
3
+ require 'bundler/setup'
4
+ rescue LoadError
5
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
+ end
7
+ begin
8
+ require 'rdoc/task'
9
+ rescue LoadError
10
+ require 'rdoc/rdoc'
11
+ require 'rake/rdoctask'
12
+ RDoc::Task = Rake::RDocTask
13
+ end
14
+
15
+ RDoc::Task.new(:rdoc) do |rdoc|
16
+ rdoc.rdoc_dir = 'rdoc'
17
+ rdoc.title = 'EcmCmsCore'
18
+ rdoc.options << '--line-numbers'
19
+ rdoc.rdoc_files.include('README.rdoc')
20
+ rdoc.rdoc_files.include('lib/**/*.rb')
21
+ end
22
+
23
+
24
+
25
+
26
+ Bundler::GemHelper.install_tasks
27
+
28
+ require 'rake/testtask'
29
+
30
+ Rake::TestTask.new(:test) do |t|
31
+ t.libs << 'lib'
32
+ t.libs << 'test'
33
+ t.pattern = 'test/**/*_test.rb'
34
+ t.verbose = false
35
+ end
36
+
37
+
38
+ task :default => :test
@@ -0,0 +1,46 @@
1
+ include CollectiveIdea::Acts::NestedSet::Helper
2
+
3
+ if defined?(ActiveAdmin)
4
+ ActiveAdmin.register Ecm::CmsCore::Folder do
5
+ menu :label => Ecm::CmsCore::Folder.model_name.human(:count => 10), :parent => I18n.t('ecm.cms_core.active_admin.menu')
6
+
7
+ scope :all
8
+ scope :root_folders
9
+
10
+ form do |f|
11
+ f.inputs do
12
+ 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 }
13
+ f.input :basename
14
+ end
15
+ f.buttons
16
+ end
17
+
18
+ index :title => Ecm::CmsCore::Folder.model_name.human(:count => 10) do
19
+ column :tree_label, :sortable => false
20
+ column :templates_count
21
+ column :created_at
22
+ column :updated_at
23
+
24
+ default_actions
25
+ end
26
+
27
+ show :title => :to_s do |folder|
28
+ attributes_table do
29
+ row :parent
30
+ row :basename
31
+ end
32
+
33
+ panel Ecm::CmsCore::Template.model_name.human(:count => 10) do
34
+ table_for folder.templates do
35
+ column Ecm::CmsCore::Template.human_attribute_name(:filename), :filename
36
+ column Ecm::CmsCore::Template.human_attribute_name(:partial), :formatted_partial_flag
37
+ column Ecm::CmsCore::Template.human_attribute_name(:created_at), :created_at
38
+ column Ecm::CmsCore::Template.human_attribute_name(:updated_at), :updated_at
39
+ column do |template|
40
+ link_to I18n.t('active_admin.view'), admin_ecm_cms_core_template_path(template), :class => "member_link view_link"
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,57 @@
1
+ if defined?(ActiveAdmin)
2
+ ActiveAdmin.register Ecm::CmsCore::Template do
3
+ menu :label => Ecm::CmsCore::Template.model_name.human(:count => :other), :parent => I18n.t('ecm.cms_core.active_admin.menu')
4
+
5
+ scope :all
6
+ scope :templates
7
+ scope :partials
8
+
9
+
10
+ form do |f|
11
+ f.inputs do
12
+ f.input :folder, :as => :select, :collection => nested_set_options(Ecm::CmsCore::Folder) { |i| "#{'&#160;&#160;&#160;&#160;' * i.level} |--#{i.basename}".html_safe }
13
+ f.input :basename
14
+ f.input :title
15
+ f.input :meta_description
16
+ f.input :body
17
+ f.input :locale, :as => :select, :collection => I18n.available_locales.map(&:to_s)
18
+ end
19
+ # f.inputs I18n.t("active_admin.forms.sections.#{resource.class.to_s.tableize.gsub('::', '/')}.advanced") do
20
+ f.inputs :"ecm/cms_core/template.advanced" do
21
+ f.input :layout
22
+ f.input :format, :as => :select, :collection => Mime::SET.symbols.map(&:to_s)
23
+ f.input :handler, :as => :select, :collection => ActionView::Template::Handlers.extensions.map(&:to_s)
24
+ f.input :partial
25
+ end
26
+ f.buttons
27
+ end
28
+
29
+ index :title => Ecm::CmsCore::Template.model_name.human(:count => 10) do
30
+ column :folder, :sortable => :pathname
31
+ column :filename, :sortable => :basename
32
+ column :formatted_partial_flag, :sortable => :partial
33
+ column :created_at
34
+ column :updated_at
35
+
36
+ default_actions
37
+ end
38
+
39
+ show :title => :to_s do
40
+ attributes_table do
41
+ row :folder
42
+ row :filename
43
+ row :title
44
+ row :meta_description
45
+ row :formatted_partial_flag
46
+ row :created_at
47
+ row :updated_at
48
+ end
49
+
50
+ panel Ecm::CmsCore::Template.human_attribute_name(:body) do
51
+ div do
52
+ textilize(ecm_cms_core_template.body).html_safe
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,55 @@
1
+ module Ecm
2
+ module CmsCore
3
+ class PageController < ::FrontendController
4
+ include Ecm::CmsCoreHelper
5
+
6
+ append_view_path Template::Resolver.instance
7
+
8
+ def render_404
9
+ respond_to do |format|
10
+ format.html { render :file => "#{Rails.root}/public/404.html", :status => :not_found, :layout => nil }
11
+ format.xml { head :not_found }
12
+ format.any { head :not_found }
13
+ end
14
+ end
15
+
16
+ def respond
17
+ page, pathname, basename = extract_names_from_params
18
+
19
+ if template = Template.where(:pathname => pathname).where(:basename => basename).where(:locale => I18n.locale).first
20
+ @meta_description = template.meta_description
21
+ @title = template.title
22
+ layout = template.layout unless template.layout.nil?
23
+ end
24
+
25
+ begin
26
+ if layout.respond_to?(:length) && layout.length > 0
27
+ render :template => page, :layout => template.layout
28
+ else
29
+ render :template => page
30
+ end
31
+ rescue ActionView::MissingTemplate
32
+ render_404
33
+ end
34
+ return
35
+ end
36
+
37
+ def extract_names_from_params
38
+ page = params[:page]
39
+ page ||= "/home/index"
40
+ pathname = "#{I18n.locale}"
41
+
42
+ subpath = page.split("/").reverse.drop(1).reverse.join("/").sub(/(\/)+$/,'')
43
+ if subpath.length > 0
44
+ pathname << "#{subpath}"
45
+ end
46
+ pathname << '/' unless pathname.end_with?('/')
47
+ basename = page.split("/").last
48
+ logger.debug("pathname: #{pathname}")
49
+ logger.debug("basename: #{basename}")
50
+ return page, pathname, basename
51
+ end
52
+ end
53
+ end
54
+ end
55
+
@@ -0,0 +1,2 @@
1
+ class PageController < Ecm::CmsCore::PageController
2
+ end
@@ -0,0 +1,48 @@
1
+ module Ecm::CmsCoreHelper
2
+ def cms_body_classes
3
+ url_for().gsub("/", " ").strip!
4
+ end
5
+
6
+ def cms_page_stylesheets(namespace = nil)
7
+ output = ""
8
+ if namespace
9
+ namespace_string = "#{namespace}/"
10
+ else
11
+ namespace_string = ""
12
+ end
13
+ url_for().split("/").each do |path_part|
14
+ output << stylesheet_link_tag("#{namespace_string}#{path_part}.css", :media => 'screen') unless path_part.blank? || path_part.length == 1
15
+ end
16
+ output.html_safe
17
+ end
18
+
19
+ def cms_title(site_title = "Change me")
20
+ return "#{site_title} - #{@title}" if @title
21
+ site_title
22
+ end
23
+
24
+ def cms_meta_description
25
+ @meta_description
26
+ end
27
+
28
+ def render_fragment(name)
29
+ if controller_name == 'page'
30
+ page = (params[:page].nil?) ? "home" : params[:page]
31
+ else
32
+ page = request.fullpath.gsub(/\/#{I18n.locale}\//, '')
33
+ end
34
+
35
+ path = "#{name.to_s}/#{page}"
36
+ full_path = "#{I18n.locale}/#{path}"
37
+
38
+ begin
39
+ render path
40
+ rescue ActionView::MissingTemplate => e
41
+ if Rails.env.production?
42
+ return nil
43
+ else
44
+ return I18n.t("ecm.cms_core.warnings.missing_fragment", :name => full_path)
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,65 @@
1
+ module Ecm
2
+ module CmsCore
3
+ class Folder < ActiveRecord::Base
4
+ self.table_name = 'ecm_cms_core_folders'
5
+
6
+ has_many :templates, :dependent => :destroy
7
+
8
+ validates :basename, :presence => true, :uniqueness => { :scope => :parent_id }
9
+
10
+ acts_as_nested_set :depth_column => 'depth', :counter_cache => :children_count
11
+ attr_protected :lft, :rgt
12
+
13
+ before_validation :update_path
14
+ after_save :update_children, :if => Proc.new { |folder| folder.pathname_changed? or folder.basename_changed? }
15
+ after_save :update_templates, :if => Proc.new { |folder| folder.pathname_changed? or folder.basename_changed? }
16
+
17
+ default_scope order(:lft)
18
+
19
+ def to_s
20
+ self.fullname
21
+ # self.tree_label
22
+ end
23
+
24
+ def tree_label
25
+ "#{'&#160;&#160;&#160;&#160;' * self.level} |--#{self.basename}".html_safe
26
+ end
27
+
28
+ def fullname
29
+ if self.basename == "/"
30
+ "/"
31
+ else
32
+ "#{self.pathname}#{self.basename}/"
33
+ end
34
+ end
35
+
36
+ def update_path
37
+ if self.parent
38
+ self.pathname = self.parent.fullname
39
+ end
40
+ end
41
+
42
+ def update_path!
43
+ self.update_path
44
+ self.save
45
+ end
46
+
47
+ def update_children
48
+ self.children.each do |folder|
49
+ folder.update_path!
50
+ end
51
+ end
52
+
53
+ def update_templates
54
+ self.templates.each do |template|
55
+ template.update_pathname!
56
+ end
57
+ end
58
+
59
+ def self.root_folders
60
+ self.roots
61
+ end
62
+ end
63
+ end
64
+ end
65
+
@@ -0,0 +1,150 @@
1
+ module Ecm
2
+ module CmsCore
3
+ class Template < ActiveRecord::Base
4
+ self.table_name = 'ecm_cms_core_templates'
5
+
6
+ belongs_to :folder, :counter_cache => true
7
+
8
+ validates :pathname, :presence => true
9
+ validates :basename, :presence => true, :uniqueness => { :scope => :folder_id }
10
+ validates :format, :inclusion => ::Mime::SET.symbols.map(&:to_s), :allow_nil => true, :allow_blank => true
11
+ validates :locale, :inclusion => ::I18n.available_locales.map(&:to_s)
12
+ validates :handler, :inclusion => ::ActionView::Template::Handlers.extensions.map(&:to_s)
13
+
14
+ after_initialize :set_defaults
15
+
16
+ before_validation :update_pathname
17
+
18
+ attr_accessible :folder_id, :basename, :title, :meta_description, :body, :layout, :locale, :format, :handler, :partial
19
+
20
+ def set_defaults
21
+ unless self.persisted?
22
+ self.locale ||= I18n.default_locale
23
+ self.format ||= 'html'
24
+ self.handler ||= 'texterb'
25
+ end
26
+ end
27
+
28
+ def update_pathname
29
+ self.pathname = self.folder.fullname unless self.folder.blank?
30
+ end
31
+
32
+ def update_pathname!
33
+ self.update_pathname
34
+ self.save!
35
+ end
36
+
37
+ after_save do
38
+ Resolver.instance.clear_cache
39
+ end
40
+
41
+ def self.partials
42
+ where("partial = ?", true)
43
+ end
44
+
45
+ def self.templates
46
+ where("partial = ?", false)
47
+ end
48
+
49
+ def filename
50
+ if format.blank?
51
+ "#{basename}.#{locale}.#{handler}"
52
+ else
53
+ "#{basename}.#{locale}.#{format}.#{handler}"
54
+ end
55
+ end
56
+
57
+ def formatted_partial_flag
58
+ ::I18n.t(self.partial.to_s)
59
+ end
60
+
61
+ def to_s
62
+ "#{self.pathname}#{self.basename}"
63
+ end
64
+
65
+ class Resolver < ActionView::Resolver
66
+ require "singleton"
67
+ include Singleton
68
+
69
+ def find_templates(name, prefix, partial, details)
70
+ if prefix.length > 0
71
+ pathname = "#{normalize_array(details[:locale]).first}/#{prefix}/"
72
+ else
73
+ pathname = "#{normalize_array(details[:locale]).first}/"
74
+ end
75
+
76
+
77
+ # ActiveRecord::Base.logger.debug("prefix: #{prefix}")
78
+ ActiveRecord::Base.logger.debug("pathname: #{pathname}")
79
+ ActiveRecord::Base.logger.debug("basename: #{name}")
80
+
81
+ conditions = {
82
+ # :pathname => normalize_path(name, prefix),
83
+ :pathname => pathname,
84
+ :basename => name,
85
+ :locale => normalize_array(details[:locale]).first,
86
+ :format => normalize_array(details[:formats]).first,
87
+ :handler => normalize_array(details[:handlers]),
88
+ :partial => partial || false
89
+ }
90
+
91
+ format = conditions.delete(:format)
92
+ query = Ecm::CmsCore::Template.where(conditions)
93
+
94
+ # 2) Check for templates with the given format or format is nil
95
+ query = query.where(["format = ? OR format = ''", format])
96
+
97
+ # 3) Ensure templates with format come first
98
+ query = query.order("format DESC")
99
+
100
+ # 4) Now trigger the query passing on conditions to initialization
101
+ query.map do |record|
102
+ initialize_template(record, details)
103
+ end
104
+ end
105
+
106
+ # Normalize name and prefix, so the tuple ["index", "users"] becomes
107
+ # "users/index" and the tuple ["template", nil] becomes "template".
108
+ def normalize_path(name, prefix)
109
+ prefix.present? ? "#{prefix}/#{name}" : name
110
+ end
111
+
112
+ # Normalize arrays by converting all symbols to strings.
113
+ def normalize_array(array)
114
+ array.map(&:to_s)
115
+ end
116
+
117
+ # Initialize an ActionView::Template object based on the record found.
118
+ def initialize_template(record, details)
119
+ source = record.body
120
+ identifier = "Template - #{record.id} - #{record.pathname.inspect}"
121
+ handler = ::ActionView::Template.registered_template_handler(record.handler)
122
+
123
+ # 5) Check for the record.format, if none is given, try the template
124
+ # handler format and fallback to the one given on conditions
125
+ format = record.format && Mime[record.format]
126
+ format ||= handler.default_format if handler.respond_to?(:default_format)
127
+ format ||= details[:formats]
128
+
129
+ details = {
130
+ :format => format,
131
+ :updated_at => record.updated_at,
132
+ :virtual_path => virtual_path(record.pathname, record.partial)
133
+ }
134
+
135
+ ::ActionView::Template.new(source, identifier, handler, details)
136
+ end
137
+
138
+ # Make paths as "users/user" become "users/_user" for partials.
139
+ def virtual_path(path, partial)
140
+ return path unless partial
141
+ if index = path.rindex("/")
142
+ path.insert(index + 1, "_")
143
+ else
144
+ "_#{path}"
145
+ end
146
+ end
147
+ end
148
+ end
149
+ end
150
+ end
@@ -0,0 +1,22 @@
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
+ ecm:
11
+ cms_core:
12
+ active_admin:
13
+ menu: "CMS"
14
+ warnings:
15
+ missing_fragment: "Fehlendes Fragment: %{name}"
16
+ formtastic:
17
+ :yes: 'Ja'
18
+ :no: 'Nein'
19
+ :create: '%{model} erstellen'
20
+ :update: '%{model} aktualisieren'
21
+ :submit: '%{model} speichern'
22
+ :required: 'benötigt'
@@ -0,0 +1,22 @@
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
+ ecm:
11
+ cms_core:
12
+ active_admin:
13
+ menu: "CMS"
14
+ warnings:
15
+ missing_fragment: "Missing fragment: %{name}"
16
+ formtastic:
17
+ :yes: 'Yes'
18
+ :no: 'No'
19
+ :create: 'create %{model}'
20
+ :update: 'update %{model}'
21
+ :submit: 'submit %{model}'
22
+ :required: 'required'
@@ -0,0 +1,13 @@
1
+ de:
2
+ activerecord:
3
+ attributes:
4
+ ecm/cms_core/folder:
5
+ basename: "Name"
6
+ parent: "Übergeordneter Ordner"
7
+ pathname: "Pfad"
8
+ templates_count: "Seiten"
9
+ tree_label: "Pfad"
10
+ models:
11
+ ecm/cms_core/folder:
12
+ one: "Ordner"
13
+ other: "Ordner"
@@ -0,0 +1,13 @@
1
+ en:
2
+ activerecord:
3
+ attributes:
4
+ ecm/cms_core/folder:
5
+ basename: "Name"
6
+ parent: "Parent Folder"
7
+ pathname: "Path"
8
+ templates_count: "Pages"
9
+ tree_label: "Path"
10
+ models:
11
+ ecm/cms_core/folder:
12
+ one: "Folder"
13
+ other: "Folders"
@@ -0,0 +1,8 @@
1
+ de:
2
+ formtastic:
3
+ hints:
4
+ ecm/cms_core/template:
5
+ basename: "Wählen Sie einen eindeutigen Namen für ihre Seite."
6
+ titles:
7
+ ecm/cms_core/template:
8
+ advanced: "Erweiterte Einstellungen"
@@ -0,0 +1,21 @@
1
+ de:
2
+ activerecord:
3
+ attributes:
4
+ ecm/cms_core/template:
5
+ basename: "Name"
6
+ body: "Inhalt"
7
+ layout: "Layout"
8
+ locale: "Sprache"
9
+ filename: "Dateiname"
10
+ folder: "Ordner"
11
+ formatted_partial_flag: "Fragment"
12
+ format: "Format"
13
+ handler: "Handler"
14
+ meta_description: "Meta Description"
15
+ partial: "Fragment"
16
+ pathname: "Pfad"
17
+ title: "Titel"
18
+ models:
19
+ ecm/cms_core/template:
20
+ one: "Seite"
21
+ other: "Seiten"
@@ -0,0 +1,21 @@
1
+ en:
2
+ activerecord:
3
+ attributes:
4
+ ecm/cms_core/template:
5
+ basename: "Name"
6
+ body: "Content"
7
+ layout: "Layout"
8
+ locale: "Language"
9
+ filename: "Filename"
10
+ folder: "Folder"
11
+ formatted_partial_flag: "Partial"
12
+ format: "Format"
13
+ handler: "Handler"
14
+ meta_description: "Meta Description"
15
+ partial: "Partial"
16
+ pathname: "Path"
17
+ title: "Title"
18
+ models:
19
+ ecm/cms_core/template:
20
+ one: "Page"
21
+ other: "Pages"
@@ -0,0 +1,16 @@
1
+ class CreateEcmCmsCoreFolders < ActiveRecord::Migration
2
+ def change
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
+ end
@@ -0,0 +1,19 @@
1
+ class CreateEcmCmsCoreTemplates < ActiveRecord::Migration
2
+ def change
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
+ end
@@ -0,0 +1,25 @@
1
+ module Ecm
2
+ module CmsCore
3
+ class Engine < Rails::Engine
4
+ paths["config/locales"] << File.dirname(__FILE__) + '/../../../config/locales'
5
+
6
+ # Enabling assets precompiling under rails 3.1 or greater
7
+ if Rails.version >= '3.1'
8
+ initializer "ecm_pictures.asset_pipeline" do |app|
9
+ app.config.assets.precompile << 'ecm_cms_core.js'
10
+ app.config.assets.precompile << 'ecm_cms_core.css'
11
+ end
12
+ end
13
+
14
+ config.to_prepare do
15
+ ApplicationController.helper(Ecm::CmsCoreHelper)
16
+ end
17
+
18
+ initializer :ecm_pictures_engine do
19
+ ActiveAdmin.setup do |active_admin_config|
20
+ active_admin_config.load_paths += Dir[File.dirname(__FILE__) + '/../../../app/admin']
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end