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,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