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,4 +1,3 @@
1
- #:nodoc:
2
1
  module Ramaze
3
2
  #:nodoc:
4
3
  module Helper
@@ -6,7 +5,6 @@ module Ramaze
6
5
  # Small helper for the Menus package mainly used to reduce the amount of
7
6
  # code in controllers.
8
7
  #
9
- # @author Yorick Peterse
10
8
  # @since 0.2a
11
9
  #
12
10
  module Menu
@@ -14,11 +12,10 @@ module Ramaze
14
12
  # Checks if there is a menu for the given ID. If this isn't the case the
15
13
  # user will be redirected back to the index page of the menus controller.
16
14
  #
17
- # @author Yorick Peterse
18
15
  # @since 0.2a
19
16
  # @param [Fixnum] menu_id The ID of the menu to validate.
20
17
  # @return [Menus::Model::Menu] The menu that was specified in case it's
21
- # valid.
18
+ # valid.
22
19
  #
23
20
  def validate_menu(menu_id)
24
21
  menu = ::Menus::Model::Menu[menu_id]
@@ -34,11 +31,10 @@ module Ramaze
34
31
  ##
35
32
  # Validates a menu item and returns it if it's valid.
36
33
  #
37
- # @author Yorick Peterse
38
34
  # @since 0.2.8
39
35
  # @param [Fixnum] menu_item_id The ID of the menu item to validate.
40
36
  # @param [Fixnum] menu_id The ID of the menu the item belongs to, used
41
- # when redirecting the user.
37
+ # when redirecting the user.
42
38
  # @return [Menus::Model::MenuItem]
43
39
  #
44
40
  def validate_menu_item(menu_item_id, menu_id)
@@ -64,7 +60,6 @@ module Ramaze
64
60
  # |
65
61
  # |_ Sub 1
66
62
  #
67
- # @author Yorick Peterse
68
63
  # @since 0.2a
69
64
  # @param [Fixnum] menu_id The ID of the current menu group.
70
65
  # @return [Hash]
@@ -91,7 +86,6 @@ module Ramaze
91
86
  ##
92
87
  # Helper method for retrieving descendant navigation items.
93
88
  #
94
- # @author Yorick Peterse
95
89
  # @since 0.2a
96
90
  # @param [Menus::Model::MenuItem] item A MenuItem instance
97
91
  # @param [Fixnum] spaces The amount of unbreakable spaces to use.
