activeadmin 2.6.1 → 2.12.0

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.

Files changed (229) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +262 -9
  3. data/CONTRIBUTING.md +8 -24
  4. data/README.md +4 -4
  5. data/app/assets/javascripts/active_admin/base.js +27 -22
  6. data/app/assets/stylesheets/active_admin/_base.scss +53 -37
  7. data/app/assets/stylesheets/active_admin/_forms.scss +0 -10
  8. data/app/assets/stylesheets/active_admin/_header.scss +37 -3
  9. data/app/assets/stylesheets/active_admin/_normalize.scss +25 -123
  10. data/app/assets/stylesheets/active_admin/components/_comments.scss +2 -2
  11. data/app/assets/stylesheets/active_admin/components/_date_picker.scss +1 -2
  12. data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +0 -1
  13. data/app/assets/stylesheets/active_admin/mixins/_variables.scss +12 -0
  14. data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +0 -1
  15. data/app/javascript/active_admin/initializers/has-many.js +4 -1
  16. data/app/javascript/active_admin/initializers/per-page.js +1 -1
  17. data/app/javascript/active_admin/lib/checkbox-toggler.js +3 -3
  18. data/app/javascript/active_admin/lib/dropdown-menu.js +1 -1
  19. data/app/javascript/active_admin/lib/modal-dialog.js +7 -7
  20. data/app/javascript/active_admin/lib/per-page.js +1 -1
  21. data/app/javascript/active_admin/lib/table-checkbox-toggler.js +1 -1
  22. data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +1 -1
  23. data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +2 -2
  24. data/app/views/active_admin/devise/shared/_links.erb +1 -1
  25. data/app/views/active_admin/page/index.html.arb +1 -0
  26. data/app/views/active_admin/resource/edit.html.arb +1 -0
  27. data/app/views/active_admin/resource/index.html.arb +1 -0
  28. data/app/views/active_admin/resource/new.html.arb +1 -0
  29. data/app/views/active_admin/resource/show.html.arb +1 -0
  30. data/app/views/layouts/active_admin.html.arb +1 -0
  31. data/app/views/layouts/active_admin_logged_out.html.erb +15 -5
  32. data/config/locales/ar.yml +6 -6
  33. data/config/locales/es-MX.yml +2 -1
  34. data/config/locales/es.yml +2 -2
  35. data/config/locales/it.yml +18 -0
  36. data/config/locales/ja.yml +3 -3
  37. data/config/locales/ko.yml +1 -1
  38. data/config/locales/nl.yml +1 -1
  39. data/config/locales/ro.yml +3 -2
  40. data/config/locales/vi.yml +5 -5
  41. data/docs/0-installation.md +27 -3
  42. data/docs/11-decorators.md +16 -5
  43. data/docs/2-resource-customization.md +10 -1
  44. data/docs/5-forms.md +7 -2
  45. data/docs/6-show-pages.md +12 -0
  46. data/docs/8-custom-actions.md +1 -1
  47. data/docs/Gemfile +3 -2
  48. data/docs/Gemfile.lock +138 -103
  49. data/docs/_includes/top-menu.html +1 -1
  50. data/docs/documentation.md +1 -1
  51. data/docs/index.html +6 -6
  52. data/lib/active_admin/abstract_view_factory.rb +1 -0
  53. data/lib/active_admin/application.rb +19 -19
  54. data/lib/active_admin/application_settings.rb +4 -3
  55. data/lib/active_admin/asset_registration.rb +1 -0
  56. data/lib/active_admin/authorization_adapter.rb +4 -3
  57. data/lib/active_admin/base_controller/authorization.rb +15 -13
  58. data/lib/active_admin/base_controller/menu.rb +1 -0
  59. data/lib/active_admin/base_controller.rb +6 -5
  60. data/lib/active_admin/batch_actions/controller.rb +4 -3
  61. data/lib/active_admin/batch_actions/resource_extension.rb +10 -8
  62. data/lib/active_admin/batch_actions/views/batch_action_form.rb +4 -3
  63. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +7 -6
  64. data/lib/active_admin/batch_actions/views/selection_cells.rb +4 -3
  65. data/lib/active_admin/batch_actions.rb +1 -0
  66. data/lib/active_admin/callbacks.rb +1 -0
  67. data/lib/active_admin/cancan_adapter.rb +2 -1
  68. data/lib/active_admin/collection_decorator.rb +32 -0
  69. data/lib/active_admin/component.rb +1 -0
  70. data/lib/active_admin/controller_action.rb +1 -0
  71. data/lib/active_admin/csv_builder.rb +6 -19
  72. data/lib/active_admin/dependency.rb +13 -12
  73. data/lib/active_admin/deprecation.rb +1 -0
  74. data/lib/active_admin/devise.rb +16 -5
  75. data/lib/active_admin/dsl.rb +2 -1
  76. data/lib/active_admin/dynamic_setting.rb +1 -0
  77. data/lib/active_admin/dynamic_settings_node.rb +3 -2
  78. data/lib/active_admin/engine.rb +13 -9
  79. data/lib/active_admin/error.rb +1 -2
  80. data/lib/active_admin/filters/active.rb +2 -1
  81. data/lib/active_admin/filters/active_filter.rb +6 -6
  82. data/lib/active_admin/filters/active_sidebar.rb +4 -30
  83. data/lib/active_admin/filters/dsl.rb +1 -0
  84. data/lib/active_admin/filters/forms.rb +7 -6
  85. data/lib/active_admin/filters/formtastic_addons.rb +2 -6
  86. data/lib/active_admin/filters/resource_extension.rb +2 -1
  87. data/lib/active_admin/filters.rb +8 -7
  88. data/lib/active_admin/form_builder.rb +25 -20
  89. data/lib/active_admin/generators/boilerplate.rb +2 -1
  90. data/lib/active_admin/helpers/collection.rb +2 -0
  91. data/lib/active_admin/helpers/i18n.rb +1 -0
  92. data/lib/active_admin/helpers/optional_display.rb +3 -2
  93. data/lib/active_admin/helpers/routes/url_helpers.rb +1 -0
  94. data/lib/active_admin/helpers/scope_chain.rb +1 -0
  95. data/lib/active_admin/inputs/datepicker_input.rb +2 -1
  96. data/lib/active_admin/inputs/filters/base/search_method_select.rb +5 -4
  97. data/lib/active_admin/inputs/filters/base.rb +2 -1
  98. data/lib/active_admin/inputs/filters/boolean_input.rb +2 -1
  99. data/lib/active_admin/inputs/filters/check_boxes_input.rb +2 -1
  100. data/lib/active_admin/inputs/filters/date_picker_input.rb +1 -0
  101. data/lib/active_admin/inputs/filters/date_range_input.rb +1 -0
  102. data/lib/active_admin/inputs/filters/numeric_input.rb +1 -0
  103. data/lib/active_admin/inputs/filters/select_input.rb +3 -2
  104. data/lib/active_admin/inputs/filters/string_input.rb +1 -0
  105. data/lib/active_admin/inputs/filters/text_input.rb +1 -0
  106. data/lib/active_admin/inputs.rb +1 -0
  107. data/lib/active_admin/localizers/resource_localizer.rb +4 -3
  108. data/lib/active_admin/localizers.rb +2 -1
  109. data/lib/active_admin/menu.rb +7 -3
  110. data/lib/active_admin/menu_collection.rb +1 -0
  111. data/lib/active_admin/menu_item.rb +8 -7
  112. data/lib/active_admin/namespace.rb +14 -13
  113. data/lib/active_admin/namespace_settings.rb +9 -5
  114. data/lib/active_admin/order_clause.rb +2 -1
  115. data/lib/active_admin/orm/active_record/comments/comment.rb +4 -3
  116. data/lib/active_admin/orm/active_record/comments/namespace_helper.rb +1 -0
  117. data/lib/active_admin/orm/active_record/comments/resource_helper.rb +1 -0
  118. data/lib/active_admin/orm/active_record/comments/show_page_helper.rb +1 -0
  119. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +20 -19
  120. data/lib/active_admin/orm/active_record/comments/views.rb +3 -2
  121. data/lib/active_admin/orm/active_record/comments.rb +20 -19
  122. data/lib/active_admin/orm/active_record.rb +2 -1
  123. data/lib/active_admin/orm/mongoid.rb +1 -0
  124. data/lib/active_admin/page.rb +2 -1
  125. data/lib/active_admin/page_controller.rb +1 -0
  126. data/lib/active_admin/page_dsl.rb +1 -0
  127. data/lib/active_admin/page_presenter.rb +1 -0
  128. data/lib/active_admin/pundit_adapter.rb +47 -11
  129. data/lib/active_admin/resource/action_items.rb +6 -5
  130. data/lib/active_admin/resource/attributes.rb +2 -1
  131. data/lib/active_admin/resource/belongs_to.rb +3 -2
  132. data/lib/active_admin/resource/controllers.rb +2 -1
  133. data/lib/active_admin/resource/includes.rb +1 -0
  134. data/lib/active_admin/resource/menu.rb +5 -4
  135. data/lib/active_admin/resource/model.rb +1 -0
  136. data/lib/active_admin/resource/naming.rb +5 -4
  137. data/lib/active_admin/resource/ordering.rb +1 -0
  138. data/lib/active_admin/resource/page_presenters.rb +1 -0
  139. data/lib/active_admin/resource/pagination.rb +1 -0
  140. data/lib/active_admin/resource/routes.rb +6 -7
  141. data/lib/active_admin/resource/scope_to.rb +8 -7
  142. data/lib/active_admin/resource/scopes.rb +1 -0
  143. data/lib/active_admin/resource/sidebars.rb +2 -1
  144. data/lib/active_admin/resource.rb +20 -19
  145. data/lib/active_admin/resource_collection.rb +1 -0
  146. data/lib/active_admin/resource_controller/action_builder.rb +1 -0
  147. data/lib/active_admin/resource_controller/data_access.rb +31 -5
  148. data/lib/active_admin/resource_controller/decorators.rb +7 -28
  149. data/lib/active_admin/resource_controller/polymorphic_routes.rb +1 -0
  150. data/lib/active_admin/resource_controller/resource_class_methods.rb +1 -0
  151. data/lib/active_admin/resource_controller/scoping.rb +1 -0
  152. data/lib/active_admin/resource_controller/sidebars.rb +1 -0
  153. data/lib/active_admin/resource_controller/streaming.rb +9 -7
  154. data/lib/active_admin/resource_controller.rb +13 -11
  155. data/lib/active_admin/resource_dsl.rb +11 -25
  156. data/lib/active_admin/router.rb +1 -0
  157. data/lib/active_admin/scope.rb +7 -6
  158. data/lib/active_admin/settings_node.rb +1 -0
  159. data/lib/active_admin/sidebar_section.rb +1 -0
  160. data/lib/active_admin/version.rb +2 -1
  161. data/lib/active_admin/view_factory.rb +18 -17
  162. data/lib/active_admin/view_helpers/active_admin_application_helper.rb +1 -0
  163. data/lib/active_admin/view_helpers/auto_link_helper.rb +1 -0
  164. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +4 -3
  165. data/lib/active_admin/view_helpers/display_helper.rb +15 -7
  166. data/lib/active_admin/view_helpers/download_format_links_helper.rb +2 -1
  167. data/lib/active_admin/view_helpers/fields_for.rb +3 -2
  168. data/lib/active_admin/view_helpers/flash_helper.rb +1 -0
  169. data/lib/active_admin/view_helpers/form_helper.rb +1 -0
  170. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +1 -0
  171. data/lib/active_admin/view_helpers/scope_name_helper.rb +1 -0
  172. data/lib/active_admin/view_helpers/sidebar_helper.rb +1 -0
  173. data/lib/active_admin/view_helpers/title_helper.rb +1 -0
  174. data/lib/active_admin/view_helpers/view_factory_helper.rb +1 -0
  175. data/lib/active_admin/view_helpers.rb +2 -1
  176. data/lib/active_admin/views/action_items.rb +1 -0
  177. data/lib/active_admin/views/components/active_admin_form.rb +7 -6
  178. data/lib/active_admin/views/components/active_filters_sidebar_content.rb +59 -0
  179. data/lib/active_admin/views/components/attributes_table.rb +6 -5
  180. data/lib/active_admin/views/components/blank_slate.rb +2 -1
  181. data/lib/active_admin/views/components/columns.rb +1 -0
  182. data/lib/active_admin/views/components/dropdown_menu.rb +7 -9
  183. data/lib/active_admin/views/components/index_list.rb +4 -3
  184. data/lib/active_admin/views/components/menu.rb +2 -1
  185. data/lib/active_admin/views/components/menu_item.rb +5 -4
  186. data/lib/active_admin/views/components/paginated_collection.rb +19 -18
  187. data/lib/active_admin/views/components/panel.rb +2 -1
  188. data/lib/active_admin/views/components/scopes.rb +8 -5
  189. data/lib/active_admin/views/components/sidebar.rb +1 -0
  190. data/lib/active_admin/views/components/sidebar_section.rb +1 -0
  191. data/lib/active_admin/views/components/site_title.rb +2 -1
  192. data/lib/active_admin/views/components/status_tag.rb +12 -11
  193. data/lib/active_admin/views/components/table_for.rb +18 -17
  194. data/lib/active_admin/views/components/tabs.rb +4 -3
  195. data/lib/active_admin/views/components/unsupported_browser.rb +1 -0
  196. data/lib/active_admin/views/footer.rb +3 -1
  197. data/lib/active_admin/views/header.rb +3 -2
  198. data/lib/active_admin/views/index_as_block.rb +1 -0
  199. data/lib/active_admin/views/index_as_blog.rb +2 -1
  200. data/lib/active_admin/views/index_as_grid.rb +2 -1
  201. data/lib/active_admin/views/index_as_table.rb +17 -16
  202. data/lib/active_admin/views/pages/base.rb +14 -9
  203. data/lib/active_admin/views/pages/form.rb +1 -0
  204. data/lib/active_admin/views/pages/index.rb +15 -13
  205. data/lib/active_admin/views/pages/layout.rb +1 -0
  206. data/lib/active_admin/views/pages/page.rb +1 -0
  207. data/lib/active_admin/views/pages/show.rb +1 -0
  208. data/lib/active_admin/views/tabbed_navigation.rb +3 -2
  209. data/lib/active_admin/views/title_bar.rb +2 -1
  210. data/lib/active_admin/views.rb +2 -1
  211. data/lib/active_admin.rb +61 -61
  212. data/lib/activeadmin.rb +2 -1
  213. data/lib/generators/active_admin/assets/assets_generator.rb +3 -2
  214. data/lib/generators/active_admin/assets/templates/active_admin.scss +2 -2
  215. data/lib/generators/active_admin/devise/devise_generator.rb +6 -5
  216. data/lib/generators/active_admin/install/install_generator.rb +15 -8
  217. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +9 -2
  218. data/lib/generators/active_admin/install/templates/dashboard.rb +1 -0
  219. data/lib/generators/active_admin/page/page_generator.rb +2 -1
  220. data/lib/generators/active_admin/page/templates/page.rb +1 -0
  221. data/lib/generators/active_admin/resource/resource_generator.rb +4 -3
  222. data/lib/generators/active_admin/webpacker/plugins/jquery.js +7 -0
  223. data/lib/generators/active_admin/webpacker/templates/active_admin.js +5 -0
  224. data/lib/generators/active_admin/webpacker/templates/active_admin.scss +17 -0
  225. data/lib/generators/active_admin/webpacker/templates/print.scss +2 -0
  226. data/lib/generators/active_admin/webpacker/webpacker_generator.rb +27 -0
  227. data/lib/ransack_ext.rb +9 -8
  228. metadata +32 -53
  229. /data/app/assets/stylesheets/active_admin/{print.scss → _print.scss} +0 -0
