zen 0.2.8 → 0.3b

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 (422) hide show
  1. data/.gems +20 -0
  2. data/.mailmap +3 -2
  3. data/.rvmrc +1 -1
  4. data/.travis.yml +13 -2
  5. data/.yardopts +13 -0
  6. data/AUTHORS +1 -1
  7. data/README.md +115 -77
  8. data/Rakefile +6 -7
  9. data/bin/zen +12 -5
  10. data/guide/_static/categories/categories.png +0 -0
  11. data/guide/_static/categories/category_groups.png +0 -0
  12. data/guide/_static/categories/new_category.png +0 -0
  13. data/guide/_static/categories/new_category_group.png +0 -0
  14. data/guide/_static/comments/comments.png +0 -0
  15. data/guide/_static/comments/edit_comment.png +0 -0
  16. data/guide/_static/custom_fields/custom_field_groups.png +0 -0
  17. data/guide/_static/custom_fields/custom_field_types.png +0 -0
  18. data/guide/_static/custom_fields/custom_fields.png +0 -0
  19. data/guide/_static/custom_fields/edit_custom_field_general.png +0 -0
  20. data/guide/_static/custom_fields/edit_custom_field_group.png +0 -0
  21. data/guide/_static/custom_fields/edit_custom_field_settings.png +0 -0
  22. data/guide/_static/custom_fields/edit_custom_field_type.png +0 -0
  23. data/guide/_static/menus/edit_menu.png +0 -0
  24. data/guide/_static/menus/edit_menu_item.png +0 -0
  25. data/guide/_static/menus/menu_items.png +0 -0
  26. data/guide/_static/menus/menus.png +0 -0
  27. data/guide/_static/sections/edit_entry.png +0 -0
  28. data/guide/_static/sections/edit_entry_categories.png +0 -0
  29. data/guide/_static/sections/edit_entry_general.png +0 -0
  30. data/guide/_static/sections/edit_entry_meta.png +0 -0
  31. data/guide/_static/sections/edit_section_comments.png +0 -0
  32. data/guide/_static/sections/edit_section_general.png +0 -0
  33. data/guide/_static/sections/edit_section_groups.png +0 -0
  34. data/guide/_static/sections/entries.png +0 -0
  35. data/guide/_static/sections/sections.png +0 -0
  36. data/guide/_static/settings/overview_general.png +0 -0
  37. data/guide/_static/settings/overview_security.png +0 -0
  38. data/guide/_static/settings/overview_user.png +0 -0
  39. data/guide/_static/users/edit_user.png +0 -0
  40. data/guide/_static/users/edit_user_group.png +0 -0
  41. data/guide/_static/users/edit_user_group_permissions.png +0 -0
  42. data/guide/_static/users/edit_user_permissions.png +0 -0
  43. data/guide/_static/users/overview.png +0 -0
  44. data/guide/_static/users/user_groups_overview.png +0 -0
  45. data/guide/asset_management.md +117 -0
  46. data/{CHANGELOG.md → guide/changelog.md} +42 -0
  47. data/guide/css/common.css +20 -0
  48. data/guide/getting_started.md +61 -0
  49. data/guide/hacking.md +52 -0
  50. data/guide/installation.md +44 -0
  51. data/guide/javascript.md +352 -0
  52. data/lib/vendor/sequel_sluggable.rb +137 -0
  53. data/lib/yard/tags.rb +13 -0
  54. data/lib/zen.rb +148 -78
  55. data/lib/zen/asset_groups.rb +85 -0
  56. data/lib/zen/bin/create.rb +267 -56
  57. data/lib/zen/bin/default.rb +84 -0
  58. data/lib/zen/controller/admin_controller.rb +1 -82
  59. data/lib/zen/controller/base_controller.rb +9 -5
  60. data/lib/zen/controller/frontend_controller.rb +0 -1
  61. data/lib/zen/controller/main_controller.rb +30 -42
  62. data/lib/zen/controller/preview.rb +9 -8
  63. data/lib/zen/controller/translations.rb +49 -0
  64. data/lib/zen/error.rb +17 -0
  65. data/lib/zen/event.rb +118 -0
  66. data/lib/zen/helper/asset.rb +63 -0
  67. data/lib/zen/helper/breadcrumb.rb +1 -4
  68. data/lib/zen/helper/controller.rb +73 -0
  69. data/lib/zen/helper/locale.rb +42 -0
  70. data/lib/zen/helper/message.rb +0 -3
  71. data/lib/zen/helper/search.rb +54 -0
  72. data/lib/zen/helper/stacked_aspect.rb +249 -0
  73. data/lib/zen/helper/theme.rb +3 -10
  74. data/lib/zen/language.rb +356 -181
  75. data/lib/zen/language/en/zen_general.rb +52 -0
  76. data/lib/zen/language/en/zen_models.rb +19 -0
  77. data/lib/zen/language/nl/zen_general.rb +57 -0
  78. data/lib/zen/language/nl/zen_models.rb +22 -0
  79. data/lib/zen/language/translation.rb +132 -0
  80. data/lib/zen/languages.rb +9 -0
  81. data/lib/zen/layout/admin.xhtml +3 -3
  82. data/lib/zen/layout/login.xhtml +1 -1
  83. data/lib/zen/markup.rb +189 -0
  84. data/lib/zen/model/helper.rb +65 -0
  85. data/lib/zen/model/init.rb +62 -0
  86. data/lib/zen/model/methods.rb +6 -7
  87. data/lib/zen/package.rb +312 -201
  88. data/lib/zen/package/all.rb +4 -3
  89. data/lib/zen/package/categories/lib/categories.rb +29 -41
  90. data/lib/zen/package/categories/lib/categories/controller/categories.rb +185 -130
  91. data/lib/zen/package/categories/lib/categories/controller/category_groups.rb +172 -102
  92. data/lib/zen/package/categories/lib/categories/helper/category.rb +4 -9
  93. data/lib/zen/package/categories/lib/categories/helper/category_frontend.rb +86 -0
  94. data/lib/zen/package/categories/lib/categories/language/en/categories.rb +40 -0
  95. data/lib/zen/package/categories/lib/categories/language/en/category_groups.rb +39 -0
  96. data/lib/zen/package/categories/lib/categories/language/nl/categories.rb +42 -0
  97. data/lib/zen/package/categories/lib/categories/language/nl/category_groups.rb +42 -0
  98. data/lib/zen/package/categories/lib/categories/model/category.rb +21 -25
  99. data/lib/zen/package/categories/lib/categories/model/category_group.rb +21 -15
  100. data/lib/zen/package/categories/lib/categories/view/admin/categories/form.xhtml +25 -26
  101. data/lib/zen/package/categories/lib/categories/view/admin/categories/index.xhtml +24 -24
  102. data/lib/zen/package/categories/lib/categories/view/admin/category-groups/form.xhtml +18 -20
  103. data/lib/zen/package/categories/lib/categories/view/admin/category-groups/index.xhtml +21 -18
  104. data/lib/zen/package/comments/lib/comments.rb +30 -50
  105. data/lib/zen/package/comments/lib/comments/anti_spam.rb +138 -0
  106. data/lib/zen/package/comments/lib/comments/controller/comments.rb +159 -92
  107. data/lib/zen/package/comments/lib/comments/controller/comments_form.rb +122 -34
  108. data/lib/zen/package/comments/lib/comments/helper/comment.rb +0 -3
  109. data/lib/zen/package/comments/lib/comments/helper/comment_frontend.rb +90 -0
  110. data/lib/zen/package/comments/lib/comments/language/en/comments.rb +57 -0
  111. data/lib/zen/package/comments/lib/comments/language/nl/comments.rb +61 -0
  112. data/lib/zen/package/comments/lib/comments/model/comment.rb +147 -49
  113. data/lib/zen/package/comments/lib/comments/model/comment_status.rb +0 -2
  114. data/lib/zen/package/comments/lib/comments/view/admin/comments/form.xhtml +37 -40
  115. data/lib/zen/package/comments/lib/comments/view/admin/comments/index.xhtml +23 -42
  116. data/lib/zen/package/comments/migrations/1308774099_comment_status.rb +12 -4
  117. data/lib/zen/package/comments/migrations/1313851786_remove_defensio_signature.rb +11 -0
  118. data/lib/zen/package/custom_fields/lib/custom_fields.rb +40 -43
  119. data/lib/zen/package/custom_fields/lib/custom_fields/blue_form_parameters.rb +72 -17
  120. data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_field_groups.rb +154 -118
  121. data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_field_types.rb +147 -90
  122. data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_fields.rb +161 -131
  123. data/lib/zen/package/custom_fields/lib/custom_fields/helper/custom_field.rb +4 -9
  124. data/lib/zen/package/custom_fields/lib/custom_fields/language/en/custom_field_groups.rb +42 -0
  125. data/lib/zen/package/custom_fields/lib/custom_fields/language/en/custom_field_types.rb +51 -0
  126. data/lib/zen/package/custom_fields/lib/custom_fields/language/en/custom_fields.rb +60 -0
  127. data/lib/zen/package/custom_fields/lib/custom_fields/language/nl/custom_field_groups.rb +41 -0
  128. data/lib/zen/package/custom_fields/lib/custom_fields/language/nl/custom_field_types.rb +49 -0
  129. data/lib/zen/package/custom_fields/lib/custom_fields/language/nl/custom_fields.rb +61 -0
  130. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field.rb +18 -23
  131. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_group.rb +20 -19
  132. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_method.rb +1 -3
  133. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_type.rb +19 -9
  134. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_value.rb +18 -15
  135. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/form.xhtml +18 -18
  136. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/index.xhtml +30 -24
  137. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-types/form.xhtml +15 -10
  138. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-types/index.xhtml +24 -19
  139. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/form.xhtml +18 -13
  140. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/index.xhtml +30 -20
  141. data/lib/zen/package/extensions/lib/extensions.rb +20 -0
  142. data/lib/zen/package/extensions/lib/extensions/controller/extensions.rb +41 -0
  143. data/lib/zen/package/extensions/lib/extensions/language/en/extensions.rb +23 -0
  144. data/lib/zen/package/extensions/lib/extensions/language/nl/extensions.rb +25 -0
  145. data/lib/zen/package/extensions/lib/extensions/view/admin/extensions/index.xhtml +86 -0
  146. data/lib/zen/package/menu.rb +109 -0
  147. data/lib/zen/package/menus/lib/menus.rb +25 -34
  148. data/lib/zen/package/menus/lib/menus/controller/menu_items.rb +143 -107
  149. data/lib/zen/package/menus/lib/menus/controller/menus.rb +166 -115
  150. data/lib/zen/package/menus/lib/menus/helper/menu.rb +2 -8
  151. data/lib/zen/package/menus/lib/menus/helper/menu_frontend.rb +114 -0
  152. data/lib/zen/package/menus/lib/menus/language/en/menu_items.rb +48 -0
  153. data/lib/zen/package/menus/lib/menus/language/en/menus.rb +48 -0
  154. data/lib/zen/package/menus/lib/menus/language/nl/menu_items.rb +48 -0
  155. data/lib/zen/package/menus/lib/menus/language/nl/menus.rb +50 -0
  156. data/lib/zen/package/menus/lib/menus/model/menu.rb +24 -17
  157. data/lib/zen/package/menus/lib/menus/model/menu_item.rb +37 -13
  158. data/lib/zen/package/menus/lib/menus/view/admin/menu-items/form.xhtml +32 -25
  159. data/lib/zen/package/menus/lib/menus/view/admin/menu-items/index.xhtml +23 -17
  160. data/lib/zen/package/menus/lib/menus/view/admin/menus/form.xhtml +31 -26
  161. data/lib/zen/package/menus/lib/menus/view/admin/menus/index.xhtml +20 -22
  162. data/lib/zen/package/sections/lib/sections.rb +25 -68
  163. data/lib/zen/package/sections/lib/sections/controller/section_entries.rb +178 -138
  164. data/lib/zen/package/sections/lib/sections/controller/sections.rb +173 -140
  165. data/lib/zen/package/sections/lib/sections/helper/section.rb +3 -6
  166. data/lib/zen/package/sections/lib/sections/helper/section_frontend.rb +146 -0
  167. data/lib/zen/package/sections/lib/sections/language/en/section_entries.rb +50 -0
  168. data/lib/zen/package/sections/lib/sections/language/en/sections.rb +55 -0
  169. data/lib/zen/package/sections/lib/sections/language/nl/section_entries.rb +50 -0
  170. data/lib/zen/package/sections/lib/sections/language/nl/sections.rb +55 -0
  171. data/lib/zen/package/sections/lib/sections/model/section.rb +36 -36
  172. data/lib/zen/package/sections/lib/sections/model/section_entry.rb +52 -59
  173. data/lib/zen/package/sections/lib/sections/model/section_entry_status.rb +2 -2
  174. data/lib/zen/package/sections/lib/sections/view/admin/form.xhtml +24 -21
  175. data/lib/zen/package/sections/lib/sections/view/admin/index.xhtml +24 -26
  176. data/lib/zen/package/sections/lib/sections/view/admin/section-entries/form.xhtml +33 -31
  177. data/lib/zen/package/sections/lib/sections/view/admin/section-entries/index.xhtml +24 -25
  178. data/lib/zen/package/sections/migrations/1308672298_use_id_for_default_section.rb +14 -10
  179. data/lib/zen/package/sections/migrations/1308813320_section_entry_statuses.rb +12 -6
  180. data/lib/zen/package/settings/lib/settings.rb +25 -120
  181. data/lib/zen/package/settings/lib/settings/blue_form_parameters.rb +157 -0
  182. data/lib/zen/package/settings/lib/settings/controller/settings.rb +94 -69
  183. data/lib/zen/package/settings/lib/settings/language/en/settings.rb +41 -0
  184. data/lib/zen/package/settings/lib/settings/language/nl/settings.rb +41 -0
  185. data/lib/zen/package/settings/lib/settings/model/setting.rb +0 -2
  186. data/lib/zen/package/settings/lib/settings/setting.rb +379 -0
  187. data/lib/zen/package/settings/lib/settings/setting_groups.rb +11 -0
  188. data/lib/zen/package/settings/lib/settings/settings.rb +83 -0
  189. data/lib/zen/package/settings/lib/settings/settings_group.rb +84 -0
  190. data/lib/zen/package/settings/lib/settings/singleton_methods.rb +35 -0
  191. data/lib/zen/package/settings/lib/settings/view/admin/settings/index.xhtml +15 -57
  192. data/lib/zen/package/settings/migrations/1321197919_remove_unused_columns.rb +17 -0
  193. data/lib/zen/package/users/lib/users.rb +51 -36
  194. data/lib/zen/package/users/lib/users/controller/user_groups.rb +133 -98
  195. data/lib/zen/package/users/lib/users/controller/users.rb +253 -136
  196. data/lib/zen/package/users/lib/users/helper/access.rb +102 -0
  197. data/lib/zen/package/users/lib/users/helper/acl.rb +113 -0
  198. data/lib/zen/package/users/lib/users/helper/users.rb +41 -24
  199. data/lib/zen/package/users/lib/users/language/en/permissions.rb +16 -0
  200. data/lib/zen/package/users/lib/users/language/en/user_groups.rb +39 -0
  201. data/lib/zen/package/users/lib/users/language/en/users.rb +73 -0
  202. data/lib/zen/package/users/lib/users/language/nl/permissions.rb +16 -0
  203. data/lib/zen/package/users/lib/users/language/nl/user_groups.rb +41 -0
  204. data/lib/zen/package/users/lib/users/language/nl/users.rb +74 -0
  205. data/lib/zen/package/users/lib/users/model/permission.rb +28 -0
  206. data/lib/zen/package/users/lib/users/model/user.rb +104 -65
  207. data/lib/zen/package/users/lib/users/model/user_group.rb +28 -24
  208. data/lib/zen/package/users/lib/users/model/user_status.rb +27 -0
  209. data/lib/zen/package/users/lib/users/public/admin/css/users/permissions.css +22 -0
  210. data/lib/zen/package/users/lib/users/public/admin/js/users/permissions.js +33 -0
  211. data/lib/zen/package/users/lib/users/settings.rb +19 -0
  212. data/lib/zen/package/users/lib/users/view/admin/user-groups/form.xhtml +58 -28
  213. data/lib/zen/package/users/lib/users/view/admin/user-groups/index.xhtml +19 -15
  214. data/lib/zen/package/users/lib/users/view/admin/users/form.xhtml +93 -62
  215. data/lib/zen/package/users/lib/users/view/admin/users/index.xhtml +23 -36
  216. data/lib/zen/package/users/lib/users/view/admin/users/login.xhtml +13 -6
  217. data/lib/zen/package/users/lib/users/view/admin/users/permissions.xhtml +33 -0
  218. data/lib/zen/package/users/lib/users/view/admin/users/register.xhtml +52 -0
  219. data/lib/zen/package/users/migrations/1313786058_update_default_date.rb +41 -0
  220. data/lib/zen/package/users/migrations/1316432327_permissions.rb +36 -0
  221. data/lib/zen/package/users/migrations/1320272365_status_ids.rb +67 -0
  222. data/lib/zen/public/admin/css/zen/buttons.css +3 -11
  223. data/lib/zen/public/admin/css/zen/datepicker.css +23 -13
  224. data/lib/zen/public/admin/css/zen/editor.css +6 -14
  225. data/lib/zen/public/admin/css/zen/forms.css +19 -12
  226. data/lib/zen/public/admin/css/zen/general.css +22 -18
  227. data/lib/zen/public/admin/css/zen/grid.css +1 -20
  228. data/lib/zen/public/admin/css/zen/layout.css +26 -11
  229. data/lib/zen/public/admin/css/zen/messages.css +3 -10
  230. data/lib/zen/public/admin/css/zen/reset.css +13 -15
  231. data/lib/zen/public/admin/css/zen/tables.css +8 -10
  232. data/lib/zen/public/admin/css/zen/tabs.css +2 -10
  233. data/lib/zen/public/admin/css/zen/window.css +2 -8
  234. data/lib/zen/public/admin/js/vendor/datepicker.js +540 -240
  235. data/lib/zen/public/admin/js/vendor/mootools/core.js +273 -283
  236. data/lib/zen/public/admin/js/vendor/mootools/more.js +131 -136
  237. data/lib/zen/public/admin/js/zen/index.js +8 -14
  238. data/lib/zen/public/admin/js/zen/lib/editor.js +36 -33
  239. data/lib/zen/public/admin/js/zen/lib/editor/markdown.js +0 -6
  240. data/lib/zen/public/admin/js/zen/lib/editor/textile.js +0 -6
  241. data/lib/zen/public/admin/js/zen/lib/html_table.js +0 -5
  242. data/lib/zen/public/admin/js/zen/lib/tabs.js +22 -79
  243. data/lib/zen/public/admin/js/zen/lib/window.js +12 -22
  244. data/lib/zen/spec/bacon/color_output.rb +1 -1
  245. data/lib/zen/spec/helper.rb +6 -11
  246. data/lib/zen/spec/simplecov.rb +3 -3
  247. data/lib/zen/task.rb +0 -1
  248. data/lib/zen/task/build.rake +46 -26
  249. data/lib/zen/task/clean.rake +14 -7
  250. data/lib/zen/task/db.rake +31 -29
  251. data/lib/zen/task/package.rake +19 -23
  252. data/lib/zen/task/proto.rake +3 -5
  253. data/lib/zen/task/setup.rake +4 -0
  254. data/lib/zen/task/test.rake +31 -6
  255. data/lib/zen/task/theme.rake +13 -19
  256. data/lib/zen/theme.rb +377 -52
  257. data/lib/zen/validation.rb +22 -30
  258. data/lib/zen/version.rb +1 -2
  259. data/lib/zen/view/bottom.xhtml +9 -1
  260. data/lib/zen/view/head.xhtml +1 -1
  261. data/lib/zen/view/main.xhtml +1 -1
  262. data/lib/zen/view/search.xhtml +9 -0
  263. data/proto/app/Rakefile +0 -1
  264. data/proto/app/app.rb +21 -16
  265. data/proto/app/config/config.rb.erb +41 -0
  266. data/proto/app/config/{database.rb → database.rb.erb} +17 -14
  267. data/proto/app/config/middlewares.rb +1 -1
  268. data/proto/app/theme/default/index.xhtml +25 -0
  269. data/proto/app/theme/theme.rb +19 -0
  270. data/proto/app/{log/database/dev → tmp}/.gitkeep +0 -0
  271. data/proto/migration.rb +3 -5
  272. data/proto/rack/thin.yml +41 -0
  273. data/proto/rack/unicorn.rb +38 -0
  274. data/spec/Rakefile +15 -11
  275. data/spec/fixtures/zen/helper/controller.rb +13 -0
  276. data/spec/fixtures/zen/helper/locale.rb +7 -0
  277. data/spec/fixtures/zen/helper/message.rb +0 -4
  278. data/spec/fixtures/zen/language.rb +31 -0
  279. data/spec/fixtures/zen/language/en/spec.rb +11 -0
  280. data/spec/fixtures/zen/language/nl/spec.rb +11 -0
  281. data/spec/fixtures/zen/package.rb +0 -10
  282. data/spec/fixtures/zen/package/categories/helper/category_frontend.rb +16 -0
  283. data/spec/fixtures/zen/package/comments/helper/comment_frontend.rb +16 -0
  284. data/spec/fixtures/zen/package/sections/helper/section_frontend.rb +16 -0
  285. data/spec/fixtures/zen/package/settings/controller/settings.rb +17 -0
  286. data/spec/fixtures/zen/package/users/helper/access.rb +18 -0
  287. data/spec/fixtures/zen/package/users/helper/acl.rb +23 -0
  288. data/spec/fixtures/zen/theme/{default-section → default}/index.xhtml +0 -0
  289. data/spec/helper.rb +12 -27
  290. data/{proto/app/log/database/live → spec/public}/.gitkeep +0 -0
  291. data/spec/zen/controller/admin_controller.rb +5 -6
  292. data/spec/zen/controller/main_controller.rb +29 -35
  293. data/spec/zen/controller/preview.rb +9 -10
  294. data/spec/zen/event.rb +44 -0
  295. data/spec/zen/helper/breadcrumb.rb +4 -5
  296. data/spec/zen/helper/controller.rb +21 -0
  297. data/spec/zen/helper/locale.rb +25 -0
  298. data/spec/zen/helper/message.rb +4 -11
  299. data/spec/zen/helper/theme.rb +11 -14
  300. data/spec/zen/language.rb +48 -22
  301. data/spec/zen/markup.rb +39 -0
  302. data/spec/zen/package.rb +48 -11
  303. data/spec/zen/package/categories/controller/categories.rb +99 -45
  304. data/spec/zen/package/categories/controller/category_groups.rb +109 -33
  305. data/spec/zen/package/categories/helper/category.rb +19 -32
  306. data/spec/zen/package/categories/helper/category_frontend.rb +61 -0
  307. data/spec/zen/package/comments/anti_spam.rb +50 -0
  308. data/spec/zen/package/comments/controller/comments.rb +121 -61
  309. data/spec/zen/package/comments/controller/comments_form.rb +120 -94
  310. data/spec/zen/package/comments/helper/comment.rb +13 -13
  311. data/spec/zen/package/comments/helper/comment_frontend.rb +92 -0
  312. data/spec/zen/package/custom_fields/blue_form_parameters.rb +50 -50
  313. data/spec/zen/package/custom_fields/controller/custom_field_groups.rb +135 -43
  314. data/spec/zen/package/custom_fields/controller/custom_field_types.rb +153 -48
  315. data/spec/zen/package/custom_fields/controller/custom_fields.rb +130 -51
  316. data/spec/zen/package/custom_fields/helper/custom_field.rb +8 -8
  317. data/spec/zen/package/extensions/controller/extensions.rb +38 -0
  318. data/spec/zen/package/menus/controller/menu_items.rb +121 -42
  319. data/spec/zen/package/menus/controller/menus.rb +125 -38
  320. data/spec/zen/package/menus/helper/menu.rb +26 -26
  321. data/spec/zen/package/menus/helper/menu_frontend.rb +104 -0
  322. data/spec/zen/package/sections/controller/section_entries.rb +145 -89
  323. data/spec/zen/package/sections/controller/sections.rb +130 -35
  324. data/spec/zen/package/sections/helper/section.rb +27 -38
  325. data/spec/zen/package/sections/helper/section_frontend.rb +160 -0
  326. data/spec/zen/package/settings/controller/settings.rb +73 -8
  327. data/spec/zen/package/settings/settings.rb +119 -0
  328. data/spec/zen/package/users/controller/user_groups.rb +134 -34
  329. data/spec/zen/package/users/controller/users.rb +189 -44
  330. data/spec/zen/package/users/helper/access.rb +29 -0
  331. data/spec/zen/package/users/helper/acl.rb +46 -0
  332. data/spec/zen/package/users/helper/users.rb +20 -64
  333. data/spec/zen/theme.rb +7 -9
  334. data/spec/zen/validation.rb +1 -2
  335. data/zen.gemspec +25 -22
  336. metadata +303 -222
  337. data/lib/zen/asset.rb +0 -292
  338. data/lib/zen/bin/runner.rb +0 -118
  339. data/lib/zen/error/language_error.rb +0 -10
  340. data/lib/zen/error/package_error.rb +0 -10
  341. data/lib/zen/error/plugin_error.rb +0 -10
  342. data/lib/zen/error/theme_error.rb +0 -10
  343. data/lib/zen/error/validation_error.rb +0 -10
  344. data/lib/zen/helper/acl.rb +0 -182
  345. data/lib/zen/helper/blue_form_vendor.rb +0 -689
  346. data/lib/zen/language/en/zen_general.yml +0 -25
  347. data/lib/zen/language/en/zen_models.yml +0 -13
  348. data/lib/zen/language/nl/zen_general.yml +0 -25
  349. data/lib/zen/language/nl/zen_models.yml +0 -13
  350. data/lib/zen/model/settings.rb +0 -78
  351. data/lib/zen/package/base.rb +0 -62
  352. data/lib/zen/package/categories/lib/categories/language/en/categories.yml +0 -36
  353. data/lib/zen/package/categories/lib/categories/language/en/category_groups.yml +0 -34
  354. data/lib/zen/package/categories/lib/categories/language/nl/categories.yml +0 -40
  355. data/lib/zen/package/categories/lib/categories/language/nl/category_groups.yml +0 -34
  356. data/lib/zen/package/categories/lib/categories/plugin/categories.rb +0 -141
  357. data/lib/zen/package/comments/lib/comments/language/en/comments.yml +0 -48
  358. data/lib/zen/package/comments/lib/comments/language/nl/comments.yml +0 -50
  359. data/lib/zen/package/comments/lib/comments/plugin/anti_spam.rb +0 -156
  360. data/lib/zen/package/comments/lib/comments/plugin/comments.rb +0 -115
  361. data/lib/zen/package/custom_fields/lib/custom_fields/language/en/custom_field_groups.yml +0 -33
  362. data/lib/zen/package/custom_fields/lib/custom_fields/language/en/custom_field_types.yml +0 -40
  363. data/lib/zen/package/custom_fields/lib/custom_fields/language/en/custom_fields.yml +0 -54
  364. data/lib/zen/package/custom_fields/lib/custom_fields/language/nl/custom_field_groups.yml +0 -33
  365. data/lib/zen/package/custom_fields/lib/custom_fields/language/nl/custom_field_types.yml +0 -40
  366. data/lib/zen/package/custom_fields/lib/custom_fields/language/nl/custom_fields.yml +0 -54
  367. data/lib/zen/package/menus/lib/menus/language/en/menu_items.yml +0 -41
  368. data/lib/zen/package/menus/lib/menus/language/en/menus.yml +0 -40
  369. data/lib/zen/package/menus/lib/menus/language/nl/menu_items.yml +0 -41
  370. data/lib/zen/package/menus/lib/menus/language/nl/menus.yml +0 -40
  371. data/lib/zen/package/menus/lib/menus/plugin/menus.rb +0 -152
  372. data/lib/zen/package/sections/lib/sections/language/en/section_entries.yml +0 -44
  373. data/lib/zen/package/sections/lib/sections/language/en/sections.yml +0 -48
  374. data/lib/zen/package/sections/lib/sections/language/nl/section_entries.yml +0 -44
  375. data/lib/zen/package/sections/lib/sections/language/nl/sections.yml +0 -48
  376. data/lib/zen/package/sections/lib/sections/plugin/section_entries.rb +0 -244
  377. data/lib/zen/package/sections/lib/sections/plugin/sections.rb +0 -87
  378. data/lib/zen/package/settings/lib/settings/language/en/settings.yml +0 -36
  379. data/lib/zen/package/settings/lib/settings/language/nl/settings.yml +0 -37
  380. data/lib/zen/package/settings/lib/settings/plugin/group_base.rb +0 -39
  381. data/lib/zen/package/settings/lib/settings/plugin/setting_base.rb +0 -133
  382. data/lib/zen/package/settings/lib/settings/plugin/settings.rb +0 -251
  383. data/lib/zen/package/users/lib/users/controller/access_rules.rb +0 -284
  384. data/lib/zen/package/users/lib/users/language/en/access_rules.yml +0 -38
  385. data/lib/zen/package/users/lib/users/language/en/user_groups.yml +0 -32
  386. data/lib/zen/package/users/lib/users/language/en/users.yml +0 -57
  387. data/lib/zen/package/users/lib/users/language/nl/access_rules.yml +0 -38
  388. data/lib/zen/package/users/lib/users/language/nl/user_groups.yml +0 -32
  389. data/lib/zen/package/users/lib/users/language/nl/users.yml +0 -57
  390. data/lib/zen/package/users/lib/users/model/access_rule.rb +0 -42
  391. data/lib/zen/package/users/lib/users/public/admin/js/users/access_rules.js +0 -65
  392. data/lib/zen/package/users/lib/users/public/admin/js/users/lib/access_rules.js +0 -49
  393. data/lib/zen/package/users/lib/users/view/admin/access-rules/form.xhtml +0 -120
  394. data/lib/zen/package/users/lib/users/view/admin/access-rules/index.xhtml +0 -102
  395. data/lib/zen/plugin.rb +0 -182
  396. data/lib/zen/plugin/base.rb +0 -46
  397. data/lib/zen/plugin/helper.rb +0 -47
  398. data/lib/zen/plugin/markup/lib/markup.rb +0 -14
  399. data/lib/zen/plugin/markup/lib/markup/language/en/markup.yml +0 -6
  400. data/lib/zen/plugin/markup/lib/markup/markup.rb +0 -165
  401. data/lib/zen/public/admin/js/zen/lib/asset.js +0 -111
  402. data/lib/zen/task/plugin.rake +0 -18
  403. data/lib/zen/theme/base.rb +0 -65
  404. data/proto/app/config/config.rb +0 -18
  405. data/spec/fixtures/zen/language/en/spec.yml +0 -10
  406. data/spec/fixtures/zen/language/nl/spec.yml +0 -7
  407. data/spec/fixtures/zen/package/settings/plugin/settings.rb +0 -20
  408. data/spec/zen/asset.rb +0 -97
  409. data/spec/zen/bin/create.rb +0 -89
  410. data/spec/zen/bin/runner.rb +0 -47
  411. data/spec/zen/helper/acl.rb +0 -149
  412. data/spec/zen/package/categories/plugin/categories.rb +0 -92
  413. data/spec/zen/package/comments/plugin/anti_spam.rb +0 -59
  414. data/spec/zen/package/comments/plugin/comments.rb +0 -107
  415. data/spec/zen/package/menus/plugin/menus.rb +0 -120
  416. data/spec/zen/package/sections/plugin/section_entries.rb +0 -161
  417. data/spec/zen/package/sections/plugin/sections.rb +0 -75
  418. data/spec/zen/package/settings/plugin/settings.rb +0 -33
  419. data/spec/zen/package/users/controller/access_rules.rb +0 -90
  420. data/spec/zen/plugin.rb +0 -64
  421. data/spec/zen/plugin/helper.rb +0 -11
  422. data/spec/zen/plugin/markup.rb +0 -44
