activeadmin 2.6.1 → 2.13.1
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 +291 -9
- data/CONTRIBUTING.md +9 -25
- data/README.md +4 -4
- data/app/assets/javascripts/active_admin/base.js +27 -22
- data/app/assets/stylesheets/active_admin/_base.scss +53 -37
- data/app/assets/stylesheets/active_admin/_forms.scss +0 -10
- data/app/assets/stylesheets/active_admin/_header.scss +37 -3
- data/app/assets/stylesheets/active_admin/_normalize.scss +25 -123
- 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/assets/stylesheets/active_admin/components/_date_picker.scss +1 -2
- data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +0 -1
- data/app/assets/stylesheets/active_admin/mixins/_variables.scss +12 -0
- data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +0 -1
- data/app/javascript/active_admin/initializers/has-many.js +4 -1
- 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 +15 -5
- 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/config/locales/vi.yml +5 -5
- data/docs/0-installation.md +27 -3
- data/docs/11-decorators.md +16 -5
- data/docs/2-resource-customization.md +10 -1
- data/docs/5-forms.md +9 -3
- data/docs/6-show-pages.md +12 -0
- data/docs/8-custom-actions.md +1 -1
- data/docs/Gemfile +3 -2
- data/docs/Gemfile.lock +138 -103
- data/docs/_includes/top-menu.html +1 -1
- data/docs/documentation.md +1 -1
- data/docs/index.html +6 -6
- data/lib/active_admin/abstract_view_factory.rb +1 -0
- data/lib/active_admin/application.rb +19 -19
- data/lib/active_admin/application_settings.rb +4 -3
- data/lib/active_admin/asset_registration.rb +1 -0
- data/lib/active_admin/authorization_adapter.rb +4 -3
- data/lib/active_admin/base_controller/authorization.rb +15 -13
- data/lib/active_admin/base_controller/menu.rb +1 -0
- data/lib/active_admin/base_controller.rb +6 -5
- data/lib/active_admin/batch_actions/controller.rb +4 -3
- data/lib/active_admin/batch_actions/resource_extension.rb +10 -8
- data/lib/active_admin/batch_actions/views/batch_action_form.rb +4 -3
- data/lib/active_admin/batch_actions/views/batch_action_selector.rb +7 -6
- data/lib/active_admin/batch_actions/views/selection_cells.rb +4 -3
- data/lib/active_admin/batch_actions.rb +1 -0
- data/lib/active_admin/callbacks.rb +1 -0
- data/lib/active_admin/cancan_adapter.rb +2 -1
- data/lib/active_admin/collection_decorator.rb +32 -0
- data/lib/active_admin/component.rb +1 -0
- data/lib/active_admin/controller_action.rb +1 -0
- data/lib/active_admin/csv_builder.rb +6 -19
- data/lib/active_admin/dependency.rb +13 -12
- data/lib/active_admin/deprecation.rb +1 -0
- data/lib/active_admin/devise.rb +16 -5
- data/lib/active_admin/dsl.rb +2 -1
- data/lib/active_admin/dynamic_setting.rb +1 -0
- data/lib/active_admin/dynamic_settings_node.rb +3 -2
- data/lib/active_admin/engine.rb +13 -9
- data/lib/active_admin/error.rb +1 -2
- data/lib/active_admin/filters/active.rb +2 -1
- data/lib/active_admin/filters/active_filter.rb +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 +7 -3
- data/lib/active_admin/menu_collection.rb +1 -0
- data/lib/active_admin/menu_item.rb +8 -7
- data/lib/active_admin/namespace.rb +15 -14
- data/lib/active_admin/namespace_settings.rb +9 -5
- data/lib/active_admin/order_clause.rb +2 -1
- data/lib/active_admin/orm/active_record/comments/comment.rb +4 -3
- data/lib/active_admin/orm/active_record/comments/namespace_helper.rb +1 -0
- data/lib/active_admin/orm/active_record/comments/resource_helper.rb +1 -0
- data/lib/active_admin/orm/active_record/comments/show_page_helper.rb +1 -0
- data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +20 -19
- data/lib/active_admin/orm/active_record/comments/views.rb +3 -2
- data/lib/active_admin/orm/active_record/comments.rb +20 -19
- data/lib/active_admin/orm/active_record.rb +2 -1
- data/lib/active_admin/orm/mongoid.rb +1 -0
- data/lib/active_admin/page.rb +2 -1
- data/lib/active_admin/page_controller.rb +1 -0
- data/lib/active_admin/page_dsl.rb +1 -0
- data/lib/active_admin/page_presenter.rb +1 -0
- data/lib/active_admin/pundit_adapter.rb +59 -15
- data/lib/active_admin/resource/action_items.rb +6 -5
- data/lib/active_admin/resource/attributes.rb +2 -1
- data/lib/active_admin/resource/belongs_to.rb +3 -2
- data/lib/active_admin/resource/controllers.rb +2 -1
- data/lib/active_admin/resource/includes.rb +1 -0
- data/lib/active_admin/resource/menu.rb +5 -4
- data/lib/active_admin/resource/model.rb +1 -0
- data/lib/active_admin/resource/naming.rb +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 +20 -19
- data/lib/active_admin/resource_collection.rb +1 -0
- data/lib/active_admin/resource_controller/action_builder.rb +1 -0
- data/lib/active_admin/resource_controller/data_access.rb +31 -5
- data/lib/active_admin/resource_controller/decorators.rb +7 -28
- data/lib/active_admin/resource_controller/polymorphic_routes.rb +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 +9 -7
- data/lib/active_admin/resource_controller.rb +13 -11
- data/lib/active_admin/resource_dsl.rb +11 -25
- data/lib/active_admin/router.rb +1 -0
- data/lib/active_admin/scope.rb +7 -6
- data/lib/active_admin/settings_node.rb +1 -0
- data/lib/active_admin/sidebar_section.rb +1 -0
- data/lib/active_admin/version.rb +2 -1
- data/lib/active_admin/view_factory.rb +18 -17
- data/lib/active_admin/view_helpers/active_admin_application_helper.rb +1 -0
- data/lib/active_admin/view_helpers/auto_link_helper.rb +1 -0
- data/lib/active_admin/view_helpers/breadcrumb_helper.rb +4 -3
- data/lib/active_admin/view_helpers/display_helper.rb +15 -7
- data/lib/active_admin/view_helpers/download_format_links_helper.rb +2 -1
- data/lib/active_admin/view_helpers/fields_for.rb +3 -2
- data/lib/active_admin/view_helpers/flash_helper.rb +1 -0
- data/lib/active_admin/view_helpers/form_helper.rb +1 -0
- data/lib/active_admin/view_helpers/method_or_proc_helper.rb +1 -0
- data/lib/active_admin/view_helpers/scope_name_helper.rb +1 -0
- data/lib/active_admin/view_helpers/sidebar_helper.rb +1 -0
- data/lib/active_admin/view_helpers/title_helper.rb +1 -0
- data/lib/active_admin/view_helpers/view_factory_helper.rb +1 -0
- data/lib/active_admin/view_helpers.rb +2 -1
- data/lib/active_admin/views/action_items.rb +1 -0
- data/lib/active_admin/views/components/active_admin_form.rb +7 -6
- data/lib/active_admin/views/components/active_filters_sidebar_content.rb +59 -0
- data/lib/active_admin/views/components/attributes_table.rb +6 -5
- data/lib/active_admin/views/components/blank_slate.rb +2 -1
- data/lib/active_admin/views/components/columns.rb +1 -0
- data/lib/active_admin/views/components/dropdown_menu.rb +7 -9
- data/lib/active_admin/views/components/index_list.rb +4 -3
- data/lib/active_admin/views/components/menu.rb +2 -1
- data/lib/active_admin/views/components/menu_item.rb +5 -4
- data/lib/active_admin/views/components/paginated_collection.rb +19 -18
- data/lib/active_admin/views/components/panel.rb +2 -1
- data/lib/active_admin/views/components/scopes.rb +8 -5
- data/lib/active_admin/views/components/sidebar.rb +1 -0
- data/lib/active_admin/views/components/sidebar_section.rb +1 -0
- data/lib/active_admin/views/components/site_title.rb +2 -1
- data/lib/active_admin/views/components/status_tag.rb +12 -11
- data/lib/active_admin/views/components/table_for.rb +18 -17
- data/lib/active_admin/views/components/tabs.rb +4 -3
- data/lib/active_admin/views/components/unsupported_browser.rb +1 -0
- data/lib/active_admin/views/footer.rb +3 -1
- data/lib/active_admin/views/header.rb +3 -2
- data/lib/active_admin/views/index_as_block.rb +1 -0
- data/lib/active_admin/views/index_as_blog.rb +2 -1
- data/lib/active_admin/views/index_as_grid.rb +2 -1
- data/lib/active_admin/views/index_as_table.rb +17 -16
- data/lib/active_admin/views/pages/base.rb +14 -9
- 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 +15 -8
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +9 -2
- data/lib/generators/active_admin/install/templates/dashboard.rb +1 -0
- data/lib/generators/active_admin/page/page_generator.rb +2 -1
- data/lib/generators/active_admin/page/templates/page.rb +1 -0
- data/lib/generators/active_admin/resource/resource_generator.rb +4 -3
- data/lib/generators/active_admin/webpacker/plugins/jquery.js +7 -0
- data/lib/generators/active_admin/webpacker/templates/active_admin.js +5 -0
- data/lib/generators/active_admin/webpacker/templates/active_admin.scss +17 -0
- data/lib/generators/active_admin/webpacker/templates/print.scss +2 -0
- data/lib/generators/active_admin/webpacker/webpacker_generator.rb +27 -0
- data/lib/ransack_ext.rb +9 -8
- metadata +32 -53
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module ActiveAdmin
|
2
3
|
class OrderClause
|
3
4
|
attr_reader :field, :order, :active_admin_config
|
@@ -20,7 +21,7 @@ module ActiveAdmin
|
|
20
21
|
end
|
21
22
|
|
22
23
|
def to_sql
|
23
|
-
[table_column, @op,
|
24
|
+
[table_column, @op, " ", @order].compact.join
|
24
25
|
end
|
25
26
|
|
26
27
|
def table
|
@@ -1,10 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module ActiveAdmin
|
2
3
|
class Comment < ActiveRecord::Base
|
3
4
|
|
4
5
|
self.table_name = "#{table_name_prefix}active_admin_comments#{table_name_suffix}"
|
5
6
|
|
6
7
|
belongs_to :resource, polymorphic: true, optional: true
|
7
|
-
belongs_to :author,
|
8
|
+
belongs_to :author, polymorphic: true
|
8
9
|
|
9
10
|
validates_presence_of :body, :namespace, :resource
|
10
11
|
|
@@ -18,8 +19,8 @@ module ActiveAdmin
|
|
18
19
|
def self.find_for_resource_in_namespace(resource, namespace)
|
19
20
|
where(
|
20
21
|
resource_type: resource_type(resource),
|
21
|
-
resource_id:
|
22
|
-
namespace:
|
22
|
+
resource_id: resource.id,
|
23
|
+
namespace: namespace.to_s
|
23
24
|
).order(ActiveAdmin.application.namespaces[namespace.to_sym].comments_order)
|
24
25
|
end
|
25
26
|
|
@@ -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
|
@@ -30,25 +31,22 @@ module ActiveAdmin
|
|
30
31
|
end
|
31
32
|
|
32
33
|
def retrieve_policy(subject)
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
rescue Pundit::NotDefinedError => e
|
39
|
-
if default_policy_class
|
40
|
-
default_policy(user, subject)
|
34
|
+
target = policy_target(subject)
|
35
|
+
if (policy = policy(namespace(target)) || compat_policy(subject))
|
36
|
+
policy
|
37
|
+
elsif default_policy_class
|
38
|
+
default_policy(subject)
|
41
39
|
else
|
42
|
-
raise
|
40
|
+
raise Pundit::NotDefinedError, "unable to find a compatible policy for `#{target}`"
|
43
41
|
end
|
44
42
|
end
|
45
43
|
|
46
44
|
def format_action(action, subject)
|
47
45
|
# https://github.com/varvet/pundit/blob/master/lib/generators/pundit/install/templates/application_policy.rb
|
48
46
|
case action
|
49
|
-
when Auth::CREATE
|
50
|
-
when Auth::UPDATE
|
51
|
-
when Auth::READ
|
47
|
+
when Auth::CREATE then :create?
|
48
|
+
when Auth::UPDATE then :update?
|
49
|
+
when Auth::READ then subject.is_a?(Class) ? :index? : :show?
|
52
50
|
when Auth::DESTROY then subject.is_a?(Class) ? :destroy_all? : :destroy?
|
53
51
|
else "#{action}?"
|
54
52
|
end
|
@@ -56,8 +54,42 @@ module ActiveAdmin
|
|
56
54
|
|
57
55
|
private
|
58
56
|
|
57
|
+
def policy_target(subject)
|
58
|
+
case subject
|
59
|
+
when nil then resource
|
60
|
+
when Class then subject.new
|
61
|
+
else subject
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
# This method is needed to fallback to our previous policy searching logic.
|
66
|
+
# I.e.: when class name contains `default_policy_namespace` (eg: ShopAdmin)
|
67
|
+
# we should try to search it without namespace. This is because that's
|
68
|
+
# the only thing that worked in this case before we fixed our buggy namespace
|
69
|
+
# detection, so people are probably relying on it.
|
70
|
+
# This fallback might be removed in future versions of ActiveAdmin, so
|
71
|
+
# pundit_adapter search will work consistently with provided namespaces
|
72
|
+
def compat_policy(subject)
|
73
|
+
return unless default_policy_namespace
|
74
|
+
|
75
|
+
target = policy_target(subject)
|
76
|
+
|
77
|
+
return unless target.class.to_s.include?(default_policy_module) &&
|
78
|
+
(policy = policy(target))
|
79
|
+
|
80
|
+
policy_name = policy.class.to_s
|
81
|
+
|
82
|
+
Deprecation.warn "You have `pundit_policy_namespace` configured as `#{default_policy_namespace}`, " \
|
83
|
+
"but ActiveAdmin was unable to find policy #{default_policy_module}::#{policy_name}. " \
|
84
|
+
"#{policy_name} will be used instead. " \
|
85
|
+
"This behavior will be removed in future versions of ActiveAdmin. " \
|
86
|
+
"To fix this warning, move your #{policy_name} policy to the #{default_policy_module} namespace"
|
87
|
+
|
88
|
+
policy
|
89
|
+
end
|
90
|
+
|
59
91
|
def namespace(object)
|
60
|
-
if default_policy_namespace && !object.class.to_s.
|
92
|
+
if default_policy_namespace && !object.class.to_s.start_with?("#{default_policy_module}::")
|
61
93
|
[default_policy_namespace.to_sym, object]
|
62
94
|
else
|
63
95
|
object
|
@@ -68,7 +100,7 @@ module ActiveAdmin
|
|
68
100
|
ActiveAdmin.application.pundit_default_policy && ActiveAdmin.application.pundit_default_policy.constantize
|
69
101
|
end
|
70
102
|
|
71
|
-
def default_policy(
|
103
|
+
def default_policy(subject)
|
72
104
|
default_policy_class.new(user, subject)
|
73
105
|
end
|
74
106
|
|
@@ -76,6 +108,18 @@ module ActiveAdmin
|
|
76
108
|
ActiveAdmin.application.pundit_policy_namespace
|
77
109
|
end
|
78
110
|
|
111
|
+
def default_policy_module
|
112
|
+
default_policy_namespace.to_s.camelize
|
113
|
+
end
|
114
|
+
|
115
|
+
def policy(target)
|
116
|
+
policies[target] ||= Pundit.policy(user, target)
|
117
|
+
end
|
118
|
+
|
119
|
+
def policies
|
120
|
+
@policies ||= {}
|
121
|
+
end
|
122
|
+
|
79
123
|
end
|
80
124
|
|
81
125
|
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
|
|