@@ -0,0 +1,114 @@
1
+ require 'ramaze/gestalt'
2
+
3
+ module Ramaze
4
+ module Helper
5
+ ##
6
+ # Helper that allows you to render navigation menus in your templates.
7
+ #
8
+ # @since 0.3
9
+ #
10
+ module MenuFrontend
11
+ ##
12
+ # Renders a navigation menu's items based on the menu slug or ID.
13
+ #
14
+ # @example Render a menu by it's slug
15
+ # render_menu('main')
16
+ #
17
+ # @example Render a menu by it's ID
18
+ # render_menu(2)
19
+ #
20
+ # @example Render a menu without sub items
21
+ # render_menu('main', :sub => false)
22
+ #
23
+ # @since 0.3
24
+ # @param [String|Fixnum] menu The slug or ID of a menu to render.
25
+ # @param [Hash] options A hash containing various options to customize
26
+ # the return value.
27
+ # @option options [Fixnum] :limit The amount of menu items to display. Set
28
+ # to 20 by default.
29
+ # @option options [TrueClass|FalseClass] :sub Boolean that indicates if
30
+ # sub items should be rendered or not, set to true by default.
31
+ # @option options [Symbol] :order The sort order method to call, can
32
+ # either be ``:asc`` or ``:desc``, set to ``:asc`` by default.
33
+ # @return [String]
34
+ #
35
+ def render_menu(menu, options = {})
36
+ options = {
37
+ :limit => 20,
38
+ :sub => true,
39
+ :order => :asc
40
+ }.merge(options)
41
+
42
+ menu = Menus::Model::Menu.find_by_pk_or_slug(menu)
43
+ items = Menus::Model::MenuItem \
44
+ .filter(:parent_id => nil, :menu_id => menu.id) \
45
+ .limit(options[:limit]) \
46
+ .order(:sort_order.send(options[:order])) \
47
+ .eager(:parent) \
48
+ .all
49
+
50
+ g = Ramaze::Gestalt.new
51
+ attrs = {}
52
+ tree = {}
53
+
54
+ if !menu.html_class.nil? and !menu.html_class.empty?
55
+ attrs[:class] = menu.html_class
56
+ end
57
+
58
+ if !menu.html_id.nil? and !menu.html_id.empty?
59
+ attrs[:id] = menu.html_id
60
+ end
61
+
62
+ # Build the HTML
63
+ g.ul(attrs) do
64
+ items.each do |item|
65
+ if item.parent_id.nil?
66
+ render_menu_item(item, g, options)
67
+ end
68
+ end
69
+ end
70
+
71
+ return g.to_s
72
+ end
73
+
74
+ private
75
+
76
+ ##
77
+ # Generates the HTML for a single menu item.
78
+ #
79
+ # @since 0.3
80
+ # @param [Menus::Model::MenuItem] item The menu item to render.
81
+ # @param [Ramaze::Gestalt] g An instance of ``Ramaze::Gestalt`` to use
82
+ # for building the HTML.
83
+ # @param [Hash] options A hash of options, see the options hash for
84
+ # {Ramaze::Helper::MenuFrontend#render_menu} for more information.
85
+ #
86
+ def render_menu_item(item, g, options = {})
87
+ attrs = {}
88
+
89
+ if !item.html_class.nil? and !item.html_class.empty?
90
+ attrs[:class] = item.html_class
91
+ end
92
+
93
+ if !item.html_id.nil? and !item.html_id.empty?
94
+ attrs[:id] = item.html_id
95
+ end
96
+
97
+ g.li(attrs) do
98
+ g.a(:href => item.url, :title => item.name) { item.name }
99
+
100
+ # Render any sub menu items
101
+ if options[:sub] == true
102
+ children = item.children
103
+
104
+ if !children.empty?
105
+ g.ul(:class => :children) do
106
+ children.each { |child| render_menu_item(child, g, options) }
107
+ end
108
+ end
109
+ end
110
+ end
111
+ end
112
+ end # MenuFrontend
113
+ end # Helper
114
+ end # Ramaze
@@ -0,0 +1,48 @@
1
+ # encoding: utf-8
2
+
3
+ Zen::Language::Translation.add do |trans|
4
+ trans.language = 'en'
5
+ trans.name = 'menu_items'
6
+
7
+ trans.translate do |t|
8
+ t['titles.index'] = 'Menu Items'
9
+ t['titles.edit'] = 'Edit Menu Item'
10
+ t['titles.new'] = 'Create Menu Item'
11
+
12
+ t['labels.id'] = '#'
13
+ t['labels.parent_id'] = 'Parent'
14
+ t['labels.name'] = 'Name'
15
+ t['labels.url'] = 'URL'
16
+ t['labels.order'] = 'Order'
17
+ t['labels.html_class'] = 'HTML class'
18
+ t['labels.html_id'] = 'HTML ID'
19
+
20
+ t['descriptions.name'] = 'The text that will be displayed in the link.'
21
+ t['descriptions.url'] = 'The location to which the link will point.'
22
+ t['descriptions.order'] = 'A number that indicates the sort order.'
23
+ t['descriptions.html_id'] = 'Specify an ID to apply to this item.'
24
+ t['descriptions.html_class'] = 'Specify a class name (or multiple names) ' \
25
+ 'to apply to this item.'
26
+
27
+ t['messages.no_items'] = 'No menu items were found.'
28
+
29
+ t['buttons.new'] = 'Add menu item'
30
+ t['buttons.save'] = 'Save menu item'
31
+ t['buttons.delete'] = 'Delete selected menu items'
32
+
33
+ t['success.new'] = 'The menu item has been created.'
34
+ t['success.save'] = 'The menu item has been modified.'
35
+ t['success.delete'] = 'The selected menu items have been deleted.'
36
+
37
+ t['errors.new'] = 'The menu item could not be created.'
38
+ t['errors.save'] = 'The menu item could not be modified.'
39
+ t['errors.delete'] = 'The menu item with ID #%s could not be deleted.'
40
+ t['errors.no_delete'] = 'You need to specify at least one item to delete.'
41
+ t['errors.invalid_item'] = 'The specified menu item is invalid.'
42
+
43
+ t['permissions.show'] = 'Show menu item'
44
+ t['permissions.edit'] = 'Edit menu item'
45
+ t['permissions.new'] = 'Add menu item'
46
+ t['permissions.delete'] = 'Delete menu item'
47
+ end
48
+ end
@@ -0,0 +1,48 @@
1
+ # encoding: utf-8
2
+
3
+ Zen::Language::Translation.add do |trans|
4
+ trans.language = 'en'
5
+ trans.name = 'menus'
6
+
7
+ trans.translate do |t|
8
+ t['titles.index'] = 'Menus'
9
+ t['titles.edit'] = 'Edit Menu'
10
+ t['titles.new'] = 'Add Menu'
11
+
12
+ t['labels.id'] = '#'
13
+ t['labels.name'] = 'Name'
14
+ t['labels.slug'] = 'Slug'
15
+ t['labels.description'] = 'Description'
16
+ t['labels.html_class'] = 'HTML class'
17
+ t['labels.html_id'] = 'HTML ID'
18
+ t['labels.manage_items'] = 'Manage menu items'
19
+
20
+ t['descriptions.name'] = 'Specify the name of the menu.'
21
+ t['descriptions.slug'] = 'Specify the URL friendly name of the menu.'
22
+ t['descriptions.html_class'] = 'A number of classes to apply to the menu.'
23
+ t['descriptions.html_id'] = 'An ID to apply to the menu.'
24
+
25
+ t['messages.no_menus'] = 'No menus were found.'
26
+
27
+ t['buttons.new'] = 'Add menu'
28
+ t['buttons.save'] = 'Save menu'
29
+ t['buttons.delete'] = 'Delete selected menus'
30
+
31
+ t['success.new'] = 'The menu has been created.'
32
+ t['success.save'] = 'The menu has been modified.'
33
+ t['success.delete'] = 'The selected menus have been deleted.'
34
+
35
+ t['errors.new'] = 'The menu could not be created.'
36
+ t['errors.save'] = 'The menu could not be modified.'
37
+ t['errors.delete'] = 'The menu with ID #%s could not be deleted.'
38
+ t['errors.no_delete'] = 'You need to specify at least one menu to delete.'
39
+ t['errors.invalid_menu'] = 'The specified menu is invalid.'
40
+
41
+ t['permissions.show'] = 'Show menu'
42
+ t['permissions.edit'] = 'Edit menu'
43
+ t['permissions.new'] = 'Add menu'
44
+ t['permissions.delete'] = 'Delete menu'
45
+
46
+ t['description'] = 'Manage menus and menu items.'
47
+ end
48
+ end
@@ -0,0 +1,48 @@
1
+ # encoding: utf-8
2
+
3
+ Zen::Language::Translation.add do |trans|
4
+ trans.language = 'nl'
5
+ trans.name = 'menu_items'
6
+
7
+ trans.translate do |t|
8
+ t['titles.index'] = 'Menu items'
9
+ t['titles.edit'] = 'Menu item aanpassen'
10
+ t['titles.new'] = 'Menu item aanmaken'
11
+
12
+ t['labels.id'] = '#'
13
+ t['labels.parent_id'] = 'Hoofd item'
14
+ t['labels.name'] = 'Naam'
15
+ t['labels.url'] = 'URL'
16
+ t['labels.order'] = 'Volgorde'
17
+ t['labels.html_class'] = 'HTML klasse'
18
+ t['labels.html_id'] = 'HTML ID'
19
+
20
+ t['descriptions.name'] = 'De naam/label van het menu item.'
21
+ t['descriptions.url'] = 'De URL van het menu item.'
22
+ t['descriptions.order'] = 'De sorteer volgorde.'
23
+ t['descriptions.html_class'] = 'Een of meerdere klasses voor dit item.'
24
+ t['descriptions.html_id'] = 'Een ID voor dit item.'
25
+
26
+ t['messages.no_items'] = 'Er zijn geen menu items gevonden.'
27
+
28
+ t['buttons.new'] = 'Menu item toevoegen'
29
+ t['buttons.save'] = 'Menu item opslaan'
30
+ t['buttons.delete'] = 'Geselecteerde menu items verwijderen'
31
+
32
+ t['success.new'] = 'Het menu item is aangemaakt.'
33
+ t['success.save'] = 'Het menu item is aangepast.'
34
+ t['success.delete'] = 'De menu items zijn verwijderd.'
35
+
36
+ t['errors.new'] = 'Het menu item kon niet worden aangemaakt.'
37
+ t['errors.save'] = 'Het menu item kon niet worden aangepast.'
38
+ t['errors.delete'] = 'Het menu item met ID #%s kon niet worden verwijderd.'
39
+ t['errors.no_delete'] = 'U moet ten minste 1 item specificeren ' \
40
+ 'om te verwijderen.'
41
+ t['errors.invalid_item'] = 'Het opgegeven menu item is ongeldig.'
42
+
43
+ t['permissions.show'] = 'Menu item weergeven'
44
+ t['permissions.edit'] = 'Menu item aanpassen'
45
+ t['permissions.new'] = 'Menu item toevoegen'
46
+ t['permissions.delete'] = 'Menu item verwijderen'
47
+ end
48
+ end
@@ -0,0 +1,50 @@
1
+ # encoding: utf-8
2
+
3
+ Zen::Language::Translation.add do |trans|
4
+ trans.language = 'nl'
5
+ trans.name = 'menus'
6
+
7
+ trans.translate do |t|
8
+ t['titles.index'] = 'Menu\'s'
9
+ t['titles.edit'] = 'Menu aanpassen'
10
+ t['titles.new'] = 'Menu aanmaken'
11
+
12
+ t['labels.id'] = '#'
13
+ t['labels.name'] = 'Naam'
14
+ t['labels.slug'] = 'Slug'
15
+ t['labels.description'] = 'Beschrijving'
16
+ t['labels.html_class'] = 'HTML klasse'
17
+ t['labels.html_id'] = 'HTML ID'
18
+ t['labels.manage_items'] = 'Menu items beheren'
19
+
20
+ t['descriptions.name'] = 'De naam van het menu.'
21
+ t['descriptions.slug'] = 'Een URL vriendelijke versie van de ' \
22
+ 'menu naam.'
23
+ t['descriptions.html_class'] = 'Een of meerdere klasses voor dit menu.'
24
+ t['descriptions.html_id'] = 'Een ID voor dit menu.'
25
+
26
+ t['messages.no_menus'] = 'Er zijn geen menu\'s gevonden.'
27
+
28
+ t['buttons.new'] = 'Menu toevoegen'
29
+ t['buttons.save'] = 'Menu opslaan'
30
+ t['buttons.delete'] = 'Geselecteerde menu\'s verwijderen'
31
+
32
+ t['success.new'] = 'Het menu is aangemaakt.'
33
+ t['success.save'] = 'Het menu is aangepast.'
34
+ t['success.delete'] = 'De geselecteerde menu\'s zijn verwijderd.'
35
+
36
+ t['errors.new'] = 'Het menu kon niet worden aangemaakt.'
37
+ t['errors.save'] = 'Het menu kon niet worden aangepast.'
38
+ t['errors.delete'] = 'Het menu met ID #%s kon niet worden verwijderd.'
39
+ t['errors.no_delete'] = 'U moet ten minste 1 menu specificeren ' \
40
+ 'om te verwijderen.'
41
+ t['errors.invalid_menu'] = 'Het opgegeven menu is ongeldig.'
42
+
43
+ t['description'] = 'Beheren van menu\'s en menu items.'
44
+
45
+ t['permissions.show'] = 'Menu weergeven'
46
+ t['permissions.edit'] = 'Menu aanpassen'
47
+ t['permissions.new'] = 'Menu toevoegen'
48
+ t['permissions.delete'] = 'Menu verwijderen'
49
+ end
50
+ end
@@ -1,37 +1,44 @@
1
- #:nodoc:
2
1
  module Menus