data/lib/zen/theme.rb CHANGED
@@ -1,87 +1,303 @@
1
- require __DIR__('error/theme_error')
2
- require __DIR__('theme/base')
3
1
  require 'pathname'
4
2
 
5
- #:nodoc:
6
3
  module Zen
7
4
  ##
8
- # Themes in many ways are similar to plugins and packages but with a few
9
- # differences. Unlike packages themes aren't able to update the entire Ramaze
10
- # root, this prevents them from loading controllers and other classes unless
11
- # the developer updates these paths manually. However, themes can set the
12
- # following paths:
13
- #
14
- # * template_dir: the directory where all Liquid templates are located,
15
- # always required.
16
- # * partial_dir: the directory where all Liquid partials are located.
17
- # * public_dir: the public directory containing assets such as CSS and
18
- # Javascript files.
19
- # * migration_dir: themes can use migrations to automatically add the required
20
- # fields to the database, this setting should point to the directory where
21
- # all migrations are located.
22
- #
23
- # ## Adding Themes
24
- #
25
- # Just like plugins and packages a theme can be added by calling
26
- # Zen::Theme#add and passing a block to it. Once a theme has been loaded it
27
- # will *not* be used until the user sets it as the active theme in the
28
- # settings module.
29
- #
30
- # Example:
5
+ # Zen allows you to create templates and package them as themes using the
6
+ # tools you already know such as Ruby, HTML and CSS. Once a theme has been
7
+ # created it can be distributed using Rubygems or by using an alternative
8
+ # method.
9
+ #
10
+ # Themes consist out of two elements: template groups and templates. Template
11
+ # groups are nothing more than directories of templates. Templates are files
12
+ # that can contain HTML and Ruby code required for the presentation layer of
13
+ # your application. These templates use Etanni, an engine that ships with
14
+ # Ramaze. Etanni is quite simple to use and only uses the following two tags:
15
+ #
16
+ # * ``<?r ?>``: used for code statements (if, while, etc).
17
+ # * ``#{}``: used for outputting the value of a variable, statement, method,
18
+ # and so on.
19
+ #
20
+ # A simple example of how to use these tags is the following:
21
+ #
22
+ # <?r if @username.nil? ?>
23
+ # <p>Hello #{@username}!</p>
24
+ # <?r else ?>
25
+ # <p>Hello unknown user!</p>
26
+ # <?r end ?>
27
+ #
28
+ # ## Theme Structure
29
+ #
30
+ # A typical theme has a structure similar to the one used for organizing
31
+ # Rubygems. This structure makes it easy to install themes via Rubygems and
32
+ # load them just like any other gem by using ``require()``. An example of this
33
+ # is the following:
34
+ #
35
+ # lib/
36
+ # |__ test.rb
37
+ # |__ test/
38
+ # |__ public/
39
+ # |__ templates/
40
+ # |__ partials/
41
+ # |__ pages/
42
+ # |__ foobar/
43
+ #
44
+ # Lets assume the theme is called "test" and is available on Rubygems (under
45
+ # the same name). In that case you can install it as following:
46
+ #
47
+ # $ gem install test
48
+ #
49
+ # Once installed all you have to do is put the following line in your app.rb
50
+ # file before calling ``Zen.start``:
51
+ #
52
+ # require 'test'
53
+ #
54
+ # Once loaded you can go to the admin panel and set it as the active theme.
55
+ #
56
+ # While the Rubygems structure is great if you want to share a theme there are
57
+ # a lot of cases where you don't want to do this. For example, if you're
58
+ # creating a custom theme for a client you may not want to share it with
59
+ # others. In that case the structure used by Rubygems is a bit complicated,
60
+ # especially if there's only one theme for the website. A much more simplistic
61
+ # way of organizing a theme would be to create a ``theme/`` directory in your
62
+ # application root and put your theme in there. In this case you'd end up with
63
+ # a file structure that looks like the following:
64
+ #
65
+ # ROOT/
66
+ # |__ public/
67
+ # |
68
+ # |__ theme/
69
+ # |__ partials/
70
+ # |__ pages/
71
+ # |__ foobar/
72
+ # |__ partials/
73
+ # |__ test.rb
74
+ #
75
+ # Because the theme is located in the application root, which isn't added to
76
+ # the load path, you'll have to load it in a slightly different way. Instead
77
+ # of ``require 'test'`` you'd have to put the following code in your app.rb
78
+ # file:
79
+ #
80
+ # require File.expand_path('../theme/test', __FILE__) # All Rubies
81
+ # require_relative('theme/test') # Ruby >= 1.9
82
+ #
83
+ # Do keep in mind that putting a theme directly in the ``theme/`` directory
84
+ # is only recommended if your application only has a single custom theme
85
+ # available. If there are multiple ones you should change it to the following
86
+ # instead:
87
+ #
88
+ # ROOT/
89
+ # |__ public/
90
+ # |
91
+ # |__ theme/
92
+ # |__ test/
93
+ # |__ partials/
94
+ # |__ pages/
95
+ # |__ foobar/
96
+ # |__ partials/
97
+ # |__ test.rb
98
+ #
99
+ # <div class="note deprecated">
100
+ # <p>
101
+ # <strong>Warning</strong>: Most likely your template will use files
102
+ # such as CSS and Javascript files. It's important to store these
103
+ # under their own namespace similar to assets used in the backend to
104
+ # prevent any collisions.
105
+ # </p>
106
+ # </div>
107
+ #
108
+ # ## Registering Themes
109
+ #
110
+ # In order to tell Zen about your themes, their templates, root directories
111
+ # and so on they have to be registered. Registering a theme is done using
112
+ # ``Zen::Theme.add``:
113
+ #
114
+ # Zen::Theme.add do |t|
115
+ #
116
+ # end
117
+ #
118
+ # This code should not go in files such as app.rb or configuration files,
119
+ # instead it should go in a theme specific file. It is recommended to give
120
+ # this file the same name as your theme as it makes it possible to load the
121
+ # theme using Rubygems. For example, if the theme is called "test" then the
122
+ # file would be called "test.rb".
123
+ #
124
+ # When registering a theme you can set the following setters:
125
+ #
126
+ # * name (required): the name of the theme (should be a symbol)
127
+ # * author (required): the name of the person who developed the theme.
128
+ # * about (required): a short description of the theme.
129
+ # * templates (required): a path to the directory containing the templates for
130
+ # all sections.
131
+ # * partials: a path to the directory containing all the partials that should
132
+ # be rendered when calling ``partial()``.
133
+ # * public: a path to an extra public directory to use, useful when you're
134
+ # distributing your theme using Rubygems and want to ship it with a few CSS
135
+ # files.
136
+ # * migrations: path to a directory containing all Sequel migrations for the
137
+ # theme. While not always needed this can be useful to automatically insert
138
+ # data into the database.
139
+ # * default_template_group: the name of the default template group to use in
140
+ # case no custom one has been specified in the URI.
141
+ #
142
+ # An example call to ``Zen::Theme.add`` using these options:
31
143
  #
