activeadmin 2.9.0 → 3.2.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 +284 -1
- data/CONTRIBUTING.md +4 -12
- data/README.md +2 -2
- data/app/assets/javascripts/active_admin/base.js +13 -9
- data/app/assets/stylesheets/active_admin/_base.scss +53 -37
- data/app/assets/stylesheets/active_admin/_forms.scss +1 -11
- data/app/assets/stylesheets/active_admin/_normalize.scss +25 -123
- 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 +9 -0
- data/app/assets/stylesheets/active_admin/structure/_footer.scss +6 -1
- 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/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 +5 -4
- data/config/locales/ar.yml +0 -7
- data/config/locales/az.yml +0 -7
- data/config/locales/bg.yml +0 -7
- data/config/locales/bs.yml +0 -7
- data/config/locales/ca.yml +0 -7
- data/config/locales/cs.yml +0 -7
- data/config/locales/da.yml +0 -7
- data/config/locales/de-CH.yml +0 -7
- data/config/locales/de.yml +0 -8
- data/config/locales/el.yml +0 -7
- data/config/locales/en-CA.yml +0 -7
- data/config/locales/en-GB.yml +0 -7
- data/config/locales/en.yml +0 -8
- data/config/locales/eo.yml +0 -8
- data/config/locales/es-MX.yml +0 -7
- data/config/locales/es.yml +0 -8
- data/config/locales/fa.yml +0 -7
- data/config/locales/fi.yml +0 -7
- data/config/locales/fr.yml +3 -11
- data/config/locales/he.yml +0 -9
- data/config/locales/hr.yml +0 -7
- data/config/locales/hu.yml +0 -8
- data/config/locales/id.yml +0 -7
- data/config/locales/it.yml +0 -8
- data/config/locales/ja.yml +0 -8
- data/config/locales/ko.yml +1 -8
- data/config/locales/lt.yml +0 -8
- data/config/locales/lv.yml +0 -7
- data/config/locales/mk.yml +0 -8
- data/config/locales/nb.yml +0 -8
- data/config/locales/nl.yml +1 -9
- data/config/locales/pl.yml +0 -8
- data/config/locales/pt-BR.yml +0 -8
- data/config/locales/pt-PT.yml +0 -7
- data/config/locales/ro.yml +3 -9
- data/config/locales/ru.yml +0 -6
- data/config/locales/sk.yml +0 -8
- data/config/locales/sv-SE.yml +58 -39
- data/config/locales/tr.yml +0 -11
- data/config/locales/uk.yml +0 -6
- data/config/locales/vi.yml +34 -15
- data/config/locales/zh-CN.yml +34 -23
- data/config/locales/zh-TW.yml +0 -7
- data/lib/active_admin/abstract_view_factory.rb +1 -0
- data/lib/active_admin/application.rb +10 -10
- data/lib/active_admin/application_settings.rb +1 -0
- data/lib/active_admin/asset_registration.rb +4 -3
- data/lib/active_admin/authorization_adapter.rb +3 -0
- data/lib/active_admin/base_controller/authorization.rb +4 -3
- data/lib/active_admin/base_controller/menu.rb +1 -0
- data/lib/active_admin/base_controller.rb +2 -1
- data/lib/active_admin/batch_actions/controller.rb +1 -0
- data/lib/active_admin/batch_actions/resource_extension.rb +1 -0
- data/lib/active_admin/batch_actions/views/batch_action_form.rb +1 -0
- data/lib/active_admin/batch_actions/views/batch_action_selector.rb +1 -0
- data/lib/active_admin/batch_actions/views/selection_cells.rb +1 -0
- data/lib/active_admin/batch_actions.rb +1 -0
- data/lib/active_admin/callbacks.rb +1 -0
- data/lib/active_admin/cancan_adapter.rb +1 -0
- data/lib/active_admin/collection_decorator.rb +1 -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 +24 -16
- data/lib/active_admin/dependency.rb +1 -4
- data/lib/active_admin/devise.rb +11 -0
- data/lib/active_admin/dsl.rb +1 -0
- data/lib/active_admin/dynamic_setting.rb +1 -0
- data/lib/active_admin/dynamic_settings_node.rb +1 -0
- data/lib/active_admin/engine.rb +8 -2
- data/lib/active_admin/error.rb +1 -0
- data/lib/active_admin/filters/active.rb +1 -0
- data/lib/active_admin/filters/active_filter.rb +2 -1
- data/lib/active_admin/filters/active_sidebar.rb +2 -28
- data/lib/active_admin/filters/dsl.rb +1 -0
- data/lib/active_admin/filters/forms.rb +3 -2
- data/lib/active_admin/filters/formtastic_addons.rb +2 -1
- data/lib/active_admin/filters/resource_extension.rb +5 -4
- data/lib/active_admin/filters.rb +1 -0
- data/lib/active_admin/form_builder.rb +1 -0
- data/lib/active_admin/generators/boilerplate.rb +1 -0
- 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 +1 -0
- 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 +1 -0
- data/lib/active_admin/inputs/filters/base/search_method_select.rb +3 -2
- data/lib/active_admin/inputs/filters/base.rb +1 -0
- data/lib/active_admin/inputs/filters/boolean_input.rb +1 -0
- data/lib/active_admin/inputs/filters/check_boxes_input.rb +1 -0
- data/lib/active_admin/inputs/filters/date_picker_input.rb +1 -0
- data/lib/active_admin/inputs/filters/date_range_input.rb +3 -2
- data/lib/active_admin/inputs/filters/numeric_input.rb +2 -1
- data/lib/active_admin/inputs/filters/select_input.rb +3 -0
- data/lib/active_admin/inputs/filters/string_input.rb +2 -1
- 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 +1 -0
- data/lib/active_admin/localizers.rb +1 -0
- data/lib/active_admin/menu.rb +2 -0
- data/lib/active_admin/menu_collection.rb +1 -0
- data/lib/active_admin/menu_item.rb +1 -0
- data/lib/active_admin/namespace.rb +4 -3
- data/lib/active_admin/namespace_settings.rb +2 -1
- data/lib/active_admin/order_clause.rb +1 -0
- data/lib/active_admin/orm/active_record/comments/comment.rb +9 -0
- 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 +2 -1
- data/lib/active_admin/orm/active_record/comments/views.rb +1 -0
- data/lib/active_admin/orm/active_record/comments.rb +9 -8
- data/lib/active_admin/orm/active_record.rb +1 -0
- data/lib/active_admin/orm/mongoid.rb +1 -0
- data/lib/active_admin/page.rb +1 -0
- 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 +55 -13
- data/lib/active_admin/resource/action_items.rb +3 -2
- data/lib/active_admin/resource/attributes.rb +1 -0
- data/lib/active_admin/resource/belongs_to.rb +1 -0
- data/lib/active_admin/resource/controllers.rb +1 -0
- data/lib/active_admin/resource/includes.rb +1 -0
- data/lib/active_admin/resource/menu.rb +1 -0
- data/lib/active_admin/resource/model.rb +1 -0
- data/lib/active_admin/resource/naming.rb +1 -0
- 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 +1 -0
- data/lib/active_admin/resource/scope_to.rb +1 -0
- data/lib/active_admin/resource/scopes.rb +1 -0
- data/lib/active_admin/resource/sidebars.rb +1 -0
- data/lib/active_admin/resource.rb +3 -2
- 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 +30 -4
- data/lib/active_admin/resource_controller/decorators.rb +1 -0
- 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 +3 -2
- data/lib/active_admin/resource_controller.rb +1 -0
- data/lib/active_admin/resource_dsl.rb +7 -21
- data/lib/active_admin/router.rb +1 -0
- data/lib/active_admin/scope.rb +1 -0
- 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 +1 -0
- data/lib/active_admin/view_helpers/active_admin_application_helper.rb +1 -0
- data/lib/active_admin/view_helpers/auto_link_helper.rb +2 -1
- data/lib/active_admin/view_helpers/breadcrumb_helper.rb +1 -0
- data/lib/active_admin/view_helpers/display_helper.rb +19 -4
- data/lib/active_admin/view_helpers/download_format_links_helper.rb +1 -0
- data/lib/active_admin/view_helpers/fields_for.rb +1 -0
- 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 +1 -0
- data/lib/active_admin/views/action_items.rb +1 -0
- data/lib/active_admin/views/components/active_admin_form.rb +2 -5
- data/lib/active_admin/views/components/active_filters_sidebar_content.rb +59 -0
- data/lib/active_admin/views/components/attributes_table.rb +1 -0
- data/lib/active_admin/views/components/blank_slate.rb +1 -0
- data/lib/active_admin/views/components/columns.rb +1 -0
- data/lib/active_admin/views/components/dropdown_menu.rb +3 -5
- data/lib/active_admin/views/components/index_list.rb +1 -0
- data/lib/active_admin/views/components/menu.rb +1 -0
- data/lib/active_admin/views/components/menu_item.rb +1 -0
- data/lib/active_admin/views/components/paginated_collection.rb +1 -0
- data/lib/active_admin/views/components/panel.rb +1 -0
- data/lib/active_admin/views/components/scopes.rb +1 -0
- 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 +1 -0
- data/lib/active_admin/views/components/status_tag.rb +1 -0
- data/lib/active_admin/views/components/table_for.rb +1 -0
- data/lib/active_admin/views/components/tabs.rb +1 -0
- data/lib/active_admin/views/components/unsupported_browser.rb +1 -0
- data/lib/active_admin/views/footer.rb +1 -0
- data/lib/active_admin/views/header.rb +1 -0
- data/lib/active_admin/views/index_as_block.rb +1 -0
- data/lib/active_admin/views/index_as_blog.rb +1 -0
- data/lib/active_admin/views/index_as_grid.rb +1 -0
- data/lib/active_admin/views/index_as_table.rb +2 -5
- data/lib/active_admin/views/pages/base.rb +8 -4
- data/lib/active_admin/views/pages/form.rb +1 -0
- data/lib/active_admin/views/pages/index.rb +2 -1
- 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 +2 -7
- data/lib/active_admin/views/tabbed_navigation.rb +1 -0
- data/lib/active_admin/views/title_bar.rb +1 -0
- data/lib/active_admin/views.rb +1 -0
- data/lib/active_admin.rb +6 -3
- data/lib/activeadmin.rb +1 -0
- data/lib/generators/active_admin/assets/assets_generator.rb +1 -0
- data/lib/generators/active_admin/devise/devise_generator.rb +1 -0
- data/lib/generators/active_admin/install/install_generator.rb +1 -0
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +18 -1
- data/lib/generators/active_admin/install/templates/dashboard.rb +1 -0
- data/lib/generators/active_admin/page/page_generator.rb +1 -0
- data/lib/generators/active_admin/page/templates/page.rb +1 -0
- data/lib/generators/active_admin/resource/resource_generator.rb +1 -0
- data/lib/generators/active_admin/webpacker/webpacker_generator.rb +1 -0
- metadata +26 -83
- data/docs/.gitignore +0 -1
- data/docs/0-installation.md +0 -142
- data/docs/1-general-configuration.md +0 -224
- data/docs/10-custom-pages.md +0 -150
- data/docs/11-decorators.md +0 -70
- data/docs/12-arbre-components.md +0 -214
- data/docs/13-authorization-adapter.md +0 -285
- data/docs/14-gotchas.md +0 -138
- data/docs/2-resource-customization.md +0 -475
- data/docs/3-index-pages/custom-index.md +0 -35
- data/docs/3-index-pages/index-as-block.md +0 -19
- data/docs/3-index-pages/index-as-blog.md +0 -69
- data/docs/3-index-pages/index-as-grid.md +0 -27
- data/docs/3-index-pages/index-as-table.md +0 -234
- data/docs/3-index-pages.md +0 -328
- data/docs/4-csv-format.md +0 -74
- data/docs/5-forms.md +0 -237
- data/docs/6-show-pages.md +0 -93
- data/docs/7-sidebars.md +0 -75
- data/docs/8-custom-actions.md +0 -177
- data/docs/9-batch-actions.md +0 -237
- data/docs/CNAME +0 -1
- data/docs/Gemfile +0 -3
- data/docs/Gemfile.lock +0 -259
- data/docs/README.md +0 -24
- data/docs/_config.yml +0 -4
- data/docs/_includes/footer.html +0 -8
- data/docs/_includes/google-analytics.html +0 -16
- data/docs/_includes/head.html +0 -7
- data/docs/_includes/toc.html +0 -98
- data/docs/_includes/top-menu.html +0 -17
- data/docs/_layouts/default.html +0 -21
- data/docs/documentation.md +0 -60
- data/docs/images/activeadmin.png +0 -0
- data/docs/images/code-header.png +0 -0
- data/docs/images/divider.png +0 -0
- data/docs/images/features.png +0 -0
- data/docs/images/tidelift.svg +0 -14
- data/docs/index.html +0 -226
- data/docs/stylesheets/main.css +0 -1205
- data/lib/active_admin/deprecation.rb +0 -10
- data/lib/ransack_ext.rb +0 -20
- /data/app/assets/stylesheets/active_admin/{print.scss → _print.scss} +0 -0
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module ActiveAdmin
|
|
2
3
|
module Filters
|
|
3
4
|
|
|
@@ -40,7 +41,7 @@ module ActiveAdmin
|
|
|
40
41
|
|
|
41
42
|
def predicate_name
|
|
42
43
|
I18n.t(
|
|
43
|
-
"
|
|
44
|
+
"ransack.predicates.#{condition.predicate.name}",
|
|
44
45
|
default: ransack_predicate_name)
|
|
45
46
|
end
|
|
46
47
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
require "active_admin/filters/active"
|
|
2
3
|
|
|
3
4
|
module ActiveAdmin
|
|
@@ -9,34 +10,7 @@ module ActiveAdmin
|
|
|
9
10
|
end
|
|
10
11
|
|
|
11
12
|
def block
|
|
12
|
-
->
|
|
13
|
-
active_filters = ActiveAdmin::Filters::Active.new(active_admin_config, assigns[:search])
|
|
14
|
-
span do
|
|
15
|
-
if current_scope
|
|
16
|
-
h4 I18n.t("active_admin.search_status.current_scope"), style: "display: inline"
|
|
17
|
-
b scope_name(current_scope), class: "current_scope_name", style: "display: inline"
|
|
18
|
-
end
|
|
19
|
-
div style: "margin-top: 10px" do
|
|
20
|
-
h4 I18n.t("active_admin.search_status.current_filters"), style: "margin-bottom: 10px"
|
|
21
|
-
ul do
|
|
22
|
-
if active_filters.filters.blank?
|
|
23
|
-
li I18n.t("active_admin.search_status.no_current_filters")
|
|
24
|
-
else
|
|
25
|
-
active_filters.filters.each do |filter|
|
|
26
|
-
li filter.html_options do
|
|
27
|
-
span do
|
|
28
|
-
text_node filter.label
|
|
29
|
-
end
|
|
30
|
-
b do
|
|
31
|
-
text_node to_sentence(filter.values.map { |v| pretty_format(v) })
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
end
|
|
13
|
+
-> { active_filters_sidebar_content }
|
|
40
14
|
end
|
|
41
15
|
|
|
42
16
|
def title
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module ActiveAdmin
|
|
2
3
|
module Filters
|
|
3
4
|
# This form builder defines methods to build filter forms such
|
|
@@ -20,7 +21,7 @@ module ActiveAdmin
|
|
|
20
21
|
# Returns the default filter type for a given attribute. If you want
|
|
21
22
|
# to use a custom search method, you have to specify the type yourself.
|
|
22
23
|
def default_input_type(method, options = {})
|
|
23
|
-
if method =~ /_(eq|
|
|
24
|
+
if method =~ /_(eq|cont|start|end)\z/
|
|
24
25
|
:string
|
|
25
26
|
elsif klass._ransackers.key?(method.to_s)
|
|
26
27
|
klass._ransackers[method.to_s].type
|
|
@@ -30,7 +31,7 @@ module ActiveAdmin
|
|
|
30
31
|
case column.type
|
|
31
32
|
when :date, :datetime
|
|
32
33
|
:date_range
|
|
33
|
-
when :string, :text
|
|
34
|
+
when :string, :text, :citext
|
|
34
35
|
:string
|
|
35
36
|
when :integer, :float, :decimal
|
|
36
37
|
:numeric
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module ActiveAdmin
|
|
2
3
|
module Filters
|
|
3
4
|
module FormtasticAddons
|
|
@@ -46,7 +47,7 @@ module ActiveAdmin
|
|
|
46
47
|
#
|
|
47
48
|
|
|
48
49
|
def searchable_has_many_through?
|
|
49
|
-
if reflection && reflection.options[:through]
|
|
50
|
+
if klass.ransackable_associations.include?(method.to_s) && reflection && reflection.options[:through]
|
|
50
51
|
reflection.through_reflection.klass.ransackable_attributes.include? reflection.foreign_key
|
|
51
52
|
else
|
|
52
53
|
false
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module ActiveAdmin
|
|
2
3
|
module Filters
|
|
3
4
|
|
|
4
5
|
class Disabled < RuntimeError
|
|
5
|
-
def initialize
|
|
6
|
-
super "
|
|
6
|
+
def initialize(action)
|
|
7
|
+
super "Cannot #{action} a filter when filters are disabled. Enable filters with 'config.filters = true'"
|
|
7
8
|
end
|
|
8
9
|
end
|
|
9
10
|
|
|
@@ -60,7 +61,7 @@ module ActiveAdmin
|
|
|
60
61
|
#
|
|
61
62
|
# @param [Symbol] attributes The attributes to not filter on
|
|
62
63
|
def remove_filter(*attributes)
|
|
63
|
-
raise Disabled unless filters_enabled?
|
|
64
|
+
raise Disabled, "remove" unless filters_enabled?
|
|
64
65
|
|
|
65
66
|
attributes.each { |attribute| (@filters_to_remove ||= []) << attribute.to_sym }
|
|
66
67
|
end
|
|
@@ -72,7 +73,7 @@ module ActiveAdmin
|
|
|
72
73
|
# @param [Hash] options The set of options that are passed through to
|
|
73
74
|
# ransack for the field definition.
|
|
74
75
|
def add_filter(attribute, options = {})
|
|
75
|
-
raise Disabled unless filters_enabled?
|
|
76
|
+
raise Disabled, "add" unless filters_enabled?
|
|
76
77
|
|
|
77
78
|
(@filters ||= {})[attribute.to_sym] = options
|
|
78
79
|
end
|
data/lib/active_admin/filters.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module ActiveAdmin
|
|
2
3
|
module Helpers
|
|
3
4
|
module Collection
|
|
@@ -5,6 +6,7 @@ module ActiveAdmin
|
|
|
5
6
|
# 2. correctly handles the Hash returned when `group by` is used
|
|
6
7
|
def collection_size(c = collection)
|
|
7
8
|
return c.count if c.is_a?(Array)
|
|
9
|
+
return c.length if c.limit_value
|
|
8
10
|
|
|
9
11
|
c = c.except :select, :order
|
|
10
12
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
# This is a common set of Formtastic overrides needed to build a filter form
|
|
2
3
|
# that lets you select from a set of search methods for a given attribute.
|
|
3
4
|
#
|
|
@@ -8,7 +9,7 @@
|
|
|
8
9
|
# include Base
|
|
9
10
|
# include Base::SearchMethodSelect
|
|
10
11
|
#
|
|
11
|
-
# filter :
|
|
12
|
+
# filter :eq, :gt, :lt
|
|
12
13
|
# end
|
|
13
14
|
#
|
|
14
15
|
module ActiveAdmin
|
|
@@ -64,7 +65,7 @@ module ActiveAdmin
|
|
|
64
65
|
|
|
65
66
|
def filter_options
|
|
66
67
|
filters.collect do |filter|
|
|
67
|
-
[I18n.t("
|
|
68
|
+
[I18n.t("ransack.predicates.#{filter}").capitalize, "#{method}_#{filter}"]
|
|
68
69
|
end
|
|
69
70
|
end
|
|
70
71
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module ActiveAdmin
|
|
2
3
|
module Inputs
|
|
3
4
|
module Filters
|
|
@@ -14,12 +15,12 @@ module ActiveAdmin
|
|
|
14
15
|
end
|
|
15
16
|
|
|
16
17
|
def gt_input_name
|
|
17
|
-
|
|
18
|
+
"#{method}_gteq"
|
|
18
19
|
end
|
|
19
20
|
alias :input_name :gt_input_name
|
|
20
21
|
|
|
21
22
|
def lt_input_name
|
|
22
|
-
|
|
23
|
+
"#{method}_lteq"
|
|
23
24
|
end
|
|
24
25
|
|
|
25
26
|
def input_html_options
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module ActiveAdmin
|
|
2
3
|
module Inputs
|
|
3
4
|
module Filters
|
|
@@ -5,7 +6,7 @@ module ActiveAdmin
|
|
|
5
6
|
include Base
|
|
6
7
|
include Base::SearchMethodSelect
|
|
7
8
|
|
|
8
|
-
filter :
|
|
9
|
+
filter :eq, :gt, :lt
|
|
9
10
|
end
|
|
10
11
|
end
|
|
11
12
|
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module ActiveAdmin
|
|
2
3
|
module Inputs
|
|
3
4
|
module Filters
|
|
@@ -42,6 +43,8 @@ module ActiveAdmin
|
|
|
42
43
|
else
|
|
43
44
|
super
|
|
44
45
|
end
|
|
46
|
+
rescue ActiveRecord::QueryCanceled => error
|
|
47
|
+
raise ActiveRecord::QueryCanceled.new "#{error.message.strip} while querying the values for the ActiveAdmin :#{method} filter"
|
|
45
48
|
end
|
|
46
49
|
|
|
47
50
|
def pluck_column
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module ActiveAdmin
|
|
2
3
|
module Inputs
|
|
3
4
|
module Filters
|
|
@@ -5,7 +6,7 @@ module ActiveAdmin
|
|
|
5
6
|
include Base
|
|
6
7
|
include Base::SearchMethodSelect
|
|
7
8
|
|
|
8
|
-
filter :
|
|
9
|
+
filter :cont, :eq, :start, :end
|
|
9
10
|
|
|
10
11
|
# If the filter method includes a search condition, build a normal string search field.
|
|
11
12
|
# Else, build a search field with a companion dropdown to choose a search condition from.
|
data/lib/active_admin/inputs.rb
CHANGED
data/lib/active_admin/menu.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module ActiveAdmin
|
|
2
3
|
|
|
3
4
|
# Each Namespace builds up it's own menu as the global navigation
|
|
@@ -47,6 +48,7 @@ module ActiveAdmin
|
|
|
47
48
|
# menu.add parent: 'Dashboard', label: 'My Child Dashboard'
|
|
48
49
|
#
|
|
49
50
|
def add(options)
|
|
51
|
+
options = options.dup # Make sure parameter is not modified
|
|
50
52
|
parent_chain = Array.wrap(options.delete(:parent))
|
|
51
53
|
|
|
52
54
|
item = if parent = parent_chain.shift
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
require "active_admin/resource_collection"
|
|
2
3
|
|
|
3
4
|
module ActiveAdmin
|
|
@@ -27,7 +28,7 @@ module ActiveAdmin
|
|
|
27
28
|
class Namespace
|
|
28
29
|
class << self
|
|
29
30
|
def setting(name, default)
|
|
30
|
-
|
|
31
|
+
ActiveAdmin.deprecator.warn "This method does not do anything and will be removed."
|
|
31
32
|
end
|
|
32
33
|
end
|
|
33
34
|
|
|
@@ -59,7 +60,7 @@ module ActiveAdmin
|
|
|
59
60
|
settings.respond_to?(method) ? settings.send(method, *args) : super
|
|
60
61
|
end
|
|
61
62
|
|
|
62
|
-
# Register a resource into this namespace. The
|
|
63
|
+
# Register a resource into this namespace. The preferred method to access this is to
|
|
63
64
|
# use the global registration ActiveAdmin.register which delegates to the proper
|
|
64
65
|
# namespace instance.
|
|
65
66
|
def register(resource_class, options = {}, &block)
|
|
@@ -71,7 +72,7 @@ module ActiveAdmin
|
|
|
71
72
|
reset_menu!
|
|
72
73
|
|
|
73
74
|
# Dispatch a registration event
|
|
74
|
-
ActiveSupport::Notifications.
|
|
75
|
+
ActiveSupport::Notifications.instrument ActiveAdmin::Resource::RegisterEvent, { active_admin_resource: config }
|
|
75
76
|
|
|
76
77
|
# Return the config
|
|
77
78
|
config
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
require "active_admin/dynamic_settings_node"
|
|
2
3
|
|
|
3
4
|
module ActiveAdmin
|
|
@@ -118,7 +119,7 @@ module ActiveAdmin
|
|
|
118
119
|
:title,
|
|
119
120
|
:email,
|
|
120
121
|
]
|
|
121
|
-
register :filter_method_for_large_association, "
|
|
122
|
+
register :filter_method_for_large_association, "_start"
|
|
122
123
|
|
|
123
124
|
# Switch between asset pipeline and webpacker assets
|
|
124
125
|
register :use_webpacker, false
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module ActiveAdmin
|
|
2
3
|
class Comment < ActiveRecord::Base
|
|
3
4
|
|
|
@@ -27,5 +28,13 @@ module ActiveAdmin
|
|
|
27
28
|
self.resource_type = self.class.resource_type(resource)
|
|
28
29
|
end
|
|
29
30
|
|
|
31
|
+
def self.ransackable_attributes(auth_object = nil)
|
|
32
|
+
authorizable_ransackable_attributes
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def self.ransackable_associations(auth_object = nil)
|
|
36
|
+
authorizable_ransackable_associations
|
|
37
|
+
end
|
|
38
|
+
|
|
30
39
|
end
|
|
31
40
|
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
require "active_admin/views"
|
|
2
3
|
require "active_admin/views/components/panel"
|
|
3
4
|
|
|
@@ -35,7 +36,7 @@ module ActiveAdmin
|
|
|
35
36
|
|
|
36
37
|
text_node paginate @comments
|
|
37
38
|
|
|
38
|
-
if authorized?(ActiveAdmin::Auth::
|
|
39
|
+
if authorized?(ActiveAdmin::Auth::NEW, ActiveAdmin::Comment)
|
|
39
40
|
build_comment_form
|
|
40
41
|
end
|
|
41
42
|
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
require "active_admin/orm/active_record/comments/views"
|
|
2
3
|
require "active_admin/orm/active_record/comments/show_page_helper"
|
|
3
4
|
require "active_admin/orm/active_record/comments/namespace_helper"
|
|
@@ -71,15 +72,15 @@ ActiveAdmin.after_load do |app|
|
|
|
71
72
|
redirect_back fallback_location: active_admin_root
|
|
72
73
|
end
|
|
73
74
|
end
|
|
75
|
+
end
|
|
74
76
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
end
|
|
77
|
+
def destroy
|
|
78
|
+
destroy! do |success, failure|
|
|
79
|
+
success.html do
|
|
80
|
+
redirect_back fallback_location: active_admin_root
|
|
81
|
+
end
|
|
82
|
+
failure.html do
|
|
83
|
+
redirect_back fallback_location: active_admin_root
|
|
83
84
|
end
|
|
84
85
|
end
|
|
85
86
|
end
|
data/lib/active_admin/page.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
ActiveAdmin::Dependency.pundit!
|
|
2
3
|
|
|
3
4
|
require "pundit"
|
|
@@ -30,24 +31,19 @@ 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 then :create?
|
|
50
|
-
when Auth::UPDATE then :update?
|
|
51
47
|
when Auth::READ then subject.is_a?(Class) ? :index? : :show?
|
|
52
48
|
when Auth::DESTROY then subject.is_a?(Class) ? :destroy_all? : :destroy?
|
|
53
49
|
else "#{action}?"
|
|
@@ -56,8 +52,42 @@ module ActiveAdmin
|
|
|
56
52
|
|
|
57
53
|
private
|
|
58
54
|
|
|
55
|
+
def policy_target(subject)
|
|
56
|
+
case subject
|
|
57
|
+
when nil then resource
|
|
58
|
+
when Class then subject.new
|
|
59
|
+
else subject
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# This method is needed to fallback to our previous policy searching logic.
|
|
64
|
+
# I.e.: when class name contains `default_policy_namespace` (eg: ShopAdmin)
|
|
65
|
+
# we should try to search it without namespace. This is because that's
|
|
66
|
+
# the only thing that worked in this case before we fixed our buggy namespace
|
|
67
|
+
# detection, so people are probably relying on it.
|
|
68
|
+
# This fallback might be removed in future versions of ActiveAdmin, so
|
|
69
|
+
# pundit_adapter search will work consistently with provided namespaces
|
|
70
|
+
def compat_policy(subject)
|
|
71
|
+
return unless default_policy_namespace
|
|
72
|
+
|
|
73
|
+
target = policy_target(subject)
|
|
74
|
+
|
|
75
|
+
return unless target.class.to_s.include?(default_policy_module) &&
|
|
76
|
+
(policy = policy(target))
|
|
77
|
+
|
|
78
|
+
policy_name = policy.class.to_s
|
|
79
|
+
|
|
80
|
+
ActiveAdmin.deprecator.warn "You have `pundit_policy_namespace` configured as `#{default_policy_namespace}`, " \
|
|
81
|
+
"but ActiveAdmin was unable to find policy #{default_policy_module}::#{policy_name}. " \
|
|
82
|
+
"#{policy_name} will be used instead. " \
|
|
83
|
+
"This behavior will be removed in future versions of ActiveAdmin. " \
|
|
84
|
+
"To fix this warning, move your #{policy_name} policy to the #{default_policy_module} namespace"
|
|
85
|
+
|
|
86
|
+
policy
|
|
87
|
+
end
|
|
88
|
+
|
|
59
89
|
def namespace(object)
|
|
60
|
-
if default_policy_namespace && !object.class.to_s.
|
|
90
|
+
if default_policy_namespace && !object.class.to_s.start_with?("#{default_policy_module}::")
|
|
61
91
|
[default_policy_namespace.to_sym, object]
|
|
62
92
|
else
|
|
63
93
|
object
|
|
@@ -68,7 +98,7 @@ module ActiveAdmin
|
|
|
68
98
|
ActiveAdmin.application.pundit_default_policy && ActiveAdmin.application.pundit_default_policy.constantize
|
|
69
99
|
end
|
|
70
100
|
|
|
71
|
-
def default_policy(
|
|
101
|
+
def default_policy(subject)
|
|
72
102
|
default_policy_class.new(user, subject)
|
|
73
103
|
end
|
|
74
104
|
|
|
@@ -76,6 +106,18 @@ module ActiveAdmin
|
|
|
76
106
|
ActiveAdmin.application.pundit_policy_namespace
|
|
77
107
|
end
|
|
78
108
|
|
|
109
|
+
def default_policy_module
|
|
110
|
+
default_policy_namespace.to_s.camelize
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def policy(target)
|
|
114
|
+
policies[target] ||= Pundit.policy(user, target)
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def policies
|
|
118
|
+
@policies ||= {}
|
|
119
|
+
end
|
|
120
|
+
|
|
79
121
|
end
|
|
80
122
|
|
|
81
123
|
end
|