3
2
  #:nodoc:
4
3
  module Model
5
4
  ##
6
- # Model used for managing groups of menu items. This model uses the
7
- # following Sequel plugins:
5
+ # Model used for managing groups of menu items.
8
6
  #
9
- # * sluggable
10
- #
11
- # @author Yorick Peterse
12
7
  # @since 0.2a
13
8
  #
14
9
  class Menu < Sequel::Model
10
+ include Zen::Model::Helper
11
+
15
12
  plugin :sluggable, :source => :name, :freeze => false
16
13
 
17
- # Define our relations
18
- one_to_many :menu_items, :class => "Menus::Model::MenuItem"
14
+ one_to_many :menu_items, :class => 'Menus::Model::MenuItem'
15
+
16
+ ##
17
+ # Searches for a set of menus.
18
+ #
19
+ # @since 16-10-2011
20
+ # @param [String] query The search query.
21
+ # @return [Mixed]
22
+ #
23
+ def self.search(query)
24
+ return filter(
25
+ search_column(:name, query) |
26
+ search_column(:html_class, query) |
27
+ search_column(:html_id, query)
28
+ )
29
+ end
19
30
 
20
31
  ##
21
32
  # Specifies all validates rules used when creating or updating a menu.
22
- # A slug will be generated when a menu is first created but after that
23
- # they are required to ensure that they don't collide with existing slugs.
24
33
  #