32
144
  # Zen::Theme.add do |theme|
33
- # theme.author = 'Yorick Peterse'
34
- # theme.name = 'default'
145
+ # theme.name = :test
146
+ # theme.author = 'Yorick Peterse'
147
+ # theme.about = 'An example template'
148
+ # theme.templates = __DIR__('path/to/application/theme')
35
149
  # end
36
150
  #
37
- # @author Yorick Peterse
151
+ # ## URL Mapping
152
+ #
153
+ # Template groups and templates are directly mapped to URIs. The first segment
154
+ # is the template group to use, the second the template name and all following
155
+ # parameters are ignored (but still available in your templates). This means
156
+ # that if a user requests the URI ``/pages/entry/10`` this will map to the
157
+ # template group "pages" and the template "entry.xhtml". If a specified
158
+ # template group/template doesn't exist Zen will render a special template
159
+ # called "404.xhtml" (this template should be located in the same directory as
160
+ # your template groups).
161
+ #
162
+ # If only a template group is specified Zen will render the template
163
+ # "index.xhtml", therefor you should make sure this template always exists.
164
+ #
165
+ # Some examples:
166
+ #
167
+ # GET /pages/entry/hello-world => /pages/entry.xhtml
168
+ # GET /pages/foobar => /404.xhtml (if "foobar" doesn't exist)
169
+ # GET /pages => /pages/index.xhtml
170
+ #
171
+ # Templates have access to the special instance variable ``@request_uri``.
172
+ # This variable is an array that contains the template group, the template and
173
+ # all additional parameters. In the case of the examples above you'd end up
174
+ # with the following values for this array:
175
+ #
176
+ # GET /pages/entry/hello-world => ['pages', 'entry', 'hello-world']
177
+ # GET /pages/foobar => ['pages', 'foobar']
178
+ # GET /pages => ['pages', 'index']
179
+ #
180
+ # ## Retrieving Data
181
+ #
182
+ # Zen comes with a bunch of helpers that can be used to make it easy to
183
+ # retrieve data such as section entries and comments. On top of that you can
184
+ # also directly use all the classes provided by Zen since you're free to use
185
+ # any Ruby in your templates. For example, say you want to retrieve a list
186
+ # of entries in our ``index.xhtml`` template you could do something like the
187
+ # following:
188
+ #
189
+ # <?r entries = get_entries('blog', :limit => 50) ?>
190
+ #
191
+ # <?r entries.each do |entry| ?>
192
+ # <article>
193
+ # <header>
194
+ # <h1>#{entry.title}</h1>
195
+ # </header>
196
+ #
197
+ # #{entry.fields[:body]}
198
+ # </article>
199
+ # <?r end ?>
200
+ #
201
+ # <div class="note deprecated">
202
+ # <p>
203
+ # <strong>Warning</strong>: Don't run custom SQL queries inside your
204
+ # templates, create a helper, regular class or module if you want to
205
+ # retrieve custom data.
206
+ # </p>
207
+ # </div>
208
+ #
209
+ # ## Template Partials
210
+ #
211
+ # Often you'll need to re-use an existing template multiple times. For
212
+ # example, almost all templates will have some data inside the ``<head>`` tag
213
+ # that will have pretty much the same markup and/or content in different
214
+ # templates. Zen makes it possible this easy by using "partials". Partials are
215
+ # simply templates stored in a specific directory (which is specified in the
216
+ # "partials" option).
217
+ #
218
+ # There's no limitation as to what you can do with them except that they need
219
+ # to be put into a particular directory. Once a partial is in place it can be
220
+ # rendered using the ``partial()`` method. This method has the following
221
+ # syntax:
222
+ #
223
+ # partial(template[, :variable => value])
224
+ #
225
+ # The first parameter is simply the name of the partial to render, the second
226
+ # parameter is a hash containing data to copy into the partial. This hash can
227
+ # be used to set data inside a partial such as the page's title. Example:
228
+ #
229
+ # partial(:footer, :author => 'Yorick Peterse')
230
+ #
231
+ # In your ``footer.xhtml`` partial you can now do the following:
232
+ #
233
+ # <p>Author: #{@author}</p>
234
+ #
235
+ # <div class="note todo">
236
+ # <p>
237
+ # <strong>Note</strong>: The variables set in the partial method are
238
+ # available as instance variables, not regular variables.
239
+ # </p>
240
+ # </div>
241
+ #
38
242
  # @since 0.2.4
