zen 0.1a

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 (338) hide show
  1. data/LICENSE +19 -0
  2. data/MANIFEST +337 -0
  3. data/README.textile +42 -0
  4. data/Rakefile +6 -0
  5. data/bin/zen +9 -0
  6. data/doc/Categories.html +93 -0
  7. data/doc/Categories/Controllers.html +93 -0
  8. data/doc/Categories/Controllers/Categories.html +995 -0
  9. data/doc/Categories/Controllers/CategoryGroups.html +878 -0
  10. data/doc/Categories/Models.html +97 -0
  11. data/doc/Categories/Models/Category.html +269 -0
  12. data/doc/Categories/Models/CategoryGroup.html +231 -0
  13. data/doc/Comments.html +93 -0
  14. data/doc/Comments/Controllers.html +93 -0
  15. data/doc/Comments/Controllers/Comments.html +797 -0
  16. data/doc/Comments/Controllers/CommentsForm.html +487 -0
  17. data/doc/Comments/Liquid.html +93 -0
  18. data/doc/Comments/Liquid/CommentForm.html +522 -0
  19. data/doc/Comments/Liquid/Comments.html +543 -0
  20. data/doc/Comments/Models.html +95 -0
  21. data/doc/Comments/Models/Comment.html +260 -0
  22. data/doc/CustomFields.html +93 -0
  23. data/doc/CustomFields/Controllers.html +93 -0
  24. data/doc/CustomFields/Controllers/CustomFieldGroups.html +902 -0
  25. data/doc/CustomFields/Controllers/CustomFields.html +974 -0
  26. data/doc/CustomFields/Models.html +97 -0
  27. data/doc/CustomFields/Models/CustomField.html +272 -0
  28. data/doc/CustomFields/Models/CustomFieldGroup.html +259 -0
  29. data/doc/CustomFields/Models/CustomFieldValue.html +154 -0
  30. data/doc/Ramaze.html +93 -0
  31. data/doc/Ramaze/Helper.html +93 -0
  32. data/doc/Ramaze/Helper/ACL.html +531 -0
  33. data/doc/Ramaze/Helper/Asset.html +617 -0
  34. data/doc/Ramaze/Helper/Breadcrumb.html +411 -0
  35. data/doc/Ramaze/Helper/Common.html +738 -0
  36. data/doc/Sections.html +93 -0
  37. data/doc/Sections/Controllers.html +93 -0
  38. data/doc/Sections/Controllers/SectionEntries.html +1100 -0
  39. data/doc/Sections/Controllers/Sections.html +953 -0
  40. data/doc/Sections/Liquid.html +93 -0
  41. data/doc/Sections/Liquid/SectionEntries.html +674 -0
  42. data/doc/Sections/Liquid/Sections.html +494 -0
  43. data/doc/Sections/Models.html +97 -0
  44. data/doc/Sections/Models/Section.html +272 -0
  45. data/doc/Sections/Models/SectionEntry.html +264 -0
  46. data/doc/Sequel.html +91 -0
  47. data/doc/Sequel/Model.html +243 -0
  48. data/doc/Settings.html +93 -0
  49. data/doc/Settings/Controllers.html +91 -0
  50. data/doc/Settings/Controllers/Settings.html +565 -0
  51. data/doc/Settings/Liquid.html +91 -0
  52. data/doc/Settings/Liquid/Setting.html +426 -0
  53. data/doc/Settings/Models.html +95 -0
  54. data/doc/Settings/Models/Setting.html +293 -0
  55. data/doc/Users.html +93 -0
  56. data/doc/Users/Controllers.html +93 -0
  57. data/doc/Users/Controllers/AccessRules.html +904 -0
  58. data/doc/Users/Controllers/UserGroups.html +879 -0
  59. data/doc/Users/Controllers/Users.html +1124 -0
  60. data/doc/Users/Liquid.html +93 -0
  61. data/doc/Users/Liquid/User.html +480 -0
  62. data/doc/Users/Liquid/Users.html +495 -0
  63. data/doc/Users/Models.html +97 -0
  64. data/doc/Users/Models/AccessRule.html +257 -0
  65. data/doc/Users/Models/User.html +649 -0
  66. data/doc/Users/Models/UserGroup.html +267 -0
  67. data/doc/Zen.html +391 -0
  68. data/doc/Zen/Bin.html +113 -0
  69. data/doc/Zen/Bin/Base.html +727 -0
  70. data/doc/Zen/Controllers.html +115 -0
  71. data/doc/Zen/Controllers/AdminController.html +298 -0
  72. data/doc/Zen/Controllers/BaseController.html +272 -0
  73. data/doc/Zen/Controllers/FrontendController.html +164 -0
  74. data/doc/Zen/Controllers/MainController.html +421 -0
  75. data/doc/Zen/Database.html +498 -0
  76. data/doc/Zen/Language.html +660 -0
  77. data/doc/Zen/Liquid.html +117 -0
  78. data/doc/Zen/Liquid/ControllerBehavior.html +448 -0
  79. data/doc/Zen/Liquid/General.html +444 -0
  80. data/doc/Zen/Liquid/Redirect.html +435 -0
  81. data/doc/Zen/Liquid/Strip.html +447 -0
  82. data/doc/Zen/Logger.html +393 -0
  83. data/doc/Zen/Package.html +909 -0
  84. data/doc/_index.html +724 -0
  85. data/doc/class_list.html +36 -0
  86. data/doc/css/common.css +1 -0
  87. data/doc/css/full_list.css +53 -0
  88. data/doc/css/style.css +310 -0
  89. data/doc/file.README.html +86 -0
  90. data/doc/file_list.html +38 -0
  91. data/doc/frames.html +13 -0
  92. data/doc/index.html +86 -0
  93. data/doc/js/app.js +203 -0
  94. data/doc/js/full_list.js +149 -0
  95. data/doc/js/jquery.js +154 -0
  96. data/doc/method_list.html +1139 -0
  97. data/doc/top-level-namespace.html +88 -0
  98. data/lib/zen.rb +77 -0
  99. data/lib/zen/base/database.rb +105 -0
  100. data/lib/zen/base/language.rb +132 -0
  101. data/lib/zen/base/logger.rb +54 -0
  102. data/lib/zen/base/package.rb +233 -0
  103. data/lib/zen/base/version.rb +11 -0
  104. data/lib/zen/bin/zen_binary.rb +173 -0
  105. data/lib/zen/controller/admin_controller.rb +60 -0
  106. data/lib/zen/controller/base_controller.rb +39 -0
  107. data/lib/zen/controller/frontend_controller.rb +16 -0
  108. data/lib/zen/controller/main_controller.rb +93 -0
  109. data/lib/zen/helper/acl.rb +124 -0
  110. data/lib/zen/helper/asset.rb +104 -0
  111. data/lib/zen/helper/breadcrumb.rb +71 -0
  112. data/lib/zen/helper/common.rb +157 -0
  113. data/lib/zen/language/en/zen_general.rb +21 -0
  114. data/lib/zen/language/en/zen_models.rb +39 -0
  115. data/lib/zen/layout/admin.xhtml +72 -0
  116. data/lib/zen/layout/login.xhtml +44 -0
  117. data/lib/zen/liquid/controller_behavior.rb +55 -0
  118. data/lib/zen/liquid/general.rb +69 -0
  119. data/lib/zen/liquid/redirect.rb +47 -0
  120. data/lib/zen/liquid/strip.rb +58 -0
  121. data/lib/zen/model/methods.rb +26 -0
  122. data/lib/zen/model/settings.rb +27 -0
  123. data/lib/zen/packages/categories/LICENSE +19 -0
  124. data/lib/zen/packages/categories/README.textile +0 -0
  125. data/lib/zen/packages/categories/lib/categories.rb +24 -0
  126. data/lib/zen/packages/categories/lib/categories/controller/categories.rb +202 -0
  127. data/lib/zen/packages/categories/lib/categories/controller/category_groups.rb +173 -0
  128. data/lib/zen/packages/categories/lib/categories/language/en/categories.rb +38 -0
  129. data/lib/zen/packages/categories/lib/categories/language/en/category_groups.rb +37 -0
  130. data/lib/zen/packages/categories/lib/categories/model/category.rb +42 -0
  131. data/lib/zen/packages/categories/lib/categories/model/category_group.rb +29 -0
  132. data/lib/zen/packages/categories/lib/categories/view/admin/categories/edit.xhtml +7 -0
  133. data/lib/zen/packages/categories/lib/categories/view/admin/categories/form.xhtml +36 -0
  134. data/lib/zen/packages/categories/lib/categories/view/admin/categories/index.xhtml +70 -0
  135. data/lib/zen/packages/categories/lib/categories/view/admin/categories/new.xhtml +7 -0
  136. data/lib/zen/packages/categories/lib/categories/view/admin/category_groups/edit.xhtml +7 -0
  137. data/lib/zen/packages/categories/lib/categories/view/admin/category_groups/form.xhtml +18 -0
  138. data/lib/zen/packages/categories/lib/categories/view/admin/category_groups/index.xhtml +72 -0
  139. data/lib/zen/packages/categories/lib/categories/view/admin/category_groups/new.xhtml +7 -0
  140. data/lib/zen/packages/categories/migrations/.gitkeep +0 -0
  141. data/lib/zen/packages/categories/migrations/1295282303_create_schema.rb +40 -0
  142. data/lib/zen/packages/comments/LICENSE +19 -0
  143. data/lib/zen/packages/comments/README.textile +0 -0
  144. data/lib/zen/packages/comments/lib/comments.rb +26 -0
  145. data/lib/zen/packages/comments/lib/comments/controller/comments.rb +157 -0
  146. data/lib/zen/packages/comments/lib/comments/controller/comments_form.rb +135 -0
  147. data/lib/zen/packages/comments/lib/comments/language/en/comments.rb +52 -0
  148. data/lib/zen/packages/comments/lib/comments/liquid/comment_form.rb +97 -0
  149. data/lib/zen/packages/comments/lib/comments/liquid/comments.rb +115 -0
  150. data/lib/zen/packages/comments/lib/comments/model/comment.rb +34 -0
  151. data/lib/zen/packages/comments/lib/comments/view/admin/comments/edit.xhtml +7 -0
  152. data/lib/zen/packages/comments/lib/comments/view/admin/comments/form.xhtml +31 -0
  153. data/lib/zen/packages/comments/lib/comments/view/admin/comments/index.xhtml +74 -0
  154. data/lib/zen/packages/comments/migrations/.gitkeep +0 -0
  155. data/lib/zen/packages/comments/migrations/1295282202_create_schema.rb +24 -0
  156. data/lib/zen/packages/comments/migrations/1296949631_add_defensio_signature.rb +11 -0
  157. data/lib/zen/packages/custom_fields/LICENSE +19 -0
  158. data/lib/zen/packages/custom_fields/README.textile +0 -0
  159. data/lib/zen/packages/custom_fields/lib/custom_fields.rb +24 -0
  160. data/lib/zen/packages/custom_fields/lib/custom_fields/controller/custom_field_groups.rb +179 -0
  161. data/lib/zen/packages/custom_fields/lib/custom_fields/controller/custom_fields.rb +194 -0
  162. data/lib/zen/packages/custom_fields/lib/custom_fields/language/en/custom_field_groups.rb +45 -0
  163. data/lib/zen/packages/custom_fields/lib/custom_fields/language/en/custom_fields.rb +64 -0
  164. data/lib/zen/packages/custom_fields/lib/custom_fields/model/custom_field.rb +41 -0
  165. data/lib/zen/packages/custom_fields/lib/custom_fields/model/custom_field_group.rb +32 -0
  166. data/lib/zen/packages/custom_fields/lib/custom_fields/model/custom_field_value.rb +20 -0
  167. data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_field_groups/edit.xhtml +7 -0
  168. data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_field_groups/form.xhtml +18 -0
  169. data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_field_groups/index.xhtml +88 -0
  170. data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_field_groups/new.xhtml +7 -0
  171. data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_fields/edit.xhtml +7 -0
  172. data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_fields/form.xhtml +50 -0
  173. data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_fields/index.xhtml +75 -0
  174. data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_fields/new.xhtml +7 -0
  175. data/lib/zen/packages/custom_fields/migrations/.gitkeep +0 -0
  176. data/lib/zen/packages/custom_fields/migrations/1295255665_create_schema.rb +53 -0
  177. data/lib/zen/packages/sections/LICENSE +19 -0
  178. data/lib/zen/packages/sections/README.textile +43 -0
  179. data/lib/zen/packages/sections/lib/sections.rb +33 -0
  180. data/lib/zen/packages/sections/lib/sections/controller/section_entries.rb +251 -0
  181. data/lib/zen/packages/sections/lib/sections/controller/sections.rb +205 -0
  182. data/lib/zen/packages/sections/lib/sections/language/en/section_entries.rb +58 -0
  183. data/lib/zen/packages/sections/lib/sections/language/en/sections.rb +63 -0
  184. data/lib/zen/packages/sections/lib/sections/liquid/section_entries.rb +209 -0
  185. data/lib/zen/packages/sections/lib/sections/liquid/sections.rb +76 -0
  186. data/lib/zen/packages/sections/lib/sections/model/section.rb +43 -0
  187. data/lib/zen/packages/sections/lib/sections/model/section_entry.rb +43 -0
  188. data/lib/zen/packages/sections/lib/sections/view/admin/edit.xhtml +7 -0
  189. data/lib/zen/packages/sections/lib/sections/view/admin/form.xhtml +54 -0
  190. data/lib/zen/packages/sections/lib/sections/view/admin/index.xhtml +77 -0
  191. data/lib/zen/packages/sections/lib/sections/view/admin/new.xhtml +7 -0
  192. data/lib/zen/packages/sections/lib/sections/view/admin/section_entries/edit.xhtml +7 -0
  193. data/lib/zen/packages/sections/lib/sections/view/admin/section_entries/form.xhtml +147 -0
  194. data/lib/zen/packages/sections/lib/sections/view/admin/section_entries/index.xhtml +74 -0
  195. data/lib/zen/packages/sections/lib/sections/view/admin/section_entries/new.xhtml +7 -0
  196. data/lib/zen/packages/sections/migrations/.gitkeep +0 -0
  197. data/lib/zen/packages/sections/migrations/1295251836_create_schema.rb +35 -0
  198. data/lib/zen/packages/sections/migrations/1296335671_userdata_section_entries.rb +18 -0
  199. data/lib/zen/packages/sections/migrations/1296936110_drop_comment_antispam.rb +11 -0
  200. data/lib/zen/packages/settings/LICENSE +0 -0
  201. data/lib/zen/packages/settings/README.textile +0 -0
  202. data/lib/zen/packages/settings/lib/settings.rb +22 -0
  203. data/lib/zen/packages/settings/lib/settings/controller/settings.rb +113 -0
  204. data/lib/zen/packages/settings/lib/settings/language/en/settings.rb +56 -0
  205. data/lib/zen/packages/settings/lib/settings/liquid/setting.rb +56 -0
  206. data/lib/zen/packages/settings/lib/settings/model/setting.rb +38 -0
  207. data/lib/zen/packages/settings/lib/settings/view/admin/settings/index.xhtml +79 -0
  208. data/lib/zen/packages/settings/migrations/.gitkeep +0 -0
  209. data/lib/zen/packages/settings/migrations/1295597111_create_schema.rb +31 -0
  210. data/lib/zen/packages/users/LICENSE +19 -0
  211. data/lib/zen/packages/users/README.textile +0 -0
  212. data/lib/zen/packages/users/lib/users.rb +35 -0
  213. data/lib/zen/packages/users/lib/users/controller/access_rules.rb +186 -0
  214. data/lib/zen/packages/users/lib/users/controller/user_groups.rb +171 -0
  215. data/lib/zen/packages/users/lib/users/controller/users.rb +240 -0
  216. data/lib/zen/packages/users/lib/users/language/en/access_rules.rb +49 -0
  217. data/lib/zen/packages/users/lib/users/language/en/user_groups.rb +42 -0
  218. data/lib/zen/packages/users/lib/users/language/en/users.rb +63 -0
  219. data/lib/zen/packages/users/lib/users/liquid/user.rb +75 -0
  220. data/lib/zen/packages/users/lib/users/liquid/users.rb +80 -0
  221. data/lib/zen/packages/users/lib/users/model/access_rule.rb +29 -0
  222. data/lib/zen/packages/users/lib/users/model/user.rb +96 -0
  223. data/lib/zen/packages/users/lib/users/model/user_group.rb +38 -0
  224. data/lib/zen/packages/users/lib/users/public/admin/js/users/access_rules.js +43 -0
  225. data/lib/zen/packages/users/lib/users/view/admin/access_rules/edit.xhtml +7 -0
  226. data/lib/zen/packages/users/lib/users/view/admin/access_rules/form.xhtml +68 -0
  227. data/lib/zen/packages/users/lib/users/view/admin/access_rules/index.xhtml +85 -0
  228. data/lib/zen/packages/users/lib/users/view/admin/access_rules/new.xhtml +7 -0
  229. data/lib/zen/packages/users/lib/users/view/admin/user_groups/edit.xhtml +7 -0
  230. data/lib/zen/packages/users/lib/users/view/admin/user_groups/form.xhtml +19 -0
  231. data/lib/zen/packages/users/lib/users/view/admin/user_groups/index.xhtml +69 -0
  232. data/lib/zen/packages/users/lib/users/view/admin/user_groups/new.xhtml +7 -0
  233. data/lib/zen/packages/users/lib/users/view/admin/users/edit.xhtml +7 -0
  234. data/lib/zen/packages/users/lib/users/view/admin/users/form.xhtml +25 -0
  235. data/lib/zen/packages/users/lib/users/view/admin/users/index.xhtml +73 -0
  236. data/lib/zen/packages/users/lib/users/view/admin/users/login.xhtml +22 -0
  237. data/lib/zen/packages/users/lib/users/view/admin/users/new.xhtml +7 -0
  238. data/lib/zen/packages/users/migrations/.gitkeep +0 -0
  239. data/lib/zen/packages/users/migrations/1295281013_create_schema.rb +54 -0
  240. data/lib/zen/public/admin/css/boilerplate.css +174 -0
  241. data/lib/zen/public/admin/css/general.css +485 -0
  242. data/lib/zen/public/admin/css/grid.css +119 -0
  243. data/lib/zen/public/admin/css/layout.css +111 -0
  244. data/lib/zen/public/admin/images/general/noise.jpg +0 -0
  245. data/lib/zen/public/admin/images/icons/accept.png +0 -0
  246. data/lib/zen/public/admin/images/icons/add.png +0 -0
  247. data/lib/zen/public/admin/images/icons/back.png +0 -0
  248. data/lib/zen/public/admin/images/icons/bold.png +0 -0
  249. data/lib/zen/public/admin/images/icons/close.png +0 -0
  250. data/lib/zen/public/admin/images/icons/delete.png +0 -0
  251. data/lib/zen/public/admin/images/icons/edit.png +0 -0
  252. data/lib/zen/public/admin/images/icons/error.png +0 -0
  253. data/lib/zen/public/admin/images/icons/help.png +0 -0
  254. data/lib/zen/public/admin/images/icons/info.png +0 -0
  255. data/lib/zen/public/admin/images/icons/italic.png +0 -0
  256. data/lib/zen/public/admin/images/icons/large/error.png +0 -0
  257. data/lib/zen/public/admin/images/icons/large/notice.png +0 -0
  258. data/lib/zen/public/admin/images/icons/large/success.png +0 -0
  259. data/lib/zen/public/admin/images/icons/link.png +0 -0
  260. data/lib/zen/public/admin/images/icons/logout.png +0 -0
  261. data/lib/zen/public/admin/images/icons/ol.png +0 -0
  262. data/lib/zen/public/admin/images/icons/pdf.png +0 -0
  263. data/lib/zen/public/admin/images/icons/ul.png +0 -0
  264. data/lib/zen/public/admin/images/icons/user.png +0 -0
  265. data/lib/zen/public/admin/images/icons/view.png +0 -0
  266. data/lib/zen/public/admin/js/mootools/core.js +436 -0
  267. data/lib/zen/public/admin/js/mootools/more.js +288 -0
  268. data/lib/zen/public/admin/js/zen/editor/base.js +265 -0
  269. data/lib/zen/public/admin/js/zen/editor/drivers/html.js +104 -0
  270. data/lib/zen/public/admin/js/zen/editor/drivers/markdown.js +102 -0
  271. data/lib/zen/public/admin/js/zen/editor/drivers/textile.js +102 -0
  272. data/lib/zen/public/admin/js/zen/init.js +57 -0
  273. data/lib/zen/public/admin/js/zen/modal.js +159 -0
  274. data/lib/zen/public/admin/js/zen/notification.js +213 -0
  275. data/lib/zen/public/admin/js/zen/tabs.js +263 -0
  276. data/lib/zen/tasks.rb +6 -0
  277. data/pkg/.gitkeep +0 -0
  278. data/proto/app/Rakefile +2 -0
  279. data/proto/app/app.rb +20 -0
  280. data/proto/app/config.ru +18 -0
  281. data/proto/app/config/config.rb +17 -0
  282. data/proto/app/config/database.rb +18 -0
  283. data/proto/app/config/middlewares.rb +23 -0
  284. data/proto/app/config/requires.rb +8 -0
  285. data/proto/app/logs/.gitkeep +0 -0
  286. data/proto/app/public/.gitkeep +0 -0
  287. data/proto/app/start.rb +22 -0
  288. data/proto/app/vendor/.gitkeep +0 -0
  289. data/proto/app/vendor/themes/.gitkeep +0 -0
  290. data/proto/migration.rb +11 -0
  291. data/proto/module/LICENSE +0 -0
  292. data/proto/module/README.textile +0 -0
  293. data/proto/module/lib/module.rb +15 -0
  294. data/proto/module/lib/module/controller/controllers.rb +86 -0
  295. data/proto/module/lib/module/language/en/languages.rb +3 -0
  296. data/proto/module/lib/module/model/model.rb +12 -0
  297. data/proto/module/lib/module/view/admin/edit.xhtml +0 -0
  298. data/proto/module/lib/module/view/admin/form.xhtml +0 -0
  299. data/proto/module/lib/module/view/admin/index.xhtml +0 -0
  300. data/proto/module/lib/module/view/admin/new.xhtml +0 -0
  301. data/proto/module/migrations/.gitkeep +0 -0
  302. data/spec/javascript/css/base.css +177 -0
  303. data/spec/javascript/css/style.css +204 -0
  304. data/spec/javascript/css/typography.css +70 -0
  305. data/spec/javascript/editor/index.html +65 -0
  306. data/spec/javascript/images/close.png +0 -0
  307. data/spec/javascript/images/info.png +0 -0
  308. data/spec/javascript/js/editor.js +16 -0
  309. data/spec/javascript/js/modal.js +12 -0
  310. data/spec/javascript/js/namespace.js +2 -0
  311. data/spec/javascript/js/notification.js +43 -0
  312. data/spec/javascript/js/tabs.js +8 -0
  313. data/spec/javascript/modal/index.html +45 -0
  314. data/spec/javascript/notification/index.html +48 -0
  315. data/spec/javascript/tabs/index.html +73 -0
  316. data/spec/javascript/tabs/tab_1.html +1 -0
  317. data/spec/javascript/tabs/tab_2.html +1 -0
  318. data/spec/zen/base/language.rb +31 -0
  319. data/spec/zen/base/logger.rb +34 -0
  320. data/spec/zen/base/package.rb +47 -0
  321. data/spec/zen/config/database.rb +8 -0
  322. data/spec/zen/helper/asset.rb +26 -0
  323. data/spec/zen/helper/breadcrumb.rb +24 -0
  324. data/spec/zen/language/en/general.rb +4 -0
  325. data/spec/zen/language/nl/general.rb +4 -0
  326. data/spec/zen/liquid/general.rb +42 -0
  327. data/spec/zen/logs/.gitkeep +0 -0
  328. data/spec/zen/spec.rb +9 -0
  329. data/spec/zen/spec_database.db +0 -0
  330. data/tasks/bacon.rake +99 -0
  331. data/tasks/build.rake +72 -0
  332. data/tasks/clean.rake +18 -0
  333. data/tasks/db.rake +81 -0
  334. data/tasks/doc.rake +5 -0
  335. data/tasks/extension.rake +65 -0
  336. data/tasks/proto.rake +37 -0
  337. data/tasks/theme.rake +63 -0
  338. metadata +512 -0
