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
@@ -1,94 +1,305 @@
1
+ require 'readline'
2
+ require 'erb'
1
3
  require 'fileutils'
2
4
 
3
- #:nodoc:
4
5
  module Zen
5
6
  #:nodoc:
6
7
  module Bin
7
8
  ##
8
- # Command that can be used to create a new application prototype.
9
+ # Command that can be used to create new Zen projects.
9
10
  #
10
- # @author Yorick Peterse
11
- # @since 0.2.8
11
+ # @since 0.3
12
12
  #
13
- class Create
14
- # The description of this command.
15
- Description = 'Creates a new application prototype.'
13
+ class Create < Shebang::Command
14
+ command :create
15
+ banner 'Creates a new Zen project'
16
+ usage 'zen create [OPTIONS]'
16
17
 
17
- # The banner of this application.
18
- Banner = <<-TXT.strip
19
- Creates a new application prototype and saves it in the given path.
18
+ o :l, :lazy , 'Creates a new project with all default options'
19
+ o :f, :force, 'Overwrite existing directories when creating a project'
20
20
 
21
- Usage:
22
- zen create [NAME] [OPTIONS]
21
+ # Path to the prototype application to use for new projects.
22
+ PROTOTYPE = __DIR__('../../../proto/app')
23
23
 
24
- Example:
25
- zen create blog
26
- TXT
24
+ # Hash containing various Rack servers and their default configuration
25
+ # files to use.
26
+ SERVER_CONFIGS = {
27
+ :unicorn => __DIR__('../../../proto/rack/unicorn.rb'),
28
+ :thin => __DIR__('../../../proto/rack/thin.yml')
29
+ }
27
30
 