39
243
  #
40
- module Theme
244
+ class Theme
245
+ include Zen::Validation
246
+
247
+ # The name of the theme
248
+ attr_reader :name
249
+
250
+ # The author of the theme
251
+ attr_accessor :author
252
+
253
+ # A small description of the theme
254
+ attr_writer :about
255
+
256
+ # The URL to the theme's homepage
257
+ attr_accessor :url
258
+
259
+ # Path to the directory containing all the templates.
260
+ attr_accessor :templates
261
+
262
+ # Path to the directory containing all template partials.
263
+ attr_accessor :partials
264
+
265
+ # Path to the directory containing all migrations for the theme.
266
+ attr_accessor :migrations
267
+
268
+ # Path to the public directory containing assets and such.
269
+ attr_reader :public
270
+
271
+ # The name of the default template group to use.
272
+ attr_writer :default_template_group
273
+
41
274
  ##
42
275
  # Hash containing all registered themes. The keys are the names of the
43
276
  # themes and the values instances of Zen::Theme::Base.
44
277
  #
45
- # @author Yorick Peterse
46
278
  # @since 0.2.5
47
279
  #
48
- Registered = {}
280
+ REGISTERED = {}
49
281
 
50
282
  ##
51
283
  # Adds a new theme to Zen. Note that the theme won't be used unless it has