@@ -0,0 +1,47 @@
1
+ module Zen
2
+ module Liquid
3
+ ##
4
+ # The Redirect tag can be used to redirect a user from one URL to another.
5
+ #
6
+ # @example
7
+ # {% redirect "blog/index" %}
8
+ #
9
+ # @author Yorick Peterse
10
+ # @since 0.1
11
+ #
12
+ class Redirect < ::Liquid::Tag
13
+ include ::Ramaze::Helper::Redirect
14
+ include ::Zen::Liquid::ControllerBehavior
15
+
16
+ ##
17
+ # Creates a new instance of this tag by passing the tag name, arguments and HTML
18
+ # tokens to the construct.
19
+ #
20
+ # @author Yorick Peterse
21
+ # @since 0.1
22
+ # @param [String] tag_name The name of the tag that was called.
23
+ # @param [String] arguments All additional arguments passed as a string.
24
+ # @param [String] tokens All tokens (HTML mostly) inside the tag block.
25
+ #
26
+ def initialize tag_name, arguments, tokens
27
+ @url = arguments.gsub('"', '').gsub("'", '')
28
+ end
29
+
30
+ ##
31
+ # Redirects the user to a certain page based on the arguments specified in the
32
+ # constructor method.
33
+ #
34
+ # @author Yorick Peterse
35
+ # @since 0.1
36
+ # @param [Object] context The current Liquid context
37
+ #
38
+ def render context
39
+ if @url.nil? or @url.empty?
40
+ raise ArgumentError, "You need to specify a URL in order to redirect a user"
41
+ end
42
+
43
+ redirect(@url)
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,58 @@
1
+ module Zen
2
+ module Liquid
3
+ ##
4
+ # Tag block that can be used to strip leading and trailing characters from
5
+ # the text inside of the block. This tag can be extremely useful when you're
6
+ # displaying elements seperated by a comma and want to remove the last comma.
7
+ #
8
+ # @example
9
+ # {% strip end=", " %}
10
+ # Hello, world,
11
+ # {% endstrip %}
12
+ #
13
+ # This tag has the following options:
14
+ #
15
+ # * start
16
+ # * end
17
+ #
18
+ # @author Yorick Peterse
19
+ # @since 0.1
20
+ #
21
+ class Strip < ::Liquid::Block
22
+ include ::Zen::Liquid::General
23
+
24
+ ##
25
+ # Creates a new instance of the block and passes the tag name,
26
+ # all additional arguments and the HTML to the constructor method.
27
+ #
28
+ # @author Yorick Peterse
29
+ # @param [String] tag_name The name of the tag that was called.
30
+ # @param [String] arguments All additional arguments passed as a string.
31
+ # @param [String] html The HTML inside the block.
32
+ # @since 0.1
33
+ #
34
+ def initialize tag_name, arguments, html
35
+ super
36
+
37
+ @arguments = {'start' => '', 'end' => ''}
38
+ @arguments = @arguments.merge(parse_key_values(arguments))
39
+ end
40
+
41
+ ##
42
+ # Renders the tag block. We'll retrieve the content inside the block,
43
+ # trim it and return it.
44
+ #
45
+ # @author Yorick Peterse
46
+ # @since 0.1
47
+ # @param [Object] context The Liquid context for the current tag
48
+ #
49
+ def render context
50
+ html = super
51
+ html = html.join
52
+ html = html.gsub(/^#{@arguments['start']}/, '').gsub(/#{@arguments['end']}$/, '')
53
+
54
+ return html
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,26 @@
1
+ module Sequel
2
+ class Model
3
+ ##
4
+ # Retrieves all primary values and an optional column and returns the results as an array of hashes in
5
+ # which the keys of these hashes are the IDs and the values the values of the specified column.
6
+ # This array can be used when creating <select> elements using the BlueForm helper.
7
+ #
8
+ # @example
9
+ #
10
+ # Sections::Models::Section.pk_hash(:name) # => {1 => 'Blog', 2 => 'General'}
11
+ #
12
+ # @author Yorick Peterse
13
+ # @param [Symbol] column The name of the optional column to select.
14
+ # @return [Hash]
15
+ #
16
+ def self.pk_hash column
17
+ hash = {}
18
+
19
+ self.select(:id, column.to_sym).each do |row|
20
+ hash[row.id] = row.send(column)
21
+ end
22
+
23
+ return hash
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,27 @@
1
+ # Load the language pack and configure Sequel to use that pack
2
+ lang = Zen::Language.load 'zen_models'
3
+
4
+ # When passing a hash to update() or create() we'll ignore any keys that don't belong in the table.
5
+ # This allows you to directly pass request.params to these methods without having to filter the hash
6
+ # yourself.
7
+ Sequel::Model.strict_param_setting = false
8
+
9
+ # Load all the required plugins
10
+ Sequel::Model.plugin :validation_helpers
11
+ Sequel::Model.plugin :association_pks
12
+ Sequel::Model.plugin :schema
13
+
14
+ Sequel::Plugins::ValidationHelpers::DEFAULT_OPTIONS.merge!(
15
+ :exact_length => {:message => lang.exact_length},
16
+ :format => {:message => lang.format},
17
+ :includes => {:message => lang.includes, :allow_nil => false},
18
+ :integer => {:message => lang.integer, :allow_nil => true},
19
+ :length_range => {:message => lang.length_range},
20
+ :max_length => {:message => lang.max_length, :allow_nil => true},
21
+ :min_length => {:message => lang.min_length, :allow_nil => true},
22
+ :not_string => {:message => lang.not_string},
23
+ :numeric => {:message => lang.numeric},
24
+ :type => {:message => lang.type},
25
+ :presence => {:message => lang.presence},
26
+ :unique => {:message => lang.unique}
27
+ )
@@ -0,0 +1,19 @@
1
+ Copyright (c) 2011, Yorick Peterse
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ THE SOFTWARE.
@@ -0,0 +1,24 @@
1
+
2
+ # Load all the classes such as controllers, models and so on.
3
+ require __DIR__ 'categories/model/category_group'
4
+ require __DIR__ 'categories/model/category'
5
+
6
+ require __DIR__ 'categories/controller/category_groups'
7
+ require __DIR__ 'categories/controller/categories'
8
+
9
+ # Describe what this package is all about
10
+ Zen::Package.add do |p|
11
+ p.type = 'extension'
12
+ p.name = 'Categories'
13
+ p.author = 'Yorick Peterse'
14
+ p.url = 'http://yorickpeterse.com/'
15
+ p.version = '0.1'
16
+ p.about = "Module for managing categories. Categories can be used to organize section entries."
17
+ p.identifier = 'com.zen.categories'
18
+ p.directory = __DIR__('categories')
19
+
20
+ p.menu = [{
21
+ :title => "Categories",
22
+ :url => "admin/category_groups"
23
+ }]
24
+ end
@@ -0,0 +1,202 @@
1
+ module Categories
2
+ module Controllers
3
+ ##
4
+ # Categories can be seen as "tags" for your section entries. They describe the
5
+ # type of entry just like tags except that categories generally cover larger elements.
6
+ # When adding a new entry categories aren't required so you're free to ignore them if you
7
+ # don't need them.
8
+ #
9
+ # @author Yorick Peterse
10
+ # @since 0.1
11
+ #
12
+ class Categories < Zen::Controllers::AdminController
13
+ map '/admin/categories'
14
+
15
+ trait :extension_identifier => 'com.zen.categories'
16
+
17
+ include ::Categories::Models
18
+
19
+ before_all do
20
+ csrf_protection :save, :delete do
21
+ respond(@zen_general_lang.errors[:csrf], 401)
22
+ end
23
+ end
24
+
25
+ ##
26
+ # The constructor is used to set various options such as the form URLs and load
27
+ # the language pack for the categories module.
28
+ #
29
+ # @author Yorick Peterse
30
+ # @since 0.1
31
+ #
32
+ def initialize
33
+ super
34
+
35
+ @form_save_url = '/admin/categories/save'
36
+ @form_delete_url = '/admin/categories/delete'
37
+ @categories_lang = Zen::Language.load 'categories'
38
+ @groups_lang = Zen::Language.load 'category_groups'
39
+
40
+ # Set the page title
41
+ if !action.method.nil?
42
+ method = action.method.to_sym
43
+
44
+ if @categories_lang.titles.key? method
45
+ @page_title = @categories_lang.titles[method]
46
+ end
47
+ end
48
+ end
49
+
50
+ ##
51
+ # Show an overview of all existing categories and allow the user
52
+ # to create and manage these categories.
53
+ #
54
+ # @author Yorick Peterse
55
+ # @param [Integer] category_group_id The ID of the category group that's currently
56
+ # being managed by the user.
57
+ # @since 0.1
58
+ #
59
+ def index category_group_id
60
+ if !user_authorized?([:read])
61
+ respond(@zen_general_lang.errors[:not_authorized], 403)
62
+ end
63
+
64
+ set_breadcrumbs anchor_to(@groups_lang.titles[:index], "admin/category_groups/"),
65
+ @categories_lang.titles[:index]
66
+
67
+ @category_group_id = category_group_id
68
+ @categories = CategoryGroup[category_group_id].categories
69
+ end
70
+
71
+ ##
72
+ # Edit an existing category based on the ID specified in the URL.
73
+ #
74
+ # @author Yorick Peterse
75
+ # @param [Integer] category_group_id The category group ID.
76
+ # @param [Integer] id The ID of the category to edit.
77
+ # @since 0.1
78
+ #
79
+ def edit category_group_id, id
80
+ if !user_authorized?([:read, :update])
81
+ respond(@zen_general_lang.errors[:not_authorized], 403)
82
+ end
83
+
84
+ set_breadcrumbs anchor_to(@groups_lang.titles[:index], "admin/category_groups/"),
85
+ anchor_to(@categories_lang.titles[:index], "admin/categories/index/#{category_group_id}"),
86
+ @categories_lang.titles[:edit]
87
+
88
+ @category_group_id = category_group_id
89
+ @category = Category[id]
90
+ end
91
+
92
+ ##
93
+ # Create a new category.
94
+ #
95
+ # @author Yorick Peterse
96
+ # @param [Integer] category_group_id The ID of the category group.
97
+ # @since 0.1
98
+ #
99
+ def new category_group_id
100
+ if !user_authorized?([:read, :create])
101
+ respond(@zen_general_lang.errors[:not_authorized], 403)
102
+ end
103
+
104
+ set_breadcrumbs anchor_to(@groups_lang.titles[:index], "admin/category_groups/"),
105
+ anchor_to(@categories_lang.titles[:index], "admin/categories/index/#{category_group_id}"),
106
+ @categories_lang.titles[:new]
107
+
108
+ @category_group_id = category_group_id
109
+ @category = Category.new
110
+ end
111
+
112
+ ##
113
+ # Save the changes made to an existing category or create a new one based
114
+ # on the current POST data.
115
+ #
116
+ # @author Yorick Peterse
117
+ # @since 0.1
118
+ #
119
+ def save
120
+ if !user_authorized?([:create, :update])
121
+ respond(@zen_general_lang.errors[:not_authorized], 403)
122
+ end
123
+
124
+ post = request.params.dup
125
+ category_group_id = post["category_group_id"]
126
+
127
+ # Remove all empty values
128
+ post.each do |key, value|
129
+ post.delete(key) if value.empty?
130
+ end
131
+
132
+ post.delete("parent_id") if post["parent_id"] == '--'
133
+
134
+ # Retrieve the category and set the notifications based on if the ID has
135
+ # been specified or not.
136
+ if post["id"] and !post["id"].empty?
137
+ @category = Category[post["id"]]
138
+ save_action = :save
139
+ else
140
+ @category = Category.new
141
+ save_action = :new
142
+ end
143
+
144
+ flash_success = @categories_lang.success[save_action]
145
+ flash_error = @categories_lang.errors[save_action]
146
+
147
+ # Try to update the category
148
+ begin
149
+ @category.update(post)
150
+ notification(:success, @categories_lang.titles[:index], flash_success)
151
+ rescue
152
+ notification(:error, @categories_lang.titles[:index], flash_error)
153
+ flash[:form_errors] = @categories_lang.errors
154
+ end
155
+
156
+ if @category.id
157
+ redirect "/admin/categories/edit/#{category_group_id}/#{@category.id}"
158
+ else
159
+ redirect "/admin/categories/new/#{category_group_id}"
160
+ end
161
+ end
162
+
163
+ ##
164
+ # Delete all specified category groups and their categories. In
165
+ # order to delete a number of groups an array of fields, named "category_group_ids"
166
+ # is required. This array will contain all the primary values of each group that
167
+ # has to be deleted.
168
+ #
169
+ # @author Yorick Peterse
170
+ # @since 0.1
171
+ #
172
+ def delete
173
+ if !user_authorized?([:delete])
174
+ respond(@zen_general_lang.errors[:not_authorized], 403)
175
+ end
176
+
177
+ post = request.params.dup
178
+ category_group_id = post["category_group_id"]
179
+
180
+ # Obviously we'll require some IDs
181
+ if !request.params["category_ids"] or request.params["category_ids"].empty?
182
+ notification(:error, @categories_lang.titles[:index], @categories_lang.errors[:no_delete])
183
+ redirect "/admin/categories/index/#{category_group_id}"
184
+ end
185
+
186
+ # Delete each section
187
+ request.params["category_ids"].each do |id|
188
+ @category = Category[id]
189
+
190
+ begin
191
+ @category.delete
192
+ notification(:success, @categories_lang.titles[:index], @categories_lang.success[:delete] % id)
193
+ rescue
194
+ notification(:error, @categories_lang.titles[:index], @categories_lang.errors[:delete] % id)
195
+ end
196
+ end
197
+
198
+ redirect "/admin/categories/index/#{category_group_id}"
199
+ end
200
+ end
201
+ end
202
+ end
@@ -0,0 +1,173 @@
1
+ module Categories
2
+ module Controllers
3
+ ##
4
+ # Category groups can be used to group a number of categories into a single container.
5
+ # These groups are assigned to a section (rather than individual categories). It's
6
+ # important to remember that a section entry can't use a category group until it has
7
+ # been added to a section.
8
+ #
9
+ # @author Yorick Peterse
10
+ # @since 0.1
11
+ #
12
+ class CategoryGroups < Zen::Controllers::AdminController
13
+ map '/admin/category_groups'
14
+
15
+ trait :extension_identifier => 'com.zen.categories'
16
+
17
+ include ::Categories::Models
18
+
19
+ before_all do
20
+ csrf_protection :save, :delete do
21
+ respond(@zen_general_lang.errors[:csrf], 401)
22
+ end
23
+ end
24
+
25
+ ##
26
+ # The constructor is used to set various options such as the form URLs and load
27
+ # the language pack for the categories module.
28
+ #
29
+ # @author Yorick Peterse
30
+ # @since 0.1
31
+ #
32
+ def initialize
33
+ super
34
+
35
+ @form_save_url = '/admin/category_groups/save'
36
+ @form_delete_url = '/admin/category_groups/delete'
37
+ @groups_lang = Zen::Language.load 'category_groups'
38
+
39
+ # Set the page title
40
+ if !action.method.nil?
41
+ method = action.method.to_sym
42
+
43
+ if @groups_lang.titles.key? method
44
+ @page_title = @groups_lang.titles[method]
45
+ end
46
+ end
47
+ end
48
+
49
+ ##
50
+ # Show an overview of all existing category groups and allow the user
51
+ # to create new category groups or manage individual categories.
52
+ #
53
+ # @author Yorick Peterse
54
+ # @since 0.1
55
+ #
56
+ def index
57
+ if !user_authorized?([:read])
58
+ respond(@zen_general_lang.errors[:not_authorized], 403)
59
+ end
60
+
61
+ set_breadcrumbs @groups_lang.titles[:index]
62
+
63
+ @category_groups = CategoryGroup.all
64
+ end
65
+
66
+ ##
67
+ # Edit an existing category group based on the ID specified in the URL.
68
+ #
69
+ # @author Yorick Peterse
70
+ # @since 0.1
71
+ #
72
+ def edit id
73
+ if !user_authorized?([:read, :update])
74
+ respond(@zen_general_lang.errors[:not_authorized], 403)
75
+ end
76
+
77
+ set_breadcrumbs anchor_to(@groups_lang.titles[:index], "admin/category_groups"),
78
+ @groups_lang.titles[:edit]
79
+
80
+ @category_group = CategoryGroup[id]
81
+ end
82
+
83
+ ##
84
+ # Create a new category group.
85
+ #
86
+ # @author Yorick Peterse
87
+ # @since 0.1
88
+ #
89
+ def new
90
+ if !user_authorized?([:create, :read])
91
+ respond(@zen_general_lang.errors[:not_authorized], 403)
92
+ end
93
+
94
+ set_breadcrumbs anchor_to(@groups_lang.titles[:index], "admin/category_groups"),
95
+ @groups_lang.titles[:new ]
96
+
97
+ @category_group = CategoryGroup.new
98
+ end
99
+
100
+ ##
101
+ # Save or create a new category group based on the current POST data.
102
+ #
103
+ # @author Yorick Peterse
104
+ # @since 0.1
105
+ #
106
+ def save
107
+ if !user_authorized?([:create, :update])
108
+ respond(@zen_general_lang.errors[:not_authorized], 403)
109
+ end
110
+
111
+ post = request.params.dup
112
+
113
+ if post["id"] and !post["id"].empty?
114
+ @category_group = CategoryGroup[post["id"]]
115
+ save_action = :save
116
+ else
117
+ @category_group = CategoryGroup.new
118
+ save_action = :new
119
+ end
120
+
121
+ flash_success = @groups_lang.success[save_action]
122
+ flash_error = @groups_lang.errors[save_action]
123
+
124
+ begin
125
+ @category_group.update(post)
126
+ notification(:success, @groups_lang.titles[:index], flash_success)
127
+ rescue
128
+ notification(:error, @groups_lang.titles[:index], flash_error)
129
+ flash[:form_errors] = @groups_lang.errors
130
+ end
131
+
132
+ if @category_group.id
133
+ redirect "/admin/category_groups/edit/#{@category_group.id}"
134
+ else
135
+ redirect "/admin/cateogry_groups/new"
136
+ end
137
+ end
138
+
139
+ ##
140
+ # Delete all specified category groups and their categories. In
141
+ # order to delete a number of groups an array of fields, named "category_group_ids"
142
+ # is required. This array will contain all the primary values of each group that
143
+ # has to be deleted.
144
+ #
145
+ # @author Yorick Peterse
146
+ # @since 0.1
147
+ #
148
+ def delete
149
+ if !user_authorized?([:delete])
150
+ respond(@zen_general_lang.errors[:not_authorized], 403)
151
+ end
152
+
153
+ if !request.params["category_group_ids"] or request.params["category_group_ids"].empty?
154
+ notification(:error, @groups_lang.titles[:index], @groups_lang.errors[:no_delete])
155
+ redirect "/admin/category_groups"
156
+ end
157
+
158
+ request.params["category_group_ids"].each do |id|
159
+ @category_group = CategoryGroup[id]
160
+
161
+ begin
162
+ @cateogry_group.delete
163
+ notification(:success, @groups_lang.titles[:index], @groups_lang.success[:delete] % id)
164
+ rescue
165
+ notification(:error, @groups_lang.titles[:index], @groups_lang.errors[:delete] % id)
166
+ end
167
+ end
168
+
169
+ redirect "/admin/category_groups"
170
+ end
171
+ end
172
+ end
173
+ end