activeadmin 2.7.0 → 2.10.0
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 +166 -9
- data/CONTRIBUTING.md +7 -23
- data/README.md +3 -3
- data/app/assets/javascripts/active_admin/base.js +26 -21
- data/app/assets/stylesheets/active_admin/_base.scss +43 -37
- data/app/assets/stylesheets/active_admin/_forms.scss +3 -3
- data/app/assets/stylesheets/active_admin/{print.scss → _print.scss} +0 -0
- data/app/assets/stylesheets/active_admin/components/_comments.scss +2 -2
- data/app/javascript/active_admin/initializers/per-page.js +1 -1
- data/app/javascript/active_admin/lib/checkbox-toggler.js +3 -3
- data/app/javascript/active_admin/lib/dropdown-menu.js +1 -1
- data/app/javascript/active_admin/lib/modal-dialog.js +7 -7
- data/app/javascript/active_admin/lib/per-page.js +1 -1
- data/app/javascript/active_admin/lib/table-checkbox-toggler.js +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/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 +2 -2
- data/config/locales/ar.yml +6 -6
- data/config/locales/es-MX.yml +2 -1
- data/config/locales/es.yml +2 -2
- data/config/locales/it.yml +18 -0
- data/config/locales/ja.yml +3 -3
- data/config/locales/ko.yml +1 -1
- data/config/locales/nl.yml +1 -1
- data/config/locales/ro.yml +3 -2
- data/docs/0-installation.md +1 -1
- data/docs/11-decorators.md +16 -5
- data/docs/5-forms.md +6 -1
- data/docs/6-show-pages.md +12 -0
- data/docs/8-custom-actions.md +1 -1
- data/docs/Gemfile +3 -2
- data/docs/Gemfile.lock +127 -93
- data/lib/active_admin/abstract_view_factory.rb +1 -0
- data/lib/active_admin/application.rb +17 -17
- 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 +14 -12
- data/lib/active_admin/base_controller/menu.rb +1 -0
- data/lib/active_admin/base_controller.rb +5 -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 +5 -4
- data/lib/active_admin/dependency.rb +13 -12
- data/lib/active_admin/deprecation.rb +1 -0
- data/lib/active_admin/devise.rb +6 -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 +11 -8
- 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 +6 -6
- 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 +1 -0
- 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 +2 -1
- data/lib/active_admin/menu_collection.rb +1 -0
- data/lib/active_admin/menu_item.rb +8 -7
- data/lib/active_admin/namespace.rb +14 -13
- data/lib/active_admin/namespace_settings.rb +6 -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 +6 -5
- 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 +5 -4
- 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 +18 -17
- 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 +4 -3
- data/lib/active_admin/resource_controller/decorators.rb +7 -28
- data/lib/active_admin/resource_controller/polymorphic_routes.rb +1 -0
- 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 +8 -6
- 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 +19 -18
- data/lib/active_admin/views/components/panel.rb +2 -1
- data/lib/active_admin/views/components/scopes.rb +6 -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 +17 -16
- 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 +11 -8
- data/lib/active_admin/views/pages/form.rb +1 -0
- data/lib/active_admin/views/pages/index.rb +15 -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 +61 -61
- 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 +8 -7
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +2 -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/templates/active_admin.scss +2 -2
- data/lib/generators/active_admin/webpacker/webpacker_generator.rb +8 -7
- data/lib/ransack_ext.rb +9 -8
- metadata +24 -50
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
require
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require "active_admin/views"
|
|
3
|
+
require "active_admin/views/components/panel"
|
|
3
4
|
|
|
4
5
|
module ActiveAdmin
|
|
5
6
|
module Comments
|
|
@@ -22,13 +23,13 @@ module ActiveAdmin
|
|
|
22
23
|
protected
|
|
23
24
|
|
|
24
25
|
def title
|
|
25
|
-
I18n.t
|
|
26
|
+
I18n.t "active_admin.comments.title_content", count: @comments.total_count
|
|
26
27
|
end
|
|
27
28
|
|
|
28
29
|
def build_comments
|
|
29
30
|
if @comments.any?
|
|
30
31
|
@comments.each(&method(:build_comment))
|
|
31
|
-
div page_entries_info(@comments).html_safe, class:
|
|
32
|
+
div page_entries_info(@comments).html_safe, class: "pagination_information"
|
|
32
33
|
else
|
|
33
34
|
build_empty_message
|
|
34
35
|
end
|
|
@@ -42,56 +43,56 @@ module ActiveAdmin
|
|
|
42
43
|
|
|
43
44
|
def build_comment(comment)
|
|
44
45
|
div for: comment do
|
|
45
|
-
div class:
|
|
46
|
-
h4 class:
|
|
47
|
-
comment.author ? auto_link(comment.author) : I18n.t(
|
|
46
|
+
div class: "active_admin_comment_meta" do
|
|
47
|
+
h4 class: "active_admin_comment_author" do
|
|
48
|
+
comment.author ? auto_link(comment.author) : I18n.t("active_admin.comments.author_missing")
|
|
48
49
|
end
|
|
49
50
|
span pretty_format comment.created_at
|
|
50
51
|
if authorized?(ActiveAdmin::Auth::DESTROY, comment)
|
|
51
|
-
text_node link_to I18n.t(
|
|
52
|
+
text_node link_to I18n.t("active_admin.comments.delete"), comments_url(comment.id), method: :delete, data: { confirm: I18n.t("active_admin.comments.delete_confirmation") }
|
|
52
53
|
end
|
|
53
54
|
end
|
|
54
|
-
div class:
|
|
55
|
+
div class: "active_admin_comment_body" do
|
|
55
56
|
simple_format comment.body
|
|
56
57
|
end
|
|
57
58
|
end
|
|
58
59
|
end
|
|
59
60
|
|
|
60
61
|
def build_empty_message
|
|
61
|
-
span I18n.t(
|
|
62
|
+
span I18n.t("active_admin.comments.no_comments_yet"), class: "empty"
|
|
62
63
|
end
|
|
63
64
|
|
|
64
65
|
def comments_url(*args)
|
|
65
66
|
parts = []
|
|
66
67
|
parts << active_admin_namespace.name unless active_admin_namespace.root?
|
|
67
68
|
parts << active_admin_namespace.comments_registration_name.underscore
|
|
68
|
-
parts <<
|
|
69
|
-
send parts.join(
|
|
69
|
+
parts << "path"
|
|
70
|
+
send parts.join("_"), *args
|
|
70
71
|
end
|
|
71
72
|
|
|
72
73
|
def comment_form_url
|
|
73
74
|
parts = []
|
|
74
75
|
parts << active_admin_namespace.name unless active_admin_namespace.root?
|
|
75
76
|
parts << active_admin_namespace.comments_registration_name.underscore.pluralize
|
|
76
|
-
parts <<
|
|
77
|
-
send parts.join
|
|
77
|
+
parts << "path"
|
|
78
|
+
send parts.join "_"
|
|
78
79
|
end
|
|
79
80
|
|
|
80
81
|
def build_comment_form
|
|
81
82
|
active_admin_form_for(ActiveAdmin::Comment.new, url: comment_form_url) do |f|
|
|
82
83
|
f.inputs do
|
|
83
|
-
f.input :resource_type, as: :hidden,
|
|
84
|
-
f.input :resource_id,
|
|
85
|
-
f.input :body,
|
|
84
|
+
f.input :resource_type, as: :hidden, input_html: { value: ActiveAdmin::Comment.resource_type(parent.resource) }
|
|
85
|
+
f.input :resource_id, as: :hidden, input_html: { value: parent.resource.id }
|
|
86
|
+
f.input :body, label: false, input_html: { size: "80x8" }
|
|
86
87
|
end
|
|
87
88
|
f.actions do
|
|
88
|
-
f.action :submit, label: I18n.t(
|
|
89
|
+
f.action :submit, label: I18n.t("active_admin.comments.add")
|
|
89
90
|
end
|
|
90
91
|
end
|
|
91
92
|
end
|
|
92
93
|
|
|
93
94
|
def default_id_for_prefix
|
|
94
|
-
|
|
95
|
+
"active_admin_comments_for"
|
|
95
96
|
end
|
|
96
97
|
end
|
|
97
98
|
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
require
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require "active_admin/views"
|
|
3
|
+
require "active_admin/orm/active_record/comments/views/active_admin_comments"
|
|
@@ -1,21 +1,22 @@
|
|
|
1
|
-
|
|
2
|
-
require
|
|
3
|
-
require
|
|
4
|
-
require
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require "active_admin/orm/active_record/comments/views"
|
|
3
|
+
require "active_admin/orm/active_record/comments/show_page_helper"
|
|
4
|
+
require "active_admin/orm/active_record/comments/namespace_helper"
|
|
5
|
+
require "active_admin/orm/active_record/comments/resource_helper"
|
|
5
6
|
|
|
6
7
|
# Add the comments configuration
|
|
7
|
-
ActiveAdmin::Application.inheritable_setting :comments,
|
|
8
|
-
ActiveAdmin::Application.inheritable_setting :comments_registration_name,
|
|
9
|
-
ActiveAdmin::Application.inheritable_setting :comments_order,
|
|
10
|
-
ActiveAdmin::Application.inheritable_setting :comments_menu,
|
|
8
|
+
ActiveAdmin::Application.inheritable_setting :comments, true
|
|
9
|
+
ActiveAdmin::Application.inheritable_setting :comments_registration_name, "Comment"
|
|
10
|
+
ActiveAdmin::Application.inheritable_setting :comments_order, "created_at ASC"
|
|
11
|
+
ActiveAdmin::Application.inheritable_setting :comments_menu, {}
|
|
11
12
|
|
|
12
13
|
# Insert helper modules
|
|
13
14
|
ActiveAdmin::Namespace.send :include, ActiveAdmin::Comments::NamespaceHelper
|
|
14
|
-
ActiveAdmin::Resource.send
|
|
15
|
+
ActiveAdmin::Resource.send :include, ActiveAdmin::Comments::ResourceHelper
|
|
15
16
|
ActiveAdmin.application.view_factory.show_page.send :include, ActiveAdmin::Comments::ShowPageHelper
|
|
16
17
|
|
|
17
18
|
# Load the model as soon as it's referenced. By that point, Rails & Kaminari will be ready
|
|
18
|
-
ActiveAdmin.autoload :Comment,
|
|
19
|
+
ActiveAdmin.autoload :Comment, "active_admin/orm/active_record/comments/comment"
|
|
19
20
|
|
|
20
21
|
# Hint i18n-tasks about model and attribute translations used by default install
|
|
21
22
|
# i18n-tasks-use t('activerecord.models.comment')
|
|
@@ -36,7 +37,7 @@ ActiveAdmin.after_load do |app|
|
|
|
36
37
|
|
|
37
38
|
menu namespace.comments ? namespace.comments_menu : false
|
|
38
39
|
|
|
39
|
-
config.comments
|
|
40
|
+
config.comments = false # Don't allow comments on comments
|
|
40
41
|
config.batch_actions = false # The default destroy batch action isn't showing up anyway...
|
|
41
42
|
|
|
42
43
|
scope :all, show_count: false
|
|
@@ -51,7 +52,7 @@ ActiveAdmin.after_load do |app|
|
|
|
51
52
|
# Store the author and namespace
|
|
52
53
|
before_save do |comment|
|
|
53
54
|
comment.namespace = active_admin_config.namespace.name
|
|
54
|
-
comment.author
|
|
55
|
+
comment.author = current_active_admin_user
|
|
55
56
|
end
|
|
56
57
|
|
|
57
58
|
controller do
|
|
@@ -67,7 +68,7 @@ ActiveAdmin.after_load do |app|
|
|
|
67
68
|
redirect_back fallback_location: active_admin_root
|
|
68
69
|
end
|
|
69
70
|
failure.html do
|
|
70
|
-
flash[:error] = I18n.t
|
|
71
|
+
flash[:error] = I18n.t "active_admin.comments.errors.empty_text"
|
|
71
72
|
redirect_back fallback_location: active_admin_root
|
|
72
73
|
end
|
|
73
74
|
end
|
|
@@ -88,12 +89,12 @@ ActiveAdmin.after_load do |app|
|
|
|
88
89
|
permit_params :body, :namespace, :resource_id, :resource_type
|
|
89
90
|
|
|
90
91
|
index do
|
|
91
|
-
column I18n.t(
|
|
92
|
-
column I18n.t(
|
|
93
|
-
column I18n.t(
|
|
94
|
-
column I18n.t(
|
|
95
|
-
column I18n.t(
|
|
96
|
-
column I18n.t(
|
|
92
|
+
column I18n.t("active_admin.comments.resource_type"), :resource_type
|
|
93
|
+
column I18n.t("active_admin.comments.author_type"), :author_type
|
|
94
|
+
column I18n.t("active_admin.comments.resource"), :resource
|
|
95
|
+
column I18n.t("active_admin.comments.author"), :author
|
|
96
|
+
column I18n.t("active_admin.comments.body"), :body
|
|
97
|
+
column I18n.t("active_admin.comments.created_at"), :created_at
|
|
97
98
|
actions
|
|
98
99
|
end
|
|
99
100
|
end
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
# ActiveRecord-specific plugins should be required here
|
|
2
3
|
|
|
3
4
|
ActiveAdmin::DatabaseHitDuringLoad.database_error_classes << ActiveRecord::StatementInvalid
|
|
4
5
|
|
|
5
|
-
require
|
|
6
|
+
require "active_admin/orm/active_record/comments"
|
data/lib/active_admin/page.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module ActiveAdmin
|
|
2
3
|
# Page is the primary data storage for page configuration in Active Admin
|
|
3
4
|
#
|
|
@@ -65,7 +66,7 @@ module ActiveAdmin
|
|
|
65
66
|
end
|
|
66
67
|
|
|
67
68
|
def controller_name
|
|
68
|
-
[namespace.module_name, camelized_resource_name + "Controller"].compact.join(
|
|
69
|
+
[namespace.module_name, camelized_resource_name + "Controller"].compact.join("::")
|
|
69
70
|
end
|
|
70
71
|
|
|
71
72
|
# Override from `ActiveAdmin::Resource::Controllers`
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
ActiveAdmin::Dependency.pundit!
|
|
2
3
|
|
|
3
|
-
require
|
|
4
|
+
require "pundit"
|
|
4
5
|
|
|
5
6
|
# Add a setting to the application to configure the pundit default policy
|
|
6
7
|
ActiveAdmin::Application.inheritable_setting :pundit_default_policy, nil
|
|
@@ -31,7 +32,7 @@ module ActiveAdmin
|
|
|
31
32
|
|
|
32
33
|
def retrieve_policy(subject)
|
|
33
34
|
case subject
|
|
34
|
-
when nil
|
|
35
|
+
when nil then Pundit.policy!(user, namespace(resource))
|
|
35
36
|
when Class then Pundit.policy!(user, namespace(subject.new))
|
|
36
37
|
else Pundit.policy!(user, namespace(subject))
|
|
37
38
|
end
|
|
@@ -46,9 +47,9 @@ module ActiveAdmin
|
|
|
46
47
|
def format_action(action, subject)
|
|
47
48
|
# https://github.com/varvet/pundit/blob/master/lib/generators/pundit/install/templates/application_policy.rb
|
|
48
49
|
case action
|
|
49
|
-
when Auth::CREATE
|
|
50
|
-
when Auth::UPDATE
|
|
51
|
-
when Auth::READ
|
|
50
|
+
when Auth::CREATE then :create?
|
|
51
|
+
when Auth::UPDATE then :update?
|
|
52
|
+
when Auth::READ then subject.is_a?(Class) ? :index? : :show?
|
|
52
53
|
when Auth::DESTROY then subject.is_a?(Class) ? :destroy_all? : :destroy?
|
|
53
54
|
else "#{action}?"
|
|
54
55
|
end
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require "active_admin/helpers/optional_display"
|
|
2
3
|
|
|
3
4
|
module ActiveAdmin
|
|
4
5
|
|
|
@@ -64,7 +65,7 @@ module ActiveAdmin
|
|
|
64
65
|
# Adds the default New link on index
|
|
65
66
|
def add_default_new_action_item
|
|
66
67
|
add_action_item :new, only: :index do
|
|
67
|
-
if controller.action_methods.include?(
|
|
68
|
+
if controller.action_methods.include?("new") && authorized?(ActiveAdmin::Auth::CREATE, active_admin_config.resource_class)
|
|
68
69
|
localizer = ActiveAdmin::Localizers.resource(active_admin_config)
|
|
69
70
|
link_to localizer.t(:new_model), new_resource_path
|
|
70
71
|
end
|
|
@@ -74,7 +75,7 @@ module ActiveAdmin
|
|
|
74
75
|
# Adds the default Edit link on show
|
|
75
76
|
def add_default_edit_action_item
|
|
76
77
|
add_action_item :edit, only: :show do
|
|
77
|
-
if controller.action_methods.include?(
|
|
78
|
+
if controller.action_methods.include?("edit") && authorized?(ActiveAdmin::Auth::UPDATE, resource)
|
|
78
79
|
localizer = ActiveAdmin::Localizers.resource(active_admin_config)
|
|
79
80
|
link_to localizer.t(:edit_model), edit_resource_path(resource)
|
|
80
81
|
end
|
|
@@ -84,10 +85,10 @@ module ActiveAdmin
|
|
|
84
85
|
# Adds the default Destroy link on show
|
|
85
86
|
def add_default_show_action_item
|
|
86
87
|
add_action_item :destroy, only: :show do
|
|
87
|
-
if controller.action_methods.include?(
|
|
88
|
+
if controller.action_methods.include?("destroy") && authorized?(ActiveAdmin::Auth::DESTROY, resource)
|
|
88
89
|
localizer = ActiveAdmin::Localizers.resource(active_admin_config)
|
|
89
90
|
link_to localizer.t(:delete_model), resource_path(resource), method: :delete,
|
|
90
|
-
|
|
91
|
+
data: { confirm: localizer.t(:delete_confirmation) }
|
|
91
92
|
end
|
|
92
93
|
end
|
|
93
94
|
end
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require "active_admin/resource"
|
|
2
3
|
|
|
3
4
|
module ActiveAdmin
|
|
4
5
|
class Resource
|
|
@@ -46,7 +47,7 @@ module ActiveAdmin
|
|
|
46
47
|
end
|
|
47
48
|
|
|
48
49
|
def to_param
|
|
49
|
-
:"#{@target_name}_id"
|
|
50
|
+
(@options[:param] || "#{@target_name}_id").to_sym
|
|
50
51
|
end
|
|
51
52
|
end
|
|
52
53
|
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module ActiveAdmin
|
|
2
3
|
class Resource
|
|
3
4
|
module Controllers
|
|
@@ -6,7 +7,7 @@ module ActiveAdmin
|
|
|
6
7
|
# Returns a properly formatted controller name for this
|
|
7
8
|
# config within its namespace
|
|
8
9
|
def controller_name
|
|
9
|
-
[namespace.module_name, resource_name.plural.camelize + "Controller"].compact.join(
|
|
10
|
+
[namespace.module_name, resource_name.plural.camelize + "Controller"].compact.join("::")
|
|
10
11
|
end
|
|
11
12
|
|
|
12
13
|
# Returns the controller for this config
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module ActiveAdmin
|
|
2
3
|
class Resource
|
|
3
4
|
|
|
@@ -7,12 +8,12 @@ module ActiveAdmin
|
|
|
7
8
|
# To disable this menu item, call `menu(false)` from the DSL
|
|
8
9
|
def menu_item_options=(options)
|
|
9
10
|
if options == false
|
|
10
|
-
@include_in_menu
|
|
11
|
+
@include_in_menu = false
|
|
11
12
|
@menu_item_options = {}
|
|
12
13
|
else
|
|
13
14
|
@include_in_menu = true
|
|
14
15
|
@navigation_menu_name = options[:menu_name]
|
|
15
|
-
@menu_item_options
|
|
16
|
+
@menu_item_options = default_menu_options.merge options
|
|
16
17
|
end
|
|
17
18
|
end
|
|
18
19
|
|
|
@@ -27,8 +28,8 @@ module ActiveAdmin
|
|
|
27
28
|
{
|
|
28
29
|
id: resource_name.plural,
|
|
29
30
|
label: proc { resource.plural_resource_label },
|
|
30
|
-
url:
|
|
31
|
-
if:
|
|
31
|
+
url: proc { resource.route_collection_path(params, url_options) },
|
|
32
|
+
if: proc { authorized?(Auth::READ, menu_resource_class) }
|
|
32
33
|
}
|
|
33
34
|
end
|
|
34
35
|
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module ActiveAdmin
|
|
2
3
|
class Resource
|
|
3
4
|
|
|
4
5
|
module Naming
|
|
5
6
|
def resource_name
|
|
6
7
|
@resource_name ||= begin
|
|
7
|
-
as = @options[:as].gsub /\s/,
|
|
8
|
+
as = @options[:as].gsub /\s/, "" if @options[:as]
|
|
8
9
|
|
|
9
10
|
if as || !resource_class.respond_to?(:model_name)
|
|
10
11
|
Name.new resource_class, as
|
|
@@ -17,13 +18,13 @@ module ActiveAdmin
|
|
|
17
18
|
# Returns the name to call this resource such as "Bank Account"
|
|
18
19
|
def resource_label
|
|
19
20
|
resource_name.translate count: 1,
|
|
20
|
-
|
|
21
|
+
default: resource_name.to_s.gsub("::", " ").titleize
|
|
21
22
|
end
|
|
22
23
|
|
|
23
24
|
# Returns the plural version of this resource such as "Bank Accounts"
|
|
24
25
|
def plural_resource_label(options = {})
|
|
25
|
-
defaults = { count:
|
|
26
|
-
|
|
26
|
+
defaults = { count: Helpers::I18n::PLURAL_MANY_COUNT,
|
|
27
|
+
default: resource_label.pluralize.titleize }
|
|
27
28
|
resource_name.translate defaults.merge options
|
|
28
29
|
end
|
|
29
30
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module ActiveAdmin
|
|
2
3
|
class Resource
|
|
3
4
|
module Routes
|
|
@@ -42,8 +43,6 @@ module ActiveAdmin
|
|
|
42
43
|
config[:route_collection_name] == config[:route_instance_name]
|
|
43
44
|
end
|
|
44
45
|
|
|
45
|
-
private
|
|
46
|
-
|
|
47
46
|
class RouteBuilder
|
|
48
47
|
def initialize(resource)
|
|
49
48
|
@resource = resource
|
|
@@ -98,13 +97,13 @@ module ActiveAdmin
|
|
|
98
97
|
suffix = options[:suffix] || "path"
|
|
99
98
|
route = []
|
|
100
99
|
|
|
101
|
-
route << options[:action]
|
|
102
|
-
route << resource.route_prefix
|
|
100
|
+
route << options[:action] # "batch_action", "edit" or "new"
|
|
101
|
+
route << resource.route_prefix # "admin"
|
|
103
102
|
route << belongs_to_name if nested? # "category"
|
|
104
|
-
route << resource_path_name
|
|
105
|
-
route << suffix
|
|
103
|
+
route << resource_path_name # "posts" or "post"
|
|
104
|
+
route << suffix # "path" or "index path"
|
|
106
105
|
|
|
107
|
-
route.compact.join(
|
|
106
|
+
route.compact.join("_").to_sym # :admin_category_posts_path
|
|
108
107
|
end
|
|
109
108
|
|
|
110
109
|
# @return params to pass to instance path
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module ActiveAdmin
|
|
2
3
|
class Resource
|
|
3
4
|
module ScopeTo
|
|
@@ -38,10 +39,10 @@ module ActiveAdmin
|
|
|
38
39
|
options = args.extract_options!
|
|
39
40
|
method = args.first
|
|
40
41
|
|
|
41
|
-
scope_to_config[:method]
|
|
42
|
-
scope_to_config[:association_method]
|
|
43
|
-
scope_to_config[:if]
|
|
44
|
-
scope_to_config[:unless]
|
|
42
|
+
scope_to_config[:method] = block || method
|
|
43
|
+
scope_to_config[:association_method] = options[:association_method]
|
|
44
|
+
scope_to_config[:if] = options[:if]
|
|
45
|
+
scope_to_config[:unless] = options[:unless]
|
|
45
46
|
|
|
46
47
|
end
|
|
47
48
|
|
|
@@ -55,10 +56,10 @@ module ActiveAdmin
|
|
|
55
56
|
|
|
56
57
|
def scope_to_config
|
|
57
58
|
@scope_to_config ||= {
|
|
58
|
-
method:
|
|
59
|
+
method: nil,
|
|
59
60
|
association_method: nil,
|
|
60
|
-
if:
|
|
61
|
-
unless:
|
|
61
|
+
if: nil,
|
|
62
|
+
unless: nil
|
|
62
63
|
}
|
|
63
64
|
end
|
|
64
65
|
|
|
@@ -1,18 +1,19 @@
|
|
|
1
|
-
|
|
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
|
|
15
|
-
require
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require "active_admin/resource/action_items"
|
|
3
|
+
require "active_admin/resource/attributes"
|
|
4
|
+
require "active_admin/resource/controllers"
|
|
5
|
+
require "active_admin/resource/menu"
|
|
6
|
+
require "active_admin/resource/page_presenters"
|
|
7
|
+
require "active_admin/resource/pagination"
|
|
8
|
+
require "active_admin/resource/routes"
|
|
9
|
+
require "active_admin/resource/naming"
|
|
10
|
+
require "active_admin/resource/scopes"
|
|
11
|
+
require "active_admin/resource/includes"
|
|
12
|
+
require "active_admin/resource/scope_to"
|
|
13
|
+
require "active_admin/resource/sidebars"
|
|
14
|
+
require "active_admin/resource/belongs_to"
|
|
15
|
+
require "active_admin/resource/ordering"
|
|
16
|
+
require "active_admin/resource/model"
|
|
16
17
|
|
|
17
18
|
module ActiveAdmin
|
|
18
19
|
|
|
@@ -27,7 +28,7 @@ module ActiveAdmin
|
|
|
27
28
|
class Resource
|
|
28
29
|
|
|
29
30
|
# Event dispatched when a new resource is registered
|
|
30
|
-
RegisterEvent =
|
|
31
|
+
RegisterEvent = "active_admin.resource.register".freeze
|
|
31
32
|
|
|
32
33
|
# The namespace this config belongs to
|
|
33
34
|
attr_reader :namespace
|
|
@@ -44,7 +45,7 @@ module ActiveAdmin
|
|
|
44
45
|
# The default sort order to use in the controller
|
|
45
46
|
attr_writer :sort_order
|
|
46
47
|
def sort_order
|
|
47
|
-
@sort_order ||= (resource_class.respond_to?(:primary_key) ? resource_class.primary_key.to_s :
|
|
48
|
+
@sort_order ||= (resource_class.respond_to?(:primary_key) ? resource_class.primary_key.to_s : "id") + "_desc"
|
|
48
49
|
end
|
|
49
50
|
|
|
50
51
|
# Set the configuration for the CSV
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module ActiveAdmin
|
|
2
3
|
class ResourceController < BaseController
|
|
3
4
|
|
|
@@ -23,9 +24,9 @@ module ActiveAdmin
|
|
|
23
24
|
|
|
24
25
|
COLLECTION_APPLIES = [
|
|
25
26
|
:authorization_scope,
|
|
26
|
-
:sorting,
|
|
27
27
|
:filtering,
|
|
28
28
|
:scoping,
|
|
29
|
+
:sorting,
|
|
29
30
|
:includes,
|
|
30
31
|
:pagination,
|
|
31
32
|
:collection_decorator
|
|
@@ -128,7 +129,7 @@ module ActiveAdmin
|
|
|
128
129
|
#
|
|
129
130
|
# @return [ActiveRecord::Base] An un-saved active record base object
|
|
130
131
|
def build_new_resource
|
|
131
|
-
scoped_collection.send(
|
|
132
|
+
apply_authorization_scope(scoped_collection).send(
|
|
132
133
|
method_for_build,
|
|
133
134
|
*resource_params.map { |params| params.slice(active_admin_config.resource_class.inheritance_column) }
|
|
134
135
|
)
|
|
@@ -258,7 +259,7 @@ module ActiveAdmin
|
|
|
258
259
|
end
|
|
259
260
|
|
|
260
261
|
def collection_applies(options = {})
|
|
261
|
-
only
|
|
262
|
+
only = Array(options.fetch(:only, COLLECTION_APPLIES))
|
|
262
263
|
except = Array(options.fetch(:except, []))
|
|
263
264
|
|
|
264
265
|
COLLECTION_APPLIES & only - except
|