zen 0.2.8 → 0.3b
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/.gems +20 -0
- data/.mailmap +3 -2
- data/.rvmrc +1 -1
- data/.travis.yml +13 -2
- data/.yardopts +13 -0
- data/AUTHORS +1 -1
- data/README.md +115 -77
- data/Rakefile +6 -7
- data/bin/zen +12 -5
- data/guide/_static/categories/categories.png +0 -0
- data/guide/_static/categories/category_groups.png +0 -0
- data/guide/_static/categories/new_category.png +0 -0
- data/guide/_static/categories/new_category_group.png +0 -0
- data/guide/_static/comments/comments.png +0 -0
- data/guide/_static/comments/edit_comment.png +0 -0
- data/guide/_static/custom_fields/custom_field_groups.png +0 -0
- data/guide/_static/custom_fields/custom_field_types.png +0 -0
- data/guide/_static/custom_fields/custom_fields.png +0 -0
- data/guide/_static/custom_fields/edit_custom_field_general.png +0 -0
- data/guide/_static/custom_fields/edit_custom_field_group.png +0 -0
- data/guide/_static/custom_fields/edit_custom_field_settings.png +0 -0
- data/guide/_static/custom_fields/edit_custom_field_type.png +0 -0
- data/guide/_static/menus/edit_menu.png +0 -0
- data/guide/_static/menus/edit_menu_item.png +0 -0
- data/guide/_static/menus/menu_items.png +0 -0
- data/guide/_static/menus/menus.png +0 -0
- data/guide/_static/sections/edit_entry.png +0 -0
- data/guide/_static/sections/edit_entry_categories.png +0 -0
- data/guide/_static/sections/edit_entry_general.png +0 -0
- data/guide/_static/sections/edit_entry_meta.png +0 -0
- data/guide/_static/sections/edit_section_comments.png +0 -0
- data/guide/_static/sections/edit_section_general.png +0 -0
- data/guide/_static/sections/edit_section_groups.png +0 -0
- data/guide/_static/sections/entries.png +0 -0
- data/guide/_static/sections/sections.png +0 -0
- data/guide/_static/settings/overview_general.png +0 -0
- data/guide/_static/settings/overview_security.png +0 -0
- data/guide/_static/settings/overview_user.png +0 -0
- data/guide/_static/users/edit_user.png +0 -0
- data/guide/_static/users/edit_user_group.png +0 -0
- data/guide/_static/users/edit_user_group_permissions.png +0 -0
- data/guide/_static/users/edit_user_permissions.png +0 -0
- data/guide/_static/users/overview.png +0 -0
- data/guide/_static/users/user_groups_overview.png +0 -0
- data/guide/asset_management.md +117 -0
- data/{CHANGELOG.md → guide/changelog.md} +42 -0
- data/guide/css/common.css +20 -0
- data/guide/getting_started.md +61 -0
- data/guide/hacking.md +52 -0
- data/guide/installation.md +44 -0
- data/guide/javascript.md +352 -0
- data/lib/vendor/sequel_sluggable.rb +137 -0
- data/lib/yard/tags.rb +13 -0
- data/lib/zen.rb +148 -78
- data/lib/zen/asset_groups.rb +85 -0
- data/lib/zen/bin/create.rb +267 -56
- data/lib/zen/bin/default.rb +84 -0
- data/lib/zen/controller/admin_controller.rb +1 -82
- data/lib/zen/controller/base_controller.rb +9 -5
- data/lib/zen/controller/frontend_controller.rb +0 -1
- data/lib/zen/controller/main_controller.rb +30 -42
- data/lib/zen/controller/preview.rb +9 -8
- data/lib/zen/controller/translations.rb +49 -0
- data/lib/zen/error.rb +17 -0
- data/lib/zen/event.rb +118 -0
- data/lib/zen/helper/asset.rb +63 -0
- data/lib/zen/helper/breadcrumb.rb +1 -4
- data/lib/zen/helper/controller.rb +73 -0
- data/lib/zen/helper/locale.rb +42 -0
- data/lib/zen/helper/message.rb +0 -3
- data/lib/zen/helper/search.rb +54 -0
- data/lib/zen/helper/stacked_aspect.rb +249 -0
- data/lib/zen/helper/theme.rb +3 -10
- data/lib/zen/language.rb +356 -181
- data/lib/zen/language/en/zen_general.rb +52 -0
- data/lib/zen/language/en/zen_models.rb +19 -0
- data/lib/zen/language/nl/zen_general.rb +57 -0
- data/lib/zen/language/nl/zen_models.rb +22 -0
- data/lib/zen/language/translation.rb +132 -0
- data/lib/zen/languages.rb +9 -0
- data/lib/zen/layout/admin.xhtml +3 -3
- data/lib/zen/layout/login.xhtml +1 -1
- data/lib/zen/markup.rb +189 -0
- data/lib/zen/model/helper.rb +65 -0
- data/lib/zen/model/init.rb +62 -0
- data/lib/zen/model/methods.rb +6 -7
- data/lib/zen/package.rb +312 -201
- data/lib/zen/package/all.rb +4 -3
- data/lib/zen/package/categories/lib/categories.rb +29 -41
- data/lib/zen/package/categories/lib/categories/controller/categories.rb +185 -130
- data/lib/zen/package/categories/lib/categories/controller/category_groups.rb +172 -102
- data/lib/zen/package/categories/lib/categories/helper/category.rb +4 -9
- data/lib/zen/package/categories/lib/categories/helper/category_frontend.rb +86 -0
- data/lib/zen/package/categories/lib/categories/language/en/categories.rb +40 -0
- data/lib/zen/package/categories/lib/categories/language/en/category_groups.rb +39 -0
- data/lib/zen/package/categories/lib/categories/language/nl/categories.rb +42 -0
- data/lib/zen/package/categories/lib/categories/language/nl/category_groups.rb +42 -0
- data/lib/zen/package/categories/lib/categories/model/category.rb +21 -25
- data/lib/zen/package/categories/lib/categories/model/category_group.rb +21 -15
- data/lib/zen/package/categories/lib/categories/view/admin/categories/form.xhtml +25 -26
- data/lib/zen/package/categories/lib/categories/view/admin/categories/index.xhtml +24 -24
- data/lib/zen/package/categories/lib/categories/view/admin/category-groups/form.xhtml +18 -20
- data/lib/zen/package/categories/lib/categories/view/admin/category-groups/index.xhtml +21 -18
- data/lib/zen/package/comments/lib/comments.rb +30 -50
- data/lib/zen/package/comments/lib/comments/anti_spam.rb +138 -0
- data/lib/zen/package/comments/lib/comments/controller/comments.rb +159 -92
- data/lib/zen/package/comments/lib/comments/controller/comments_form.rb +122 -34
- data/lib/zen/package/comments/lib/comments/helper/comment.rb +0 -3
- data/lib/zen/package/comments/lib/comments/helper/comment_frontend.rb +90 -0
- data/lib/zen/package/comments/lib/comments/language/en/comments.rb +57 -0
- data/lib/zen/package/comments/lib/comments/language/nl/comments.rb +61 -0
- data/lib/zen/package/comments/lib/comments/model/comment.rb +147 -49
- data/lib/zen/package/comments/lib/comments/model/comment_status.rb +0 -2
- data/lib/zen/package/comments/lib/comments/view/admin/comments/form.xhtml +37 -40
- data/lib/zen/package/comments/lib/comments/view/admin/comments/index.xhtml +23 -42
- data/lib/zen/package/comments/migrations/1308774099_comment_status.rb +12 -4
- data/lib/zen/package/comments/migrations/1313851786_remove_defensio_signature.rb +11 -0
- data/lib/zen/package/custom_fields/lib/custom_fields.rb +40 -43
- data/lib/zen/package/custom_fields/lib/custom_fields/blue_form_parameters.rb +72 -17
- data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_field_groups.rb +154 -118
- data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_field_types.rb +147 -90
- data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_fields.rb +161 -131
- data/lib/zen/package/custom_fields/lib/custom_fields/helper/custom_field.rb +4 -9
- data/lib/zen/package/custom_fields/lib/custom_fields/language/en/custom_field_groups.rb +42 -0
- data/lib/zen/package/custom_fields/lib/custom_fields/language/en/custom_field_types.rb +51 -0
- data/lib/zen/package/custom_fields/lib/custom_fields/language/en/custom_fields.rb +60 -0
- data/lib/zen/package/custom_fields/lib/custom_fields/language/nl/custom_field_groups.rb +41 -0
- data/lib/zen/package/custom_fields/lib/custom_fields/language/nl/custom_field_types.rb +49 -0
- data/lib/zen/package/custom_fields/lib/custom_fields/language/nl/custom_fields.rb +61 -0
- data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field.rb +18 -23
- data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_group.rb +20 -19
- data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_method.rb +1 -3
- data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_type.rb +19 -9
- data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_value.rb +18 -15
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/form.xhtml +18 -18
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/index.xhtml +30 -24
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-types/form.xhtml +15 -10
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-types/index.xhtml +24 -19
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/form.xhtml +18 -13
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/index.xhtml +30 -20
- data/lib/zen/package/extensions/lib/extensions.rb +20 -0
- data/lib/zen/package/extensions/lib/extensions/controller/extensions.rb +41 -0
- data/lib/zen/package/extensions/lib/extensions/language/en/extensions.rb +23 -0
- data/lib/zen/package/extensions/lib/extensions/language/nl/extensions.rb +25 -0
- data/lib/zen/package/extensions/lib/extensions/view/admin/extensions/index.xhtml +86 -0
- data/lib/zen/package/menu.rb +109 -0
- data/lib/zen/package/menus/lib/menus.rb +25 -34
- data/lib/zen/package/menus/lib/menus/controller/menu_items.rb +143 -107
- data/lib/zen/package/menus/lib/menus/controller/menus.rb +166 -115
- data/lib/zen/package/menus/lib/menus/helper/menu.rb +2 -8
- data/lib/zen/package/menus/lib/menus/helper/menu_frontend.rb +114 -0
- data/lib/zen/package/menus/lib/menus/language/en/menu_items.rb +48 -0
- data/lib/zen/package/menus/lib/menus/language/en/menus.rb +48 -0
- data/lib/zen/package/menus/lib/menus/language/nl/menu_items.rb +48 -0
- data/lib/zen/package/menus/lib/menus/language/nl/menus.rb +50 -0
- data/lib/zen/package/menus/lib/menus/model/menu.rb +24 -17
- data/lib/zen/package/menus/lib/menus/model/menu_item.rb +37 -13
- data/lib/zen/package/menus/lib/menus/view/admin/menu-items/form.xhtml +32 -25
- data/lib/zen/package/menus/lib/menus/view/admin/menu-items/index.xhtml +23 -17
- data/lib/zen/package/menus/lib/menus/view/admin/menus/form.xhtml +31 -26
- data/lib/zen/package/menus/lib/menus/view/admin/menus/index.xhtml +20 -22
- data/lib/zen/package/sections/lib/sections.rb +25 -68
- data/lib/zen/package/sections/lib/sections/controller/section_entries.rb +178 -138
- data/lib/zen/package/sections/lib/sections/controller/sections.rb +173 -140
- data/lib/zen/package/sections/lib/sections/helper/section.rb +3 -6
- data/lib/zen/package/sections/lib/sections/helper/section_frontend.rb +146 -0
- data/lib/zen/package/sections/lib/sections/language/en/section_entries.rb +50 -0
- data/lib/zen/package/sections/lib/sections/language/en/sections.rb +55 -0
- data/lib/zen/package/sections/lib/sections/language/nl/section_entries.rb +50 -0
- data/lib/zen/package/sections/lib/sections/language/nl/sections.rb +55 -0
- data/lib/zen/package/sections/lib/sections/model/section.rb +36 -36
- data/lib/zen/package/sections/lib/sections/model/section_entry.rb +52 -59
- data/lib/zen/package/sections/lib/sections/model/section_entry_status.rb +2 -2
- data/lib/zen/package/sections/lib/sections/view/admin/form.xhtml +24 -21
- data/lib/zen/package/sections/lib/sections/view/admin/index.xhtml +24 -26
- data/lib/zen/package/sections/lib/sections/view/admin/section-entries/form.xhtml +33 -31
- data/lib/zen/package/sections/lib/sections/view/admin/section-entries/index.xhtml +24 -25
- data/lib/zen/package/sections/migrations/1308672298_use_id_for_default_section.rb +14 -10
- data/lib/zen/package/sections/migrations/1308813320_section_entry_statuses.rb +12 -6
- data/lib/zen/package/settings/lib/settings.rb +25 -120
- data/lib/zen/package/settings/lib/settings/blue_form_parameters.rb +157 -0
- data/lib/zen/package/settings/lib/settings/controller/settings.rb +94 -69
- data/lib/zen/package/settings/lib/settings/language/en/settings.rb +41 -0
- data/lib/zen/package/settings/lib/settings/language/nl/settings.rb +41 -0
- data/lib/zen/package/settings/lib/settings/model/setting.rb +0 -2
- data/lib/zen/package/settings/lib/settings/setting.rb +379 -0
- data/lib/zen/package/settings/lib/settings/setting_groups.rb +11 -0
- data/lib/zen/package/settings/lib/settings/settings.rb +83 -0
- data/lib/zen/package/settings/lib/settings/settings_group.rb +84 -0
- data/lib/zen/package/settings/lib/settings/singleton_methods.rb +35 -0
- data/lib/zen/package/settings/lib/settings/view/admin/settings/index.xhtml +15 -57
- data/lib/zen/package/settings/migrations/1321197919_remove_unused_columns.rb +17 -0
- data/lib/zen/package/users/lib/users.rb +51 -36
- data/lib/zen/package/users/lib/users/controller/user_groups.rb +133 -98
- data/lib/zen/package/users/lib/users/controller/users.rb +253 -136
- data/lib/zen/package/users/lib/users/helper/access.rb +102 -0
- data/lib/zen/package/users/lib/users/helper/acl.rb +113 -0
- data/lib/zen/package/users/lib/users/helper/users.rb +41 -24
- data/lib/zen/package/users/lib/users/language/en/permissions.rb +16 -0
- data/lib/zen/package/users/lib/users/language/en/user_groups.rb +39 -0
- data/lib/zen/package/users/lib/users/language/en/users.rb +73 -0
- data/lib/zen/package/users/lib/users/language/nl/permissions.rb +16 -0
- data/lib/zen/package/users/lib/users/language/nl/user_groups.rb +41 -0
- data/lib/zen/package/users/lib/users/language/nl/users.rb +74 -0
- data/lib/zen/package/users/lib/users/model/permission.rb +28 -0
- data/lib/zen/package/users/lib/users/model/user.rb +104 -65
- data/lib/zen/package/users/lib/users/model/user_group.rb +28 -24
- data/lib/zen/package/users/lib/users/model/user_status.rb +27 -0
- data/lib/zen/package/users/lib/users/public/admin/css/users/permissions.css +22 -0
- data/lib/zen/package/users/lib/users/public/admin/js/users/permissions.js +33 -0
- data/lib/zen/package/users/lib/users/settings.rb +19 -0
- data/lib/zen/package/users/lib/users/view/admin/user-groups/form.xhtml +58 -28
- data/lib/zen/package/users/lib/users/view/admin/user-groups/index.xhtml +19 -15
- data/lib/zen/package/users/lib/users/view/admin/users/form.xhtml +93 -62
- data/lib/zen/package/users/lib/users/view/admin/users/index.xhtml +23 -36
- data/lib/zen/package/users/lib/users/view/admin/users/login.xhtml +13 -6
- data/lib/zen/package/users/lib/users/view/admin/users/permissions.xhtml +33 -0
- data/lib/zen/package/users/lib/users/view/admin/users/register.xhtml +52 -0
- data/lib/zen/package/users/migrations/1313786058_update_default_date.rb +41 -0
- data/lib/zen/package/users/migrations/1316432327_permissions.rb +36 -0
- data/lib/zen/package/users/migrations/1320272365_status_ids.rb +67 -0
- data/lib/zen/public/admin/css/zen/buttons.css +3 -11
- data/lib/zen/public/admin/css/zen/datepicker.css +23 -13
- data/lib/zen/public/admin/css/zen/editor.css +6 -14
- data/lib/zen/public/admin/css/zen/forms.css +19 -12
- data/lib/zen/public/admin/css/zen/general.css +22 -18
- data/lib/zen/public/admin/css/zen/grid.css +1 -20
- data/lib/zen/public/admin/css/zen/layout.css +26 -11
- data/lib/zen/public/admin/css/zen/messages.css +3 -10
- data/lib/zen/public/admin/css/zen/reset.css +13 -15
- data/lib/zen/public/admin/css/zen/tables.css +8 -10
- data/lib/zen/public/admin/css/zen/tabs.css +2 -10
- data/lib/zen/public/admin/css/zen/window.css +2 -8
- data/lib/zen/public/admin/js/vendor/datepicker.js +540 -240
- data/lib/zen/public/admin/js/vendor/mootools/core.js +273 -283
- data/lib/zen/public/admin/js/vendor/mootools/more.js +131 -136
- data/lib/zen/public/admin/js/zen/index.js +8 -14
- data/lib/zen/public/admin/js/zen/lib/editor.js +36 -33
- data/lib/zen/public/admin/js/zen/lib/editor/markdown.js +0 -6
- data/lib/zen/public/admin/js/zen/lib/editor/textile.js +0 -6
- data/lib/zen/public/admin/js/zen/lib/html_table.js +0 -5
- data/lib/zen/public/admin/js/zen/lib/tabs.js +22 -79
- data/lib/zen/public/admin/js/zen/lib/window.js +12 -22
- data/lib/zen/spec/bacon/color_output.rb +1 -1
- data/lib/zen/spec/helper.rb +6 -11
- data/lib/zen/spec/simplecov.rb +3 -3
- data/lib/zen/task.rb +0 -1
- data/lib/zen/task/build.rake +46 -26
- data/lib/zen/task/clean.rake +14 -7
- data/lib/zen/task/db.rake +31 -29
- data/lib/zen/task/package.rake +19 -23
- data/lib/zen/task/proto.rake +3 -5
- data/lib/zen/task/setup.rake +4 -0
- data/lib/zen/task/test.rake +31 -6
- data/lib/zen/task/theme.rake +13 -19
- data/lib/zen/theme.rb +377 -52
- data/lib/zen/validation.rb +22 -30
- data/lib/zen/version.rb +1 -2
- data/lib/zen/view/bottom.xhtml +9 -1
- data/lib/zen/view/head.xhtml +1 -1
- data/lib/zen/view/main.xhtml +1 -1
- data/lib/zen/view/search.xhtml +9 -0
- data/proto/app/Rakefile +0 -1
- data/proto/app/app.rb +21 -16
- data/proto/app/config/config.rb.erb +41 -0
- data/proto/app/config/{database.rb → database.rb.erb} +17 -14
- data/proto/app/config/middlewares.rb +1 -1
- data/proto/app/theme/default/index.xhtml +25 -0
- data/proto/app/theme/theme.rb +19 -0
- data/proto/app/{log/database/dev → tmp}/.gitkeep +0 -0
- data/proto/migration.rb +3 -5
- data/proto/rack/thin.yml +41 -0
- data/proto/rack/unicorn.rb +38 -0
- data/spec/Rakefile +15 -11
- data/spec/fixtures/zen/helper/controller.rb +13 -0
- data/spec/fixtures/zen/helper/locale.rb +7 -0
- data/spec/fixtures/zen/helper/message.rb +0 -4
- data/spec/fixtures/zen/language.rb +31 -0
- data/spec/fixtures/zen/language/en/spec.rb +11 -0
- data/spec/fixtures/zen/language/nl/spec.rb +11 -0
- data/spec/fixtures/zen/package.rb +0 -10
- data/spec/fixtures/zen/package/categories/helper/category_frontend.rb +16 -0
- data/spec/fixtures/zen/package/comments/helper/comment_frontend.rb +16 -0
- data/spec/fixtures/zen/package/sections/helper/section_frontend.rb +16 -0
- data/spec/fixtures/zen/package/settings/controller/settings.rb +17 -0
- data/spec/fixtures/zen/package/users/helper/access.rb +18 -0
- data/spec/fixtures/zen/package/users/helper/acl.rb +23 -0
- data/spec/fixtures/zen/theme/{default-section → default}/index.xhtml +0 -0
- data/spec/helper.rb +12 -27
- data/{proto/app/log/database/live → spec/public}/.gitkeep +0 -0
- data/spec/zen/controller/admin_controller.rb +5 -6
- data/spec/zen/controller/main_controller.rb +29 -35
- data/spec/zen/controller/preview.rb +9 -10
- data/spec/zen/event.rb +44 -0
- data/spec/zen/helper/breadcrumb.rb +4 -5
- data/spec/zen/helper/controller.rb +21 -0
- data/spec/zen/helper/locale.rb +25 -0
- data/spec/zen/helper/message.rb +4 -11
- data/spec/zen/helper/theme.rb +11 -14
- data/spec/zen/language.rb +48 -22
- data/spec/zen/markup.rb +39 -0
- data/spec/zen/package.rb +48 -11
- data/spec/zen/package/categories/controller/categories.rb +99 -45
- data/spec/zen/package/categories/controller/category_groups.rb +109 -33
- data/spec/zen/package/categories/helper/category.rb +19 -32
- data/spec/zen/package/categories/helper/category_frontend.rb +61 -0
- data/spec/zen/package/comments/anti_spam.rb +50 -0
- data/spec/zen/package/comments/controller/comments.rb +121 -61
- data/spec/zen/package/comments/controller/comments_form.rb +120 -94
- data/spec/zen/package/comments/helper/comment.rb +13 -13
- data/spec/zen/package/comments/helper/comment_frontend.rb +92 -0
- data/spec/zen/package/custom_fields/blue_form_parameters.rb +50 -50
- data/spec/zen/package/custom_fields/controller/custom_field_groups.rb +135 -43
- data/spec/zen/package/custom_fields/controller/custom_field_types.rb +153 -48
- data/spec/zen/package/custom_fields/controller/custom_fields.rb +130 -51
- data/spec/zen/package/custom_fields/helper/custom_field.rb +8 -8
- data/spec/zen/package/extensions/controller/extensions.rb +38 -0
- data/spec/zen/package/menus/controller/menu_items.rb +121 -42
- data/spec/zen/package/menus/controller/menus.rb +125 -38
- data/spec/zen/package/menus/helper/menu.rb +26 -26
- data/spec/zen/package/menus/helper/menu_frontend.rb +104 -0
- data/spec/zen/package/sections/controller/section_entries.rb +145 -89
- data/spec/zen/package/sections/controller/sections.rb +130 -35
- data/spec/zen/package/sections/helper/section.rb +27 -38
- data/spec/zen/package/sections/helper/section_frontend.rb +160 -0
- data/spec/zen/package/settings/controller/settings.rb +73 -8
- data/spec/zen/package/settings/settings.rb +119 -0
- data/spec/zen/package/users/controller/user_groups.rb +134 -34
- data/spec/zen/package/users/controller/users.rb +189 -44
- data/spec/zen/package/users/helper/access.rb +29 -0
- data/spec/zen/package/users/helper/acl.rb +46 -0
- data/spec/zen/package/users/helper/users.rb +20 -64
- data/spec/zen/theme.rb +7 -9
- data/spec/zen/validation.rb +1 -2
- data/zen.gemspec +25 -22
- metadata +303 -222
- data/lib/zen/asset.rb +0 -292
- data/lib/zen/bin/runner.rb +0 -118
- data/lib/zen/error/language_error.rb +0 -10
- data/lib/zen/error/package_error.rb +0 -10
- data/lib/zen/error/plugin_error.rb +0 -10
- data/lib/zen/error/theme_error.rb +0 -10
- data/lib/zen/error/validation_error.rb +0 -10
- data/lib/zen/helper/acl.rb +0 -182
- data/lib/zen/helper/blue_form_vendor.rb +0 -689
- data/lib/zen/language/en/zen_general.yml +0 -25
- data/lib/zen/language/en/zen_models.yml +0 -13
- data/lib/zen/language/nl/zen_general.yml +0 -25
- data/lib/zen/language/nl/zen_models.yml +0 -13
- data/lib/zen/model/settings.rb +0 -78
- data/lib/zen/package/base.rb +0 -62
- data/lib/zen/package/categories/lib/categories/language/en/categories.yml +0 -36
- data/lib/zen/package/categories/lib/categories/language/en/category_groups.yml +0 -34
- data/lib/zen/package/categories/lib/categories/language/nl/categories.yml +0 -40
- data/lib/zen/package/categories/lib/categories/language/nl/category_groups.yml +0 -34
- data/lib/zen/package/categories/lib/categories/plugin/categories.rb +0 -141
- data/lib/zen/package/comments/lib/comments/language/en/comments.yml +0 -48
- data/lib/zen/package/comments/lib/comments/language/nl/comments.yml +0 -50
- data/lib/zen/package/comments/lib/comments/plugin/anti_spam.rb +0 -156
- data/lib/zen/package/comments/lib/comments/plugin/comments.rb +0 -115
- data/lib/zen/package/custom_fields/lib/custom_fields/language/en/custom_field_groups.yml +0 -33
- data/lib/zen/package/custom_fields/lib/custom_fields/language/en/custom_field_types.yml +0 -40
- data/lib/zen/package/custom_fields/lib/custom_fields/language/en/custom_fields.yml +0 -54
- data/lib/zen/package/custom_fields/lib/custom_fields/language/nl/custom_field_groups.yml +0 -33
- data/lib/zen/package/custom_fields/lib/custom_fields/language/nl/custom_field_types.yml +0 -40
- data/lib/zen/package/custom_fields/lib/custom_fields/language/nl/custom_fields.yml +0 -54
- data/lib/zen/package/menus/lib/menus/language/en/menu_items.yml +0 -41
- data/lib/zen/package/menus/lib/menus/language/en/menus.yml +0 -40
- data/lib/zen/package/menus/lib/menus/language/nl/menu_items.yml +0 -41
- data/lib/zen/package/menus/lib/menus/language/nl/menus.yml +0 -40
- data/lib/zen/package/menus/lib/menus/plugin/menus.rb +0 -152
- data/lib/zen/package/sections/lib/sections/language/en/section_entries.yml +0 -44
- data/lib/zen/package/sections/lib/sections/language/en/sections.yml +0 -48
- data/lib/zen/package/sections/lib/sections/language/nl/section_entries.yml +0 -44
- data/lib/zen/package/sections/lib/sections/language/nl/sections.yml +0 -48
- data/lib/zen/package/sections/lib/sections/plugin/section_entries.rb +0 -244
- data/lib/zen/package/sections/lib/sections/plugin/sections.rb +0 -87
- data/lib/zen/package/settings/lib/settings/language/en/settings.yml +0 -36
- data/lib/zen/package/settings/lib/settings/language/nl/settings.yml +0 -37
- data/lib/zen/package/settings/lib/settings/plugin/group_base.rb +0 -39
- data/lib/zen/package/settings/lib/settings/plugin/setting_base.rb +0 -133
- data/lib/zen/package/settings/lib/settings/plugin/settings.rb +0 -251
- data/lib/zen/package/users/lib/users/controller/access_rules.rb +0 -284
- data/lib/zen/package/users/lib/users/language/en/access_rules.yml +0 -38
- data/lib/zen/package/users/lib/users/language/en/user_groups.yml +0 -32
- data/lib/zen/package/users/lib/users/language/en/users.yml +0 -57
- data/lib/zen/package/users/lib/users/language/nl/access_rules.yml +0 -38
- data/lib/zen/package/users/lib/users/language/nl/user_groups.yml +0 -32
- data/lib/zen/package/users/lib/users/language/nl/users.yml +0 -57
- data/lib/zen/package/users/lib/users/model/access_rule.rb +0 -42
- data/lib/zen/package/users/lib/users/public/admin/js/users/access_rules.js +0 -65
- data/lib/zen/package/users/lib/users/public/admin/js/users/lib/access_rules.js +0 -49
- data/lib/zen/package/users/lib/users/view/admin/access-rules/form.xhtml +0 -120
- data/lib/zen/package/users/lib/users/view/admin/access-rules/index.xhtml +0 -102
- data/lib/zen/plugin.rb +0 -182
- data/lib/zen/plugin/base.rb +0 -46
- data/lib/zen/plugin/helper.rb +0 -47
- data/lib/zen/plugin/markup/lib/markup.rb +0 -14
- data/lib/zen/plugin/markup/lib/markup/language/en/markup.yml +0 -6
- data/lib/zen/plugin/markup/lib/markup/markup.rb +0 -165
- data/lib/zen/public/admin/js/zen/lib/asset.js +0 -111
- data/lib/zen/task/plugin.rake +0 -18
- data/lib/zen/theme/base.rb +0 -65
- data/proto/app/config/config.rb +0 -18
- data/spec/fixtures/zen/language/en/spec.yml +0 -10
- data/spec/fixtures/zen/language/nl/spec.yml +0 -7
- data/spec/fixtures/zen/package/settings/plugin/settings.rb +0 -20
- data/spec/zen/asset.rb +0 -97
- data/spec/zen/bin/create.rb +0 -89
- data/spec/zen/bin/runner.rb +0 -47
- data/spec/zen/helper/acl.rb +0 -149
- data/spec/zen/package/categories/plugin/categories.rb +0 -92
- data/spec/zen/package/comments/plugin/anti_spam.rb +0 -59
- data/spec/zen/package/comments/plugin/comments.rb +0 -107
- data/spec/zen/package/menus/plugin/menus.rb +0 -120
- data/spec/zen/package/sections/plugin/section_entries.rb +0 -161
- data/spec/zen/package/sections/plugin/sections.rb +0 -75
- data/spec/zen/package/settings/plugin/settings.rb +0 -33
- data/spec/zen/package/users/controller/access_rules.rb +0 -90
- data/spec/zen/plugin.rb +0 -64
- data/spec/zen/plugin/helper.rb +0 -11
- data/spec/zen/plugin/markup.rb +0 -44
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
module Zen
|
|
2
|
+
module Model
|
|
3
|
+
##
|
|
4
|
+
# Zen::Model::Helper is a helper module that contains a few methods for
|
|
5
|
+
# Sequel models. Using this helper can be done by simply including it into
|
|
6
|
+
# your model:
|
|
7
|
+
#
|
|
8
|
+
# class MyModel < Sequel::Model
|
|
9
|
+
# include Zen::Model::Helper
|
|
10
|
+
# end
|
|
11
|
+
#
|
|
12
|
+
# See the individual methods in this module for more information.
|
|
13
|
+
#
|
|
14
|
+
# @since 16-10-2011
|
|
15
|
+
#
|
|
16
|
+
module Helper
|
|
17
|
+
# Array containing the database adapters that don't support regular
|
|
18
|
+
# expressions.
|
|
19
|
+
NoRegexpSupport = [:sqlite]
|
|
20
|
+
|
|
21
|
+
##
|
|
22
|
+
# Extends the including class with the methods in the {ClassMethods}
|
|
23
|
+
# module.
|
|
24
|
+
#
|
|
25
|
+
# @since 16-10-2011
|
|
26
|
+
#
|
|
27
|
+
def self.included(into)
|
|
28
|
+
into.extend(ClassMethods)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# The methods in this module will be added as class methods to the
|
|
32
|
+
# including class.
|
|
33
|
+
module ClassMethods
|
|
34
|
+
##
|
|
35
|
+
# Given a column name and a value this method will determine whether a
|
|
36
|
+
# regular expression should be used or a simple LIKE statement. If the
|
|
37
|
+
# DBMS supports the use of regular expressions those will be used,
|
|
38
|
+
# otherwise a LIKE in the format of "%VALUE%" is used.
|
|
39
|
+
#
|
|
40
|
+
# The return value of this method is either a ``Hash`` containing the
|
|
41
|
+
# column and the regular expression or an instance of
|
|
42
|
+
# ``Sequel::SQL::BooleanExpression``.
|
|
43
|
+
#
|
|
44
|
+
# @example Using a DBMS that supports the use of a regex
|
|
45
|
+
# search_column(:name, 'ruby \d+') # => {:name => /ruby \d+/i}
|
|
46
|
+
#
|
|
47
|
+
# @example Using a DBMS that does not support the use of a regex
|
|
48
|
+
# search_column(:name, 'ruby \d+') # => #<Sequel::SQL::BooleanExpression ....>
|
|
49
|
+
#
|
|
50
|
+
# @since 16-10-2011
|
|
51
|
+
# @param [Symbol] column The column to use in the statement.
|
|
52
|
+
# @param [String] value The value for the statement.
|
|
53
|
+
# @return [Hash|Sequel::SQL::BooleanExpression]
|
|
54
|
+
#
|
|
55
|
+
def search_column(column, value)
|
|
56
|
+
if NoRegexpSupport.include?(Zen.database.adapter_scheme)
|
|
57
|
+
return column.like("%#{value}%")
|
|
58
|
+
else
|
|
59
|
+
return {column => /#{value}/i}
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end # ClassMethods
|
|
63
|
+
end # Helper
|
|
64
|
+
end # Model
|
|
65
|
+
end # Zen
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
Zen::Language.load('zen_models')
|
|
2
|
+
|
|
3
|
+
Sequel::Model.plugin(:validation_helpers)
|
|
4
|
+
Sequel::Model.plugin(:association_pks)
|
|
5
|
+
|
|
6
|
+
Sequel.extension(:migration)
|
|
7
|
+
Sequel.extension(:pagination)
|
|
8
|
+
Sequel.extension(:inflector)
|
|
9
|
+
|
|
10
|
+
Sequel::Plugins::ValidationHelpers::DEFAULT_OPTIONS.merge!(
|
|
11
|
+
{
|
|
12
|
+
:exact_length => {
|
|
13
|
+
:message => lambda { |length| lang('zen_models.exact_length') & length }
|
|
14
|
+
},
|
|
15
|
+
|
|
16
|
+
:format => {
|
|
17
|
+
:message => lang('zen_models.format')
|
|
18
|
+
},
|
|
19
|
+
|
|
20
|
+
:includes => {
|
|
21
|
+
:message => lambda { |arg| lang('zen_models.includes') % arg.inspect },
|
|
22
|
+
:allow_nil => false
|
|
23
|
+
},
|
|
24
|
+
|
|
25
|
+
:integer => {
|
|
26
|
+
:message => lang('zen_models.integer'),
|
|
27
|
+
:allow_nil => true
|
|
28
|
+
},
|
|
29
|
+
|
|
30
|
+
:length_range => {
|
|
31
|
+
:message => lang('zen_models.length_range')
|
|
32
|
+
},
|
|
33
|
+
|
|
34
|
+
:max_length => {
|
|
35
|
+
:message => lambda { |length| lang('zen_models.max_length') % length },
|
|
36
|
+
:allow_nil => true
|
|
37
|
+
},
|
|
38
|
+
|
|
39
|
+
:min_length => {
|
|
40
|
+
:message => lambda { |length| lang('zen_models.min_length') % length }
|
|
41
|
+
},
|
|
42
|
+
|
|
43
|
+
:not_string => {
|
|
44
|
+
:message => lang('zen_models.not_string')
|
|
45
|
+
},
|
|
46
|
+
|
|
47
|
+
:numeric => {
|
|
48
|
+
:message => lang('zen_models.numeric')
|
|
49
|
+
},
|
|
50
|
+
|
|
51
|
+
:type => {
|
|
52
|
+
:message => lambda { |type| lang('zen_models.type') % type }
|
|
53
|
+
},
|
|
54
|
+
|
|
55
|
+
:presence => {
|
|
56
|
+
:message => lang('zen_models.presence')
|
|
57
|
+
},
|
|
58
|
+
|
|
59
|
+
:unique => {
|
|
60
|
+
:message => lang('zen_models.unique')
|
|
61
|
+
}
|
|
62
|
+
})
|
data/lib/zen/model/methods.rb
CHANGED
|
@@ -3,25 +3,24 @@ module Sequel
|
|
|
3
3
|
#:nodoc:
|
|
4
4
|
class Model
|
|
5
5
|
##
|
|
6
|
-
# Retrieves all primary values and an optional column and returns the
|
|
7
|
-
# results as an array of hashes in which the keys of these hashes are the
|
|
8
|
-
# IDs and the values the values of the specified column. This array can be
|
|
6
|
+
# Retrieves all primary values and an optional column and returns the
|
|
7
|
+
# results as an array of hashes in which the keys of these hashes are the
|
|
8
|
+
# IDs and the values the values of the specified column. This array can be
|
|
9
9
|
# used when creating <select> elements using the BlueForm helper.
|
|
10
10
|
#
|
|
11
11
|
# @example
|
|
12
12
|
# Sections::Model::Section.pk_hash(:name) # => {1 => 'Blog', 2 => 'General'}
|
|
13
13
|
#
|
|
14
|
-
# @author Yorick Peterse
|
|
15
14
|
# @param [Symbol] column The name of the optional column to select.
|
|
16
15
|
# @return [Hash]
|
|
17
16
|
#
|
|
18
|
-
def self.pk_hash
|
|
17
|
+
def self.pk_hash(column)
|
|
19
18
|
hash = {}
|
|
20
|
-
|
|
19
|
+
|
|
21
20
|
self.select(:id, column.to_sym).each do |row|
|
|
22
21
|
hash[row.id] = row.send(column)
|
|
23
22
|
end
|
|
24
|
-
|
|
23
|
+
|
|
25
24
|
return hash
|
|
26
25
|
end
|
|
27
26
|
end # Model
|
data/lib/zen/package.rb
CHANGED
|
@@ -1,280 +1,391 @@
|
|
|
1
1
|
require 'ramaze/gestalt'
|
|
2
|
-
require __DIR__('
|
|
3
|
-
require __DIR__('package/base')
|
|
2
|
+
require __DIR__('package/menu')
|
|
4
3
|
|
|
5
|
-
#:nodoc:
|
|
6
4
|
module Zen
|
|
7
5
|
##
|
|
8
|
-
#
|
|
9
|
-
#
|
|
10
|
-
#
|
|
11
|
-
#
|
|
6
|
+
# Zen::Package allows developers to register so called "packages". Packages
|
|
7
|
+
# are collections of controllers, models, views and pretty much anything else
|
|
8
|
+
# that goes in a typical Ramaze application. In fact, you can actually
|
|
9
|
+
# distribute entire Ramaze applications as a package (though it would most
|
|
10
|
+
# likely require some modifications).
|
|
12
11
|
#
|
|
13
|
-
#
|
|
14
|
-
#
|
|
12
|
+
# A package is registered by calling ``Zen::Package.add`` and passing a block
|
|
13
|
+
# to it. This block will be yielded on a new instance of ``Zen::Package``:
|
|
14
|
+
#
|
|
15
|
+
# Zen::Package.add do |p|
|
|
15
16
|
#
|
|
16
|
-
# Zen::Package.add do |ext|
|
|
17
|
-
# # ....
|
|
18
17
|
# end
|
|
19
18
|
#
|
|
20
|
-
# When
|
|
19
|
+
# When adding a package you must **always** set the following attributes:
|
|
21
20
|
#
|
|
22
|
-
# * name: the name of the package
|
|
23
|
-
# *
|
|
24
|
-
#
|
|
25
|
-
#
|
|
26
|
-
# *
|
|
21
|
+
# * name: the name of the package, should be a symbol
|
|
22
|
+
# * title: the title of the package. This should be a language key such as
|
|
23
|
+
# "users.titles.index" as this allows users to view the package name in
|
|
24
|
+
# their chosen language.
|
|
25
|
+
# * author: the name of the package's author.
|
|
26
|
+
# * about: a description of the package, just like the title attribute this
|
|
27
|
+
# should be a language key, "users.description" is an example of such a key.
|
|
28
|
+
# * root: the root directory of the package, this path should point to the
|
|
29
|
+
# directory containing your ``helper/`` and ``language/`` directories as
|
|
30
|
+
# well as any ``public/`` directories.
|
|
27
31
|
#
|
|
28
|
-
#
|
|
32
|
+
# Setting these (and other) attributes is very easy:
|
|
29
33
|
#
|
|
30
|
-
#
|
|
34
|
+
# Zen::Package.add do |p|
|
|
35
|
+
# p.name = :some_package
|
|
36
|
+
# p.title = 'some_package.titles.index'
|
|
37
|
+
# p.author = 'John Doe'
|
|
38
|
+
# p.root = __DIR__('some_package')
|
|
39
|
+
# end
|
|
31
40
|
#
|
|
32
|
-
#
|
|
33
|
-
#
|
|
34
|
-
# in the backend without having to write any code. In order to register a set
|
|
35
|
-
# of controllers you'll need to set the "controllers" attribute in the package
|
|
36
|
-
# block to a hash. The keys of this hash should be a human readable name of
|
|
37
|
-
# the controller and the values the full namespace of the controller as either
|
|
38
|
-
# a string or a constants:
|
|
41
|
+
# Besides the required attributes listed above you can also set the following
|
|
42
|
+
# ones:
|
|
39
43
|
#
|
|
40
|
-
#
|
|
41
|
-
#
|
|
42
|
-
# 'Test Controller' => Test::Controller::TestController
|
|
43
|
-
# }
|
|
44
|
-
# end
|
|
44
|
+
# * url: a URL that points to the website of the package.
|
|
45
|
+
# * migrations: a directory containing all Sequel migrations.
|
|
45
46
|
#
|
|
46
|
-
# ##
|
|
47
|
+
# ## Package Structure
|
|
47
48
|
#
|
|
48
|
-
#
|
|
49
|
-
#
|
|
50
|
-
#
|
|
51
|
-
# following 2 keys (they're symbols):
|
|
49
|
+
# Packages should have the same structure as generic Rubygems. In it's most
|
|
50
|
+
# basic form this means you'll end up with a structure that looks like the
|
|
51
|
+
# following:
|
|
52
52
|
#
|
|
53
|
-
#
|
|
54
|
-
#
|
|
55
|
-
#
|
|
56
|
-
#
|
|
53
|
+
# root/
|
|
54
|
+
# |
|
|
55
|
+
# |__ lib/
|
|
56
|
+
# |__ package.rb
|
|
57
|
+
# |__ package/
|
|
58
|
+
# |__ controller/
|
|
59
|
+
# |__ helper/
|
|
57
60
|
#
|
|
58
|
-
#
|
|
59
|
-
#
|
|
60
|
-
#
|
|
61
|
+
# There's no requirement for the location of your migrations but it's
|
|
62
|
+
# recommended to place it in the same directory as the ``lib/`` directory as
|
|
63
|
+
# this is the convention followed by Zen itself.
|
|
61
64
|
#
|
|
62
|
-
#
|
|
65
|
+
# The advantage of this structure is that when a package is shipped via
|
|
66
|
+
# Rubygems it can be loaded in exactly the same way as a normal gem. Say the
|
|
67
|
+
# "some_package" example described earlier would be distributed via Rubygems,
|
|
68
|
+
# all a developer would have to do to load the package is the following:
|
|
63
69
|
#
|
|
64
|
-
#
|
|
70
|
+
# require 'some_package'
|
|
65
71
|
#
|
|
66
|
-
#
|
|
67
|
-
#
|
|
68
|
-
#
|
|
69
|
-
# }]
|
|
72
|
+
# It's not recommended to place packages or gems in the ``Zen`` namespace
|
|
73
|
+
# unless they modify or add core features such as more validation methods for
|
|
74
|
+
# ``Zen::Validation``.
|
|
70
75
|
#
|
|
71
|
-
#
|
|
72
|
-
# generate the HTML for a fully fledged navigation menu using the
|
|
73
|
-
# build_menu() method. This method uses Gestalt to build the HTML and also
|
|
74
|
-
# takes care of permissions for each user/module.
|
|
76
|
+
# ## Menu Management
|
|
75
77
|
#
|
|
76
|
-
#
|
|
78
|
+
# Menus can be added by calling the method ``menu()`` on the object passed to
|
|
79
|
+
# the block. This method takes a URL, a title/label and a hash of options.
|
|
80
|
+
# Note that just like the ``name`` attribute the title/label should be a
|
|
81
|
+
# language key.
|
|
82
|
+
#
|
|
83
|
+
# Zen::Package.add do |p|
|
|
84
|
+
# p.menu('some_package.titles.index', '/admin/some-packages')
|
|
85
|
+
# end
|
|
77
86
|
#
|
|
78
|
-
#
|
|
79
|
-
# these make it very easy to install/uninstall the extension. Migrations
|
|
80
|
-
# should be put in the root directory of your extension. For example, if your
|
|
81
|
-
# extension is in "foobar" the migrations should be located in
|
|
82
|
-
# "foobar/migrations", the lib directory in "foobar/lib", etc.
|
|
87
|
+
# For more information see ``Zen::Package#menu()`` and ``Zen::Package::Menu``.
|
|
83
88
|
#
|
|
84
|
-
#
|
|
85
|
-
#
|
|
86
|
-
#
|
|
87
|
-
#
|
|
89
|
+
# ## Permissions
|
|
90
|
+
#
|
|
91
|
+
# When creating a package you can add a number of permissions. These
|
|
92
|
+
# permissions can be assigned to a user or user group in the admin interface.
|
|
93
|
+
# Permissions allow you to restrict access to certain actions to specific
|
|
94
|
+
# users/user groups. A permission can be added by calling ``permission()`` on
|
|
95
|
+
# the object passed to the block. Again the title of the permission should be
|
|
96
|
+
# a langauge key so it can be displayed in a custom language:
|
|
97
|
+
#
|
|
98
|
+
# Zen::Package.add do |p|
|
|
99
|
+
# p.permission(:show_some_package, 'packages.titles.index')
|
|
100
|
+
# end
|
|
101
|
+
#
|
|
102
|
+
# For more information on how to specify permission requirements in your
|
|
103
|
+
# controllers see ``Ramaze::Helper::ACL``.
|
|
104
|
+
#
|
|
105
|
+
# ## Migrations
|
|
88
106
|
#
|
|
89
|
-
#
|
|
107
|
+
# Zen comes with two tasks that allow users and developers to update their
|
|
108
|
+
# database, ``rake db:migrate`` and ``rake package:migrate``. For these tasks
|
|
109
|
+
# to work there of course have to be migrations. When registering a package
|
|
110
|
+
# you can set the ``migrations`` attribute. This attribute should contain a
|
|
111
|
+
# path to a directory containing a group of timestamp based migrations such as
|
|
112
|
+
# "1316770622_hello_world.rb".
|
|
90
113
|
#
|
|
91
|
-
# @author Yorick Peterse
|
|
92
114
|
# @since 0.1
|
|
93
115
|
#
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
116
|
+
class Package
|
|
117
|
+
include Zen::Validation
|
|
118
|
+
|
|
119
|
+
# Hash containing all the registered packages. The keys of this hash are the
|
|
97
120
|
# names of all packages and the values the instances of Zen::Package::Base.
|
|
98
|
-
|
|
99
|
-
# @author Yorick Peterse
|
|
100
|
-
# @since 0.2.5
|
|
101
|
-
#
|
|
102
|
-
Registered = {}
|
|
121
|
+
REGISTERED = {}
|
|
103
122
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
#
|
|
107
|
-
# @author Yorick Peterse
|
|
108
|
-
# @since 0.2.5
|
|
109
|
-
#
|
|
110
|
-
Controllers = []
|
|
123
|
+
# The name of the package.
|
|
124
|
+
attr_reader :name
|
|
111
125
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
#
|
|
116
|
-
|
|
117
|
-
# Zen::Package.add do |ext|
|
|
118
|
-
# ext.name = "name"
|
|
119
|
-
# ext.author = "Author"
|
|
120
|
-
# end
|
|
121
|
-
#
|
|
122
|
-
# When adding a new extension the following setters are required:
|
|
123
|
-
#
|
|
124
|
-
# * name
|
|
125
|
-
# * author
|
|
126
|
-
# * version
|
|
127
|
-
# * about
|
|
128
|
-
# * url
|
|
129
|
-
# * directory
|
|
130
|
-
#
|
|
131
|
-
# You can also set "migration_dir" to a directory with all migrations. By
|
|
132
|
-
# default Zen will assume that it's 2 levels above your root directory.
|
|
133
|
-
#
|
|
134
|
-
# @author Yorick Peterse
|
|
135
|
-
# @since 0.1
|
|
136
|
-
# @yield [package] Object containing all setters and getters for each
|
|
137
|
-
# package.
|
|
138
|
-
#
|
|
139
|
-
def self.add
|
|
140
|
-
package = Zen::Package::Base.new
|
|
126
|
+
# The author of the package.
|
|
127
|
+
attr_accessor :author
|
|
128
|
+
|
|
129
|
+
# The URL of the package.
|
|
130
|
+
attr_accessor :url
|
|
141
131
|
|
|
142
|
-
|
|
132
|
+
# The root directory of the package.
|
|
133
|
+
attr_reader :root
|
|
143
134
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
package.name = package.name.to_sym
|
|
135
|
+
# The directory to all migrations.
|
|
136
|
+
attr_accessor :migrations
|
|
147
137
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
138
|
+
class << self
|
|
139
|
+
##
|
|
140
|
+
# Adds a new package along with all it's details such as the name, author,
|
|
141
|
+
# version and so on. Extensions can be added using a simple block as
|
|
142
|
+
# following:
|
|
143
|
+
#
|
|
144
|
+
# Zen::Package.add do |ext|
|
|
145
|
+
# extrans.name = "name"
|
|
146
|
+
# ext.author = "Author"
|
|
147
|
+
# end
|
|
148
|
+
#
|
|
149
|
+
# @since 0.1
|
|
150
|
+
#
|
|
151
|
+
def add
|
|
152
|
+
package = self.new
|
|
153
|
+
|
|
154
|
+
yield(package)
|
|
155
|
+
package.validate
|
|
156
|
+
|
|
157
|
+
REGISTERED[package.name] = package
|
|
151
158
|
end
|
|
152
159
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
160
|
+
##
|
|
161
|
+
# Retrieves the package for the given name.
|
|
162
|
+
#
|
|
163
|
+
# @example
|
|
164
|
+
# Zen::Package[:users]
|
|
165
|
+
#
|
|
166
|
+
# @since 0.1
|
|
167
|
+
#
|
|
168
|
+
def [](name)
|
|
169
|
+
name = name.to_sym
|
|
170
|
+
|
|
171
|
+
if REGISTERED.empty?
|
|
172
|
+
raise(PackageError, "No packages have been added yet.")
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
if !REGISTERED.key?(name)
|
|
176
|
+
raise(PackageError, "The package \"#{name}\" doesn't exist.")
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
return REGISTERED[name]
|
|
156
180
|
end
|
|
157
181
|
|
|
158
|
-
|
|
159
|
-
|
|
182
|
+
##
|
|
183
|
+
# Builds the entire navigation menu for all packages.
|
|
184
|
+
#
|
|
185
|
+
# @example
|
|
186
|
+
# Zen::Package.build_menu('left', [:edit_user, :show_user, :show_setting])
|
|
187
|
+
#
|
|
188
|
+
# @since 0.3
|
|
189
|
+
# @param [String] html_class An HTML class to apply to the <ul> element.
|
|
190
|
+
# @param [Array] permissions An array of permissions for the current
|
|
191
|
+
# user.
|
|
192
|
+
# @return [String]
|
|
193
|
+
#
|
|
194
|
+
def build_menu(html_class = 'navigation', permissions = [])
|
|
195
|
+
g = Ramaze::Gestalt.new
|
|
196
|
+
|
|
197
|
+
g.ul(:class => html_class) do
|
|
198
|
+
# Sort the hash
|
|
199
|
+
keys = REGISTERED.keys.sort
|
|
160
200
|
|
|
161
|
-
|
|
162
|
-
|
|
201
|
+
keys.each do |key|
|
|
202
|
+
unless REGISTERED[key].menu.nil?
|
|
203
|
+
g.out << REGISTERED[key].menu.html(permissions)
|
|
204
|
+
end
|
|
205
|
+
end
|
|
163
206
|
end
|
|
207
|
+
|
|
208
|
+
return g.to_s
|
|
164
209
|
end
|
|
210
|
+
end # class << self
|
|
165
211
|
|
|
166
|
-
|
|
212
|
+
##
|
|
213
|
+
# Sets the name of the package. The name of a package should be a short and
|
|
214
|
+
# unique name. A human readable version can be set using title=().
|
|
215
|
+
#
|
|
216
|
+
# @since 0.3
|
|
217
|
+
# @param [#to_sym] name The name of the package.
|
|
218
|
+
#
|
|
219
|
+
def name=(name)
|
|
220
|
+
@name = name.to_sym
|
|
167
221
|
end
|
|
168
222
|
|
|
169
223
|
##
|
|
170
|
-
#
|
|
224
|
+
# Sets the title of the package.
|
|
171
225
|
#
|
|
172
|
-
# @
|
|
173
|
-
# @
|
|
226
|
+
# @since 0.3
|
|
227
|
+
# @param [String] title The title or language key of the package.
|
|
174
228
|
#
|
|
175
|
-
def
|
|
176
|
-
|
|
229
|
+
def title=(title)
|
|
230
|
+
@title = title
|
|
231
|
+
end
|
|
177
232
|
|
|
178
|
-
|
|
179
|
-
|
|
233
|
+
##
|
|
234
|
+
# Returns the title of the package. This method will try to translate it and
|
|
235
|
+
# fall back to the original value in case the language key doesn't exist.
|
|
236
|
+
#
|
|
237
|
+
# @since 0.3
|
|
238
|
+
# @return [String]
|
|
239
|
+
#
|
|
240
|
+
def title
|
|
241
|
+
begin
|
|
242
|
+
return lang(@title)
|
|
243
|
+
rescue
|
|
244
|
+
return @title
|
|
180
245
|
end
|
|
246
|
+
end
|
|
181
247
|
|
|
182
|
-
|
|
183
|
-
|
|
248
|
+
##
|
|
249
|
+
# Returns the title as either an ``<a>`` tag or plain text depending on
|
|
250
|
+
# whether or not the package has a URL set.
|
|
251
|
+
#
|
|
252
|
+
# @since 19-11-2011
|
|
253
|
+
# @return [String]
|
|
254
|
+
#
|
|
255
|
+
def formatted_title
|
|
256
|
+
if url
|
|
257
|
+
return '<a href="%s" title="%s">%s</a>' % [url, title, title]
|
|
258
|
+
else
|
|
259
|
+
return title
|
|
184
260
|
end
|
|
261
|
+
end
|
|
185
262
|
|
|
186
|
-
|
|
263
|
+
##
|
|
264
|
+
# Sets the description of the package.
|
|
265
|
+
#
|
|
266
|
+
# @since 0.3
|
|
267
|
+
# @param [String] about The description of the package.
|
|
268
|
+
#
|
|
269
|
+
def about=(about)
|
|
270
|
+
@about = about
|
|
187
271
|
end
|
|
188
272
|
|
|
189
273
|
##
|
|
190
|
-
#
|
|
191
|
-
# Extensions can have an infinite amount of sub-navigation
|
|
192
|
-
# items. This method will generate an unordered list of items
|
|
193
|
-
# of which each list item can contain N sub items.
|
|
274
|
+
# Tries to translate the description and returns it.
|
|
194
275
|
#
|
|
195
|
-
# @
|
|
196
|
-
# @
|
|
197
|
-
# element.
|
|
198
|
-
# @param [Hash] permissions Hash containing the permissions as returned by
|
|
199
|
-
# Ramaze::Helper::ACL.extension_permissions
|
|
200
|
-
# @since 0.1
|
|
276
|
+
# @since 0.3
|
|
277
|
+
# @return [String]
|
|
201
278
|
#
|
|
202
|
-
def
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
Registered.each do |name, pkg|
|
|
208
|
-
# Got a menu for us?
|
|
209
|
-
if !pkg.menu.nil?
|
|
210
|
-
pkg.menu.each do |m|
|
|
211
|
-
menu_items.push(m)
|
|
212
|
-
end
|
|
213
|
-
end
|
|
279
|
+
def about
|
|
280
|
+
begin
|
|
281
|
+
return lang(@about)
|
|
282
|
+
rescue
|
|
283
|
+
return @about
|
|
214
284
|
end
|
|
285
|
+
end
|
|
286
|
+
|
|
287
|
+
##
|
|
288
|
+
# Sets the root directory of the package.
|
|
289
|
+
#
|
|
290
|
+
# @since 0.3
|
|
291
|
+
# @param [String] root The path to the root directory.
|
|
292
|
+
#
|
|
293
|
+
def root=(root)
|
|
294
|
+
@root = root
|
|
295
|
+
lang_dir = File.join(@root, 'language')
|
|
215
296
|
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
item[:title]
|
|
297
|
+
if !Ramaze.options.roots.include?(@root)
|
|
298
|
+
Ramaze.options.roots << @root
|
|
219
299
|
end
|
|
220
300
|
|
|
221
|
-
@
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
self.nav_list(m)
|
|
225
|
-
end
|
|
226
|
-
end
|
|
301
|
+
if !Zen::Language.options.paths.include?(@root) \
|
|
302
|
+
and File.directory?(lang_dir)
|
|
303
|
+
Zen::Language.options.paths << lang_dir
|
|
227
304
|
end
|
|
228
305
|
|
|
229
|
-
|
|
306
|
+
if !Ramaze::HelpersHelper.options.paths.push.include?(@root)
|
|
307
|
+
Ramaze::HelpersHelper.options.paths << @root
|
|
308
|
+
end
|
|
230
309
|
end
|
|
231
310
|
|
|
232
|
-
private
|
|
233
|
-
|
|
234
311
|
##
|
|
235
|
-
#
|
|
236
|
-
#
|
|
312
|
+
# Sets all the navigation items for the package. Sub items can be specified
|
|
313
|
+
# by calling this method and passing a block to it.
|
|
237
314
|
#
|
|
238
|
-
# @
|
|
239
|
-
#
|
|
240
|
-
#
|
|
315
|
+
# @example
|
|
316
|
+
# Zen::Package.add do |p|
|
|
317
|
+
# p.menu('Hello,' ,'/admin/hello') do |sub|
|
|
318
|
+
# sub.menu('Sub menu', '/admin/hello/sub')
|
|
319
|
+
# end
|
|
320
|
+
# end
|
|
241
321
|
#
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
322
|
+
# @since 0.3
|
|
323
|
+
# @see Zen::Package::Menu#initialize()
|
|
324
|
+
# @return [Zen::Package::Menu] The current navigation menu if no new one is
|
|
325
|
+
# specified.
|
|
326
|
+
#
|
|
327
|
+
def menu(title = nil, url = nil, options = {}, &block)
|
|
328
|
+
if title.nil? and url.nil? and !block_given?
|
|
329
|
+
return @menu
|
|
245
330
|
end
|
|
246
331
|
|
|
247
|
-
|
|
248
|
-
|
|
332
|
+
@menu = Zen::Package::Menu.new(title, url, options, &block)
|
|
333
|
+
end
|
|
334
|
+
|
|
335
|
+
##
|
|
336
|
+
# Adds a new permission along with it's title or language key.
|
|
337
|
+
#
|
|
338
|
+
# @example
|
|
339
|
+
# Zen::Package.add do |p|
|
|
340
|
+
# p.permission :show_user, 'users.titles.index'
|
|
341
|
+
# p.permission :edit_user, 'users.titles.edit'
|
|
342
|
+
# end
|
|
343
|
+
#
|
|
344
|
+
# @since 0.3
|
|
345
|
+
# @param [#to_sym] permission The name of the permission.
|
|
346
|
+
# @param [String] title The title or language key of the permission, shown
|
|
347
|
+
# in the admin interface.
|
|
348
|
+
#
|
|
349
|
+
def permission(permission, title)
|
|
350
|
+
@permissions ||= {}
|
|
351
|
+
@permissions[permission.to_sym] = title
|
|
352
|
+
end
|
|
249
353
|
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
354
|
+
##
|
|
355
|
+
# Returns the permissions for the current package. This method will
|
|
356
|
+
# automatically try to translate the titles using the current language.
|
|
357
|
+
#
|
|
358
|
+
# @since 0.3
|
|
359
|
+
# @return [Hash]
|
|
360
|
+
#
|
|
361
|
+
def permissions
|
|
362
|
+
perms = {}
|
|
255
363
|
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
364
|
+
@permissions.each do |perm, title|
|
|
365
|
+
begin
|
|
366
|
+
perms[perm] = lang(title)
|
|
367
|
+
rescue
|
|
368
|
+
perms[perm] = title
|
|
369
|
+
end
|
|
259
370
|
end
|
|
260
371
|
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
if !read_access
|
|
264
|
-
menu[:url] = '#'
|
|
265
|
-
end
|
|
372
|
+
return perms
|
|
373
|
+
end
|
|
266
374
|
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
375
|
+
##
|
|
376
|
+
# Validates all the attributes.
|
|
377
|
+
#
|
|
378
|
+
# @since 0.2.5
|
|
379
|
+
#
|
|
380
|
+
def validate
|
|
381
|
+
validates_presence([:name, :title, :author, :about, :root])
|
|
270
382
|
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
end
|
|
383
|
+
validates_filepath(:root)
|
|
384
|
+
validates_filepath(:migrations) unless migrations.nil?
|
|
385
|
+
|
|
386
|
+
# Check if the package hasn't been registered yet
|
|
387
|
+
if Zen::Package::REGISTERED.key?(name.to_sym)
|
|
388
|
+
raise(Zen::ValidationError, "The package #{name} already exists.")
|
|
278
389
|
end
|
|
279
390
|
end
|
|
280
391
|
end # Package
|