28
- # Hash containing options that can be overwritten via the command line.
29
- Options = {
30
- :force => false
31
+ # Hash containing the options to use for creating a new project.
32
+ PROJECT_SETTINGS = {
33
+ :name => 'zen_project',
34
+ :database => {
35
+ :adapter => 'sqlite',
36
+ :database => 'database.db',
37
+ :username => nil,
38
+ :password => nil
39
+ },
40
+ :server_config => nil
31
41
  }
32
42
 
33
43
  ##
34
- # Creates a new instance of the class and specifies all the options.
44
+ # Method that is called when this command is invoked without any
45
+ # additional parameters.
35
46
  #
36
- # @author Yorick Peterse
37
- # @since 0.2.8
47
+ # @since 0.3
38
48
  #
39
- def initialize
40
- @stop = false
41
- @options = OptionParser.new do |opt|
42
- opt.banner = Banner
43
- opt.summary_indent = ' '
49
+ def index
50
+ if option(:l)
51
+ create_project
52
+ return
53
+ end
44
54
 
45
- opt.separator "\nOptions:\n"
55
+ intro
56
+ setup_name
57
+ database_settings
58
+ server_config
46
59
 
47
- opt.on('-h', '--help', 'Shows this help message') do
48
- puts @options
60
+ create_project
61
+ end
49
62
 
50
- @stop = true
51
- end
63
+ private
64
+
65
+ ##
66
+ # Displays a short introduction to the installer.
67
+ #
68
+ # @since 0.3
69
+ #
70
+ def intro
71
+ puts wrap_string(
72
+ 'Welcome to the interactive project creator of Zen. ' \
73
+ 'This installer will guide you through the process of creating ' \
74
+ 'a new project using Zen.'
75
+ )
76
+
77
+ puts
78
+ puts wrap_string(
79
+ 'Keep in mind that all settings specified for each project can be ' \
80
+ 'changed to anything you like. Zen tries to make as little ' \
81
+ 'assumptions as possible.'
82
+ )
83
+ end
84
+
85
+ ##
86
+ # Sets the name of the project.
87
+ #
88
+ # @since 0.3
89
+ #
90
+ def setup_name
91
+ heading('Project Name')
92
+
93
+ puts wrap_string(
94
+ 'Each Zen project requires a name. This name is used for the ' \
95
+ 'directory name as well as the session ID.'
96
+ )
97
+
98
+ name = readline('Name of your project', PROJECT_SETTINGS[:name])
99
+ name = name.downcase.gsub(/\s+/, '_')
100
+
101
+ PROJECT_SETTINGS[:name] = name unless name.empty?
102
+ end
103
+
104
+ ##
105
+ # Asks the user for various database settings.
106
+ #
107
+ # @since 0.3
108
+ #
109
+ def database_settings
110
+ heading('Database Settings')
111
+
112
+ puts wrap_string(
113
+ 'Zen stores it\'s data in a SQL database such as PostgreSQL or ' \
114
+ 'MySQL. In order to connect to such a database you must specify ' \
115
+ 'the connection details such as the username and database name.'
116
+ )
117
+
118
+ PROJECT_SETTINGS[:database][:adapter] = readline(
119
+ 'Adapter',
120
+ PROJECT_SETTINGS[:database][:adapter]
121
+ )
122
+
123
+ PROJECT_SETTINGS[:database][:database] = readline(
124
+ 'Database',
125
+ PROJECT_SETTINGS[:database][:database],
126
+ false
127
+ )
128
+
129
+ PROJECT_SETTINGS[:database][:username] = readline('Username', nil, false)
130
+ PROJECT_SETTINGS[:database][:password] = readline('Password', nil, false)
131
+ end
132
+
133
+ ##
134
+ # Asks the user if he/she would like to use a default configuration file
135
+ # for Unicorn or Thin.
136
+ #
137
+ # @since 0.3
138
+ #
139
+ def server_config
140
+ heading('Server Configuration')
141
+
142
+ puts wrap_string(
143
+ 'Zen comes with a few default configuration files that you can use ' \
144
+ 'for your favorite Rack server. Zen comes with default ' \
145
+ 'configuration files for the following Rack servers:'
146
+ )
147
+
148
+ puts
149
+
150
+ SERVER_CONFIGS.each do |name, path|
151
+ puts "* #{name}"
152
+ end
52
153
 
53
- opt.on('-f', '--force', 'Overwrites existing directories') do
54
- Options[:force] = true
154
+ puts
155
+ puts wrap_string(
156
+ 'If you are using a different server or simply don\'t want a ' \
157
+ 'default configuration file you can choose "none".'
158
+ )
159
+
160
+ server = readline('Default server configuration file', 'none').downcase
161
+
162
+ if !server.empty? and server != 'none' \
163
+ and !SERVER_CONFIGS.keys.include?(server.to_sym)
164
+ error('The specified configuration file is invalid')
165
+ end
166
+
167
+ PROJECT_SETTINGS[:server_config] = server.to_sym unless server == 'none'
168
+ end
169
+
170
+ ##
171
+ # Creates a new project based on the settings specified by the user.
172
+ #
173
+ # @since 0.3
174
+ #
175
+ def create_project
176
+ destination = File.join(Dir.pwd, PROJECT_SETTINGS[:name])
177
+
178
+ # Copy the application
179
+ if File.directory?(destination) and !option(:f)
180
+ error('There already is a directory using your project name')
181
+ else
182
+ puts 'Creating base files...'
183
+
184
+ FileUtils.rm_rf(destination)
185
+ FileUtils.cp_r(PROTOTYPE, destination)
186
+ end
187
+
188
+ # Copy the default Rack configuration file.
189
+ if !PROJECT_SETTINGS[:server_config].nil? \
190
+ and !PROJECT_SETTINGS[:server_config].empty?
191
+ puts 'Creating server configuration file...'
192
+
193
+ config = SERVER_CONFIGS[PROJECT_SETTINGS[:server_config]]
194
+
195
+ FileUtils.cp(
196
+ config,
197
+ File.join(destination, 'config', File.basename(config))
198
+ )
199
+ end
200
+
201
+ # Replace all the ERB tags
202
+ puts 'Setting variables...'
203
+
204
+ templates = Dir.glob(File.join(destination, '**', '*.erb'))
205
+
206
+ templates.each do |template|
207
+ processed = File.read(template, File.size(template))
208
+ processed = ERB.new(processed).result(binding)
209
+
210
+ File.open(template, 'w') do |handle|
211
+ handle.write(processed)
55
212
  end
213
+
214
+ # Remove the .erb extension
215
+ FileUtils.mv(
216
+ template,
217
+ File.join(File.dirname(template), File.basename(template, '.erb'))
218
+ )
56
219
  end
220
+
221
+ puts wrap_string(
222
+ "Your project has been created, you can find it in #{destination}"
223
+ )
57
224
  end
58
225
 
59
226
  ##
60
- # Executes the command based on the specified command line arguments.
227
+ # Wraps a string at 80 characters and returns it.
61
228
  #
62
- # @author Yorick Peterse
63
- # @since 0.2.8
64
- # @param [Array] argv An array containing all the additional options that
65
- # were specified in the command line.
229
+ # @since 0.3
230
+ # @param [String] input The string to wrap.
231
+ # @return [String]
66
232
  #
67
- def run(argv = [])
68
- @options.parse!(argv)
233
+ def wrap_string(input)
234
+ input = input.split(/\s+/)
235
+ output = ''
236
+ chars = 0
69
237
 
70
- app = argv.delete_at(0)
238
+ input.each do |chunk|
239
+ length = chunk.length
71
240
 
72
- return if @stop === true
73
- return puts @options if app.nil?
241
+ if ( chars + length ) <= ( 80 - length )
242
+ output += "#{chunk} "
243
+ chars += length
244
+ else
245
+ output += "\n#{chunk} "
246
+ chars = 0
247
+ end
248
+ end
74
249
 
75
- proto = __DIR__('../../../proto/app')
250
+ return output.strip
251
+ end
76
252
 
77
- if File.directory?(app) and Options[:force] === false
78
- return $stderr.puts "The application #{app} already exists, use -f " \
79
- + "to overwrite it."
80
- else
81
- FileUtils.rm_rf(app)
253
+ ##
254
+ # Displays a heading in yellow.
255
+ #
256
+ # @since 0.3
257
+ # @param [String] heading The heading to display.
258
+ #
259
+ def heading(heading)
260
+ puts "\n" + heading.yellow + "\n\n"
261
+ end
262
+
263
+ ##
264
+ # Shows a prompt using Readline.readline and returns the value entered by
265
+ # the user.
266
+ #
267
+ # @since 0.3
268
+ # @param [String] message The message to display in the prompt.
269
+ # @param [String] default The default value to use.
270
+ # @param [TrueClass|FalseClass] newline When set to true an empty line
271
+ # will be shown before the prompt.
272
+ # @return [String]
273
+ #
274
+ def readline(message, default = nil, newline = true)
275
+ puts if newline
276
+
277
+ prompt = "> #{message}"
278
+
279
+ if default
280
+ prompt += " (default: #{default})"
82
281
  end
83
282
 
84
- # Copy the prototype
85
- begin
86
- FileUtils.cp_r(proto, app)
87
- puts "The application has been generated and saved in #{app}"
88
- rescue => e
89
- return $stderr.puts "Failed to generate the application: #{e.message}"
283
+ prompt += ': '
284
+ value = Readline.readline(prompt.blue).strip
285
+
286
+ if value.empty? and !default.nil?
287
+ value = default
90
288
  end
289
+
290
+ return value
291
+ end
292
+
293
+ ##
294
+ # Shows an error and exists the script.
295
+ #
296
+ # @since 0.3
297
+ # @param [String] message The error message to display.
298
+ #
299
+ def error(message)
300
+ puts message.red
301
+ exit(false)
91
302
  end
92
- end # App
303
+ end # Create
93
304
  end # Bin
94
305
  end # Zen
@@ -0,0 +1,84 @@
1
+ module Zen
2
+ #:nodoc:
3
+ module Bin
4
+ ##
5
+ # The default command that is executed.
6
+ #
7
+ # @since 0.3
8
+ #
9
+ class Default < Shebang::Command
10
+ command :default
11
+ banner 'Zen is a modular CMS written using Ramaze.'
12
+ usage 'zen [COMMAND] [OPTIONS]'
13
+
14
+ o :h, :help , 'Shows this help message' , :method => :help
15
+ o :v, :version, 'Shows the current version', :method => :version
16
+
17
+ ##
18
+ # Creates a new instance of the command and creates a list of all the
19
+ # installed commands.
20
+ #
21
+ # @since 0.3
22
+ #
23
+ def initialize
24
+ list_commands
25
+
26
+ super
27
+ end
28
+
29
+ ##
30
+ # Method that is invoked when this command is called.
31
+ #
32
+ # @since 0.3
33
+ #
34
+ def index
35
+ help
36
+ end
37
+
38
+ protected
39
+
40
+ ##
41
+ # Shows the current version of Zen.
42
+ #
43
+ # @since 0.3
44
+ #
45
+ def version
46
+ puts Zen::VERSION
47
+ exit
48
+ end
49
+
50
+ ##
51
+ # Generates an array of "rows" where each row contains the name and
52
+ # description of a command. The descriptions of all commands are aligned
53
+ # based on the length of the longest command name.
54
+ #
55
+ # This method has been ported from Ramaze.
56
+ #
57
+ # @since 0.3
58
+ # @return [Array]
59
+ #
60
+ def list_commands
61
+ cmds = Shebang::Commands.dup
62
+ cmds.delete(:default)
63
+
64
+ return if cmds.empty?
65
+
66
+ cmd_string = ''
67
+ longest = cmds.map { |name, klass| name.to_s }.sort[0].size
68
+
69
+ cmds.each do |name, klass|
70
+ name = name.to_s
71
+ desc = klass.instance_variable_get(:@__banner).to_s
72
+
73
+ while name.length <= longest
74
+ name += ' '
75
+ end
76
+
77
+ cmd_string += " #{name} #{desc}\n"
78
+ end
79
+
80
+ self.class.help('Commands', cmd_string)
81
+ end
82
+ end # Default
83
+ end # Bin
84
+ end # Zen
@@ -16,93 +16,12 @@ module Zen
16
16
  # method for the Users controller, mapped to /admin/users/login. If a user
17
17
  # isn't logged in he/she will be redirected to the login page.
18
18
  #
19
- # @author Yorick Peterse
20
19
  # @since 0.1
21
20
  #
22
21
  class AdminController < Zen::Controller::BaseController
23
22
  layout :admin
24
23
  engine :etanni
25
- helper :blue_form_vendor, :breadcrumb, :user, :acl, :message, :paginate
26
-
27
- # Configure the pagination
28
- trait :paginate => {
29
- :limit => 20,
30
- :var => 'page'
31
- }
32
-
33
- ##
34
- # The initialize method is called upon class initalization and is used to
35
- # process several items before loading the controller(s) for the current
36
- # extension.
37
- #
38
- # @author Yorick Peterse
39
- # @since 1.0
40
- #
41
- def initialize
42
- super
43
-
44
- # Only allow users to access admin/users/login when they aren't logged
45
- # in
46
- if request.env['SCRIPT_NAME'] != 'admin/users/' \
47
- and request.env['PATH_INFO'] != '/login' \
48
- and !logged_in?
49
- message(:error, lang('zen_general.errors.require_login'))
50
- redirect('/admin/users/login')
51
- end
52
- end
53
-
54
- ##
55
- # Shortcut for Zen::Asset.stylesheet.
56
- #
57
- # @author Yorick Peterse
58
- # @see Zen::Asset.stylesheet
59
- # @since 0.2.5
60
- #
61
- def self.stylesheet(files, options = {})
62
- options = {:controller => self}.merge(options)
63
-
64
- ::Zen::Asset.stylesheet(files, options)
65
- end
66
-
67
- ##
68
- # Shortcut for Zen::Asset.javascript.
69
- #
70
- # @author Yorick Peterse
71
- # @see Zen::Asset.javascript
72
- # @since 0.2.5
73
- #
74
- def self.javascript(files, options = {})
75
- options = {:controller => self}.merge(options)
76
-
77
- ::Zen::Asset.javascript(files, options)
78
- end
79
-
80
- # Load all default stylesheets
81
- stylesheet(
82
- [
83
- 'zen/reset',
84
- 'zen/grid',
85
- 'zen/layout',
86
- 'zen/general',
87
- 'zen/forms',
88
- 'zen/tables',
89
- 'zen/buttons',
90
- 'zen/messages'
91
- ],
92
- :global => true
93
- )
94
-
95
- # Load all default javascript files
96
- javascript(
97
- [
98
- 'vendor/mootools/core',
99
- 'vendor/mootools/more',
100
- 'zen/lib/asset',
101
- 'zen/lib/html_table',
102
- 'zen/index'
103
- ],
104
- :global => true
105
- )
24
+ helper :breadcrumb, :asset, :search
106
25
  end # AdminController
107
26
  end # Controller
108
27
  end # Zen