25
- # @author Yorick Peterse
26
34
  # @since 0.2a
27
35
  #
28
36
  def validate
29
- validates_presence :name
30
- validates_presence :slug unless new?
31
- validates_unique :slug
32
-
33
- # Prevent people from entering random crap for class and ID names
34
- validates_format(/^[a-zA-Z\-_0-9]*/, [:html_class, :html_id])
37
+ validates_presence(:name)
38
+ validates_unique(:slug)
39
+ validates_max_length(255, [:name, :slug, :html_class, :html_id])
40
+ validates_format(/^[a-zA-Z\-_0-9\s]*$/, :html_class)
41
+ validates_format(/^[a-zA-Z\-_0-9]*$/ , :html_id)
35
42
  end
36
43
  end # Menu
37
44
  end # Model
@@ -1,36 +1,60 @@
1
- #:nodoc:
2
1
  module Menus
3
2
  #:nodoc:
4
3
  module Model
5
4
  ##
6
5
  # Model used for managing individual menu items in a group.
7
- # This model uses the following plugins:
8
6
  #
9
- # * tree
10
- #
11
- # @author Yorick Peterse
12
7
  # @since 0.2a
13
8
  #
14
9
  class MenuItem < Sequel::Model
10
+ include Zen::Model::Helper
11
+
15
12
  plugin :tree, :order => :sort_order
