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
@@ -17,7 +17,7 @@ module ActiveAdmin
|
|
17
17
|
|
18
18
|
attr_reader :namespaces
|
19
19
|
def initialize
|
20
|
-
@namespaces =
|
20
|
+
@namespaces = Namespace::Store.new
|
21
21
|
end
|
22
22
|
|
23
23
|
# Load paths for admin configurations. Add folders to this load path
|
@@ -36,7 +36,7 @@ module ActiveAdmin
|
|
36
36
|
|
37
37
|
# Set the site title image displayed in the main layout (has precendence over :site_title)
|
38
38
|
inheritable_setting :site_title_image, ""
|
39
|
-
|
39
|
+
|
40
40
|
# Set a favicon
|
41
41
|
inheritable_setting :favicon, false
|
42
42
|
|
@@ -67,8 +67,14 @@ module ActiveAdmin
|
|
67
67
|
# The namespace root.
|
68
68
|
inheritable_setting :root_to, 'dashboard#index'
|
69
69
|
|
70
|
+
# Options that a passed to root_to.
|
71
|
+
inheritable_setting :root_to_options, {}
|
72
|
+
|
73
|
+
# Display breadcrumbs
|
74
|
+
inheritable_setting :breadcrumb, true
|
75
|
+
|
70
76
|
# Default CSV options
|
71
|
-
inheritable_setting :csv_options, {:
|
77
|
+
inheritable_setting :csv_options, { col_sep: ',', byte_order_mark: "\xEF\xBB\xBF" }
|
72
78
|
|
73
79
|
# Default Download Links options
|
74
80
|
inheritable_setting :download_links, true
|
@@ -79,6 +85,17 @@ module ActiveAdmin
|
|
79
85
|
# A proc to be used when a user is not authorized to view the current resource
|
80
86
|
inheritable_setting :on_unauthorized_access, :rescue_active_admin_access_denied
|
81
87
|
|
88
|
+
# A regex to detect unsupported browser, set to false to disable
|
89
|
+
inheritable_setting :unsupported_browser_matcher, /MSIE [1-8]\.0/
|
90
|
+
|
91
|
+
# Request parameters that are permitted by default
|
92
|
+
inheritable_setting :permitted_params, [
|
93
|
+
:utf8, :_method, :authenticity_token, :commit, :id
|
94
|
+
]
|
95
|
+
|
96
|
+
# Set flash message keys that shouldn't show in ActiveAdmin
|
97
|
+
inheritable_setting :flash_keys_to_except, ['timedout']
|
98
|
+
|
82
99
|
# Active Admin makes educated guesses when displaying objects, this is
|
83
100
|
# the list of methods it tries calling in order
|
84
101
|
setting :display_name_methods, [ :display_name,
|
@@ -92,43 +109,45 @@ module ActiveAdmin
|
|
92
109
|
|
93
110
|
# == Deprecated Settings
|
94
111
|
|
95
|
-
|
112
|
+
def allow_comments=(*)
|
113
|
+
raise "`config.allow_comments` is no longer provided in ActiveAdmin 1.x. Use `config.comments` instead."
|
114
|
+
end
|
96
115
|
|
97
116
|
include AssetRegistration
|
98
117
|
|
99
118
|
# Event that gets triggered on load of Active Admin
|
100
119
|
BeforeLoadEvent = 'active_admin.application.before_load'.freeze
|
101
|
-
AfterLoadEvent
|
120
|
+
AfterLoadEvent = 'active_admin.application.after_load'.freeze
|
102
121
|
|
122
|
+
# Runs before the app's AA initializer
|
103
123
|
def setup!
|
104
124
|
register_default_assets
|
105
125
|
end
|
106
126
|
|
127
|
+
# Runs after the app's AA initializer
|
107
128
|
def prepare!
|
108
129
|
remove_active_admin_load_paths_from_rails_autoload_and_eager_load
|
109
130
|
attach_reloader
|
110
|
-
generate_stylesheets
|
111
131
|
end
|
112
132
|
|
113
133
|
# Registers a brand new configuration for the given resource.
|
114
134
|
def register(resource, options = {}, &block)
|
115
|
-
|
116
|
-
namespace(
|
135
|
+
ns = options.fetch(:namespace){ default_namespace }
|
136
|
+
namespace(ns).register resource, options, &block
|
117
137
|
end
|
118
138
|
|
119
139
|
# Creates a namespace for the given name
|
120
140
|
#
|
121
141
|
# Yields the namespace if a block is given
|
122
142
|
#
|
123
|
-
# @
|
143
|
+
# @return [Namespace] the new or existing namespace
|
124
144
|
def namespace(name)
|
125
145
|
name ||= :root
|
126
146
|
|
127
|
-
|
128
|
-
namespace =
|
129
|
-
else
|
130
|
-
namespace = namespaces[name] = Namespace.new(self, name)
|
147
|
+
namespace = namespaces[name] ||= begin
|
148
|
+
namespace = Namespace.new(self, name)
|
131
149
|
ActiveAdmin::Event.dispatch ActiveAdmin::Namespace::RegisterEvent, namespace
|
150
|
+
namespace
|
132
151
|
end
|
133
152
|
|
134
153
|
yield(namespace) if block_given?
|
@@ -139,12 +158,12 @@ module ActiveAdmin
|
|
139
158
|
# Register a page
|
140
159
|
#
|
141
160
|
# @param name [String] The page name
|
142
|
-
# @
|
161
|
+
# @option [Hash] Accepts option :namespace.
|
143
162
|
# @&block The registration block.
|
144
163
|
#
|
145
164
|
def register_page(name, options = {}, &block)
|
146
|
-
|
147
|
-
namespace(
|
165
|
+
ns = options.fetch(:namespace){ default_namespace }
|
166
|
+
namespace(ns).register_page name, options, &block
|
148
167
|
end
|
149
168
|
|
150
169
|
# Whether all configuration files have been loaded
|
@@ -155,7 +174,7 @@ module ActiveAdmin
|
|
155
174
|
# Removes all defined controllers from memory. Useful in
|
156
175
|
# development, where they are reloaded on each request.
|
157
176
|
def unload!
|
158
|
-
namespaces.
|
177
|
+
namespaces.each &:unload!
|
159
178
|
@@loaded = false
|
160
179
|
end
|
161
180
|
|
@@ -171,9 +190,13 @@ module ActiveAdmin
|
|
171
190
|
end
|
172
191
|
end
|
173
192
|
|
193
|
+
def load(file)
|
194
|
+
DatabaseHitDuringLoad.capture{ super }
|
195
|
+
end
|
196
|
+
|
174
197
|
# Returns ALL the files to be loaded
|
175
198
|
def files
|
176
|
-
load_paths.flatten.compact.uniq.
|
199
|
+
load_paths.flatten.compact.uniq.flat_map{ |path| Dir["#{path}/**/*.rb"] }
|
177
200
|
end
|
178
201
|
|
179
202
|
def router
|
@@ -192,62 +215,52 @@ module ActiveAdmin
|
|
192
215
|
#
|
193
216
|
%w(before_filter skip_before_filter after_filter skip_after_filter around_filter skip_filter).each do |name|
|
194
217
|
define_method name do |*args, &block|
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
ActiveAdmin::Devise::UnlocksController.send name, *args, &block
|
218
|
+
controllers_for_filters.each do |controller|
|
219
|
+
controller.public_send name, *args, &block
|
220
|
+
end
|
199
221
|
end
|
200
222
|
end
|
201
223
|
|
202
|
-
|
203
|
-
|
204
|
-
|
224
|
+
def controllers_for_filters
|
225
|
+
controllers = [BaseController]
|
226
|
+
controllers.push *Devise.controllers_for_filters if Dependency.devise?
|
227
|
+
controllers
|
205
228
|
end
|
206
229
|
|
207
|
-
|
208
|
-
|
209
|
-
# Return either the passed in namespace or the default
|
210
|
-
def namespace_name(options)
|
211
|
-
options.fetch(:namespace){ default_namespace }
|
212
|
-
end
|
230
|
+
private
|
213
231
|
|
214
232
|
def register_default_assets
|
215
|
-
register_stylesheet 'active_admin.css',
|
216
|
-
register_stylesheet 'active_admin/print.css', :
|
217
|
-
|
218
|
-
unless ActiveAdmin.use_asset_pipeline?
|
219
|
-
register_javascript 'jquery.min.js'
|
220
|
-
register_javascript 'jquery-ui.min.js'
|
221
|
-
register_javascript 'jquery_ujs.js'
|
222
|
-
end
|
233
|
+
register_stylesheet 'active_admin.css', media: 'screen'
|
234
|
+
register_stylesheet 'active_admin/print.css', media: 'print'
|
223
235
|
|
224
236
|
register_javascript 'active_admin.js'
|
225
237
|
end
|
226
238
|
|
227
|
-
# Since
|
228
|
-
#
|
229
|
-
#
|
239
|
+
# Since app/admin is alphabetically before app/models, we have to remove it
|
240
|
+
# from the host app's +autoload_paths+ to prevent missing constant errors.
|
241
|
+
#
|
242
|
+
# As well, we have to remove it from +eager_load_paths+ to prevent the
|
243
|
+
# files from being loaded twice in production.
|
230
244
|
def remove_active_admin_load_paths_from_rails_autoload_and_eager_load
|
231
|
-
ActiveSupport::Dependencies.autoload_paths
|
232
|
-
|
233
|
-
Rails.application.config.eager_load_paths = Rails.application.config.eager_load_paths.reject do |path|
|
234
|
-
load_paths.include?(path)
|
235
|
-
end
|
245
|
+
ActiveSupport::Dependencies.autoload_paths -= load_paths
|
246
|
+
Rails.application.config.eager_load_paths -= load_paths
|
236
247
|
end
|
237
248
|
|
249
|
+
# Hooks the app/admin directory into our Rails Engine's +watchable_dirs+, so the
|
250
|
+
# files are automatically reloaded in your development environment.
|
251
|
+
#
|
252
|
+
# If files have changed on disk, we forcibly unload all AA configurations, and
|
253
|
+
# tell the host application to redraw routes (triggering AA itself to reload).
|
238
254
|
def attach_reloader
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
require 'active_admin/sass/css_loader'
|
249
|
-
::Sass::Plugin.add_template_location(File.expand_path("../../../app/assets/stylesheets", __FILE__))
|
250
|
-
::Sass::Plugin.add_template_location(File.expand_path("../sass", __FILE__))
|
255
|
+
load_paths.each do |path|
|
256
|
+
ActiveAdmin::Engine.config.watchable_dirs[path] = [:rb]
|
257
|
+
end
|
258
|
+
|
259
|
+
Rails.application.config.after_initialize do
|
260
|
+
ActionDispatch::Reloader.to_prepare do
|
261
|
+
ActiveAdmin.application.unload!
|
262
|
+
Rails.application.reload_routes!
|
263
|
+
end
|
251
264
|
end
|
252
265
|
end
|
253
266
|
end
|
@@ -10,7 +10,7 @@ module ActiveAdmin
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def clear_stylesheets!
|
13
|
-
|
13
|
+
stylesheets.clear
|
14
14
|
end
|
15
15
|
|
16
16
|
def register_javascript(name)
|
@@ -22,7 +22,7 @@ module ActiveAdmin
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def clear_javascripts!
|
25
|
-
|
25
|
+
javascripts.clear
|
26
26
|
end
|
27
27
|
|
28
28
|
end
|
@@ -49,7 +49,7 @@ module ActiveAdmin
|
|
49
49
|
# global navigation. To deal with this nicely in a case statement, take
|
50
50
|
# a look at `#normalized(klasss)`
|
51
51
|
#
|
52
|
-
# @
|
52
|
+
# @return [Boolean]
|
53
53
|
def authorized?(action, subject = nil)
|
54
54
|
true
|
55
55
|
end
|
@@ -66,7 +66,7 @@ module ActiveAdmin
|
|
66
66
|
# one of the `ActiveAdmin::Auth::*` symbols. Defaults to `Auth::READ` if
|
67
67
|
# no action passed in.
|
68
68
|
#
|
69
|
-
# @
|
69
|
+
# @return [ActiveRecord::Relation] A new collection, scoped to the
|
70
70
|
# objects that the current user has access to.
|
71
71
|
def scope_collection(collection, action = Auth::READ)
|
72
72
|
collection
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'inherited_resources'
|
2
|
-
|
3
1
|
require 'active_admin/base_controller/authorization'
|
4
2
|
require 'active_admin/base_controller/menu'
|
5
3
|
|
@@ -8,6 +6,7 @@ module ActiveAdmin
|
|
8
6
|
# It implements ActiveAdmin controllers core features.
|
9
7
|
class BaseController < ::InheritedResources::Base
|
10
8
|
helper ::ActiveAdmin::ViewHelpers
|
9
|
+
helper_method :env
|
11
10
|
|
12
11
|
layout :determine_active_admin_layout
|
13
12
|
|
@@ -23,7 +22,7 @@ module ActiveAdmin
|
|
23
22
|
attr_accessor :active_admin_config
|
24
23
|
end
|
25
24
|
|
26
|
-
# By default Rails will render un-implemented actions when the view exists.
|
25
|
+
# By default Rails will render un-implemented actions when the view exists. Because Active
|
27
26
|
# Admin allows you to not render any of the actions by using the #actions method, we need
|
28
27
|
# to check if they are implemented.
|
29
28
|
def only_render_implemented_actions
|
@@ -1,39 +1,21 @@
|
|
1
1
|
module ActiveAdmin
|
2
|
-
|
3
|
-
# Exception class to raise when there is an authorized access
|
4
|
-
# exception thrown. The exception has a few goodies that may
|
5
|
-
# be useful for capturing / recognizing security issues.
|
6
|
-
class AccessDenied < StandardError
|
7
|
-
attr_reader :user, :action, :subject
|
8
|
-
|
9
|
-
def initialize(user, action, subject)
|
10
|
-
@user, @action, @subject = user, action, subject
|
11
|
-
|
12
|
-
super()
|
13
|
-
end
|
14
|
-
|
15
|
-
def message
|
16
|
-
I18n.t("active_admin.access_denied.message")
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
2
|
class BaseController < ::InheritedResources::Base
|
21
3
|
module Authorization
|
22
4
|
include MethodOrProcHelper
|
23
5
|
extend ActiveSupport::Concern
|
24
6
|
|
25
7
|
ACTIONS_DICTIONARY = {
|
26
|
-
:
|
27
|
-
:
|
28
|
-
:
|
29
|
-
:
|
30
|
-
:
|
31
|
-
:
|
32
|
-
:
|
8
|
+
index: ActiveAdmin::Authorization::READ,
|
9
|
+
show: ActiveAdmin::Authorization::READ,
|
10
|
+
new: ActiveAdmin::Authorization::CREATE,
|
11
|
+
create: ActiveAdmin::Authorization::CREATE,
|
12
|
+
edit: ActiveAdmin::Authorization::UPDATE,
|
13
|
+
update: ActiveAdmin::Authorization::UPDATE,
|
14
|
+
destroy: ActiveAdmin::Authorization::DESTROY
|
33
15
|
}
|
34
16
|
|
35
17
|
included do
|
36
|
-
rescue_from ActiveAdmin::AccessDenied, :
|
18
|
+
rescue_from ActiveAdmin::AccessDenied, with: :dispatch_active_admin_access_denied
|
37
19
|
|
38
20
|
helper_method :authorized?
|
39
21
|
helper_method :authorize!
|
@@ -50,7 +32,7 @@ module ActiveAdmin
|
|
50
32
|
# @param [any] subject The subject that the user is trying to perform
|
51
33
|
# the action on.
|
52
34
|
#
|
53
|
-
# @
|
35
|
+
# @return [Boolean]
|
54
36
|
#
|
55
37
|
def authorized?(action, subject = nil)
|
56
38
|
active_admin_authorization.authorized?(action, subject)
|
@@ -67,7 +49,7 @@ module ActiveAdmin
|
|
67
49
|
# @param [any] subject The subject that the user is trying to perform
|
68
50
|
# the action on.
|
69
51
|
#
|
70
|
-
# @
|
52
|
+
# @return [Boolean] True if authorized, otherwise raises
|
71
53
|
# an ActiveAdmin::AccessDenied.
|
72
54
|
def authorize!(action, subject = nil)
|
73
55
|
unless authorized? action, subject
|
@@ -87,7 +69,7 @@ module ActiveAdmin
|
|
87
69
|
|
88
70
|
# Retrieve or instantiate the authorization instance for this resource
|
89
71
|
#
|
90
|
-
# @
|
72
|
+
# @return [ActiveAdmin::AuthorizationAdapter]
|
91
73
|
def active_admin_authorization
|
92
74
|
@active_admin_authorization ||=
|
93
75
|
active_admin_authorization_adapter.new active_admin_config, current_active_admin_user
|
@@ -95,7 +77,7 @@ module ActiveAdmin
|
|
95
77
|
|
96
78
|
# Returns the class to be used as the authorization adapter
|
97
79
|
#
|
98
|
-
# @
|
80
|
+
# @return [Class]
|
99
81
|
def active_admin_authorization_adapter
|
100
82
|
adapter = active_admin_namespace.authorization_adapter
|
101
83
|
if adapter.is_a? String
|
@@ -111,7 +93,7 @@ module ActiveAdmin
|
|
111
93
|
#
|
112
94
|
# @param [String, Symbol] action The controller action name.
|
113
95
|
#
|
114
|
-
# @
|
96
|
+
# @return [Symbol] The permission name to use.
|
115
97
|
def action_to_permission(action)
|
116
98
|
if action && action = action.to_sym
|
117
99
|
Authorization::ACTIONS_DICTIONARY[action] || action
|
@@ -13,5 +13,5 @@ ActiveAdmin.before_load do |app|
|
|
13
13
|
require "active_admin/batch_actions/views/batch_action_selector"
|
14
14
|
|
15
15
|
# Register the views with the view factory
|
16
|
-
app.view_factory.register :
|
16
|
+
app.view_factory.register batch_action_selector: ActiveAdmin::BatchActions::BatchActionSelector
|
17
17
|
end
|
@@ -2,12 +2,14 @@ module ActiveAdmin
|
|
2
2
|
module BatchActions
|
3
3
|
module Controller
|
4
4
|
|
5
|
-
# Controller
|
5
|
+
# Controller action that is called when submitting the batch action form
|
6
6
|
def batch_action
|
7
|
-
if
|
8
|
-
|
9
|
-
|
10
|
-
|
7
|
+
if action_present?
|
8
|
+
selection = params[:collection_selection] || []
|
9
|
+
inputs = JSON.parse params[:batch_action_inputs] || '{}'
|
10
|
+
valid_keys = render_in_context(self, current_batch_action.inputs).try(:keys)
|
11
|
+
inputs = inputs.with_indifferent_access.slice *valid_keys
|
12
|
+
instance_exec selection, inputs, ¤t_batch_action.block
|
11
13
|
else
|
12
14
|
raise "Couldn't find batch action \"#{params[:batch_action]}\""
|
13
15
|
end
|
@@ -15,11 +17,25 @@ module ActiveAdmin
|
|
15
17
|
|
16
18
|
protected
|
17
19
|
|
18
|
-
def
|
19
|
-
|
20
|
-
active_admin_config.batch_actions.select { |action| action.sym == params[:batch_action].to_sym }.first
|
20
|
+
def action_present?
|
21
|
+
params[:batch_action].present? && current_batch_action
|
21
22
|
end
|
22
23
|
|
24
|
+
def current_batch_action
|
25
|
+
active_admin_config.batch_actions.detect{ |action| action.sym.to_s == params[:batch_action] }
|
26
|
+
end
|
27
|
+
|
28
|
+
COLLECTION_APPLIES = [
|
29
|
+
:authorization_scope,
|
30
|
+
:collection_decorator,
|
31
|
+
:filtering,
|
32
|
+
:scoping,
|
33
|
+
:includes
|
34
|
+
].freeze
|
35
|
+
|
36
|
+
def batch_action_collection(only = COLLECTION_APPLIES)
|
37
|
+
find_collection(only: only)
|
38
|
+
end
|
23
39
|
end
|
24
40
|
end
|
25
41
|
end
|
@@ -5,7 +5,7 @@ module ActiveAdmin
|
|
5
5
|
def initialize(*)
|
6
6
|
super
|
7
7
|
@batch_actions = {}
|
8
|
-
|
8
|
+
add_default_batch_action
|
9
9
|
end
|
10
10
|
|
11
11
|
# @return [Array] The set of batch actions for this resource
|
@@ -31,7 +31,8 @@ module ActiveAdmin
|
|
31
31
|
# @param [Hash] options
|
32
32
|
# => :if is a proc that will be called to determine if the BatchAction should be displayed
|
33
33
|
# => :sort_order is used to sort the batch actions ascending
|
34
|
-
# => :confirm is a string
|
34
|
+
# => :confirm is a string to prompt the user with (or a boolean to use the default message)
|
35
|
+
# => :form is a Hash of form fields you want the user to fill out
|
35
36
|
#
|
36
37
|
def add_batch_action(sym, title, options = {}, &block)
|
37
38
|
@batch_actions[sym] = ActiveAdmin::BatchAction.new(sym, title, options, &block)
|
@@ -39,7 +40,7 @@ module ActiveAdmin
|
|
39
40
|
|
40
41
|
# Remove a batch action
|
41
42
|
# @param [Symbol] sym
|
42
|
-
# @
|
43
|
+
# @return [ActiveAdmin::BatchAction] the batch action, if it was present
|
43
44
|
#
|
44
45
|
def remove_batch_action(sym)
|
45
46
|
@batch_actions.delete(sym.to_sym)
|
@@ -58,21 +59,24 @@ module ActiveAdmin
|
|
58
59
|
private
|
59
60
|
|
60
61
|
# @return [ActiveAdmin::BatchAction] The default "delete" action
|
61
|
-
def
|
62
|
+
def add_default_batch_action
|
62
63
|
destroy_options = {
|
63
|
-
:
|
64
|
-
:
|
65
|
-
:
|
64
|
+
priority: 100,
|
65
|
+
confirm: proc{ I18n.t('active_admin.batch_actions.delete_confirmation', plural_model: active_admin_config.plural_resource_label.downcase) },
|
66
|
+
if: proc{ controller.action_methods.include?('destroy') && authorized?(ActiveAdmin::Auth::DESTROY, active_admin_config.resource_class) }
|
66
67
|
}
|
67
68
|
|
68
69
|
add_batch_action :destroy, proc { I18n.t('active_admin.delete') }, destroy_options do |selected_ids|
|
69
|
-
|
70
|
+
batch_action_collection.find(selected_ids).each do |record|
|
71
|
+
authorize! ActiveAdmin::Auth::DESTROY, record
|
72
|
+
destroy_resource(record)
|
73
|
+
end
|
70
74
|
|
71
75
|
redirect_to active_admin_config.route_collection_path(params),
|
72
|
-
:
|
73
|
-
:
|
74
|
-
:
|
75
|
-
:
|
76
|
+
notice: I18n.t("active_admin.batch_actions.succesfully_destroyed",
|
77
|
+
count: selected_ids.count,
|
78
|
+
model: active_admin_config.resource_label.downcase,
|
79
|
+
plural_model: active_admin_config.plural_resource_label(count: selected_ids.count).downcase)
|
76
80
|
end
|
77
81
|
end
|
78
82
|
|
@@ -83,7 +87,9 @@ module ActiveAdmin
|
|
83
87
|
|
84
88
|
include Comparable
|
85
89
|
|
86
|
-
attr_reader :block, :title, :sym
|
90
|
+
attr_reader :block, :title, :sym
|
91
|
+
|
92
|
+
DEFAULT_CONFIRM_MESSAGE = proc{ I18n.t 'active_admin.batch_actions.default_confirmation' }
|
87
93
|
|
88
94
|
# Create a Batch Action
|
89
95
|
#
|
@@ -92,24 +98,47 @@ module ActiveAdmin
|
|
92
98
|
# BatchAction.new :flag
|
93
99
|
# => Will create an action that appears in the action list popover
|
94
100
|
#
|
95
|
-
# BatchAction.new(
|
101
|
+
# BatchAction.new(:flag) { |selection| redirect_to collection_path, notice: "#{selection.length} users flagged" }
|
96
102
|
# => Will create an action that uses a block to process the request (which receives one paramater of the selected objects)
|
97
103
|
#
|
98
|
-
# BatchAction.new(
|
104
|
+
# BatchAction.new("Perform Long Operation on") { |selection| }
|
99
105
|
# => You can create batch actions with a title instead of a Symbol
|
100
106
|
#
|
101
|
-
# BatchAction.new(
|
102
|
-
# => You can provide an
|
107
|
+
# BatchAction.new(:flag, if: proc{ can? :flag, AdminUser }) { |selection| }
|
108
|
+
# => You can provide an `:if` proc to choose when the batch action should be displayed
|
109
|
+
#
|
110
|
+
# BatchAction.new :flag, confirm: true
|
111
|
+
# => You can pass `true` to `:confirm` to use the default confirm message.
|
112
|
+
#
|
113
|
+
# BatchAction.new(:flag, confirm: "Are you sure?") { |selection| }
|
114
|
+
# => You can pass a custom confirmation message through `:confirm`
|
115
|
+
#
|
116
|
+
# BatchAction.new(:flag, form: {foo: :text, bar: :checkbox}) { |selection, inputs| }
|
117
|
+
# => You can pass a hash of options to `:form` that will be rendered as form input fields for the user to fill out.
|
103
118
|
#
|
104
119
|
def initialize(sym, title, options = {}, &block)
|
105
120
|
@sym, @title, @options, @block, @confirm = sym, title, options, block, options[:confirm]
|
106
121
|
@block ||= proc {}
|
107
122
|
end
|
108
123
|
|
124
|
+
def confirm
|
125
|
+
if @confirm == true
|
126
|
+
DEFAULT_CONFIRM_MESSAGE
|
127
|
+
elsif !@confirm && @options[:form]
|
128
|
+
DEFAULT_CONFIRM_MESSAGE
|
129
|
+
else
|
130
|
+
@confirm
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
def inputs
|
135
|
+
@options[:form]
|
136
|
+
end
|
137
|
+
|
109
138
|
# Returns the display if block. If the block was not explicitly defined
|
110
139
|
# a default block always returning true will be returned.
|
111
140
|
def display_if_block
|
112
|
-
@options[:if] || proc
|
141
|
+
@options[:if] || proc{ true }
|
113
142
|
end
|
114
143
|
|
115
144
|
# Used for sorting
|