@@ -1,12 +1,12 @@
1
- require 'active_admin/base_controller/authorization'
2
- require 'active_admin/base_controller/menu'
1
+ # frozen_string_literal: true
2
+ require "active_admin/base_controller/authorization"
3
+ require "active_admin/base_controller/menu"
3
4
 
4
5
  module ActiveAdmin
5
6
  # BaseController for ActiveAdmin.
6
7
  # It implements ActiveAdmin controllers core features.
7
8
  class BaseController < ::InheritedResources::Base
8
9
  helper ::ActiveAdmin::ViewHelpers
9
- helper_method :env
10
10
 
11
11
  layout :determine_active_admin_layout
12
12
 
@@ -69,13 +69,14 @@ module ActiveAdmin
69
69
  # 2. If we're rendering a custom action, we'll use the active_admin layout so
70
70
  # that users can render any template inside Active Admin.
71
71
  def determine_active_admin_layout
72
- ACTIVE_ADMIN_ACTIONS.include?(params[:action].to_sym) ? false : 'active_admin'
72
+ ACTIVE_ADMIN_ACTIONS.include?(params[:action].to_sym) ? false : "active_admin"
73
73
  end
74
74
 
75
75
  def active_admin_root
76
- controller, action = active_admin_namespace.root_to.split '#'
76
+ controller, action = active_admin_namespace.root_to.split "#"
77
77
  { controller: controller, action: action }