16
13
 
17
14
  many_to_one :menu , :class => 'Menus::Model::Menu'
18
15
  many_to_one :parent, :class => self
19
16
 
20
17
  ##
21
- # Specifies all validation rules that will be used when creating or
18
+ # Searches for a set of menu items.
19
+ #
20
+ # @since 16-10-2011
21
+ # @param [String] query The search query.
22
+ # @return [Mixed]
23
+ #
24
+ def self.search(query)
25
+ return filter(
26
+ search_column(:name, query) |
27
+ search_column(:html_class, query) |
28
+ search_column(:html_id, query)
29
+ )
30
+ end
31
+
32
+ ##
33
+ # Specifies all validation rules that will be used when creating or
22
34
  # updating a menu item.
23
35
  #
24
- # @author Yorick Peterse
25
36
  # @since 0.2a
26
37
  #
27
38
  def validate
28
- validates_presence :name
29
- validates_presence :url
30
- validates_integer [:sort_order, :parent_id]
31
-
32
- # Prevent people from entering random crap for class and ID names
33
- validates_format(/^[a-zA-Z\-_0-9]*/, [:html_class, :html_id])
39
+ validates_presence([:name, :url])
40
+ validates_max_length(255, [:name, :url, :html_class, :html_id])
41
+ validates_integer([:sort_order, :parent_id])
42
+ validates_format(/^[a-zA-Z\-_0-9\s]*$/, :html_class)
43
+ validates_format(/^[a-zA-Z\-_0-9]*$/ , :html_id)
44
+ end
45
+
46
+ ##
47
+ # Sets the ID of the parent navigation item but *only* if it's not empty
48
+ # and not the same as the current ID.
49
+ #
50
+ # @since 0.3
51
+ # @param [Fixnum] parent_id The ID of the parent navigation item.
52
+ #
53
+ def parent_id=(parent_id)
54
+ if !(parent_id.respond_to?(:empty?) and !parent_id.empty?) \
55
+ and parent_id != self.id
56
+ super(parent_id)
57
+ end
34
58
  end
35
59
  end # MenuItem
36
60
  end # Model