activeadmin 0.6.6 → 1.0.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of activeadmin might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/.gitignore +11 -8
- data/.hound.yml +11 -0
- data/.travis.yml +36 -10
- data/.yardopts +2 -1
- data/CHANGELOG.md +118 -67
- data/CONTRIBUTING.md +96 -73
- data/Gemfile +35 -35
- data/Guardfile +1 -0
- data/LICENSE +1 -1
- data/README.md +98 -0
- data/Rakefile +12 -4
- data/activeadmin.gemspec +21 -24
- data/app/assets/javascripts/active_admin/application.js.coffee +32 -0
- data/app/assets/javascripts/active_admin/base.js.coffee +14 -0
- data/app/assets/javascripts/active_admin/ext/jquery-ui.js.coffee +6 -0
- data/app/assets/javascripts/active_admin/ext/jquery.js.coffee +7 -0
- data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +39 -0
- data/app/assets/javascripts/active_admin/{components/jquery.aa.checkbox-toggler.js.coffee → lib/checkbox-toggler.js.coffee} +3 -4
- data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +101 -0
- data/app/assets/javascripts/active_admin/lib/flash.js.coffee +19 -0
- data/app/assets/javascripts/active_admin/lib/has_many.js.coffee +79 -0
- data/app/assets/javascripts/active_admin/lib/modal_dialog.js.coffee +37 -0
- data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +27 -0
- data/app/assets/javascripts/active_admin/lib/popover.js.coffee +68 -0
- data/app/assets/javascripts/active_admin/{components/jquery.aa.table-checkbox-toggler.js.coffee → lib/table-checkbox-toggler.js.coffee} +2 -3
- data/app/assets/stylesheets/active_admin/{_base.css.scss → _base.scss} +3 -0
- data/app/assets/stylesheets/active_admin/{_forms.css.scss → _forms.scss} +61 -17
- data/app/assets/stylesheets/active_admin/{_header.css.scss → _header.scss} +9 -5
- data/app/assets/stylesheets/active_admin/{_mixins.css.scss → _mixins.scss} +0 -0
- data/app/assets/stylesheets/active_admin/{_typography.css.scss → _typography.scss} +0 -0
- data/app/assets/stylesheets/active_admin/components/_batch_actions.scss +11 -0
- data/app/assets/stylesheets/active_admin/components/_blank_slates.scss +0 -1
- data/app/assets/stylesheets/active_admin/components/_buttons.scss +1 -1
- data/app/assets/stylesheets/active_admin/components/{_comments.css.scss → _comments.scss} +0 -0
- data/app/assets/stylesheets/active_admin/components/{_date_picker.css.scss → _date_picker.scss} +40 -14
- data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +5 -4
- data/app/assets/stylesheets/active_admin/components/_flash_messages.scss +37 -0
- data/app/assets/stylesheets/active_admin/components/_modal_dialog.scss +34 -0
- data/app/assets/stylesheets/active_admin/components/_pagination.scss +10 -0
- data/app/assets/stylesheets/active_admin/components/{_popovers.css.scss → _popovers.scss} +2 -3
- data/app/assets/stylesheets/active_admin/components/_status_tags.scss +4 -0
- data/app/assets/stylesheets/active_admin/components/_table_tools.scss +67 -0
- data/app/assets/stylesheets/active_admin/components/{_tables.css.scss → _tables.scss} +4 -2
- data/app/assets/stylesheets/active_admin/components/_tabs.scss +65 -0
- data/app/assets/stylesheets/active_admin/components/_unsupported_browser.scss +16 -0
- data/app/assets/stylesheets/active_admin/mixins/{_all.css.scss → _all.scss} +0 -0
- data/app/assets/stylesheets/active_admin/mixins/{_buttons.css.scss → _buttons.scss} +0 -1
- data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +28 -0
- data/app/assets/stylesheets/active_admin/mixins/{_icons.css.scss → _icons.scss} +1 -2
- data/app/assets/stylesheets/active_admin/mixins/{_reset.css.scss → _reset.scss} +0 -0
- data/app/assets/stylesheets/active_admin/mixins/_rounded.scss +22 -0
- data/app/assets/stylesheets/active_admin/mixins/{_sections.css.scss → _sections.scss} +8 -2
- data/app/assets/stylesheets/active_admin/mixins/{_shadows.css.scss → _shadows.scss} +0 -7
- data/app/assets/stylesheets/active_admin/mixins/_utilities.scss +0 -9
- data/app/assets/stylesheets/active_admin/mixins/{_variables.css.scss → _variables.scss} +10 -8
- data/app/assets/stylesheets/active_admin/{print.css.scss → print.scss} +4 -0
- data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +5 -2
- data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +11 -9
- data/app/views/active_admin/devise/confirmations/new.html.erb +15 -0
- data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +1 -1
- data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +1 -1
- data/app/views/active_admin/devise/passwords/edit.html.erb +9 -10
- data/app/views/active_admin/devise/passwords/new.html.erb +5 -4
- data/app/views/active_admin/devise/registrations/new.html.erb +22 -0
- data/app/views/active_admin/devise/sessions/new.html.erb +9 -7
- data/app/views/active_admin/devise/shared/_links.erb +1 -1
- data/app/views/active_admin/devise/unlocks/new.html.erb +5 -4
- data/app/views/layouts/active_admin_logged_out.html.erb +3 -5
- data/config/locales/ar.yml +120 -0
- data/config/locales/bg.yml +26 -6
- data/config/locales/bs.yml +122 -0
- data/config/locales/ca.yml +10 -1
- data/config/locales/cs.yml +7 -2
- data/config/locales/da.yml +7 -3
- data/config/locales/de-CH.yml +14 -31
- data/config/locales/de.yml +33 -33
- data/config/locales/el.yml +28 -2
- data/config/locales/en-GB.yml +12 -4
- data/config/locales/en.yml +29 -3
- data/config/locales/{es_MX.yml → es-MX.yml} +9 -24
- data/config/locales/es.yml +32 -25
- data/config/locales/fa.yml +120 -0
- data/config/locales/fi.yml +113 -0
- data/config/locales/fr.yml +21 -11
- data/config/locales/he.yml +7 -3
- data/config/locales/hr.yml +42 -11
- data/config/locales/hu.yml +10 -3
- data/config/locales/it.yml +31 -3
- data/config/locales/ja.yml +8 -3
- data/config/locales/ko.yml +7 -1
- data/config/locales/lt.yml +42 -11
- data/config/locales/lv.yml +7 -3
- data/config/locales/{no-NB.yml → nb.yml} +46 -15
- data/config/locales/nl.yml +36 -5
- data/config/locales/pl.yml +13 -8
- data/config/locales/pt-BR.yml +37 -5
- data/config/locales/pt-PT.yml +8 -4
- data/config/locales/ro.yml +7 -3
- data/config/locales/ru.yml +26 -5
- data/config/locales/sv-SE.yml +9 -5
- data/config/locales/tr.yml +10 -3
- data/config/locales/uk.yml +36 -12
- data/config/locales/vi.yml +7 -3
- data/config/locales/zh-CN.yml +26 -10
- data/config/locales/zh-TW.yml +19 -13
- data/docs/0-installation.md +65 -29
- data/docs/1-general-configuration.md +92 -81
- data/docs/10-custom-pages.md +68 -68
- data/docs/11-decorators.md +48 -59
- data/docs/12-arbre-components.md +80 -74
- data/docs/13-authorization-adapter.md +128 -107
- data/docs/14-gotchas.md +92 -0
- data/docs/2-resource-customization.md +293 -178
- data/docs/3-index-pages.md +160 -86
- data/docs/3-index-pages/custom-index.md +31 -0
- data/docs/3-index-pages/index-as-block.md +14 -9
- data/docs/3-index-pages/index-as-blog.md +41 -31
- data/docs/3-index-pages/index-as-grid.md +16 -8
- data/docs/3-index-pages/index-as-table.md +129 -52
- data/docs/4-csv-format.md +31 -24
- data/docs/5-forms.md +133 -56
- data/docs/6-show-pages.md +89 -27
- data/docs/7-sidebars.md +48 -27
- data/docs/8-custom-actions.md +98 -77
- data/docs/9-batch-actions.md +210 -146
- data/docs/README.md +24 -0
- data/features/action_item.feature +3 -3
- data/features/authorization_pundit.feature +37 -0
- data/features/breadcrumb.feature +48 -0
- data/features/comments/commenting.feature +56 -13
- data/features/development_reloading.feature +17 -30
- data/features/edit_page.feature +12 -1
- data/features/favicon.feature +3 -3
- data/features/i18n.feature +5 -4
- data/features/index/batch_actions.feature +41 -0
- data/features/index/filters.feature +67 -0
- data/features/index/format_as_csv.feature +90 -4
- data/features/index/formats.feature +27 -0
- data/features/index/index_as_blog.feature +4 -4
- data/features/index/index_as_table.feature +102 -6
- data/features/index/index_blank_slate.feature +22 -0
- data/features/index/index_scope_to.feature +16 -16
- data/features/index/page_title.feature +11 -0
- data/features/index/pagination.feature +1 -1
- data/features/index/switch_index_view.feature +14 -14
- data/features/new_page.feature +13 -2
- data/features/registering_pages.feature +1 -1
- data/features/renamed_resource.feature +32 -0
- data/features/show/page_title.feature +11 -0
- data/features/show/tabs.feature +27 -0
- data/features/sidebar_sections.feature +12 -0
- data/features/site_title.feature +2 -2
- data/features/specifying_actions.feature +3 -3
- data/features/step_definitions/action_item_steps.rb +2 -2
- data/features/step_definitions/action_link_steps.rb +14 -1
- data/features/step_definitions/additional_web_steps.rb +19 -20
- data/features/step_definitions/asset_steps.rb +3 -3
- data/features/step_definitions/attribute_steps.rb +8 -3
- data/features/step_definitions/batch_action_steps.rb +26 -9
- data/features/step_definitions/blog_steps.rb +3 -0
- data/features/step_definitions/breadcrumb_steps.rb +1 -1
- data/features/step_definitions/comment_steps.rb +1 -1
- data/features/step_definitions/configuration_steps.rb +9 -2
- data/features/step_definitions/dashboard_steps.rb +2 -2
- data/features/step_definitions/factory_steps.rb +9 -8
- data/features/step_definitions/filter_steps.rb +25 -3
- data/features/step_definitions/flash_steps.rb +3 -3
- data/features/step_definitions/format_steps.rb +18 -18
- data/features/step_definitions/index_scope_steps.rb +5 -5
- data/features/step_definitions/layout_steps.rb +1 -1
- data/features/step_definitions/member_link_steps.rb +2 -2
- data/features/step_definitions/menu_steps.rb +3 -3
- data/features/step_definitions/pagination_steps.rb +2 -3
- data/features/step_definitions/sidebar_steps.rb +8 -3
- data/features/step_definitions/site_title_steps.rb +6 -4
- data/features/step_definitions/symbol_leak_steps.rb +3 -0
- data/features/step_definitions/tab_steps.rb +5 -0
- data/features/step_definitions/table_steps.rb +4 -4
- data/features/step_definitions/user_steps.rb +10 -7
- data/features/step_definitions/web_steps.rb +14 -11
- data/features/sti_resource.feature +6 -2
- data/features/strong_parameters.feature +73 -0
- data/features/support/env.rb +34 -9
- data/features/support/paths.rb +14 -6
- data/features/support/selectors.rb +1 -1
- data/features/symbol_leak.feature +35 -0
- data/features/users/resetting_password.feature +5 -6
- data/lib/active_admin.rb +26 -25
- data/lib/active_admin/abstract_view_factory.rb +7 -17
- data/lib/active_admin/application.rb +72 -59
- data/lib/active_admin/asset_registration.rb +2 -2
- data/lib/active_admin/authorization_adapter.rb +2 -2
- data/lib/active_admin/base_controller.rb +2 -3
- data/lib/active_admin/base_controller/authorization.rb +13 -31
- data/lib/active_admin/batch_actions.rb +1 -1
- data/lib/active_admin/batch_actions/controller.rb +24 -8
- data/lib/active_admin/batch_actions/resource_extension.rb +47 -18
- data/lib/active_admin/batch_actions/views/batch_action_form.rb +7 -4
- data/lib/active_admin/batch_actions/views/batch_action_popover.rb +3 -3
- data/lib/active_admin/batch_actions/views/batch_action_selector.rb +8 -17
- data/lib/active_admin/batch_actions/views/selection_cells.rb +4 -4
- data/lib/active_admin/callbacks.rb +25 -24
- data/lib/active_admin/cancan_adapter.rb +7 -11
- data/lib/active_admin/csv_builder.rb +92 -15
- data/lib/active_admin/dependency.rb +93 -0
- data/lib/active_admin/deprecation.rb +6 -7
- data/lib/active_admin/devise.rb +28 -18
- data/lib/active_admin/dsl.rb +18 -11
- data/lib/active_admin/engine.rb +10 -8
- data/lib/active_admin/error.rb +62 -0
- data/lib/active_admin/filters/dsl.rb +2 -2
- data/lib/active_admin/filters/forms.rb +17 -27
- data/lib/active_admin/filters/formtastic_addons.rb +49 -15
- data/lib/active_admin/filters/resource_extension.rb +43 -34
- data/lib/active_admin/form_builder.rb +93 -154
- data/lib/active_admin/helpers/collection.rb +7 -13
- data/lib/active_admin/helpers/i18n.rb +7 -0
- data/lib/active_admin/helpers/optional_display.rb +5 -5
- data/lib/active_admin/helpers/routes/url_helpers.rb +15 -0
- data/lib/active_admin/helpers/scope_chain.rb +1 -1
- data/lib/active_admin/helpers/settings.rb +16 -9
- data/lib/active_admin/iconic.rb +17 -15
- data/lib/active_admin/iconic/icons.rb +136 -136
- data/lib/active_admin/inputs.rb +11 -7
- data/lib/active_admin/inputs/datepicker_input.rb +12 -3
- data/lib/active_admin/inputs/filters/base.rb +42 -0
- data/lib/active_admin/inputs/filters/base/search_method_select.rb +75 -0
- data/lib/active_admin/inputs/filters/boolean_input.rb +24 -0
- data/lib/active_admin/inputs/filters/check_boxes_input.rb +50 -0
- data/lib/active_admin/inputs/filters/date_range_input.rb +36 -0
- data/lib/active_admin/inputs/filters/numeric_input.rb +12 -0
- data/lib/active_admin/inputs/filters/select_input.rb +54 -0
- data/lib/active_admin/inputs/filters/string_input.rb +26 -0
- data/lib/active_admin/menu.rb +6 -4
- data/lib/active_admin/menu_collection.rb +1 -4
- data/lib/active_admin/namespace.rb +55 -29
- data/lib/active_admin/order_clause.rb +26 -0
- data/lib/active_admin/orm/active_record.rb +5 -0
- data/lib/active_admin/orm/active_record/comments.rb +81 -0
- data/lib/active_admin/orm/active_record/comments/comment.rb +45 -0
- data/lib/active_admin/{comments → orm/active_record/comments}/namespace_helper.rb +2 -2
- data/lib/active_admin/{comments → orm/active_record/comments}/resource_helper.rb +1 -1
- data/lib/active_admin/{comments → orm/active_record/comments}/show_page_helper.rb +0 -0
- data/lib/active_admin/orm/active_record/comments/views.rb +2 -0
- data/lib/active_admin/{comments → orm/active_record/comments}/views/active_admin_comments.rb +16 -14
- data/lib/active_admin/orm/mongoid.rb +1 -0
- data/lib/active_admin/orm/mongoid/.gitkeep +0 -0
- data/lib/active_admin/page.rb +7 -3
- data/lib/active_admin/page_dsl.rb +1 -1
- data/lib/active_admin/page_presenter.rb +2 -2
- data/lib/active_admin/pundit_adapter.rb +68 -0
- data/lib/active_admin/resource.rb +16 -17
- data/lib/active_admin/resource/action_items.rb +23 -18
- data/lib/active_admin/resource/belongs_to.rb +7 -3
- data/lib/active_admin/resource/controllers.rb +1 -0
- data/lib/active_admin/resource/includes.rb +12 -0
- data/lib/active_admin/resource/menu.rb +5 -5
- data/lib/active_admin/resource/naming.rb +27 -43
- data/lib/active_admin/resource/page_presenters.rb +1 -1
- data/lib/active_admin/resource/routes.rb +27 -11
- data/lib/active_admin/resource/scope_to.rb +7 -7
- data/lib/active_admin/resource/sidebars.rb +1 -0
- data/lib/active_admin/resource_controller.rb +6 -7
- data/lib/active_admin/resource_controller/data_access.rb +101 -93
- data/lib/active_admin/resource_controller/decorators.rb +91 -9
- data/lib/active_admin/resource_controller/streaming.rb +37 -0
- data/lib/active_admin/resource_dsl.rb +53 -10
- data/lib/active_admin/router.rb +7 -7
- data/lib/active_admin/scope.rb +6 -6
- data/lib/active_admin/sidebar_section.rb +10 -2
- data/lib/active_admin/version.rb +1 -1
- data/lib/active_admin/view_factory.rb +17 -17
- data/lib/active_admin/view_helpers.rb +0 -1
- data/lib/active_admin/view_helpers/auto_link_helper.rb +23 -12
- data/lib/active_admin/view_helpers/breadcrumb_helper.rb +4 -3
- data/lib/active_admin/view_helpers/display_helper.rb +30 -15
- data/lib/active_admin/view_helpers/download_format_links_helper.rb +21 -25
- data/lib/active_admin/view_helpers/fields_for.rb +4 -4
- data/lib/active_admin/view_helpers/flash_helper.rb +4 -3
- data/lib/active_admin/view_helpers/form_helper.rb +5 -9
- data/lib/active_admin/view_helpers/method_or_proc_helper.rb +6 -6
- data/lib/active_admin/views/action_items.rb +2 -2
- data/lib/active_admin/views/components/action_list_popover.rb +1 -1
- data/lib/active_admin/views/components/active_admin_form.rb +123 -0
- data/lib/active_admin/views/components/attributes_table.rb +63 -21
- data/lib/active_admin/views/components/blank_slate.rb +1 -1
- data/lib/active_admin/views/components/columns.rb +13 -7
- data/lib/active_admin/views/components/dropdown_menu.rb +6 -6
- data/lib/active_admin/views/components/index_list.rb +7 -7
- data/lib/active_admin/views/components/paginated_collection.rb +38 -20
- data/lib/active_admin/views/components/panel.rb +8 -2
- data/lib/active_admin/views/components/popover.rb +1 -1
- data/lib/active_admin/views/components/scopes.rb +5 -4
- data/lib/active_admin/views/components/sidebar_section.rb +3 -2
- data/lib/active_admin/views/components/site_title.rb +2 -2
- data/lib/active_admin/views/components/status_tag.rb +34 -11
- data/lib/active_admin/views/components/table_for.rb +90 -45
- data/lib/active_admin/views/components/tabs.rb +28 -0
- data/lib/active_admin/views/components/unsupported_browser.rb +11 -0
- data/lib/active_admin/views/footer.rb +3 -3
- data/lib/active_admin/views/header.rb +3 -3
- data/lib/active_admin/views/index_as_block.rb +10 -10
- data/lib/active_admin/views/index_as_blog.rb +45 -39
- data/lib/active_admin/views/index_as_grid.rb +14 -10
- data/lib/active_admin/views/index_as_table.rb +242 -129
- data/lib/active_admin/views/pages/base.rb +22 -18
- data/lib/active_admin/views/pages/form.rb +21 -11
- data/lib/active_admin/views/pages/index.rb +40 -35
- data/lib/active_admin/views/pages/layout.rb +1 -1
- data/lib/active_admin/views/pages/show.rb +4 -4
- data/lib/active_admin/views/tabbed_navigation.rb +7 -3
- data/lib/active_admin/views/title_bar.rb +10 -8
- data/lib/generators/active_admin/assets/assets_generator.rb +3 -28
- data/lib/generators/active_admin/assets/templates/{3.1/active_admin.css.scss → active_admin.css.scss} +0 -0
- data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +1 -0
- data/lib/generators/active_admin/devise/devise_generator.rb +24 -26
- data/lib/generators/active_admin/install/install_generator.rb +8 -9
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +28 -26
- data/lib/generators/active_admin/install/templates/admin_user.rb.erb +12 -2
- data/lib/generators/active_admin/install/templates/dashboard.rb +4 -4
- data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb +3 -3
- data/lib/generators/active_admin/page/USAGE +8 -0
- data/lib/generators/active_admin/page/page_generator.rb +12 -0
- data/lib/generators/active_admin/page/templates/page.rb +5 -0
- data/lib/generators/active_admin/resource/resource_generator.rb +3 -5
- data/lib/generators/active_admin/resource/templates/admin.rb +15 -0
- data/lib/ransack_ext.rb +12 -0
- data/script/local +2 -2
- data/script/travis_cache +107 -0
- data/spec/javascripts/coffeescripts/jquery.aa.flash.js.coffee +25 -0
- data/spec/javascripts/fixtures/flashes.html +2 -0
- data/spec/rails_helper.rb +154 -0
- data/spec/{integration → requests}/default_namespace_spec.rb +6 -6
- data/spec/{integration → requests}/javascript_spec.rb +5 -5
- data/spec/requests/memory_spec.rb +23 -0
- data/spec/requests/stylesheets_spec.rb +18 -0
- data/spec/spec_helper.rb +12 -173
- data/spec/support/detect_rails_version.rb +9 -17
- data/spec/support/rails_template.rb +64 -35
- data/spec/support/rails_template_with_data.rb +14 -14
- data/spec/support/templates/admin/stores.rb +5 -1
- data/spec/support/templates/policies/active_admin/comment_policy.rb +9 -0
- data/spec/support/templates/policies/active_admin/page_policy.rb +18 -0
- data/spec/support/templates/policies/admin_user_policy.rb +11 -0
- data/spec/support/templates/policies/application_policy.rb +45 -0
- data/spec/support/templates/policies/category_policy.rb +7 -0
- data/spec/support/templates/policies/post_policy.rb +15 -0
- data/spec/support/templates/policies/store_policy.rb +11 -0
- data/spec/support/templates/policies/user_policy.rb +11 -0
- data/spec/support/templates/post_decorator.rb +4 -46
- data/spec/unit/abstract_view_factory_spec.rb +16 -16
- data/spec/unit/action_builder_spec.rb +24 -18
- data/spec/unit/active_admin_spec.rb +2 -2
- data/spec/unit/application_spec.rb +33 -34
- data/spec/unit/asset_registration_spec.rb +25 -29
- data/spec/unit/authorization/authorization_adapter_spec.rb +10 -10
- data/spec/unit/authorization/controller_authorization_spec.rb +11 -11
- data/spec/unit/authorization/index_overriding_spec.rb +22 -0
- data/spec/unit/auto_link_spec.rb +43 -13
- data/spec/unit/batch_actions/resource_spec.rb +15 -14
- data/spec/unit/batch_actions/settings_spec.rb +18 -18
- data/spec/unit/belongs_to_spec.rb +28 -19
- data/spec/unit/cancan_adapter_spec.rb +8 -8
- data/spec/unit/comments_spec.rb +99 -39
- data/spec/unit/component_spec.rb +3 -3
- data/spec/unit/config_shared_examples.rb +10 -10
- data/spec/unit/controller_filters_spec.rb +23 -16
- data/spec/unit/csv_builder_spec.rb +165 -24
- data/spec/unit/dependency_spec.rb +135 -0
- data/spec/unit/devise_spec.rb +17 -37
- data/spec/unit/dsl_spec.rb +70 -9
- data/spec/unit/event_spec.rb +11 -11
- data/spec/unit/filters/filter_form_builder_spec.rb +207 -148
- data/spec/unit/filters/resource_spec.rb +60 -26
- data/spec/unit/form_builder_spec.rb +419 -145
- data/spec/unit/generators/install_spec.rb +23 -0
- data/spec/unit/helpers/collection_spec.rb +18 -18
- data/spec/unit/helpers/scope_chain_spec.rb +6 -6
- data/spec/unit/helpers/settings_spec.rb +4 -4
- data/spec/unit/i18n_spec.rb +12 -0
- data/spec/unit/menu_collection_spec.rb +14 -14
- data/spec/unit/menu_item_spec.rb +42 -42
- data/spec/unit/menu_spec.rb +20 -20
- data/spec/unit/namespace/authorization_spec.rb +8 -8
- data/spec/unit/namespace/register_page_spec.rb +11 -11
- data/spec/unit/namespace/register_resource_spec.rb +28 -30
- data/spec/unit/namespace_spec.rb +20 -20
- data/spec/unit/order_clause_spec.rb +81 -0
- data/spec/unit/page_controller_spec.rb +1 -1
- data/spec/unit/page_spec.rb +18 -12
- data/spec/unit/pretty_format_spec.rb +42 -14
- data/spec/unit/pundit_adapter_spec.rb +98 -0
- data/spec/unit/resource/action_items_spec.rb +15 -12
- data/spec/unit/resource/includes_spec.rb +21 -0
- data/spec/unit/resource/menu_spec.rb +1 -1
- data/spec/unit/resource/naming_spec.rb +35 -21
- data/spec/unit/resource/page_presenters_spec.rb +8 -8
- data/spec/unit/resource/pagination_spec.rb +6 -6
- data/spec/unit/resource/routes_spec.rb +10 -10
- data/spec/unit/resource/scopes_spec.rb +14 -7
- data/spec/unit/resource/sidebars_spec.rb +6 -6
- data/spec/unit/resource_collection_spec.rb +31 -38
- data/spec/unit/resource_controller/data_access_spec.rb +96 -30
- data/spec/unit/resource_controller/decorators_spec.rb +83 -0
- data/spec/unit/resource_controller/sidebars_spec.rb +7 -8
- data/spec/unit/resource_controller_spec.rb +73 -70
- data/spec/unit/resource_registration_spec.rb +12 -12
- data/spec/unit/resource_spec.rb +77 -42
- data/spec/unit/routing_spec.rb +39 -31
- data/spec/unit/scope_spec.rb +112 -30
- data/spec/unit/settings_spec.rb +51 -21
- data/spec/unit/view_factory_spec.rb +2 -3
- data/spec/unit/view_helpers/breadcrumbs_spec.rb +71 -60
- data/spec/unit/view_helpers/display_name_spec.rb +49 -21
- data/spec/unit/view_helpers/download_format_links_helper_spec.rb +5 -5
- data/spec/unit/view_helpers/fields_for_spec.rb +18 -18
- data/spec/unit/view_helpers/flash_helper_spec.rb +25 -0
- data/spec/unit/view_helpers/form_helper_spec.rb +10 -23
- data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +64 -22
- data/spec/unit/views/components/action_list_popover_spec.rb +16 -6
- data/spec/unit/views/components/attributes_table_spec.rb +171 -30
- data/spec/unit/views/components/batch_action_popover_spec.rb +20 -6
- data/spec/unit/views/components/blank_slate_spec.rb +14 -4
- data/spec/unit/views/components/columns_spec.rb +52 -22
- data/spec/unit/views/components/index_list_spec.rb +11 -8
- data/spec/unit/views/components/index_table_for_spec.rb +46 -0
- data/spec/unit/views/components/paginated_collection_spec.rb +79 -90
- data/spec/unit/views/components/panel_spec.rb +32 -21
- data/spec/unit/views/components/popover_spec.rb +7 -7
- data/spec/unit/views/components/sidebar_section_spec.rb +18 -8
- data/spec/unit/views/components/site_title_spec.rb +26 -26
- data/spec/unit/views/components/status_tag_spec.rb +178 -38
- data/spec/unit/views/components/table_for_spec.rb +237 -35
- data/spec/unit/views/components/tabs_spec.rb +39 -0
- data/spec/unit/views/components/unsupported_browser_spec.rb +47 -0
- data/spec/unit/views/pages/form_spec.rb +17 -10
- data/spec/unit/views/pages/index_spec.rb +60 -0
- data/spec/unit/views/pages/layout_spec.rb +17 -21
- data/spec/unit/views/pages/show_spec.rb +18 -6
- data/spec/unit/views/tabbed_navigation_spec.rb +61 -52
- data/tasks/docs.rake +9 -11
- data/tasks/parallel_tests.rake +8 -2
- data/tasks/test.rake +13 -9
- data/tasks/yard.rake +7 -4
- metadata +219 -163
- data/.document +0 -5
- data/README.rdoc +0 -88
- 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-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 +0 -10
- data/app/assets/images/active_admin/index_list_icons/blog_icon.svg +0 -4
- data/app/assets/images/active_admin/index_list_icons/grid_icon.svg +0 -13
- data/app/assets/images/active_admin/index_list_icons/table_icon.svg +0 -3
- data/app/assets/images/active_admin/loading.gif +0 -0
- data/app/assets/javascripts/active_admin/application.js +0 -3
- data/app/assets/javascripts/active_admin/base.js +0 -5
- data/app/assets/javascripts/active_admin/components/jquery.aa.dropdown-menu.js.coffee +0 -105
- data/app/assets/javascripts/active_admin/components/jquery.aa.popover.js.coffee +0 -97
- data/app/assets/javascripts/active_admin/lib/namespace.js.coffee +0 -4
- data/app/assets/javascripts/active_admin/pages/application.js.coffee +0 -21
- data/app/assets/javascripts/active_admin/pages/batch_actions.js.coffee +0 -26
- data/app/assets/stylesheets/active_admin/components/_batch_actions.css.scss +0 -11
- data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +0 -41
- data/app/assets/stylesheets/active_admin/components/_table_tools.css.scss +0 -95
- data/app/assets/stylesheets/active_admin/mixins/_gradients.css.scss +0 -38
- data/app/assets/stylesheets/active_admin/mixins/_rounded.css.scss +0 -43
- data/app/views/active_admin/dashboard/index.html.arb +0 -1
- data/app/views/active_admin/resource/index.csv.erb +0 -23
- data/docs/3-index-pages/create-an-index.md +0 -29
- data/lib/active_admin/comments.rb +0 -83
- data/lib/active_admin/comments/comment.rb +0 -42
- data/lib/active_admin/comments/views.rb +0 -2
- data/lib/active_admin/dependency_checker.rb +0 -46
- data/lib/active_admin/inputs/filter_base.rb +0 -33
- data/lib/active_admin/inputs/filter_base/search_method_select.rb +0 -73
- data/lib/active_admin/inputs/filter_boolean_input.rb +0 -36
- data/lib/active_admin/inputs/filter_check_boxes_input.rb +0 -40
- data/lib/active_admin/inputs/filter_date_range_input.rb +0 -34
- data/lib/active_admin/inputs/filter_numeric_input.rb +0 -10
- data/lib/active_admin/inputs/filter_select_input.rb +0 -49
- data/lib/active_admin/inputs/filter_string_input.rb +0 -24
- data/lib/active_admin/reloader.rb +0 -130
- data/lib/active_admin/resource_controller/actions.rb +0 -81
- data/lib/active_admin/sass/active_admin.scss +0 -3
- data/lib/active_admin/sass/css_loader.rb +0 -16
- data/lib/active_admin/sass/helpers.rb +0 -45
- data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +0 -7
- data/lib/active_admin/views/dashboard_section_renderer.rb +0 -19
- data/lib/active_admin/views/pages/dashboard.rb +0 -62
- data/lib/generators/active_admin/assets/templates/3.0/active_admin.js +0 -1
- data/lib/generators/active_admin/assets/templates/3.1/active_admin.js +0 -1
- data/lib/meta_search_ext.rb +0 -10
- data/spec/integration/memory_spec.rb +0 -29
- data/spec/integration/stylesheets_spec.rb +0 -41
- data/spec/javascripts/compiled/jquery.aa.checkbox-toggler-spec.js +0 -60
- data/spec/javascripts/compiled/jquery.aa.popover-spec.js +0 -106
- data/spec/javascripts/compiled/jquery.aa.table-checkbox-toggler-spec.js +0 -37
- data/spec/javascripts/helpers/vendor/jasmine-fixture-0.0.5.js +0 -108
- data/spec/javascripts/helpers/vendor/jasmine-jquery.js +0 -288
- data/spec/javascripts/helpers/vendor/sinon-1.2.0.js +0 -2915
- data/spec/javascripts/support/jquery-ui-1.8.16.custom.min.js +0 -34
- data/spec/javascripts/support/jquery.min.js +0 -4
- data/spec/spec_helper_without_rails.rb +0 -11
- data/spec/unit/generators/install_rails_3_1_spec.rb +0 -16
- data/spec/unit/rails_spec.rb +0 -43
- data/spec/unit/reloader_spec.rb +0 -124
- data/spec/unit/sass/helpers_spec.rb +0 -47
- data/tasks/js.rake +0 -32
data/docs/12-arbre-components.md
CHANGED
@@ -10,19 +10,23 @@ non-breaking space or some text. The text_node method can be used to insert
|
|
10
10
|
these elements into the page inside of other Arbre components or resource
|
11
11
|
controller functions.
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
13
|
+
```ruby
|
14
|
+
ActiveAdmin.register Post do
|
15
|
+
show do
|
16
|
+
panel "Post Details" do
|
17
|
+
attributes_table_for post do
|
18
|
+
row :id
|
19
|
+
row 'Tags' do
|
20
|
+
post.tags.each do |tag|
|
21
|
+
a tag, href: admin_post_path(q: {tagged_with_contains: tag})
|
20
22
|
text_node " ".html_safe
|
21
23
|
end
|
22
24
|
end
|
23
25
|
end
|
24
26
|
end
|
25
|
-
|
27
|
+
end
|
28
|
+
end
|
29
|
+
```
|
26
30
|
|
27
31
|
## Panels
|
28
32
|
|
@@ -30,19 +34,19 @@ A panel is a component that takes up all available horizontal space and takes a
|
|
30
34
|
title and a hash of attributes as arguments. If a sidebar is present, a panel
|
31
35
|
will take up the remaining space.
|
32
36
|
|
33
|
-
|
34
|
-
|
35
|
-
show do
|
37
|
+
This will create two stacked panels:
|
36
38
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
render partial: "show_enhancements", locals: {post: post}
|
43
|
-
end
|
39
|
+
```ruby
|
40
|
+
show do
|
41
|
+
panel "Post Details" do
|
42
|
+
render partial: "details", locals: {post: post}
|
43
|
+
end
|
44
44
|
|
45
|
-
|
45
|
+
panel "Post Tags" do
|
46
|
+
render partial: "tags", locals: {post: post}
|
47
|
+
end
|
48
|
+
end
|
49
|
+
```
|
46
50
|
|
47
51
|
## Columns
|
48
52
|
|
@@ -52,34 +56,36 @@ the rest.
|
|
52
56
|
|
53
57
|
#### Simple Columns
|
54
58
|
|
55
|
-
To create simple columnns, use the
|
59
|
+
To create simple columnns, use the `columns` method. Within the block, call
|
56
60
|
the #column method to create a new column.
|
57
61
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
column do
|
65
|
-
span "Column #2"
|
66
|
-
end
|
62
|
+
```ruby
|
63
|
+
columns do
|
64
|
+
column do
|
65
|
+
span "Column #1"
|
66
|
+
end
|
67
67
|
|
68
|
-
|
68
|
+
column do
|
69
|
+
span "Column #2"
|
70
|
+
end
|
71
|
+
end
|
72
|
+
```
|
69
73
|
|
70
|
-
###
|
74
|
+
### Spanning Multiple Columns
|
71
75
|
|
72
76
|
To create columns that have multiple spans, pass the :span option to the column
|
73
77
|
method.
|
74
78
|
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
79
|
+
```ruby
|
80
|
+
columns do
|
81
|
+
column span: 2 do
|
82
|
+
span "Column # 1"
|
83
|
+
end
|
84
|
+
column do
|
85
|
+
span "Column # 2"
|
86
|
+
end
|
87
|
+
end
|
88
|
+
```
|
83
89
|
|
84
90
|
By default, each column spans 1 column. The above layout would have 2 columns,
|
85
91
|
the first being twice as large as the second.
|
@@ -89,16 +95,18 @@ the first being twice as large as the second.
|
|
89
95
|
Active Admin uses a fluid width layout, causing column width to be defined
|
90
96
|
using percentages. Due to using this style of layout, columns can shrink or
|
91
97
|
expand past points that may not be desirable. To overcome this issue,
|
92
|
-
columns provide
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
98
|
+
columns provide `:max_width` and `:min_width` options.
|
99
|
+
|
100
|
+
```ruby
|
101
|
+
columns do
|
102
|
+
column max_width: "200px", min_width: "100px" do
|
103
|
+
span "Column # 1"
|
104
|
+
end
|
105
|
+
column do
|
106
|
+
span "Column # 2"
|
107
|
+
end
|
108
|
+
end
|
109
|
+
```
|
102
110
|
|
103
111
|
In the above example, the first column will not grow larger than 200px and will
|
104
112
|
not shrink less than 100px.
|
@@ -106,39 +114,37 @@ not shrink less than 100px.
|
|
106
114
|
## Table For
|
107
115
|
|
108
116
|
Table For provides the ability to create tables like those present
|
109
|
-
in
|
110
|
-
uses
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
117
|
+
in `index_as_table`. It takes a collection and a hash of options and then
|
118
|
+
uses `column` to build the fields to show with the table.
|
119
|
+
|
120
|
+
```ruby
|
121
|
+
table_for order.payments do
|
122
|
+
column(:payment_type) { |payment| payment.payment_type.titleize }
|
123
|
+
column "Received On", :created_at
|
124
|
+
column "Details & Notes", :payment_details
|
125
|
+
column "Amount", :amount_in_dollars
|
126
|
+
end
|
127
|
+
```
|
128
|
+
|
129
|
+
the `column` method can take a title as its first argument and data
|
130
|
+
(`:your_method`) as its second (or first if no title provided). Column also
|
121
131
|
takes a block.
|
122
132
|
|
123
133
|
## Status tag
|
124
134
|
|
125
135
|
Status tags provide convenient syntactic sugar for styling items that have
|
126
136
|
status. A common example of where the status tag could be useful is for orders
|
127
|
-
that are complete or in progress. status_tag takes a status, like
|
137
|
+
that are complete or in progress. `status_tag` takes a status, like
|
128
138
|
"In Progress", a type, which defaults to nil, and a hash of options. The
|
129
139
|
status_tag will generate html markup that Active Admin css uses in styling.
|
130
140
|
|
131
|
-
|
132
|
-
|
141
|
+
```ruby
|
142
|
+
status_tag 'In Progress'
|
143
|
+
# => <span class='status_tag in_progress'>In Progress</span>
|
133
144
|
|
134
|
-
|
135
|
-
|
145
|
+
status_tag 'active', :ok
|
146
|
+
# => <span class='status_tag active ok'>Active</span>
|
136
147
|
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
:class => 'important',
|
141
|
-
:id => 'status_123',
|
142
|
-
:label => 'on'
|
143
|
-
)
|
144
|
-
# => <span class='status_tag active ok important' id='status_123'>on</span>
|
148
|
+
status_tag 'active', :ok, class: 'important', id: 'status_123', label: 'on'
|
149
|
+
# => <span class='status_tag active ok important' id='status_123'>on</span>
|
150
|
+
```
|
@@ -4,68 +4,69 @@ Active Admin offers the ability to define and use your own authorization
|
|
4
4
|
adapter. If implemented, the '#authorized?' will be called when an action is
|
5
5
|
taken. By default, '#authorized?' returns true.
|
6
6
|
|
7
|
-
|
8
7
|
## Setting up your own AuthorizationAdapter
|
9
8
|
|
10
9
|
Setting up your own `AuthorizationAdapter` is easy! The following example shows
|
11
10
|
how to set up and tie your authorization adapter class to Active Admin:
|
12
11
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
else
|
30
|
-
true
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
12
|
+
```ruby
|
13
|
+
# app/models/only_authors_authorization.rb
|
14
|
+
class OnlyAuthorsAuthorization < ActiveAdmin::AuthorizationAdapter
|
15
|
+
|
16
|
+
def authorized?(action, subject = nil)
|
17
|
+
case subject
|
18
|
+
when normalized(Post)
|
19
|
+
# Only let the author update and delete posts
|
20
|
+
if action == :update || action == :destroy
|
21
|
+
subject.author == user
|
22
|
+
else
|
23
|
+
true
|
24
|
+
end
|
25
|
+
else
|
26
|
+
true
|
34
27
|
end
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
```
|
35
32
|
|
36
33
|
In order to hook up `OnlyAuthorsAuthorization` to Active Admin, go to your
|
37
34
|
application's `config/initializers/active_admin.rb` and add/modify the line:
|
38
35
|
|
39
|
-
|
36
|
+
```ruby
|
37
|
+
config.authorization_adapter = "OnlyAuthorsAuthorization"
|
38
|
+
```
|
40
39
|
|
41
40
|
Authorization adapters can be configured per ActiveAdmin namespace as well, for example:
|
42
41
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
42
|
+
```ruby
|
43
|
+
ActiveAdmin.setup do |config|
|
44
|
+
config.namespace :admin do |ns|
|
45
|
+
ns.authorization_adapter = "AdminAuthorization"
|
46
|
+
end
|
47
|
+
config.namespace :my do |ns|
|
48
|
+
ns.authorization_adapter = "DashboardAuthorization"
|
49
|
+
end
|
50
|
+
end
|
51
|
+
```
|
51
52
|
|
52
53
|
Now, whenever a controller action is performed, the `OnlyAuthorsAuthorization`'s
|
53
54
|
`#authorized?` method will be called.
|
54
55
|
|
55
|
-
|
56
56
|
## Getting Access to the Current User
|
57
57
|
|
58
58
|
From within your authorization adapter, you can call the `#user` method to
|
59
59
|
retrieve the current user.
|
60
60
|
|
61
|
-
|
62
|
-
|
63
|
-
def authorized?(action, subject = nil)
|
64
|
-
user.admin?
|
65
|
-
end
|
61
|
+
```ruby
|
62
|
+
class OnlyAdmins < ActiveAdmin::AuthorizationAdapter
|
66
63
|
|
67
|
-
|
64
|
+
def authorized?(action, subject = nil)
|
65
|
+
user.admin?
|
66
|
+
end
|
68
67
|
|
68
|
+
end
|
69
|
+
```
|
69
70
|
|
70
71
|
## Scoping Collections in Authorization Adapters
|
71
72
|
|
@@ -73,42 +74,40 @@ retrieve the current user.
|
|
73
74
|
for the adapter to scope the resource's collection. For example, you may want to
|
74
75
|
centralize the scoping:
|
75
76
|
|
76
|
-
|
77
|
+
```ruby
|
78
|
+
class OnlyMyAccount < ActiveAdmin::AuthorizationAdapter
|
77
79
|
|
78
|
-
|
79
|
-
|
80
|
-
|
80
|
+
def authorized?(action, subject = nil)
|
81
|
+
subject.account == user.account
|
82
|
+
end
|
81
83
|
|
82
|
-
|
83
|
-
|
84
|
-
|
84
|
+
def scope_collection(collection, action = Auth::READ)
|
85
|
+
collection.where(account_id: user.account_id)
|
86
|
+
end
|
85
87
|
|
86
|
-
|
88
|
+
end
|
89
|
+
```
|
87
90
|
|
88
91
|
All collections presented on Index Screens will be passed through this method
|
89
92
|
and will be scoped accordingly.
|
90
93
|
|
91
|
-
|
92
94
|
## Managing Access to Pages
|
93
95
|
|
94
96
|
Pages, just like resources, get authorized also. When authorization a page, the
|
95
97
|
subject will be an instance of `ActiveAdmin::Page`.
|
96
98
|
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
end
|
106
|
-
else
|
107
|
-
false
|
108
|
-
end
|
109
|
-
end
|
99
|
+
```ruby
|
100
|
+
class OnlyDashboard < ActiveAdmin::AuthorizationAdapter
|
101
|
+
def authorized?(action, subject = nil)
|
102
|
+
case subject
|
103
|
+
when ActiveAdmin::Page
|
104
|
+
action == :read && subject.name == "Dashboard" && subject.namespace.name == :admin
|
105
|
+
else
|
106
|
+
false
|
110
107
|
end
|
111
|
-
|
108
|
+
end
|
109
|
+
end
|
110
|
+
```
|
112
111
|
|
113
112
|
## Action Types
|
114
113
|
|
@@ -133,61 +132,66 @@ authorized to perform an action on a subject.
|
|
133
132
|
|
134
133
|
Simply use the `#authorized?(action, subject) method to check.
|
135
134
|
|
136
|
-
|
137
|
-
|
138
|
-
index do
|
139
|
-
column :title
|
140
|
-
column "" do |post|
|
141
|
-
if authorized?(:update, post)
|
142
|
-
link_to("Edit", admin_post_path(post))
|
143
|
-
end
|
144
|
-
end
|
145
|
-
|
146
|
-
end
|
135
|
+
```ruby
|
136
|
+
ActiveAdmin.register Post do
|
147
137
|
|
138
|
+
index do
|
139
|
+
column :title
|
140
|
+
column '' do |post|
|
141
|
+
link_to 'Edit', admin_post_path(post) if authorized? :update, post
|
148
142
|
end
|
143
|
+
end
|
144
|
+
|
145
|
+
end
|
146
|
+
```
|
149
147
|
|
150
148
|
If you are implementing a custom controller action, you can use the
|
151
149
|
`#authorize!` method to raise an `ActiveAdmin::AccessDenied` exception.
|
152
150
|
|
153
|
-
|
154
|
-
|
155
|
-
member_action :publish, :method => :post do
|
156
|
-
post = Post.find(params[:id])
|
151
|
+
```ruby
|
152
|
+
ActiveAdmin.register Post do
|
157
153
|
|
158
|
-
|
159
|
-
|
154
|
+
member_action :publish, method: :post do
|
155
|
+
post = Post.find(params[:id])
|
160
156
|
|
161
|
-
|
162
|
-
|
163
|
-
end
|
157
|
+
authorize! :publish, post
|
158
|
+
post.publish!
|
164
159
|
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
end
|
169
|
-
end
|
160
|
+
flash[:notice] = "Post has been published"
|
161
|
+
redirect_to [:admin, post]
|
162
|
+
end
|
170
163
|
|
164
|
+
action_item :publish, only: :show do
|
165
|
+
if !post.published? && authorized?(:publish, post)
|
166
|
+
link_to "Publish", publish_admin_post_path(post), method: :post
|
171
167
|
end
|
168
|
+
end
|
172
169
|
|
170
|
+
end
|
171
|
+
```
|
173
172
|
|
174
173
|
## Using the CanCan Adapter
|
175
174
|
|
176
175
|
Sub-classing `ActiveAdmin::AuthorizationAdapter` is fairly low level. Many times
|
177
176
|
it's nicer to have a simpler DSL for managing authorization. Active Admin
|
178
|
-
provides an adapter out of the box for [CanCan](https://github.com/ryanb/cancan)
|
177
|
+
provides an adapter out of the box for [CanCan](https://github.com/ryanb/cancan)
|
178
|
+
and [CanCanCan](https://github.com/CanCanCommunity/cancancan).
|
179
179
|
|
180
180
|
To use the CanCan adapter, simply update the configuration in the Active Admin
|
181
181
|
initializer:
|
182
182
|
|
183
|
-
|
184
|
-
|
183
|
+
```ruby
|
184
|
+
config.authorization_adapter = ActiveAdmin::CanCanAdapter
|
185
|
+
```
|
186
|
+
|
185
187
|
You can also specify a method to be called on unauthorized access. This is necessary
|
186
188
|
in order to prevent a redirect loop that can happen if a user tries to access a page
|
187
|
-
they don't have permissions for (see [#2081](https://github.com/
|
189
|
+
they don't have permissions for (see [#2081](https://github.com/activeadmin/activeadmin/issues/2081)).
|
190
|
+
|
188
191
|
```ruby
|
189
192
|
config.on_unauthorized_access = :access_denied
|
190
|
-
```
|
193
|
+
```
|
194
|
+
|
191
195
|
The method `access_denied` would be defined in `application_controller.rb`. Here is one
|
192
196
|
example that redirects the user from the page they don't have permission to
|
193
197
|
access to a resource they have permission to access (organizations in this case), and
|
@@ -196,9 +200,9 @@ also displays the error message in the browser:
|
|
196
200
|
```ruby
|
197
201
|
class ApplicationController < ActionController::Base
|
198
202
|
protect_from_forgery
|
199
|
-
|
203
|
+
|
200
204
|
def access_denied(exception)
|
201
|
-
redirect_to admin_organizations_path, :
|
205
|
+
redirect_to admin_organizations_path, alert: exception.message
|
202
206
|
end
|
203
207
|
end
|
204
208
|
```
|
@@ -206,22 +210,39 @@ end
|
|
206
210
|
By default this will use the ability class named "Ability". This can also be
|
207
211
|
changed from the initializer:
|
208
212
|
|
209
|
-
|
213
|
+
```ruby
|
214
|
+
config.cancan_ability_class = "MyCustomAbility"
|
215
|
+
```
|
210
216
|
|
211
|
-
Now you can simply use CanCan the way that you would expect and
|
212
|
-
will use it for authorization:
|
217
|
+
Now you can simply use CanCan or CanCanCan the way that you would expect and
|
218
|
+
Active Admin will use it for authorization:
|
213
219
|
|
214
|
-
|
215
|
-
|
216
|
-
|
220
|
+
```ruby
|
221
|
+
# app/models/ability.rb
|
222
|
+
class Ability
|
223
|
+
include CanCan::Ability
|
224
|
+
|
225
|
+
def initialize(user)
|
226
|
+
can :manage, Post
|
227
|
+
can :read, User
|
228
|
+
can :manage, User, id: user.id
|
229
|
+
can :read, ActiveAdmin::Page, name: "Dashboard", namespace_name: :admin
|
230
|
+
end
|
217
231
|
|
218
|
-
|
219
|
-
|
220
|
-
can :read, User
|
221
|
-
can :manage, User, :id => user.id
|
222
|
-
can :read, ActiveAdmin::Page, :name => "Dashboard"
|
223
|
-
end
|
232
|
+
end
|
233
|
+
```
|
224
234
|
|
225
|
-
|
235
|
+
To view more details about the API's, visit project pages of [CanCan](https://github.com/ryanb/cancan) and [CanCanCan](https://github.com/CanCanCommunity/cancancan).
|
236
|
+
|
237
|
+
## Using the Pundit Adapter
|
238
|
+
|
239
|
+
Active Admin provides an adapter out of the box also for [Pundit](https://github.com/elabs/pundit).
|
240
|
+
|
241
|
+
To use the Pundit adapter, simply update the configuration in the Active Admin
|
242
|
+
initializer:
|
243
|
+
|
244
|
+
```ruby
|
245
|
+
config.authorization_adapter = ActiveAdmin::PunditAdapter
|
246
|
+
```
|
226
247
|
|
227
|
-
|
248
|
+
You can simply use Pundit the way that you would expect and Active Admin will use it for authorization. Check Pundit's documentation to [set up Pundit in your application](https://github.com/elabs/pundit#installation). If you want to use batch actions just ensure that `destroy_all?` method is defined in your policy class. You can use this [template policy](https://github.com/activeadmin/activeadmin/blob/master/spec/support/templates/policies/application_policy.rb) in your application instead of default one generated by Pundit's `rails g pundit:install` command.
|