78
78
  end
79
79
 
80
+ ActiveSupport.run_load_hooks(:active_admin_controller, self)
80
81
  end
81
82
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  module BatchActions
3
4
  module Controller
@@ -5,10 +6,10 @@ module ActiveAdmin
5
6
  # Controller action that is called when submitting the batch action form
6
7
  def batch_action
7
8
  if action_present?
8
- selection = params[:collection_selection] || []
9
- inputs = JSON.parse params[:batch_action_inputs] || '{}'
9
+ selection = params[:collection_selection] || []
10
+ inputs = JSON.parse params[:batch_action_inputs] || "{}"
10
11
  valid_keys = MethodOrProcHelper.render_in_context(self, current_batch_action.inputs).try(:keys)
11
- inputs = inputs.with_indifferent_access.slice *valid_keys
12
+ inputs = inputs.with_indifferent_access.slice *valid_keys
12
13
  instance_exec selection, inputs, &current_batch_action.block
13
14
  else
14
15
  raise "Couldn't find batch action \"#{params[:batch_action]}\""
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
 
3
4
  module BatchActions
@@ -57,21 +58,22 @@ module ActiveAdmin
57
58
  def add_default_batch_action
58
59
  destroy_options = {
59
60
  priority: 100,
60
- confirm: proc { I18n.t('active_admin.batch_actions.delete_confirmation', plural_model: active_admin_config.plural_resource_label.downcase) },
61
- if: proc { controller.action_methods.include?('destroy') && authorized?(ActiveAdmin::Auth::DESTROY, active_admin_config.resource_class) }
61
+ confirm: proc { I18n.t("active_admin.batch_actions.delete_confirmation", plural_model: active_admin_config.plural_resource_label.downcase) },
62
+ if: proc { controller.action_methods.include?("destroy") && authorized?(ActiveAdmin::Auth::DESTROY, active_admin_config.resource_class) }
62
63
  }
