activeadmin 2.9.0 → 3.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|