activeadmin 2.9.0 → 2.12.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.
Files changed (198) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +143 -1
  3. data/app/assets/javascripts/active_admin/base.js +13 -6
  4. data/app/assets/stylesheets/active_admin/_base.scss +53 -37
  5. data/app/assets/stylesheets/active_admin/_forms.scss +0 -10
  6. data/app/assets/stylesheets/active_admin/_normalize.scss +25 -123
  7. data/app/assets/stylesheets/active_admin/{print.scss → _print.scss} +0 -0
  8. data/app/assets/stylesheets/active_admin/components/_date_picker.scss +1 -2
  9. data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +0 -1
  10. data/app/assets/stylesheets/active_admin/mixins/_variables.scss +9 -0
  11. data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +0 -1
  12. data/app/javascript/active_admin/initializers/has-many.js +4 -1
  13. data/app/views/active_admin/devise/shared/_links.erb +1 -1
  14. data/app/views/active_admin/page/index.html.arb +1 -0
  15. data/app/views/active_admin/resource/edit.html.arb +1 -0
  16. data/app/views/active_admin/resource/index.html.arb +1 -0
  17. data/app/views/active_admin/resource/new.html.arb +1 -0
  18. data/app/views/active_admin/resource/show.html.arb +1 -0
  19. data/app/views/layouts/active_admin.html.arb +1 -0
  20. data/config/locales/ko.yml +1 -1
  21. data/config/locales/nl.yml +1 -1
  22. data/config/locales/ro.yml +3 -2
  23. data/docs/0-installation.md +2 -2
  24. data/docs/5-forms.md +1 -1
  25. data/docs/8-custom-actions.md +1 -1
  26. data/docs/Gemfile +1 -0
  27. data/docs/Gemfile.lock +116 -92
  28. data/lib/active_admin/abstract_view_factory.rb +1 -0
  29. data/lib/active_admin/application.rb +9 -9
  30. data/lib/active_admin/application_settings.rb +1 -0
  31. data/lib/active_admin/asset_registration.rb +1 -0
  32. data/lib/active_admin/authorization_adapter.rb +1 -0
  33. data/lib/active_admin/base_controller/authorization.rb +2 -1
  34. data/lib/active_admin/base_controller/menu.rb +1 -0
  35. data/lib/active_admin/base_controller.rb +2 -1
  36. data/lib/active_admin/batch_actions/controller.rb +1 -0
  37. data/lib/active_admin/batch_actions/resource_extension.rb +1 -0
  38. data/lib/active_admin/batch_actions/views/batch_action_form.rb +1 -0
  39. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +1 -0
  40. data/lib/active_admin/batch_actions/views/selection_cells.rb +1 -0
  41. data/lib/active_admin/batch_actions.rb +1 -0
  42. data/lib/active_admin/callbacks.rb +1 -0
  43. data/lib/active_admin/cancan_adapter.rb +1 -0
  44. data/lib/active_admin/collection_decorator.rb +1 -0
  45. data/lib/active_admin/component.rb +1 -0
  46. data/lib/active_admin/controller_action.rb +1 -0
  47. data/lib/active_admin/csv_builder.rb +5 -18
  48. data/lib/active_admin/dependency.rb +2 -1
  49. data/lib/active_admin/deprecation.rb +1 -0
  50. data/lib/active_admin/devise.rb +11 -0
  51. data/lib/active_admin/dsl.rb +1 -0
  52. data/lib/active_admin/dynamic_setting.rb +1 -0
  53. data/lib/active_admin/dynamic_settings_node.rb +1 -0
  54. data/lib/active_admin/engine.rb +3 -1
  55. data/lib/active_admin/error.rb +1 -0
  56. data/lib/active_admin/filters/active.rb +1 -0
  57. data/lib/active_admin/filters/active_filter.rb +1 -0
  58. data/lib/active_admin/filters/active_sidebar.rb +2 -28
  59. data/lib/active_admin/filters/dsl.rb +1 -0
  60. data/lib/active_admin/filters/forms.rb +1 -0
  61. data/lib/active_admin/filters/formtastic_addons.rb +1 -0
  62. data/lib/active_admin/filters/resource_extension.rb +1 -0
  63. data/lib/active_admin/filters.rb +1 -0
  64. data/lib/active_admin/form_builder.rb +1 -0
  65. data/lib/active_admin/generators/boilerplate.rb +1 -0
  66. data/lib/active_admin/helpers/collection.rb +2 -0
  67. data/lib/active_admin/helpers/i18n.rb +1 -0
  68. data/lib/active_admin/helpers/optional_display.rb +1 -0
  69. data/lib/active_admin/helpers/routes/url_helpers.rb +1 -0
  70. data/lib/active_admin/helpers/scope_chain.rb +1 -0
  71. data/lib/active_admin/inputs/datepicker_input.rb +1 -0
  72. data/lib/active_admin/inputs/filters/base/search_method_select.rb +1 -0
  73. data/lib/active_admin/inputs/filters/base.rb +1 -0
  74. data/lib/active_admin/inputs/filters/boolean_input.rb +1 -0
  75. data/lib/active_admin/inputs/filters/check_boxes_input.rb +1 -0
  76. data/lib/active_admin/inputs/filters/date_picker_input.rb +1 -0
  77. data/lib/active_admin/inputs/filters/date_range_input.rb +1 -0
  78. data/lib/active_admin/inputs/filters/numeric_input.rb +1 -0
  79. data/lib/active_admin/inputs/filters/select_input.rb +1 -0
  80. data/lib/active_admin/inputs/filters/string_input.rb +1 -0
  81. data/lib/active_admin/inputs/filters/text_input.rb +1 -0
  82. data/lib/active_admin/inputs.rb +1 -0
  83. data/lib/active_admin/localizers/resource_localizer.rb +1 -0
  84. data/lib/active_admin/localizers.rb +1 -0
  85. data/lib/active_admin/menu.rb +1 -0
  86. data/lib/active_admin/menu_collection.rb +1 -0
  87. data/lib/active_admin/menu_item.rb +1 -0
  88. data/lib/active_admin/namespace.rb +2 -1
  89. data/lib/active_admin/namespace_settings.rb +1 -0
  90. data/lib/active_admin/order_clause.rb +1 -0
  91. data/lib/active_admin/orm/active_record/comments/comment.rb +1 -0
  92. data/lib/active_admin/orm/active_record/comments/namespace_helper.rb +1 -0
  93. data/lib/active_admin/orm/active_record/comments/resource_helper.rb +1 -0
  94. data/lib/active_admin/orm/active_record/comments/show_page_helper.rb +1 -0
  95. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +1 -0
  96. data/lib/active_admin/orm/active_record/comments/views.rb +1 -0
  97. data/lib/active_admin/orm/active_record/comments.rb +1 -0
  98. data/lib/active_admin/orm/active_record.rb +1 -0
  99. data/lib/active_admin/orm/mongoid.rb +1 -0
  100. data/lib/active_admin/page.rb +1 -0
  101. data/lib/active_admin/page_controller.rb +1 -0
  102. data/lib/active_admin/page_dsl.rb +1 -0
  103. data/lib/active_admin/page_presenter.rb +1 -0
  104. data/lib/active_admin/pundit_adapter.rb +43 -7
  105. data/lib/active_admin/resource/action_items.rb +1 -0
  106. data/lib/active_admin/resource/attributes.rb +1 -0
  107. data/lib/active_admin/resource/belongs_to.rb +1 -0
  108. data/lib/active_admin/resource/controllers.rb +1 -0
  109. data/lib/active_admin/resource/includes.rb +1 -0
  110. data/lib/active_admin/resource/menu.rb +1 -0
  111. data/lib/active_admin/resource/model.rb +1 -0
  112. data/lib/active_admin/resource/naming.rb +1 -0
  113. data/lib/active_admin/resource/ordering.rb +1 -0
  114. data/lib/active_admin/resource/page_presenters.rb +1 -0
  115. data/lib/active_admin/resource/pagination.rb +1 -0
  116. data/lib/active_admin/resource/routes.rb +1 -0
  117. data/lib/active_admin/resource/scope_to.rb +1 -0
  118. data/lib/active_admin/resource/scopes.rb +1 -0
  119. data/lib/active_admin/resource/sidebars.rb +1 -0
  120. data/lib/active_admin/resource.rb +3 -2
  121. data/lib/active_admin/resource_collection.rb +1 -0
  122. data/lib/active_admin/resource_controller/action_builder.rb +1 -0
  123. data/lib/active_admin/resource_controller/data_access.rb +30 -4
  124. data/lib/active_admin/resource_controller/decorators.rb +1 -0
  125. data/lib/active_admin/resource_controller/polymorphic_routes.rb +1 -0
  126. data/lib/active_admin/resource_controller/resource_class_methods.rb +1 -0
  127. data/lib/active_admin/resource_controller/scoping.rb +1 -0
  128. data/lib/active_admin/resource_controller/sidebars.rb +1 -0
  129. data/lib/active_admin/resource_controller/streaming.rb +3 -2
  130. data/lib/active_admin/resource_controller.rb +1 -0
  131. data/lib/active_admin/resource_dsl.rb +7 -21
  132. data/lib/active_admin/router.rb +1 -0
  133. data/lib/active_admin/scope.rb +1 -0
  134. data/lib/active_admin/settings_node.rb +1 -0
  135. data/lib/active_admin/sidebar_section.rb +1 -0
  136. data/lib/active_admin/version.rb +2 -1
  137. data/lib/active_admin/view_factory.rb +1 -0
  138. data/lib/active_admin/view_helpers/active_admin_application_helper.rb +1 -0
  139. data/lib/active_admin/view_helpers/auto_link_helper.rb +1 -0
  140. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +1 -0
  141. data/lib/active_admin/view_helpers/display_helper.rb +11 -3
  142. data/lib/active_admin/view_helpers/download_format_links_helper.rb +1 -0
  143. data/lib/active_admin/view_helpers/fields_for.rb +1 -0
  144. data/lib/active_admin/view_helpers/flash_helper.rb +1 -0
  145. data/lib/active_admin/view_helpers/form_helper.rb +1 -0
  146. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +1 -0
  147. data/lib/active_admin/view_helpers/scope_name_helper.rb +1 -0
  148. data/lib/active_admin/view_helpers/sidebar_helper.rb +1 -0
  149. data/lib/active_admin/view_helpers/title_helper.rb +1 -0
  150. data/lib/active_admin/view_helpers/view_factory_helper.rb +1 -0
  151. data/lib/active_admin/view_helpers.rb +1 -0
  152. data/lib/active_admin/views/action_items.rb +1 -0
  153. data/lib/active_admin/views/components/active_admin_form.rb +2 -1
  154. data/lib/active_admin/views/components/active_filters_sidebar_content.rb +59 -0
  155. data/lib/active_admin/views/components/attributes_table.rb +1 -0
  156. data/lib/active_admin/views/components/blank_slate.rb +1 -0
  157. data/lib/active_admin/views/components/columns.rb +1 -0
  158. data/lib/active_admin/views/components/dropdown_menu.rb +3 -5
  159. data/lib/active_admin/views/components/index_list.rb +1 -0
  160. data/lib/active_admin/views/components/menu.rb +1 -0
  161. data/lib/active_admin/views/components/menu_item.rb +1 -0
  162. data/lib/active_admin/views/components/paginated_collection.rb +1 -0
  163. data/lib/active_admin/views/components/panel.rb +1 -0
  164. data/lib/active_admin/views/components/scopes.rb +1 -0
  165. data/lib/active_admin/views/components/sidebar.rb +1 -0
  166. data/lib/active_admin/views/components/sidebar_section.rb +1 -0
  167. data/lib/active_admin/views/components/site_title.rb +1 -0
  168. data/lib/active_admin/views/components/status_tag.rb +1 -0
  169. data/lib/active_admin/views/components/table_for.rb +1 -0
  170. data/lib/active_admin/views/components/tabs.rb +1 -0
  171. data/lib/active_admin/views/components/unsupported_browser.rb +1 -0
  172. data/lib/active_admin/views/footer.rb +1 -0
  173. data/lib/active_admin/views/header.rb +1 -0
  174. data/lib/active_admin/views/index_as_block.rb +1 -0
  175. data/lib/active_admin/views/index_as_blog.rb +1 -0
  176. data/lib/active_admin/views/index_as_grid.rb +1 -0
  177. data/lib/active_admin/views/index_as_table.rb +1 -0
  178. data/lib/active_admin/views/pages/base.rb +4 -1
  179. data/lib/active_admin/views/pages/form.rb +1 -0
  180. data/lib/active_admin/views/pages/index.rb +1 -0
  181. data/lib/active_admin/views/pages/layout.rb +1 -0
  182. data/lib/active_admin/views/pages/page.rb +1 -0
  183. data/lib/active_admin/views/pages/show.rb +1 -0
  184. data/lib/active_admin/views/tabbed_navigation.rb +1 -0
  185. data/lib/active_admin/views/title_bar.rb +1 -0
  186. data/lib/active_admin/views.rb +1 -0
  187. data/lib/active_admin.rb +2 -1
  188. data/lib/activeadmin.rb +1 -0
  189. data/lib/generators/active_admin/assets/assets_generator.rb +1 -0
  190. data/lib/generators/active_admin/devise/devise_generator.rb +1 -0
  191. data/lib/generators/active_admin/install/install_generator.rb +1 -0
  192. data/lib/generators/active_admin/install/templates/dashboard.rb +1 -0
  193. data/lib/generators/active_admin/page/page_generator.rb +1 -0
  194. data/lib/generators/active_admin/page/templates/page.rb +1 -0
  195. data/lib/generators/active_admin/resource/resource_generator.rb +1 -0
  196. data/lib/generators/active_admin/webpacker/webpacker_generator.rb +1 -0
  197. data/lib/ransack_ext.rb +1 -0
  198. metadata +19 -18