63
64
 
64
- add_batch_action :destroy, proc { I18n.t('active_admin.delete') }, destroy_options do |selected_ids|
65
+ add_batch_action :destroy, proc { I18n.t("active_admin.delete") }, destroy_options do |selected_ids|
65
66
  batch_action_collection.find(selected_ids).each do |record|
66
67
  authorize! ActiveAdmin::Auth::DESTROY, record
67
68
  destroy_resource(record)
68
69
  end
69
70
 
70
71
  redirect_to active_admin_config.route_collection_path(params),
71
- notice: I18n.t("active_admin.batch_actions.succesfully_destroyed",
72
- count: selected_ids.count,
73
- model: active_admin_config.resource_label.downcase,
74
- plural_model: active_admin_config.plural_resource_label(count: selected_ids.count).downcase)
72
+ notice: I18n.t(
73
+ "active_admin.batch_actions.succesfully_destroyed",
74
+ count: selected_ids.count,
75
+ model: active_admin_config.resource_label.downcase,
76
+ plural_model: active_admin_config.plural_resource_label(count: selected_ids.count).downcase)
75
77
  end
76
78
  end
77
79
 
@@ -84,7 +86,7 @@ module ActiveAdmin
84
86
 
85
87
  attr_reader :block, :title, :sym
86
88
 
