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/6-show-pages.md
CHANGED
@@ -1,43 +1,105 @@
|
|
1
1
|
# Customize the Show Page
|
2
2
|
|
3
|
-
|
3
|
+
The show block is rendered within the context of the view and uses [Arbre](https://github.com/activeadmin/arbre) syntax.
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
5
|
+
With the `show` block, you can render anything you want.
|
6
|
+
|
7
|
+
```ruby
|
8
|
+
ActiveAdmin.register Post do
|
9
|
+
show do
|
10
|
+
h3 post.title
|
11
|
+
div do
|
12
|
+
simple_format post.body
|
12
13
|
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
```
|
17
|
+
|
18
|
+
You can render a partial at any point:
|
19
|
+
|
20
|
+
```ruby
|
21
|
+
ActiveAdmin.register Post do
|
22
|
+
show do
|
23
|
+
# renders app/views/admin/posts/_some_partial.html.erb
|
24
|
+
render 'some_partial'
|
25
|
+
end
|
26
|
+
end
|
27
|
+
```
|
13
28
|
|
14
|
-
|
15
|
-
can also render a partial at any point.
|
29
|
+
If you'd like to keep the default AA look, you can use `attributes_table`:
|
16
30
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
31
|
+
```ruby
|
32
|
+
ActiveAdmin.register Ad do
|
33
|
+
show do
|
34
|
+
attributes_table do
|
35
|
+
row :title
|
36
|
+
row :image do |ad|
|
37
|
+
image_tag ad.image.url
|
21
38
|
end
|
22
39
|
end
|
40
|
+
active_admin_comments
|
41
|
+
end
|
42
|
+
end
|
43
|
+
```
|
23
44
|
|
24
|
-
|
45
|
+
You can also customize the title of the object in the show screen:
|
25
46
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
47
|
+
```ruby
|
48
|
+
show title: :name do
|
49
|
+
# ...
|
50
|
+
end
|
51
|
+
```
|
52
|
+
|
53
|
+
If you want a more data-dense page, you can combine a sidebar:
|
54
|
+
|
55
|
+
```ruby
|
56
|
+
ActiveAdmin.register Book do
|
57
|
+
show do
|
58
|
+
panel "Table of Contents" do
|
59
|
+
table_for book.chapters do
|
60
|
+
column :number
|
61
|
+
column :title
|
62
|
+
column :page
|
35
63
|
end
|
36
64
|
end
|
65
|
+
active_admin_comments
|
66
|
+
end
|
37
67
|
|
38
|
-
|
39
|
-
|
40
|
-
|
68
|
+
sidebar "Details", only: :show do
|
69
|
+
attributes_table_for book do
|
70
|
+
row :title
|
71
|
+
row :author
|
72
|
+
row :publisher
|
73
|
+
row('Published?') { |b| status_tag b.published? }
|
41
74
|
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
```
|
78
|
+
|
79
|
+
# Tabs
|
42
80
|
|
81
|
+
You can arrage content in tabs as shown below:
|
43
82
|
|
83
|
+
```ruby
|
84
|
+
ActiveAdmin.register Order do
|
85
|
+
show do
|
86
|
+
tabs do
|
87
|
+
tab 'Overview' do
|
88
|
+
attributes_table do
|
89
|
+
row(:status) { status_tag(order.status) }
|
90
|
+
row(:paid) { number_to_currency(order.amount_paid_in_dollars) }
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
tab 'Payments' do
|
95
|
+
table_for order.payments do
|
96
|
+
column('Payment Type') { |p| p.payment_type.titleize }
|
97
|
+
column('Received On', :created_at)
|
98
|
+
column('Payment Details & Notes', :notes)
|
99
|
+
column('Amount') { |p| number_to_currency(p.amount_in_dollars) }
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
```
|
data/docs/7-sidebars.md
CHANGED
@@ -1,42 +1,63 @@
|
|
1
1
|
# Sidebar Sections
|
2
2
|
|
3
|
-
|
3
|
+
Sidebars allow you to put whatever content you want on the side the page.
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
```ruby
|
6
|
+
sidebar :help do
|
7
|
+
"Need help? Email us at help@example.com"
|
8
|
+
end
|
9
|
+
```
|
8
10
|
|
9
|
-
This will generate a sidebar
|
10
|
-
|
11
|
+
This will generate a sidebar on every page for that resource. The first
|
12
|
+
argument is used as the title, and can be a symbol, string, or lambda.
|
11
13
|
|
12
|
-
You can also use Arbre
|
14
|
+
You can also use [Arbre](https://github.com/activeadmin/arbre) to define HTML content.
|
13
15
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
16
|
+
```ruby
|
17
|
+
sidebar :help do
|
18
|
+
ul do
|
19
|
+
li "Second List First Item"
|
20
|
+
li "Second List Second Item"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
```
|
20
24
|
|
21
|
-
|
22
|
-
options.
|
25
|
+
Sidebars can be rendered on a specific action by passing `:only` or `:except`.
|
23
26
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
+
```ruby
|
28
|
+
sidebar :help, only: :index do
|
29
|
+
"Need help? Email us at help@example.com"
|
30
|
+
end
|
31
|
+
```
|
27
32
|
|
28
33
|
If you want to conditionally display a sidebar section, use the :if option and
|
29
|
-
pass it a proc which will be rendered within the context
|
34
|
+
pass it a proc which will be rendered within the view context.
|
30
35
|
|
31
|
-
|
32
|
-
|
33
|
-
|
36
|
+
```ruby
|
37
|
+
sidebar :help, if: proc{ current_admin_user.super_admin? } do
|
38
|
+
"Only for super admins!"
|
39
|
+
end
|
40
|
+
```
|
34
41
|
|
35
|
-
|
42
|
+
You can also render a partial:
|
36
43
|
|
37
|
-
|
38
|
-
|
44
|
+
```ruby
|
45
|
+
sidebar :help # app/views/admin/posts/_help_sidebar.html.erb
|
46
|
+
sidebar :help, partial: 'custom' # app/views/admin/posts/_custom.html.erb
|
47
|
+
```
|
39
48
|
|
40
|
-
|
49
|
+
It's possible to add custom class name to the sidebar parent element by passing
|
50
|
+
`class` option:
|
41
51
|
|
42
|
-
|
52
|
+
```ruby
|
53
|
+
sidebar :help, class: 'custom_class'
|
54
|
+
```
|
55
|
+
|
56
|
+
By default sidebars are positioned in the same order as they defined, but it's also
|
57
|
+
possible to specify their position manually:
|
58
|
+
|
59
|
+
```ruby
|
60
|
+
sidebar :help, priority: 0 # will push Help section to the top (above default Filters section)
|
61
|
+
```
|
62
|
+
|
63
|
+
Default sidebar priority is `10`.
|
data/docs/8-custom-actions.md
CHANGED
@@ -12,18 +12,19 @@ generating a route for you.
|
|
12
12
|
|
13
13
|
To add a collection action, use the collection_action method:
|
14
14
|
|
15
|
+
```ruby
|
16
|
+
ActiveAdmin.register Post do
|
15
17
|
|
16
|
-
|
18
|
+
collection_action :import_csv, method: :post do
|
19
|
+
# Do some CSV importing work here...
|
20
|
+
redirect_to collection_path, notice: "CSV imported successfully!"
|
21
|
+
end
|
17
22
|
|
18
|
-
|
19
|
-
|
20
|
-
redirect_to {:action => :index}, {:notice => "CSV imported successfully!"}
|
21
|
-
end
|
23
|
+
end
|
24
|
+
```
|
22
25
|
|
23
|
-
|
24
|
-
|
25
|
-
This collection action will generate a route at "/admin/posts/import_csv"
|
26
|
-
pointing to the Admin::PostsController#import_csv controller action.
|
26
|
+
This collection action will generate a route at `/admin/posts/import_csv`
|
27
|
+
pointing to the `Admin::PostsController#import_csv` controller action.
|
27
28
|
|
28
29
|
## Member Actions
|
29
30
|
|
@@ -32,108 +33,128 @@ A member action is a controller action which operates on a single resource.
|
|
32
33
|
For example, to add a lock action to a user resource, you would do the
|
33
34
|
following:
|
34
35
|
|
35
|
-
|
36
|
+
```ruby
|
37
|
+
ActiveAdmin.register User do
|
36
38
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
end
|
39
|
+
member_action :lock, method: :put do
|
40
|
+
resource.lock!
|
41
|
+
redirect_to resource_path, notice: "Locked!"
|
42
|
+
end
|
42
43
|
|
43
|
-
|
44
|
+
end
|
45
|
+
```
|
44
46
|
|
45
|
-
This will generate a route at
|
46
|
-
Admin::UserController#lock controller action.
|
47
|
+
This will generate a route at `/admin/users/:id/lock` pointing to the
|
48
|
+
`Admin::UserController#lock` controller action.
|
47
49
|
|
48
|
-
##
|
50
|
+
## HTTP Verbs
|
49
51
|
|
50
|
-
The collection_action and
|
52
|
+
The `collection_action` and `member_action` methods both accept the `:method`
|
51
53
|
argument to set the HTTP verb for the controller action and route.
|
52
54
|
|
53
|
-
|
54
|
-
|
55
|
+
Sometimes you want to create an action with the same name, that handles multiple
|
56
|
+
HTTP verbs. In that case, this is the suggested approach:
|
55
57
|
|
56
|
-
|
58
|
+
```ruby
|
59
|
+
member_action :foo, method: [:get, :post] do
|
60
|
+
if request.post?
|
61
|
+
resource.update_attributes! foo: params[:foo] || {}
|
62
|
+
head :ok
|
63
|
+
else
|
64
|
+
render :foo
|
65
|
+
end
|
66
|
+
end
|
67
|
+
```
|
68
|
+
|
69
|
+
## Rendering
|
57
70
|
|
58
71
|
Custom controller actions support rendering within the standard Active Admin
|
59
72
|
layout.
|
60
73
|
|
61
|
-
|
62
|
-
|
63
|
-
# /admin/posts/:id/comments
|
64
|
-
member_action :comments do
|
65
|
-
@post = Post.find(params[:id])
|
74
|
+
```ruby
|
75
|
+
ActiveAdmin.register Post do
|
66
76
|
|
67
|
-
|
68
|
-
|
77
|
+
# /admin/posts/:id/comments
|
78
|
+
member_action :comments do
|
79
|
+
@comments = resource.comments
|
80
|
+
# This will render app/views/admin/posts/comments.html.erb
|
81
|
+
end
|
69
82
|
|
70
|
-
|
83
|
+
end
|
84
|
+
```
|
71
85
|
|
72
86
|
If you would like to use the same view syntax as the rest of Active Admin, you
|
73
87
|
can use the Arbre file extension: .arb.
|
74
88
|
|
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
|
89
|
+
For example, create `app/views/admin/posts/comments.html.arb` with:
|
84
90
|
|
85
|
-
|
91
|
+
```ruby
|
92
|
+
table_for assigns[:post].comments do
|
93
|
+
column :id
|
94
|
+
column :author
|
95
|
+
column :body do |comment|
|
96
|
+
simple_format comment.body
|
97
|
+
end
|
98
|
+
end
|
99
|
+
```
|
86
100
|
|
87
|
-
|
88
|
-
`action_item` block. For example, to add a "View on site" button to view a blog
|
89
|
-
post:
|
101
|
+
## Page Titles
|
90
102
|
|
91
|
-
|
92
|
-
|
93
|
-
|
103
|
+
The page title for the custom action will be the translated 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
|
+
defaults to the name of the controller action.
|
94
107
|
|
95
|
-
|
108
|
+
If this doesn't work for you, you can always set the `@page_title` instance
|
109
|
+
variable in your controller action to customize the page title.
|
96
110
|
|
97
|
-
|
98
|
-
|
99
|
-
end
|
111
|
+
```ruby
|
112
|
+
ActiveAdmin.register Post do
|
100
113
|
|
101
|
-
|
114
|
+
member_action :comments do
|
115
|
+
@comments = resource.comments
|
116
|
+
@page_title = "#{resource.title}: Comments" # Sets the page title
|
117
|
+
end
|
102
118
|
|
103
|
-
|
104
|
-
|
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.
|
119
|
+
end
|
120
|
+
```
|
107
121
|
|
108
|
-
|
109
|
-
@page_title instance variable in your controller action to customize the page
|
110
|
-
title.
|
122
|
+
# Action Items
|
111
123
|
|
112
|
-
|
124
|
+
To include your own action items (like the New, Edit and Delete buttons), add an
|
125
|
+
`action_item` block. The first parameter is just a name to identify the action,
|
126
|
+
and is required. For example, to add a "View on site" button to view a blog
|
127
|
+
post:
|
113
128
|
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
129
|
+
```ruby
|
130
|
+
action_item :view, only: :show do
|
131
|
+
link_to 'View on site', post_path(post) if post.published?
|
132
|
+
end
|
133
|
+
```
|
118
134
|
|
119
|
-
|
120
|
-
end
|
135
|
+
Actions items also accept the `:if` option to conditionally display them:
|
121
136
|
|
122
|
-
|
137
|
+
```ruby
|
138
|
+
action_item :super_action, only: :show, if: proc{ current_admin_user.super_admin? } do
|
139
|
+
"Only display this to super admins on the show screen"
|
140
|
+
end
|
141
|
+
```
|
123
142
|
|
124
|
-
|
143
|
+
# Modifying the Controller
|
125
144
|
|
126
145
|
The generated controller is available to you within the registration block by
|
127
|
-
using the
|
146
|
+
using the `controller` method.
|
128
147
|
|
129
|
-
|
148
|
+
```ruby
|
149
|
+
ActiveAdmin.register Post do
|
130
150
|
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
def define_a_method
|
135
|
-
# Instance method
|
136
|
-
end
|
137
|
-
end
|
151
|
+
controller do
|
152
|
+
# This code is evaluated within the controller class
|
138
153
|
|
154
|
+
def define_a_method
|
155
|
+
# Instance method
|
139
156
|
end
|
157
|
+
end
|
158
|
+
|
159
|
+
end
|
160
|
+
```
|
data/docs/9-batch-actions.md
CHANGED
@@ -1,169 +1,233 @@
|
|
1
|
-
#
|
2
|
-
|
3
|
-
By default, the index
|
4
|
-
as well as an API for you to easily create your own
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
1
|
+
# Batch Actions
|
2
|
+
|
3
|
+
By default, the index page provides you a "Batch Action" to quickly delete records,
|
4
|
+
as well as an API for you to easily create your own. Note that if you override the
|
5
|
+
default index, you must add `selectable_column` back for batch actions to be usable:
|
6
|
+
|
7
|
+
```ruby
|
8
|
+
index do
|
9
|
+
selectable_column
|
10
|
+
# ...
|
11
|
+
end
|
12
|
+
```
|
13
|
+
|
14
|
+
## Creating your own
|
15
|
+
|
16
|
+
Use the `batch_action` DSL method to create your own. It behaves just like a
|
17
|
+
controller method, so you can send the client whatever data you like. Your block
|
18
|
+
is passed an array of the record IDs that the user selected, so you can perform
|
19
|
+
your desired batch action on all of them:
|
20
|
+
|
21
|
+
```ruby
|
22
|
+
ActiveAdmin.register Post do
|
23
|
+
batch_action :flag do |ids|
|
24
|
+
batch_action_collection.find(ids).each do |post|
|
25
|
+
post.flag! :hot
|
23
26
|
end
|
27
|
+
redirect_to collection_path, alert: "The posts have been flagged."
|
28
|
+
end
|
29
|
+
end
|
30
|
+
```
|
24
31
|
|
25
32
|
### Disabling Batch Actions
|
26
33
|
|
27
|
-
You can disable batch actions at the application or
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
34
|
+
You can disable batch actions at the application, namespace, or resource level:
|
35
|
+
|
36
|
+
```ruby
|
37
|
+
# config/initializers/active_admin.rb
|
38
|
+
ActiveAdmin.setup do |config|
|
39
|
+
|
40
|
+
# Application level:
|
41
|
+
config.batch_actions = false
|
42
|
+
|
43
|
+
# Namespace level:
|
44
|
+
config.namespace :admin do |admin|
|
45
|
+
admin.batch_actions = false
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
# app/admin/post.rb
|
50
|
+
ActiveAdmin.register Post do
|
51
|
+
|
52
|
+
# Resource level:
|
53
|
+
config.batch_actions = false
|
54
|
+
end
|
55
|
+
```
|
56
|
+
|
57
|
+
### Modification
|
58
|
+
|
59
|
+
If you want, you can override the default batch action to do whatever you want:
|
60
|
+
|
61
|
+
```ruby
|
62
|
+
ActiveAdmin.register Post do
|
63
|
+
batch_action :destroy do |ids|
|
64
|
+
redirect_to collection_path, alert: "Didn't really delete these!"
|
65
|
+
end
|
66
|
+
end
|
67
|
+
```
|
68
|
+
|
69
|
+
### Removal
|
70
|
+
|
71
|
+
You can remove batch actions by simply passing false as the second parameter:
|
72
|
+
|
73
|
+
```ruby
|
74
|
+
ActiveAdmin.register Post do
|
75
|
+
batch_action :destroy, false
|
76
|
+
end
|
77
|
+
```
|
78
|
+
|
79
|
+
### Conditional display
|
80
|
+
|
81
|
+
You can control whether or not the batch action is available via the `:if`
|
82
|
+
option, which is executed in the view context.
|
83
|
+
|
84
|
+
```ruby
|
85
|
+
ActiveAdmin.register Post do
|
86
|
+
batch_action :flag, if: proc{ can? :flag, Post } do |ids|
|
87
|
+
# ...
|
88
|
+
end
|
89
|
+
end
|
90
|
+
```
|
91
|
+
|
92
|
+
### Priority in the drop-down menu
|
93
|
+
|
94
|
+
You can change the order of batch actions through the `:priority` option:
|
95
|
+
|
96
|
+
```ruby
|
97
|
+
ActiveAdmin.register Post do
|
98
|
+
batch_action :destroy, priority: 1 do |ids|
|
99
|
+
# ...
|
100
|
+
end
|
101
|
+
end
|
102
|
+
```
|
103
|
+
|
104
|
+
### Confirmation prompt
|
105
|
+
|
106
|
+
You can pass a custom string to prompt the user with:
|
107
|
+
|
108
|
+
```ruby
|
109
|
+
ActiveAdmin.register Post do
|
110
|
+
batch_action :destroy, confirm: "Are you sure??" do |ids|
|
111
|
+
# ...
|
112
|
+
end
|
113
|
+
end
|
114
|
+
```
|
115
|
+
|
116
|
+
### Batch Action forms
|
117
|
+
|
118
|
+
If you want to capture input from the user as they perform a batch action,
|
119
|
+
Active Admin has just the thing for you:
|
120
|
+
|
121
|
+
```ruby
|
122
|
+
batch_action :flag, form: {
|
123
|
+
type: %w[Offensive Spam Other],
|
124
|
+
reason: :text,
|
125
|
+
notes: :textarea,
|
126
|
+
hide: :checkbox,
|
127
|
+
date: :datepicker
|
128
|
+
} do |ids, inputs|
|
129
|
+
# inputs is a hash of all the form fields you requested
|
130
|
+
redirect_to collection_path, notice: [ids, inputs].to_s
|
131
|
+
end
|
132
|
+
```
|
133
|
+
|
134
|
+
If you pass a nested array, it will behave just like Formtastic would, with the first
|
135
|
+
element being the text displayed and the second element being the value.
|
136
|
+
|
137
|
+
```ruby
|
138
|
+
batch_action :doit, form: {user: [['Jake',2], ['Mary',3]]} do |ids, inputs|
|
139
|
+
User.find(inputs[:user])
|
140
|
+
# ...
|
141
|
+
end
|
142
|
+
```
|
143
|
+
|
144
|
+
When you have dynamic form inputs you can pass a proc instead:
|
145
|
+
|
146
|
+
```ruby
|
147
|
+
# NOTE: multi-pluck is new to Rails 4
|
148
|
+
batch_action :doit, form: ->{{user: User.pluck(:name, :id)}} do |ids, inputs|
|
149
|
+
User.find(inputs[:user])
|
150
|
+
# ...
|
151
|
+
end
|
152
|
+
```
|
153
|
+
|
154
|
+
Under the covers this is powered by the JS `ActiveAdmin.modal_dialog` which you can use yourself:
|
155
|
+
|
156
|
+
```coffee
|
157
|
+
if $('body.admin_users').length
|
158
|
+
$('a[data-prompt]').click ->
|
159
|
+
ActiveAdmin.modal_dialog $(@).data('prompt'), comment: 'textarea',
|
160
|
+
(inputs)=>
|
161
|
+
$.post "/admin/users/#{$(@).data 'id'}/change_state",
|
162
|
+
comment: inputs.comment, state: $(@).data('state'),
|
163
|
+
success: ->
|
164
|
+
window.location.reload()
|
165
|
+
```
|
166
|
+
|
167
|
+
### Translation
|
88
168
|
|
89
169
|
By default, the name of the batch action will be used to lookup a label for the
|
90
|
-
menu. It will lookup in `active_admin.batch_actions.labels.#{
|
91
|
-
example:
|
170
|
+
menu. It will lookup in `active_admin.batch_actions.labels.#{your_batch_action}`.
|
92
171
|
|
93
|
-
|
94
|
-
batch_action :publish do |selection|
|
95
|
-
# do some publishing...
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
Can be translated with:
|
172
|
+
So this:
|
100
173
|
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
174
|
+
```ruby
|
175
|
+
ActiveAdmin.register Post do
|
176
|
+
batch_action :publish do |ids|
|
177
|
+
# ...
|
178
|
+
end
|
179
|
+
end
|
180
|
+
```
|
107
181
|
|
108
|
-
|
182
|
+
Can be translated with:
|
109
183
|
|
110
|
-
|
184
|
+
```yaml
|
185
|
+
# config/locales/en.yml
|
186
|
+
en:
|
187
|
+
active_admin:
|
188
|
+
batch_actions:
|
189
|
+
labels:
|
190
|
+
publish: "Publish"
|
191
|
+
```
|
111
192
|
|
112
|
-
|
113
|
-
batch_action :destroy, :confirm => "Are you sure you want to delete all of these?" do |selection|
|
114
|
-
# Do some deleting...
|
115
|
-
end
|
116
|
-
end
|
193
|
+
### Support for other index types
|
117
194
|
|
118
|
-
|
195
|
+
You can easily use `batch_action` in the other index views, *Grid*, *Block*,
|
196
|
+
and *Blog*; however, these will require custom styling to fit your needs.
|
119
197
|
|
120
|
-
|
198
|
+
```ruby
|
199
|
+
ActiveAdmin.register Post do
|
121
200
|
|
122
|
-
|
201
|
+
# By default, the "Delete" batch action is provided
|
123
202
|
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
203
|
+
# Index as Grid
|
204
|
+
index as: :grid do |post|
|
205
|
+
resource_selection_cell post
|
206
|
+
h2 auto_link post
|
207
|
+
end
|
128
208
|
|
129
|
-
|
130
|
-
selectable_column
|
131
|
-
column :title
|
132
|
-
default_actions
|
133
|
-
end
|
209
|
+
# Index as Blog requires nothing special
|
134
210
|
|
211
|
+
# Index as Block
|
212
|
+
index as: :block do |post|
|
213
|
+
div for: post do
|
214
|
+
resource_selection_cell post
|
135
215
|
end
|
216
|
+
end
|
136
217
|
|
218
|
+
end
|
219
|
+
```
|
137
220
|
|
138
|
-
###
|
139
|
-
|
140
|
-
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.
|
141
|
-
|
142
|
-
ActiveAdmin.register Post do
|
143
|
-
|
144
|
-
# By default, the "Delete" batch action is provided
|
145
|
-
|
146
|
-
# Index as Grid
|
147
|
-
index as: :grid do |post|
|
148
|
-
resource_selection_cell post
|
149
|
-
h2 auto_link( post )
|
150
|
-
end
|
151
|
-
|
152
|
-
# Index as Blog requires nothing special
|
153
|
-
|
154
|
-
# Index as Block
|
155
|
-
index as: :block do |post|
|
156
|
-
div for: post do
|
157
|
-
resource_selection_cell post
|
158
|
-
end
|
159
|
-
end
|
160
|
-
|
161
|
-
end
|
162
|
-
|
163
|
-
### Batch Actions and Custom Actions
|
221
|
+
### BTW
|
164
222
|
|
165
|
-
In order to perform the batch action, the entire *Table*, *Grid*, etc. is
|
223
|
+
In order to perform the batch action, the entire *Table*, *Grid*, etc. is
|
224
|
+
wrapped in a form that submits the IDs of the selected rows to your batch_action.
|
166
225
|
|
167
|
-
Since nested `<form>` tags in HTML often results in unexpected behavior, you
|
226
|
+
Since nested `<form>` tags in HTML often results in unexpected behavior, you
|
227
|
+
may need to modify the custom behavior you've built using to prevent conflicts.
|
168
228
|
|
169
|
-
Specifically, if you are using HTTP methods like `PUT` or `PATCH` with a custom
|
229
|
+
Specifically, if you are using HTTP methods like `PUT` or `PATCH` with a custom
|
230
|
+
form on your index page this may result in your batch action being `PUT`ed
|
231
|
+
instead of `POST`ed which will create a routing error. You can get around this
|
232
|
+
by either moving the nested form to another page or using a POST so it doesn't
|
233
|
+
override the batch action. As well, behavior may vary by browser.
|