@@ -1,6 +1,8 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  class Engine < ::Rails::Engine
3
- initializer "active_admin.load_app_path" do |app|
4
+ # Set default values for app_path and load_paths before running initializers
5
+ initializer "active_admin.load_app_path", before: :load_config_initializers do |app|
4
6
  ActiveAdmin::Application.setting :app_path, app.root
5
7
  ActiveAdmin::Application.setting :load_paths, [File.expand_path("app/admin", app.root)]
6
8
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  # Exception class to raise when there is an authorized access
3
4
  # exception thrown. The exception has a few goodies that may
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require "active_admin/filters/active_filter"
2
3
 
3
4
  module ActiveAdmin
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  module Filters
3
4
 
@@ -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
- -> do
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
  module DSL
@@ -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
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  module Filters
3
4
  module FormtasticAddons
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  module Filters
3
4
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require "active_admin/filters/dsl"
2
3
  require "active_admin/filters/resource_extension"
3
4
  require "active_admin/filters/formtastic_addons"
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # Provides an intuitive way to build has_many associated records in the same form.
2
3
  module Formtastic
3
4
  module Inputs
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  module Generators
3
4
  class Boilerplate
@@ -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
  module ActiveAdmin
2
3
  module Helpers
3
4
  module I18n
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
 
3
4
  # Shareable module to give a #display_on?(action) method
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  module Helpers
3
4
  module Routes
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  module ScopeChain
3
4
  private
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  module Inputs
3
4
  class DatepickerInput < ::Formtastic::Inputs::StringInput