87
- DEFAULT_CONFIRM_MESSAGE = proc { I18n.t 'active_admin.batch_actions.default_confirmation' }
89
+ DEFAULT_CONFIRM_MESSAGE = proc { I18n.t "active_admin.batch_actions.default_confirmation" }
88
90
 
89
91
  # Create a Batch Action
90
92
  #
@@ -1,4 +1,5 @@
1
- require 'active_admin/component'
1
+ # frozen_string_literal: true
2
+ require "active_admin/component"
2
3
 
3
4
  module ActiveAdmin
4
5
  module BatchActions
@@ -16,7 +17,7 @@ module ActiveAdmin
16
17
  # batch_action => name of the specific action called
17
18
  # batch_action_inputs => a JSON string of any requested confirmation values
18
19
  text_node form_tag active_admin_config.route_batch_action_path(params, url_options), id: options[:id]
19
- input name: :batch_action, id: :batch_action, type: :hidden
20
+ input name: :batch_action, id: :batch_action, type: :hidden
20
21
  input name: :batch_action_inputs, id: :batch_action_inputs, type: :hidden
21
22
 
22
23
  super(options)
@@ -30,7 +31,7 @@ module ActiveAdmin
30
31
  private
31
32
 
32
33
  def closing_form_tag
33
- '</form>'.html_safe
34
+ "</form>".html_safe
34
35
  end
35
36
 
36
37
  end
@@ -1,4 +1,5 @@
1
- require 'active_admin/component'
1
+ # frozen_string_literal: true
2
+ require "active_admin/component"
2
3
 
3
4
  module ActiveAdmin
4
5
  module BatchActions
@@ -31,17 +32,17 @@ module ActiveAdmin
31
32
  confirmation_text = render_or_call_method_or_proc_on(self, batch_action.confirm)
32
33
 
33
34
  options = {
34
- :class => "batch_action",
35
- "data-action" => batch_action.sym,
36
- "data-confirm" => confirmation_text,
37
- "data-inputs" => render_in_context(self, batch_action.inputs).to_json
35
+ class: "batch_action",
36
+ "data-action": batch_action.sym,
37
+ "data-confirm": confirmation_text,
38
+ "data-inputs": render_in_context(self, batch_action.inputs).to_json
38
39
  }
39
40
 
40
41
  default_title = render_or_call_method_or_proc_on(self, batch_action.title)
41
42
  title = I18n.t("active_admin.batch_actions.labels.#{batch_action.sym}", default: default_title)
42
43
  label = I18n.t("active_admin.batch_actions.action_label", title: title)
43
44
 
44
- item label, "#", options
45
+ item label, "#", **options
45
46
  end
46
47
  end
47
48
  end
@@ -1,4 +1,5 @@
1
- require 'active_admin/component'
1
+ # frozen_string_literal: true
2
+ require "active_admin/component"
2
3
 
3
4
  module ActiveAdmin
4
5
  module BatchActions
@@ -7,7 +8,7 @@ module ActiveAdmin
7
8
  class ResourceSelectionToggleCell < ActiveAdmin::Component
8
9
  builder_method :resource_selection_toggle_cell
9
10
 
10
- def build(label_text = '')
11
+ def build(label_text = "")
11
12
  label do
12
13
  input type: "checkbox", id: "collection_selection_toggle_all", name: "collection_selection_toggle_all", class: "toggle_all"
13
14
  text_node label_text if label_text.present?
@@ -30,7 +31,7 @@ module ActiveAdmin
30
31
 
31
32
  def build
32
33
  super(id: "collection_selection_toggle_panel")
33
- resource_selection_toggle_cell(I18n.t('active_admin.batch_actions.selection_toggle_explanation', default: "(Toggle Selection)"))
34
+ resource_selection_toggle_cell(I18n.t("active_admin.batch_actions.selection_toggle_explanation", default: "(Toggle Selection)"))
34
35
  end
35
36
  end
36
37
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  ActiveAdmin.before_load do |app|
2
3
  require "active_admin/batch_actions/resource_extension"
3
4
  require "active_admin/batch_actions/controller"
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  module Callbacks
3
4
  extend ActiveSupport::Concern