52
284
  # been set as the active theme in the settings package.
53
285
  #
54
- # @author Yorick Peterse
55
286
  # @since 0.2.4
56
287
  #
57
288
  def self.add
58
- theme = Base.new
289
+ theme = self.new
59
290
 
60
291
  yield theme
61
292
 
62
- # Validate the theme
63
293
  theme.validate
64
- theme.name = theme.name.to_sym
65
-
66
- # Do we have a public directory?
67
- if theme.respond_to?(:public_dir) and !theme.public_dir.nil?
68
- if !Ramaze.options.publics.include?(theme.public_dir)
69
- # Generate a relative path from ROOT to the theme
70
- to = Pathname.new(theme.public_dir)
71
- from = Pathname.new(Zen.root)
72
- dir = to.relative_path_from(from.realpath).to_s
73
-
74
- Ramaze.options.publics.push(dir)
75
- end
76
- end
77
294
 
78
- Registered[theme.name] = theme
295
+ REGISTERED[theme.name] = theme
79
296
  end
80
297
 
81
298
  ##
82
299
  # Retrieves a single theme for hte given identifier.
83
300
  #
84
- # @author Yorick Peterse
85
301
  # @since 0.2.4
86
302
  # @param [String/Symbol] name The name of the theme to retrieve.
87
303
  # @return [Zen::Theme::Base]
