activeadmin 2.4.0 → 2.13.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +364 -31
- data/CONTRIBUTING.md +42 -62
- data/README.md +4 -4
- data/app/assets/javascripts/active_admin/base.js +524 -0
- data/app/assets/stylesheets/active_admin/_base.scss +53 -37
- data/app/assets/stylesheets/active_admin/_forms.scss +0 -10
- data/app/assets/stylesheets/active_admin/_header.scss +40 -8
- data/app/assets/stylesheets/active_admin/_mixins.scss +1 -1
- data/{vendor → app}/assets/stylesheets/active_admin/_normalize.scss +25 -123
- data/app/assets/stylesheets/active_admin/{print.scss → _print.scss} +2 -2
- data/app/assets/stylesheets/active_admin/components/_comments.scss +2 -2
- data/app/assets/stylesheets/active_admin/components/_date_picker.scss +1 -2
- data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +0 -1
- data/app/assets/stylesheets/active_admin/components/_tables.scss +1 -2
- data/app/assets/stylesheets/active_admin/mixins/_all.scss +8 -8
- data/app/assets/stylesheets/active_admin/mixins/_variables.scss +17 -0
- data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +1 -1
- data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +0 -1
- data/app/javascript/active_admin/base.js +28 -0
- data/app/{assets/javascripts/active_admin/ext/jquery-ui.es6 → javascript/active_admin/ext/jquery-ui.js} +0 -0
- data/app/{assets/javascripts/active_admin/ext/jquery.es6 → javascript/active_admin/ext/jquery.js} +0 -0
- data/app/{assets/javascripts/active_admin/lib/batch_actions.es6 → javascript/active_admin/initializers/batch-actions.js} +4 -2
- data/app/javascript/active_admin/initializers/checkbox-toggler.js +3 -0
- data/app/{assets/javascripts/active_admin/initializers/datepicker.es6 → javascript/active_admin/initializers/datepicker.js} +0 -0
- data/app/javascript/active_admin/initializers/dropdown-menu.js +9 -0
- data/app/javascript/active_admin/initializers/filters.js +10 -0
- data/app/{assets/javascripts/active_admin/lib/has_many.es6 → javascript/active_admin/initializers/has-many.js} +4 -1
- data/app/javascript/active_admin/initializers/per-page.js +13 -0
- data/app/javascript/active_admin/initializers/table-checkbox-toggler.js +3 -0
- data/app/{assets/javascripts/active_admin/initializers/tabs.es6 → javascript/active_admin/initializers/tabs.js} +0 -0
- data/app/{assets/javascripts/active_admin/lib/checkbox-toggler.es6 → javascript/active_admin/lib/checkbox-toggler.js} +5 -5
- data/app/{assets/javascripts/active_admin/lib/dropdown-menu.es6 → javascript/active_admin/lib/dropdown-menu.js} +3 -10
- data/app/javascript/active_admin/lib/filters.js +39 -0
- data/app/{assets/javascripts/active_admin/lib/modal_dialog.es6 → javascript/active_admin/lib/modal-dialog.js} +10 -8
- data/app/javascript/active_admin/lib/per-page.js +38 -0
- data/app/{assets/javascripts/active_admin/lib/table-checkbox-toggler.es6 → javascript/active_admin/lib/table-checkbox-toggler.js} +5 -3
- data/app/javascript/active_admin/lib/utils.js +40 -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 +2 -2
- data/app/views/active_admin/devise/shared/_links.erb +1 -1
- data/app/views/active_admin/page/index.html.arb +1 -0
- data/app/views/active_admin/resource/edit.html.arb +1 -0
- data/app/views/active_admin/resource/index.html.arb +1 -0
- data/app/views/active_admin/resource/new.html.arb +1 -0
- data/app/views/active_admin/resource/show.html.arb +1 -0
- data/app/views/layouts/active_admin.html.arb +1 -0
- data/app/views/layouts/active_admin_logged_out.html.erb +15 -5
- data/config/locales/ar.yml +6 -6
- data/config/locales/az.yml +138 -0
- data/config/locales/en-CA.yml +3 -3
- data/config/locales/en-GB.yml +3 -3
- data/config/locales/en.yml +3 -3
- data/config/locales/es-MX.yml +2 -1
- data/config/locales/es.yml +5 -5
- data/config/locales/fr.yml +4 -4
- data/config/locales/it.yml +18 -0
- data/config/locales/ja.yml +3 -3
- data/config/locales/ko.yml +1 -1
- data/config/locales/lv.yml +2 -2
- data/config/locales/nl.yml +1 -1
- data/config/locales/ro.yml +3 -2
- data/config/locales/vi.yml +6 -5
- data/docs/0-installation.md +27 -3
- data/docs/1-general-configuration.md +20 -0
- data/docs/11-decorators.md +16 -5
- data/docs/2-resource-customization.md +10 -1
- data/docs/3-index-pages.md +1 -1
- data/docs/5-forms.md +9 -3
- data/docs/6-show-pages.md +12 -0
- data/docs/8-custom-actions.md +1 -1
- data/docs/9-batch-actions.md +2 -2
- data/docs/Gemfile +3 -2
- data/docs/Gemfile.lock +192 -157
- data/docs/_includes/top-menu.html +1 -1
- data/docs/documentation.md +1 -1
- data/docs/index.html +6 -6
- data/lib/active_admin/abstract_view_factory.rb +1 -0
- data/lib/active_admin/application.rb +20 -20
- data/lib/active_admin/application_settings.rb +4 -3
- data/lib/active_admin/asset_registration.rb +1 -0
- data/lib/active_admin/authorization_adapter.rb +4 -3
- data/lib/active_admin/base_controller/authorization.rb +15 -13
- data/lib/active_admin/base_controller/menu.rb +1 -0
- data/lib/active_admin/base_controller.rb +6 -5
- data/lib/active_admin/batch_actions/controller.rb +4 -3
- data/lib/active_admin/batch_actions/resource_extension.rb +10 -8
- data/lib/active_admin/batch_actions/views/batch_action_form.rb +4 -3
- data/lib/active_admin/batch_actions/views/batch_action_selector.rb +7 -6
- data/lib/active_admin/batch_actions/views/selection_cells.rb +4 -3
- data/lib/active_admin/batch_actions.rb +1 -0
- data/lib/active_admin/callbacks.rb +1 -0
- data/lib/active_admin/cancan_adapter.rb +2 -1
- data/lib/active_admin/collection_decorator.rb +32 -0
- data/lib/active_admin/component.rb +1 -0
- data/lib/active_admin/controller_action.rb +1 -0
- data/lib/active_admin/csv_builder.rb +12 -21
- data/lib/active_admin/dependency.rb +13 -12
- data/lib/active_admin/deprecation.rb +1 -0
- data/lib/active_admin/devise.rb +16 -5
- data/lib/active_admin/dsl.rb +2 -1
- data/lib/active_admin/dynamic_setting.rb +1 -0
- data/lib/active_admin/dynamic_settings_node.rb +3 -2
- data/lib/active_admin/engine.rb +13 -9
- data/lib/active_admin/error.rb +1 -2
- data/lib/active_admin/filters/active.rb +2 -1
- data/lib/active_admin/filters/active_filter.rb +7 -7
- data/lib/active_admin/filters/active_sidebar.rb +4 -30
- data/lib/active_admin/filters/dsl.rb +1 -0
- data/lib/active_admin/filters/forms.rb +7 -6
- data/lib/active_admin/filters/formtastic_addons.rb +2 -6
- data/lib/active_admin/filters/resource_extension.rb +2 -1
- data/lib/active_admin/filters.rb +8 -7
- data/lib/active_admin/form_builder.rb +25 -20
- data/lib/active_admin/generators/boilerplate.rb +2 -1
- data/lib/active_admin/helpers/collection.rb +2 -0
- data/lib/active_admin/helpers/i18n.rb +1 -0
- data/lib/active_admin/helpers/optional_display.rb +3 -2
- data/lib/active_admin/helpers/routes/url_helpers.rb +1 -0
- data/lib/active_admin/helpers/scope_chain.rb +1 -0
- data/lib/active_admin/inputs/datepicker_input.rb +2 -1
- data/lib/active_admin/inputs/filters/base/search_method_select.rb +5 -4
- data/lib/active_admin/inputs/filters/base.rb +2 -1
- data/lib/active_admin/inputs/filters/boolean_input.rb +2 -1
- data/lib/active_admin/inputs/filters/check_boxes_input.rb +2 -1
- data/lib/active_admin/inputs/filters/date_picker_input.rb +1 -0
- data/lib/active_admin/inputs/filters/date_range_input.rb +16 -12
- data/lib/active_admin/inputs/filters/numeric_input.rb +1 -0
- data/lib/active_admin/inputs/filters/select_input.rb +3 -2
- data/lib/active_admin/inputs/filters/string_input.rb +1 -0
- data/lib/active_admin/inputs/filters/text_input.rb +1 -0
- data/lib/active_admin/inputs.rb +1 -0
- data/lib/active_admin/localizers/resource_localizer.rb +4 -3
- data/lib/active_admin/localizers.rb +2 -1
- data/lib/active_admin/menu.rb +7 -3
- data/lib/active_admin/menu_collection.rb +1 -0
- data/lib/active_admin/menu_item.rb +8 -7
- data/lib/active_admin/namespace.rb +15 -14
- data/lib/active_admin/namespace_settings.rb +9 -5
- data/lib/active_admin/order_clause.rb +2 -1
- data/lib/active_admin/orm/active_record/comments/comment.rb +4 -3
- data/lib/active_admin/orm/active_record/comments/namespace_helper.rb +1 -0
- data/lib/active_admin/orm/active_record/comments/resource_helper.rb +1 -0
- data/lib/active_admin/orm/active_record/comments/show_page_helper.rb +1 -0
- data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +20 -19
- data/lib/active_admin/orm/active_record/comments/views.rb +3 -2
- data/lib/active_admin/orm/active_record/comments.rb +20 -19
- data/lib/active_admin/orm/active_record.rb +2 -1
- data/lib/active_admin/orm/mongoid.rb +1 -0
- data/lib/active_admin/page.rb +2 -1
- data/lib/active_admin/page_controller.rb +1 -0
- data/lib/active_admin/page_dsl.rb +1 -0
- data/lib/active_admin/page_presenter.rb +1 -0
- data/lib/active_admin/pundit_adapter.rb +59 -15
- data/lib/active_admin/resource/action_items.rb +6 -5
- data/lib/active_admin/resource/attributes.rb +2 -1
- data/lib/active_admin/resource/belongs_to.rb +3 -2
- data/lib/active_admin/resource/controllers.rb +2 -1
- data/lib/active_admin/resource/includes.rb +1 -0
- data/lib/active_admin/resource/menu.rb +5 -4
- data/lib/active_admin/resource/model.rb +1 -0
- data/lib/active_admin/resource/naming.rb +6 -5
- data/lib/active_admin/resource/ordering.rb +1 -0
- data/lib/active_admin/resource/page_presenters.rb +1 -0
- data/lib/active_admin/resource/pagination.rb +1 -0
- data/lib/active_admin/resource/routes.rb +6 -7
- data/lib/active_admin/resource/scope_to.rb +8 -7
- data/lib/active_admin/resource/scopes.rb +1 -0
- data/lib/active_admin/resource/sidebars.rb +2 -1
- data/lib/active_admin/resource.rb +21 -20
- data/lib/active_admin/resource_collection.rb +1 -0
- data/lib/active_admin/resource_controller/action_builder.rb +1 -0
- data/lib/active_admin/resource_controller/data_access.rb +31 -5
- data/lib/active_admin/resource_controller/decorators.rb +7 -28
- data/lib/active_admin/resource_controller/polymorphic_routes.rb +4 -2
- data/lib/active_admin/resource_controller/resource_class_methods.rb +1 -0
- data/lib/active_admin/resource_controller/scoping.rb +1 -0
- data/lib/active_admin/resource_controller/sidebars.rb +1 -0
- data/lib/active_admin/resource_controller/streaming.rb +9 -7
- data/lib/active_admin/resource_controller.rb +13 -11
- data/lib/active_admin/resource_dsl.rb +11 -25
- data/lib/active_admin/router.rb +1 -0
- data/lib/active_admin/scope.rb +7 -6
- data/lib/active_admin/settings_node.rb +1 -0
- data/lib/active_admin/sidebar_section.rb +1 -0
- data/lib/active_admin/version.rb +2 -1
- data/lib/active_admin/view_factory.rb +18 -17
- data/lib/active_admin/view_helpers/active_admin_application_helper.rb +1 -0
- data/lib/active_admin/view_helpers/auto_link_helper.rb +1 -0
- data/lib/active_admin/view_helpers/breadcrumb_helper.rb +4 -3
- data/lib/active_admin/view_helpers/display_helper.rb +15 -7
- data/lib/active_admin/view_helpers/download_format_links_helper.rb +2 -1
- data/lib/active_admin/view_helpers/fields_for.rb +3 -2
- data/lib/active_admin/view_helpers/flash_helper.rb +1 -0
- data/lib/active_admin/view_helpers/form_helper.rb +1 -0
- data/lib/active_admin/view_helpers/method_or_proc_helper.rb +1 -0
- data/lib/active_admin/view_helpers/scope_name_helper.rb +1 -0
- data/lib/active_admin/view_helpers/sidebar_helper.rb +1 -0
- data/lib/active_admin/view_helpers/title_helper.rb +1 -0
- data/lib/active_admin/view_helpers/view_factory_helper.rb +1 -0
- data/lib/active_admin/view_helpers.rb +2 -1
- data/lib/active_admin/views/action_items.rb +1 -0
- data/lib/active_admin/views/components/active_admin_form.rb +7 -6
- data/lib/active_admin/views/components/active_filters_sidebar_content.rb +59 -0
- data/lib/active_admin/views/components/attributes_table.rb +6 -5
- data/lib/active_admin/views/components/blank_slate.rb +2 -1
- data/lib/active_admin/views/components/columns.rb +1 -0
- data/lib/active_admin/views/components/dropdown_menu.rb +7 -9
- data/lib/active_admin/views/components/index_list.rb +4 -3
- data/lib/active_admin/views/components/menu.rb +2 -1
- data/lib/active_admin/views/components/menu_item.rb +5 -4
- data/lib/active_admin/views/components/paginated_collection.rb +20 -18
- data/lib/active_admin/views/components/panel.rb +2 -1
- data/lib/active_admin/views/components/scopes.rb +8 -5
- data/lib/active_admin/views/components/sidebar.rb +1 -0
- data/lib/active_admin/views/components/sidebar_section.rb +1 -0
- data/lib/active_admin/views/components/site_title.rb +2 -1
- data/lib/active_admin/views/components/status_tag.rb +12 -11
- data/lib/active_admin/views/components/table_for.rb +19 -17
- data/lib/active_admin/views/components/tabs.rb +4 -3
- data/lib/active_admin/views/components/unsupported_browser.rb +1 -0
- data/lib/active_admin/views/footer.rb +3 -1
- data/lib/active_admin/views/header.rb +3 -2
- data/lib/active_admin/views/index_as_block.rb +1 -0
- data/lib/active_admin/views/index_as_blog.rb +2 -1
- data/lib/active_admin/views/index_as_grid.rb +2 -1
- data/lib/active_admin/views/index_as_table.rb +17 -16
- data/lib/active_admin/views/pages/base.rb +19 -12
- data/lib/active_admin/views/pages/form.rb +1 -0
- data/lib/active_admin/views/pages/index.rb +16 -13
- data/lib/active_admin/views/pages/layout.rb +1 -0
- data/lib/active_admin/views/pages/page.rb +1 -0
- data/lib/active_admin/views/pages/show.rb +1 -0
- data/lib/active_admin/views/tabbed_navigation.rb +3 -2
- data/lib/active_admin/views/title_bar.rb +2 -1
- data/lib/active_admin/views.rb +2 -1
- data/lib/active_admin.rb +63 -64
- data/lib/activeadmin.rb +2 -1
- data/lib/generators/active_admin/assets/assets_generator.rb +3 -2
- data/lib/generators/active_admin/assets/templates/active_admin.scss +2 -2
- data/lib/generators/active_admin/devise/devise_generator.rb +6 -5
- data/lib/generators/active_admin/install/install_generator.rb +15 -8
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +9 -2
- data/lib/generators/active_admin/install/templates/dashboard.rb +1 -0
- data/lib/generators/active_admin/page/page_generator.rb +2 -1
- data/lib/generators/active_admin/page/templates/page.rb +1 -0
- data/lib/generators/active_admin/resource/resource_generator.rb +4 -3
- data/lib/generators/active_admin/webpacker/plugins/jquery.js +7 -0
- data/lib/generators/active_admin/webpacker/templates/active_admin.js +5 -0
- data/lib/generators/active_admin/webpacker/templates/active_admin.scss +17 -0
- data/lib/generators/active_admin/webpacker/templates/print.scss +2 -0
- data/lib/generators/active_admin/webpacker/webpacker_generator.rb +27 -0
- data/lib/ransack_ext.rb +9 -8
- metadata +54 -91
- data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
- data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
- data/app/assets/images/active_admin/orderable.png +0 -0
- data/app/assets/javascripts/active_admin/base.es6 +0 -23
- data/app/assets/javascripts/active_admin/initializers/filters.es6 +0 -45
- data/app/assets/javascripts/active_admin/lib/active_admin.es6 +0 -41
- data/app/assets/javascripts/active_admin/lib/per_page.es6 +0 -47
|
@@ -1,15 +1,16 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module ActiveAdmin
|
|
2
3
|
class BaseController < ::InheritedResources::Base
|
|
3
4
|
module Authorization
|
|
4
5
|
extend ActiveSupport::Concern
|
|
5
6
|
|
|
6
7
|
ACTIONS_DICTIONARY = {
|
|
7
|
-
index:
|
|
8
|
-
show:
|
|
9
|
-
new:
|
|
10
|
-
create:
|
|
11
|
-
edit:
|
|
12
|
-
update:
|
|
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,
|
|
13
14
|
destroy: ActiveAdmin::Authorization::DESTROY
|
|
14
15
|
}
|
|
15
16
|
|
|
@@ -52,9 +53,10 @@ module ActiveAdmin
|
|
|
52
53
|
# an ActiveAdmin::AccessDenied.
|
|
53
54
|
def authorize!(action, subject = nil)
|
|
54
55
|
unless authorized? action, subject
|
|
55
|
-
raise ActiveAdmin::AccessDenied.new(
|
|
56
|
-
|
|
57
|
-
|
|
56
|
+
raise ActiveAdmin::AccessDenied.new(
|
|
57
|
+
current_active_admin_user,
|
|
58
|
+
action,
|
|
59
|
+
subject)
|
|
58
60
|
end
|
|
59
61
|
end
|
|
60
62
|
|
|
@@ -80,7 +82,7 @@ module ActiveAdmin
|
|
|
80
82
|
def active_admin_authorization_adapter
|
|
81
83
|
adapter = active_admin_namespace.authorization_adapter
|
|
82
84
|
if adapter.is_a? String
|
|
83
|
-
|
|
85
|
+
adapter.constantize
|
|
84
86
|
else
|
|
85
87
|
adapter
|
|
86
88
|
end
|
|
@@ -112,9 +114,9 @@ module ActiveAdmin
|
|
|
112
114
|
redirect_backwards_or_to_root
|
|
113
115
|
end
|
|
114
116
|
|
|
115
|
-
format.csv
|
|
116
|
-
format.json { render json: { error: error },
|
|
117
|
-
format.xml
|
|
117
|
+
format.csv { render body: error, status: :unauthorized }
|
|
118
|
+
format.json { render json: { error: error }, status: :unauthorized }
|
|
119
|
+
format.xml { render xml: "<error>#{error}</error>", status: :unauthorized }
|
|
118
120
|
end
|
|
119
121
|
end
|
|
120
122
|
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
require
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require "active_admin/base_controller/authorization"
|
|
3
|
+
require "active_admin/base_controller/menu"
|
|
3
4
|
|
|
4
5
|
module ActiveAdmin
|
|
5
6
|
# BaseController for ActiveAdmin.
|
|
6
7
|
# It implements ActiveAdmin controllers core features.
|
|
7
8
|
class BaseController < ::InheritedResources::Base
|
|
8
9
|
helper ::ActiveAdmin::ViewHelpers
|
|
9
|
-
helper_method :env
|
|
10
10
|
|
|
11
11
|
layout :determine_active_admin_layout
|
|
12
12
|
|
|
@@ -69,13 +69,14 @@ module ActiveAdmin
|
|
|
69
69
|
# 2. If we're rendering a custom action, we'll use the active_admin layout so
|
|
70
70
|
# that users can render any template inside Active Admin.
|
|
71
71
|
def determine_active_admin_layout
|
|
72
|
-
ACTIVE_ADMIN_ACTIONS.include?(params[:action].to_sym) ? false :
|
|
72
|
+
ACTIVE_ADMIN_ACTIONS.include?(params[:action].to_sym) ? false : "active_admin"
|
|
73
73
|
end
|
|
74
74
|
|
|
75
75
|
def active_admin_root
|
|
76
|
-
controller, action = active_admin_namespace.root_to.split
|
|
76
|
+
controller, action = active_admin_namespace.root_to.split "#"
|
|
77
77
|
{ controller: controller, action: action }
|
|
78
78
|
end
|
|
79
79
|
|
|
80
|
+
ActiveSupport.run_load_hooks(:active_admin_controller, self)
|
|
80
81
|
end
|
|
81
82
|
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module ActiveAdmin
|
|
2
3
|
module BatchActions
|
|
3
4
|
module Controller
|
|
@@ -5,10 +6,10 @@ module ActiveAdmin
|
|
|
5
6
|
# Controller action that is called when submitting the batch action form
|
|
6
7
|
def batch_action
|
|
7
8
|
if action_present?
|
|
8
|
-
selection
|
|
9
|
-
inputs
|
|
9
|
+
selection = params[:collection_selection] || []
|
|
10
|
+
inputs = JSON.parse params[:batch_action_inputs] || "{}"
|
|
10
11
|
valid_keys = MethodOrProcHelper.render_in_context(self, current_batch_action.inputs).try(:keys)
|
|
11
|
-
inputs
|
|
12
|
+
inputs = inputs.with_indifferent_access.slice *valid_keys
|
|
12
13
|
instance_exec selection, inputs, ¤t_batch_action.block
|
|
13
14
|
else
|
|
14
15
|
raise "Couldn't find batch action \"#{params[:batch_action]}\""
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module ActiveAdmin
|
|
2
3
|
|
|
3
4
|
module BatchActions
|
|
@@ -57,21 +58,22 @@ module ActiveAdmin
|
|
|
57
58
|
def add_default_batch_action
|
|
58
59
|
destroy_options = {
|
|
59
60
|
priority: 100,
|
|
60
|
-
confirm: proc { I18n.t(
|
|
61
|
-
if: proc { controller.action_methods.include?(
|
|
61
|
+
confirm: proc { I18n.t("active_admin.batch_actions.delete_confirmation", plural_model: active_admin_config.plural_resource_label.downcase) },
|
|
62
|
+
if: proc { controller.action_methods.include?("destroy") && authorized?(ActiveAdmin::Auth::DESTROY, active_admin_config.resource_class) }
|
|
62
63
|
}
|
|
63
64
|
|
|
64
|
-
add_batch_action :destroy, proc { I18n.t(
|
|
65
|
+
add_batch_action :destroy, proc { I18n.t("active_admin.delete") }, destroy_options do |selected_ids|
|
|
65
66
|
batch_action_collection.find(selected_ids).each do |record|
|
|
66
67
|
authorize! ActiveAdmin::Auth::DESTROY, record
|
|
67
68
|
destroy_resource(record)
|
|
68
69
|
end
|
|
69
70
|
|
|
70
71
|
redirect_to active_admin_config.route_collection_path(params),
|
|
71
|
-
notice: I18n.t(
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
72
|
+
notice: I18n.t(
|
|
73
|
+
"active_admin.batch_actions.succesfully_destroyed",
|
|
74
|
+
count: selected_ids.count,
|
|
75
|
+
model: active_admin_config.resource_label.downcase,
|
|
76
|
+
plural_model: active_admin_config.plural_resource_label(count: selected_ids.count).downcase)
|
|
75
77
|
end
|
|
76
78
|
end
|
|
77
79
|
|
|
@@ -84,7 +86,7 @@ module ActiveAdmin
|
|
|
84
86
|
|
|
85
87
|
attr_reader :block, :title, :sym
|
|
86
88
|
|
|
87
|
-
DEFAULT_CONFIRM_MESSAGE = proc { I18n.t
|
|
89
|
+
DEFAULT_CONFIRM_MESSAGE = proc { I18n.t "active_admin.batch_actions.default_confirmation" }
|
|
88
90
|
|
|
89
91
|
# Create a Batch Action
|
|
90
92
|
#
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require "active_admin/component"
|
|
2
3
|
|
|
3
4
|
module ActiveAdmin
|
|
4
5
|
module BatchActions
|
|
@@ -16,7 +17,7 @@ module ActiveAdmin
|
|
|
16
17
|
# batch_action => name of the specific action called
|
|
17
18
|
# batch_action_inputs => a JSON string of any requested confirmation values
|
|
18
19
|
text_node form_tag active_admin_config.route_batch_action_path(params, url_options), id: options[:id]
|
|
19
|
-
input name: :batch_action,
|
|
20
|
+
input name: :batch_action, id: :batch_action, type: :hidden
|
|
20
21
|
input name: :batch_action_inputs, id: :batch_action_inputs, type: :hidden
|
|
21
22
|
|
|
22
23
|
super(options)
|
|
@@ -30,7 +31,7 @@ module ActiveAdmin
|
|
|
30
31
|
private
|
|
31
32
|
|
|
32
33
|
def closing_form_tag
|
|
33
|
-
|
|
34
|
+
"</form>".html_safe
|
|
34
35
|
end
|
|
35
36
|
|
|
36
37
|
end
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require "active_admin/component"
|
|
2
3
|
|
|
3
4
|
module ActiveAdmin
|
|
4
5
|
module BatchActions
|
|
@@ -31,17 +32,17 @@ module ActiveAdmin
|
|
|
31
32
|
confirmation_text = render_or_call_method_or_proc_on(self, batch_action.confirm)
|
|
32
33
|
|
|
33
34
|
options = {
|
|
34
|
-
:
|
|
35
|
-
"data-action"
|
|
36
|
-
"data-confirm"
|
|
37
|
-
"data-inputs"
|
|
35
|
+
class: "batch_action",
|
|
36
|
+
"data-action": batch_action.sym,
|
|
37
|
+
"data-confirm": confirmation_text,
|
|
38
|
+
"data-inputs": render_in_context(self, batch_action.inputs).to_json
|
|
38
39
|
}
|
|
39
40
|
|
|
40
41
|
default_title = render_or_call_method_or_proc_on(self, batch_action.title)
|
|
41
42
|
title = I18n.t("active_admin.batch_actions.labels.#{batch_action.sym}", default: default_title)
|
|
42
43
|
label = I18n.t("active_admin.batch_actions.action_label", title: title)
|
|
43
44
|
|
|
44
|
-
item label, "#", options
|
|
45
|
+
item label, "#", **options
|
|
45
46
|
end
|
|
46
47
|
end
|
|
47
48
|
end
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require "active_admin/component"
|
|
2
3
|
|
|
3
4
|
module ActiveAdmin
|
|
4
5
|
module BatchActions
|
|
@@ -7,7 +8,7 @@ module ActiveAdmin
|
|
|
7
8
|
class ResourceSelectionToggleCell < ActiveAdmin::Component
|
|
8
9
|
builder_method :resource_selection_toggle_cell
|
|
9
10
|
|
|
10
|
-
def build(label_text =
|
|
11
|
+
def build(label_text = "")
|
|
11
12
|
label do
|
|
12
13
|
input type: "checkbox", id: "collection_selection_toggle_all", name: "collection_selection_toggle_all", class: "toggle_all"
|
|
13
14
|
text_node label_text if label_text.present?
|
|
@@ -30,7 +31,7 @@ module ActiveAdmin
|
|
|
30
31
|
|
|
31
32
|
def build
|
|
32
33
|
super(id: "collection_selection_toggle_panel")
|
|
33
|
-
resource_selection_toggle_cell(I18n.t(
|
|
34
|
+
resource_selection_toggle_cell(I18n.t("active_admin.batch_actions.selection_toggle_explanation", default: "(Toggle Selection)"))
|
|
34
35
|
end
|
|
35
36
|
end
|
|
36
37
|
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
unless ActiveAdmin::Dependency.cancan? || ActiveAdmin::Dependency.cancancan?
|
|
2
3
|
ActiveAdmin::Dependency.cancan!
|
|
3
4
|
end
|
|
4
5
|
|
|
5
|
-
require
|
|
6
|
+
require "cancan"
|
|
6
7
|
|
|
7
8
|
# Add a setting to the application to configure the ability
|
|
8
9
|
ActiveAdmin::Application.inheritable_setting :cancan_ability_class, "Ability"
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module ActiveAdmin
|
|
3
|
+
# This class decorates a collection of objects delegating
|
|
4
|
+
# mehods to behave like an Array. It's used to decouple ActiveAdmin
|
|
5
|
+
# from Draper and thus being able to use PORO decorators as well.
|
|
6
|
+
#
|
|
7
|
+
# It's implementation is heavily based on the Draper::CollectionDecorator
|
|
8
|
+
# https://github.com/drapergem/draper/blob/aaa06bd2f1e219838b241a5534e7ca513edd1fe2/lib/draper/collection_decorator.rb
|
|
9
|
+
class CollectionDecorator
|
|
10
|
+
# @return the collection being decorated.
|
|
11
|
+
attr_reader :object
|
|
12
|
+
|
|
13
|
+
# @return [Class] the decorator class used to decorate each item, as set by {#initialize}.
|
|
14
|
+
attr_reader :decorator_class
|
|
15
|
+
|
|
16
|
+
array_methods = Array.instance_methods - Object.instance_methods
|
|
17
|
+
delegate :==, :as_json, *array_methods, to: :decorated_collection
|
|
18
|
+
|
|
19
|
+
def initialize(object, with:)
|
|
20
|
+
@object = object
|
|
21
|
+
@decorator_class = with
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
class << self
|
|
25
|
+
alias_method :decorate, :new
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def decorated_collection
|
|
29
|
+
@decorated_collection ||= object.map { |item| decorator_class.new(item) }
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module ActiveAdmin
|
|
2
3
|
# CSVBuilder stores CSV configuration
|
|
3
4
|
#
|
|
@@ -42,25 +43,19 @@ module ActiveAdmin
|
|
|
42
43
|
end
|
|
43
44
|
|
|
44
45
|
def build(controller, csv)
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
bom = options.delete :byte_order_mark
|
|
46
|
+
columns = exec_columns controller.view_context
|
|
47
|
+
bom = options[:byte_order_mark]
|
|
48
48
|
column_names = options.delete(:column_names) { true }
|
|
49
|
-
csv_options
|
|
49
|
+
csv_options = options.except :encoding_options, :humanize_name, :byte_order_mark
|
|
50
50
|
|
|
51
51
|
csv << bom if bom
|
|
52
52
|
|
|
53
53
|
if column_names
|
|
54
|
-
csv << CSV.generate_line(columns.map { |c| encode c.name, options }, csv_options)
|
|
54
|
+
csv << CSV.generate_line(columns.map { |c| encode c.name, options }, **csv_options)
|
|
55
55
|
end
|
|
56
56
|
|
|
57
|
-
|
|
58
|
-
(
|
|
59
|
-
paginated_collection(page).each do |resource|
|
|
60
|
-
resource = controller.send :apply_decorator, resource
|
|
61
|
-
csv << CSV.generate_line(build_row(resource, columns, options), csv_options)
|
|
62
|
-
end
|
|
63
|
-
end
|
|
57
|
+
controller.send(:in_paginated_batches) do |resource|
|
|
58
|
+
csv << CSV.generate_line(build_row(resource, columns, options), **csv_options)
|
|
64
59
|
end
|
|
65
60
|
|
|
66
61
|
csv
|
|
@@ -81,7 +76,11 @@ module ActiveAdmin
|
|
|
81
76
|
|
|
82
77
|
def encode(content, options)
|
|
83
78
|
if options[:encoding]
|
|
84
|
-
|
|
79
|
+
if options[:encoding_options]
|
|
80
|
+
content.to_s.encode options[:encoding], **options[:encoding_options]
|
|
81
|
+
else
|
|
82
|
+
content.to_s.encode options[:encoding]
|
|
83
|
+
end
|
|
85
84
|
else
|
|
86
85
|
content
|
|
87
86
|
end
|
|
@@ -120,13 +119,5 @@ module ActiveAdmin
|
|
|
120
119
|
def column_transitive_options
|
|
121
120
|
@column_transitive_options ||= @options.slice(*COLUMN_TRANSITIVE_OPTIONS)
|
|
122
121
|
end
|
|
123
|
-
|
|
124
|
-
def paginated_collection(page_no = 1)
|
|
125
|
-
@collection.public_send(Kaminari.config.page_method_name, page_no).per(batch_size)
|
|
126
|
-
end
|
|
127
|
-
|
|
128
|
-
def batch_size
|
|
129
|
-
1000
|
|
130
|
-
end
|
|
131
122
|
end
|
|
132
123
|
end
|
|
@@ -1,27 +1,28 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module ActiveAdmin
|
|
2
3
|
module Dependency
|
|
3
4
|
module Requirements
|
|
4
|
-
DEVISE =
|
|
5
|
+
DEVISE = ">= 4.0", "< 5"
|
|
5
6
|
end
|
|
6
7
|
|
|
7
8
|
# Provides a clean interface to check for gem dependencies at runtime.
|
|
8
9
|
#
|
|
9
|
-
# ActiveAdmin::Dependency.
|
|
10
|
-
# => #<ActiveAdmin::Dependency::Matcher for
|
|
10
|
+
# ActiveAdmin::Dependency.rails
|
|
11
|
+
# => #<ActiveAdmin::Dependency::Matcher for rails 6.0.3.2>
|
|
11
12
|
#
|
|
12
|
-
# ActiveAdmin::Dependency.
|
|
13
|
+
# ActiveAdmin::Dependency.rails?
|
|
13
14
|
# => true
|
|
14
15
|
#
|
|
15
|
-
# ActiveAdmin::Dependency.
|
|
16
|
+
# ActiveAdmin::Dependency.rails? '>= 6.1'
|
|
16
17
|
# => false
|
|
17
18
|
#
|
|
18
|
-
# ActiveAdmin::Dependency.
|
|
19
|
+
# ActiveAdmin::Dependency.rails? '= 6.0.3.2'
|
|
19
20
|
# => true
|
|
20
21
|
#
|
|
21
|
-
# ActiveAdmin::Dependency.
|
|
22
|
+
# ActiveAdmin::Dependency.rails? '~> 6.0.3'
|
|
22
23
|
# => true
|
|
23
24
|
#
|
|
24
|
-
# ActiveAdmin::Dependency.rails? '>=
|
|
25
|
+
# ActiveAdmin::Dependency.rails? '>= 6.0.3', '<= 6.1.0'
|
|
25
26
|
# => true
|
|
26
27
|
#
|
|
27
28
|
# ActiveAdmin::Dependency.rails! '5'
|
|
@@ -42,9 +43,9 @@ module ActiveAdmin
|
|
|
42
43
|
# => false
|
|
43
44
|
#
|
|
44
45
|
def self.method_missing(name, *args)
|
|
45
|
-
if name[-1] ==
|
|
46
|
+
if name[-1] == "?"
|
|
46
47
|
Matcher.new(name[0..-2]).match? args
|
|
47
|
-
elsif name[-1] ==
|
|
48
|
+
elsif name[-1] == "!"
|
|
48
49
|
Matcher.new(name[0..-2]).match! args
|
|
49
50
|
else
|
|
50
51
|
Matcher.new name.to_s
|
|
@@ -56,7 +57,7 @@ module ActiveAdmin
|
|
|
56
57
|
end
|
|
57
58
|
|
|
58
59
|
def self.supports_zeitwerk?
|
|
59
|
-
|
|
60
|
+
RUBY_ENGINE != "jruby"
|
|
60
61
|
end
|
|
61
62
|
|
|
62
63
|
class Matcher
|
|
@@ -91,7 +92,7 @@ module ActiveAdmin
|
|
|
91
92
|
end
|
|
92
93
|
|
|
93
94
|
def inspect
|
|
94
|
-
info = spec ? "#{spec.name} #{spec.version}" :
|
|
95
|
+
info = spec ? "#{spec.name} #{spec.version}" : "(missing)"
|
|
95
96
|
"<ActiveAdmin::Dependency::Matcher for #{info}>"
|
|
96
97
|
end
|
|
97
98
|
end
|
data/lib/active_admin/devise.rb
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
ActiveAdmin::Dependency.devise! ActiveAdmin::Dependency::Requirements::DEVISE
|
|
2
3
|
|
|
3
|
-
require
|
|
4
|
+
require "devise"
|
|
4
5
|
|
|
5
6
|
module ActiveAdmin
|
|
6
7
|
module Devise
|
|
@@ -9,7 +10,7 @@ module ActiveAdmin
|
|
|
9
10
|
{
|
|
10
11
|
path: ActiveAdmin.application.default_namespace || "/",
|
|
11
12
|
controllers: ActiveAdmin::Devise.controllers,
|
|
12
|
-
path_names: { sign_in:
|
|
13
|
+
path_names: { sign_in: "login", sign_out: "logout" },
|
|
13
14
|
sign_out_via: [*::Devise.sign_out_via, ActiveAdmin.application.logout_link_method].uniq
|
|
14
15
|
}
|
|
15
16
|
end
|
|
@@ -27,14 +28,14 @@ module ActiveAdmin
|
|
|
27
28
|
module Controller
|
|
28
29
|
extend ::ActiveSupport::Concern
|
|
29
30
|
included do
|
|
30
|
-
layout
|
|
31
|
+
layout "active_admin_logged_out"
|
|
31
32
|
helper ::ActiveAdmin::ViewHelpers
|
|
32
33
|
end
|
|
33
34
|
|
|
34
35
|
# Redirect to the default namespace on logout
|
|
35
36
|
def root_path
|
|
36
37
|
namespace = ActiveAdmin.application.default_namespace.presence
|
|
37
|
-
root_path_method = [namespace, :root_path].compact.join(
|
|
38
|
+
root_path_method = [namespace, :root_path].compact.join("_")
|
|
38
39
|
|
|
39
40
|
path = if Helpers::Routes.respond_to? root_path_method
|
|
40
41
|
Helpers::Routes.send root_path_method
|
|
@@ -45,29 +46,39 @@ module ActiveAdmin
|
|
|
45
46
|
|
|
46
47
|
# NOTE: `relative_url_root` is deprecated by Rails.
|
|
47
48
|
# Remove prefix here if it is removed completely.
|
|
48
|
-
prefix = Rails.configuration.action_controller[:relative_url_root] ||
|
|
49
|
+
prefix = Rails.configuration.action_controller[:relative_url_root] || ""
|
|
49
50
|
prefix + path
|
|
50
51
|
end
|
|
51
52
|
end
|
|
52
53
|
|
|
53
54
|
class SessionsController < ::Devise::SessionsController
|
|
54
55
|
include ::ActiveAdmin::Devise::Controller
|
|
56
|
+
|
|
57
|
+
ActiveSupport.run_load_hooks(:active_admin_controller, self)
|
|
55
58
|
end
|
|
56
59
|
|
|
57
60
|
class PasswordsController < ::Devise::PasswordsController
|
|
58
61
|
include ::ActiveAdmin::Devise::Controller
|
|
62
|
+
|
|
63
|
+
ActiveSupport.run_load_hooks(:active_admin_controller, self)
|
|
59
64
|
end
|
|
60
65
|
|
|
61
66
|
class UnlocksController < ::Devise::UnlocksController
|
|
62
67
|
include ::ActiveAdmin::Devise::Controller
|
|
68
|
+
|
|
69
|
+
ActiveSupport.run_load_hooks(:active_admin_controller, self)
|
|
63
70
|
end
|
|
64
71
|
|
|
65
72
|
class RegistrationsController < ::Devise::RegistrationsController
|
|
66
73
|
include ::ActiveAdmin::Devise::Controller
|
|
74
|
+
|
|
75
|
+
ActiveSupport.run_load_hooks(:active_admin_controller, self)
|
|
67
76
|
end
|
|
68
77
|
|
|
69
78
|
class ConfirmationsController < ::Devise::ConfirmationsController
|
|
70
79
|
include ::ActiveAdmin::Devise::Controller
|
|
80
|
+
|
|
81
|
+
ActiveSupport.run_load_hooks(:active_admin_controller, self)
|
|
71
82
|
end
|
|
72
83
|
|
|
73
84
|
def self.controllers_for_filters
|
data/lib/active_admin/dsl.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module ActiveAdmin
|
|
2
3
|
|
|
3
4
|
# The Active Admin DSL. This class is where all the registration blocks
|
|
@@ -101,7 +102,7 @@ module ActiveAdmin
|
|
|
101
102
|
def batch_action(title, options = {}, &block)
|
|
102
103
|
# Create symbol & title information
|
|
103
104
|
if title.is_a? String
|
|
104
|
-
sym = title.titleize.tr(
|
|
105
|
+
sym = title.titleize.tr(" ", "").underscore.to_sym
|
|
105
106
|
else
|
|
106
107
|
sym = title
|
|
107
108
|
title = sym.to_s.titleize
|
data/lib/active_admin/engine.rb
CHANGED
|
@@ -1,21 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module ActiveAdmin
|
|
2
3
|
class Engine < ::Rails::Engine
|
|
3
|
-
|
|
4
|
+
# Set default values for app_path and load_paths before running initializers
|
|
5
|
+
initializer "active_admin.load_app_path", before: :load_config_initializers do |app|
|
|
4
6
|
ActiveAdmin::Application.setting :app_path, app.root
|
|
5
|
-
ActiveAdmin::Application.setting :load_paths, [File.expand_path(
|
|
7
|
+
ActiveAdmin::Application.setting :load_paths, [File.expand_path("app/admin", app.root)]
|
|
6
8
|
end
|
|
7
9
|
|
|
8
10
|
initializer "active_admin.precompile", group: :all do |app|
|
|
9
|
-
ActiveAdmin.application.
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
unless ActiveAdmin.application.use_webpacker
|
|
12
|
+
ActiveAdmin.application.stylesheets.each do |path, _|
|
|
13
|
+
app.config.assets.precompile << path
|
|
14
|
+
end
|
|
15
|
+
ActiveAdmin.application.javascripts.each do |path|
|
|
16
|
+
app.config.assets.precompile << path
|
|
17
|
+
end
|
|
14
18
|
end
|
|
15
19
|
end
|
|
16
20
|
|
|
17
|
-
initializer
|
|
18
|
-
require
|
|
21
|
+
initializer "active_admin.routes" do
|
|
22
|
+
require "active_admin/helpers/routes/url_helpers"
|
|
19
23
|
end
|
|
20
24
|
end
|
|
21
25
|
end
|
data/lib/active_admin/error.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module ActiveAdmin
|
|
2
3
|
# Exception class to raise when there is an authorized access
|
|
3
4
|
# exception thrown. The exception has a few goodies that may
|
|
@@ -45,8 +46,6 @@ module ActiveAdmin
|
|
|
45
46
|
raise new exception
|
|
46
47
|
end
|
|
47
48
|
|
|
48
|
-
private
|
|
49
|
-
|
|
50
49
|
def self.database_error_classes
|
|
51
50
|
@classes ||= []
|
|
52
51
|
end
|