zen 0.1a

Sign up to get free protection for your applications and to get access to all the features.
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,233 @@
1
+ require 'ramaze/gestalt'
2
+
3
+ module Zen
4
+ ##
5
+ # Module used for registering extensions and themes, setting their details and the whole shebang.
6
+ # Packages follow the same directory structure as Rubygems and can actually be installed
7
+ # using either Rubygems or by storing them in a custom directory. As long as you require
8
+ # the correct file you're good to go.
9
+ #
10
+ # Packages are added or "described" using a simple block and the add() method as following:
11
+ #
12
+ # bc. Zen::Package.add do |ext|
13
+ # # ....
14
+ # end
15
+ #
16
+ # When using this block you're required to set the following attributes:
17
+ #
18
+ # * type: the type of package, can either be "theme" or "extension"
19
+ # * name: the name of the package
20
+ # * author: the name of the person who made the package
21
+ # * version: the current version, either a string or a numeric value
22
+ # * about: a small description of the package
23
+ # * url: the URL to the package's website
24
+ # * identifier: unique identifier for the package. The format is com.AUTHOR.NAME for
25
+ # extensions and com.AUTHOR.themes.NAME for themes.
26
+ # * directory: the root directory of the package, set this using __DIR__('path')
27
+ #
28
+ # Optionally you can also specify the attribute "menu" (more on that later).
29
+ #
30
+ # h2. Menu Items
31
+ #
32
+ # The package system easily allows modules to add navigation/sub-navigation elements
33
+ # to the backend menu. Each extension can have an attribute named "menu", this attribute
34
+ # is an array of hashes. Each hash must have the following 2 keys (they're symbols):
35
+ #
36
+ # * title: the value used for both the title tag and the text of the anchor element
37
+ # * url: the URI the navigation item will point to. Leading slash isn't required
38
+ #
39
+ # Optionally you can specify child elements using the "children" key. This key
40
+ # will again contain an array of hashes just like regular navigation elements.
41
+ # For example, one could do the following:
42
+ #
43
+ # @ext.menu = [{:title => "Dashboard", :url => "admin/dashboard"}]@
44
+ #
45
+ # Adding a number of child elements isn't very difficult either:
46
+ #
47
+ # bc. ext.menu = [{
48
+ # :title => "Dashboard", :url => "admin/dashboard",
49
+ # :children => [{:title => "Child", :url => "admin/dashboard/child"}]
50
+ # }]
51
+ #
52
+ # Once a certain number of navigation elements have been added you can generate the
53
+ # HTML for a fully fledged navigation menu using the build_menu() method. This method
54
+ # uses Gestalt to build the HTML and also takes care of permissions for each user/module.
55
+ #
56
+ # h2. Migrations
57
+ #
58
+ # If your package uses it's own database tables it's best to use migrations as these make
59
+ # it very easy to install/uninstall the extension. Migrations should be put in the root
60
+ # directory of your extension. For example, if your extension is in "foobar" the migrations
61
+ # should be located in "foobar/migrations", the lib directory in "foobar/lib", etc.
62
+ #
63
+ # Migrations can be executed using the Rake task "extension:migrate" or "db:migrate",
64
+ # the latter will install all extensions while the first one will only install the specified
65
+ # extension. Migration prototypes can be generated by the Rake task
66
+ # "proto:migration[DIRECTORY]" where DIRECTORY is the path to your migrations directory.
67
+ #
68
+ # h2. Themes
69
+ #
70
+ # Themes are essentially packages like the sections or comments module except that they
71
+ # have a few limitations and work a bit different. First of all themes can't add navigation
72
+ # items to the backend and second they should _always_ have the following directories:
73
+ #
74
+ # * theme/lib/theme/templates
75
+ # * theme/lib/theme/public
76
+ #
77
+ # The templates directory is used to store all Liquid templates and template groups, the public
78
+ # directory is used for CSS files, images and so on. Themes can have migrations just
79
+ # like extensions which makes it relatively easy to share a theme with somebody else.
80
+ #
81
+ # @author Yorick Peterse
82
+ # @since 0.1
83
+ #
84
+ module Package
85
+ class << self
86
+ attr_reader :extensions
87
+ attr_reader :themes
88
+ attr_accessor :classes
89
+ end
90
+
91
+ ##
92
+ # Adds a new package along with all it's details such as the name,
93
+ # author, version and so on. Extensions can be added using a simple
94
+ # block as following:
95
+ #
96
+ # Zen::Package.add do |ext|
97
+ # ext.name = "Name"
98
+ # ext.author = "Author"
99
+ # end
100
+ #
101
+ # When adding a new extension the following setters are required:
102
+ #
103
+ # * type
104
+ # * name
105
+ # * author
106
+ # * version
107
+ # * about
108
+ # * url
109
+ # * identifier
110
+ # * directory
111
+ #
112
+ # @author Yorick Peterse
113
+ # @since 0.1
114
+ # @param [Block] block Block containing information about the extension.
115
+ #
116
+ def self.add(&block)
117
+ package = Struct.new(:type, :name, :author, :version, :about, :url,
118
+ :identifier, :directory, :menu).new
119
+ required = [:type, :name, :author, :version, :about, :url, :identifier, :directory]
120
+
121
+ yield package
122
+
123
+ required.each do |m|
124
+ if !package.respond_to?(m) or package.send(m).nil?
125
+ raise "A loaded package has no value set for the setter \"#{m}\""
126
+ end
127
+ end
128
+
129
+ # Update the root but prevent duplicates
130
+ if !Ramaze.options.roots.include?(package.directory)
131
+ Ramaze.options.roots.push(package.directory)
132
+ end
133
+
134
+ # Themes and extensions each have a different accessor
135
+ if package.type.to_s == 'theme'
136
+ # Remove the navigation menu
137
+ package.menu = nil if !package.menu.nil?
138
+
139
+ @themes = {} if @themes.nil?
140
+ @themes[package.identifier.to_s] = package
141
+ else
142
+ @extensions = {} if @extensions.nil?
143
+ @extensions[package.identifier.to_s] = package
144
+ end
145
+ end
146
+
147
+ ##
148
+ # Shortcut method that can be used to retrieve an extension or theme based on the
149
+ # given extension identifier.
150
+ #
151
+ # @author Yorick Peterse
152
+ # @param [String] ident The package's identifier
153
+ # @return [Object]
154
+ #
155
+ def self.[](ident)
156
+ if ident.include?('.themes.')
157
+ @themes[ident]
158
+ else
159
+ @extensions[ident]
160
+ end
161
+ end
162
+
163
+ ##
164
+ # Builds a navigation menu for all installed extensions.
165
+ # Extensions can have an infinite amount of sub-navigation
166
+ # items. This method will generate an unordered list of items
167
+ # of which each list item can contain N sub items.
168
+ #
169
+ # @author Yorick Peterse
170
+ # @param [String] css_class A string of CSS classes to apply to the
171
+ # main UL element.
172
+ # @since 0.1
173
+ #
174
+ def self.build_menu css_class = ''
175
+ @g = Ramaze::Gestalt.new
176
+ menu_items = []
177
+
178
+ @extensions.each do |ident, ext|
179
+ if !ext.menu.nil?
180
+ ext.menu.each do |m|
181
+ menu_items.push(m)
182
+ end
183
+ end
184
+ end
185
+
186
+ # Sort the menu alphabetical
187
+ menu_items = menu_items.sort_by do |item|
188
+ item[:title]
189
+ end
190
+
191
+ @g.ul :class => css_class do
192
+ if !menu_items.empty?
193
+ menu_items.each do |m|
194
+ self.nav_list(m)
195
+ end
196
+ end
197
+ end
198
+
199
+ return @g.to_s
200
+ end
201
+
202
+ private
203
+
204
+ ##
205
+ # Method that's used to generate the list items for each
206
+ # navigation menu along with all sub elements.
207
+ #
208
+ # @author Yorick Peterse
209
+ # @param [Hash] menu Hash containing the navigation items (url, title, etc)
210
+ # @since 0.1
211
+ #
212
+ def self.nav_list menu
213
+ @g.li do
214
+ if menu[:url][0] != '/'
215
+ menu[:url] = '/' + menu[:url]
216
+ end
217
+
218
+ @g.a :href => menu[:url], :title => menu[:title] do
219
+ menu[:title]
220
+ end
221
+
222
+ if menu.key?(:children)
223
+ @g.ul do
224
+ menu[:children].each do |c|
225
+ self.nav_list(c)
226
+ end
227
+ end
228
+ end
229
+ end
230
+ end
231
+
232
+ end
233
+ end
@@ -0,0 +1,11 @@
1
+ module Zen
2
+ ##
3
+ # Defines the current version of Zen as a string. This constant
4
+ # is used to set the Gem version when generating a new Rubygems
5
+ # package.
6
+ #
7
+ # @author Yorick Peterse
8
+ # @since 0.1
9
+ #
10
+ Version = '0.1a'
11
+ end
@@ -0,0 +1,173 @@
1
+ require 'fileutils'
2
+
3
+ module Zen
4
+ module Bin
5
+ ##
6
+ # Main binary class that contains a few methods that can be used
7
+ # to generate new applications, extensions and so on.
8
+ #
9
+ # @author Yorick Peterse
10
+ # @since 0.1
11
+ #
12
+ class Base < Thor
13
+
14
+ map ["-v", "--version"] => :version
15
+
16
+ # ------------------------------------------------
17
+
18
+ desc "app [NAME]", "Creates a new Zen application"
19
+ method_option :force, :type => :boolean, :aliases => "-f",
20
+ :desc => "Overwrites any existing directories"
21
+
22
+ ##
23
+ # Creates a new Zen application using a prototype extracted from the
24
+ # Rubygem package.
25
+ #
26
+ # @author Yorick Peterse
27
+ # @param [String] name The name of the new application
28
+ # @since 0.1
29
+ #
30
+ def app name
31
+ # Do we have an application name?
32
+ if name.nil?
33
+ abort "You need to specify a name for your application"
34
+ end
35
+
36
+ app = './' + name
37
+ proto = __DIR__('../../../proto/app')
38
+
39
+ if File.directory?(app) and !options.force?
40
+ abort "Application already exists, use -f to overwrite it"
41
+ else
42
+ FileUtils.rm_rf(app)
43
+ end
44
+
45
+ # Copy the prototype
46
+ begin
47
+ FileUtils.cp_r(proto, app)
48
+
49
+ puts "Application generated, now do the following:
50
+ 1. edit the following configuration files:
51
+ * config/database.rb
52
+ * config/config.rb
53
+ 2. run rake db:migrate to install all extensions and create a default user
54
+ 3. have fun!"
55
+ rescue => e
56
+ abort "Failed to generate the application: #{e}"
57
+ end
58
+ end
59
+
60
+ # ------------------------------------------------
61
+
62
+ desc "extension [NAME]", "Creates a new Zen extension"
63
+ method_option :force, :type => :boolean, :aliases => "-f",
64
+ :desc => "Overwrites any existing directories"
65
+
66
+ ##
67
+ # Creates a new Zen extension for the given name.
68
+ #
69
+ # @author Yorick Peterse
70
+ # @param [String] name The name of the extension
71
+ # @since 0.1
72
+ #
73
+ def extension name
74
+ name = name.strip.downcase.gsub(' ', '_')
75
+ proto = __DIR__('../../../proto/module')
76
+ klass = name.camel_case
77
+
78
+ if name.nil?
79
+ abort "You need to specify an extension name"
80
+ end
81
+
82
+ extension_path = "./#{name}"
83
+
84
+ if File.directory?(extension_path) and !options.force?
85
+ abort "Extension already exists, use -f to overwrite it"
86
+ else
87
+ FileUtils.rm_rf(extension_path)
88
+ end
89
+
90
+ # Rename all files and folders
91
+ begin
92
+ FileUtils.cp_r(proto, extension_path)
93
+
94
+ lib_path = "#{extension_path}/lib/#{name}"
95
+
96
+ # Rename the base file and directory
97
+ FileUtils.mv("#{extension_path}/lib/module" , lib_path)
98
+ FileUtils.mv("#{extension_path}/lib/module.rb", "#{extension_path}/lib/#{name}.rb")
99
+
100
+ # ------------------------------------------------
101
+
102
+ controller_filename = klass.snake_case.pluralize
103
+ model_filename = klass.snake_case.singularize
104
+
105
+ # Generate the controller
106
+ controller = File.open("#{lib_path}/controller/controllers.rb", 'r').read
107
+ controller.gsub!('CONTROLLER', klass.pluralize)
108
+ controller.gsub!('EXTENSION' , klass.pluralize)
109
+
110
+ FileUtils.mv("#{lib_path}/controller/controllers.rb", "#{lib_path}/controller/#{controller_filename}.rb")
111
+ File.open("#{lib_path}/controller/#{controller_filename}.rb", 'w').write(controller)
112
+
113
+ # Generate the model
114
+ model = File.open("#{lib_path}/model/model.rb", 'r').read
115
+ model.gsub!('MODEL' , klass.singularize)
116
+ model.gsub!('EXTENSION' , klass.pluralize)
117
+
118
+ FileUtils.mv("#{lib_path}/model/model.rb", "#{lib_path}/model/#{model_filename}.rb")
119
+ File.open("#{lib_path}/model/#{model_filename}.rb", 'w').write(model)
120
+
121
+ puts "Done! Don't forget to rename the controllers/models/etc"
122
+ rescue => e
123
+ abort "Failed to generate the extesion: #{e}"
124
+ end
125
+ end
126
+
127
+ # ------------------------------------------------
128
+
129
+ desc "version", "Shows the current version of Zen"
130
+
131
+ ##
132
+ # Shows the current version of Zen
133
+ #
134
+ # @author Yorick Peterse
135
+ # @since 0.1
136
+ #
137
+ def version
138
+ puts "Zen v#{Zen::Version}"
139
+ end
140
+
141
+ # ------------------------------------------------
142
+
143
+ ##
144
+ # Override the help method provided by Thor
145
+ # so we can show our custom banner.
146
+ #
147
+ # @author Yorick Peterse
148
+ # @see Thor.help()
149
+ # @since 0.1
150
+ #
151
+ def help task = nil, subcommand = false
152
+ if task.nil?
153
+ puts "Zen is a modular CMS written using Ramaze.
154
+
155
+ Usage:
156
+ $ zen [command] [arguments] [flags]
157
+
158
+ Example:
159
+ $ zen app blog
160
+
161
+ Project Details:
162
+ * website: http://zen-cms.com/
163
+ * github: https://github.com/zen-cms/
164
+ * version: v#{Zen::Version}
165
+
166
+ "
167
+ end
168
+
169
+ super(task, subcommand)
170
+ end
171
+ end
172
+ end
173
+ end
@@ -0,0 +1,60 @@
1
+ module Zen
2
+ module Controllers
3
+ ##
4
+ # The admin controller is a base controller that should be extended by all controllers
5
+ # for the backend of Zen. This controller will automatically check to see if the user is
6
+ # logged in and perform several other tasks such as loading all Javascript and CSS stylesheet
7
+ # along with our helpers and so on.
8
+ #
9
+ # h2. Authentication
10
+ #
11
+ # It's important to remember that any controller that extends this one will require the
12
+ # user to be logged in. The only exception for this is the login method for the Users
13
+ # controller, mapped to /admin/users/login. If a user isn't logged in he/she will be redirected
14
+ # to the login page.
15
+ #
16
+ # h2. Helpers
17
+ #
18
+ # The admin controller loads the following helpers:
19
+ #
20
+ # * CSRF
21
+ # * BlueForm
22
+ # * Common
23
+ # * Breadcrumb
24
+ # * User
25
+ # * ACL
26
+ # * Asset
27
+ #
28
+ # @author Yorick Peterse
29
+ # @since 0.1
30
+ #
31
+ class AdminController < Zen::Controllers::BaseController
32
+ layout :admin
33
+ engine :etanni
34
+ helper :blue_form, :common, :breadcrumb, :user, :acl, :asset, :gravatar
35
+
36
+ ##
37
+ # The initialize method is called upon class initalization and is used to process several
38
+ # items before loading the controller(s) for the current extension.
39
+ #
40
+ # @author Yorick Peterse
41
+ # @since 1.0
42
+ #
43
+ def initialize
44
+ super
45
+
46
+ # Load our CSS and Javascript files
47
+ require_css('boilerplate', 'grid', 'layout', 'general')
48
+ require_js('zen/tabs', 'zen/notification', 'zen/modal', 'zen/editor/base',
49
+ 'zen/editor/drivers/html', 'zen/editor/drivers/textile', 'zen/editor/drivers/markdown',
50
+ 'zen/init'
51
+ )
52
+
53
+ # Only allow users to access admin/users/login when they aren't logged in
54
+ if request.env['SCRIPT_NAME'] != 'admin/users/' and request.env['PATH_INFO'] != '/login'
55
+ redirect '/admin/users/login' unless logged_in?
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end