@@ -1,8 +1,9 @@
1
+ # frozen_string_literal: true
1
2
  unless ActiveAdmin::Dependency.cancan? || ActiveAdmin::Dependency.cancancan?
2
3
  ActiveAdmin::Dependency.cancan!
3
4
  end
4
5
 
5
- require 'cancan'
6
+ require "cancan"
6
7
 
7
8
  # Add a setting to the application to configure the ability
8
9
  ActiveAdmin::Application.inheritable_setting :cancan_ability_class, "Ability"
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+ module ActiveAdmin
3
+ # This class decorates a collection of objects delegating
4
+ # mehods to behave like an Array. It's used to decouple ActiveAdmin
5
+ # from Draper and thus being able to use PORO decorators as well.
6
+ #
7
+ # It's implementation is heavily based on the Draper::CollectionDecorator
8
+ # https://github.com/drapergem/draper/blob/aaa06bd2f1e219838b241a5534e7ca513edd1fe2/lib/draper/collection_decorator.rb
9
+ class CollectionDecorator
10
+ # @return the collection being decorated.
11
+ attr_reader :object
12
+
13
+ # @return [Class] the decorator class used to decorate each item, as set by {#initialize}.
14
+ attr_reader :decorator_class
15
+
16
+ array_methods = Array.instance_methods - Object.instance_methods
17
+ delegate :==, :as_json, *array_methods, to: :decorated_collection
18
+
19
+ def initialize(object, with:)
20
+ @object = object
21
+ @decorator_class = with
22
+ end
23
+
24
+ class << self
25
+ alias_method :decorate, :new
26
+ end
27
+
28
+ def decorated_collection
29
+ @decorated_collection ||= object.map { |item| decorator_class.new(item) }
30
+ end
31
+ end
32
+ end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  class Component < Arbre::Component
3
4
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  class ControllerAction
3
4
  attr_reader :name
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  # CSVBuilder stores CSV configuration
3
4
  #
@@ -42,11 +43,10 @@ module ActiveAdmin
42
43
  end
43
44
 
44
45
  def build(controller, csv)
45
- @collection = controller.send :find_collection, except: :pagination
46
- columns = exec_columns controller.view_context
47
- bom = options.delete :byte_order_mark
46
+ columns = exec_columns controller.view_context
47
+ bom = options[:byte_order_mark]
48
48
  column_names = options.delete(:column_names) { true }
49
- csv_options = options.except :encoding_options, :humanize_name
49
+ csv_options = options.except :encoding_options, :humanize_name, :byte_order_mark
50
50
 
51
51
  csv << bom if bom
52
52
 
@@ -54,13 +54,8 @@ module ActiveAdmin
54
54
  csv << CSV.generate_line(columns.map { |c| encode c.name, options }, **csv_options)
55
55
  end
56
56
 
57
- ActiveRecord::Base.uncached do
58
- (1..paginated_collection.total_pages).each do |page|
59
- paginated_collection(page).each do |resource|
60
- resource = controller.send :apply_decorator, resource
61
- csv << CSV.generate_line(build_row(resource, columns, options), **csv_options)
62
- end
63
- end
57
+ controller.send(:in_paginated_batches) do |resource|
58
+ csv << CSV.generate_line(build_row(resource, columns, options), **csv_options)
64
59
  end
65
60
 
66
61
  csv
@@ -124,13 +119,5 @@ module ActiveAdmin
124
119
  def column_transitive_options
125
120
  @column_transitive_options ||= @options.slice(*COLUMN_TRANSITIVE_OPTIONS)
126
121
  end
127
-
128
- def paginated_collection(page_no = 1)
129
- @collection.public_send(Kaminari.config.page_method_name, page_no).per(batch_size)
130
- end
131
-
132
- def batch_size
133
- 1000
134
- end
135
122
  end
136
123
  end
@@ -1,27 +1,28 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  module Dependency
3
4
  module Requirements
4
- DEVISE = '>= 4.0', '< 5'
5
+ DEVISE = ">= 4.0", "< 5"
5
6
  end
6
7
 
7
8
  # Provides a clean interface to check for gem dependencies at runtime.
8
9
  #
9
- # ActiveAdmin::Dependency.draper
10
- # => #<ActiveAdmin::Dependency::Matcher for draper 1.2.1>
10
+ # ActiveAdmin::Dependency.rails
11
+ # => #<ActiveAdmin::Dependency::Matcher for rails 6.0.3.2>
11
12
  #
12
- # ActiveAdmin::Dependency.draper?
13
+ # ActiveAdmin::Dependency.rails?
13
14
  # => true
14
15
  #
15
- # ActiveAdmin::Dependency.draper? '>= 1.5.0'
16
+ # ActiveAdmin::Dependency.rails? '>= 6.1'
16
17
  # => false
17
18
  #
18
- # ActiveAdmin::Dependency.draper? '= 1.2.1'
19
+ # ActiveAdmin::Dependency.rails? '= 6.0.3.2'
19
20
  # => true
