activeadmin 1.4.3 → 2.9.0
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/CHANGELOG.md +359 -25
- data/CONTRIBUTING.md +53 -74
- data/README.md +44 -11
- data/app/assets/javascripts/active_admin/base.js +517 -0
- data/app/assets/stylesheets/active_admin/_base.scss +29 -29
- data/app/assets/stylesheets/active_admin/_forms.scss +2 -14
- 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 +0 -0
- data/app/assets/stylesheets/active_admin/components/_comments.scss +2 -2
- data/app/assets/stylesheets/active_admin/components/_status_tags.scss +0 -5
- data/app/assets/stylesheets/active_admin/components/_tables.scss +1 -2
- data/app/assets/stylesheets/active_admin/components/_tabs.scss +1 -1
- data/app/assets/stylesheets/active_admin/mixins/_all.scss +8 -8
- data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +1 -1
- data/app/assets/stylesheets/active_admin/mixins/_variables.scss +8 -0
- data/app/assets/stylesheets/active_admin/print.scss +2 -2
- data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +1 -1
- data/app/javascript/active_admin/base.js +28 -0
- data/app/javascript/active_admin/ext/jquery-ui.js +7 -0
- data/app/javascript/active_admin/ext/jquery.js +9 -0
- data/app/javascript/active_admin/initializers/batch-actions.js +61 -0
- data/app/javascript/active_admin/initializers/checkbox-toggler.js +3 -0
- data/app/javascript/active_admin/initializers/datepicker.js +16 -0
- data/app/javascript/active_admin/initializers/dropdown-menu.js +9 -0
- data/app/javascript/active_admin/initializers/filters.js +10 -0
- data/app/javascript/active_admin/initializers/has-many.js +95 -0
- 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/javascript/active_admin/initializers/tabs.js +6 -0
- data/app/javascript/active_admin/lib/checkbox-toggler.js +49 -0
- data/app/javascript/active_admin/lib/dropdown-menu.js +116 -0
- data/app/javascript/active_admin/lib/filters.js +39 -0
- data/app/javascript/active_admin/lib/modal-dialog.js +63 -0
- data/app/javascript/active_admin/lib/per-page.js +38 -0
- data/app/javascript/active_admin/lib/table-checkbox-toggler.js +38 -0
- data/app/javascript/active_admin/lib/utils.js +40 -0
- data/app/views/active_admin/devise/confirmations/new.html.erb +1 -1
- 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/passwords/edit.html.erb +1 -1
- data/app/views/active_admin/devise/passwords/new.html.erb +1 -1
- data/app/views/active_admin/devise/registrations/new.html.erb +1 -2
- data/app/views/active_admin/devise/shared/_error_messages.html.erb +15 -0
- data/app/views/active_admin/devise/unlocks/new.html.erb +1 -1
- data/app/views/kaminari/active_admin_countless/_first_page.html.erb +11 -0
- data/app/views/kaminari/active_admin_countless/_gap.html.erb +8 -0
- data/app/views/kaminari/active_admin_countless/_next_page.html.erb +11 -0
- data/app/views/kaminari/active_admin_countless/_page.html.erb +12 -0
- data/app/views/kaminari/active_admin_countless/_paginator.html.erb +24 -0
- data/app/views/kaminari/active_admin_countless/_prev_page.html.erb +11 -0
- data/app/views/layouts/active_admin_logged_out.html.erb +16 -6
- data/config/locales/ar.yml +9 -8
- data/config/locales/az.yml +138 -0
- data/config/locales/bg.yml +1 -1
- data/config/locales/bs.yml +1 -0
- data/config/locales/ca.yml +1 -1
- data/config/locales/cs.yml +1 -0
- data/config/locales/da.yml +1 -0
- data/config/locales/de-CH.yml +1 -0
- data/config/locales/de.yml +19 -0
- data/config/locales/el.yml +1 -0
- data/config/locales/en-CA.yml +4 -3
- data/config/locales/en-GB.yml +4 -3
- data/config/locales/en.yml +4 -3
- data/config/locales/eo.yml +1 -0
- data/config/locales/es-MX.yml +3 -1
- data/config/locales/es.yml +6 -5
- data/config/locales/fa.yml +1 -0
- data/config/locales/fi.yml +1 -0
- data/config/locales/fr.yml +6 -5
- data/config/locales/he.yml +1 -1
- data/config/locales/hr.yml +1 -0
- data/config/locales/hu.yml +5 -0
- data/config/locales/id.yml +1 -0
- data/config/locales/it.yml +19 -0
- data/config/locales/ja.yml +4 -3
- data/config/locales/ko.yml +1 -0
- data/config/locales/lt.yml +3 -2
- data/config/locales/lv.yml +3 -2
- data/config/locales/mk.yml +134 -0
- data/config/locales/nb.yml +1 -0
- data/config/locales/nl.yml +1 -0
- data/config/locales/pl.yml +1 -0
- data/config/locales/pt-BR.yml +1 -0
- data/config/locales/pt-PT.yml +1 -0
- data/config/locales/ro.yml +1 -0
- data/config/locales/ru.yml +1 -0
- data/config/locales/sk.yml +60 -0
- data/config/locales/sv-SE.yml +1 -0
- data/config/locales/tr.yml +1 -0
- data/config/locales/uk.yml +3 -0
- data/config/locales/vi.yml +7 -5
- data/config/locales/zh-CN.yml +1 -0
- data/config/locales/zh-TW.yml +1 -0
- data/docs/0-installation.md +28 -4
- data/docs/1-general-configuration.md +20 -0
- data/docs/11-decorators.md +16 -5
- data/docs/12-arbre-components.md +13 -0
- data/docs/13-authorization-adapter.md +6 -6
- data/docs/2-resource-customization.md +11 -2
- data/docs/3-index-pages.md +1 -1
- data/docs/3-index-pages/index-as-table.md +7 -0
- data/docs/5-forms.md +6 -1
- data/docs/6-show-pages.md +12 -0
- data/docs/9-batch-actions.md +2 -2
- data/docs/CNAME +1 -1
- data/docs/Gemfile +2 -3
- data/docs/Gemfile.lock +126 -116
- data/docs/_config.yml +2 -0
- data/docs/_includes/top-menu.html +2 -2
- data/docs/documentation.md +1 -1
- data/docs/index.html +110 -9
- data/docs/stylesheets/main.css +29 -0
- data/lib/active_admin.rb +67 -63
- data/lib/active_admin/application.rb +20 -27
- data/lib/active_admin/application_settings.rb +6 -3
- data/lib/active_admin/asset_registration.rb +0 -8
- data/lib/active_admin/authorization_adapter.rb +3 -3
- data/lib/active_admin/base_controller.rb +10 -10
- data/lib/active_admin/base_controller/authorization.rb +15 -15
- data/lib/active_admin/batch_actions/controller.rb +4 -4
- data/lib/active_admin/batch_actions/resource_extension.rb +15 -10
- data/lib/active_admin/batch_actions/views/batch_action_form.rb +3 -3
- data/lib/active_admin/batch_actions/views/batch_action_selector.rb +6 -6
- data/lib/active_admin/batch_actions/views/selection_cells.rb +3 -3
- data/lib/active_admin/callbacks.rb +1 -1
- data/lib/active_admin/cancan_adapter.rb +1 -1
- data/lib/active_admin/collection_decorator.rb +31 -0
- data/lib/active_admin/controller_action.rb +2 -1
- data/lib/active_admin/csv_builder.rb +14 -9
- data/lib/active_admin/dependency.rb +13 -85
- data/lib/active_admin/devise.rb +5 -5
- data/lib/active_admin/dsl.rb +2 -9
- data/lib/active_admin/dynamic_settings_node.rb +2 -2
- data/lib/active_admin/engine.rb +10 -8
- data/lib/active_admin/error.rb +4 -4
- data/lib/active_admin/filters.rb +7 -7
- data/lib/active_admin/filters/active.rb +1 -1
- data/lib/active_admin/filters/active_filter.rb +10 -10
- data/lib/active_admin/filters/active_sidebar.rb +9 -5
- data/lib/active_admin/filters/forms.rb +7 -7
- data/lib/active_admin/filters/formtastic_addons.rb +2 -7
- data/lib/active_admin/filters/resource_extension.rb +28 -4
- data/lib/active_admin/form_builder.rb +26 -22
- data/lib/active_admin/generators/boilerplate.rb +12 -4
- data/lib/active_admin/helpers/optional_display.rb +2 -2
- data/lib/active_admin/helpers/scope_chain.rb +1 -0
- data/lib/active_admin/inputs/datepicker_input.rb +2 -2
- data/lib/active_admin/inputs/filters/base.rb +1 -1
- data/lib/active_admin/inputs/filters/base/search_method_select.rb +6 -6
- data/lib/active_admin/inputs/filters/boolean_input.rb +1 -1
- data/lib/active_admin/inputs/filters/check_boxes_input.rb +1 -1
- data/lib/active_admin/inputs/filters/date_range_input.rb +15 -12
- data/lib/active_admin/inputs/filters/select_input.rb +2 -2
- data/lib/active_admin/localizers.rb +1 -1
- data/lib/active_admin/localizers/resource_localizer.rb +3 -3
- data/lib/active_admin/menu.rb +6 -3
- data/lib/active_admin/menu_item.rb +7 -7
- data/lib/active_admin/namespace.rb +12 -12
- data/lib/active_admin/namespace_settings.rb +27 -8
- data/lib/active_admin/order_clause.rb +2 -2
- data/lib/active_admin/orm/active_record.rb +1 -1
- data/lib/active_admin/orm/active_record/comments.rb +23 -23
- data/lib/active_admin/orm/active_record/comments/comment.rb +4 -4
- data/lib/active_admin/orm/active_record/comments/views.rb +2 -2
- data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +29 -24
- data/lib/active_admin/page.rb +1 -1
- data/lib/active_admin/page_dsl.rb +1 -1
- data/lib/active_admin/page_presenter.rb +2 -1
- data/lib/active_admin/pundit_adapter.rb +22 -9
- data/lib/active_admin/resource.rb +34 -20
- data/lib/active_admin/resource/action_items.rb +5 -5
- data/lib/active_admin/resource/attributes.rb +8 -5
- data/lib/active_admin/resource/belongs_to.rb +8 -3
- data/lib/active_admin/resource/controllers.rb +1 -1
- data/lib/active_admin/resource/menu.rb +5 -5
- data/lib/active_admin/resource/model.rb +15 -0
- data/lib/active_admin/resource/naming.rb +5 -5
- data/lib/active_admin/resource/routes.rb +25 -14
- data/lib/active_admin/resource/scope_to.rb +7 -7
- data/lib/active_admin/resource/scopes.rb +3 -3
- data/lib/active_admin/resource/sidebars.rb +2 -2
- data/lib/active_admin/resource_collection.rb +2 -2
- data/lib/active_admin/resource_controller.rb +13 -10
- data/lib/active_admin/resource_controller/action_builder.rb +10 -0
- data/lib/active_admin/resource_controller/data_access.rb +1 -1
- data/lib/active_admin/resource_controller/decorators.rb +7 -29
- data/lib/active_admin/resource_controller/polymorphic_routes.rb +37 -0
- data/lib/active_admin/resource_controller/resource_class_methods.rb +2 -0
- data/lib/active_admin/resource_controller/streaming.rb +7 -6
- data/lib/active_admin/resource_dsl.rb +11 -9
- data/lib/active_admin/router.rb +3 -2
- data/lib/active_admin/scope.rb +15 -11
- data/lib/active_admin/settings_node.rb +1 -1
- data/lib/active_admin/sidebar_section.rb +3 -1
- data/lib/active_admin/version.rb +1 -1
- data/lib/active_admin/view_factory.rb +17 -17
- data/lib/active_admin/view_helpers.rb +1 -1
- data/lib/active_admin/view_helpers/breadcrumb_helper.rb +5 -5
- data/lib/active_admin/view_helpers/display_helper.rb +16 -7
- data/lib/active_admin/view_helpers/download_format_links_helper.rb +2 -1
- data/lib/active_admin/view_helpers/fields_for.rb +2 -2
- data/lib/active_admin/view_helpers/method_or_proc_helper.rb +2 -0
- data/lib/active_admin/views.rb +1 -1
- data/lib/active_admin/views/components/active_admin_form.rb +12 -6
- data/lib/active_admin/views/components/attributes_table.rb +8 -8
- data/lib/active_admin/views/components/blank_slate.rb +1 -1
- data/lib/active_admin/views/components/dropdown_menu.rb +8 -8
- data/lib/active_admin/views/components/index_list.rb +3 -3
- data/lib/active_admin/views/components/menu.rb +1 -1
- data/lib/active_admin/views/components/menu_item.rb +4 -4
- data/lib/active_admin/views/components/paginated_collection.rb +21 -20
- data/lib/active_admin/views/components/panel.rb +1 -1
- data/lib/active_admin/views/components/scopes.rb +7 -5
- data/lib/active_admin/views/components/sidebar_section.rb +0 -3
- data/lib/active_admin/views/components/site_title.rb +1 -1
- data/lib/active_admin/views/components/status_tag.rb +13 -26
- data/lib/active_admin/views/components/table_for.rb +20 -19
- data/lib/active_admin/views/components/tabs.rb +13 -4
- data/lib/active_admin/views/footer.rb +3 -2
- data/lib/active_admin/views/header.rb +2 -2
- data/lib/active_admin/views/index_as_blog.rb +1 -1
- data/lib/active_admin/views/index_as_grid.rb +1 -1
- data/lib/active_admin/views/index_as_table.rb +27 -19
- data/lib/active_admin/views/pages/base.rb +18 -11
- data/lib/active_admin/views/pages/index.rb +15 -13
- data/lib/active_admin/views/tabbed_navigation.rb +2 -2
- data/lib/active_admin/views/title_bar.rb +1 -1
- data/lib/activeadmin.rb +1 -1
- data/lib/generators/active_admin/assets/assets_generator.rb +2 -2
- data/lib/generators/active_admin/assets/templates/active_admin.js +1 -0
- data/lib/generators/active_admin/assets/templates/active_admin.scss +2 -2
- data/lib/generators/active_admin/devise/devise_generator.rb +5 -5
- data/lib/generators/active_admin/install/install_generator.rb +18 -8
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +45 -3
- data/lib/generators/active_admin/install/templates/dashboard.rb +2 -3
- data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb.erb +1 -15
- data/lib/generators/active_admin/page/page_generator.rb +1 -1
- data/lib/generators/active_admin/resource/resource_generator.rb +3 -3
- data/lib/generators/active_admin/resource/templates/admin.rb.erb +40 -37
- 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 +26 -0
- data/lib/ransack_ext.rb +9 -9
- data/vendor/assets/javascripts/jquery-ui/form-reset-mixin.js +80 -0
- data/vendor/assets/javascripts/jquery-ui/form.js +22 -0
- data/vendor/assets/javascripts/jquery-ui/labels.js +65 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/checkboxradio.js +274 -283
- metadata +108 -127
- data/.circleci/config.yml +0 -572
- data/.github/ISSUE_TEMPLATE.md +0 -20
- data/.gitignore +0 -16
- data/.mdlrc +0 -1
- data/.rspec +0 -1
- data/.rspec_parallel +0 -2
- data/.rubocop.yml +0 -99
- data/.simplecov +0 -9
- data/.yardopts +0 -7
- data/Gemfile +0 -30
- data/Gemfile.common +0 -26
- data/Gemfile.lock +0 -433
- data/Rakefile +0 -24
- data/activeadmin.gemspec +0 -32
- data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
- data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
- data/app/assets/images/active_admin/orderable.png +0 -0
- data/app/assets/javascripts/active_admin/base.js.coffee +0 -13
- data/app/assets/javascripts/active_admin/ext/jquery-ui.js.coffee +0 -6
- data/app/assets/javascripts/active_admin/ext/jquery.js.coffee +0 -7
- data/app/assets/javascripts/active_admin/initializers/batch_actions.js.coffee +0 -11
- data/app/assets/javascripts/active_admin/initializers/datepicker.js.coffee +0 -14
- data/app/assets/javascripts/active_admin/initializers/filters.js.coffee +0 -26
- data/app/assets/javascripts/active_admin/initializers/tabs.js.coffee +0 -7
- data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +0 -42
- data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +0 -46
- data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +0 -104
- data/app/assets/javascripts/active_admin/lib/flash.js.coffee +0 -19
- data/app/assets/javascripts/active_admin/lib/has_many.js.coffee +0 -79
- data/app/assets/javascripts/active_admin/lib/modal_dialog.js.coffee +0 -45
- data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +0 -46
- data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +0 -22
- data/bin/install_chromedriver.sh +0 -17
- data/config/i18n-tasks.yml +0 -26
- data/config/mdl_style.rb +0 -11
- data/cucumber.yml +0 -7
- data/gemfiles/rails_42.gemfile +0 -10
- data/gemfiles/rails_42.gemfile.lock +0 -339
- data/gemfiles/rails_50.gemfile +0 -10
- data/gemfiles/rails_50.gemfile.lock +0 -353
- data/gemfiles/rails_51.gemfile +0 -10
- data/gemfiles/rails_51.gemfile.lock +0 -353
- data/lib/active_admin/event.rb +0 -24
- data/lib/active_admin/helpers/output_safety_helper.rb +0 -35
- data/lib/active_admin/reloader.rb +0 -25
- data/lib/bug_report_templates/active_admin_master.rb +0 -111
- data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +0 -1
- data/tasks/application_generator.rb +0 -50
- data/tasks/docs.rake +0 -64
- data/tasks/gemfiles.rake +0 -8
- data/tasks/lint.rake +0 -110
- data/tasks/local.rake +0 -27
- data/tasks/release.rake +0 -6
- data/tasks/test.rake +0 -42
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "active_admin/settings_node"
|
2
2
|
|
3
3
|
module ActiveAdmin
|
4
4
|
class ApplicationSettings < SettingsNode
|
@@ -15,7 +15,7 @@ module ActiveAdmin
|
|
15
15
|
# Load paths for admin configurations. Add folders to this load path
|
16
16
|
# to load up other resources for administration. External gems can
|
17
17
|
# include their paths in this load path to provide active_admin UIs
|
18
|
-
register :load_paths, [File.expand_path(
|
18
|
+
register :load_paths, [File.expand_path("app/admin", Rails.root)]
|
19
19
|
|
20
20
|
# Set default localize format for Date/Time values
|
21
21
|
register :localize_format, :long
|
@@ -34,6 +34,9 @@ module ActiveAdmin
|
|
34
34
|
:to_s ]
|
35
35
|
|
36
36
|
# To make debugging easier, by default don't stream in development
|
37
|
-
register :disable_streaming_in, [
|
37
|
+
register :disable_streaming_in, ["development"]
|
38
|
+
|
39
|
+
# Remove sensitive attributes from being displayed, made editable, or exported by default
|
40
|
+
register :filter_attributes, [:encrypted_password, :password, :password_confirmation]
|
38
41
|
end
|
39
42
|
end
|
@@ -2,10 +2,6 @@ module ActiveAdmin
|
|
2
2
|
module AssetRegistration
|
3
3
|
|
4
4
|
def register_stylesheet(path, options = {})
|
5
|
-
Deprecation.warn <<-MSG.strip_heredoc
|
6
|
-
The `register_stylesheet` config is deprecated and will be removed
|
7
|
-
in v2. Import your "#{path}" stylesheet in the active_admin.scss.
|
8
|
-
MSG
|
9
5
|
stylesheets[path] = options
|
10
6
|
end
|
11
7
|
|
@@ -18,10 +14,6 @@ module ActiveAdmin
|
|
18
14
|
end
|
19
15
|
|
20
16
|
def register_javascript(name)
|
21
|
-
Deprecation.warn <<-MSG.strip_heredoc
|
22
|
-
The `register_javascript` config is deprecated and will be removed
|
23
|
-
in v2. Import your "#{name}" javascript in the active_admin.js.
|
24
|
-
MSG
|
25
17
|
javascripts.add name
|
26
18
|
end
|
27
19
|
|
@@ -1,5 +1,5 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require "active_admin/base_controller/authorization"
|
2
|
+
require "active_admin/base_controller/menu"
|
3
3
|
|
4
4
|
module ActiveAdmin
|
5
5
|
# BaseController for ActiveAdmin.
|
@@ -22,6 +22,11 @@ module ActiveAdmin
|
|
22
22
|
attr_accessor :active_admin_config
|
23
23
|
end
|
24
24
|
|
25
|
+
include Authorization
|
26
|
+
include Menu
|
27
|
+
|
28
|
+
private
|
29
|
+
|
25
30
|
# By default Rails will render un-implemented actions when the view exists. Because Active
|
26
31
|
# Admin allows you to not render any of the actions by using the #actions method, we need
|
27
32
|
# to check if they are implemented.
|
@@ -29,11 +34,6 @@ module ActiveAdmin
|
|
29
34
|
raise AbstractController::ActionNotFound unless action_methods.include?(params[:action])
|
30
35
|
end
|
31
36
|
|
32
|
-
include Authorization
|
33
|
-
include Menu
|
34
|
-
|
35
|
-
private
|
36
|
-
|
37
37
|
# Calls the authentication method as defined in ActiveAdmin.authentication_method
|
38
38
|
def authenticate_active_admin_user
|
39
39
|
send(active_admin_namespace.authentication_method) if active_admin_namespace.authentication_method
|
@@ -69,12 +69,12 @@ 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
|
77
|
-
{controller: controller, action: action}
|
76
|
+
controller, action = active_admin_namespace.root_to.split "#"
|
77
|
+
{ controller: controller, action: action }
|
78
78
|
end
|
79
79
|
|
80
80
|
end
|
@@ -4,12 +4,12 @@ module ActiveAdmin
|
|
4
4
|
extend ActiveSupport::Concern
|
5
5
|
|
6
6
|
ACTIONS_DICTIONARY = {
|
7
|
-
index:
|
8
|
-
show:
|
9
|
-
new:
|
10
|
-
create:
|
11
|
-
edit:
|
12
|
-
update:
|
7
|
+
index: ActiveAdmin::Authorization::READ,
|
8
|
+
show: ActiveAdmin::Authorization::READ,
|
9
|
+
new: ActiveAdmin::Authorization::CREATE,
|
10
|
+
create: ActiveAdmin::Authorization::CREATE,
|
11
|
+
edit: ActiveAdmin::Authorization::UPDATE,
|
12
|
+
update: ActiveAdmin::Authorization::UPDATE,
|
13
13
|
destroy: ActiveAdmin::Authorization::DESTROY
|
14
14
|
}
|
15
15
|
|
@@ -18,6 +18,7 @@ module ActiveAdmin
|
|
18
18
|
|
19
19
|
helper_method :authorized?
|
20
20
|
helper_method :authorize!
|
21
|
+
helper_method :active_admin_authorization
|
21
22
|
end
|
22
23
|
|
23
24
|
protected
|
@@ -51,9 +52,10 @@ module ActiveAdmin
|
|
51
52
|
# an ActiveAdmin::AccessDenied.
|
52
53
|
def authorize!(action, subject = nil)
|
53
54
|
unless authorized? action, subject
|
54
|
-
raise ActiveAdmin::AccessDenied.new(
|
55
|
-
|
56
|
-
|
55
|
+
raise ActiveAdmin::AccessDenied.new(
|
56
|
+
current_active_admin_user,
|
57
|
+
action,
|
58
|
+
subject)
|
57
59
|
end
|
58
60
|
end
|
59
61
|
|
@@ -111,16 +113,14 @@ module ActiveAdmin
|
|
111
113
|
redirect_backwards_or_to_root
|
112
114
|
end
|
113
115
|
|
114
|
-
body
|
115
|
-
|
116
|
-
format.
|
117
|
-
format.json { render json: { error: error }, status: :unauthorized }
|
118
|
-
format.xml { render xml: "<error>#{error}</error>", status: :unauthorized }
|
116
|
+
format.csv { render body: error, status: :unauthorized }
|
117
|
+
format.json { render json: { error: error }, status: :unauthorized }
|
118
|
+
format.xml { render xml: "<error>#{error}</error>", status: :unauthorized }
|
119
119
|
end
|
120
120
|
end
|
121
121
|
|
122
122
|
def redirect_backwards_or_to_root
|
123
|
-
|
123
|
+
redirect_back fallback_location: active_admin_root
|
124
124
|
end
|
125
125
|
|
126
126
|
end
|
@@ -5,10 +5,10 @@ module ActiveAdmin
|
|
5
5
|
# Controller action that is called when submitting the batch action form
|
6
6
|
def batch_action
|
7
7
|
if action_present?
|
8
|
-
selection
|
9
|
-
inputs
|
8
|
+
selection = params[:collection_selection] || []
|
9
|
+
inputs = JSON.parse params[:batch_action_inputs] || "{}"
|
10
10
|
valid_keys = MethodOrProcHelper.render_in_context(self, current_batch_action.inputs).try(:keys)
|
11
|
-
inputs
|
11
|
+
inputs = inputs.with_indifferent_access.slice *valid_keys
|
12
12
|
instance_exec selection, inputs, ¤t_batch_action.block
|
13
13
|
else
|
14
14
|
raise "Couldn't find batch action \"#{params[:batch_action]}\""
|
@@ -22,7 +22,7 @@ module ActiveAdmin
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def current_batch_action
|
25
|
-
active_admin_config.batch_actions.detect{ |action| action.sym.to_s == params[:batch_action] }
|
25
|
+
active_admin_config.batch_actions.detect { |action| action.sym.to_s == params[:batch_action] }
|
26
26
|
end
|
27
27
|
|
28
28
|
COLLECTION_APPLIES = [
|
@@ -57,21 +57,22 @@ module ActiveAdmin
|
|
57
57
|
def add_default_batch_action
|
58
58
|
destroy_options = {
|
59
59
|
priority: 100,
|
60
|
-
confirm: proc{ I18n.t(
|
61
|
-
if: proc{ controller.action_methods.include?(
|
60
|
+
confirm: proc { I18n.t("active_admin.batch_actions.delete_confirmation", plural_model: active_admin_config.plural_resource_label.downcase) },
|
61
|
+
if: proc { controller.action_methods.include?("destroy") && authorized?(ActiveAdmin::Auth::DESTROY, active_admin_config.resource_class) }
|
62
62
|
}
|
63
63
|
|
64
|
-
add_batch_action :destroy, proc { I18n.t(
|
64
|
+
add_batch_action :destroy, proc { I18n.t("active_admin.delete") }, destroy_options do |selected_ids|
|
65
65
|
batch_action_collection.find(selected_ids).each do |record|
|
66
66
|
authorize! ActiveAdmin::Auth::DESTROY, record
|
67
67
|
destroy_resource(record)
|
68
68
|
end
|
69
69
|
|
70
70
|
redirect_to active_admin_config.route_collection_path(params),
|
71
|
-
notice: I18n.t(
|
72
|
-
|
73
|
-
|
74
|
-
|
71
|
+
notice: I18n.t(
|
72
|
+
"active_admin.batch_actions.succesfully_destroyed",
|
73
|
+
count: selected_ids.count,
|
74
|
+
model: active_admin_config.resource_label.downcase,
|
75
|
+
plural_model: active_admin_config.plural_resource_label(count: selected_ids.count).downcase)
|
75
76
|
end
|
76
77
|
end
|
77
78
|
|
@@ -84,7 +85,7 @@ module ActiveAdmin
|
|
84
85
|
|
85
86
|
attr_reader :block, :title, :sym
|
86
87
|
|
87
|
-
DEFAULT_CONFIRM_MESSAGE = proc{ I18n.t
|
88
|
+
DEFAULT_CONFIRM_MESSAGE = proc { I18n.t "active_admin.batch_actions.default_confirmation" }
|
88
89
|
|
89
90
|
# Create a Batch Action
|
90
91
|
#
|
@@ -112,7 +113,11 @@ module ActiveAdmin
|
|
112
113
|
# => You can pass a hash of options to `:form` that will be rendered as form input fields for the user to fill out.
|
113
114
|
#
|
114
115
|
def initialize(sym, title, options = {}, &block)
|
115
|
-
@sym
|
116
|
+
@sym = sym
|
117
|
+
@title = title
|
118
|
+
@options = options
|
119
|
+
@block = block
|
120
|
+
@confirm = options[:confirm]
|
116
121
|
@block ||= proc {}
|
117
122
|
end
|
118
123
|
|
@@ -133,7 +138,7 @@ module ActiveAdmin
|
|
133
138
|
# Returns the display if block. If the block was not explicitly defined
|
134
139
|
# a default block always returning true will be returned.
|
135
140
|
def display_if_block
|
136
|
-
@options[:if] || proc{ true }
|
141
|
+
@options[:if] || proc { true }
|
137
142
|
end
|
138
143
|
|
139
144
|
# Used for sorting
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "active_admin/component"
|
2
2
|
|
3
3
|
module ActiveAdmin
|
4
4
|
module BatchActions
|
@@ -16,7 +16,7 @@ module ActiveAdmin
|
|
16
16
|
# batch_action => name of the specific action called
|
17
17
|
# batch_action_inputs => a JSON string of any requested confirmation values
|
18
18
|
text_node form_tag active_admin_config.route_batch_action_path(params, url_options), id: options[:id]
|
19
|
-
input name: :batch_action,
|
19
|
+
input name: :batch_action, id: :batch_action, type: :hidden
|
20
20
|
input name: :batch_action_inputs, id: :batch_action_inputs, type: :hidden
|
21
21
|
|
22
22
|
super(options)
|
@@ -30,7 +30,7 @@ module ActiveAdmin
|
|
30
30
|
private
|
31
31
|
|
32
32
|
def closing_form_tag
|
33
|
-
|
33
|
+
"</form>".html_safe
|
34
34
|
end
|
35
35
|
|
36
36
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "active_admin/component"
|
2
2
|
|
3
3
|
module ActiveAdmin
|
4
4
|
module BatchActions
|
@@ -31,17 +31,17 @@ module ActiveAdmin
|
|
31
31
|
confirmation_text = render_or_call_method_or_proc_on(self, batch_action.confirm)
|
32
32
|
|
33
33
|
options = {
|
34
|
-
:
|
35
|
-
"data-action"
|
36
|
-
"data-confirm"
|
37
|
-
"data-inputs"
|
34
|
+
class: "batch_action",
|
35
|
+
"data-action": batch_action.sym,
|
36
|
+
"data-confirm": confirmation_text,
|
37
|
+
"data-inputs": render_in_context(self, batch_action.inputs).to_json
|
38
38
|
}
|
39
39
|
|
40
40
|
default_title = render_or_call_method_or_proc_on(self, batch_action.title)
|
41
41
|
title = I18n.t("active_admin.batch_actions.labels.#{batch_action.sym}", default: default_title)
|
42
42
|
label = I18n.t("active_admin.batch_actions.action_label", title: title)
|
43
43
|
|
44
|
-
item label, "#", options
|
44
|
+
item label, "#", **options
|
45
45
|
end
|
46
46
|
end
|
47
47
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "active_admin/component"
|
2
2
|
|
3
3
|
module ActiveAdmin
|
4
4
|
module BatchActions
|
@@ -7,7 +7,7 @@ module ActiveAdmin
|
|
7
7
|
class ResourceSelectionToggleCell < ActiveAdmin::Component
|
8
8
|
builder_method :resource_selection_toggle_cell
|
9
9
|
|
10
|
-
def build(label_text =
|
10
|
+
def build(label_text = "")
|
11
11
|
label do
|
12
12
|
input type: "checkbox", id: "collection_selection_toggle_all", name: "collection_selection_toggle_all", class: "toggle_all"
|
13
13
|
text_node label_text if label_text.present?
|
@@ -30,7 +30,7 @@ module ActiveAdmin
|
|
30
30
|
|
31
31
|
def build
|
32
32
|
super(id: "collection_selection_toggle_panel")
|
33
|
-
resource_selection_toggle_cell(I18n.t(
|
33
|
+
resource_selection_toggle_cell(I18n.t("active_admin.batch_actions.selection_toggle_explanation", default: "(Toggle Selection)"))
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
@@ -75,7 +75,7 @@ module ActiveAdmin
|
|
75
75
|
|
76
76
|
# def run_create_callbacks
|
77
77
|
define_method "run_#{name}_callbacks" do |*args, &block|
|
78
|
-
self.class.send("before_#{name}_callbacks").each{ |cbk| run_callback(cbk, *args) }
|
78
|
+
self.class.send("before_#{name}_callbacks").each { |cbk| run_callback(cbk, *args) }
|
79
79
|
value = block.try :call
|
80
80
|
self.class.send("after_#{name}_callbacks").each { |cbk| run_callback(cbk, *args) }
|
81
81
|
return value
|
@@ -2,7 +2,7 @@ unless ActiveAdmin::Dependency.cancan? || ActiveAdmin::Dependency.cancancan?
|
|
2
2
|
ActiveAdmin::Dependency.cancan!
|
3
3
|
end
|
4
4
|
|
5
|
-
require
|
5
|
+
require "cancan"
|
6
6
|
|
7
7
|
# Add a setting to the application to configure the ability
|
8
8
|
ActiveAdmin::Application.inheritable_setting :cancan_ability_class, "Ability"
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module ActiveAdmin
|
2
|
+
# This class decorates a collection of objects delegating
|
3
|
+
# mehods to behave like an Array. It's used to decouple ActiveAdmin
|
4
|
+
# from Draper and thus being able to use PORO decorators as well.
|
5
|
+
#
|
6
|
+
# It's implementation is heavily based on the Draper::CollectionDecorator
|
7
|
+
# https://github.com/drapergem/draper/blob/aaa06bd2f1e219838b241a5534e7ca513edd1fe2/lib/draper/collection_decorator.rb
|
8
|
+
class CollectionDecorator
|
9
|
+
# @return the collection being decorated.
|
10
|
+
attr_reader :object
|
11
|
+
|
12
|
+
# @return [Class] the decorator class used to decorate each item, as set by {#initialize}.
|
13
|
+
attr_reader :decorator_class
|
14
|
+
|
15
|
+
array_methods = Array.instance_methods - Object.instance_methods
|
16
|
+
delegate :==, :as_json, *array_methods, to: :decorated_collection
|
17
|
+
|
18
|
+
def initialize(object, with:)
|
19
|
+
@object = object
|
20
|
+
@decorator_class = with
|
21
|
+
end
|
22
|
+
|
23
|
+
class << self
|
24
|
+
alias_method :decorate, :new
|
25
|
+
end
|
26
|
+
|
27
|
+
def decorated_collection
|
28
|
+
@decorated_collection ||= object.map { |item| decorator_class.new(item) }
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -32,7 +32,9 @@ module ActiveAdmin
|
|
32
32
|
|
33
33
|
def initialize(options = {}, &block)
|
34
34
|
@resource = options.delete(:resource)
|
35
|
-
@columns
|
35
|
+
@columns = []
|
36
|
+
@options = ActiveAdmin.application.csv_options.merge options
|
37
|
+
@block = block
|
36
38
|
end
|
37
39
|
|
38
40
|
def column(name, options = {}, &block)
|
@@ -40,24 +42,23 @@ module ActiveAdmin
|
|
40
42
|
end
|
41
43
|
|
42
44
|
def build(controller, csv)
|
43
|
-
@collection
|
44
|
-
columns
|
45
|
-
|
46
|
-
bom = options.delete :byte_order_mark
|
45
|
+
@collection = controller.send :find_collection, except: :pagination
|
46
|
+
columns = exec_columns controller.view_context
|
47
|
+
bom = options.delete :byte_order_mark
|
47
48
|
column_names = options.delete(:column_names) { true }
|
48
|
-
csv_options
|
49
|
+
csv_options = options.except :encoding_options, :humanize_name
|
49
50
|
|
50
51
|
csv << bom if bom
|
51
52
|
|
52
53
|
if column_names
|
53
|
-
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)
|
54
55
|
end
|
55
56
|
|
56
57
|
ActiveRecord::Base.uncached do
|
57
58
|
(1..paginated_collection.total_pages).each do |page|
|
58
59
|
paginated_collection(page).each do |resource|
|
59
60
|
resource = controller.send :apply_decorator, resource
|
60
|
-
csv << CSV.generate_line(build_row(resource, columns, options), csv_options)
|
61
|
+
csv << CSV.generate_line(build_row(resource, columns, options), **csv_options)
|
61
62
|
end
|
62
63
|
end
|
63
64
|
end
|
@@ -80,7 +81,11 @@ module ActiveAdmin
|
|
80
81
|
|
81
82
|
def encode(content, options)
|
82
83
|
if options[:encoding]
|
83
|
-
|
84
|
+
if options[:encoding_options]
|
85
|
+
content.to_s.encode options[:encoding], **options[:encoding_options]
|
86
|
+
else
|
87
|
+
content.to_s.encode options[:encoding]
|
88
|
+
end
|
84
89
|
else
|
85
90
|
content
|
86
91
|
end
|