activeadmin-orac 1.0.0.pre4
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 +15 -0
- data/.gitignore +49 -0
- data/.hound.yml +14 -0
- data/.travis.yml +40 -0
- data/.yardopts +8 -0
- data/CHANGELOG.md +120 -0
- data/CODE_OF_CONDUCT.md +22 -0
- data/CONTRIBUTING.md +144 -0
- data/Gemfile +78 -0
- data/Guardfile +8 -0
- data/LICENSE +20 -0
- data/README.md +102 -0
- data/Rakefile +33 -0
- data/activeadmin.gemspec +31 -0
- data/app/assets/images/active_admin/datepicker/datepicker-input-icon.png +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/base.js.coffee +9 -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/initializers/batch_actions.js.coffee +7 -0
- data/app/assets/javascripts/active_admin/initializers/datepicker.js.coffee +10 -0
- data/app/assets/javascripts/active_admin/initializers/filters.js.coffee +22 -0
- data/app/assets/javascripts/active_admin/initializers/tabs.js.coffee +3 -0
- data/app/assets/javascripts/active_admin/jquery_ui.js.erb +11 -0
- data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +39 -0
- data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +44 -0
- 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 +45 -0
- data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +42 -0
- data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +24 -0
- data/app/assets/stylesheets/active_admin/_base.scss +41 -0
- data/app/assets/stylesheets/active_admin/_forms.scss +333 -0
- data/app/assets/stylesheets/active_admin/_header.scss +156 -0
- data/app/assets/stylesheets/active_admin/_mixins.scss +1 -0
- data/app/assets/stylesheets/active_admin/_typography.scss +100 -0
- data/app/assets/stylesheets/active_admin/components/_batch_actions.scss +11 -0
- data/app/assets/stylesheets/active_admin/components/_blank_slates.scss +30 -0
- data/app/assets/stylesheets/active_admin/components/_breadcrumbs.scss +20 -0
- data/app/assets/stylesheets/active_admin/components/_buttons.scss +6 -0
- data/app/assets/stylesheets/active_admin/components/_columns.scss +3 -0
- data/app/assets/stylesheets/active_admin/components/_comments.scss +41 -0
- data/app/assets/stylesheets/active_admin/components/_date_picker.scss +149 -0
- data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +152 -0
- data/app/assets/stylesheets/active_admin/components/_flash_messages.scss +37 -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/_modal_dialog.scss +34 -0
- data/app/assets/stylesheets/active_admin/components/_pagination.scss +44 -0
- data/app/assets/stylesheets/active_admin/components/_panels.scss +6 -0
- data/app/assets/stylesheets/active_admin/components/_scopes.scss +10 -0
- data/app/assets/stylesheets/active_admin/components/_status_tags.scss +16 -0
- data/app/assets/stylesheets/active_admin/components/_table_tools.scss +67 -0
- data/app/assets/stylesheets/active_admin/components/_tables.scss +110 -0
- 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.scss +10 -0
- data/app/assets/stylesheets/active_admin/mixins/_buttons.scss +65 -0
- data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +28 -0
- data/app/assets/stylesheets/active_admin/mixins/_reset.scss +165 -0
- data/app/assets/stylesheets/active_admin/mixins/_rounded.scss +22 -0
- data/app/assets/stylesheets/active_admin/mixins/_sections.scss +41 -0
- data/app/assets/stylesheets/active_admin/mixins/_shadows.scss +15 -0
- data/app/assets/stylesheets/active_admin/mixins/_typography.scss +3 -0
- data/app/assets/stylesheets/active_admin/mixins/_utilities.scss +17 -0
- data/app/assets/stylesheets/active_admin/mixins/_variables.scss +34 -0
- data/app/assets/stylesheets/active_admin/pages/_logged_out.scss +44 -0
- data/app/assets/stylesheets/active_admin/print.scss +288 -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 +41 -0
- data/app/views/active_admin/devise/confirmations/new.html.erb +15 -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 +18 -0
- data/app/views/active_admin/devise/passwords/new.html.erb +15 -0
- data/app/views/active_admin/devise/registrations/new.html.erb +22 -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 +15 -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.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 +39 -0
- data/config/locales/ar.yml +136 -0
- data/config/locales/bg.yml +121 -0
- data/config/locales/bs.yml +122 -0
- data/config/locales/ca.yml +107 -0
- data/config/locales/cs.yml +110 -0
- data/config/locales/da.yml +106 -0
- data/config/locales/de-CH.yml +102 -0
- data/config/locales/de.yml +135 -0
- data/config/locales/el.yml +127 -0
- data/config/locales/en-GB.yml +98 -0
- data/config/locales/en.yml +136 -0
- data/config/locales/es-MX.yml +94 -0
- data/config/locales/es.yml +136 -0
- data/config/locales/fa.yml +120 -0
- data/config/locales/fi.yml +113 -0
- data/config/locales/fr.yml +119 -0
- data/config/locales/he.yml +95 -0
- data/config/locales/hr.yml +124 -0
- data/config/locales/hu.yml +99 -0
- data/config/locales/id.yml +136 -0
- data/config/locales/it.yml +136 -0
- data/config/locales/ja.yml +136 -0
- data/config/locales/ko.yml +121 -0
- data/config/locales/lt.yml +121 -0
- data/config/locales/lv.yml +93 -0
- data/config/locales/nb.yml +121 -0
- data/config/locales/nl.yml +134 -0
- data/config/locales/pl.yml +98 -0
- data/config/locales/pt-BR.yml +136 -0
- data/config/locales/pt-PT.yml +93 -0
- data/config/locales/ro.yml +97 -0
- data/config/locales/ru.yml +140 -0
- data/config/locales/sv-SE.yml +134 -0
- data/config/locales/tr.yml +136 -0
- data/config/locales/uk.yml +137 -0
- data/config/locales/vi.yml +94 -0
- data/config/locales/zh-CN.yml +112 -0
- data/config/locales/zh-TW.yml +136 -0
- data/cucumber.yml +3 -0
- data/docs/0-installation.md +112 -0
- data/docs/1-general-configuration.md +171 -0
- data/docs/10-custom-pages.md +106 -0
- data/docs/11-decorators.md +55 -0
- data/docs/12-arbre-components.md +150 -0
- data/docs/13-authorization-adapter.md +248 -0
- data/docs/14-gotchas.md +116 -0
- data/docs/2-resource-customization.md +422 -0
- data/docs/3-index-pages.md +272 -0
- data/docs/3-index-pages/custom-index.md +31 -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 +213 -0
- data/docs/4-csv-format.md +58 -0
- data/docs/5-forms.md +172 -0
- data/docs/6-show-pages.md +105 -0
- data/docs/7-sidebars.md +71 -0
- data/docs/8-custom-actions.md +160 -0
- data/docs/9-batch-actions.md +233 -0
- data/docs/README.md +24 -0
- data/features/action_item.feature +73 -0
- data/features/authorization.feature +64 -0
- data/features/authorization_cancan.feature +52 -0
- data/features/authorization_pundit.feature +37 -0
- data/features/belongs_to.feature +66 -0
- data/features/breadcrumb.feature +75 -0
- data/features/comments/commenting.feature +171 -0
- data/features/comments/viewing_index.feature +19 -0
- data/features/dashboard.feature +16 -0
- data/features/decorators.feature +43 -0
- data/features/development_reloading.feature +30 -0
- data/features/edit_page.feature +117 -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 +43 -0
- data/features/index/batch_actions.feature +196 -0
- data/features/index/filters.feature +161 -0
- data/features/index/format_as_csv.feature +203 -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 +291 -0
- data/features/index/index_blank_slate.feature +83 -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 +42 -0
- data/features/index/pagination.feature +63 -0
- data/features/index/switch_index_view.feature +73 -0
- data/features/menu.feature +53 -0
- data/features/meta_tags.feature +21 -0
- data/features/new_page.feature +109 -0
- data/features/registering_assets.feature +34 -0
- data/features/registering_pages.feature +148 -0
- data/features/registering_resources.feature +33 -0
- data/features/renamed_resource.feature +32 -0
- data/features/root_to.feature +17 -0
- data/features/show/columns.feature +40 -0
- data/features/show/default_content.feature +44 -0
- data/features/show/page_title.feature +59 -0
- data/features/show/tabs.feature +27 -0
- data/features/sidebar_sections.feature +210 -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 +20 -0
- data/features/step_definitions/additional_web_steps.rb +81 -0
- data/features/step_definitions/asset_steps.rb +15 -0
- data/features/step_definitions/attribute_steps.rb +18 -0
- data/features/step_definitions/batch_action_steps.rb +81 -0
- data/features/step_definitions/blog_steps.rb +3 -0
- data/features/step_definitions/breadcrumb_steps.rb +3 -0
- data/features/step_definitions/column_steps.rb +8 -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 +35 -0
- data/features/step_definitions/filter_steps.rb +39 -0
- data/features/step_definitions/flash_steps.rb +11 -0
- data/features/step_definitions/format_steps.rb +52 -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/meta_tag_steps.rb +3 -0
- data/features/step_definitions/pagination_steps.rb +15 -0
- data/features/step_definitions/sidebar_steps.rb +13 -0
- data/features/step_definitions/site_title_steps.rb +17 -0
- data/features/step_definitions/symbol_leak_steps.rb +3 -0
- data/features/step_definitions/tab_steps.rb +8 -0
- data/features/step_definitions/table_steps.rb +116 -0
- data/features/step_definitions/user_steps.rb +52 -0
- data/features/step_definitions/web_steps.rb +85 -0
- data/features/sti_resource.feature +65 -0
- data/features/strong_parameters.feature +73 -0
- data/features/support/env.rb +162 -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 +36 -0
- data/features/users/logging_out.feature +13 -0
- data/features/users/resetting_password.feature +34 -0
- data/lib/active_admin.rb +130 -0
- data/lib/active_admin/abstract_view_factory.rb +85 -0
- data/lib/active_admin/application.rb +324 -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.rb +87 -0
- data/lib/active_admin/base_controller/authorization.rb +130 -0
- data/lib/active_admin/base_controller/menu.rb +38 -0
- data/lib/active_admin/batch_actions.rb +16 -0
- data/lib/active_admin/batch_actions/controller.rb +40 -0
- data/lib/active_admin/batch_actions/resource_extension.rb +159 -0
- data/lib/active_admin/batch_actions/views/batch_action_form.rb +38 -0
- data/lib/active_admin/batch_actions/views/batch_action_selector.rb +58 -0
- data/lib/active_admin/batch_actions/views/selection_cells.rb +37 -0
- data/lib/active_admin/callbacks.rb +88 -0
- data/lib/active_admin/cancan_adapter.rb +36 -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 +129 -0
- data/lib/active_admin/dependency.rb +168 -0
- data/lib/active_admin/deprecation.rb +35 -0
- data/lib/active_admin/devise.rb +80 -0
- data/lib/active_admin/dsl.rb +173 -0
- data/lib/active_admin/engine.rb +16 -0
- data/lib/active_admin/error.rb +62 -0
- data/lib/active_admin/event.rb +24 -0
- data/lib/active_admin/filters.rb +9 -0
- data/lib/active_admin/filters/active.rb +30 -0
- data/lib/active_admin/filters/dsl.rb +21 -0
- data/lib/active_admin/filters/forms.rb +83 -0
- data/lib/active_admin/filters/formtastic_addons.rb +79 -0
- data/lib/active_admin/filters/humanized.rb +68 -0
- data/lib/active_admin/filters/resource_extension.rb +194 -0
- data/lib/active_admin/form_builder.rb +145 -0
- data/lib/active_admin/generators/boilerplate.rb +45 -0
- data/lib/active_admin/helpers/collection.rb +17 -0
- data/lib/active_admin/helpers/i18n.rb +7 -0
- data/lib/active_admin/helpers/optional_display.rb +38 -0
- data/lib/active_admin/helpers/routes/url_helpers.rb +15 -0
- data/lib/active_admin/helpers/scope_chain.rb +23 -0
- data/lib/active_admin/helpers/settings.rb +115 -0
- data/lib/active_admin/inputs.rb +20 -0
- data/lib/active_admin/inputs/datepicker_input.rb +20 -0
- data/lib/active_admin/inputs/filters/base.rb +44 -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_picker_input.rb +13 -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 +55 -0
- data/lib/active_admin/inputs/filters/string_input.rb +26 -0
- data/lib/active_admin/menu.rb +108 -0
- data/lib/active_admin/menu_collection.rb +93 -0
- data/lib/active_admin/menu_item.rb +97 -0
- data/lib/active_admin/namespace.rb +247 -0
- 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 +95 -0
- data/lib/active_admin/orm/active_record/comments/comment.rb +45 -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.rb +2 -0
- data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +88 -0
- data/lib/active_admin/orm/mongoid.rb +1 -0
- data/lib/active_admin/orm/mongoid/.gitkeep +0 -0
- data/lib/active_admin/page.rb +92 -0
- data/lib/active_admin/page_controller.rb +33 -0
- data/lib/active_admin/page_dsl.rb +28 -0
- data/lib/active_admin/page_presenter.rb +32 -0
- data/lib/active_admin/pundit_adapter.rb +68 -0
- data/lib/active_admin/reloader.rb +25 -0
- data/lib/active_admin/resource.rb +168 -0
- data/lib/active_admin/resource/action_items.rb +108 -0
- data/lib/active_admin/resource/belongs_to.rb +44 -0
- data/lib/active_admin/resource/controllers.rb +19 -0
- data/lib/active_admin/resource/includes.rb +12 -0
- data/lib/active_admin/resource/menu.rb +64 -0
- data/lib/active_admin/resource/naming.rb +62 -0
- data/lib/active_admin/resource/page_presenters.rb +82 -0
- data/lib/active_admin/resource/pagination.rb +23 -0
- data/lib/active_admin/resource/routes.rb +115 -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 +28 -0
- data/lib/active_admin/resource_collection.rb +72 -0
- data/lib/active_admin/resource_controller.rb +51 -0
- data/lib/active_admin/resource_controller/action_builder.rb +21 -0
- data/lib/active_admin/resource_controller/data_access.rb +317 -0
- data/lib/active_admin/resource_controller/decorators.rb +102 -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/streaming.rb +43 -0
- data/lib/active_admin/resource_dsl.rb +190 -0
- data/lib/active_admin/router.rb +106 -0
- data/lib/active_admin/scope.rb +56 -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.rb +19 -0
- data/lib/active_admin/view_helpers/active_admin_application_helper.rb +12 -0
- data/lib/active_admin/view_helpers/auto_link_helper.rb +45 -0
- data/lib/active_admin/view_helpers/breadcrumb_helper.rb +33 -0
- data/lib/active_admin/view_helpers/display_helper.rb +97 -0
- data/lib/active_admin/view_helpers/download_format_links_helper.rb +46 -0
- data/lib/active_admin/view_helpers/fields_for.rb +51 -0
- data/lib/active_admin/view_helpers/flash_helper.rb +14 -0
- data/lib/active_admin/view_helpers/form_helper.rb +20 -0
- data/lib/active_admin/view_helpers/method_or_proc_helper.rb +97 -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/views.rb +8 -0
- data/lib/active_admin/views/action_items.rb +17 -0
- data/lib/active_admin/views/components/active_admin_form.rb +124 -0
- data/lib/active_admin/views/components/attributes_table.rb +94 -0
- data/lib/active_admin/views/components/blank_slate.rb +17 -0
- data/lib/active_admin/views/components/columns.rb +161 -0
- data/lib/active_admin/views/components/dropdown_menu.rb +71 -0
- data/lib/active_admin/views/components/index_list.rb +68 -0
- data/lib/active_admin/views/components/paginated_collection.rb +163 -0
- data/lib/active_admin/views/components/panel.rb +38 -0
- data/lib/active_admin/views/components/scopes.rb +66 -0
- data/lib/active_admin/views/components/sidebar_section.rb +34 -0
- data/lib/active_admin/views/components/site_title.rb +55 -0
- data/lib/active_admin/views/components/status_tag.rb +80 -0
- data/lib/active_admin/views/components/table_for.rb +218 -0
- 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 +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 +373 -0
- data/lib/active_admin/views/pages/base.rb +147 -0
- data/lib/active_admin/views/pages/form.rb +65 -0
- data/lib/active_admin/views/pages/index.rb +163 -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 +66 -0
- data/lib/active_admin/views/title_bar.rb +55 -0
- data/lib/activeadmin.rb +1 -0
- data/lib/generators/active_admin/assets/assets_generator.rb +14 -0
- data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +1 -0
- data/lib/generators/active_admin/assets/templates/active_admin.scss +17 -0
- data/lib/generators/active_admin/devise/devise_generator.rb +65 -0
- data/lib/generators/active_admin/install/install_generator.rb +45 -0
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +272 -0
- data/lib/generators/active_admin/install/templates/admin_user.rb.erb +30 -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/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 +20 -0
- data/lib/generators/active_admin/resource/templates/admin.rb +45 -0
- data/lib/ransack_ext.rb +20 -0
- data/script/local +53 -0
- data/script/travis_cache +107 -0
- data/script/use_rails +53 -0
- data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +50 -0
- data/spec/javascripts/coffeescripts/jquery.aa.flash.js.coffee +25 -0
- data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +34 -0
- data/spec/javascripts/fixtures/checkboxes.html +9 -0
- data/spec/javascripts/fixtures/flashes.html +2 -0
- data/spec/javascripts/fixtures/table_checkboxes.html +17 -0
- data/spec/javascripts/helpers/SpecHelper.js +3 -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/rails_helper.rb +161 -0
- data/spec/requests/default_namespace_spec.rb +61 -0
- data/spec/requests/javascript_spec.rb +22 -0
- data/spec/requests/memory_spec.rb +21 -0
- data/spec/requests/stylesheets_spec.rb +18 -0
- data/spec/spec_helper.rb +17 -0
- data/spec/support/active_admin_request_helpers.rb +27 -0
- data/spec/support/deferred_garbage_collection.rb +19 -0
- data/spec/support/detect_rails_version.rb +34 -0
- data/spec/support/jslint.yml +80 -0
- data/spec/support/rails_template.rb +162 -0
- data/spec/support/rails_template_with_data.rb +74 -0
- data/spec/support/templates/admin/stores.rb +9 -0
- data/spec/support/templates/en.yml +8 -0
- data/spec/support/templates/manifest.js +3 -0
- 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 +11 -0
- data/spec/unit/abstract_view_factory_spec.rb +79 -0
- data/spec/unit/action_builder_spec.rb +134 -0
- data/spec/unit/active_admin_spec.rb +11 -0
- data/spec/unit/application_spec.rb +165 -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/authorization/index_overriding_spec.rb +23 -0
- data/spec/unit/auto_link_spec.rb +69 -0
- data/spec/unit/batch_actions/resource_spec.rb +97 -0
- data/spec/unit/batch_actions/settings_spec.rb +61 -0
- data/spec/unit/belongs_to_spec.rb +65 -0
- data/spec/unit/cancan_adapter_spec.rb +43 -0
- data/spec/unit/comments_spec.rb +188 -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 +41 -0
- data/spec/unit/csv_builder_spec.rb +303 -0
- data/spec/unit/dependency_spec.rb +135 -0
- data/spec/unit/devise_spec.rb +96 -0
- data/spec/unit/dsl_spec.rb +122 -0
- data/spec/unit/filters/filter_form_builder_spec.rb +434 -0
- data/spec/unit/filters/humanized_spec.rb +64 -0
- data/spec/unit/filters/resource_spec.rb +128 -0
- data/spec/unit/form_builder_spec.rb +932 -0
- data/spec/unit/generators/install_spec.rb +24 -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/i18n_spec.rb +12 -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 +73 -0
- data/spec/unit/namespace/register_resource_spec.rb +160 -0
- data/spec/unit/namespace_spec.rb +103 -0
- data/spec/unit/order_clause_spec.rb +81 -0
- data/spec/unit/page_controller_spec.rb +5 -0
- data/spec/unit/page_spec.rb +78 -0
- data/spec/unit/pretty_format_spec.rb +77 -0
- data/spec/unit/pundit_adapter_spec.rb +98 -0
- data/spec/unit/resource/action_items_spec.rb +65 -0
- data/spec/unit/resource/includes_spec.rb +21 -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 +77 -0
- data/spec/unit/resource/scopes_spec.rb +50 -0
- data/spec/unit/resource/sidebars_spec.rb +43 -0
- data/spec/unit/resource_collection_spec.rb +175 -0
- data/spec/unit/resource_controller/data_access_spec.rb +140 -0
- data/spec/unit/resource_controller/decorators_spec.rb +94 -0
- data/spec/unit/resource_controller/sidebars_spec.rb +38 -0
- data/spec/unit/resource_controller_spec.rb +269 -0
- data/spec/unit/resource_registration_spec.rb +56 -0
- data/spec/unit/resource_spec.rb +337 -0
- data/spec/unit/routing_spec.rb +185 -0
- data/spec/unit/scope_spec.rb +185 -0
- data/spec/unit/settings_spec.rb +118 -0
- data/spec/unit/view_factory_spec.rb +19 -0
- data/spec/unit/view_helpers/breadcrumbs_spec.rb +217 -0
- data/spec/unit/view_helpers/display_helper_spec.rb +165 -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/flash_helper_spec.rb +25 -0
- data/spec/unit/view_helpers/form_helper_spec.rb +43 -0
- data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +139 -0
- data/spec/unit/views/components/attributes_table_spec.rb +272 -0
- data/spec/unit/views/components/batch_action_selector_spec.rb +43 -0
- data/spec/unit/views/components/blank_slate_spec.rb +27 -0
- data/spec/unit/views/components/columns_spec.rb +189 -0
- data/spec/unit/views/components/index_list_spec.rb +35 -0
- data/spec/unit/views/components/index_table_for_spec.rb +127 -0
- data/spec/unit/views/components/paginated_collection_spec.rb +249 -0
- data/spec/unit/views/components/panel_spec.rb +58 -0
- data/spec/unit/views/components/sidebar_section_spec.rb +68 -0
- data/spec/unit/views/components/site_title_spec.rb +78 -0
- data/spec/unit/views/components/status_tag_spec.rb +249 -0
- data/spec/unit/views/components/table_for_spec.rb +434 -0
- data/spec/unit/views/components/tabs_spec.rb +39 -0
- data/spec/unit/views/components/unsupported_browser_spec.rb +41 -0
- data/spec/unit/views/index_as_blog_spec.rb +76 -0
- data/spec/unit/views/pages/form_spec.rb +51 -0
- data/spec/unit/views/pages/index_spec.rb +60 -0
- data/spec/unit/views/pages/layout_spec.rb +59 -0
- data/spec/unit/views/pages/show_spec.rb +33 -0
- data/spec/unit/views/tabbed_navigation_spec.rb +158 -0
- data/tasks/docs.rake +37 -0
- data/tasks/parallel_tests.rake +66 -0
- data/tasks/test.rake +91 -0
- data/tasks/yard.rake +9 -0
- metadata +974 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Decorators
|
|
2
|
+
|
|
3
|
+
Active Admin allows you to use the decorator pattern to provide view-specific
|
|
4
|
+
versions of a resource. [Draper](https://github.com/drapergem/draper) is
|
|
5
|
+
recommended but not required.
|
|
6
|
+
|
|
7
|
+
To use decorator support without Draper, your decorator must support a variety
|
|
8
|
+
of collection methods to support pagination, filtering, etc. See
|
|
9
|
+
[this github issue discussion](https://github.com/activeadmin/activeadmin/issues/3600)
|
|
10
|
+
and [this gem](https://github.com/kiote/activeadmin-poro-decorator) for more details.
|
|
11
|
+
|
|
12
|
+
## Example usage
|
|
13
|
+
|
|
14
|
+
```ruby
|
|
15
|
+
# app/models/post.rb
|
|
16
|
+
class Post < ActiveRecord::Base
|
|
17
|
+
# has title, content, and image_url
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# app/decorators/post_decorator.rb
|
|
21
|
+
class PostDecorator < Draper::Decorator
|
|
22
|
+
delegate_all
|
|
23
|
+
|
|
24
|
+
def image
|
|
25
|
+
h.image_tag model.image_url
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# app/admin/post.rb
|
|
30
|
+
ActiveAdmin.register Post do
|
|
31
|
+
decorate_with PostDecorator
|
|
32
|
+
|
|
33
|
+
index do
|
|
34
|
+
column :title
|
|
35
|
+
column :image
|
|
36
|
+
actions
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Forms
|
|
42
|
+
|
|
43
|
+
By default, ActiveAdmin does *not* decorate the resource used to render forms.
|
|
44
|
+
If you need ActiveAdmin to decorate the forms, you can pass `decorate: true` to the
|
|
45
|
+
form block.
|
|
46
|
+
|
|
47
|
+
```ruby
|
|
48
|
+
ActiveAdmin.register Post do
|
|
49
|
+
decorate_with PostDecorator
|
|
50
|
+
|
|
51
|
+
form decorate: true do |f|
|
|
52
|
+
# ...
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
```
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# Arbre Components
|
|
2
|
+
|
|
3
|
+
Arbre allows the creation of shareable and extendable HTML components and is
|
|
4
|
+
used throughout Active Admin to create view components.
|
|
5
|
+
|
|
6
|
+
## Text Node
|
|
7
|
+
|
|
8
|
+
Sometimes it makes sense to insert something into a registered resource like a
|
|
9
|
+
non-breaking space or some text. The text_node method can be used to insert
|
|
10
|
+
these elements into the page inside of other Arbre components or resource
|
|
11
|
+
controller functions.
|
|
12
|
+
|
|
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})
|
|
22
|
+
text_node " ".html_safe
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Panels
|
|
32
|
+
|
|
33
|
+
A panel is a component that takes up all available horizontal space and takes a
|
|
34
|
+
title and a hash of attributes as arguments. If a sidebar is present, a panel
|
|
35
|
+
will take up the remaining space.
|
|
36
|
+
|
|
37
|
+
This will create two stacked panels:
|
|
38
|
+
|
|
39
|
+
```ruby
|
|
40
|
+
show do
|
|
41
|
+
panel "Post Details" do
|
|
42
|
+
render partial: "details", locals: {post: post}
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
panel "Post Tags" do
|
|
46
|
+
render partial: "tags", locals: {post: post}
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Columns
|
|
52
|
+
|
|
53
|
+
The Columns component allows you draw content into scalable columns. All you
|
|
54
|
+
need to do is define the number of columns and the component will take care of
|
|
55
|
+
the rest.
|
|
56
|
+
|
|
57
|
+
#### Simple Columns
|
|
58
|
+
|
|
59
|
+
To create simple columns, use the `columns` method. Within the block, call
|
|
60
|
+
the #column method to create a new column.
|
|
61
|
+
|
|
62
|
+
```ruby
|
|
63
|
+
columns do
|
|
64
|
+
column do
|
|
65
|
+
span "Column #1"
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
column do
|
|
69
|
+
span "Column #2"
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Spanning Multiple Columns
|
|
75
|
+
|
|
76
|
+
To create columns that have multiple spans, pass the :span option to the column
|
|
77
|
+
method.
|
|
78
|
+
|
|
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
|
+
```
|
|
89
|
+
|
|
90
|
+
By default, each column spans 1 column. The above layout would have 2 columns,
|
|
91
|
+
the first being twice as large as the second.
|
|
92
|
+
|
|
93
|
+
### Custom Column Widths
|
|
94
|
+
|
|
95
|
+
Active Admin uses a fluid width layout, causing column width to be defined
|
|
96
|
+
using percentages. Due to using this style of layout, columns can shrink or
|
|
97
|
+
expand past points that may not be desirable. To overcome this issue,
|
|
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
|
+
```
|
|
110
|
+
|
|
111
|
+
In the above example, the first column will not grow larger than 200px and will
|
|
112
|
+
not shrink less than 100px.
|
|
113
|
+
|
|
114
|
+
## Table For
|
|
115
|
+
|
|
116
|
+
Table For provides the ability to create tables like those present
|
|
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
|
|
131
|
+
takes a block.
|
|
132
|
+
|
|
133
|
+
## Status tag
|
|
134
|
+
|
|
135
|
+
Status tags provide convenient syntactic sugar for styling items that have
|
|
136
|
+
status. A common example of where the status tag could be useful is for orders
|
|
137
|
+
that are complete or in progress. `status_tag` takes a status, like
|
|
138
|
+
"In Progress", a type, which defaults to nil, and a hash of options. The
|
|
139
|
+
status_tag will generate html markup that Active Admin css uses in styling.
|
|
140
|
+
|
|
141
|
+
```ruby
|
|
142
|
+
status_tag 'In Progress'
|
|
143
|
+
# => <span class='status_tag in_progress'>In Progress</span>
|
|
144
|
+
|
|
145
|
+
status_tag 'active', :ok
|
|
146
|
+
# => <span class='status_tag active ok'>Active</span>
|
|
147
|
+
|
|
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
|
+
```
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
# Authorization Adapter
|
|
2
|
+
|
|
3
|
+
Active Admin offers the ability to define and use your own authorization
|
|
4
|
+
adapter. If implemented, the '#authorized?' will be called when an action is
|
|
5
|
+
taken. By default, '#authorized?' returns true.
|
|
6
|
+
|
|
7
|
+
## Setting up your own AuthorizationAdapter
|
|
8
|
+
|
|
9
|
+
Setting up your own `AuthorizationAdapter` is easy! The following example shows
|
|
10
|
+
how to set up and tie your authorization adapter class to Active Admin:
|
|
11
|
+
|
|
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
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
end
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
In order to hook up `OnlyAuthorsAuthorization` to Active Admin, go to your
|
|
34
|
+
application's `config/initializers/active_admin.rb` and add/modify the line:
|
|
35
|
+
|
|
36
|
+
```ruby
|
|
37
|
+
config.authorization_adapter = "OnlyAuthorsAuthorization"
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Authorization adapters can be configured per ActiveAdmin namespace as well, for example:
|
|
41
|
+
|
|
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
|
+
```
|
|
52
|
+
|
|
53
|
+
Now, whenever a controller action is performed, the `OnlyAuthorsAuthorization`'s
|
|
54
|
+
`#authorized?` method will be called.
|
|
55
|
+
|
|
56
|
+
## Getting Access to the Current User
|
|
57
|
+
|
|
58
|
+
From within your authorization adapter, you can call the `#user` method to
|
|
59
|
+
retrieve the current user.
|
|
60
|
+
|
|
61
|
+
```ruby
|
|
62
|
+
class OnlyAdmins < ActiveAdmin::AuthorizationAdapter
|
|
63
|
+
|
|
64
|
+
def authorized?(action, subject = nil)
|
|
65
|
+
user.admin?
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
end
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Scoping Collections in Authorization Adapters
|
|
72
|
+
|
|
73
|
+
`ActiveAdmin::AuthorizationAdapter` also provides a hook method (`#scope_collection`)
|
|
74
|
+
for the adapter to scope the resource's collection. For example, you may want to
|
|
75
|
+
centralize the scoping:
|
|
76
|
+
|
|
77
|
+
```ruby
|
|
78
|
+
class OnlyMyAccount < ActiveAdmin::AuthorizationAdapter
|
|
79
|
+
|
|
80
|
+
def authorized?(action, subject = nil)
|
|
81
|
+
subject.account == user.account
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def scope_collection(collection, action = Auth::READ)
|
|
85
|
+
collection.where(account_id: user.account_id)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
end
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
All collections presented on Index Screens will be passed through this method
|
|
92
|
+
and will be scoped accordingly.
|
|
93
|
+
|
|
94
|
+
## Managing Access to Pages
|
|
95
|
+
|
|
96
|
+
Pages, just like resources, get authorized too. When authorizing a page, the
|
|
97
|
+
subject will be an instance of `ActiveAdmin::Page`.
|
|
98
|
+
|
|
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
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## Action Types
|
|
113
|
+
|
|
114
|
+
By default Active Admin simplifies the controller actions into 4 actions:
|
|
115
|
+
|
|
116
|
+
* `:read` - This controls if the user can view the menu item as well as the
|
|
117
|
+
index and show screens.
|
|
118
|
+
* `:create` - This controls if the user can view the new screen and submit
|
|
119
|
+
the form to the create action.
|
|
120
|
+
* `:update` - This controls if the user can view the edit screen and submit
|
|
121
|
+
the form to the update action.
|
|
122
|
+
* `:destroy` - This controls if the user can delete a resource.
|
|
123
|
+
|
|
124
|
+
Each of these actions is available as a constant. Eg: `:read` is available as
|
|
125
|
+
`ActiveAdmin::Authorization::READ`.
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
## Checking for Authorization in Controllers and Views
|
|
129
|
+
|
|
130
|
+
Active Admin provides a helper method to check if the current user is
|
|
131
|
+
authorized to perform an action on a subject.
|
|
132
|
+
|
|
133
|
+
Simply use the `#authorized?(action, subject) method to check.
|
|
134
|
+
|
|
135
|
+
```ruby
|
|
136
|
+
ActiveAdmin.register Post do
|
|
137
|
+
|
|
138
|
+
index do
|
|
139
|
+
column :title
|
|
140
|
+
column '' do |post|
|
|
141
|
+
link_to 'Edit', admin_post_path(post) if authorized? :update, post
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
end
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
If you are implementing a custom controller action, you can use the
|
|
149
|
+
`#authorize!` method to raise an `ActiveAdmin::AccessDenied` exception.
|
|
150
|
+
|
|
151
|
+
```ruby
|
|
152
|
+
ActiveAdmin.register Post do
|
|
153
|
+
|
|
154
|
+
member_action :publish, method: :post do
|
|
155
|
+
post = Post.find(params[:id])
|
|
156
|
+
|
|
157
|
+
authorize! :publish, post
|
|
158
|
+
post.publish!
|
|
159
|
+
|
|
160
|
+
flash[:notice] = "Post has been published"
|
|
161
|
+
redirect_to [:admin, post]
|
|
162
|
+
end
|
|
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
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
end
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
## Using the CanCan Adapter
|
|
174
|
+
|
|
175
|
+
Sub-classing `ActiveAdmin::AuthorizationAdapter` is fairly low level. Many times
|
|
176
|
+
it's nicer to have a simpler DSL for managing authorization. Active Admin
|
|
177
|
+
provides an adapter out of the box for [CanCan](https://github.com/ryanb/cancan)
|
|
178
|
+
and [CanCanCan](https://github.com/CanCanCommunity/cancancan).
|
|
179
|
+
|
|
180
|
+
To use the CanCan adapter, simply update the configuration in the Active Admin
|
|
181
|
+
initializer:
|
|
182
|
+
|
|
183
|
+
```ruby
|
|
184
|
+
config.authorization_adapter = ActiveAdmin::CanCanAdapter
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
You can also specify a method to be called on unauthorized access. This is necessary
|
|
188
|
+
in order to prevent a redirect loop that can happen if a user tries to access a page
|
|
189
|
+
they don't have permissions for (see [#2081](https://github.com/activeadmin/activeadmin/issues/2081)).
|
|
190
|
+
|
|
191
|
+
```ruby
|
|
192
|
+
config.on_unauthorized_access = :access_denied
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
The method `access_denied` would be defined in `application_controller.rb`. Here is one
|
|
196
|
+
example that redirects the user from the page they don't have permission to
|
|
197
|
+
access to a resource they have permission to access (organizations in this case), and
|
|
198
|
+
also displays the error message in the browser:
|
|
199
|
+
|
|
200
|
+
```ruby
|
|
201
|
+
class ApplicationController < ActionController::Base
|
|
202
|
+
protect_from_forgery
|
|
203
|
+
|
|
204
|
+
def access_denied(exception)
|
|
205
|
+
redirect_to admin_organizations_path, alert: exception.message
|
|
206
|
+
end
|
|
207
|
+
end
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
By default this will use the ability class named "Ability". This can also be
|
|
211
|
+
changed from the initializer:
|
|
212
|
+
|
|
213
|
+
```ruby
|
|
214
|
+
config.cancan_ability_class = "MyCustomAbility"
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
Now you can simply use CanCan or CanCanCan the way that you would expect and
|
|
218
|
+
Active Admin will use it for authorization:
|
|
219
|
+
|
|
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
|
|
231
|
+
|
|
232
|
+
end
|
|
233
|
+
```
|
|
234
|
+
|
|
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
|
+
```
|
|
247
|
+
|
|
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.
|