20
21
  #
21
- # ActiveAdmin::Dependency.draper? '~> 1.2.0'
22
+ # ActiveAdmin::Dependency.rails? '~> 6.0.3'
22
23
  # => true
23
24
  #
24
- # ActiveAdmin::Dependency.rails? '>= 4.2.7', '<= 5.0.2'
25
+ # ActiveAdmin::Dependency.rails? '>= 6.0.3', '<= 6.1.0'
25
26
  # => true
26
27
  #
27
28
  # ActiveAdmin::Dependency.rails! '5'
@@ -42,9 +43,9 @@ module ActiveAdmin
42
43
  # => false
43
44
  #
44
45
  def self.method_missing(name, *args)
45
- if name[-1] == '?'
46
+ if name[-1] == "?"
46
47
  Matcher.new(name[0..-2]).match? args
47
- elsif name[-1] == '!'
48
+ elsif name[-1] == "!"
48
49
  Matcher.new(name[0..-2]).match! args
49
50
  else
50
51
  Matcher.new name.to_s
@@ -56,7 +57,7 @@ module ActiveAdmin
56
57
  end
57
58
 
58
59
  def self.supports_zeitwerk?
59
- rails >= "6.0.0.beta3" && RUBY_ENGINE != "jruby"
60
+ RUBY_ENGINE != "jruby"
60
61
  end
61
62
 
62
63
  class Matcher
@@ -91,7 +92,7 @@ module ActiveAdmin
91
92
  end
92
93
 
93
94
  def inspect
94
- info = spec ? "#{spec.name} #{spec.version}" : '(missing)'
95
+ info = spec ? "#{spec.name} #{spec.version}" : "(missing)"
95
96
  "<ActiveAdmin::Dependency::Matcher for #{info}>"
96
97
  end
97
98
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  module Deprecation
3
4
  module_function
@@ -1,6 +1,7 @@
1
+ # frozen_string_literal: true
1
2
  ActiveAdmin::Dependency.devise! ActiveAdmin::Dependency::Requirements::DEVISE
2
3
 
3
- require 'devise'
4
+ require "devise"
4
5
 
5
6
  module ActiveAdmin
6
7
  module Devise
@@ -9,7 +10,7 @@ module ActiveAdmin
9
10
  {
10
11
  path: ActiveAdmin.application.default_namespace || "/",
11
12
  controllers: ActiveAdmin::Devise.controllers,
12
- path_names: { sign_in: 'login', sign_out: "logout" },
13
+ path_names: { sign_in: "login", sign_out: "logout" },
13
14
  sign_out_via: [*::Devise.sign_out_via, ActiveAdmin.application.logout_link_method].uniq
14
15
  }
15
16
  end
@@ -27,14 +28,14 @@ module ActiveAdmin
27
28
  module Controller
28
29
  extend ::ActiveSupport::Concern
29
30
  included do
30
- layout 'active_admin_logged_out'
31
+ layout "active_admin_logged_out"
31
32
  helper ::ActiveAdmin::ViewHelpers
32
33
  end
33
34
 
34
35
  # Redirect to the default namespace on logout
35
36
  def root_path
36
37
  namespace = ActiveAdmin.application.default_namespace.presence
37
- root_path_method = [namespace, :root_path].compact.join('_')
38
+ root_path_method = [namespace, :root_path].compact.join("_")
38
39
 
39
40
  path = if Helpers::Routes.respond_to? root_path_method
40
41
  Helpers::Routes.send root_path_method
@@ -45,29 +46,39 @@ module ActiveAdmin
45
46
 
46
47
  # NOTE: `relative_url_root` is deprecated by Rails.
47
48
  # Remove prefix here if it is removed completely.
48
- prefix = Rails.configuration.action_controller[:relative_url_root] || ''
49
+ prefix = Rails.configuration.action_controller[:relative_url_root] || ""
49
50
  prefix + path
50
51
  end
51
52
  end
52
53
 
53
54
  class SessionsController < ::Devise::SessionsController
54
55
  include ::ActiveAdmin::Devise::Controller
56
+
57
+ ActiveSupport.run_load_hooks(:active_admin_controller, self)
55
58
  end
56
59
 
57
60
  class PasswordsController < ::Devise::PasswordsController
58
61
  include ::ActiveAdmin::Devise::Controller
62
+
63
+ ActiveSupport.run_load_hooks(:active_admin_controller, self)
59
64
  end
60
65
 
61
66
  class UnlocksController < ::Devise::UnlocksController
62
67
  include ::ActiveAdmin::Devise::Controller
68
+
69
+ ActiveSupport.run_load_hooks(:active_admin_controller, self)
63
70
  end
64
71
 
65
72
  class RegistrationsController < ::Devise::RegistrationsController
66
73
  include ::ActiveAdmin::Devise::Controller
74
+
75
+ ActiveSupport.run_load_hooks(:active_admin_controller, self)
67
76
  end
68
77
 