@@ -89,11 +305,120 @@ module Zen
89
305
  def self.[](name)
90
306
  name = name.to_sym if name.class != Symbol
91
307
 
92
- if !Registered.key?(name)
308
+ if !REGISTERED.key?(name)
93
309
  raise(Zen::ThemeError, "The theme #{name} doesn't exist.")
94
310
  end
95
311
 
96
- return Registered[name]
312
+ return REGISTERED[name]
313
+ end
314
+
315
+ ##
316
+ # Sets the name of the theme.
317
+ #
318
+ # @since 0.3
319
+ # @param [#to_sym] name The name of the theme as a symbol.
320
+ #
321
+ def name=(name)
322
+ @name = name.to_sym
323
+ end
324
+
325
+ ##
326
+ # Returns the name of the theme as either plain text or an anchor tag if the
327
+ # url attribute is set.
328
+ #
329
+ # @since 19-11-2011
330
+ # @return [String]
331
+ #
332
+ def formatted_name
333
+ if url
334
+ return '<a href="%s" title="%s">%s</a>' % [url, name, name]
335
+ else
336
+ return name
337
+ end
338
+ end
339
+
340
+ ##
341
+ # Returns the description of the theme either in it's raw form or as a
342
+ # translation.
343
+ #
344
+ # @since 0.3
345
+ # @return [String]
346
+ #
347
+ def about
348
+ begin
349
+ return lang(@about)
350
+ rescue
351
+ return @about
352
+ end
97
353
  end
