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.
- data/LICENSE +19 -0
- data/MANIFEST +337 -0
- data/README.textile +42 -0
- data/Rakefile +6 -0
- data/bin/zen +9 -0
- data/doc/Categories.html +93 -0
- data/doc/Categories/Controllers.html +93 -0
- data/doc/Categories/Controllers/Categories.html +995 -0
- data/doc/Categories/Controllers/CategoryGroups.html +878 -0
- data/doc/Categories/Models.html +97 -0
- data/doc/Categories/Models/Category.html +269 -0
- data/doc/Categories/Models/CategoryGroup.html +231 -0
- data/doc/Comments.html +93 -0
- data/doc/Comments/Controllers.html +93 -0
- data/doc/Comments/Controllers/Comments.html +797 -0
- data/doc/Comments/Controllers/CommentsForm.html +487 -0
- data/doc/Comments/Liquid.html +93 -0
- data/doc/Comments/Liquid/CommentForm.html +522 -0
- data/doc/Comments/Liquid/Comments.html +543 -0
- data/doc/Comments/Models.html +95 -0
- data/doc/Comments/Models/Comment.html +260 -0
- data/doc/CustomFields.html +93 -0
- data/doc/CustomFields/Controllers.html +93 -0
- data/doc/CustomFields/Controllers/CustomFieldGroups.html +902 -0
- data/doc/CustomFields/Controllers/CustomFields.html +974 -0
- data/doc/CustomFields/Models.html +97 -0
- data/doc/CustomFields/Models/CustomField.html +272 -0
- data/doc/CustomFields/Models/CustomFieldGroup.html +259 -0
- data/doc/CustomFields/Models/CustomFieldValue.html +154 -0
- data/doc/Ramaze.html +93 -0
- data/doc/Ramaze/Helper.html +93 -0
- data/doc/Ramaze/Helper/ACL.html +531 -0
- data/doc/Ramaze/Helper/Asset.html +617 -0
- data/doc/Ramaze/Helper/Breadcrumb.html +411 -0
- data/doc/Ramaze/Helper/Common.html +738 -0
- data/doc/Sections.html +93 -0
- data/doc/Sections/Controllers.html +93 -0
- data/doc/Sections/Controllers/SectionEntries.html +1100 -0
- data/doc/Sections/Controllers/Sections.html +953 -0
- data/doc/Sections/Liquid.html +93 -0
- data/doc/Sections/Liquid/SectionEntries.html +674 -0
- data/doc/Sections/Liquid/Sections.html +494 -0
- data/doc/Sections/Models.html +97 -0
- data/doc/Sections/Models/Section.html +272 -0
- data/doc/Sections/Models/SectionEntry.html +264 -0
- data/doc/Sequel.html +91 -0
- data/doc/Sequel/Model.html +243 -0
- data/doc/Settings.html +93 -0
- data/doc/Settings/Controllers.html +91 -0
- data/doc/Settings/Controllers/Settings.html +565 -0
- data/doc/Settings/Liquid.html +91 -0
- data/doc/Settings/Liquid/Setting.html +426 -0
- data/doc/Settings/Models.html +95 -0
- data/doc/Settings/Models/Setting.html +293 -0
- data/doc/Users.html +93 -0
- data/doc/Users/Controllers.html +93 -0
- data/doc/Users/Controllers/AccessRules.html +904 -0
- data/doc/Users/Controllers/UserGroups.html +879 -0
- data/doc/Users/Controllers/Users.html +1124 -0
- data/doc/Users/Liquid.html +93 -0
- data/doc/Users/Liquid/User.html +480 -0
- data/doc/Users/Liquid/Users.html +495 -0
- data/doc/Users/Models.html +97 -0
- data/doc/Users/Models/AccessRule.html +257 -0
- data/doc/Users/Models/User.html +649 -0
- data/doc/Users/Models/UserGroup.html +267 -0
- data/doc/Zen.html +391 -0
- data/doc/Zen/Bin.html +113 -0
- data/doc/Zen/Bin/Base.html +727 -0
- data/doc/Zen/Controllers.html +115 -0
- data/doc/Zen/Controllers/AdminController.html +298 -0
- data/doc/Zen/Controllers/BaseController.html +272 -0
- data/doc/Zen/Controllers/FrontendController.html +164 -0
- data/doc/Zen/Controllers/MainController.html +421 -0
- data/doc/Zen/Database.html +498 -0
- data/doc/Zen/Language.html +660 -0
- data/doc/Zen/Liquid.html +117 -0
- data/doc/Zen/Liquid/ControllerBehavior.html +448 -0
- data/doc/Zen/Liquid/General.html +444 -0
- data/doc/Zen/Liquid/Redirect.html +435 -0
- data/doc/Zen/Liquid/Strip.html +447 -0
- data/doc/Zen/Logger.html +393 -0
- data/doc/Zen/Package.html +909 -0
- data/doc/_index.html +724 -0
- data/doc/class_list.html +36 -0
- data/doc/css/common.css +1 -0
- data/doc/css/full_list.css +53 -0
- data/doc/css/style.css +310 -0
- data/doc/file.README.html +86 -0
- data/doc/file_list.html +38 -0
- data/doc/frames.html +13 -0
- data/doc/index.html +86 -0
- data/doc/js/app.js +203 -0
- data/doc/js/full_list.js +149 -0
- data/doc/js/jquery.js +154 -0
- data/doc/method_list.html +1139 -0
- data/doc/top-level-namespace.html +88 -0
- data/lib/zen.rb +77 -0
- data/lib/zen/base/database.rb +105 -0
- data/lib/zen/base/language.rb +132 -0
- data/lib/zen/base/logger.rb +54 -0
- data/lib/zen/base/package.rb +233 -0
- data/lib/zen/base/version.rb +11 -0
- data/lib/zen/bin/zen_binary.rb +173 -0
- data/lib/zen/controller/admin_controller.rb +60 -0
- data/lib/zen/controller/base_controller.rb +39 -0
- data/lib/zen/controller/frontend_controller.rb +16 -0
- data/lib/zen/controller/main_controller.rb +93 -0
- data/lib/zen/helper/acl.rb +124 -0
- data/lib/zen/helper/asset.rb +104 -0
- data/lib/zen/helper/breadcrumb.rb +71 -0
- data/lib/zen/helper/common.rb +157 -0
- data/lib/zen/language/en/zen_general.rb +21 -0
- data/lib/zen/language/en/zen_models.rb +39 -0
- data/lib/zen/layout/admin.xhtml +72 -0
- data/lib/zen/layout/login.xhtml +44 -0
- data/lib/zen/liquid/controller_behavior.rb +55 -0
- data/lib/zen/liquid/general.rb +69 -0
- data/lib/zen/liquid/redirect.rb +47 -0
- data/lib/zen/liquid/strip.rb +58 -0
- data/lib/zen/model/methods.rb +26 -0
- data/lib/zen/model/settings.rb +27 -0
- data/lib/zen/packages/categories/LICENSE +19 -0
- data/lib/zen/packages/categories/README.textile +0 -0
- data/lib/zen/packages/categories/lib/categories.rb +24 -0
- data/lib/zen/packages/categories/lib/categories/controller/categories.rb +202 -0
- data/lib/zen/packages/categories/lib/categories/controller/category_groups.rb +173 -0
- data/lib/zen/packages/categories/lib/categories/language/en/categories.rb +38 -0
- data/lib/zen/packages/categories/lib/categories/language/en/category_groups.rb +37 -0
- data/lib/zen/packages/categories/lib/categories/model/category.rb +42 -0
- data/lib/zen/packages/categories/lib/categories/model/category_group.rb +29 -0
- data/lib/zen/packages/categories/lib/categories/view/admin/categories/edit.xhtml +7 -0
- data/lib/zen/packages/categories/lib/categories/view/admin/categories/form.xhtml +36 -0
- data/lib/zen/packages/categories/lib/categories/view/admin/categories/index.xhtml +70 -0
- data/lib/zen/packages/categories/lib/categories/view/admin/categories/new.xhtml +7 -0
- data/lib/zen/packages/categories/lib/categories/view/admin/category_groups/edit.xhtml +7 -0
- data/lib/zen/packages/categories/lib/categories/view/admin/category_groups/form.xhtml +18 -0
- data/lib/zen/packages/categories/lib/categories/view/admin/category_groups/index.xhtml +72 -0
- data/lib/zen/packages/categories/lib/categories/view/admin/category_groups/new.xhtml +7 -0
- data/lib/zen/packages/categories/migrations/.gitkeep +0 -0
- data/lib/zen/packages/categories/migrations/1295282303_create_schema.rb +40 -0
- data/lib/zen/packages/comments/LICENSE +19 -0
- data/lib/zen/packages/comments/README.textile +0 -0
- data/lib/zen/packages/comments/lib/comments.rb +26 -0
- data/lib/zen/packages/comments/lib/comments/controller/comments.rb +157 -0
- data/lib/zen/packages/comments/lib/comments/controller/comments_form.rb +135 -0
- data/lib/zen/packages/comments/lib/comments/language/en/comments.rb +52 -0
- data/lib/zen/packages/comments/lib/comments/liquid/comment_form.rb +97 -0
- data/lib/zen/packages/comments/lib/comments/liquid/comments.rb +115 -0
- data/lib/zen/packages/comments/lib/comments/model/comment.rb +34 -0
- data/lib/zen/packages/comments/lib/comments/view/admin/comments/edit.xhtml +7 -0
- data/lib/zen/packages/comments/lib/comments/view/admin/comments/form.xhtml +31 -0
- data/lib/zen/packages/comments/lib/comments/view/admin/comments/index.xhtml +74 -0
- data/lib/zen/packages/comments/migrations/.gitkeep +0 -0
- data/lib/zen/packages/comments/migrations/1295282202_create_schema.rb +24 -0
- data/lib/zen/packages/comments/migrations/1296949631_add_defensio_signature.rb +11 -0
- data/lib/zen/packages/custom_fields/LICENSE +19 -0
- data/lib/zen/packages/custom_fields/README.textile +0 -0
- data/lib/zen/packages/custom_fields/lib/custom_fields.rb +24 -0
- data/lib/zen/packages/custom_fields/lib/custom_fields/controller/custom_field_groups.rb +179 -0
- data/lib/zen/packages/custom_fields/lib/custom_fields/controller/custom_fields.rb +194 -0
- data/lib/zen/packages/custom_fields/lib/custom_fields/language/en/custom_field_groups.rb +45 -0
- data/lib/zen/packages/custom_fields/lib/custom_fields/language/en/custom_fields.rb +64 -0
- data/lib/zen/packages/custom_fields/lib/custom_fields/model/custom_field.rb +41 -0
- data/lib/zen/packages/custom_fields/lib/custom_fields/model/custom_field_group.rb +32 -0
- data/lib/zen/packages/custom_fields/lib/custom_fields/model/custom_field_value.rb +20 -0
- data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_field_groups/edit.xhtml +7 -0
- data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_field_groups/form.xhtml +18 -0
- data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_field_groups/index.xhtml +88 -0
- data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_field_groups/new.xhtml +7 -0
- data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_fields/edit.xhtml +7 -0
- data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_fields/form.xhtml +50 -0
- data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_fields/index.xhtml +75 -0
- data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_fields/new.xhtml +7 -0
- data/lib/zen/packages/custom_fields/migrations/.gitkeep +0 -0
- data/lib/zen/packages/custom_fields/migrations/1295255665_create_schema.rb +53 -0
- data/lib/zen/packages/sections/LICENSE +19 -0
- data/lib/zen/packages/sections/README.textile +43 -0
- data/lib/zen/packages/sections/lib/sections.rb +33 -0
- data/lib/zen/packages/sections/lib/sections/controller/section_entries.rb +251 -0
- data/lib/zen/packages/sections/lib/sections/controller/sections.rb +205 -0
- data/lib/zen/packages/sections/lib/sections/language/en/section_entries.rb +58 -0
- data/lib/zen/packages/sections/lib/sections/language/en/sections.rb +63 -0
- data/lib/zen/packages/sections/lib/sections/liquid/section_entries.rb +209 -0
- data/lib/zen/packages/sections/lib/sections/liquid/sections.rb +76 -0
- data/lib/zen/packages/sections/lib/sections/model/section.rb +43 -0
- data/lib/zen/packages/sections/lib/sections/model/section_entry.rb +43 -0
- data/lib/zen/packages/sections/lib/sections/view/admin/edit.xhtml +7 -0
- data/lib/zen/packages/sections/lib/sections/view/admin/form.xhtml +54 -0
- data/lib/zen/packages/sections/lib/sections/view/admin/index.xhtml +77 -0
- data/lib/zen/packages/sections/lib/sections/view/admin/new.xhtml +7 -0
- data/lib/zen/packages/sections/lib/sections/view/admin/section_entries/edit.xhtml +7 -0
- data/lib/zen/packages/sections/lib/sections/view/admin/section_entries/form.xhtml +147 -0
- data/lib/zen/packages/sections/lib/sections/view/admin/section_entries/index.xhtml +74 -0
- data/lib/zen/packages/sections/lib/sections/view/admin/section_entries/new.xhtml +7 -0
- data/lib/zen/packages/sections/migrations/.gitkeep +0 -0
- data/lib/zen/packages/sections/migrations/1295251836_create_schema.rb +35 -0
- data/lib/zen/packages/sections/migrations/1296335671_userdata_section_entries.rb +18 -0
- data/lib/zen/packages/sections/migrations/1296936110_drop_comment_antispam.rb +11 -0
- data/lib/zen/packages/settings/LICENSE +0 -0
- data/lib/zen/packages/settings/README.textile +0 -0
- data/lib/zen/packages/settings/lib/settings.rb +22 -0
- data/lib/zen/packages/settings/lib/settings/controller/settings.rb +113 -0
- data/lib/zen/packages/settings/lib/settings/language/en/settings.rb +56 -0
- data/lib/zen/packages/settings/lib/settings/liquid/setting.rb +56 -0
- data/lib/zen/packages/settings/lib/settings/model/setting.rb +38 -0
- data/lib/zen/packages/settings/lib/settings/view/admin/settings/index.xhtml +79 -0
- data/lib/zen/packages/settings/migrations/.gitkeep +0 -0
- data/lib/zen/packages/settings/migrations/1295597111_create_schema.rb +31 -0
- data/lib/zen/packages/users/LICENSE +19 -0
- data/lib/zen/packages/users/README.textile +0 -0
- data/lib/zen/packages/users/lib/users.rb +35 -0
- data/lib/zen/packages/users/lib/users/controller/access_rules.rb +186 -0
- data/lib/zen/packages/users/lib/users/controller/user_groups.rb +171 -0
- data/lib/zen/packages/users/lib/users/controller/users.rb +240 -0
- data/lib/zen/packages/users/lib/users/language/en/access_rules.rb +49 -0
- data/lib/zen/packages/users/lib/users/language/en/user_groups.rb +42 -0
- data/lib/zen/packages/users/lib/users/language/en/users.rb +63 -0
- data/lib/zen/packages/users/lib/users/liquid/user.rb +75 -0
- data/lib/zen/packages/users/lib/users/liquid/users.rb +80 -0
- data/lib/zen/packages/users/lib/users/model/access_rule.rb +29 -0
- data/lib/zen/packages/users/lib/users/model/user.rb +96 -0
- data/lib/zen/packages/users/lib/users/model/user_group.rb +38 -0
- data/lib/zen/packages/users/lib/users/public/admin/js/users/access_rules.js +43 -0
- data/lib/zen/packages/users/lib/users/view/admin/access_rules/edit.xhtml +7 -0
- data/lib/zen/packages/users/lib/users/view/admin/access_rules/form.xhtml +68 -0
- data/lib/zen/packages/users/lib/users/view/admin/access_rules/index.xhtml +85 -0
- data/lib/zen/packages/users/lib/users/view/admin/access_rules/new.xhtml +7 -0
- data/lib/zen/packages/users/lib/users/view/admin/user_groups/edit.xhtml +7 -0
- data/lib/zen/packages/users/lib/users/view/admin/user_groups/form.xhtml +19 -0
- data/lib/zen/packages/users/lib/users/view/admin/user_groups/index.xhtml +69 -0
- data/lib/zen/packages/users/lib/users/view/admin/user_groups/new.xhtml +7 -0
- data/lib/zen/packages/users/lib/users/view/admin/users/edit.xhtml +7 -0
- data/lib/zen/packages/users/lib/users/view/admin/users/form.xhtml +25 -0
- data/lib/zen/packages/users/lib/users/view/admin/users/index.xhtml +73 -0
- data/lib/zen/packages/users/lib/users/view/admin/users/login.xhtml +22 -0
- data/lib/zen/packages/users/lib/users/view/admin/users/new.xhtml +7 -0
- data/lib/zen/packages/users/migrations/.gitkeep +0 -0
- data/lib/zen/packages/users/migrations/1295281013_create_schema.rb +54 -0
- data/lib/zen/public/admin/css/boilerplate.css +174 -0
- data/lib/zen/public/admin/css/general.css +485 -0
- data/lib/zen/public/admin/css/grid.css +119 -0
- data/lib/zen/public/admin/css/layout.css +111 -0
- data/lib/zen/public/admin/images/general/noise.jpg +0 -0
- data/lib/zen/public/admin/images/icons/accept.png +0 -0
- data/lib/zen/public/admin/images/icons/add.png +0 -0
- data/lib/zen/public/admin/images/icons/back.png +0 -0
- data/lib/zen/public/admin/images/icons/bold.png +0 -0
- data/lib/zen/public/admin/images/icons/close.png +0 -0
- data/lib/zen/public/admin/images/icons/delete.png +0 -0
- data/lib/zen/public/admin/images/icons/edit.png +0 -0
- data/lib/zen/public/admin/images/icons/error.png +0 -0
- data/lib/zen/public/admin/images/icons/help.png +0 -0
- data/lib/zen/public/admin/images/icons/info.png +0 -0
- data/lib/zen/public/admin/images/icons/italic.png +0 -0
- data/lib/zen/public/admin/images/icons/large/error.png +0 -0
- data/lib/zen/public/admin/images/icons/large/notice.png +0 -0
- data/lib/zen/public/admin/images/icons/large/success.png +0 -0
- data/lib/zen/public/admin/images/icons/link.png +0 -0
- data/lib/zen/public/admin/images/icons/logout.png +0 -0
- data/lib/zen/public/admin/images/icons/ol.png +0 -0
- data/lib/zen/public/admin/images/icons/pdf.png +0 -0
- data/lib/zen/public/admin/images/icons/ul.png +0 -0
- data/lib/zen/public/admin/images/icons/user.png +0 -0
- data/lib/zen/public/admin/images/icons/view.png +0 -0
- data/lib/zen/public/admin/js/mootools/core.js +436 -0
- data/lib/zen/public/admin/js/mootools/more.js +288 -0
- data/lib/zen/public/admin/js/zen/editor/base.js +265 -0
- data/lib/zen/public/admin/js/zen/editor/drivers/html.js +104 -0
- data/lib/zen/public/admin/js/zen/editor/drivers/markdown.js +102 -0
- data/lib/zen/public/admin/js/zen/editor/drivers/textile.js +102 -0
- data/lib/zen/public/admin/js/zen/init.js +57 -0
- data/lib/zen/public/admin/js/zen/modal.js +159 -0
- data/lib/zen/public/admin/js/zen/notification.js +213 -0
- data/lib/zen/public/admin/js/zen/tabs.js +263 -0
- data/lib/zen/tasks.rb +6 -0
- data/pkg/.gitkeep +0 -0
- data/proto/app/Rakefile +2 -0
- data/proto/app/app.rb +20 -0
- data/proto/app/config.ru +18 -0
- data/proto/app/config/config.rb +17 -0
- data/proto/app/config/database.rb +18 -0
- data/proto/app/config/middlewares.rb +23 -0
- data/proto/app/config/requires.rb +8 -0
- data/proto/app/logs/.gitkeep +0 -0
- data/proto/app/public/.gitkeep +0 -0
- data/proto/app/start.rb +22 -0
- data/proto/app/vendor/.gitkeep +0 -0
- data/proto/app/vendor/themes/.gitkeep +0 -0
- data/proto/migration.rb +11 -0
- data/proto/module/LICENSE +0 -0
- data/proto/module/README.textile +0 -0
- data/proto/module/lib/module.rb +15 -0
- data/proto/module/lib/module/controller/controllers.rb +86 -0
- data/proto/module/lib/module/language/en/languages.rb +3 -0
- data/proto/module/lib/module/model/model.rb +12 -0
- data/proto/module/lib/module/view/admin/edit.xhtml +0 -0
- data/proto/module/lib/module/view/admin/form.xhtml +0 -0
- data/proto/module/lib/module/view/admin/index.xhtml +0 -0
- data/proto/module/lib/module/view/admin/new.xhtml +0 -0
- data/proto/module/migrations/.gitkeep +0 -0
- data/spec/javascript/css/base.css +177 -0
- data/spec/javascript/css/style.css +204 -0
- data/spec/javascript/css/typography.css +70 -0
- data/spec/javascript/editor/index.html +65 -0
- data/spec/javascript/images/close.png +0 -0
- data/spec/javascript/images/info.png +0 -0
- data/spec/javascript/js/editor.js +16 -0
- data/spec/javascript/js/modal.js +12 -0
- data/spec/javascript/js/namespace.js +2 -0
- data/spec/javascript/js/notification.js +43 -0
- data/spec/javascript/js/tabs.js +8 -0
- data/spec/javascript/modal/index.html +45 -0
- data/spec/javascript/notification/index.html +48 -0
- data/spec/javascript/tabs/index.html +73 -0
- data/spec/javascript/tabs/tab_1.html +1 -0
- data/spec/javascript/tabs/tab_2.html +1 -0
- data/spec/zen/base/language.rb +31 -0
- data/spec/zen/base/logger.rb +34 -0
- data/spec/zen/base/package.rb +47 -0
- data/spec/zen/config/database.rb +8 -0
- data/spec/zen/helper/asset.rb +26 -0
- data/spec/zen/helper/breadcrumb.rb +24 -0
- data/spec/zen/language/en/general.rb +4 -0
- data/spec/zen/language/nl/general.rb +4 -0
- data/spec/zen/liquid/general.rb +42 -0
- data/spec/zen/logs/.gitkeep +0 -0
- data/spec/zen/spec.rb +9 -0
- data/spec/zen/spec_database.db +0 -0
- data/tasks/bacon.rake +99 -0
- data/tasks/build.rake +72 -0
- data/tasks/clean.rake +18 -0
- data/tasks/db.rake +81 -0
- data/tasks/doc.rake +5 -0
- data/tasks/extension.rake +65 -0
- data/tasks/proto.rake +37 -0
- data/tasks/theme.rake +63 -0
- 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,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
|