69
78
  class ConfirmationsController < ::Devise::ConfirmationsController
70
79
  include ::ActiveAdmin::Devise::Controller
80
+
81
+ ActiveSupport.run_load_hooks(:active_admin_controller, self)
71
82
  end
72
83
 
73
84
  def self.controllers_for_filters
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
 
3
4
  # The Active Admin DSL. This class is where all the registration blocks
@@ -101,7 +102,7 @@ module ActiveAdmin
101
102
  def batch_action(title, options = {}, &block)
102
103
  # Create symbol & title information
103
104
  if title.is_a? String
104
- sym = title.titleize.tr(' ', '').underscore.to_sym
105
+ sym = title.titleize.tr(" ", "").underscore.to_sym
105
106
  else
106
107
  sym = title
107
108
  title = sym.to_s.titleize
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
 
3
4
  class DynamicSetting
@@ -1,5 +1,6 @@
1
- require 'active_admin/dynamic_setting'
2
- require 'active_admin/settings_node'
1
+ # frozen_string_literal: true
2
+ require "active_admin/dynamic_setting"
3
+ require "active_admin/settings_node"
3
4
 
4
5
  module ActiveAdmin
5
6
 
@@ -1,21 +1,25 @@
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
- ActiveAdmin::Application.setting :load_paths, [File.expand_path('app/admin', app.root)]
7
+ ActiveAdmin::Application.setting :load_paths, [File.expand_path("app/admin", app.root)]
6
8
  end
7
9
 
8
10
  initializer "active_admin.precompile", group: :all do |app|
9
- ActiveAdmin.application.stylesheets.each do |path, _|
10
- app.config.assets.precompile << path
11
- end
12
- ActiveAdmin.application.javascripts.each do |path|
13
- app.config.assets.precompile << path
11
+ unless ActiveAdmin.application.use_webpacker
12
+ ActiveAdmin.application.stylesheets.each do |path, _|
13
+ app.config.assets.precompile << path
14
+ end
15
+ ActiveAdmin.application.javascripts.each do |path|
16
+ app.config.assets.precompile << path
17
+ end
14
18
  end
15
19
  end
16
20
 
17
- initializer 'active_admin.routes' do
18
- require 'active_admin/helpers/routes/url_helpers'
21
+ initializer "active_admin.routes" do
22
+ require "active_admin/helpers/routes/url_helpers"
19
23
  end
20
24
  end
21
25
  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
@@ -45,8 +46,6 @@ module ActiveAdmin
45
46
  raise new exception
46
47
  end
47
48
 
48
- private
49
-
50
49
  def self.database_error_classes
51
50
  @classes ||= []
52
51
  end
@@ -1,4 +1,5 @@
1
- require 'active_admin/filters/active_filter'
1
+ # frozen_string_literal: true
2
+ require "active_admin/filters/active_filter"
2
3
 
3
4
  module ActiveAdmin
4
5
  module Filters
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  module Filters
3
4
 
@@ -39,8 +40,9 @@ module ActiveAdmin
39
40
  end
40
41
 
41
42
  def predicate_name
42
- I18n.t("active_admin.filters.predicates.#{condition.predicate.name}",
43
- default: ransack_predicate_name)
43
+ I18n.t(
44
+ "active_admin.filters.predicates.#{condition.predicate.name}",
45
+ default: ransack_predicate_name)
44
46
  end
45
47
 
46
48
  def html_options
@@ -66,7 +68,7 @@ module ActiveAdmin
66
68
  def filter_label
67
69
  return unless filter
68
70
 
69
- filter[:label] || I18n.t(name, scope: ['formtastic', 'labels'], default: nil)
71
+ filter[:label] || I18n.t(name, scope: ["formtastic", "labels"], default: nil)
70
72
  end
71
73
 
72
74
  #@return Ransack::Nodes::Attribute
@@ -83,7 +85,7 @@ module ActiveAdmin
83
85
  end
84
86
 
85
87
  def find_class?
86
- ['eq', 'in'].include? condition.predicate.arel_predicate
88
+ ["eq", "in"].include? condition.predicate.arel_predicate
87
89
  end
88
90
 
89
91
  # detect related class for Ransack::Nodes::Attribute
@@ -112,8 +114,6 @@ module ActiveAdmin
112
114
  @predicate_association
113
115
  end
114
116
 
115
- private
116
-
117
117
  def find_predicate_association
118
118
  condition_attribute.klass.reflect_on_all_associations.
119
119
  reject { |r| r.options[:polymorphic] }. #skip polymorphic
@@ -1,42 +1,16 @@
1
- require 'active_admin/filters/active'
1
+ # frozen_string_literal: true
2
+ require "active_admin/filters/active"
2
3
 
3
4
  module ActiveAdmin
4
5
  module Filters
5
6
  class ActiveSidebar < ActiveAdmin::SidebarSection
6
7
 
7
8
  def initialize
8
- super 'search_status', sidebar_options
9
+ super "search_status", sidebar_options
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