@@ -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
  #
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  module Inputs
3
4
  module Filters
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  module Inputs
3
4
  module Filters
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  module Inputs
3
4
  module Filters
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  module Inputs
3
4
  module Filters
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  module Inputs
3
4
  module Filters
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  module Inputs
3
4
  module Filters
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  module Inputs
3
4
  module Filters
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  module Inputs
3
4
  module Filters
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  module Inputs
3
4
  module Filters
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  module Inputs
3
4
  extend ActiveSupport::Autoload
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  module Localizers
3
4
  class ResourceLocalizer
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require "active_admin/localizers/resource_localizer"
2
3
 
3
4
  module ActiveAdmin
@@ -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
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
 
3
4
  DEFAULT_MENU = :default
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  class MenuItem
3
4
  include Menu::MenuNode
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require "active_admin/resource_collection"
2
3
 
3
4
  module ActiveAdmin
@@ -71,7 +72,7 @@ module ActiveAdmin
71
72
  reset_menu!
72
73
 
73
74
  # Dispatch a registration event
74
- ActiveSupport::Notifications.publish ActiveAdmin::Resource::RegisterEvent, config
75
+ ActiveSupport::Notifications.instrument ActiveAdmin::Resource::RegisterEvent, 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
@@ -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
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  class Comment < ActiveRecord::Base
3
4
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  module Comments
3
4
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  module Comments
3
4
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  module Comments
3
4
 
