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,9 +1,10 @@
|
|
1
1
|
ActiveAdmin::Dependency.pundit!
|
2
2
|
|
3
|
-
require
|
3
|
+
require "pundit"
|
4
4
|
|
5
5
|
# Add a setting to the application to configure the pundit default policy
|
6
6
|
ActiveAdmin::Application.inheritable_setting :pundit_default_policy, nil
|
7
|
+
ActiveAdmin::Application.inheritable_setting :pundit_policy_namespace, nil
|
7
8
|
|
8
9
|
module ActiveAdmin
|
9
10
|
|
@@ -19,7 +20,7 @@ module ActiveAdmin
|
|
19
20
|
def scope_collection(collection, action = Auth::READ)
|
20
21
|
# scoping is appliable only to read/index action
|
21
22
|
# which means there is no way how to scope other actions
|
22
|
-
Pundit.policy_scope!(user, collection)
|
23
|
+
Pundit.policy_scope!(user, namespace(collection))
|
23
24
|
rescue Pundit::NotDefinedError => e
|
24
25
|
if default_policy_class && default_policy_class.const_defined?(:Scope)
|
25
26
|
default_policy_class::Scope.new(user, collection).resolve
|
@@ -30,9 +31,9 @@ module ActiveAdmin
|
|
30
31
|
|
31
32
|
def retrieve_policy(subject)
|
32
33
|
case subject
|
33
|
-
when nil
|
34
|
-
when Class then Pundit.policy!(user, subject.new)
|
35
|
-
else Pundit.policy!(user, subject)
|
34
|
+
when nil then Pundit.policy!(user, namespace(resource))
|
35
|
+
when Class then Pundit.policy!(user, namespace(subject.new))
|
36
|
+
else Pundit.policy!(user, namespace(subject))
|
36
37
|
end
|
37
38
|
rescue Pundit::NotDefinedError => e
|
38
39
|
if default_policy_class
|
@@ -43,11 +44,11 @@ module ActiveAdmin
|
|
43
44
|
end
|
44
45
|
|
45
46
|
def format_action(action, subject)
|
46
|
-
# https://github.com/
|
47
|
+
# https://github.com/varvet/pundit/blob/master/lib/generators/pundit/install/templates/application_policy.rb
|
47
48
|
case action
|
48
|
-
when Auth::CREATE
|
49
|
-
when Auth::UPDATE
|
50
|
-
when Auth::READ
|
49
|
+
when Auth::CREATE then :create?
|
50
|
+
when Auth::UPDATE then :update?
|
51
|
+
when Auth::READ then subject.is_a?(Class) ? :index? : :show?
|
51
52
|
when Auth::DESTROY then subject.is_a?(Class) ? :destroy_all? : :destroy?
|
52
53
|
else "#{action}?"
|
53
54
|
end
|
@@ -55,6 +56,14 @@ module ActiveAdmin
|
|
55
56
|
|
56
57
|
private
|
57
58
|
|
59
|
+
def namespace(object)
|
60
|
+
if default_policy_namespace && !object.class.to_s.include?(default_policy_namespace.to_s.camelize)
|
61
|
+
[default_policy_namespace.to_sym, object]
|
62
|
+
else
|
63
|
+
object
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
58
67
|
def default_policy_class
|
59
68
|
ActiveAdmin.application.pundit_default_policy && ActiveAdmin.application.pundit_default_policy.constantize
|
60
69
|
end
|
@@ -63,6 +72,10 @@ module ActiveAdmin
|
|
63
72
|
default_policy_class.new(user, subject)
|
64
73
|
end
|
65
74
|
|
75
|
+
def default_policy_namespace
|
76
|
+
ActiveAdmin.application.pundit_policy_namespace
|
77
|
+
end
|
78
|
+
|
66
79
|
end
|
67
80
|
|
68
81
|
end
|
@@ -1,17 +1,18 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
9
|
-
require
|
10
|
-
require
|
11
|
-
require
|
12
|
-
require
|
13
|
-
require
|
14
|
-
require
|
1
|
+
require "active_admin/resource/action_items"
|
2
|
+
require "active_admin/resource/attributes"
|
3
|
+
require "active_admin/resource/controllers"
|
4
|
+
require "active_admin/resource/menu"
|
5
|
+
require "active_admin/resource/page_presenters"
|
6
|
+
require "active_admin/resource/pagination"
|
7
|
+
require "active_admin/resource/routes"
|
8
|
+
require "active_admin/resource/naming"
|
9
|
+
require "active_admin/resource/scopes"
|
10
|
+
require "active_admin/resource/includes"
|
11
|
+
require "active_admin/resource/scope_to"
|
12
|
+
require "active_admin/resource/sidebars"
|
13
|
+
require "active_admin/resource/belongs_to"
|
14
|
+
require "active_admin/resource/ordering"
|
15
|
+
require "active_admin/resource/model"
|
15
16
|
|
16
17
|
module ActiveAdmin
|
17
18
|
|
@@ -26,7 +27,7 @@ module ActiveAdmin
|
|
26
27
|
class Resource
|
27
28
|
|
28
29
|
# Event dispatched when a new resource is registered
|
29
|
-
RegisterEvent =
|
30
|
+
RegisterEvent = "active_admin.resource.register".freeze
|
30
31
|
|
31
32
|
# The namespace this config belongs to
|
32
33
|
attr_reader :namespace
|
@@ -43,7 +44,7 @@ module ActiveAdmin
|
|
43
44
|
# The default sort order to use in the controller
|
44
45
|
attr_writer :sort_order
|
45
46
|
def sort_order
|
46
|
-
@sort_order ||= (resource_class.respond_to?(:primary_key) ? resource_class.primary_key.to_s :
|
47
|
+
@sort_order ||= (resource_class.respond_to?(:primary_key) ? resource_class.primary_key.to_s : "id") + "_desc"
|
47
48
|
end
|
48
49
|
|
49
50
|
# Set the configuration for the CSV
|
@@ -69,9 +70,10 @@ module ActiveAdmin
|
|
69
70
|
def initialize(namespace, resource_class, options = {})
|
70
71
|
@namespace = namespace
|
71
72
|
@resource_class_name = "::#{resource_class.name}"
|
72
|
-
@options
|
73
|
+
@options = options
|
73
74
|
@sort_order = options[:sort_order]
|
74
|
-
@member_actions
|
75
|
+
@member_actions = []
|
76
|
+
@collection_actions = []
|
75
77
|
end
|
76
78
|
end
|
77
79
|
|
@@ -103,6 +105,10 @@ module ActiveAdmin
|
|
103
105
|
ActiveSupport::Dependencies.constantize(decorator_class_name) if decorator_class_name
|
104
106
|
end
|
105
107
|
|
108
|
+
def resource_name_extension
|
109
|
+
@resource_name_extension ||= define_resource_name_extension(self)
|
110
|
+
end
|
111
|
+
|
106
112
|
def resource_table_name
|
107
113
|
resource_class.quoted_table_name
|
108
114
|
end
|
@@ -132,6 +138,7 @@ module ActiveAdmin
|
|
132
138
|
def belongs_to(target, options = {})
|
133
139
|
@belongs_to = Resource::BelongsTo.new(self, target, options)
|
134
140
|
self.menu_item_options = false if @belongs_to.required?
|
141
|
+
options[:class_name] ||= @belongs_to.resource.resource_class_name if @belongs_to.resource
|
135
142
|
controller.send :belongs_to, target, options.dup
|
136
143
|
end
|
137
144
|
|
@@ -181,11 +188,11 @@ module ActiveAdmin
|
|
181
188
|
end
|
182
189
|
|
183
190
|
def association_columns
|
184
|
-
@association_columns ||= resource_attributes.select{ |key, value| key != value }.values
|
191
|
+
@association_columns ||= resource_attributes.select { |key, value| key != value }.values
|
185
192
|
end
|
186
193
|
|
187
194
|
def content_columns
|
188
|
-
@content_columns ||= resource_attributes.select{ |key, value| key == value }.values
|
195
|
+
@content_columns ||= resource_attributes.select { |key, value| key == value }.values
|
189
196
|
end
|
190
197
|
|
191
198
|
private
|
@@ -202,5 +209,12 @@ module ActiveAdmin
|
|
202
209
|
@default_csv_builder ||= CSVBuilder.default_for_resource(self)
|
203
210
|
end
|
204
211
|
|
212
|
+
def define_resource_name_extension(resource)
|
213
|
+
Module.new do
|
214
|
+
define_method :model_name do
|
215
|
+
resource.resource_name
|
216
|
+
end
|
217
|
+
end
|
218
|
+
end
|
205
219
|
end # class Resource
|
206
220
|
end # module ActiveAdmin
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "active_admin/helpers/optional_display"
|
2
2
|
|
3
3
|
module ActiveAdmin
|
4
4
|
|
@@ -64,7 +64,7 @@ module ActiveAdmin
|
|
64
64
|
# Adds the default New link on index
|
65
65
|
def add_default_new_action_item
|
66
66
|
add_action_item :new, only: :index do
|
67
|
-
if controller.action_methods.include?(
|
67
|
+
if controller.action_methods.include?("new") && authorized?(ActiveAdmin::Auth::CREATE, active_admin_config.resource_class)
|
68
68
|
localizer = ActiveAdmin::Localizers.resource(active_admin_config)
|
69
69
|
link_to localizer.t(:new_model), new_resource_path
|
70
70
|
end
|
@@ -74,7 +74,7 @@ module ActiveAdmin
|
|
74
74
|
# Adds the default Edit link on show
|
75
75
|
def add_default_edit_action_item
|
76
76
|
add_action_item :edit, only: :show do
|
77
|
-
if controller.action_methods.include?(
|
77
|
+
if controller.action_methods.include?("edit") && authorized?(ActiveAdmin::Auth::UPDATE, resource)
|
78
78
|
localizer = ActiveAdmin::Localizers.resource(active_admin_config)
|
79
79
|
link_to localizer.t(:edit_model), edit_resource_path(resource)
|
80
80
|
end
|
@@ -84,10 +84,10 @@ module ActiveAdmin
|
|
84
84
|
# Adds the default Destroy link on show
|
85
85
|
def add_default_show_action_item
|
86
86
|
add_action_item :destroy, only: :show do
|
87
|
-
if controller.action_methods.include?(
|
87
|
+
if controller.action_methods.include?("destroy") && authorized?(ActiveAdmin::Auth::DESTROY, resource)
|
88
88
|
localizer = ActiveAdmin::Localizers.resource(active_admin_config)
|
89
89
|
link_to localizer.t(:delete_model), resource_path(resource), method: :delete,
|
90
|
-
|
90
|
+
data: { confirm: localizer.t(:delete_confirmation) }
|
91
91
|
end
|
92
92
|
end
|
93
93
|
end
|
@@ -18,13 +18,13 @@ module ActiveAdmin
|
|
18
18
|
|
19
19
|
def foreign_methods
|
20
20
|
@foreign_methods ||= resource_class.reflect_on_all_associations.
|
21
|
-
select{ |r| r.macro == :belongs_to }.
|
22
|
-
reject{ |r| r.chain.length > 2 && !r.options[:polymorphic] }.
|
23
|
-
index_by{ |r| r.foreign_key.to_sym }
|
21
|
+
select { |r| r.macro == :belongs_to }.
|
22
|
+
reject { |r| r.chain.length > 2 && !r.options[:polymorphic] }.
|
23
|
+
index_by { |r| r.foreign_key.to_sym }
|
24
24
|
end
|
25
25
|
|
26
26
|
def reject_col?(c)
|
27
|
-
primary_col?(c) || sti_col?(c) || counter_cache_col?(c)
|
27
|
+
primary_col?(c) || sti_col?(c) || counter_cache_col?(c) || filtered_col?(c)
|
28
28
|
end
|
29
29
|
|
30
30
|
def primary_col?(c)
|
@@ -36,9 +36,12 @@ module ActiveAdmin
|
|
36
36
|
end
|
37
37
|
|
38
38
|
def counter_cache_col?(c)
|
39
|
-
c.name.end_with?(
|
39
|
+
c.name.end_with?("_count")
|
40
40
|
end
|
41
41
|
|
42
|
+
def filtered_col?(c)
|
43
|
+
ActiveAdmin.application.filter_attributes.include?(c.name.to_sym)
|
44
|
+
end
|
42
45
|
end
|
43
46
|
end
|
44
47
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "active_admin/resource"
|
2
2
|
|
3
3
|
module ActiveAdmin
|
4
4
|
class Resource
|
@@ -14,8 +14,13 @@ module ActiveAdmin
|
|
14
14
|
# The resource which initiated this relationship
|
15
15
|
attr_reader :owner
|
16
16
|
|
17
|
+
# The name of the relation
|
18
|
+
attr_reader :target_name
|
19
|
+
|
17
20
|
def initialize(owner, target_name, options = {})
|
18
|
-
@owner
|
21
|
+
@owner = owner
|
22
|
+
@target_name = target_name
|
23
|
+
@options = options
|
19
24
|
end
|
20
25
|
|
21
26
|
# Returns the target resource class or raises an exception if it doesn't exist
|
@@ -41,7 +46,7 @@ module ActiveAdmin
|
|
41
46
|
end
|
42
47
|
|
43
48
|
def to_param
|
44
|
-
:"#{@target_name}_id"
|
49
|
+
(@options[:param] || "#{@target_name}_id").to_sym
|
45
50
|
end
|
46
51
|
end
|
47
52
|
end
|
@@ -6,7 +6,7 @@ module ActiveAdmin
|
|
6
6
|
# Returns a properly formatted controller name for this
|
7
7
|
# config within its namespace
|
8
8
|
def controller_name
|
9
|
-
[namespace.module_name, resource_name.plural.camelize + "Controller"].compact.join(
|
9
|
+
[namespace.module_name, resource_name.plural.camelize + "Controller"].compact.join("::")
|
10
10
|
end
|
11
11
|
|
12
12
|
# Returns the controller for this config
|
@@ -7,12 +7,12 @@ module ActiveAdmin
|
|
7
7
|
# To disable this menu item, call `menu(false)` from the DSL
|
8
8
|
def menu_item_options=(options)
|
9
9
|
if options == false
|
10
|
-
@include_in_menu
|
10
|
+
@include_in_menu = false
|
11
11
|
@menu_item_options = {}
|
12
12
|
else
|
13
13
|
@include_in_menu = true
|
14
14
|
@navigation_menu_name = options[:menu_name]
|
15
|
-
@menu_item_options
|
15
|
+
@menu_item_options = default_menu_options.merge options
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
@@ -26,9 +26,9 @@ module ActiveAdmin
|
|
26
26
|
resource = self
|
27
27
|
{
|
28
28
|
id: resource_name.plural,
|
29
|
-
label: proc{ resource.plural_resource_label },
|
30
|
-
url:
|
31
|
-
if:
|
29
|
+
label: proc { resource.plural_resource_label },
|
30
|
+
url: proc { resource.route_collection_path(params, url_options) },
|
31
|
+
if: proc { authorized?(Auth::READ, menu_resource_class) }
|
32
32
|
}
|
33
33
|
end
|
34
34
|
|
@@ -4,7 +4,7 @@ module ActiveAdmin
|
|
4
4
|
module Naming
|
5
5
|
def resource_name
|
6
6
|
@resource_name ||= begin
|
7
|
-
as = @options[:as].gsub /\s/,
|
7
|
+
as = @options[:as].gsub /\s/, "" if @options[:as]
|
8
8
|
|
9
9
|
if as || !resource_class.respond_to?(:model_name)
|
10
10
|
Name.new resource_class, as
|
@@ -17,13 +17,13 @@ module ActiveAdmin
|
|
17
17
|
# Returns the name to call this resource such as "Bank Account"
|
18
18
|
def resource_label
|
19
19
|
resource_name.translate count: 1,
|
20
|
-
|
20
|
+
default: resource_name.to_s.gsub("::", " ").titleize
|
21
21
|
end
|
22
22
|
|
23
23
|
# Returns the plural version of this resource such as "Bank Accounts"
|
24
24
|
def plural_resource_label(options = {})
|
25
|
-
defaults = {count:
|
26
|
-
|
25
|
+
defaults = { count: Helpers::I18n::PLURAL_MANY_COUNT,
|
26
|
+
default: resource_label.pluralize.titleize }
|
27
27
|
resource_name.translate defaults.merge options
|
28
28
|
end
|
29
29
|
|
@@ -46,7 +46,7 @@ module ActiveAdmin
|
|
46
46
|
end
|
47
47
|
|
48
48
|
def translate(options = {})
|
49
|
-
I18n.t i18n_key, {scope: [:activerecord, :models]}.merge(options)
|
49
|
+
I18n.t i18n_key, **{ scope: [:activerecord, :models] }.merge(options)
|
50
50
|
end
|
51
51
|
|
52
52
|
def route_key
|
@@ -20,7 +20,11 @@ module ActiveAdmin
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def route_edit_instance_path(resource, additional_params = {})
|
23
|
-
route_builder.
|
23
|
+
route_builder.member_action_path(:edit, resource, additional_params)
|
24
|
+
end
|
25
|
+
|
26
|
+
def route_member_action_path(action, resource, additional_params = {})
|
27
|
+
route_builder.member_action_path(action, resource, additional_params)
|
24
28
|
end
|
25
29
|
|
26
30
|
# Returns the routes prefix for this config
|
@@ -38,8 +42,6 @@ module ActiveAdmin
|
|
38
42
|
config[:route_collection_name] == config[:route_instance_name]
|
39
43
|
end
|
40
44
|
|
41
|
-
private
|
42
|
-
|
43
45
|
class RouteBuilder
|
44
46
|
def initialize(resource)
|
45
47
|
@resource = resource
|
@@ -75,12 +77,13 @@ module ActiveAdmin
|
|
75
77
|
routes.public_send route_name, *route_instance_params(instance), additional_params
|
76
78
|
end
|
77
79
|
|
78
|
-
# @return [String] the path to the
|
80
|
+
# @return [String] the path to the member action of this resource
|
81
|
+
# @param action [Symbol]
|
79
82
|
# @param instance [ActiveRecord::Base] the instance we want the path of
|
80
83
|
# @example "/admin/posts/1/edit"
|
81
|
-
def
|
84
|
+
def member_action_path(action, instance, additional_params = {})
|
82
85
|
path = resource.resources_configuration[:self][:route_instance_name]
|
83
|
-
route_name = route_name(path, action:
|
86
|
+
route_name = route_name(path, action: action)
|
84
87
|
|
85
88
|
routes.public_send route_name, *route_instance_params(instance), additional_params
|
86
89
|
end
|
@@ -93,19 +96,19 @@ module ActiveAdmin
|
|
93
96
|
suffix = options[:suffix] || "path"
|
94
97
|
route = []
|
95
98
|
|
96
|
-
route << options[:action]
|
97
|
-
route << resource.route_prefix
|
99
|
+
route << options[:action] # "batch_action", "edit" or "new"
|
100
|
+
route << resource.route_prefix # "admin"
|
98
101
|
route << belongs_to_name if nested? # "category"
|
99
|
-
route << resource_path_name
|
100
|
-
route << suffix
|
102
|
+
route << resource_path_name # "posts" or "post"
|
103
|
+
route << suffix # "path" or "index path"
|
101
104
|
|
102
|
-
route.compact.join(
|
105
|
+
route.compact.join("_").to_sym # :admin_category_posts_path
|
103
106
|
end
|
104
107
|
|
105
108
|
# @return params to pass to instance path
|
106
109
|
def route_instance_params(instance)
|
107
110
|
if nested?
|
108
|
-
[instance.public_send(
|
111
|
+
[instance.public_send(belongs_to_target_name).to_param, instance.to_param]
|
109
112
|
else
|
110
113
|
instance.to_param
|
111
114
|
end
|
@@ -118,11 +121,19 @@ module ActiveAdmin
|
|
118
121
|
end
|
119
122
|
|
120
123
|
def nested?
|
121
|
-
resource.belongs_to? &&
|
124
|
+
resource.belongs_to? && belongs_to_config.required?
|
125
|
+
end
|
126
|
+
|
127
|
+
def belongs_to_target_name
|
128
|
+
belongs_to_config.target_name
|
122
129
|
end
|
123
130
|
|
124
131
|
def belongs_to_name
|
125
|
-
|
132
|
+
belongs_to_config.target.resource_name.singular
|
133
|
+
end
|
134
|
+
|
135
|
+
def belongs_to_config
|
136
|
+
resource.belongs_to_config
|
126
137
|
end
|
127
138
|
|
128
139
|
def routes
|