zen 0.3 → 0.4
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 +3 -2
- data/.rvmrc +1 -1
- data/.travis.yml +5 -0
- data/.yardopts +2 -1
- data/LICENSE +1 -1
- data/README.md +28 -24
- data/Rakefile +5 -2
- data/guide/asset_management.md +6 -6
- data/guide/autosaving_forms.md +42 -0
- data/guide/changelog.md +41 -0
- data/guide/faq.md +49 -0
- data/guide/getting_started.md +24 -13
- data/guide/hacking.md +40 -9
- data/guide/images/categories/categories.png +0 -0
- data/guide/images/categories/category_groups.png +0 -0
- data/guide/images/categories/new_category.png +0 -0
- data/guide/images/categories/new_category_group.png +0 -0
- data/guide/images/comments/comments.png +0 -0
- data/guide/images/comments/edit_comment.png +0 -0
- data/guide/images/custom_fields/custom_field_groups.png +0 -0
- data/guide/images/custom_fields/custom_field_types.png +0 -0
- data/guide/images/custom_fields/custom_fields.png +0 -0
- data/guide/images/custom_fields/edit_custom_field_general.png +0 -0
- data/guide/images/custom_fields/edit_custom_field_group.png +0 -0
- data/guide/images/custom_fields/edit_custom_field_settings.png +0 -0
- data/guide/images/custom_fields/edit_custom_field_type.png +0 -0
- data/guide/images/dashboard/added.png +0 -0
- data/guide/images/dashboard/columns.png +0 -0
- data/guide/images/dashboard/dashboard.png +0 -0
- data/guide/images/dashboard/options.png +0 -0
- data/guide/images/menus/edit_menu.png +0 -0
- data/guide/images/menus/edit_menu_item.png +0 -0
- data/guide/images/menus/menu_item_hierarchy.png +0 -0
- data/guide/images/menus/menu_items.png +0 -0
- data/guide/images/menus/menus.png +0 -0
- data/guide/images/sections/edit_entry.png +0 -0
- data/guide/images/sections/edit_entry_categories.png +0 -0
- data/guide/images/sections/edit_entry_general.png +0 -0
- data/guide/images/sections/edit_entry_meta.png +0 -0
- data/guide/images/sections/edit_section_comments.png +0 -0
- data/guide/images/sections/edit_section_general.png +0 -0
- data/guide/images/sections/edit_section_groups.png +0 -0
- data/guide/images/sections/entries.png +0 -0
- data/guide/images/sections/sections.png +0 -0
- data/guide/images/settings/overview_general.png +0 -0
- data/guide/images/settings/overview_security.png +0 -0
- data/guide/images/settings/overview_user.png +0 -0
- data/guide/images/users/edit_user.png +0 -0
- data/guide/images/users/edit_user_group.png +0 -0
- data/guide/images/users/edit_user_group_permissions.png +0 -0
- data/guide/images/users/edit_user_permissions.png +0 -0
- data/guide/images/users/overview.png +0 -0
- data/guide/images/users/user_groups_overview.png +0 -0
- data/guide/installation.md +7 -1
- data/guide/javascript.md +36 -273
- data/guide/javascript/zen_autosave.md +26 -0
- data/guide/javascript/zen_editor.md +83 -0
- data/guide/javascript/zen_hash.md +34 -0
- data/guide/javascript/zen_htmltable.md +78 -0
- data/guide/javascript/zen_tabs.md +44 -0
- data/guide/javascript/zen_window.md +49 -0
- data/guide/zen_compared.md +201 -0
- data/lib/vendor/sequel_sluggable.rb +1 -1
- data/lib/zen.rb +64 -44
- data/lib/zen/asset_groups.rb +10 -10
- data/lib/zen/bin/create.rb +8 -1
- data/lib/zen/helper/breadcrumb.rb +4 -12
- data/lib/zen/helper/controller.rb +209 -6
- data/lib/zen/helper/locale.rb +19 -0
- data/lib/zen/helper/search.rb +1 -1
- data/lib/zen/helper/stacked_aspect.rb +7 -43
- data/lib/zen/helper/theme.rb +3 -3
- data/lib/zen/language.rb +5 -10
- data/lib/zen/language/translation.rb +1 -1
- data/lib/zen/layout/admin.xhtml +41 -25
- data/lib/zen/layout/login.xhtml +8 -3
- data/lib/zen/migrator.rb +54 -0
- data/lib/zen/model/helper.rb +20 -1
- data/lib/zen/model/init.rb +2 -0
- data/lib/zen/model/plugin/events.rb +158 -0
- data/lib/zen/package.rb +32 -6
- data/lib/zen/package/all.rb +1 -0
- data/lib/zen/package/categories/lib/categories.rb +6 -6
- data/lib/zen/package/categories/lib/categories/controller/categories.rb +20 -83
- data/lib/zen/package/categories/lib/categories/controller/category_groups.rb +23 -74
- data/lib/zen/package/categories/lib/categories/model/category.rb +58 -1
- data/lib/zen/package/categories/lib/categories/model/category_group.rb +62 -2
- data/lib/zen/package/categories/lib/categories/view/admin/categories/form.xhtml +46 -40
- data/lib/zen/package/categories/lib/categories/view/admin/categories/index.xhtml +74 -75
- data/lib/zen/package/categories/lib/categories/view/admin/category-groups/form.xhtml +27 -24
- data/lib/zen/package/categories/lib/categories/view/admin/category-groups/index.xhtml +83 -86
- data/lib/zen/package/comments/lib/comments.rb +5 -5
- data/lib/zen/package/comments/lib/comments/controller/comments.rb +12 -64
- data/lib/zen/package/comments/lib/comments/controller/comments_form.rb +4 -22
- data/lib/zen/package/comments/lib/comments/model/comment.rb +65 -16
- data/lib/zen/package/comments/lib/comments/view/admin/comments/form.xhtml +52 -49
- data/lib/zen/package/comments/lib/comments/view/admin/comments/index.xhtml +52 -60
- data/lib/zen/package/comments/migrations/1308774099_comment_status.rb +1 -1
- data/lib/zen/package/custom_fields/lib/custom_fields.rb +11 -13
- data/lib/zen/package/custom_fields/lib/custom_fields/blue_form_parameters.rb +29 -13
- data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_field_groups.rb +21 -50
- data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_field_types.rb +27 -71
- data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_fields.rb +25 -78
- data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field.rb +48 -1
- data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_group.rb +35 -1
- data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_method.rb +3 -0
- data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_type.rb +40 -1
- data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_value.rb +1 -0
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/form.xhtml +29 -26
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/index.xhtml +96 -100
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-types/form.xhtml +56 -53
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-types/index.xhtml +82 -82
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/form.xhtml +88 -85
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/index.xhtml +83 -80
- data/lib/zen/package/dashboard/lib/dashboard.rb +28 -0
- data/lib/zen/package/dashboard/lib/dashboard/controller/dashboard.rb +154 -0
- data/lib/zen/package/dashboard/lib/dashboard/language/en/dashboard.rb +35 -0
- data/lib/zen/package/dashboard/lib/dashboard/language/nl/dashboard.rb +36 -0
- data/lib/zen/package/dashboard/lib/dashboard/model/widget.rb +45 -0
- data/lib/zen/package/dashboard/lib/dashboard/public/admin/dashboard/css/dashboard.css +74 -0
- data/lib/zen/package/dashboard/lib/dashboard/public/admin/dashboard/js/dashboard.js +102 -0
- data/lib/zen/package/dashboard/lib/dashboard/view/admin/index.xhtml +29 -0
- data/lib/zen/package/dashboard/lib/dashboard/view/admin/widget/welcome.xhtml +28 -0
- data/lib/zen/package/dashboard/lib/dashboard/widget.rb +292 -0
- data/lib/zen/package/dashboard/lib/dashboard/widget/welcome.rb +9 -0
- data/lib/zen/package/dashboard/migrations/1326411254_create_schema.rb +28 -0
- data/lib/zen/package/extensions/lib/extensions.rb +5 -5
- data/lib/zen/package/extensions/lib/extensions/view/admin/extensions/index.xhtml +72 -67
- data/lib/zen/package/menu.rb +6 -1
- data/lib/zen/package/menus/lib/menus.rb +6 -4
- data/lib/zen/package/menus/lib/menus/controller/menu_items.rb +69 -104
- data/lib/zen/package/menus/lib/menus/controller/menus.rb +19 -76
- data/lib/zen/package/menus/lib/menus/helper/menu.rb +54 -38
- data/lib/zen/package/menus/lib/menus/helper/menu_frontend.rb +7 -13
- data/lib/zen/package/menus/lib/menus/model/menu.rb +158 -2
- data/lib/zen/package/menus/lib/menus/model/menu_item.rb +73 -10
- data/lib/zen/package/menus/lib/menus/public/admin/menus/css/menus.css +47 -0
- data/lib/zen/package/menus/lib/menus/public/admin/menus/js/lib/nested_sortables.js +549 -0
- data/lib/zen/package/menus/lib/menus/public/admin/menus/js/menu_items.js +38 -0
- data/lib/zen/package/menus/lib/menus/view/admin/menu-items/form.xhtml +51 -61
- data/lib/zen/package/menus/lib/menus/view/admin/menu-items/index.xhtml +18 -81
- data/lib/zen/package/menus/lib/menus/view/admin/menus/form.xhtml +49 -44
- data/lib/zen/package/menus/lib/menus/view/admin/menus/index.xhtml +81 -83
- data/lib/zen/package/sections/lib/sections.rb +9 -4
- data/lib/zen/package/sections/lib/sections/controller/section_entries.rb +80 -132
- data/lib/zen/package/sections/lib/sections/controller/sections.rb +27 -73
- data/lib/zen/package/sections/lib/sections/helper/section.rb +44 -1
- data/lib/zen/package/sections/lib/sections/language/en/section_entries.rb +2 -0
- data/lib/zen/package/sections/lib/sections/language/nl/section_entries.rb +2 -0
- data/lib/zen/package/sections/lib/sections/model/section.rb +48 -1
- data/lib/zen/package/sections/lib/sections/model/section_entry.rb +55 -5
- data/lib/zen/package/sections/lib/sections/model/section_entry_status.rb +2 -0
- data/lib/zen/package/sections/lib/sections/view/admin/section-entries/form.xhtml +76 -67
- data/lib/zen/package/sections/lib/sections/view/admin/section-entries/index.xhtml +74 -79
- data/lib/zen/package/sections/lib/sections/view/admin/section-entries/recent_entries.xhtml +45 -0
- data/lib/zen/package/sections/lib/sections/view/admin/sections/form.xhtml +119 -0
- data/lib/zen/package/sections/lib/sections/view/admin/sections/index.xhtml +96 -0
- data/lib/zen/package/sections/lib/sections/widget/recent_entries.rb +14 -0
- data/lib/zen/package/sections/migrations/1308813320_section_entry_statuses.rb +1 -1
- data/lib/zen/package/settings/lib/settings.rb +14 -5
- data/lib/zen/package/settings/lib/settings/controller/settings.rb +4 -4
- data/lib/zen/package/settings/lib/settings/language/nl/settings.rb +1 -1
- data/lib/zen/package/settings/lib/settings/setting.rb +1 -1
- data/lib/zen/package/settings/lib/settings/view/admin/settings/index.xhtml +21 -17
- data/lib/zen/package/users/lib/users.rb +18 -19
- data/lib/zen/package/users/lib/users/controller/user_groups.rb +23 -50
- data/lib/zen/package/users/lib/users/controller/users.rb +57 -89
- data/lib/zen/package/users/lib/users/helper/acl.rb +1 -0
- data/lib/zen/package/users/lib/users/language/en/user_groups.rb +1 -0
- data/lib/zen/package/users/lib/users/language/en/users.rb +2 -1
- data/lib/zen/package/users/lib/users/language/nl/user_groups.rb +1 -0
- data/lib/zen/package/users/lib/users/language/nl/users.rb +2 -1
- data/lib/zen/package/users/lib/users/model/permission.rb +13 -0
- data/lib/zen/package/users/lib/users/model/user.rb +57 -4
- data/lib/zen/package/users/lib/users/model/user_group.rb +37 -3
- data/lib/zen/package/users/lib/users/model/user_status.rb +4 -0
- data/lib/zen/package/users/lib/users/public/admin/{css/users/permissions.css → users/css/users.css} +0 -0
- data/lib/zen/package/users/lib/users/public/admin/{js/users/permissions.js → users/js/users.js} +4 -2
- data/lib/zen/package/users/lib/users/view/admin/user-groups/form.xhtml +51 -47
- data/lib/zen/package/users/lib/users/view/admin/user-groups/index.xhtml +62 -69
- data/lib/zen/package/users/lib/users/view/admin/users/form.xhtml +92 -82
- data/lib/zen/package/users/lib/users/view/admin/users/index.xhtml +68 -66
- data/lib/zen/package/users/lib/users/view/admin/users/login.xhtml +36 -28
- data/lib/zen/package/users/lib/users/view/admin/users/permissions.xhtml +5 -7
- data/lib/zen/package/users/lib/users/view/admin/users/register.xhtml +47 -41
- data/lib/zen/package/users/migrations/1320272365_status_ids.rb +1 -1
- data/lib/zen/public/admin/{js/vendor/mootools → mootools/js}/core.js +113 -108
- data/lib/zen/public/admin/{js/vendor/mootools → mootools/js}/more.js +99 -6
- data/lib/zen/public/admin/zen/css/buttons.css +106 -0
- data/lib/zen/public/admin/{css/zen → zen/css}/datepicker.css +45 -30
- data/lib/zen/public/admin/zen/css/editor.css +69 -0
- data/lib/zen/public/admin/{css/zen → zen/css}/forms.css +28 -30
- data/lib/zen/public/admin/zen/css/general.css +183 -0
- data/lib/zen/public/admin/zen/css/layout.css +224 -0
- data/lib/zen/public/admin/zen/css/messages.css +34 -0
- data/lib/zen/public/admin/{css/zen → zen/css}/reset.css +4 -9
- data/lib/zen/public/admin/zen/css/tables.css +57 -0
- data/lib/zen/public/admin/zen/css/tabs.css +84 -0
- data/lib/zen/public/admin/zen/css/window.css +74 -0
- data/lib/zen/public/admin/{images/zen → zen/images}/icons/asc.png +0 -0
- data/lib/zen/public/admin/{images/zen → zen/images}/icons/bold.png +0 -0
- data/lib/zen/public/admin/zen/images/icons/box.png +0 -0
- data/lib/zen/public/admin/zen/images/icons/categories.png +0 -0
- data/lib/zen/public/admin/{images/zen → zen/images}/icons/close.png +0 -0
- data/lib/zen/public/admin/zen/images/icons/comment.png +0 -0
- data/lib/zen/public/admin/{images/zen → zen/images}/icons/desc.png +0 -0
- data/lib/zen/public/admin/{images/zen → zen/images}/icons/edit.png +0 -0
- data/lib/zen/public/admin/{images/zen → zen/images}/icons/error.png +0 -0
- data/lib/zen/public/admin/zen/images/icons/external.png +0 -0
- data/lib/zen/public/admin/zen/images/icons/globe.png +0 -0
- data/lib/zen/public/admin/{images/zen → zen/images}/icons/italic.png +0 -0
- data/lib/zen/public/admin/{images/zen → zen/images}/icons/link.png +0 -0
- data/lib/zen/public/admin/zen/images/icons/lock.png +0 -0
- data/lib/zen/public/admin/{images/zen → zen/images}/icons/ol.png +0 -0
- data/lib/zen/public/admin/zen/images/icons/pages.png +0 -0
- data/lib/zen/public/admin/{images/zen → zen/images}/icons/preview.png +0 -0
- data/lib/zen/public/admin/zen/images/icons/relation.png +0 -0
- data/lib/zen/public/admin/zen/images/icons/settings.png +0 -0
- data/lib/zen/public/admin/zen/images/icons/template.png +0 -0
- data/lib/zen/public/admin/{images/zen → zen/images}/icons/ul.png +0 -0
- data/lib/zen/public/admin/{images/zen → zen/images}/icons/user.png +0 -0
- data/lib/zen/public/admin/zen/images/icons/user_group.png +0 -0
- data/lib/zen/public/admin/{js/zen → zen/js}/index.js +21 -9
- data/lib/zen/public/admin/zen/js/lib/autosave.js +185 -0
- data/lib/zen/public/admin/zen/js/lib/base.js +60 -0
- data/lib/zen/public/admin/{js/vendor → zen/js/lib}/datepicker.js +52 -28
- data/lib/zen/public/admin/{js/zen → zen/js}/lib/editor.js +23 -34
- data/lib/zen/public/admin/{js/zen → zen/js}/lib/editor/markdown.js +5 -1
- data/lib/zen/public/admin/{js/zen → zen/js}/lib/editor/textile.js +4 -0
- data/lib/zen/public/admin/zen/js/lib/hash.js +218 -0
- data/lib/zen/public/admin/{js/zen → zen/js}/lib/html_table.js +5 -0
- data/lib/zen/public/admin/zen/js/lib/tabs.js +194 -0
- data/lib/zen/public/admin/{js/zen → zen/js}/lib/window.js +54 -29
- data/lib/zen/security.rb +50 -0
- data/lib/zen/spec/helper.rb +5 -120
- data/lib/zen/spec/helper/capybara.rb +75 -0
- data/lib/zen/spec/helper/general.rb +75 -0
- data/lib/zen/spec/simplecov.rb +1 -0
- data/lib/zen/task/build.rake +2 -21
- data/lib/zen/task/clean.rake +1 -10
- data/lib/zen/task/db.rake +4 -10
- data/lib/zen/task/package.rake +2 -5
- data/lib/zen/task/setup.rake +1 -1
- data/lib/zen/task/test.rake +6 -6
- data/lib/zen/task/theme.rake +2 -5
- data/lib/zen/theme.rb +26 -22
- data/lib/zen/version.rb +1 -1
- data/lib/zen/view/bottom.xhtml +2 -3
- data/lib/zen/view/search.xhtml +3 -5
- data/proto/app/config/config.rb.erb +1 -1
- data/proto/app/theme/default/index.xhtml +116 -20
- data/proto/app/theme/partials/head.xhtml +9 -0
- data/proto/app/theme/partials/sidebar.xhtml +40 -0
- data/proto/app/theme/theme.rb +3 -0
- data/spec/Rakefile +1 -2
- data/spec/fixtures/zen/helper/stacked_aspect.rb +54 -0
- data/spec/fixtures/zen/package/dashboard/controller/widget.rb +15 -0
- data/spec/fixtures/zen/package/dashboard/widget.rb +5 -0
- data/spec/fixtures/zen/theme/theme.rb +2 -2
- data/spec/helper.rb +19 -10
- data/spec/zen/controller/admin_controller.rb +3 -3
- data/spec/zen/controller/main_controller.rb +7 -7
- data/spec/zen/controller/preview.rb +3 -3
- data/spec/zen/event.rb +4 -4
- data/spec/zen/helper/breadcrumb.rb +4 -8
- data/spec/zen/helper/controller.rb +47 -4
- data/spec/zen/helper/locale.rb +3 -3
- data/spec/zen/helper/message.rb +4 -4
- data/spec/zen/helper/stacked_aspect.rb +40 -0
- data/spec/zen/helper/theme.rb +9 -9
- data/spec/zen/language.rb +8 -8
- data/spec/zen/markup.rb +6 -6
- data/spec/zen/package.rb +11 -9
- data/spec/zen/package/categories/controller/categories.rb +56 -24
- data/spec/zen/package/categories/controller/category_groups.rb +55 -23
- data/spec/zen/package/categories/helper/category.rb +5 -5
- data/spec/zen/package/categories/helper/category_frontend.rb +5 -5
- data/spec/zen/package/comments/anti_spam.rb +4 -4
- data/spec/zen/package/comments/controller/comments.rb +95 -24
- data/spec/zen/package/comments/controller/comments_form.rb +31 -26
- data/spec/zen/package/comments/helper/comment.rb +3 -3
- data/spec/zen/package/comments/helper/comment_frontend.rb +6 -6
- data/spec/zen/package/custom_fields/blue_form_parameters.rb +8 -8
- data/spec/zen/package/custom_fields/controller/custom_field_groups.rb +58 -27
- data/spec/zen/package/custom_fields/controller/custom_field_types.rb +57 -27
- data/spec/zen/package/custom_fields/controller/custom_fields.rb +58 -27
- data/spec/zen/package/custom_fields/helper/custom_field.rb +7 -7
- data/spec/zen/package/dashboard/controller/dashboard.rb +147 -0
- data/spec/zen/package/dashboard/widget.rb +56 -0
- data/spec/zen/package/extensions/controller/extensions.rb +4 -4
- data/spec/zen/package/menus/controller/menu_items.rb +48 -39
- data/spec/zen/package/menus/controller/menus.rb +55 -24
- data/spec/zen/package/menus/helper/menu.rb +6 -14
- data/spec/zen/package/menus/helper/menu_frontend.rb +7 -7
- data/spec/zen/package/menus/model/menu.rb +121 -0
- data/spec/zen/package/menus/model/menu_item.rb +34 -0
- data/spec/zen/package/sections/controller/section_entries.rb +104 -39
- data/spec/zen/package/sections/controller/sections.rb +60 -27
- data/spec/zen/package/sections/helper/section.rb +5 -5
- data/spec/zen/package/sections/helper/section_frontend.rb +9 -9
- data/spec/zen/package/sections/widget.rb +44 -0
- data/spec/zen/package/settings/controller/settings.rb +18 -16
- data/spec/zen/package/settings/settings.rb +12 -12
- data/spec/zen/package/users/controller/user_groups.rb +61 -29
- data/spec/zen/package/users/controller/users.rb +118 -39
- data/spec/zen/package/users/helper/access.rb +3 -3
- data/spec/zen/package/users/helper/acl.rb +4 -4
- data/spec/zen/package/users/helper/users.rb +5 -5
- data/spec/zen/security.rb +25 -0
- data/spec/zen/theme.rb +20 -18
- data/spec/zen/validation.rb +5 -5
- data/spec/zen/vendor/sequel_sluggable.rb +12 -0
- data/zen.gemspec +27 -4
- metadata +182 -124
- data/AUTHORS +0 -4
- 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/lib/zen/controller/translations.rb +0 -49
- data/lib/zen/package/sections/lib/sections/view/admin/form.xhtml +0 -113
- data/lib/zen/package/sections/lib/sections/view/admin/index.xhtml +0 -97
- data/lib/zen/public/admin/css/zen/buttons.css +0 -46
- data/lib/zen/public/admin/css/zen/editor.css +0 -88
- data/lib/zen/public/admin/css/zen/general.css +0 -109
- data/lib/zen/public/admin/css/zen/grid.css +0 -100
- data/lib/zen/public/admin/css/zen/layout.css +0 -184
- data/lib/zen/public/admin/css/zen/messages.css +0 -54
- data/lib/zen/public/admin/css/zen/tables.css +0 -97
- data/lib/zen/public/admin/css/zen/tabs.css +0 -47
- data/lib/zen/public/admin/css/zen/window.css +0 -73
- data/lib/zen/public/admin/images/zen/icons/accept.png +0 -0
- data/lib/zen/public/admin/images/zen/icons/add.png +0 -0
- data/lib/zen/public/admin/images/zen/icons/back.png +0 -0
- data/lib/zen/public/admin/images/zen/icons/delete.png +0 -0
- data/lib/zen/public/admin/images/zen/icons/help.png +0 -0
- data/lib/zen/public/admin/images/zen/icons/info.png +0 -0
- data/lib/zen/public/admin/images/zen/icons/logout.png +0 -0
- data/lib/zen/public/admin/images/zen/icons/pdf.png +0 -0
- data/lib/zen/public/admin/images/zen/icons/view.png +0 -0
- data/lib/zen/public/admin/js/zen/lib/tabs.js +0 -207
- data/lib/zen/view/main.xhtml +0 -19
data/lib/zen/helper/locale.rb
CHANGED
|
@@ -4,6 +4,25 @@ module Ramaze
|
|
|
4
4
|
# Helper that can be used to display various variables based on the user's
|
|
5
5
|
# locale and settings.
|
|
6
6
|
#
|
|
7
|
+
# ## Working With Dates
|
|
8
|
+
#
|
|
9
|
+
# This module includes two separate methods that can be used for working
|
|
10
|
+
# with dates. The method {Ramaze::Helper::Locale#date_format} can be used to
|
|
11
|
+
# return the raw date format for the currently logged in user, the method
|
|
12
|
+
# {Ramaze::Helper::Locale#format_date} can be used to format an object that
|
|
13
|
+
# responds to ``#strftime()``. It is highly recommended to use the latter
|
|
14
|
+
# method whenever you display dates in order for them to be consistent.
|
|
15
|
+
#
|
|
16
|
+
# Usage of the format_date method is very simple, all you need to do is pass
|
|
17
|
+
# it an object that as mentioned above responds to ``#strftime()``:
|
|
18
|
+
#
|
|
19
|
+
# format_date(Time.now) # => "23-02-2012 19:08:59"
|
|
20
|
+
#
|
|
21
|
+
# To use this method in Etanni templates you'll have to wrap it in the
|
|
22
|
+
# correct template tags:
|
|
23
|
+
#
|
|
24
|
+
# #{format_date(Time.now)}
|
|
25
|
+
#
|
|
7
26
|
# @since 0.3
|
|
8
27
|
#
|
|
9
28
|
module Locale
|
data/lib/zen/helper/search.rb
CHANGED
|
@@ -44,7 +44,7 @@ module Ramaze
|
|
|
44
44
|
begin
|
|
45
45
|
return yield(request.params['query'])
|
|
46
46
|
rescue => e
|
|
47
|
-
Ramaze::Log.error(e
|
|
47
|
+
Ramaze::Log.error(e)
|
|
48
48
|
message(:error, lang('zen_general.errors.invalid_search'))
|
|
49
49
|
redirect_referrer(::Sections::Controller::Sections.r(:index))
|
|
50
50
|
end
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
module Ramaze
|
|
2
2
|
module Helper
|
|
3
3
|
##
|
|
4
|
-
# StackedAspect is a helper similar to
|
|
4
|
+
# StackedAspect is a helper similar to Innate::Helper::Aspect but allows
|
|
5
5
|
# calls to methods such as ``before_all`` to stack on top of each other
|
|
6
6
|
# instead of overwriting previously defined ones.
|
|
7
7
|
#
|
|
@@ -65,22 +65,6 @@ module Ramaze
|
|
|
65
65
|
return aop
|
|
66
66
|
end
|
|
67
67
|
|
|
68
|
-
##
|
|
69
|
-
# Shows a warning to inform the developer that the aspect name is already
|
|
70
|
-
# in use.
|
|
71
|
-
#
|
|
72
|
-
# @since 06-11-2011
|
|
73
|
-
# @param [#to_s] name The name of the aspect.
|
|
74
|
-
#
|
|
75
|
-
def self.aspect_warn(name)
|
|
76
|
-
file, line = caller[1].split(':')
|
|
77
|
-
|
|
78
|
-
Ramaze::Log.warn(
|
|
79
|
-
"The aspect name \"#{name}\" is already in use, it was redefined " \
|
|
80
|
-
"in #{file} on line #{line}"
|
|
81
|
-
)
|
|
82
|
-
end
|
|
83
|
-
|
|
84
68
|
##
|
|
85
69
|
# Calls a certain AOP action for the specified position and method name.
|
|
86
70
|
#
|
|
@@ -156,13 +140,7 @@ module Ramaze
|
|
|
156
140
|
# @param [Proc] block The block to execute.
|
|
157
141
|
#
|
|
158
142
|
def stacked_before_all(name, &block)
|
|
159
|
-
name =
|
|
160
|
-
|
|
161
|
-
if !STACKED_AOP[self][:before_all].key?(name)
|
|
162
|
-
STACKED_AOP[self][:before_all][name] = block
|
|
163
|
-
else
|
|
164
|
-
StackedAspect.aspect_warn(name)
|
|
165
|
-
end
|
|
143
|
+
STACKED_AOP[self][:before_all][name.to_sym] = block
|
|
166
144
|
end
|
|
167
145
|
|
|
168
146
|
##
|
|
@@ -185,13 +163,9 @@ module Ramaze
|
|
|
185
163
|
|
|
186
164
|
methods.each do |m|
|
|
187
165
|
m = m.to_sym
|
|
188
|
-
STACKED_AOP[self][:before][m] ||= {}
|
|
189
166
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
else
|
|
193
|
-
StackedAspect.aspect_warn(name)
|
|
194
|
-
end
|
|
167
|
+
STACKED_AOP[self][:before][m] ||= {}
|
|
168
|
+
STACKED_AOP[self][:before][m][name] = block
|
|
195
169
|
end
|
|
196
170
|
end
|
|
197
171
|
|
|
@@ -202,13 +176,7 @@ module Ramaze
|
|
|
202
176
|
# @see Ramaze::Helper::StackedAspect::ClassMethods#stacked_before_all
|
|
203
177
|
#
|
|
204
178
|
def stacked_after_all(name, &block)
|
|
205
|
-
name =
|
|
206
|
-
|
|
207
|
-
if !STACKED_AOP[self][:after_all].key?(name)
|
|
208
|
-
STACKED_AOP[self][:after_all][name] = block
|
|
209
|
-
else
|
|
210
|
-
StackedAspect.aspect_warn(name)
|
|
211
|
-
end
|
|
179
|
+
STACKED_AOP[self][:after_all][name.to_sym] = block
|
|
212
180
|
end
|
|
213
181
|
|
|
214
182
|
##
|
|
@@ -222,13 +190,9 @@ module Ramaze
|
|
|
222
190
|
|
|
223
191
|
methods.each do |m|
|
|
224
192
|
m = m.to_sym
|
|
225
|
-
STACKED_AOP[self][:after][m] ||= {}
|
|
226
193
|
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
else
|
|
230
|
-
StackedAspect.aspect_warn(name)
|
|
231
|
-
end
|
|
194
|
+
STACKED_AOP[self][:after][m] ||= {}
|
|
195
|
+
STACKED_AOP[self][:after][m][name] = block
|
|
232
196
|
end
|
|
233
197
|
end
|
|
234
198
|
|
data/lib/zen/helper/theme.rb
CHANGED
|
@@ -28,14 +28,14 @@ module Ramaze
|
|
|
28
28
|
theme = get_setting(:theme).value
|
|
29
29
|
theme = Zen::Theme[theme]
|
|
30
30
|
|
|
31
|
-
if !theme.respond_to?(:
|
|
31
|
+
if !theme.respond_to?(:partials) or theme.partials.nil?
|
|
32
32
|
raise(
|
|
33
33
|
::Zen::ThemeError,
|
|
34
34
|
"The theme #{theme.name} has no partial directory set."
|
|
35
35
|
)
|
|
36
36
|
end
|
|
37
37
|
|
|
38
|
-
template = File.join(theme.
|
|
38
|
+
template = File.join(theme.partials, "#{file}.xhtml")
|
|
39
39
|
|
|
40
40
|
if !File.exist?(template)
|
|
41
41
|
raise(::Zen::ThemeError, "The template #{template} doesn't exist.")
|
|
@@ -60,7 +60,7 @@ module Ramaze
|
|
|
60
60
|
#
|
|
61
61
|
def show_404(variables = {})
|
|
62
62
|
theme = ::Zen::Theme[get_setting(:theme).value]
|
|
63
|
-
template = File.join(theme.
|
|
63
|
+
template = File.join(theme.templates, '404.xhtml')
|
|
64
64
|
template = render_file(template, variables)
|
|
65
65
|
|
|
66
66
|
respond(template, 404)
|
data/lib/zen/language.rb
CHANGED
|
@@ -309,21 +309,16 @@ module Zen
|
|
|
309
309
|
end
|
|
310
310
|
|
|
311
311
|
##
|
|
312
|
-
#
|
|
313
|
-
#
|
|
312
|
+
# Returns a string containing the text direction if the current language
|
|
313
|
+
# is an rtl language.
|
|
314
314
|
#
|
|
315
315
|
# @since 14-11-2011
|
|
316
316
|
# @return [String]
|
|
317
317
|
#
|
|
318
|
-
def
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
if curr.rtl == true
|
|
323
|
-
header += ' dir="rtl"'
|
|
318
|
+
def html_text_direction
|
|
319
|
+
if Zen::Language.current.rtl == true
|
|
320
|
+
return 'dir="rtl"'
|
|
324
321
|
end
|
|
325
|
-
|
|
326
|
-
return head + '>'
|
|
327
322
|
end
|
|
328
323
|
end # class << self
|
|
329
324
|
|
|
@@ -23,7 +23,7 @@ module Zen
|
|
|
23
23
|
include Zen::Validation
|
|
24
24
|
|
|
25
25
|
# A regex that specifies the allowed format of language keys.
|
|
26
|
-
KEY_REGEX = /^[
|
|
26
|
+
KEY_REGEX = /^[0-9a-z_\.]+$/
|
|
27
27
|
|
|
28
28
|
# The name of the language this set of translations belongs to.
|
|
29
29
|
attr_reader :language
|
data/lib/zen/layout/admin.xhtml
CHANGED
|
@@ -1,37 +1,53 @@
|
|
|
1
1
|
<!DOCTYPE html>
|
|
2
|
-
#{Zen::Language.
|
|
2
|
+
<html #{Zen::Language.html_text_direction} id="admin" class="#{browser_name}">
|
|
3
3
|
<head>
|
|
4
4
|
#{render_file(__DIR__('../view/head.xhtml'))}
|
|
5
5
|
</head>
|
|
6
6
|
|
|
7
|
-
<body
|
|
8
|
-
|
|
9
|
-
<header class="container">
|
|
10
|
-
<nav id="main_nav" class="grid_12">
|
|
11
|
-
#{Zen::Package.build_menu('left', session[:permissions])}
|
|
7
|
+
<body>
|
|
8
|
+
#{display_messages}
|
|
12
9
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
<a href="/admin/users/edit/#{user.id}">
|
|
21
|
-
#{lang('zen_general.labels.profile')}
|
|
22
|
-
</a>
|
|
23
|
-
</li>
|
|
24
|
-
<li>
|
|
25
|
-
<a href="/">
|
|
26
|
-
#{lang('zen_general.labels.view_website')}
|
|
27
|
-
</a>
|
|
28
|
-
</li>
|
|
29
|
-
</ul>
|
|
30
|
-
</nav>
|
|
10
|
+
<aside id="sidebar" role="complementary">
|
|
11
|
+
<header>
|
|
12
|
+
<h1>
|
|
13
|
+
<a href="/admin">
|
|
14
|
+
#{get_setting(:website_name).value || 'Zen'}
|
|
15
|
+
</a>
|
|
16
|
+
</h1>
|
|
31
17
|
</header>
|
|
18
|
+
|
|
19
|
+
<nav id="user_navigation" role="navigation">
|
|
20
|
+
<ul>
|
|
21
|
+
<li>
|
|
22
|
+
<a href="/">
|
|
23
|
+
#{lang('zen_general.labels.view_website')}
|
|
24
|
+
</a>
|
|
25
|
+
</li>
|
|
26
|
+
<li>
|
|
27
|
+
#{Users::Controller::Users.a(
|
|
28
|
+
lang('zen_general.labels.profile'),
|
|
29
|
+
:edit,
|
|
30
|
+
user.id
|
|
31
|
+
)}
|
|
32
|
+
</li>
|
|
33
|
+
<li>
|
|
34
|
+
#{Users::Controller::Users.a(
|
|
35
|
+
lang('zen_general.labels.logout'),
|
|
36
|
+
:logout
|
|
37
|
+
)}
|
|
38
|
+
</li>
|
|
39
|
+
</ul>
|
|
40
|
+
</nav>
|
|
41
|
+
|
|
42
|
+
<nav id="admin_navigation" role="navigation">
|
|
43
|
+
#{Zen::Package.build_menu(nil, session[:permissions])}
|
|
44
|
+
</nav>
|
|
45
|
+
</aside>
|
|
46
|
+
|
|
47
|
+
<div id="main" role="main">
|
|
48
|
+
#{@content}
|
|
32
49
|
</div>
|
|
33
50
|
|
|
34
|
-
#{render_file(__DIR__('../view/main.xhtml'))}
|
|
35
51
|
#{render_file(__DIR__('../view/bottom.xhtml'))}
|
|
36
52
|
</body>
|
|
37
53
|
</html>
|
data/lib/zen/layout/login.xhtml
CHANGED
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
<!DOCTYPE html>
|
|
2
|
-
#{Zen::Language.
|
|
2
|
+
<html #{Zen::Language.html_text_direction} id="login" class="#{browser_name}">
|
|
3
3
|
<head>
|
|
4
4
|
#{render_file(__DIR__('../view/head.xhtml'))}
|
|
5
5
|
</head>
|
|
6
6
|
|
|
7
|
-
<body
|
|
8
|
-
#{
|
|
7
|
+
<body>
|
|
8
|
+
#{display_messages}
|
|
9
|
+
|
|
10
|
+
<div id="main" role="main">
|
|
11
|
+
#{@content}
|
|
12
|
+
</div>
|
|
13
|
+
|
|
9
14
|
#{render_file(__DIR__('../view/bottom.xhtml'))}
|
|
10
15
|
</body>
|
|
11
16
|
</html>
|
data/lib/zen/migrator.rb
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
module Zen
|
|
2
|
+
##
|
|
3
|
+
# Small wrapper around Sequel::Migrator to fix various issues and make it a
|
|
4
|
+
# bit easier to log data.
|
|
5
|
+
#
|
|
6
|
+
# @since 07-01-2012
|
|
7
|
+
#
|
|
8
|
+
module Migrator
|
|
9
|
+
##
|
|
10
|
+
# Runs a set of migrations and logs the actions.
|
|
11
|
+
#
|
|
12
|
+
# @since 07-01-2012
|
|
13
|
+
# @see Sequel::Migrator.run
|
|
14
|
+
# @param [String] name The name of the package/theme/etc to migrate.
|
|
15
|
+
# @param [String] dir The directory containing the migrations.
|
|
16
|
+
# @param [String] table The name of the table to store the migrations in.
|
|
17
|
+
# @param [NilClass|Fixnum] target The target version to migrate to.
|
|
18
|
+
#
|
|
19
|
+
def self.run(name, dir, table, target = nil)
|
|
20
|
+
# Sequel 3.31.0 changed the way altering tables works, this causes some
|
|
21
|
+
# annoying issues to occur when using foreign keys in SQLite3. This can be
|
|
22
|
+
# fixed by turning off foreign keys while running the migrations.
|
|
23
|
+
#
|
|
24
|
+
# See this pastie for an example of this issue: http://pastie.org/3140474
|
|
25
|
+
if Zen.database.database_type == :sqlite
|
|
26
|
+
Ramaze::Log.debug('Turning off foreign keys for SQLite3')
|
|
27
|
+
Zen.database.execute('PRAGMA foreign_keys = OFF;')
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
Sequel::Migrator.run(
|
|
31
|
+
Zen.database,
|
|
32
|
+
dir,
|
|
33
|
+
:table => table,
|
|
34
|
+
:target => target
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
if target.nil?
|
|
38
|
+
Ramaze::Log.info("Migrated #{name} to the latest version")
|
|
39
|
+
else
|
|
40
|
+
Ramaze::Log.info("Migrated #{name} to version #{target}")
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
if target == 0
|
|
44
|
+
Ramaze::Log.info("Dropping table #{table}")
|
|
45
|
+
Zen.database.drop_table(table)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
if Zen.database.database_type == :sqlite
|
|
49
|
+
Ramaze::Log.debug('Turning foreign keys on again')
|
|
50
|
+
Zen.database.execute('PRAGMA foreign_keys = ON;')
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end # Migrator
|
|
54
|
+
end # Zen
|
data/lib/zen/model/helper.rb
CHANGED
|
@@ -28,6 +28,25 @@ module Zen
|
|
|
28
28
|
into.extend(ClassMethods)
|
|
29
29
|
end
|
|
30
30
|
|
|
31
|
+
##
|
|
32
|
+
# Sanitizes the given fields.
|
|
33
|
+
#
|
|
34
|
+
# @example
|
|
35
|
+
# sanitize_fields([:name, :description])
|
|
36
|
+
#
|
|
37
|
+
# @since 03-01-2012
|
|
38
|
+
# @param [Array] fields An array containing all the fields to sanitize.
|
|
39
|
+
# @param [TrueClass|FalseClass] clean_html When set to true Loofah will be
|
|
40
|
+
# used to get rid of nasty HTML.
|
|
41
|
+
#
|
|
42
|
+
def sanitize_fields(fields, clean_html = false)
|
|
43
|
+
fields.each do |field|
|
|
44
|
+
got = send(field)
|
|
45
|
+
|
|
46
|
+
send("#{field}=", Zen::Security.sanitize(got, clean_html)) unless got.nil?
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
31
50
|
# The methods in this module will be added as class methods to the
|
|
32
51
|
# including class.
|
|
33
52
|
module ClassMethods
|
|
@@ -53,7 +72,7 @@ module Zen
|
|
|
53
72
|
# @return [Hash|Sequel::SQL::BooleanExpression]
|
|
54
73
|
#
|
|
55
74
|
def search_column(column, value)
|
|
56
|
-
if NoRegexpSupport.include?(Zen.database.
|
|
75
|
+
if NoRegexpSupport.include?(Zen.database.database_type)
|
|
57
76
|
return column.like("%#{value}%")
|
|
58
77
|
else
|
|
59
78
|
return {column => /#{value}/i}
|
data/lib/zen/model/init.rb
CHANGED
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
module Sequel
|
|
2
|
+
module Plugins
|
|
3
|
+
##
|
|
4
|
+
# Plugin for Sequel that acts as a bridge between Sequel hooks and events
|
|
5
|
+
# fired by {Zen::Event}. Based on the specified options it creates events
|
|
6
|
+
# for the following Sequel hooks:
|
|
7
|
+
#
|
|
8
|
+
# * before_create
|
|
9
|
+
# * after_create
|
|
10
|
+
# * before_update
|
|
11
|
+
# * after_update
|
|
12
|
+
# * before_destroy
|
|
13
|
+
# * after_destroy
|
|
14
|
+
#
|
|
15
|
+
# For example, to add the Zen event "before_new_post" and have it called by
|
|
16
|
+
# the Sequel hook "before_create" you'd do the following:
|
|
17
|
+
#
|
|
18
|
+
# class Posts < Sequel::Model
|
|
19
|
+
# plugin :events, :before_create => :before_new_post
|
|
20
|
+
# end
|
|
21
|
+
#
|
|
22
|
+
# Each event will receive an instance of the model. This means that you're
|
|
23
|
+
# free to modify the model in your events as long as you take into account
|
|
24
|
+
# that other events might do the same:
|
|
25
|
+
#
|
|
26
|
+
# Zen::Event.listen(:before_new_post) do |post|
|
|
27
|
+
# post.title = 'a'
|
|
28
|
+
# end
|
|
29
|
+
#
|
|
30
|
+
# Events don't have to return the modified object as objects are assigned by
|
|
31
|
+
# reference.
|
|
32
|
+
#
|
|
33
|
+
# @since 05-02-2012
|
|
34
|
+
#
|
|
35
|
+
module Events
|
|
36
|
+
##
|
|
37
|
+
# Configures the plugin for a single model.
|
|
38
|
+
#
|
|
39
|
+
# @since 06-02-2012
|
|
40
|
+
# @param [Class] model The model for which to enable the plugin.
|
|
41
|
+
# @param [Hash] options A hash containing the Sequel hook names and the
|
|
42
|
+
# Zen events to fire.
|
|
43
|
+
# @option options [Symbol] :before_create The name of the event to call in
|
|
44
|
+
# the before_create hook.
|
|
45
|
+
# @option options [Symbol] :after_create The name of the event to call in
|
|
46
|
+
# the after_create hook.
|
|
47
|
+
# @option options [Symbol] :before_update The name of the event to call in
|
|
48
|
+
# the before_update hook.
|
|
49
|
+
# @option options [Symbol] :after_update The name of the event to call in
|
|
50
|
+
# the after_update hook.
|
|
51
|
+
# @option options [Symbol] :before_destroy The name of the event to call
|
|
52
|
+
# in the before_destroy hook.
|
|
53
|
+
# @option options [Symbol] :after_destroy The name of the event to call in
|
|
54
|
+
# the after_destroy hook.
|
|
55
|
+
#
|
|
56
|
+
def self.configure(model, options = {})
|
|
57
|
+
model.events = options
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
##
|
|
61
|
+
# Module containing the methods and attributes to make available on class
|
|
62
|
+
# level.
|
|
63
|
+
#
|
|
64
|
+
# @since 06-02-2012
|
|
65
|
+
#
|
|
66
|
+
module ClassMethods
|
|
67
|
+
# Hash containing all the Sequel hooks and the corresponding Zen events.
|
|
68
|
+
attr_accessor :events
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
##
|
|
72
|
+
# Module containing the methods and attributes to make available on
|
|
73
|
+
# instance leve.
|
|
74
|
+
#
|
|
75
|
+
# @since 06-02-2012
|
|
76
|
+
#
|
|
77
|
+
module InstanceMethods
|
|
78
|
+
##
|
|
79
|
+
# Hook executed before creating a new object.
|
|
80
|
+
#
|
|
81
|
+
# @since 06-02-2012
|
|
82
|
+
#
|
|
83
|
+
def before_create
|
|
84
|
+
if self.class.events and self.class.events.key?(:before_create)
|
|
85
|
+
Zen::Event.call(self.class.events[:before_create], self)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
super
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
##
|
|
92
|
+
# Hook executed after creating a new object.
|
|
93
|
+
#
|
|
94
|
+
# @since 06-02-2012
|
|
95
|
+
#
|
|
96
|
+
def after_create
|
|
97
|
+
super
|
|
98
|
+
|
|
99
|
+
if self.class.events and self.class.events.key?(:after_create)
|
|
100
|
+
Zen::Event.call(self.class.events[:after_create], self)
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
##
|
|
105
|
+
# Hook executed before updating an existing object.
|
|
106
|
+
#
|
|
107
|
+
# @since 06-02-2012
|
|
108
|
+
#
|
|
109
|
+
def before_update
|
|
110
|
+
if self.class.events and self.class.events.key?(:before_update)
|
|
111
|
+
Zen::Event.call(self.class.events[:before_update], self)
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
super
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
##
|
|
118
|
+
# Hook executed after updating an existing object.
|
|
119
|
+
#
|
|
120
|
+
# @since 06-02-2012
|
|
121
|
+
#
|
|
122
|
+
def after_update
|
|
123
|
+
super
|
|
124
|
+
|
|
125
|
+
if self.class.events and self.class.events.key?(:after_update)
|
|
126
|
+
Zen::Event.call(self.class.events[:after_update], self)
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
##
|
|
131
|
+
# Hook executed before removing an existing object.
|
|
132
|
+
#
|
|
133
|
+
# @since 06-02-2012
|
|
134
|
+
#
|
|
135
|
+
def before_destroy
|
|
136
|
+
if self.class.events and self.class.events.key?(:before_destroy)
|
|
137
|
+
Zen::Event.call(self.class.events[:before_destroy], self)
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
super
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
##
|
|
144
|
+
# Hook executed after removing an existing object.
|
|
145
|
+
#
|
|
146
|
+
# @since 06-02-2012
|
|
147
|
+
#
|
|
148
|
+
def after_destroy
|
|
149
|
+
super
|
|
150
|
+
|
|
151
|
+
if self.class.events and self.class.events.key?(:after_destroy)
|
|
152
|
+
Zen::Event.call(self.class.events[:after_destroy], self)
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
end # InstanceMethods
|
|
156
|
+
end # Events
|
|
157
|
+
end # Plugins
|
|
158
|
+
end # Sequel
|