zen 0.1a → 0.2
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/CHANGELOG.md +17 -0
- data/MANIFEST +161 -264
- data/README.md +114 -0
- data/ROADMAP.md +31 -0
- data/Thorfile +8 -0
- data/lib/zen.rb +13 -10
- data/lib/zen/base/database.rb +34 -28
- data/lib/zen/base/language.rb +174 -92
- data/lib/zen/base/logger.rb +8 -6
- data/lib/zen/base/package.rb +36 -29
- data/lib/zen/base/version.rb +2 -1
- data/lib/zen/bin/zen_binary.rb +7 -71
- data/lib/zen/controller/admin_controller.rb +31 -11
- data/lib/zen/controller/base_controller.rb +13 -13
- data/lib/zen/controller/frontend_controller.rb +2 -0
- data/lib/zen/controller/main_controller.rb +9 -8
- data/lib/zen/helper/acl.rb +4 -1
- data/lib/zen/helper/asset.rb +5 -3
- data/lib/zen/helper/breadcrumb.rb +10 -8
- data/lib/zen/helper/common.rb +28 -13
- data/lib/zen/language/en/zen_general.yml +31 -0
- data/lib/zen/language/en/zen_models.yml +13 -0
- data/lib/zen/layout/admin.xhtml +76 -68
- data/lib/zen/layout/login.xhtml +48 -42
- data/lib/zen/liquid/controller_behavior.rb +2 -0
- data/lib/zen/liquid/general.rb +60 -9
- data/lib/zen/liquid/redirect.rb +29 -6
- data/lib/zen/liquid/strip.rb +3 -1
- data/lib/zen/model/methods.rb +7 -5
- data/lib/zen/model/settings.rb +69 -18
- data/lib/zen/package/all.rb +7 -0
- data/lib/zen/{packages → package}/categories/lib/categories.rb +3 -3
- data/lib/zen/package/categories/lib/categories/controller/categories.rb +250 -0
- data/lib/zen/package/categories/lib/categories/controller/category_groups.rb +216 -0
- data/lib/zen/package/categories/lib/categories/language/en/categories.yml +35 -0
- data/lib/zen/package/categories/lib/categories/language/en/category_groups.yml +32 -0
- data/lib/zen/package/categories/lib/categories/liquid/categories.rb +16 -0
- data/lib/zen/{packages → package}/categories/lib/categories/model/category.rb +9 -9
- data/lib/zen/{packages → package}/categories/lib/categories/model/category_group.rb +6 -4
- data/lib/zen/package/categories/lib/categories/view/admin/categories/edit.xhtml +7 -0
- data/lib/zen/package/categories/lib/categories/view/admin/categories/form.xhtml +59 -0
- data/lib/zen/package/categories/lib/categories/view/admin/categories/index.xhtml +78 -0
- data/lib/zen/package/categories/lib/categories/view/admin/categories/new.xhtml +7 -0
- data/lib/zen/package/categories/lib/categories/view/admin/category-groups/edit.xhtml +7 -0
- data/lib/zen/package/categories/lib/categories/view/admin/category-groups/form.xhtml +31 -0
- data/lib/zen/package/categories/lib/categories/view/admin/category-groups/index.xhtml +85 -0
- data/lib/zen/package/categories/lib/categories/view/admin/category-groups/new.xhtml +7 -0
- data/lib/zen/{packages → package}/categories/migrations/.gitkeep +0 -0
- data/lib/zen/{packages → package}/categories/migrations/1295282303_create_schema.rb +3 -2
- data/lib/zen/{packages → package}/comments/lib/comments.rb +1 -1
- data/lib/zen/{packages → package}/comments/lib/comments/controller/comments.rb +81 -41
- data/lib/zen/{packages → package}/comments/lib/comments/controller/comments_form.rb +15 -13
- data/lib/zen/package/comments/lib/comments/language/en/comments.yml +42 -0
- data/lib/zen/{packages → package}/comments/lib/comments/liquid/comment_form.rb +43 -13
- data/lib/zen/{packages → package}/comments/lib/comments/liquid/comments.rb +10 -12
- data/lib/zen/{packages → package}/comments/lib/comments/model/comment.rb +24 -0
- data/lib/zen/package/comments/lib/comments/view/admin/comments/edit.xhtml +7 -0
- data/lib/zen/package/comments/lib/comments/view/admin/comments/form.xhtml +57 -0
- data/lib/zen/package/comments/lib/comments/view/admin/comments/index.xhtml +79 -0
- data/lib/zen/{packages → package}/comments/migrations/.gitkeep +0 -0
- data/lib/zen/{packages → package}/comments/migrations/1295282202_create_schema.rb +6 -4
- data/lib/zen/{packages → package}/custom_fields/lib/custom_fields.rb +2 -2
- data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_field_groups.rb +224 -0
- data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_fields.rb +259 -0
- data/lib/zen/package/custom_fields/lib/custom_fields/language/en/custom_field_groups.yml +32 -0
- data/lib/zen/package/custom_fields/lib/custom_fields/language/en/custom_fields.yml +52 -0
- data/lib/zen/{packages → package}/custom_fields/lib/custom_fields/model/custom_field.rb +12 -7
- data/lib/zen/{packages → package}/custom_fields/lib/custom_fields/model/custom_field_group.rb +14 -4
- data/lib/zen/{packages → package}/custom_fields/lib/custom_fields/model/custom_field_value.rb +4 -2
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/edit.xhtml +7 -0
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/form.xhtml +30 -0
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/index.xhtml +100 -0
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/new.xhtml +7 -0
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/edit.xhtml +7 -0
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/form.xhtml +107 -0
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/index.xhtml +84 -0
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/new.xhtml +7 -0
- data/lib/zen/{packages → package}/custom_fields/migrations/.gitkeep +0 -0
- data/lib/zen/{packages → package}/custom_fields/migrations/1295255665_create_schema.rb +8 -7
- data/lib/zen/package/menus/lib/menus.rb +59 -0
- data/lib/zen/package/menus/lib/menus/controller/menu_items.rb +244 -0
- data/lib/zen/package/menus/lib/menus/controller/menus.rb +231 -0
- data/lib/zen/package/menus/lib/menus/helper/menu_item.rb +93 -0
- data/lib/zen/package/menus/lib/menus/language/en/menu_items.yml +41 -0
- data/lib/zen/package/menus/lib/menus/language/en/menus.yml +39 -0
- data/lib/zen/package/menus/lib/menus/liquid/menus.rb +152 -0
- data/lib/zen/package/menus/lib/menus/model/menu.rb +38 -0
- data/lib/zen/package/menus/lib/menus/model/menu_item.rb +33 -0
- data/lib/zen/package/menus/lib/menus/view/admin/menu-items/edit.xhtml +7 -0
- data/lib/zen/package/menus/lib/menus/view/admin/menu-items/form.xhtml +64 -0
- data/lib/zen/package/menus/lib/menus/view/admin/menu-items/index.xhtml +84 -0
- data/lib/zen/package/menus/lib/menus/view/admin/menu-items/new.xhtml +7 -0
- data/lib/zen/package/menus/lib/menus/view/admin/menus/edit.xhtml +7 -0
- data/lib/zen/package/menus/lib/menus/view/admin/menus/form.xhtml +42 -0
- data/lib/zen/package/menus/lib/menus/view/admin/menus/index.xhtml +95 -0
- data/lib/zen/package/menus/lib/menus/view/admin/menus/new.xhtml +7 -0
- data/lib/zen/{packages/sections → package/menus}/migrations/.gitkeep +0 -0
- data/lib/zen/package/menus/migrations/1297184342_create_schema.rb +33 -0
- data/lib/zen/{packages → package}/sections/lib/sections.rb +0 -0
- data/lib/zen/{packages → package}/sections/lib/sections/controller/section_entries.rb +132 -68
- data/lib/zen/{packages → package}/sections/lib/sections/controller/sections.rb +96 -48
- data/lib/zen/package/sections/lib/sections/language/en/section_entries.yml +43 -0
- data/lib/zen/package/sections/lib/sections/language/en/sections.yml +48 -0
- data/lib/zen/{packages → package}/sections/lib/sections/liquid/section_entries.rb +55 -43
- data/lib/zen/{packages → package}/sections/lib/sections/liquid/sections.rb +9 -8
- data/lib/zen/package/sections/lib/sections/model/section.rb +62 -0
- data/lib/zen/package/sections/lib/sections/model/section_entry.rb +53 -0
- data/lib/zen/package/sections/lib/sections/view/admin/edit.xhtml +7 -0
- data/lib/zen/package/sections/lib/sections/view/admin/form.xhtml +107 -0
- data/lib/zen/package/sections/lib/sections/view/admin/index.xhtml +93 -0
- data/lib/zen/package/sections/lib/sections/view/admin/new.xhtml +7 -0
- data/lib/zen/package/sections/lib/sections/view/admin/section-entries/edit.xhtml +7 -0
- data/lib/zen/package/sections/lib/sections/view/admin/section-entries/form.xhtml +233 -0
- data/lib/zen/package/sections/lib/sections/view/admin/section-entries/index.xhtml +82 -0
- data/lib/zen/package/sections/lib/sections/view/admin/section-entries/new.xhtml +7 -0
- data/lib/zen/{packages/settings → package/sections}/migrations/.gitkeep +0 -0
- data/lib/zen/{packages → package}/sections/migrations/1295251836_create_schema.rb +6 -6
- data/lib/zen/{packages → package}/settings/lib/settings.rb +0 -0
- data/lib/zen/{packages → package}/settings/lib/settings/controller/settings.rb +33 -24
- data/lib/zen/package/settings/lib/settings/language/en/settings.yml +26 -0
- data/lib/zen/{packages → package}/settings/lib/settings/liquid/setting.rb +5 -3
- data/lib/zen/package/settings/lib/settings/model/setting.rb +113 -0
- data/lib/zen/package/settings/lib/settings/view/admin/settings/index.xhtml +111 -0
- data/lib/zen/{packages/users → package/settings}/migrations/.gitkeep +0 -0
- data/lib/zen/{packages → package}/settings/migrations/1295597111_create_schema.rb +2 -2
- data/lib/zen/package/settings/migrations/1299538742_add_language_key.rb +62 -0
- data/lib/zen/{packages → package}/users/lib/users.rb +6 -2
- data/lib/zen/package/users/lib/users/controller/access_rules.rb +238 -0
- data/lib/zen/package/users/lib/users/controller/user_groups.rb +217 -0
- data/lib/zen/{packages → package}/users/lib/users/controller/users.rb +115 -57
- data/lib/zen/package/users/lib/users/language/en/access_rules.yml +35 -0
- data/lib/zen/package/users/lib/users/language/en/user_groups.yml +31 -0
- data/lib/zen/package/users/lib/users/language/en/users.yml +50 -0
- data/lib/zen/{packages → package}/users/lib/users/liquid/user.rb +8 -6
- data/lib/zen/{packages → package}/users/lib/users/liquid/users.rb +5 -3
- data/lib/zen/{packages → package}/users/lib/users/model/access_rule.rb +11 -3
- data/lib/zen/{packages → package}/users/lib/users/model/user.rb +5 -1
- data/lib/zen/{packages → package}/users/lib/users/model/user_group.rb +6 -3
- data/lib/zen/package/users/lib/users/public/admin/js/users/access_rules.js +42 -0
- data/lib/zen/package/users/lib/users/view/admin/access-rules/edit.xhtml +7 -0
- data/lib/zen/package/users/lib/users/view/admin/access-rules/form.xhtml +108 -0
- data/lib/zen/package/users/lib/users/view/admin/access-rules/index.xhtml +93 -0
- data/lib/zen/package/users/lib/users/view/admin/access-rules/new.xhtml +7 -0
- data/lib/zen/package/users/lib/users/view/admin/user-groups/edit.xhtml +7 -0
- data/lib/zen/package/users/lib/users/view/admin/user-groups/form.xhtml +37 -0
- data/lib/zen/package/users/lib/users/view/admin/user-groups/index.xhtml +76 -0
- data/lib/zen/package/users/lib/users/view/admin/user-groups/new.xhtml +7 -0
- data/lib/zen/package/users/lib/users/view/admin/users/edit.xhtml +7 -0
- data/lib/zen/package/users/lib/users/view/admin/users/form.xhtml +53 -0
- data/lib/zen/package/users/lib/users/view/admin/users/index.xhtml +81 -0
- data/lib/zen/package/users/lib/users/view/admin/users/login.xhtml +27 -0
- data/lib/zen/package/users/lib/users/view/admin/users/new.xhtml +7 -0
- data/{pkg → lib/zen/package/users/migrations}/.gitkeep +0 -0
- data/lib/zen/{packages → package}/users/migrations/1295281013_create_schema.rb +2 -2
- data/lib/zen/public/admin/css/boilerplate.css +62 -60
- data/lib/zen/public/admin/css/buttons.css +46 -0
- data/lib/zen/public/admin/css/datepicker.css +163 -0
- data/lib/zen/public/admin/css/editor.css +91 -0
- data/lib/zen/public/admin/css/forms.css +68 -0
- data/lib/zen/public/admin/css/general.css +34 -419
- data/lib/zen/public/admin/css/grid.css +26 -26
- data/lib/zen/public/admin/css/layout.css +73 -62
- data/lib/zen/public/admin/css/modals.css +63 -0
- data/lib/zen/public/admin/css/notifications.css +84 -0
- data/lib/zen/public/admin/css/tables.css +71 -0
- data/lib/zen/public/admin/css/tabs.css +53 -0
- data/lib/zen/public/admin/js/mootools/more.js +139 -51
- data/lib/zen/public/admin/js/vendor/datepicker/Picker.Attach.js +137 -0
- data/lib/zen/public/admin/js/vendor/datepicker/Picker.Date.js +576 -0
- data/lib/zen/public/admin/js/vendor/datepicker/Picker.js +291 -0
- data/lib/zen/public/admin/js/vendor/datepicker/README.md +325 -0
- data/lib/zen/public/admin/js/vendor/datepicker/locale.js +16 -0
- data/lib/zen/public/admin/js/zen/editor/base.js +173 -183
- data/lib/zen/public/admin/js/zen/editor/drivers/html.js +74 -89
- data/lib/zen/public/admin/js/zen/editor/drivers/markdown.js +72 -87
- data/lib/zen/public/admin/js/zen/editor/drivers/textile.js +72 -87
- data/lib/zen/public/admin/js/zen/init.js +65 -51
- data/lib/zen/public/admin/js/zen/modal.js +108 -121
- data/lib/zen/public/admin/js/zen/notification.js +163 -165
- data/lib/zen/public/admin/js/zen/tabs.js +203 -210
- data/lib/zen/task/build.rb +123 -0
- data/lib/zen/task/clean.rb +46 -0
- data/lib/zen/task/db.rb +120 -0
- data/lib/zen/task/package.rb +82 -0
- data/lib/zen/task/proto.rb +116 -0
- data/{LICENSE → license.txt} +2 -2
- data/proto/app/Thorfile +4 -0
- data/proto/app/config/middlewares.rb +3 -3
- data/proto/app/config/requires.rb +1 -6
- data/proto/app/start.rb +5 -10
- data/{lib/zen/packages/settings → proto/package}/LICENSE +0 -0
- data/{lib/zen/packages/categories → proto/package}/README.textile +0 -0
- data/proto/package/lib/package.rb +41 -0
- data/proto/{module/lib/module → package/lib/package}/controller/controllers.rb +3 -2
- data/proto/{module/lib/module → package/lib/package}/language/en/languages.rb +0 -0
- data/proto/{module/lib/module → package/lib/package}/model/model.rb +0 -0
- data/proto/{module/lib/module/view/admin → package/lib/package/view/admin/package}/edit.xhtml +0 -0
- data/proto/{module/lib/module/view/admin → package/lib/package/view/admin/package}/form.xhtml +0 -0
- data/proto/{module/lib/module/view/admin → package/lib/package/view/admin/package}/index.xhtml +0 -0
- data/proto/{module/lib/module/view/admin → package/lib/package/view/admin/package}/new.xhtml +0 -0
- data/proto/{module → package}/migrations/.gitkeep +0 -0
- metadata +199 -280
- data/README.textile +0 -42
- data/Rakefile +0 -6
- data/doc/Categories.html +0 -93
- data/doc/Categories/Controllers.html +0 -93
- data/doc/Categories/Controllers/Categories.html +0 -995
- data/doc/Categories/Controllers/CategoryGroups.html +0 -878
- data/doc/Categories/Models.html +0 -97
- data/doc/Categories/Models/Category.html +0 -269
- data/doc/Categories/Models/CategoryGroup.html +0 -231
- data/doc/Comments.html +0 -93
- data/doc/Comments/Controllers.html +0 -93
- data/doc/Comments/Controllers/Comments.html +0 -797
- data/doc/Comments/Controllers/CommentsForm.html +0 -487
- data/doc/Comments/Liquid.html +0 -93
- data/doc/Comments/Liquid/CommentForm.html +0 -522
- data/doc/Comments/Liquid/Comments.html +0 -543
- data/doc/Comments/Models.html +0 -95
- data/doc/Comments/Models/Comment.html +0 -260
- data/doc/CustomFields.html +0 -93
- data/doc/CustomFields/Controllers.html +0 -93
- data/doc/CustomFields/Controllers/CustomFieldGroups.html +0 -902
- data/doc/CustomFields/Controllers/CustomFields.html +0 -974
- data/doc/CustomFields/Models.html +0 -97
- data/doc/CustomFields/Models/CustomField.html +0 -272
- data/doc/CustomFields/Models/CustomFieldGroup.html +0 -259
- data/doc/CustomFields/Models/CustomFieldValue.html +0 -154
- data/doc/Ramaze.html +0 -93
- data/doc/Ramaze/Helper.html +0 -93
- data/doc/Ramaze/Helper/ACL.html +0 -531
- data/doc/Ramaze/Helper/Asset.html +0 -617
- data/doc/Ramaze/Helper/Breadcrumb.html +0 -411
- data/doc/Ramaze/Helper/Common.html +0 -738
- data/doc/Sections.html +0 -93
- data/doc/Sections/Controllers.html +0 -93
- data/doc/Sections/Controllers/SectionEntries.html +0 -1100
- data/doc/Sections/Controllers/Sections.html +0 -953
- data/doc/Sections/Liquid.html +0 -93
- data/doc/Sections/Liquid/SectionEntries.html +0 -674
- data/doc/Sections/Liquid/Sections.html +0 -494
- data/doc/Sections/Models.html +0 -97
- data/doc/Sections/Models/Section.html +0 -272
- data/doc/Sections/Models/SectionEntry.html +0 -264
- data/doc/Sequel.html +0 -91
- data/doc/Sequel/Model.html +0 -243
- data/doc/Settings.html +0 -93
- data/doc/Settings/Controllers.html +0 -91
- data/doc/Settings/Controllers/Settings.html +0 -565
- data/doc/Settings/Liquid.html +0 -91
- data/doc/Settings/Liquid/Setting.html +0 -426
- data/doc/Settings/Models.html +0 -95
- data/doc/Settings/Models/Setting.html +0 -293
- data/doc/Users.html +0 -93
- data/doc/Users/Controllers.html +0 -93
- data/doc/Users/Controllers/AccessRules.html +0 -904
- data/doc/Users/Controllers/UserGroups.html +0 -879
- data/doc/Users/Controllers/Users.html +0 -1124
- data/doc/Users/Liquid.html +0 -93
- data/doc/Users/Liquid/User.html +0 -480
- data/doc/Users/Liquid/Users.html +0 -495
- data/doc/Users/Models.html +0 -97
- data/doc/Users/Models/AccessRule.html +0 -257
- data/doc/Users/Models/User.html +0 -649
- data/doc/Users/Models/UserGroup.html +0 -267
- data/doc/Zen.html +0 -391
- data/doc/Zen/Bin.html +0 -113
- data/doc/Zen/Bin/Base.html +0 -727
- data/doc/Zen/Controllers.html +0 -115
- data/doc/Zen/Controllers/AdminController.html +0 -298
- data/doc/Zen/Controllers/BaseController.html +0 -272
- data/doc/Zen/Controllers/FrontendController.html +0 -164
- data/doc/Zen/Controllers/MainController.html +0 -421
- data/doc/Zen/Database.html +0 -498
- data/doc/Zen/Language.html +0 -660
- data/doc/Zen/Liquid.html +0 -117
- data/doc/Zen/Liquid/ControllerBehavior.html +0 -448
- data/doc/Zen/Liquid/General.html +0 -444
- data/doc/Zen/Liquid/Redirect.html +0 -435
- data/doc/Zen/Liquid/Strip.html +0 -447
- data/doc/Zen/Logger.html +0 -393
- data/doc/Zen/Package.html +0 -909
- data/doc/_index.html +0 -724
- data/doc/class_list.html +0 -36
- data/doc/css/common.css +0 -1
- data/doc/css/full_list.css +0 -53
- data/doc/css/style.css +0 -310
- data/doc/file.README.html +0 -86
- data/doc/file_list.html +0 -38
- data/doc/frames.html +0 -13
- data/doc/index.html +0 -86
- data/doc/js/app.js +0 -203
- data/doc/js/full_list.js +0 -149
- data/doc/js/jquery.js +0 -154
- data/doc/method_list.html +0 -1139
- data/doc/top-level-namespace.html +0 -88
- data/lib/zen/language/en/zen_general.rb +0 -21
- data/lib/zen/language/en/zen_models.rb +0 -39
- data/lib/zen/packages/categories/LICENSE +0 -19
- data/lib/zen/packages/categories/lib/categories/controller/categories.rb +0 -202
- data/lib/zen/packages/categories/lib/categories/controller/category_groups.rb +0 -173
- data/lib/zen/packages/categories/lib/categories/language/en/categories.rb +0 -38
- data/lib/zen/packages/categories/lib/categories/language/en/category_groups.rb +0 -37
- data/lib/zen/packages/categories/lib/categories/view/admin/categories/edit.xhtml +0 -7
- data/lib/zen/packages/categories/lib/categories/view/admin/categories/form.xhtml +0 -36
- data/lib/zen/packages/categories/lib/categories/view/admin/categories/index.xhtml +0 -70
- data/lib/zen/packages/categories/lib/categories/view/admin/categories/new.xhtml +0 -7
- data/lib/zen/packages/categories/lib/categories/view/admin/category_groups/edit.xhtml +0 -7
- data/lib/zen/packages/categories/lib/categories/view/admin/category_groups/form.xhtml +0 -18
- data/lib/zen/packages/categories/lib/categories/view/admin/category_groups/index.xhtml +0 -72
- data/lib/zen/packages/categories/lib/categories/view/admin/category_groups/new.xhtml +0 -7
- data/lib/zen/packages/comments/LICENSE +0 -19
- data/lib/zen/packages/comments/README.textile +0 -0
- data/lib/zen/packages/comments/lib/comments/language/en/comments.rb +0 -52
- data/lib/zen/packages/comments/lib/comments/view/admin/comments/edit.xhtml +0 -7
- data/lib/zen/packages/comments/lib/comments/view/admin/comments/form.xhtml +0 -31
- data/lib/zen/packages/comments/lib/comments/view/admin/comments/index.xhtml +0 -74
- data/lib/zen/packages/comments/migrations/1296949631_add_defensio_signature.rb +0 -11
- data/lib/zen/packages/custom_fields/LICENSE +0 -19
- data/lib/zen/packages/custom_fields/README.textile +0 -0
- data/lib/zen/packages/custom_fields/lib/custom_fields/controller/custom_field_groups.rb +0 -179
- data/lib/zen/packages/custom_fields/lib/custom_fields/controller/custom_fields.rb +0 -194
- data/lib/zen/packages/custom_fields/lib/custom_fields/language/en/custom_field_groups.rb +0 -45
- data/lib/zen/packages/custom_fields/lib/custom_fields/language/en/custom_fields.rb +0 -64
- data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_field_groups/edit.xhtml +0 -7
- data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_field_groups/form.xhtml +0 -18
- data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_field_groups/index.xhtml +0 -88
- data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_field_groups/new.xhtml +0 -7
- data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_fields/edit.xhtml +0 -7
- data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_fields/form.xhtml +0 -50
- data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_fields/index.xhtml +0 -75
- data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_fields/new.xhtml +0 -7
- data/lib/zen/packages/sections/LICENSE +0 -19
- data/lib/zen/packages/sections/README.textile +0 -43
- data/lib/zen/packages/sections/lib/sections/language/en/section_entries.rb +0 -58
- data/lib/zen/packages/sections/lib/sections/language/en/sections.rb +0 -63
- data/lib/zen/packages/sections/lib/sections/model/section.rb +0 -43
- data/lib/zen/packages/sections/lib/sections/model/section_entry.rb +0 -43
- data/lib/zen/packages/sections/lib/sections/view/admin/edit.xhtml +0 -7
- data/lib/zen/packages/sections/lib/sections/view/admin/form.xhtml +0 -54
- data/lib/zen/packages/sections/lib/sections/view/admin/index.xhtml +0 -77
- data/lib/zen/packages/sections/lib/sections/view/admin/new.xhtml +0 -7
- data/lib/zen/packages/sections/lib/sections/view/admin/section_entries/edit.xhtml +0 -7
- data/lib/zen/packages/sections/lib/sections/view/admin/section_entries/form.xhtml +0 -147
- data/lib/zen/packages/sections/lib/sections/view/admin/section_entries/index.xhtml +0 -74
- data/lib/zen/packages/sections/lib/sections/view/admin/section_entries/new.xhtml +0 -7
- data/lib/zen/packages/sections/migrations/1296335671_userdata_section_entries.rb +0 -18
- data/lib/zen/packages/sections/migrations/1296936110_drop_comment_antispam.rb +0 -11
- data/lib/zen/packages/settings/README.textile +0 -0
- data/lib/zen/packages/settings/lib/settings/language/en/settings.rb +0 -56
- data/lib/zen/packages/settings/lib/settings/model/setting.rb +0 -38
- data/lib/zen/packages/settings/lib/settings/view/admin/settings/index.xhtml +0 -79
- data/lib/zen/packages/users/LICENSE +0 -19
- data/lib/zen/packages/users/README.textile +0 -0
- data/lib/zen/packages/users/lib/users/controller/access_rules.rb +0 -186
- data/lib/zen/packages/users/lib/users/controller/user_groups.rb +0 -171
- data/lib/zen/packages/users/lib/users/language/en/access_rules.rb +0 -49
- data/lib/zen/packages/users/lib/users/language/en/user_groups.rb +0 -42
- data/lib/zen/packages/users/lib/users/language/en/users.rb +0 -63
- data/lib/zen/packages/users/lib/users/public/admin/js/users/access_rules.js +0 -43
- data/lib/zen/packages/users/lib/users/view/admin/access_rules/edit.xhtml +0 -7
- data/lib/zen/packages/users/lib/users/view/admin/access_rules/form.xhtml +0 -68
- data/lib/zen/packages/users/lib/users/view/admin/access_rules/index.xhtml +0 -85
- data/lib/zen/packages/users/lib/users/view/admin/access_rules/new.xhtml +0 -7
- data/lib/zen/packages/users/lib/users/view/admin/user_groups/edit.xhtml +0 -7
- data/lib/zen/packages/users/lib/users/view/admin/user_groups/form.xhtml +0 -19
- data/lib/zen/packages/users/lib/users/view/admin/user_groups/index.xhtml +0 -69
- data/lib/zen/packages/users/lib/users/view/admin/user_groups/new.xhtml +0 -7
- data/lib/zen/packages/users/lib/users/view/admin/users/edit.xhtml +0 -7
- data/lib/zen/packages/users/lib/users/view/admin/users/form.xhtml +0 -25
- data/lib/zen/packages/users/lib/users/view/admin/users/index.xhtml +0 -73
- data/lib/zen/packages/users/lib/users/view/admin/users/login.xhtml +0 -22
- data/lib/zen/packages/users/lib/users/view/admin/users/new.xhtml +0 -7
- data/lib/zen/tasks.rb +0 -6
- data/proto/app/Rakefile +0 -2
- data/proto/module/LICENSE +0 -0
- data/proto/module/README.textile +0 -0
- data/proto/module/lib/module.rb +0 -15
- data/spec/javascript/css/base.css +0 -177
- data/spec/javascript/css/style.css +0 -204
- data/spec/javascript/css/typography.css +0 -70
- data/spec/javascript/editor/index.html +0 -65
- data/spec/javascript/images/close.png +0 -0
- data/spec/javascript/images/info.png +0 -0
- data/spec/javascript/js/editor.js +0 -16
- data/spec/javascript/js/modal.js +0 -12
- data/spec/javascript/js/namespace.js +0 -2
- data/spec/javascript/js/notification.js +0 -43
- data/spec/javascript/js/tabs.js +0 -8
- data/spec/javascript/modal/index.html +0 -45
- data/spec/javascript/notification/index.html +0 -48
- data/spec/javascript/tabs/index.html +0 -73
- data/spec/javascript/tabs/tab_1.html +0 -1
- data/spec/javascript/tabs/tab_2.html +0 -1
- data/spec/zen/base/language.rb +0 -31
- data/spec/zen/base/logger.rb +0 -34
- data/spec/zen/base/package.rb +0 -47
- data/spec/zen/config/database.rb +0 -8
- data/spec/zen/helper/asset.rb +0 -26
- data/spec/zen/helper/breadcrumb.rb +0 -24
- data/spec/zen/language/en/general.rb +0 -4
- data/spec/zen/language/nl/general.rb +0 -4
- data/spec/zen/liquid/general.rb +0 -42
- data/spec/zen/logs/.gitkeep +0 -0
- data/spec/zen/spec.rb +0 -9
- data/spec/zen/spec_database.db +0 -0
- data/tasks/bacon.rake +0 -99
- data/tasks/build.rake +0 -72
- data/tasks/clean.rake +0 -18
- data/tasks/db.rake +0 -81
- data/tasks/doc.rake +0 -5
- data/tasks/extension.rake +0 -65
- data/tasks/proto.rake +0 -37
- data/tasks/theme.rake +0 -63
data/README.md
ADDED
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# README
|
|
2
|
+
|
|
3
|
+
Zen is a modular CMS written on top of the awesome Ramaze framework.
|
|
4
|
+
Zen was built out of the frustration with Expression Engine, a popular CMS built on top of
|
|
5
|
+
the Codeigniter framework which in turn is written using PHP. While I really like Codeigniter,
|
|
6
|
+
ExpressionEngine and EllisLab there were several problems that bothered me.
|
|
7
|
+
So I set out to write a system that's loosely based on ExpressionEngine but fits my needs.
|
|
8
|
+
Because of this certain features may seem similar to those provided by EE and while at
|
|
9
|
+
certain points there are similarities there are also pretty big differences.
|
|
10
|
+
|
|
11
|
+
## Requirements
|
|
12
|
+
|
|
13
|
+
The following Gems are always required:
|
|
14
|
+
|
|
15
|
+
* Ramaze
|
|
16
|
+
* Sequel
|
|
17
|
+
* Liquid
|
|
18
|
+
* BCrypt
|
|
19
|
+
* JSON
|
|
20
|
+
* Ruby 1.9
|
|
21
|
+
* Defensio
|
|
22
|
+
* Thor
|
|
23
|
+
* Sequel Sluggable
|
|
24
|
+
|
|
25
|
+
These Gems are only required when developing/hacking Zen itself:
|
|
26
|
+
|
|
27
|
+
* RDiscount
|
|
28
|
+
* YARD
|
|
29
|
+
* RSpec 2
|
|
30
|
+
* Webrat
|
|
31
|
+
|
|
32
|
+
## Installation
|
|
33
|
+
|
|
34
|
+
Installing Zen using Rubygems is probably the easiest way:
|
|
35
|
+
|
|
36
|
+
$ gem install zen
|
|
37
|
+
$ zen app application_name
|
|
38
|
+
|
|
39
|
+
If you like to hack with the core of Zen it's best to install it using Git:
|
|
40
|
+
|
|
41
|
+
$ git clone git://github.com/zen-cms/zen-core.git
|
|
42
|
+
$ cd zen-core
|
|
43
|
+
$ thor build:gem_clean
|
|
44
|
+
|
|
45
|
+
## Database Support
|
|
46
|
+
|
|
47
|
+
Technically Zen should run on any given DBMS that's supported by Sequel as Zen doesn't
|
|
48
|
+
use any DBMS specific field types. However, there might be a chance that it won't work.
|
|
49
|
+
If you happen to have any problems getting Zen running using your database of choice
|
|
50
|
+
feel free to submit a ticket or post it on the mailing list.
|
|
51
|
+
|
|
52
|
+
The Zen website itself is tested and served using MySQL, SQLite3 works just as fine and
|
|
53
|
+
PostgreSQL will be tested in the near future.
|
|
54
|
+
|
|
55
|
+
## Running Zen
|
|
56
|
+
|
|
57
|
+
Zen can be run using any webserver as long as it supports Rack. Thin, Unicorn or Passenger,
|
|
58
|
+
they should all work. The main website of Zen is served using Unicorn and Nginx, development
|
|
59
|
+
is done using WEBRick and Unicorn.
|
|
60
|
+
|
|
61
|
+
## Documentation
|
|
62
|
+
|
|
63
|
+
The documentation (both the userguide and the API docs) can be found on the website,
|
|
64
|
+
located [here][zen documentation].
|
|
65
|
+
|
|
66
|
+
## Hacking/Contributing
|
|
67
|
+
|
|
68
|
+
Zen follows a relatively strict set of guidelines when it comes to developing core features
|
|
69
|
+
and making sure everything goes along smoothly. When working with Git a branch model based
|
|
70
|
+
on [nvie's branch model][nvie branch model] is used. This means that the "master" branch
|
|
71
|
+
is directly used for pushing Gems and thus should *always* contain stable code. Develop
|
|
72
|
+
is used to contain less stable (but not unstable) commits that will be pushed into "master"
|
|
73
|
+
from time to time. All other branches, e.g. "rspec2" will be used for individual features.
|
|
74
|
+
|
|
75
|
+
Besides following this model developers are also expected to write tests using either
|
|
76
|
+
RSpec or Webrat for their features. Webrat is used to test controllers and browser based
|
|
77
|
+
tests while RSpec is used to test libraries, helpers, etc.
|
|
78
|
+
|
|
79
|
+
If you have a cool idea, implemented it and think it's worth merging into Zen itself feel
|
|
80
|
+
free to submit a pull request and I'll take a look at it.
|
|
81
|
+
|
|
82
|
+
## Coding Standards
|
|
83
|
+
|
|
84
|
+
* 2 spaces per indentation level for Ruby code.
|
|
85
|
+
* 4 spaces per indentation level for Javascript, CSS and HTML.
|
|
86
|
+
* Document your code, that includes CSS and Javascript files.
|
|
87
|
+
* No tabs at all times
|
|
88
|
+
* Markdown is used for all markup
|
|
89
|
+
* Comments should be in English
|
|
90
|
+
* The maximum width of each line should be no more than 90 columns, this makes it easier
|
|
91
|
+
to read code in terminals or when using split view modes.
|
|
92
|
+
* Big changes should always be added to the file "CHANGELOG.md".
|
|
93
|
+
|
|
94
|
+
## Community
|
|
95
|
+
|
|
96
|
+
* [Website][zen website]
|
|
97
|
+
* Mailing list
|
|
98
|
+
|
|
99
|
+
Zen does not have it's own IRC channel at this time but you can usually find me in any
|
|
100
|
+
of the following channels on Freenode (all are prefixed with a hash sign):
|
|
101
|
+
|
|
102
|
+
* forrst-chat
|
|
103
|
+
* ramaze
|
|
104
|
+
* codeigniter
|
|
105
|
+
* mootools
|
|
106
|
+
|
|
107
|
+
## License
|
|
108
|
+
|
|
109
|
+
Zen is licensed under the MIT license. For more information about this license open
|
|
110
|
+
the file "license.txt".
|
|
111
|
+
|
|
112
|
+
[zen website]: http://zen-cms.com/
|
|
113
|
+
[zen documentation]: http://zen-cms.com/documentation/
|
|
114
|
+
[nvie branch model]: http://nvie.com/posts/a-successful-git-branching-model/
|
data/ROADMAP.md
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Roadmap
|
|
2
|
+
|
|
3
|
+
Please note that the release dates in this roadmap may and most likely will change from
|
|
4
|
+
time to time. List items that contain a "(!)" are considered to be important and should
|
|
5
|
+
be solved/added before any of the other items. Items containing "(?)" are considered
|
|
6
|
+
to be unverified/undecided and might not be added/completed at all.
|
|
7
|
+
|
|
8
|
+
## Planned Releases
|
|
9
|
+
|
|
10
|
+
### 0.3 - June 2011
|
|
11
|
+
|
|
12
|
+
* Most parts of the core covered by specs. (!)
|
|
13
|
+
* A working (although probably rough) plugin system to extend the inner parts of Zen.
|
|
14
|
+
An example of a plugin would be something that allows the use of Akismet for comments
|
|
15
|
+
rather than Defensio.
|
|
16
|
+
* Website completely up and running. (!)
|
|
17
|
+
* Translation system for the Javascript used in the backend
|
|
18
|
+
* Documentation/Userguide online
|
|
19
|
+
|
|
20
|
+
### 0.2 - March 2011
|
|
21
|
+
|
|
22
|
+
* General code improvements.
|
|
23
|
+
* Navigation module for the frontend.
|
|
24
|
+
* Improved Liquid tags.
|
|
25
|
+
* A working datepicker
|
|
26
|
+
* Refilling forms in case of errors (!)
|
|
27
|
+
|
|
28
|
+
### 0.1a - February 2011
|
|
29
|
+
|
|
30
|
+
The first public alpha released, mainly meant to give people and idea of what Zen is
|
|
31
|
+
all about.
|
data/Thorfile
ADDED
data/lib/zen.rb
CHANGED
|
@@ -11,21 +11,21 @@ module Zen
|
|
|
11
11
|
require 'bcrypt'
|
|
12
12
|
require 'liquid'
|
|
13
13
|
require 'json'
|
|
14
|
-
require 'redcloth'
|
|
15
|
-
require 'rdiscount'
|
|
16
14
|
require 'defensio'
|
|
15
|
+
require 'thor'
|
|
16
|
+
require 'sequel_sluggable'
|
|
17
|
+
require 'yaml'
|
|
17
18
|
require __DIR__('zen/base/version')
|
|
18
19
|
|
|
19
20
|
include Innate::Optioned
|
|
20
21
|
|
|
21
22
|
# Update several paths so we can load helpers/layouts from the Zen gem
|
|
22
|
-
Innate::HelpersHelper.options.paths
|
|
23
|
-
Ramaze.options.roots
|
|
23
|
+
Innate::HelpersHelper.options.paths.push(__DIR__('zen'))
|
|
24
|
+
Ramaze.options.roots.push(__DIR__('zen'))
|
|
24
25
|
|
|
25
26
|
options.dsl do
|
|
26
27
|
# General configuration options
|
|
27
28
|
o 'The character encoding to use when dealing with data', :encoding, 'utf8'
|
|
28
|
-
o 'The system language', :language, 'en'
|
|
29
29
|
o 'The date format to use for log files and such.', :date_format, '%d-%m-%Y'
|
|
30
30
|
o 'The base directory of Zen.', :root, ''
|
|
31
31
|
end
|
|
@@ -49,11 +49,11 @@ module Zen
|
|
|
49
49
|
require __DIR__ 'zen/liquid/strip'
|
|
50
50
|
|
|
51
51
|
class << self
|
|
52
|
-
|
|
52
|
+
attr_reader :languages
|
|
53
53
|
end
|
|
54
54
|
|
|
55
55
|
# Update the language paths
|
|
56
|
-
Zen::Language.
|
|
56
|
+
Zen::Language.options.paths.push(__DIR__('zen'))
|
|
57
57
|
|
|
58
58
|
# Register our Liquid tags
|
|
59
59
|
::Liquid::Template.register_tag('strip' , Liquid::Strip)
|
|
@@ -63,15 +63,18 @@ module Zen
|
|
|
63
63
|
# Intitializes Zen by connecting the database and setting up various other things.
|
|
64
64
|
#
|
|
65
65
|
# @author Yorick Peterse
|
|
66
|
+
# @since 0.1
|
|
66
67
|
#
|
|
67
68
|
def self.init
|
|
68
69
|
# Initialize the database
|
|
69
70
|
Zen::Database.init
|
|
71
|
+
Zen::Language.load('zen_general')
|
|
70
72
|
|
|
71
73
|
require __DIR__ 'zen/model/settings'
|
|
72
74
|
require __DIR__ 'zen/model/methods'
|
|
73
75
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
+
@languages = {
|
|
77
|
+
'en' => lang('zen_general.special.language_hash.en')
|
|
78
|
+
}
|
|
76
79
|
end
|
|
77
|
-
end
|
|
80
|
+
end
|
data/lib/zen/base/database.rb
CHANGED
|
@@ -1,39 +1,45 @@
|
|
|
1
|
+
#:nodoc:
|
|
1
2
|
module Zen
|
|
2
3
|
##
|
|
3
4
|
# The database module is one of the most important classes in Zen (which is quite obvious).
|
|
4
|
-
# Without this module the application wouldn't exist. The database module is
|
|
5
|
-
# wrapper around the Sequel.connect method and allows developers
|
|
6
|
-
# settings for various environments (live, test, production, etc)
|
|
5
|
+
# Without this module the application wouldn't exist. The database module is
|
|
6
|
+
# basically a small wrapper around the Sequel.connect method and allows developers
|
|
7
|
+
# to specify database settings for various environments (live, test, production, etc)
|
|
8
|
+
# using a simple block.
|
|
7
9
|
#
|
|
8
|
-
#
|
|
10
|
+
# ## Database Configuration
|
|
9
11
|
#
|
|
10
12
|
# Connecting to a database is fairly easy and only requires a single configuration file.
|
|
11
|
-
# In this file, called "database.rb" you'll define all your database environments
|
|
13
|
+
# In this file, called "database.rb" you'll define all your database environments
|
|
14
|
+
# (live, dev, test, etc).
|
|
12
15
|
#
|
|
13
|
-
#
|
|
14
|
-
#
|
|
15
|
-
#
|
|
16
|
+
# Zen::Database.mode :dev do |db|
|
|
17
|
+
# db.adapter = 'mysql'
|
|
18
|
+
# db.host = 'localhost'
|
|
16
19
|
#
|
|
17
|
-
#
|
|
18
|
-
#
|
|
19
|
-
#
|
|
20
|
-
#
|
|
20
|
+
# db.username = 'root'
|
|
21
|
+
# db.password = 'root'
|
|
22
|
+
# db.database = 'database'
|
|
23
|
+
# end
|
|
21
24
|
#
|
|
22
|
-
#
|
|
23
|
-
# called "database". When placing multiple environments in the
|
|
24
|
-
#
|
|
25
|
+
# In this example we're connecting to "localhost" using the mysql adapter and
|
|
26
|
+
# selecting the database called "database". When placing multiple environments in the
|
|
27
|
+
# same file you don't have to worry about them overriding eachother, Zen will only
|
|
28
|
+
# load the environment settings of the block that matches
|
|
25
29
|
# the current environment set in Ramaze.options.mode.
|
|
26
30
|
#
|
|
27
|
-
#
|
|
31
|
+
# ## Database Interaction
|
|
28
32
|
#
|
|
29
|
-
# Once your database configuration file has been loaded you can communicate with the
|
|
30
|
-
# models. Each model should extend the base model provided by Sequel:
|
|
33
|
+
# Once your database configuration file has been loaded you can communicate with the
|
|
34
|
+
# database using models. Each model should extend the base model provided by Sequel:
|
|
31
35
|
#
|
|
32
|
-
#
|
|
33
|
-
#
|
|
36
|
+
# class Comment < Sequel::Model
|
|
37
|
+
#
|
|
38
|
+
# end
|
|
34
39
|
#
|
|
35
|
-
# Models can be called like any other class and don't need to be initialized. For
|
|
36
|
-
# on how to use models using Sequel you should read Sequel's
|
|
40
|
+
# Models can be called like any other class and don't need to be initialized. For
|
|
41
|
+
# more information on how to use models using Sequel you should read Sequel's
|
|
42
|
+
# documentation: http://sequel.rubyforge.com/
|
|
37
43
|
#
|
|
38
44
|
# @author Yorick Peterse
|
|
39
45
|
# @since 0.1
|
|
@@ -73,7 +79,7 @@ module Zen
|
|
|
73
79
|
:database => self.options.database,
|
|
74
80
|
:username => self.options.username,
|
|
75
81
|
:password => self.options.password,
|
|
76
|
-
:logger => Zen::Logger.new("#{Zen.options.root}/
|
|
82
|
+
:logger => Zen::Logger.new("#{Zen.options.root}/log/database"),
|
|
77
83
|
:test => true,
|
|
78
84
|
:encoding => Zen.options.encoding)
|
|
79
85
|
|
|
@@ -84,10 +90,10 @@ module Zen
|
|
|
84
90
|
end
|
|
85
91
|
|
|
86
92
|
##
|
|
87
|
-
# Method that's used to provide the ability to use different database configurations
|
|
88
|
-
# mode. This method basically just sets the Zen.options.db parameters based
|
|
89
|
-
# in the block. If you don't want to use different database
|
|
90
|
-
# directly using Zen.options.db.
|
|
93
|
+
# Method that's used to provide the ability to use different database configurations
|
|
94
|
+
# for each mode. This method basically just sets the Zen.options.db parameters based
|
|
95
|
+
# on the provided variables in the block. If you don't want to use different database
|
|
96
|
+
# configurations you can just set the variables directly using Zen.options.db.
|
|
91
97
|
#
|
|
92
98
|
# @author Yorick Peterse
|
|
93
99
|
# @since 0.1
|
|
@@ -102,4 +108,4 @@ module Zen
|
|
|
102
108
|
end
|
|
103
109
|
end
|
|
104
110
|
end
|
|
105
|
-
end
|
|
111
|
+
end
|
data/lib/zen/base/language.rb
CHANGED
|
@@ -1,132 +1,214 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
#:nodoc:
|
|
3
2
|
module Zen
|
|
4
3
|
##
|
|
5
|
-
# The
|
|
6
|
-
#
|
|
7
|
-
#
|
|
8
|
-
#
|
|
9
|
-
#
|
|
4
|
+
# The language module is used for writing and using text translations. Translations are
|
|
5
|
+
# stored in a simple YAML file inside a directory called "language" followed by a directory
|
|
6
|
+
# who's name matches the language code for which it's translations should be used.
|
|
7
|
+
# Say we wanted to translate "Login" and "Register" into different languages our YAML
|
|
8
|
+
# file would look like the following:
|
|
9
|
+
#
|
|
10
|
+
# ---
|
|
11
|
+
# login: "Login"
|
|
12
|
+
# register: "Register"
|
|
13
|
+
#
|
|
14
|
+
# If we save this file under parent_directory/language/en/tutorial.yml we could then
|
|
15
|
+
# load that file as following:
|
|
16
|
+
#
|
|
17
|
+
# Zen::Language.load('tutorial')
|
|
10
18
|
#
|
|
11
|
-
#
|
|
19
|
+
# ## Loading Translations
|
|
12
20
|
#
|
|
13
|
-
#
|
|
14
|
-
# and
|
|
15
|
-
#
|
|
21
|
+
# The load() method will look for a YAML file of which the name matches the given string
|
|
22
|
+
# and can be found in the directory for the current language. This means that if we were
|
|
23
|
+
# to switch our language without creating a translation file for that language we wouldn't
|
|
24
|
+
# be able to use it (makes sense right?).
|
|
16
25
|
#
|
|
17
|
-
#
|
|
18
|
-
#
|
|
19
|
-
# end
|
|
26
|
+
# Once your translation file is in place and it's loaded it can be used using the lang()
|
|
27
|
+
# method. Example:
|
|
20
28
|
#
|
|
21
|
-
#
|
|
22
|
-
# do something like the following:
|
|
29
|
+
# lang('tutorial.login') # => "Login"
|
|
23
30
|
#
|
|
24
|
-
#
|
|
25
|
-
# item.username = 'Username'
|
|
26
|
-
# item.passowrd = 'Password'
|
|
27
|
-
# end
|
|
31
|
+
# ## Directory Structure
|
|
28
32
|
#
|
|
29
|
-
#
|
|
30
|
-
#
|
|
31
|
-
# bc. lang = Zen::Language.load 'example'
|
|
32
|
-
# # We can now access our translation items from the lang variable
|
|
33
|
-
# lang.username
|
|
34
|
-
# lang.password
|
|
33
|
+
# As mentioned earlier language files are saved in a certain directory. The structure
|
|
34
|
+
# of this directory looks like the following:
|
|
35
35
|
#
|
|
36
|
-
#
|
|
36
|
+
# parent directory
|
|
37
|
+
# |
|
|
38
|
+
# |__ language
|
|
39
|
+
# |
|
|
40
|
+
# |__ language key (e.g. "en")
|
|
41
|
+
# |
|
|
42
|
+
# |__ filename.yml
|
|
37
43
|
#
|
|
38
|
-
#
|
|
44
|
+
# When loading a language file this module will loop through a certain number of paths.
|
|
45
|
+
# The array containing all base directories to loop through can be updated as following:
|
|
39
46
|
#
|
|
40
|
-
#
|
|
41
|
-
# it extremely easy to retrieve dynamic data for your language files (a list of installed extensions for example).
|
|
42
|
-
# Sub items are generally specified as a hash:
|
|
47
|
+
# Zen::Language.options.paths.push('/path/to/directory')
|
|
43
48
|
#
|
|
44
|
-
#
|
|
49
|
+
# It's important that you _don't_ add a /language segment to the path, this will be done
|
|
50
|
+
# automatically.
|
|
45
51
|
#
|
|
46
|
-
#
|
|
52
|
+
# ## Options
|
|
53
|
+
#
|
|
54
|
+
# * language: Small string that defines the current language (e.g. "en").
|
|
55
|
+
# * paths: Array of paths to look for a language file
|
|
47
56
|
#
|
|
48
57
|
# @author Yorick Peterse
|
|
49
|
-
# @since 0.
|
|
58
|
+
# @since 0.2
|
|
50
59
|
#
|
|
51
60
|
module Language
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
61
|
+
include Ramaze::Optioned
|
|
62
|
+
|
|
63
|
+
options.dsl do
|
|
64
|
+
o 'Small string that defines the current language (e.g. "en").', :language, 'en'
|
|
65
|
+
o 'Array of paths to look for a language file' , :paths , []
|
|
66
|
+
end
|
|
67
|
+
|
|
55
68
|
class << self
|
|
56
|
-
|
|
57
|
-
attr_accessor :language_paths
|
|
69
|
+
attr_reader :translations
|
|
58
70
|
end
|
|
59
71
|
|
|
60
72
|
##
|
|
61
|
-
# Tries to load
|
|
62
|
-
#
|
|
63
|
-
#
|
|
64
|
-
#
|
|
73
|
+
# Tries to load a language file for the given name. If no language files were found
|
|
74
|
+
# based on the name and the current language an exception will be raised.
|
|
75
|
+
#
|
|
65
76
|
# @example
|
|
66
|
-
#
|
|
67
|
-
# @user_lang.username
|
|
77
|
+
# Zen::Language.load('user')
|
|
68
78
|
#
|
|
69
79
|
# @author Yorick Peterse
|
|
70
|
-
# @
|
|
71
|
-
#
|
|
72
|
-
# @return [Object] An OpenStruct object containing all the language keys and their values.
|
|
80
|
+
# @since 0.1
|
|
81
|
+
# @param [String] lang_name The name of the language file to load.
|
|
73
82
|
#
|
|
74
|
-
def self.load
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
hash_key = Zen.options.language + '_' + lang_name
|
|
78
|
-
hash_key = hash_key.to_sym
|
|
83
|
+
def self.load(lang_name)
|
|
84
|
+
@translations ||= {}
|
|
85
|
+
@translations[self.options.language.to_s] ||= {}
|
|
79
86
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
return @language_keys[hash_key]
|
|
87
|
+
if @translations[self.options.language.to_s][lang_name.to_s]
|
|
88
|
+
return
|
|
83
89
|
end
|
|
84
|
-
|
|
85
|
-
# Time to load the file
|
|
86
|
-
paths = @language_paths + Ramaze.options.roots
|
|
87
|
-
|
|
88
|
-
paths.each do |dir|
|
|
89
|
-
lang_path = "#{dir}/language/#{Zen.options.language}/#{lang_name}.rb"
|
|
90
90
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
91
|
+
self.options.paths.each do |path|
|
|
92
|
+
path += "/language/#{self.options.language}/#{lang_name}.yml"
|
|
93
|
+
|
|
94
|
+
# Load the file and save it
|
|
95
|
+
if File.exist?(path)
|
|
96
|
+
translation = YAML.load_file(path)
|
|
97
|
+
|
|
98
|
+
# Conver the hash to a dot based hash. This means that {:person => {:age => 18}}
|
|
99
|
+
# would result in {'person.age' => 18}.
|
|
100
|
+
translation = self.to_dotted_hash({lang_name.to_s => translation})
|
|
101
|
+
|
|
102
|
+
@translations[self.options.language.to_s] ||= {}
|
|
103
|
+
@translations[self.options.language.to_s].merge!(translation)
|
|
104
|
+
|
|
105
|
+
# Prevents the exception from being raised
|
|
106
|
+
return
|
|
107
|
+
end
|
|
96
108
|
end
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
return false
|
|
109
|
+
|
|
110
|
+
raise "No language file could be found for \"#{lang_name}\""
|
|
100
111
|
end
|
|
101
|
-
|
|
112
|
+
|
|
102
113
|
##
|
|
103
|
-
#
|
|
104
|
-
#
|
|
114
|
+
# Method for retrieving the correct language item based on the given string.
|
|
115
|
+
# If you want to retrieve sub-items you can separate each level with a dot:
|
|
116
|
+
#
|
|
117
|
+
# lang('tutorial.main.sub')
|
|
118
|
+
#
|
|
119
|
+
# This would require our YAML file to look something like the following:
|
|
120
|
+
#
|
|
121
|
+
# ---
|
|
122
|
+
# main:
|
|
123
|
+
# sub: "Something!"
|
|
124
|
+
#
|
|
125
|
+
# It's important to remember that your key should always include the name of the
|
|
126
|
+
# language file since once a file is loaded it will be kept in memory to reduce
|
|
127
|
+
# disk usage.
|
|
105
128
|
#
|
|
106
129
|
# @example
|
|
107
|
-
#
|
|
108
|
-
# lang.username = 'Username'
|
|
109
|
-
# lang.password = 'Password'
|
|
110
|
-
# end
|
|
130
|
+
# lang('username')
|
|
111
131
|
#
|
|
112
132
|
# @author Yorick Peterse
|
|
113
|
-
# @
|
|
133
|
+
# @since 0.2
|
|
134
|
+
# @param [String] key The language key to select.
|
|
135
|
+
# @return [Mixed]
|
|
114
136
|
#
|
|
115
|
-
def
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
137
|
+
def lang(key)
|
|
138
|
+
lang = ::Zen::Language.options.language.to_s
|
|
139
|
+
groups = []
|
|
140
|
+
translations = ::Zen::Language.translations
|
|
141
|
+
|
|
142
|
+
if !translations or !translations.key?(lang)
|
|
143
|
+
raise "No translation files have been added for the language code \"#{lang}\""
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
if translations[lang][key]
|
|
147
|
+
return translations[lang][key]
|
|
124
148
|
end
|
|
125
149
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
150
|
+
raise "The specified language item \"#{key}\" does not exist"
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
private
|
|
154
|
+
|
|
155
|
+
##
|
|
156
|
+
# Method that takes a hash or an array and converts it to a dot-based hash. For example,
|
|
157
|
+
# the following hash:
|
|
158
|
+
#
|
|
159
|
+
# {:name => 'Name', :location => {:street => 'Street', :address => 'Address'}}
|
|
160
|
+
#
|
|
161
|
+
# would result in the following:
|
|
162
|
+
#
|
|
163
|
+
# {'name' => 'Name', 'location.street' => 'Street', 'location.address' => 'Address'}
|
|
164
|
+
#
|
|
165
|
+
# Using arrays would result in the following:
|
|
166
|
+
#
|
|
167
|
+
# to_dotted_hash(["Hello", "World"]) # => {'1' => 'Hello', '2' => 'World'}
|
|
168
|
+
#
|
|
169
|
+
# While it looks a bit goofy this allows you to do the following:
|
|
170
|
+
#
|
|
171
|
+
# lang('1') # => 'Hello'
|
|
172
|
+
#
|
|
173
|
+
# @example
|
|
174
|
+
# self.to_dotted_hash({:name => "Yorick"}) # => {'name' => 'Yorick'}
|
|
175
|
+
#
|
|
176
|
+
# The code for this method was mostly taken from a comment on Stack Overflow.
|
|
177
|
+
# This comment can be found here: <http://bit.ly/dHTjVR>
|
|
178
|
+
#
|
|
179
|
+
# @author Yorick Peterse
|
|
180
|
+
# @since 0.2
|
|
181
|
+
# @param [Hash/Array] source The hash or array to conver to a dot-based hash.
|
|
182
|
+
# @param [Hash] target The hash to store the new key/values in.
|
|
183
|
+
# @param [String] namespace The namespace for the key (e.g. "user.location").
|
|
184
|
+
# @return [Hash] The converted hash where the keys are dot-based strings instead of
|
|
185
|
+
# regular strings/symbols with sub hashes.
|
|
186
|
+
#
|
|
187
|
+
def self.to_dotted_hash(source, target = {}, namespace = nil)
|
|
188
|
+
if namespace and !namespace.nil?
|
|
189
|
+
prefix = "#{namespace}."
|
|
190
|
+
else
|
|
191
|
+
prefix = ""
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
case source
|
|
195
|
+
when Hash
|
|
196
|
+
source.each do |k, v|
|
|
197
|
+
self.to_dotted_hash(v, target, "#{prefix}#{k}")
|
|
198
|
+
end
|
|
199
|
+
when Array
|
|
200
|
+
source.each_with_index do |v, i|
|
|
201
|
+
self.to_dotted_hash(v, target, "#{prefix}#{i}")
|
|
202
|
+
end
|
|
203
|
+
else
|
|
204
|
+
if !namespace.nil?
|
|
205
|
+
target[namespace] = source
|
|
206
|
+
else
|
|
207
|
+
target = source
|
|
208
|
+
end
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
return target
|
|
130
212
|
end
|
|
131
213
|
end
|
|
132
|
-
end
|
|
214
|
+
end
|