@@ -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
 
@@ -1,2 +1,3 @@
1
+ # frozen_string_literal: true
1
2
  require "active_admin/views"
2
3
  require "active_admin/orm/active_record/comments/views/active_admin_comments"
@@ -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"
@@ -1,3 +1,4 @@
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
@@ -1 +1,2 @@
1
+ # frozen_string_literal: true
1
2
  # Mongoid-specific plugins should be required here
@@ -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
  #
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
 
3
4
  # All Pages controllers inherit from this controller.
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  # This is the class where all the register_page blocks are evaluated.
3
4
  class PageDSL < DSL
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
 
3
4
  # A simple object that gets used to present different aspects of views
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  ActiveAdmin::Dependency.pundit!
2
3
 
3
4
  require "pundit"
@@ -30,13 +31,11 @@ module ActiveAdmin
30
31
  end
31
32
 
32
33
  def retrieve_policy(subject)
33
- case subject
34
- when nil then Pundit.policy!(user, namespace(resource))
35
- when Class then Pundit.policy!(user, namespace(subject.new))
36
- else Pundit.policy!(user, namespace(subject))
37
- end
34
+ Pundit.policy!(user, namespace(policy_target(subject)))
38
35
  rescue Pundit::NotDefinedError => e
39
- if default_policy_class
36
+ if (policy = compat_policy(subject))
37
+ policy
38
+ elsif default_policy_class
40
39
  default_policy(user, subject)
