yousty-activeadmin 1.0.0.pre
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.
- checksums.yaml +7 -0
- data/.gitignore +43 -0
- data/.travis.yml +8 -0
- data/.yardopts +9 -0
- data/CHANGELOG.md +1056 -0
- data/CONTRIBUTING.md +110 -0
- data/Gemfile +41 -0
- data/Guardfile +7 -0
- data/LICENSE +25 -0
- data/README.md +67 -0
- data/Rakefile +25 -0
- data/activeadmin.gemspec +33 -0
- data/app/assets/images/active_admin/admin_notes_icon.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-header-bg.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-input-icon.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-next-link-icon.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-nipple.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-prev-link-icon.png +0 -0
- data/app/assets/images/active_admin/index_list_icons/block_icon.svg +10 -0
- data/app/assets/images/active_admin/index_list_icons/blog_icon.svg +4 -0
- data/app/assets/images/active_admin/index_list_icons/grid_icon.svg +13 -0
- data/app/assets/images/active_admin/index_list_icons/table_icon.svg +3 -0
- data/app/assets/images/active_admin/loading.gif +0 -0
- data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
- data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
- data/app/assets/images/active_admin/orderable.png +0 -0
- data/app/assets/javascripts/active_admin/application.js.coffee +6 -0
- data/app/assets/javascripts/active_admin/base.js.coffee +5 -0
- data/app/assets/javascripts/active_admin/components/application.js.coffee +23 -0
- data/app/assets/javascripts/active_admin/components/batch_actions.js.coffee +26 -0
- data/app/assets/javascripts/active_admin/components/has_many.js.coffee +41 -0
- data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +37 -0
- data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +105 -0
- data/app/assets/javascripts/active_admin/lib/popover.js.coffee +97 -0
- data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +25 -0
- data/app/assets/stylesheets/active_admin/_base.css.scss +41 -0
- data/app/assets/stylesheets/active_admin/_forms.css.scss +293 -0
- data/app/assets/stylesheets/active_admin/_header.css.scss +152 -0
- data/app/assets/stylesheets/active_admin/_mixins.css.scss +1 -0
- data/app/assets/stylesheets/active_admin/_typography.css.scss +100 -0
- data/app/assets/stylesheets/active_admin/components/_batch_actions.css.scss +11 -0
- data/app/assets/stylesheets/active_admin/components/_blank_slates.scss +31 -0
- data/app/assets/stylesheets/active_admin/components/_breadcrumbs.scss +20 -0
- data/app/assets/stylesheets/active_admin/components/_buttons.scss +11 -0
- data/app/assets/stylesheets/active_admin/components/_columns.scss +3 -0
- data/app/assets/stylesheets/active_admin/components/_comments.css.scss +41 -0
- data/app/assets/stylesheets/active_admin/components/_date_picker.css.scss +123 -0
- data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +151 -0
- data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +39 -0
- data/app/assets/stylesheets/active_admin/components/_grid.scss +9 -0
- data/app/assets/stylesheets/active_admin/components/_index_list.scss +12 -0
- data/app/assets/stylesheets/active_admin/components/_links.scss +5 -0
- data/app/assets/stylesheets/active_admin/components/_pagination.scss +34 -0
- data/app/assets/stylesheets/active_admin/components/_panels.scss +6 -0
- data/app/assets/stylesheets/active_admin/components/_popovers.css.scss +123 -0
- data/app/assets/stylesheets/active_admin/components/_scopes.scss +10 -0
- data/app/assets/stylesheets/active_admin/components/_status_tags.scss +12 -0
- data/app/assets/stylesheets/active_admin/components/_table_tools.css.scss +95 -0
- data/app/assets/stylesheets/active_admin/components/_tables.css.scss +110 -0
- data/app/assets/stylesheets/active_admin/mixins/_all.css.scss +11 -0
- data/app/assets/stylesheets/active_admin/mixins/_buttons.css.scss +66 -0
- data/app/assets/stylesheets/active_admin/mixins/_gradients.css.scss +38 -0
- data/app/assets/stylesheets/active_admin/mixins/_icons.css.scss +21 -0
- data/app/assets/stylesheets/active_admin/mixins/_reset.css.scss +165 -0
- data/app/assets/stylesheets/active_admin/mixins/_rounded.css.scss +43 -0
- data/app/assets/stylesheets/active_admin/mixins/_sections.css.scss +36 -0
- data/app/assets/stylesheets/active_admin/mixins/_shadows.css.scss +22 -0
- data/app/assets/stylesheets/active_admin/mixins/_typography.scss +3 -0
- data/app/assets/stylesheets/active_admin/mixins/_utilities.scss +26 -0
- data/app/assets/stylesheets/active_admin/mixins/_variables.css.scss +32 -0
- data/app/assets/stylesheets/active_admin/pages/_logged_out.scss +44 -0
- data/app/assets/stylesheets/active_admin/print.css.scss +284 -0
- data/app/assets/stylesheets/active_admin/structure/_footer.scss +14 -0
- data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +29 -0
- data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +43 -0
- data/app/views/active_admin/dashboard/index.html.arb +1 -0
- data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +8 -0
- data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +7 -0
- data/app/views/active_admin/devise/passwords/edit.html.erb +19 -0
- data/app/views/active_admin/devise/passwords/new.html.erb +14 -0
- data/app/views/active_admin/devise/sessions/new.html.erb +20 -0
- data/app/views/active_admin/devise/shared/_links.erb +27 -0
- data/app/views/active_admin/devise/unlocks/new.html.erb +14 -0
- data/app/views/active_admin/page/index.html.arb +1 -0
- data/app/views/active_admin/resource/edit.html.arb +1 -0
- data/app/views/active_admin/resource/index.csv.erb +17 -0
- data/app/views/active_admin/resource/index.html.arb +1 -0
- data/app/views/active_admin/resource/new.html.arb +1 -0
- data/app/views/active_admin/resource/show.html.arb +1 -0
- data/app/views/layouts/active_admin.html.arb +1 -0
- data/app/views/layouts/active_admin_logged_out.html.erb +37 -0
- data/config/locales/bg.yml +101 -0
- data/config/locales/ca.yml +98 -0
- data/config/locales/cs.yml +105 -0
- data/config/locales/da.yml +102 -0
- data/config/locales/de-CH.yml +117 -0
- data/config/locales/de.yml +119 -0
- data/config/locales/en-GB.yml +91 -0
- data/config/locales/en.yml +110 -0
- data/config/locales/es.yml +106 -0
- data/config/locales/es_MX.yml +104 -0
- data/config/locales/fi.yml +109 -0
- data/config/locales/fr.yml +97 -0
- data/config/locales/he.yml +91 -0
- data/config/locales/hr.yml +93 -0
- data/config/locales/hu.yml +92 -0
- data/config/locales/it.yml +89 -0
- data/config/locales/ja.yml +104 -0
- data/config/locales/ko.yml +84 -0
- data/config/locales/lt.yml +90 -0
- data/config/locales/lv.yml +89 -0
- data/config/locales/nl.yml +90 -0
- data/config/locales/no-NB.yml +85 -0
- data/config/locales/pl.yml +93 -0
- data/config/locales/pt-BR.yml +90 -0
- data/config/locales/pt-PT.yml +89 -0
- data/config/locales/ro.yml +93 -0
- data/config/locales/ru.yml +103 -0
- data/config/locales/sv-SE.yml +89 -0
- data/config/locales/tr.yml +90 -0
- data/config/locales/uk.yml +100 -0
- data/config/locales/vi.yml +90 -0
- data/config/locales/zh-CN.yml +90 -0
- data/config/locales/zh-TW.yml +90 -0
- data/cucumber.yml +3 -0
- data/docs/0-installation.md +84 -0
- data/docs/1-general-configuration.md +137 -0
- data/docs/10-custom-pages.md +98 -0
- data/docs/11-decorators.md +66 -0
- data/docs/12-arbre-components.md +144 -0
- data/docs/13-authorization-adapter.md +227 -0
- data/docs/2-resource-customization.md +340 -0
- data/docs/3-index-pages/create-an-index.md +29 -0
- data/docs/3-index-pages/index-as-block.md +21 -0
- data/docs/3-index-pages/index-as-blog.md +71 -0
- data/docs/3-index-pages/index-as-grid.md +29 -0
- data/docs/3-index-pages/index-as-table.md +154 -0
- data/docs/3-index-pages.md +206 -0
- data/docs/4-csv-format.md +39 -0
- data/docs/5-forms.md +110 -0
- data/docs/6-show-pages.md +77 -0
- data/docs/7-sidebars.md +42 -0
- data/docs/8-custom-actions.md +139 -0
- data/docs/9-batch-actions.md +155 -0
- data/features/action_item.feature +73 -0
- data/features/authorization.feature +64 -0
- data/features/authorization_cancan.feature +52 -0
- data/features/belongs_to.feature +63 -0
- data/features/breadcrumb.feature +27 -0
- data/features/comments/commenting.feature +140 -0
- data/features/comments/viewing_index.feature +19 -0
- data/features/dashboard.feature +16 -0
- data/features/decorators.feature +41 -0
- data/features/development_reloading.feature +31 -0
- data/features/edit_page.feature +127 -0
- data/features/favicon.feature +20 -0
- data/features/first_boot.feature +16 -0
- data/features/global_navigation.feature +29 -0
- data/features/i18n.feature +38 -0
- data/features/index/batch_actions.feature +123 -0
- data/features/index/filters.feature +138 -0
- data/features/index/format_as_csv.feature +117 -0
- data/features/index/formats.feature +66 -0
- data/features/index/index_as_block.feature +15 -0
- data/features/index/index_as_blog.feature +69 -0
- data/features/index/index_as_grid.feature +45 -0
- data/features/index/index_as_table.feature +195 -0
- data/features/index/index_blank_slate.feature +61 -0
- data/features/index/index_parameters.feature +75 -0
- data/features/index/index_scope_to.feature +56 -0
- data/features/index/index_scopes.feature +251 -0
- data/features/index/page_title.feature +30 -0
- data/features/index/pagination.feature +59 -0
- data/features/index/switch_index_view.feature +73 -0
- data/features/menu.feature +53 -0
- data/features/new_page.feature +119 -0
- data/features/registering_assets.feature +35 -0
- data/features/registering_pages.feature +148 -0
- data/features/registering_resources.feature +33 -0
- data/features/root_to.feature +17 -0
- data/features/show/default_content.feature +43 -0
- data/features/show/page_title.feature +47 -0
- data/features/sidebar_sections.feature +198 -0
- data/features/site_title.feature +47 -0
- data/features/specifying_actions.feature +93 -0
- data/features/step_definitions/action_item_steps.rb +7 -0
- data/features/step_definitions/action_link_steps.rb +7 -0
- data/features/step_definitions/additional_web_steps.rb +82 -0
- data/features/step_definitions/asset_steps.rb +15 -0
- data/features/step_definitions/attribute_steps.rb +13 -0
- data/features/step_definitions/batch_action_steps.rb +55 -0
- data/features/step_definitions/breadcrumb_steps.rb +3 -0
- data/features/step_definitions/comment_steps.rb +12 -0
- data/features/step_definitions/configuration_steps.rb +100 -0
- data/features/step_definitions/dashboard_steps.rb +15 -0
- data/features/step_definitions/factory_steps.rb +34 -0
- data/features/step_definitions/filter_steps.rb +17 -0
- data/features/step_definitions/flash_steps.rb +11 -0
- data/features/step_definitions/format_steps.rb +45 -0
- data/features/step_definitions/i18n_steps.rb +3 -0
- data/features/step_definitions/index_scope_steps.rb +21 -0
- data/features/step_definitions/index_views_steps.rb +3 -0
- data/features/step_definitions/layout_steps.rb +3 -0
- data/features/step_definitions/member_link_steps.rb +7 -0
- data/features/step_definitions/menu_steps.rb +11 -0
- data/features/step_definitions/pagination_steps.rb +8 -0
- data/features/step_definitions/sidebar_steps.rb +8 -0
- data/features/step_definitions/site_title_steps.rb +15 -0
- data/features/step_definitions/symbol_leak_steps.rb +3 -0
- data/features/step_definitions/tab_steps.rb +3 -0
- data/features/step_definitions/table_steps.rb +119 -0
- data/features/step_definitions/user_steps.rb +39 -0
- data/features/step_definitions/web_steps.rb +86 -0
- data/features/sti_resource.feature +73 -0
- data/features/support/env.rb +112 -0
- data/features/support/paths.rb +71 -0
- data/features/support/selectors.rb +45 -0
- data/features/symbol_leak.feature +35 -0
- data/features/users/logging_in.feature +34 -0
- data/features/users/logging_out.feature +13 -0
- data/features/users/resetting_password.feature +34 -0
- data/lib/active_admin/abstract_view_factory.rb +95 -0
- data/lib/active_admin/application.rb +242 -0
- data/lib/active_admin/asset_registration.rb +29 -0
- data/lib/active_admin/authorization_adapter.rb +132 -0
- data/lib/active_admin/base_controller/authorization.rb +151 -0
- data/lib/active_admin/base_controller/menu.rb +34 -0
- data/lib/active_admin/base_controller.rb +78 -0
- data/lib/active_admin/batch_actions/controller.rb +24 -0
- data/lib/active_admin/batch_actions/resource_extension.rb +127 -0
- data/lib/active_admin/batch_actions/views/batch_action_form.rb +35 -0
- data/lib/active_admin/batch_actions/views/batch_action_popover.rb +28 -0
- data/lib/active_admin/batch_actions/views/batch_action_selector.rb +66 -0
- data/lib/active_admin/batch_actions/views/selection_cells.rb +37 -0
- data/lib/active_admin/batch_actions.rb +17 -0
- data/lib/active_admin/callbacks.rb +87 -0
- data/lib/active_admin/cancan_adapter.rb +40 -0
- data/lib/active_admin/component.rb +5 -0
- data/lib/active_admin/controller_action.rb +12 -0
- data/lib/active_admin/csv_builder.rb +49 -0
- data/lib/active_admin/deprecation.rb +36 -0
- data/lib/active_admin/devise.rb +70 -0
- data/lib/active_admin/dsl.rb +166 -0
- data/lib/active_admin/engine.rb +7 -0
- data/lib/active_admin/event.rb +33 -0
- data/lib/active_admin/filters/dsl.rb +21 -0
- data/lib/active_admin/filters/forms.rb +89 -0
- data/lib/active_admin/filters/formtastic_addons.rb +70 -0
- data/lib/active_admin/filters/resource_extension.rb +136 -0
- data/lib/active_admin/filters.rb +9 -0
- data/lib/active_admin/form_builder.rb +152 -0
- data/lib/active_admin/helpers/collection.rb +23 -0
- data/lib/active_admin/helpers/optional_display.rb +38 -0
- data/lib/active_admin/helpers/scope_chain.rb +23 -0
- data/lib/active_admin/helpers/settings.rb +108 -0
- data/lib/active_admin/iconic/icons.rb +142 -0
- data/lib/active_admin/iconic.rb +51 -0
- data/lib/active_admin/inputs/datepicker_input.rb +20 -0
- data/lib/active_admin/inputs/filter_base/search_method_select.rb +73 -0
- data/lib/active_admin/inputs/filter_base.rb +33 -0
- data/lib/active_admin/inputs/filter_boolean_input.rb +32 -0
- data/lib/active_admin/inputs/filter_check_boxes_input.rb +51 -0
- data/lib/active_admin/inputs/filter_date_range_input.rb +34 -0
- data/lib/active_admin/inputs/filter_numeric_input.rb +10 -0
- data/lib/active_admin/inputs/filter_select_input.rb +61 -0
- data/lib/active_admin/inputs/filter_string_input.rb +24 -0
- data/lib/active_admin/inputs.rb +15 -0
- data/lib/active_admin/menu.rb +107 -0
- data/lib/active_admin/menu_collection.rb +96 -0
- data/lib/active_admin/menu_item.rb +97 -0
- data/lib/active_admin/namespace.rb +224 -0
- data/lib/active_admin/orm/active_record/comments/comment.rb +39 -0
- data/lib/active_admin/orm/active_record/comments/namespace_helper.rb +14 -0
- data/lib/active_admin/orm/active_record/comments/resource_helper.rb +17 -0
- data/lib/active_admin/orm/active_record/comments/show_page_helper.rb +23 -0
- data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +75 -0
- data/lib/active_admin/orm/active_record/comments/views.rb +2 -0
- data/lib/active_admin/orm/active_record/comments.rb +84 -0
- data/lib/active_admin/orm/active_record.rb +3 -0
- data/lib/active_admin/orm/mongoid/.gitkeep +0 -0
- data/lib/active_admin/orm/mongoid.rb +1 -0
- data/lib/active_admin/page.rb +88 -0
- data/lib/active_admin/page_controller.rb +29 -0
- data/lib/active_admin/page_dsl.rb +28 -0
- data/lib/active_admin/page_presenter.rb +32 -0
- data/lib/active_admin/resource/action_items.rb +91 -0
- data/lib/active_admin/resource/belongs_to.rb +36 -0
- data/lib/active_admin/resource/controllers.rb +18 -0
- data/lib/active_admin/resource/menu.rb +64 -0
- data/lib/active_admin/resource/naming.rb +84 -0
- data/lib/active_admin/resource/page_presenters.rb +82 -0
- data/lib/active_admin/resource/pagination.rb +19 -0
- data/lib/active_admin/resource/routes.rb +99 -0
- data/lib/active_admin/resource/scope_to.rb +74 -0
- data/lib/active_admin/resource/scopes.rb +50 -0
- data/lib/active_admin/resource/sidebars.rb +27 -0
- data/lib/active_admin/resource.rb +153 -0
- data/lib/active_admin/resource_collection.rb +42 -0
- data/lib/active_admin/resource_controller/action_builder.rb +21 -0
- data/lib/active_admin/resource_controller/data_access.rb +298 -0
- data/lib/active_admin/resource_controller/decorators.rb +20 -0
- data/lib/active_admin/resource_controller/resource_class_methods.rb +24 -0
- data/lib/active_admin/resource_controller/scoping.rb +31 -0
- data/lib/active_admin/resource_controller/sidebars.rb +18 -0
- data/lib/active_admin/resource_controller.rb +50 -0
- data/lib/active_admin/resource_dsl.rb +134 -0
- data/lib/active_admin/router.rb +106 -0
- data/lib/active_admin/scope.rb +57 -0
- data/lib/active_admin/sidebar_section.rb +37 -0
- data/lib/active_admin/version.rb +3 -0
- data/lib/active_admin/view_factory.rb +27 -0
- data/lib/active_admin/view_helpers/active_admin_application_helper.rb +12 -0
- data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +7 -0
- data/lib/active_admin/view_helpers/auto_link_helper.rb +34 -0
- data/lib/active_admin/view_helpers/breadcrumb_helper.rb +26 -0
- data/lib/active_admin/view_helpers/display_helper.rb +49 -0
- data/lib/active_admin/view_helpers/download_format_links_helper.rb +49 -0
- data/lib/active_admin/view_helpers/fields_for.rb +50 -0
- data/lib/active_admin/view_helpers/flash_helper.rb +13 -0
- data/lib/active_admin/view_helpers/form_helper.rb +24 -0
- data/lib/active_admin/view_helpers/icon_helper.rb +12 -0
- data/lib/active_admin/view_helpers/method_or_proc_helper.rb +93 -0
- data/lib/active_admin/view_helpers/sidebar_helper.rb +15 -0
- data/lib/active_admin/view_helpers/title_helper.rb +11 -0
- data/lib/active_admin/view_helpers/view_factory_helper.rb +11 -0
- data/lib/active_admin/view_helpers.rb +21 -0
- data/lib/active_admin/views/action_items.rb +17 -0
- data/lib/active_admin/views/components/action_list_popover.rb +29 -0
- data/lib/active_admin/views/components/attributes_table.rb +103 -0
- data/lib/active_admin/views/components/blank_slate.rb +17 -0
- data/lib/active_admin/views/components/columns.rb +150 -0
- data/lib/active_admin/views/components/dropdown_menu.rb +73 -0
- data/lib/active_admin/views/components/index_list.rb +68 -0
- data/lib/active_admin/views/components/paginated_collection.rb +125 -0
- data/lib/active_admin/views/components/panel.rb +34 -0
- data/lib/active_admin/views/components/popover.rb +27 -0
- data/lib/active_admin/views/components/scopes.rb +66 -0
- data/lib/active_admin/views/components/sidebar_section.rb +28 -0
- data/lib/active_admin/views/components/site_title.rb +55 -0
- data/lib/active_admin/views/components/status_tag.rb +56 -0
- data/lib/active_admin/views/components/table_for.rb +191 -0
- data/lib/active_admin/views/footer.rb +20 -0
- data/lib/active_admin/views/header.rb +32 -0
- data/lib/active_admin/views/index_as_block.rb +36 -0
- data/lib/active_admin/views/index_as_blog.rb +156 -0
- data/lib/active_admin/views/index_as_grid.rb +80 -0
- data/lib/active_admin/views/index_as_table.rb +264 -0
- data/lib/active_admin/views/pages/base.rb +139 -0
- data/lib/active_admin/views/pages/form.rb +51 -0
- data/lib/active_admin/views/pages/index.rb +147 -0
- data/lib/active_admin/views/pages/layout.rb +26 -0
- data/lib/active_admin/views/pages/page.rb +30 -0
- data/lib/active_admin/views/pages/show.rb +59 -0
- data/lib/active_admin/views/tabbed_navigation.rb +62 -0
- data/lib/active_admin/views/title_bar.rb +53 -0
- data/lib/active_admin/views.rb +8 -0
- data/lib/active_admin.rb +125 -0
- data/lib/activeadmin.rb +1 -0
- data/lib/generators/active_admin/assets/assets_generator.rb +16 -0
- data/lib/generators/active_admin/assets/templates/active_admin.css.scss +17 -0
- data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +1 -0
- data/lib/generators/active_admin/devise/devise_generator.rb +86 -0
- data/lib/generators/active_admin/install/install_generator.rb +46 -0
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +235 -0
- data/lib/generators/active_admin/install/templates/admin_user.rb.erb +27 -0
- data/lib/generators/active_admin/install/templates/dashboard.rb +33 -0
- data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb +19 -0
- data/lib/generators/active_admin/resource/resource_generator.rb +16 -0
- data/lib/generators/active_admin/resource/templates/admin.rb +3 -0
- data/lib/ransack_ext.rb +12 -0
- data/script/local +44 -0
- data/script/use_rails +53 -0
- data/spec/integration/default_namespace_spec.rb +61 -0
- data/spec/integration/javascript_spec.rb +20 -0
- data/spec/integration/memory_spec.rb +29 -0
- data/spec/integration/stylesheets_spec.rb +41 -0
- data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +50 -0
- data/spec/javascripts/coffeescripts/jquery.aa.popover-spec.js.coffee +82 -0
- data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +34 -0
- data/spec/javascripts/compiled/jquery.aa.checkbox-toggler-spec.js +60 -0
- data/spec/javascripts/compiled/jquery.aa.popover-spec.js +106 -0
- data/spec/javascripts/compiled/jquery.aa.table-checkbox-toggler-spec.js +37 -0
- data/spec/javascripts/fixtures/checkboxes.html +9 -0
- data/spec/javascripts/fixtures/table_checkboxes.html +17 -0
- data/spec/javascripts/helpers/SpecHelper.js +3 -0
- data/spec/javascripts/helpers/vendor/jasmine-fixture-0.0.5.js +108 -0
- data/spec/javascripts/helpers/vendor/jasmine-jquery.js +288 -0
- data/spec/javascripts/helpers/vendor/sinon-1.2.0.js +2915 -0
- data/spec/javascripts/support/jasmine.yml +74 -0
- data/spec/javascripts/support/jasmine_config.rb +23 -0
- data/spec/javascripts/support/jasmine_runner.rb +32 -0
- data/spec/javascripts/support/jquery-ui-1.8.16.custom.min.js +34 -0
- data/spec/javascripts/support/jquery.min.js +4 -0
- data/spec/spec_helper.rb +175 -0
- data/spec/spec_helper_without_rails.rb +16 -0
- data/spec/support/deferred_garbage_collection.rb +19 -0
- data/spec/support/detect_rails_version.rb +42 -0
- data/spec/support/integration_example_group.rb +31 -0
- data/spec/support/jslint.yml +80 -0
- data/spec/support/rails_template.rb +111 -0
- data/spec/support/rails_template_with_data.rb +59 -0
- data/spec/support/templates/admin/stores.rb +11 -0
- data/spec/support/templates/cucumber.rb +24 -0
- data/spec/support/templates/cucumber_with_reloading.rb +5 -0
- data/spec/support/templates/en.yml +8 -0
- data/spec/support/templates/post_decorator.rb +53 -0
- data/spec/unit/abstract_view_factory_spec.rb +79 -0
- data/spec/unit/action_builder_spec.rb +126 -0
- data/spec/unit/active_admin_spec.rb +11 -0
- data/spec/unit/application_spec.rb +141 -0
- data/spec/unit/asset_registration_spec.rb +52 -0
- data/spec/unit/authorization/authorization_adapter_spec.rb +61 -0
- data/spec/unit/authorization/controller_authorization_spec.rb +39 -0
- data/spec/unit/auto_link_spec.rb +32 -0
- data/spec/unit/batch_actions/resource_spec.rb +91 -0
- data/spec/unit/batch_actions/settings_spec.rb +61 -0
- data/spec/unit/belongs_to_spec.rb +42 -0
- data/spec/unit/cancan_adapter_spec.rb +43 -0
- data/spec/unit/comments_spec.rb +106 -0
- data/spec/unit/component_spec.rb +18 -0
- data/spec/unit/config_shared_examples.rb +59 -0
- data/spec/unit/controller_filters_spec.rb +32 -0
- data/spec/unit/csv_builder_spec.rb +103 -0
- data/spec/unit/devise_spec.rb +116 -0
- data/spec/unit/dsl_spec.rb +61 -0
- data/spec/unit/event_spec.rb +47 -0
- data/spec/unit/filters/filter_form_builder_spec.rb +423 -0
- data/spec/unit/filters/resource_spec.rb +119 -0
- data/spec/unit/form_builder_spec.rb +514 -0
- data/spec/unit/generators/install_spec.rb +23 -0
- data/spec/unit/helpers/collection_spec.rb +65 -0
- data/spec/unit/helpers/scope_chain_spec.rb +36 -0
- data/spec/unit/helpers/settings_spec.rb +30 -0
- data/spec/unit/menu_collection_spec.rb +62 -0
- data/spec/unit/menu_item_spec.rb +143 -0
- data/spec/unit/menu_spec.rb +71 -0
- data/spec/unit/namespace/authorization_spec.rb +27 -0
- data/spec/unit/namespace/register_page_spec.rb +74 -0
- data/spec/unit/namespace/register_resource_spec.rb +163 -0
- data/spec/unit/namespace_spec.rb +103 -0
- data/spec/unit/page_controller_spec.rb +5 -0
- data/spec/unit/page_spec.rb +72 -0
- data/spec/unit/pretty_format_spec.rb +35 -0
- data/spec/unit/resource/action_items_spec.rb +62 -0
- data/spec/unit/resource/menu_spec.rb +18 -0
- data/spec/unit/resource/naming_spec.rb +122 -0
- data/spec/unit/resource/page_presenters_spec.rb +44 -0
- data/spec/unit/resource/pagination_spec.rb +38 -0
- data/spec/unit/resource/routes_spec.rb +73 -0
- data/spec/unit/resource/scopes_spec.rb +43 -0
- data/spec/unit/resource/sidebars_spec.rb +43 -0
- data/spec/unit/resource_collection_spec.rb +160 -0
- data/spec/unit/resource_controller/data_access_spec.rb +73 -0
- data/spec/unit/resource_controller/sidebars_spec.rb +46 -0
- data/spec/unit/resource_controller_spec.rb +265 -0
- data/spec/unit/resource_registration_spec.rb +56 -0
- data/spec/unit/resource_spec.rb +243 -0
- data/spec/unit/routing_spec.rb +172 -0
- data/spec/unit/scope_spec.rb +108 -0
- data/spec/unit/settings_spec.rb +88 -0
- data/spec/unit/view_factory_spec.rb +21 -0
- data/spec/unit/view_helpers/breadcrumbs_spec.rb +149 -0
- data/spec/unit/view_helpers/display_name_spec.rb +41 -0
- data/spec/unit/view_helpers/download_format_links_helper_spec.rb +39 -0
- data/spec/unit/view_helpers/fields_for_spec.rb +50 -0
- data/spec/unit/view_helpers/form_helper_spec.rb +56 -0
- data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +101 -0
- data/spec/unit/views/components/action_list_popover_spec.rb +30 -0
- data/spec/unit/views/components/attributes_table_spec.rb +230 -0
- data/spec/unit/views/components/batch_action_popover_spec.rb +33 -0
- data/spec/unit/views/components/blank_slate_spec.rb +17 -0
- data/spec/unit/views/components/columns_spec.rb +142 -0
- data/spec/unit/views/components/index_list_spec.rb +32 -0
- data/spec/unit/views/components/paginated_collection_spec.rb +227 -0
- data/spec/unit/views/components/panel_spec.rb +51 -0
- data/spec/unit/views/components/popover_spec.rb +33 -0
- data/spec/unit/views/components/sidebar_section_spec.rb +37 -0
- data/spec/unit/views/components/site_title_spec.rb +78 -0
- data/spec/unit/views/components/status_tag_spec.rb +95 -0
- data/spec/unit/views/components/table_for_spec.rb +201 -0
- data/spec/unit/views/pages/form_spec.rb +35 -0
- data/spec/unit/views/pages/layout_spec.rb +63 -0
- data/spec/unit/views/pages/show_spec.rb +20 -0
- data/spec/unit/views/tabbed_navigation_spec.rb +149 -0
- data/tasks/docs.rake +37 -0
- data/tasks/js.rake +32 -0
- data/tasks/parallel_tests.rake +60 -0
- data/tasks/test.rake +79 -0
- data/tasks/yard.rake +7 -0
- metadata +896 -0
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
# Custom Controller Actions
|
|
2
|
+
|
|
3
|
+
Active Admin allows you to override and modify the underlying controller which
|
|
4
|
+
is generated for you. There are helpers to add collection and member actions, or
|
|
5
|
+
you can drop right in to the controller and modify its behavior.
|
|
6
|
+
|
|
7
|
+
## Collection Actions
|
|
8
|
+
|
|
9
|
+
A collection action is a controller action which operates on the collection of
|
|
10
|
+
resources. This method adds both the action to the controller as well as
|
|
11
|
+
generating a route for you.
|
|
12
|
+
|
|
13
|
+
To add a collection action, use the collection_action method:
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
ActiveAdmin.register Post do
|
|
17
|
+
|
|
18
|
+
collection_action :import_csv, :method => :post do
|
|
19
|
+
# Do some CSV importing work here...
|
|
20
|
+
redirect_to {:action => :index}, {:notice => "CSV imported successfully!"}
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
This collection action will generate a route at "/admin/posts/import_csv"
|
|
26
|
+
pointing to the Admin::PostsController#import_csv controller action.
|
|
27
|
+
|
|
28
|
+
## Member Actions
|
|
29
|
+
|
|
30
|
+
A member action is a controller action which operates on a single resource.
|
|
31
|
+
|
|
32
|
+
For example, to add a lock action to a user resource, you would do the
|
|
33
|
+
following:
|
|
34
|
+
|
|
35
|
+
ActiveAdmin.register User do
|
|
36
|
+
|
|
37
|
+
member_action :lock, :method => :put do
|
|
38
|
+
user = User.find(params[:id])
|
|
39
|
+
user.lock!
|
|
40
|
+
redirect_to {:action => :show}, {:notice => "Locked!"}
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
This will generate a route at "/admin/users/:id/lock" pointing to the
|
|
46
|
+
Admin::UserController#lock controller action.
|
|
47
|
+
|
|
48
|
+
## Controller Action HTTP Verb
|
|
49
|
+
|
|
50
|
+
The collection_action and member_actions methods both accept the "method"
|
|
51
|
+
argument to set the HTTP verb for the controller action and route.
|
|
52
|
+
|
|
53
|
+
The generated routes will be scoped to the given method you pass in. By default
|
|
54
|
+
your action will use the :get verb.
|
|
55
|
+
|
|
56
|
+
## Rendering in Custom Actions
|
|
57
|
+
|
|
58
|
+
Custom controller actions support rendering within the standard Active Admin
|
|
59
|
+
layout.
|
|
60
|
+
|
|
61
|
+
ActiveAdmin.register Post do
|
|
62
|
+
|
|
63
|
+
# /admin/posts/:id/comments
|
|
64
|
+
member_action :comments do
|
|
65
|
+
@post = Post.find(params[:id])
|
|
66
|
+
|
|
67
|
+
# This will render app/views/admin/posts/comments.html.erb
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
If you would like to use the same view syntax as the rest of Active Admin, you
|
|
73
|
+
can use the Arbre file extension: .arb.
|
|
74
|
+
|
|
75
|
+
For example, create app/views/admin/posts/comments.html.arb with:
|
|
76
|
+
|
|
77
|
+
table_for assigns[:post].comments do
|
|
78
|
+
column :id
|
|
79
|
+
column :author
|
|
80
|
+
column :body do |comment|
|
|
81
|
+
simple_format comment.body
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
### Custom Action Items
|
|
86
|
+
|
|
87
|
+
To include your own action items (like the New, Edit and Delete buttons), add an
|
|
88
|
+
`action_item` block. For example, to add a "View on site" button to view a blog
|
|
89
|
+
post:
|
|
90
|
+
|
|
91
|
+
action_item :only => :show do
|
|
92
|
+
link_to('View on site', post_path(post)) if post.published?
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
Actions items also accept the :if option to conditionally display them:
|
|
96
|
+
|
|
97
|
+
action_item :only => :show, :if => proc{ current_admin_user.super_admin? } do
|
|
98
|
+
"Only display this to super admins on the show screen"
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
### Page Titles
|
|
102
|
+
|
|
103
|
+
The page title for the custom action will be the internationalized version of
|
|
104
|
+
the controller action name. For example, a member_action named "upload_csv" will
|
|
105
|
+
look up a translation key of "active_admin.upload_csv". If none are found, it
|
|
106
|
+
just title cases the controller action's name.
|
|
107
|
+
|
|
108
|
+
If this method doesn't work for your requirements, you can always set the
|
|
109
|
+
@page_title instance variable in your controller action to customize the page
|
|
110
|
+
title.
|
|
111
|
+
|
|
112
|
+
ActiveAdmin.register Post do
|
|
113
|
+
|
|
114
|
+
# /admin/posts/:id/comments
|
|
115
|
+
member_action :comments do
|
|
116
|
+
@post = Post.find(params[:id])
|
|
117
|
+
@page_title = "#{@post.title}: Comments" # Set the page title
|
|
118
|
+
|
|
119
|
+
# This will render app/views/admin/posts/comments.html.erb
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
## Modify the Controller
|
|
125
|
+
|
|
126
|
+
The generated controller is available to you within the registration block by
|
|
127
|
+
using the #controller method.
|
|
128
|
+
|
|
129
|
+
ActiveAdmin.register Post do
|
|
130
|
+
|
|
131
|
+
controller do
|
|
132
|
+
# This code is evaluated within the controller class
|
|
133
|
+
|
|
134
|
+
def define_a_method
|
|
135
|
+
# Instance method
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
end
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
# Index Batch Actions
|
|
2
|
+
|
|
3
|
+
By default, the index view includes a way to quickly delete records from the listing,
|
|
4
|
+
as well as an API for you to easily create your own "Batch Action" for handling a request to operate
|
|
5
|
+
on multiple records at once. If you override the default index, `selectable_column` must be used as the first column to enable batch actions:
|
|
6
|
+
|
|
7
|
+
index do
|
|
8
|
+
selectable_column
|
|
9
|
+
# add other columns here...
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
## Provided Batch Action
|
|
13
|
+
|
|
14
|
+
The `batch_action` API provides one default batch action for use in your application immediately, for deleting
|
|
15
|
+
multiple records at once. You are able to disable this action if you desire (see below).
|
|
16
|
+
|
|
17
|
+
## Creating Your Own Batch Actions
|
|
18
|
+
|
|
19
|
+
To create your own batch action, use the `batch_action` method. You are provided an array of record IDs
|
|
20
|
+
to operate on. The array should contain at least one ID.
|
|
21
|
+
|
|
22
|
+
ActiveAdmin.register Post do
|
|
23
|
+
batch_action :flag do |selection|
|
|
24
|
+
Post.find(selection).each do |post|
|
|
25
|
+
post.flag! :hot
|
|
26
|
+
end
|
|
27
|
+
redirect_to collection_path, :alert => "The posts have been flagged."
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
### Disabling Batch Actions
|
|
32
|
+
|
|
33
|
+
You can disable batch actions at the application or namespace level in
|
|
34
|
+
`config/initializers/active_admin.rb`:
|
|
35
|
+
|
|
36
|
+
ActiveAdmin.setup do |config|
|
|
37
|
+
|
|
38
|
+
# Disable all batch actions
|
|
39
|
+
config.batch_actions = false
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
# Or disable for a given namespace
|
|
43
|
+
config.namespace :admin do |admin|
|
|
44
|
+
admin.batch_actions = false
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
You can disable batch actions on any given resource using:
|
|
49
|
+
|
|
50
|
+
ActiveAdmin.register Post do
|
|
51
|
+
config.batch_actions = false
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
### Modifying a Previously Registered Batch Action
|
|
56
|
+
|
|
57
|
+
If you wanted to modify the behavior of the provided "Delete" batch action, you can override by:
|
|
58
|
+
|
|
59
|
+
ActiveAdmin.register Post do
|
|
60
|
+
batch_action :destroy, :if => proc { can?( :destroy, Post ) } do |selection|
|
|
61
|
+
redirect_to collection_path, :alert => "Didn't really delete these!"
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
### Removing a Batch Action
|
|
66
|
+
|
|
67
|
+
You can also remove batch actions by simply passing false as the second parameter:
|
|
68
|
+
|
|
69
|
+
ActiveAdmin.register Post do
|
|
70
|
+
batch_action :destroy, false
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
### Conditional Display of Batch Action
|
|
74
|
+
|
|
75
|
+
You can control whether or not the batch action is available via the `:if` option. Provide a boolean or a proc, which is executed in context of the view.
|
|
76
|
+
|
|
77
|
+
ActiveAdmin.register Post do
|
|
78
|
+
batch_action :flag, :if => proc { false } do |selection|
|
|
79
|
+
# This action won't ever be displayed
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
### Batch Action Priority in Menu
|
|
84
|
+
|
|
85
|
+
You can also change the order of batch actions, by providing a value for the :priority param:
|
|
86
|
+
|
|
87
|
+
ActiveAdmin.register Post do
|
|
88
|
+
batch_action :destroy, :priority => 1 do |selection|
|
|
89
|
+
# Do some deleting in here...
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
### Batch Action I18n of Labels
|
|
94
|
+
|
|
95
|
+
By default, the name of the batch action will be used to lookup a label for the
|
|
96
|
+
menu. It will lookup in `active_admin.batch_actions.labels.#{your_batch_action_name}`. For
|
|
97
|
+
example:
|
|
98
|
+
|
|
99
|
+
ActiveAdmin.register Post do
|
|
100
|
+
batch_action :publish do |selection|
|
|
101
|
+
# do some publishing...
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
Can be translated with:
|
|
106
|
+
|
|
107
|
+
# config/locales/en.yml
|
|
108
|
+
en:
|
|
109
|
+
active_admin:
|
|
110
|
+
batch_actions:
|
|
111
|
+
labels:
|
|
112
|
+
publish: "Publish"
|
|
113
|
+
|
|
114
|
+
### Batch Action Confirmation
|
|
115
|
+
|
|
116
|
+
You can also request that the user confirm the action, before the action is performed:
|
|
117
|
+
|
|
118
|
+
ActiveAdmin.register Post do
|
|
119
|
+
batch_action :destroy, :confirm => "Are you sure you want to delete all of these?" do |selection|
|
|
120
|
+
# Do some deleting...
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
### Support for Other Index Types
|
|
125
|
+
|
|
126
|
+
You can easily use `batch_action` in the other index views, *Grid*, *Block*, and *Blog*; however, these views will require more custom styling to fit your application needs.
|
|
127
|
+
|
|
128
|
+
ActiveAdmin.register Post do
|
|
129
|
+
|
|
130
|
+
# By default, the "Delete" batch action is provided
|
|
131
|
+
|
|
132
|
+
# Index as Grid
|
|
133
|
+
index as: :grid do |post|
|
|
134
|
+
resource_selection_cell post
|
|
135
|
+
h2 auto_link( post )
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
# Index as Blog requires nothing special
|
|
139
|
+
|
|
140
|
+
# Index as Block
|
|
141
|
+
index as: :block do |post|
|
|
142
|
+
div for: post do
|
|
143
|
+
resource_selection_cell post
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
### Batch Actions and Custom Actions
|
|
150
|
+
|
|
151
|
+
In order to perform the batch action, the entire *Table*, *Grid*, etc. is wrapped in a form that submits the id's of the selected rows to your batch_action.
|
|
152
|
+
|
|
153
|
+
Since nested `<form>` tags in HTML often results in unexpected behavior, you may need to modify custom actions or forms you are using on your page with batch actions enabled.
|
|
154
|
+
|
|
155
|
+
Specifically, if you are using HTTP methods like `PUT` or `PATCH` with a custom form on your index page this may result in your batch action being `PUT`ed instead of `POST`ed which in turn will create a routing error. You can get around this by either moving the nested form to another page (ie. the Object's show page) or, if possible, changing the method of the custom action to `POST` so that it doesn't override the batch action. Remember, behavior may vary by browser.
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
Feature: Action Item
|
|
2
|
+
|
|
3
|
+
Creating and Configuring action items
|
|
4
|
+
|
|
5
|
+
Background:
|
|
6
|
+
Given I am logged in
|
|
7
|
+
And a post with the title "Hello World" exists
|
|
8
|
+
|
|
9
|
+
Scenario: Create an member action
|
|
10
|
+
Given a configuration of:
|
|
11
|
+
"""
|
|
12
|
+
ActiveAdmin.register Post do
|
|
13
|
+
action_item do
|
|
14
|
+
link_to "Embiggen", '/'
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
"""
|
|
18
|
+
When I am on the index page for posts
|
|
19
|
+
Then I should not see a member link to "Embiggen"
|
|
20
|
+
|
|
21
|
+
When I follow "View"
|
|
22
|
+
Then I should see an action item link to "Embiggen"
|
|
23
|
+
|
|
24
|
+
When I follow "Edit Post"
|
|
25
|
+
Then I should see an action item link to "Embiggen"
|
|
26
|
+
|
|
27
|
+
When I am on the index page for posts
|
|
28
|
+
When I follow "New Post"
|
|
29
|
+
Then I should see an action item link to "Embiggen"
|
|
30
|
+
|
|
31
|
+
Scenario: Create an member action with if clause that returns true
|
|
32
|
+
Given a configuration of:
|
|
33
|
+
"""
|
|
34
|
+
ActiveAdmin.register Post do
|
|
35
|
+
action_item :if => proc{ !current_active_admin_user.nil? } do
|
|
36
|
+
link_to "Embiggen", '/'
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
"""
|
|
40
|
+
When I am on the index page for posts
|
|
41
|
+
Then I should not see a member link to "Embiggen"
|
|
42
|
+
|
|
43
|
+
When I follow "View"
|
|
44
|
+
Then I should see an action item link to "Embiggen"
|
|
45
|
+
|
|
46
|
+
When I follow "Edit Post"
|
|
47
|
+
Then I should see an action item link to "Embiggen"
|
|
48
|
+
|
|
49
|
+
When I am on the index page for posts
|
|
50
|
+
When I follow "New Post"
|
|
51
|
+
Then I should see an action item link to "Embiggen"
|
|
52
|
+
|
|
53
|
+
Scenario: Create an member action with if clause that returns false
|
|
54
|
+
Given a configuration of:
|
|
55
|
+
"""
|
|
56
|
+
ActiveAdmin.register Post do
|
|
57
|
+
action_item :if => proc{ current_active_admin_user.nil? } do
|
|
58
|
+
link_to "Embiggen", '/'
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
"""
|
|
62
|
+
When I am on the index page for posts
|
|
63
|
+
Then I should not see a member link to "Embiggen"
|
|
64
|
+
|
|
65
|
+
When I follow "View"
|
|
66
|
+
Then I should not see an action item link to "Embiggen"
|
|
67
|
+
|
|
68
|
+
When I follow "Edit Post"
|
|
69
|
+
Then I should not see an action item link to "Embiggen"
|
|
70
|
+
|
|
71
|
+
When I am on the index page for posts
|
|
72
|
+
When I follow "New Post"
|
|
73
|
+
Then I should not see an action item link to "Embiggen"
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
Feature: Authorizing Access
|
|
2
|
+
|
|
3
|
+
Ensure that access denied exceptions are managed
|
|
4
|
+
|
|
5
|
+
Background:
|
|
6
|
+
Given I am logged in
|
|
7
|
+
And 1 post exists
|
|
8
|
+
And a configuration of:
|
|
9
|
+
"""
|
|
10
|
+
class OnlyAuthorsAuthorization < ActiveAdmin::AuthorizationAdapter
|
|
11
|
+
|
|
12
|
+
def authorized?(action, subject = nil)
|
|
13
|
+
case subject
|
|
14
|
+
|
|
15
|
+
when normalized(Post)
|
|
16
|
+
case action
|
|
17
|
+
when ActiveAdmin::Auth::UPDATE, ActiveAdmin::Auth::DESTROY
|
|
18
|
+
false
|
|
19
|
+
else
|
|
20
|
+
true
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
when ActiveAdmin::Page
|
|
24
|
+
if subject.name == "No Access"
|
|
25
|
+
false
|
|
26
|
+
else
|
|
27
|
+
true
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
else
|
|
31
|
+
false
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
ActiveAdmin.application.namespace(:admin).authorization_adapter = OnlyAuthorsAuthorization
|
|
38
|
+
|
|
39
|
+
ActiveAdmin.register Post do
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
ActiveAdmin.register_page "No Access" do
|
|
43
|
+
end
|
|
44
|
+
"""
|
|
45
|
+
And I am on the index page for posts
|
|
46
|
+
|
|
47
|
+
@allow-rescue
|
|
48
|
+
Scenario: Attempt to access a resource I am not authorized to see
|
|
49
|
+
When I go to the last post's edit page
|
|
50
|
+
Then I should see "You are not authorized to perform this action"
|
|
51
|
+
|
|
52
|
+
Scenario: Viewing the default action items
|
|
53
|
+
When I follow "View"
|
|
54
|
+
Then I should not see an action item link to "Edit"
|
|
55
|
+
|
|
56
|
+
@allow-rescue
|
|
57
|
+
Scenario: Attempting to visit a Page without authorization
|
|
58
|
+
When I go to the admin no access page
|
|
59
|
+
Then I should see "You are not authorized to perform this action"
|
|
60
|
+
|
|
61
|
+
@allow-rescue
|
|
62
|
+
Scenario: Viewing a page with authorization
|
|
63
|
+
When I go to the admin dashboard page
|
|
64
|
+
Then I should see "Dashboard"
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
Feature: Authorizing Access using CanCan
|
|
2
|
+
|
|
3
|
+
Background:
|
|
4
|
+
Given I am logged in
|
|
5
|
+
And 1 post exists
|
|
6
|
+
And a configuration of:
|
|
7
|
+
"""
|
|
8
|
+
require 'cancan'
|
|
9
|
+
|
|
10
|
+
class ::Ability
|
|
11
|
+
include ::CanCan::Ability
|
|
12
|
+
|
|
13
|
+
def initialize(user)
|
|
14
|
+
# Manage Posts
|
|
15
|
+
can [:edit, :destroy], Post, :author_id => user.id
|
|
16
|
+
can :read, Post
|
|
17
|
+
|
|
18
|
+
# View Pages
|
|
19
|
+
can :read, ActiveAdmin::Page, :name => "Dashboard"
|
|
20
|
+
cannot :read, ActiveAdmin::Page, :name => "No Access"
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
ActiveAdmin.application.namespace(:admin).authorization_adapter = ActiveAdmin::CanCanAdapter
|
|
26
|
+
|
|
27
|
+
ActiveAdmin.register Post do
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
ActiveAdmin.register_page "No Access" do
|
|
31
|
+
end
|
|
32
|
+
"""
|
|
33
|
+
And I am on the index page for posts
|
|
34
|
+
|
|
35
|
+
@allow-rescue
|
|
36
|
+
Scenario: Attempt to access a resource I am not authorized to see
|
|
37
|
+
When I go to the last post's edit page
|
|
38
|
+
Then I should see "You are not authorized to perform this action"
|
|
39
|
+
|
|
40
|
+
Scenario: Viewing the default action items
|
|
41
|
+
When I follow "View"
|
|
42
|
+
Then I should not see an action item link to "Edit"
|
|
43
|
+
|
|
44
|
+
@allow-rescue
|
|
45
|
+
Scenario: Attempting to visit a Page without authorization
|
|
46
|
+
When I go to the admin no access page
|
|
47
|
+
Then I should see "You are not authorized to perform this action"
|
|
48
|
+
|
|
49
|
+
@allow-rescue
|
|
50
|
+
Scenario: Viewing a page with authorization
|
|
51
|
+
When I go to the admin dashboard page
|
|
52
|
+
Then I should see "Dashboard"
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
Feature: Belongs To
|
|
2
|
+
|
|
3
|
+
A resource belongs to another resource
|
|
4
|
+
|
|
5
|
+
Background:
|
|
6
|
+
Given I am logged in
|
|
7
|
+
And a post with the title "Hello World" written by "John Doe" exists
|
|
8
|
+
And a post with the title "Hello World" written by "Jane Doe" exists
|
|
9
|
+
|
|
10
|
+
Scenario: Viewing the child resource index page
|
|
11
|
+
Given a configuration of:
|
|
12
|
+
"""
|
|
13
|
+
ActiveAdmin.register User
|
|
14
|
+
ActiveAdmin.register Post do
|
|
15
|
+
belongs_to :user
|
|
16
|
+
end
|
|
17
|
+
"""
|
|
18
|
+
When I go to the last author's posts
|
|
19
|
+
Then the "Posts" tab should be selected
|
|
20
|
+
And I should not see a menu item for "Users"
|
|
21
|
+
And I should see "Displaying 1 Post"
|
|
22
|
+
And I should see a link to "Users" in the breadcrumb
|
|
23
|
+
|
|
24
|
+
Scenario: Viewing a child resource page
|
|
25
|
+
Given a configuration of:
|
|
26
|
+
"""
|
|
27
|
+
ActiveAdmin.register User
|
|
28
|
+
ActiveAdmin.register Post do
|
|
29
|
+
belongs_to :user
|
|
30
|
+
end
|
|
31
|
+
"""
|
|
32
|
+
When I go to the last author's posts
|
|
33
|
+
And I follow "View"
|
|
34
|
+
Then I should be on the last author's last post page
|
|
35
|
+
And the "Posts" tab should be selected
|
|
36
|
+
|
|
37
|
+
Scenario: When the belongs to is optional
|
|
38
|
+
Given a configuration of:
|
|
39
|
+
"""
|
|
40
|
+
ActiveAdmin.register User
|
|
41
|
+
ActiveAdmin.register Post do
|
|
42
|
+
belongs_to :user, :optional => true
|
|
43
|
+
end
|
|
44
|
+
"""
|
|
45
|
+
When I go to the last author's posts
|
|
46
|
+
Then the "Users" tab should be selected
|
|
47
|
+
And I should see a menu item for "Posts"
|
|
48
|
+
|
|
49
|
+
When I follow "Posts"
|
|
50
|
+
Then the "Posts" tab should be selected
|
|
51
|
+
|
|
52
|
+
Scenario: Displaying belongs to resources in main menu
|
|
53
|
+
Given a configuration of:
|
|
54
|
+
"""
|
|
55
|
+
ActiveAdmin.register User
|
|
56
|
+
ActiveAdmin.register Post do
|
|
57
|
+
belongs_to :user
|
|
58
|
+
navigation_menu :user
|
|
59
|
+
end
|
|
60
|
+
"""
|
|
61
|
+
When I go to the last author's posts
|
|
62
|
+
And I follow "View"
|
|
63
|
+
Then the "Posts" tab should be selected
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
Feature: Breadcrumb
|
|
2
|
+
|
|
3
|
+
Background:
|
|
4
|
+
Given I am logged in
|
|
5
|
+
|
|
6
|
+
Scenario: Default breadcrumb links
|
|
7
|
+
Given a configuration of:
|
|
8
|
+
"""
|
|
9
|
+
ActiveAdmin.register Post do
|
|
10
|
+
end
|
|
11
|
+
"""
|
|
12
|
+
When I am on the new post page
|
|
13
|
+
Then I should see a link to "Post" in the breadcrumb
|
|
14
|
+
|
|
15
|
+
Scenario: Rewritten breadcrumb links
|
|
16
|
+
Given a configuration of:
|
|
17
|
+
"""
|
|
18
|
+
ActiveAdmin.register Post do
|
|
19
|
+
breadcrumb do
|
|
20
|
+
[
|
|
21
|
+
link_to('test', '/admin/test/url')
|
|
22
|
+
]
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
"""
|
|
26
|
+
When I am on the new post page
|
|
27
|
+
Then I should see a link to "test" in the breadcrumb
|