354
+
355
+ ##
356
+ # Returns the name of the default template group or "default" if no custom
357
+ # name is set.
358
+ #
359
+ # @since 22-11-2011
360
+ # @return [String]
361
+ #
362
+ def default_template_group
363
+ return @default_template_group || 'default'
364
+ end
365
+
366
+ ##
367
+ # Sets the public directory of the theme.
368
+ #
369
+ # @since 0.3
370
+ # @param [String] dir The public directory.
371
+ #
372
+ def public=(dir)
373
+ @public = dir
374
+
375
+ if !Ramaze.options.publics.include?(@public)
376
+ # Generate a relative path from ROOT to the theme
377
+ to = Pathname.new(@public)
378
+ from = Pathname.new(Zen.root)
379
+ dir = to.relative_path_from(from.realpath).to_s
380
+
381
+ Ramaze.options.publics.push(dir)
382
+ end
383
+ end
384
+
385
+ ##
386
+ # Validates all attributes of this class.
387
+ #
388
+ # @since 0.2.5
389
+ #
390
+ def validate
391
+ validates_presence([:name, :author, :about, :templates])
392
+
393
+ validates_filepath(:templates)
394
+
395
+ [:partials, :public, :migrations].each do |m|
396
+ if !send(m).nil?
397
+ validates_filepath(m)
398
+ end
399
+ end
400
+
401
+ # Check if the theme hasn't already been registered
402
+ if ::Zen::Theme::REGISTERED.key?(name.to_sym)
403
+ raise(
404
+ ::Zen::ValidationError,
405
+ "The theme #{name} has already been registered."
406
+ )
407
+ end
408
+ end
409
+
410
+ # Aliases to keep Zen backwards compatible. These aliases will be removed in
411
+ # Zen 0.3.
412
+ alias :template_dir :templates
413
+ alias :template_dir= :templates=
414
+
415
+ alias :partial_dir :partials
416
+ alias :partial_dir= :partials=
417
+
418
+ alias :migration_dir :migrations
419
+ alias :migration_dir= :migrations=
420
+
421
+ alias :public_dir :public
422
+ alias :public_dir= :public=
98
423
  end # Theme
99
424
  end # Zen