41
40
  else
42
41
  raise e
@@ -56,8 +55,41 @@ module ActiveAdmin
56
55
 
57
56
  private
58
57
 
58
+ def policy_target(subject)
59
+ case subject
60
+ when nil then resource
61
+ when Class then subject.new
62
+ else subject
63
+ end
64
+ end
65
+
66
+ # This method is needed to fallback to our previous policy searching logic.
67
+ # I.e.: when class name contains `default_policy_namespace` (eg: ShopAdmin)
68
+ # we should try to search it without namespace. This is because that's
69
+ # the only thing that worked in this case before we fixed our buggy namespace
70
+ # detection, so people are probably relying on it.
71
+ # This fallback might be removed in future versions of ActiveAdmin, so
72
+ # pundit_adapter search will work consistently with provided namespaces
73
+ def compat_policy(subject)
74
+ target = policy_target(subject)
75
+
76
+ return unless default_policy_namespace &&
77
+ target.class.to_s.include?(default_policy_module) &&
78
+ (policy = Pundit.policy(user, 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.include?(default_policy_namespace.to_s.camelize)
92
+ if default_policy_namespace && !object.class.to_s.match?(/^#{default_policy_module}::/)
61
93
  [default_policy_namespace.to_sym, object]
62
94
  else
63
95
  object
@@ -76,6 +108,10 @@ 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
+
79
115
  end
80
116
 
81
117
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require "active_admin/helpers/optional_display"
2
3
 
3
4
  module ActiveAdmin
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
 
3
4
  class Resource
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require "active_admin/resource"
2
3
 
3
4
  module ActiveAdmin
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  class Resource
3
4
  module Controllers
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  class Resource
3
4
  module Includes
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  class Resource
3
4
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  class Model
3
4
  def initialize(resource, record)
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  class Resource
3
4
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  class Resource
3
4
  module Ordering
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  class Resource
3
4
  module PagePresenters
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
 
3
4
  class Resource
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  class Resource
3
4
  module Routes
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  class Resource
3
4
  module ScopeTo
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  class Resource
3
4
  module Scopes
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require "active_admin/helpers/optional_display"
2
3
 
3
4
  module ActiveAdmin
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require "active_admin/resource/action_items"
2
3
  require "active_admin/resource/attributes"
3
4
  require "active_admin/resource/controllers"
@@ -98,11 +99,11 @@ module ActiveAdmin
98
99
  # The class this resource wraps. If you register the Post model, Resource#resource_class
99
100
  # will point to the Post class
100
101
  def resource_class
101
- ActiveSupport::Dependencies.constantize(resource_class_name)
102
+ resource_class_name.constantize
102
103
  end
103
104
 
104
105
  def decorator_class
105
- ActiveSupport::Dependencies.constantize(decorator_class_name) if decorator_class_name
106
+ decorator_class_name&.constantize
106
107
  end
107
108
 
108
109
  def resource_name_extension
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  # This is a container for resources, which acts much like a Hash.
3
4
  # It's assumed that an added resource responds to `resource_name`.
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  class ResourceController < BaseController
3
4
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  class ResourceController < BaseController
3
4
 
@@ -23,9 +24,9 @@ module ActiveAdmin
23
24
 
24
25
  COLLECTION_APPLIES = [
25
26
  :authorization_scope,
26
- :sorting,
27
27
  :filtering,
28
28
  :scoping,
29
+ :sorting,
29
30
  :includes,
30
31
  :pagination,
31
32
  :collection_decorator
@@ -128,7 +129,7 @@ module ActiveAdmin
128
129
  #
129
130
  # @return [ActiveRecord::Base] An un-saved active record base object
130
131
  def build_new_resource
131
- scoped_collection.send(
132
+ apply_authorization_scope(scoped_collection).send(
132
133
  method_for_build,
133
134
  *resource_params.map { |params| params.slice(active_admin_config.resource_class.inheritance_column) }
134
135
  )
@@ -249,12 +250,13 @@ module ActiveAdmin
249
250
  end
250
251
 
251
252
  def apply_pagination(chain)
253
+ # skip pagination if CSV format was requested
254
+ return chain if params["format"] == "csv"
252
255
  # skip pagination if already was paginated by scope
253
256
  return chain if chain.respond_to?(:total_pages)
254
- page_method_name = Kaminari.config.page_method_name
255
257
  page = params[Kaminari.config.param_name]
256
258
 
257
- chain.public_send(page_method_name, page).per(per_page)
259
+ paginate(chain, page, per_page)
258
260
  end
259
261
 
260
262
  def collection_applies(options = {})
@@ -264,6 +266,16 @@ module ActiveAdmin
264
266
  COLLECTION_APPLIES & only - except
265
267
  end
266
268
 
269
+ def in_paginated_batches(&block)
270
+ ActiveRecord::Base.uncached do
271
+ (1..paginated_collection.total_pages).each do |page|
272
+ paginated_collection(page).each do |resource|
273
+ yield apply_decorator(resource)
274
+ end
275
+ end
276
+ end
277
+ end
278
+
267
279
  def per_page
268
280
  if active_admin_config.paginate
269
281
  dynamic_per_page || configured_per_page
@@ -317,6 +329,20 @@ module ActiveAdmin
317
329
  def create_another?
318
330
  params[:create_another].present?
319
331
  end
332
+
333
+ def paginated_collection(page_no = 1)
334
+ paginate(collection, page_no, batch_size)
335
+ end
336
+
337
+ def paginate(chain, page, per_page)
338
+ page_method_name = Kaminari.config.page_method_name
339
+
340
+ chain.public_send(page_method_name, page).per(per_page)
341
+ end
342
+
343
+ def batch_size
344
+ 1000
345
+ end
320
346
  end
321
347
  end
322
348
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  class ResourceController < BaseController
3
4
  module Decorators