activeadmin 2.4.0 → 2.13.1

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 (261) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +364 -31
  3. data/CONTRIBUTING.md +42 -62
  4. data/README.md +4 -4
  5. data/app/assets/javascripts/active_admin/base.js +524 -0
  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 +40 -8
  9. data/app/assets/stylesheets/active_admin/_mixins.scss +1 -1
  10. data/{vendor → app}/assets/stylesheets/active_admin/_normalize.scss +25 -123
  11. data/app/assets/stylesheets/active_admin/{print.scss → _print.scss} +2 -2
  12. data/app/assets/stylesheets/active_admin/components/_comments.scss +2 -2
  13. data/app/assets/stylesheets/active_admin/components/_date_picker.scss +1 -2
  14. data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +0 -1
  15. data/app/assets/stylesheets/active_admin/components/_tables.scss +1 -2
  16. data/app/assets/stylesheets/active_admin/mixins/_all.scss +8 -8
  17. data/app/assets/stylesheets/active_admin/mixins/_variables.scss +17 -0
  18. data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +1 -1
  19. data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +0 -1
  20. data/app/javascript/active_admin/base.js +28 -0
  21. data/app/{assets/javascripts/active_admin/ext/jquery-ui.es6 → javascript/active_admin/ext/jquery-ui.js} +0 -0
  22. data/app/{assets/javascripts/active_admin/ext/jquery.es6 → javascript/active_admin/ext/jquery.js} +0 -0
  23. data/app/{assets/javascripts/active_admin/lib/batch_actions.es6 → javascript/active_admin/initializers/batch-actions.js} +4 -2
  24. data/app/javascript/active_admin/initializers/checkbox-toggler.js +3 -0
  25. data/app/{assets/javascripts/active_admin/initializers/datepicker.es6 → javascript/active_admin/initializers/datepicker.js} +0 -0
  26. data/app/javascript/active_admin/initializers/dropdown-menu.js +9 -0
  27. data/app/javascript/active_admin/initializers/filters.js +10 -0
  28. data/app/{assets/javascripts/active_admin/lib/has_many.es6 → javascript/active_admin/initializers/has-many.js} +4 -1
  29. data/app/javascript/active_admin/initializers/per-page.js +13 -0
  30. data/app/javascript/active_admin/initializers/table-checkbox-toggler.js +3 -0
  31. data/app/{assets/javascripts/active_admin/initializers/tabs.es6 → javascript/active_admin/initializers/tabs.js} +0 -0
  32. data/app/{assets/javascripts/active_admin/lib/checkbox-toggler.es6 → javascript/active_admin/lib/checkbox-toggler.js} +5 -5
  33. data/app/{assets/javascripts/active_admin/lib/dropdown-menu.es6 → javascript/active_admin/lib/dropdown-menu.js} +3 -10
  34. data/app/javascript/active_admin/lib/filters.js +39 -0
  35. data/app/{assets/javascripts/active_admin/lib/modal_dialog.es6 → javascript/active_admin/lib/modal-dialog.js} +10 -8
  36. data/app/javascript/active_admin/lib/per-page.js +38 -0
  37. data/app/{assets/javascripts/active_admin/lib/table-checkbox-toggler.es6 → javascript/active_admin/lib/table-checkbox-toggler.js} +5 -3
  38. data/app/javascript/active_admin/lib/utils.js +40 -0
  39. data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +1 -1
  40. data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +2 -2
  41. data/app/views/active_admin/devise/shared/_links.erb +1 -1
  42. data/app/views/active_admin/page/index.html.arb +1 -0
  43. data/app/views/active_admin/resource/edit.html.arb +1 -0
  44. data/app/views/active_admin/resource/index.html.arb +1 -0
  45. data/app/views/active_admin/resource/new.html.arb +1 -0
  46. data/app/views/active_admin/resource/show.html.arb +1 -0
  47. data/app/views/layouts/active_admin.html.arb +1 -0
  48. data/app/views/layouts/active_admin_logged_out.html.erb +15 -5
  49. data/config/locales/ar.yml +6 -6
  50. data/config/locales/az.yml +138 -0
  51. data/config/locales/en-CA.yml +3 -3
  52. data/config/locales/en-GB.yml +3 -3
  53. data/config/locales/en.yml +3 -3
  54. data/config/locales/es-MX.yml +2 -1
  55. data/config/locales/es.yml +5 -5
  56. data/config/locales/fr.yml +4 -4
  57. data/config/locales/it.yml +18 -0
  58. data/config/locales/ja.yml +3 -3
  59. data/config/locales/ko.yml +1 -1
  60. data/config/locales/lv.yml +2 -2
  61. data/config/locales/nl.yml +1 -1
  62. data/config/locales/ro.yml +3 -2
  63. data/config/locales/vi.yml +6 -5
  64. data/docs/0-installation.md +27 -3
  65. data/docs/1-general-configuration.md +20 -0
  66. data/docs/11-decorators.md +16 -5
  67. data/docs/2-resource-customization.md +10 -1
  68. data/docs/3-index-pages.md +1 -1
  69. data/docs/5-forms.md +9 -3
  70. data/docs/6-show-pages.md +12 -0
  71. data/docs/8-custom-actions.md +1 -1
  72. data/docs/9-batch-actions.md +2 -2
  73. data/docs/Gemfile +3 -2
  74. data/docs/Gemfile.lock +192 -157
  75. data/docs/_includes/top-menu.html +1 -1
  76. data/docs/documentation.md +1 -1
  77. data/docs/index.html +6 -6
  78. data/lib/active_admin/abstract_view_factory.rb +1 -0
  79. data/lib/active_admin/application.rb +20 -20
  80. data/lib/active_admin/application_settings.rb +4 -3
  81. data/lib/active_admin/asset_registration.rb +1 -0
  82. data/lib/active_admin/authorization_adapter.rb +4 -3
  83. data/lib/active_admin/base_controller/authorization.rb +15 -13
  84. data/lib/active_admin/base_controller/menu.rb +1 -0
  85. data/lib/active_admin/base_controller.rb +6 -5
  86. data/lib/active_admin/batch_actions/controller.rb +4 -3
  87. data/lib/active_admin/batch_actions/resource_extension.rb +10 -8
  88. data/lib/active_admin/batch_actions/views/batch_action_form.rb +4 -3
  89. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +7 -6
  90. data/lib/active_admin/batch_actions/views/selection_cells.rb +4 -3
  91. data/lib/active_admin/batch_actions.rb +1 -0
  92. data/lib/active_admin/callbacks.rb +1 -0
  93. data/lib/active_admin/cancan_adapter.rb +2 -1
  94. data/lib/active_admin/collection_decorator.rb +32 -0
  95. data/lib/active_admin/component.rb +1 -0
  96. data/lib/active_admin/controller_action.rb +1 -0
  97. data/lib/active_admin/csv_builder.rb +12 -21
  98. data/lib/active_admin/dependency.rb +13 -12
  99. data/lib/active_admin/deprecation.rb +1 -0
  100. data/lib/active_admin/devise.rb +16 -5
  101. data/lib/active_admin/dsl.rb +2 -1
  102. data/lib/active_admin/dynamic_setting.rb +1 -0
  103. data/lib/active_admin/dynamic_settings_node.rb +3 -2
  104. data/lib/active_admin/engine.rb +13 -9
  105. data/lib/active_admin/error.rb +1 -2
  106. data/lib/active_admin/filters/active.rb +2 -1
  107. data/lib/active_admin/filters/active_filter.rb +7 -7
  108. data/lib/active_admin/filters/active_sidebar.rb +4 -30
  109. data/lib/active_admin/filters/dsl.rb +1 -0
  110. data/lib/active_admin/filters/forms.rb +7 -6
  111. data/lib/active_admin/filters/formtastic_addons.rb +2 -6
  112. data/lib/active_admin/filters/resource_extension.rb +2 -1
  113. data/lib/active_admin/filters.rb +8 -7
  114. data/lib/active_admin/form_builder.rb +25 -20
  115. data/lib/active_admin/generators/boilerplate.rb +2 -1
  116. data/lib/active_admin/helpers/collection.rb +2 -0
  117. data/lib/active_admin/helpers/i18n.rb +1 -0
  118. data/lib/active_admin/helpers/optional_display.rb +3 -2
  119. data/lib/active_admin/helpers/routes/url_helpers.rb +1 -0
  120. data/lib/active_admin/helpers/scope_chain.rb +1 -0
  121. data/lib/active_admin/inputs/datepicker_input.rb +2 -1
  122. data/lib/active_admin/inputs/filters/base/search_method_select.rb +5 -4
  123. data/lib/active_admin/inputs/filters/base.rb +2 -1
  124. data/lib/active_admin/inputs/filters/boolean_input.rb +2 -1
  125. data/lib/active_admin/inputs/filters/check_boxes_input.rb +2 -1
  126. data/lib/active_admin/inputs/filters/date_picker_input.rb +1 -0
  127. data/lib/active_admin/inputs/filters/date_range_input.rb +16 -12
  128. data/lib/active_admin/inputs/filters/numeric_input.rb +1 -0
  129. data/lib/active_admin/inputs/filters/select_input.rb +3 -2
  130. data/lib/active_admin/inputs/filters/string_input.rb +1 -0
  131. data/lib/active_admin/inputs/filters/text_input.rb +1 -0
  132. data/lib/active_admin/inputs.rb +1 -0
  133. data/lib/active_admin/localizers/resource_localizer.rb +4 -3
  134. data/lib/active_admin/localizers.rb +2 -1
  135. data/lib/active_admin/menu.rb +7 -3
  136. data/lib/active_admin/menu_collection.rb +1 -0
  137. data/lib/active_admin/menu_item.rb +8 -7
  138. data/lib/active_admin/namespace.rb +15 -14
  139. data/lib/active_admin/namespace_settings.rb +9 -5
  140. data/lib/active_admin/order_clause.rb +2 -1
  141. data/lib/active_admin/orm/active_record/comments/comment.rb +4 -3
  142. data/lib/active_admin/orm/active_record/comments/namespace_helper.rb +1 -0
  143. data/lib/active_admin/orm/active_record/comments/resource_helper.rb +1 -0
  144. data/lib/active_admin/orm/active_record/comments/show_page_helper.rb +1 -0
  145. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +20 -19
  146. data/lib/active_admin/orm/active_record/comments/views.rb +3 -2
  147. data/lib/active_admin/orm/active_record/comments.rb +20 -19
  148. data/lib/active_admin/orm/active_record.rb +2 -1
  149. data/lib/active_admin/orm/mongoid.rb +1 -0
  150. data/lib/active_admin/page.rb +2 -1
  151. data/lib/active_admin/page_controller.rb +1 -0
  152. data/lib/active_admin/page_dsl.rb +1 -0
  153. data/lib/active_admin/page_presenter.rb +1 -0
  154. data/lib/active_admin/pundit_adapter.rb +59 -15
  155. data/lib/active_admin/resource/action_items.rb +6 -5
  156. data/lib/active_admin/resource/attributes.rb +2 -1
  157. data/lib/active_admin/resource/belongs_to.rb +3 -2
  158. data/lib/active_admin/resource/controllers.rb +2 -1
  159. data/lib/active_admin/resource/includes.rb +1 -0
  160. data/lib/active_admin/resource/menu.rb +5 -4
  161. data/lib/active_admin/resource/model.rb +1 -0
  162. data/lib/active_admin/resource/naming.rb +6 -5
  163. data/lib/active_admin/resource/ordering.rb +1 -0
  164. data/lib/active_admin/resource/page_presenters.rb +1 -0
  165. data/lib/active_admin/resource/pagination.rb +1 -0
  166. data/lib/active_admin/resource/routes.rb +6 -7
  167. data/lib/active_admin/resource/scope_to.rb +8 -7
  168. data/lib/active_admin/resource/scopes.rb +1 -0
  169. data/lib/active_admin/resource/sidebars.rb +2 -1
  170. data/lib/active_admin/resource.rb +21 -20
  171. data/lib/active_admin/resource_collection.rb +1 -0
  172. data/lib/active_admin/resource_controller/action_builder.rb +1 -0
  173. data/lib/active_admin/resource_controller/data_access.rb +31 -5
  174. data/lib/active_admin/resource_controller/decorators.rb +7 -28
  175. data/lib/active_admin/resource_controller/polymorphic_routes.rb +4 -2
  176. data/lib/active_admin/resource_controller/resource_class_methods.rb +1 -0
  177. data/lib/active_admin/resource_controller/scoping.rb +1 -0
  178. data/lib/active_admin/resource_controller/sidebars.rb +1 -0
  179. data/lib/active_admin/resource_controller/streaming.rb +9 -7
  180. data/lib/active_admin/resource_controller.rb +13 -11
  181. data/lib/active_admin/resource_dsl.rb +11 -25
  182. data/lib/active_admin/router.rb +1 -0
  183. data/lib/active_admin/scope.rb +7 -6
  184. data/lib/active_admin/settings_node.rb +1 -0
  185. data/lib/active_admin/sidebar_section.rb +1 -0
  186. data/lib/active_admin/version.rb +2 -1
  187. data/lib/active_admin/view_factory.rb +18 -17
  188. data/lib/active_admin/view_helpers/active_admin_application_helper.rb +1 -0
  189. data/lib/active_admin/view_helpers/auto_link_helper.rb +1 -0
  190. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +4 -3
  191. data/lib/active_admin/view_helpers/display_helper.rb +15 -7
  192. data/lib/active_admin/view_helpers/download_format_links_helper.rb +2 -1
  193. data/lib/active_admin/view_helpers/fields_for.rb +3 -2
  194. data/lib/active_admin/view_helpers/flash_helper.rb +1 -0
  195. data/lib/active_admin/view_helpers/form_helper.rb +1 -0
  196. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +1 -0
  197. data/lib/active_admin/view_helpers/scope_name_helper.rb +1 -0
  198. data/lib/active_admin/view_helpers/sidebar_helper.rb +1 -0
  199. data/lib/active_admin/view_helpers/title_helper.rb +1 -0
  200. data/lib/active_admin/view_helpers/view_factory_helper.rb +1 -0
  201. data/lib/active_admin/view_helpers.rb +2 -1
  202. data/lib/active_admin/views/action_items.rb +1 -0
  203. data/lib/active_admin/views/components/active_admin_form.rb +7 -6
  204. data/lib/active_admin/views/components/active_filters_sidebar_content.rb +59 -0
  205. data/lib/active_admin/views/components/attributes_table.rb +6 -5
  206. data/lib/active_admin/views/components/blank_slate.rb +2 -1
  207. data/lib/active_admin/views/components/columns.rb +1 -0
  208. data/lib/active_admin/views/components/dropdown_menu.rb +7 -9
  209. data/lib/active_admin/views/components/index_list.rb +4 -3
  210. data/lib/active_admin/views/components/menu.rb +2 -1
  211. data/lib/active_admin/views/components/menu_item.rb +5 -4
  212. data/lib/active_admin/views/components/paginated_collection.rb +20 -18
  213. data/lib/active_admin/views/components/panel.rb +2 -1
  214. data/lib/active_admin/views/components/scopes.rb +8 -5
  215. data/lib/active_admin/views/components/sidebar.rb +1 -0
  216. data/lib/active_admin/views/components/sidebar_section.rb +1 -0
  217. data/lib/active_admin/views/components/site_title.rb +2 -1
  218. data/lib/active_admin/views/components/status_tag.rb +12 -11
  219. data/lib/active_admin/views/components/table_for.rb +19 -17
  220. data/lib/active_admin/views/components/tabs.rb +4 -3
  221. data/lib/active_admin/views/components/unsupported_browser.rb +1 -0
  222. data/lib/active_admin/views/footer.rb +3 -1
  223. data/lib/active_admin/views/header.rb +3 -2
  224. data/lib/active_admin/views/index_as_block.rb +1 -0
  225. data/lib/active_admin/views/index_as_blog.rb +2 -1
  226. data/lib/active_admin/views/index_as_grid.rb +2 -1
  227. data/lib/active_admin/views/index_as_table.rb +17 -16
  228. data/lib/active_admin/views/pages/base.rb +19 -12
  229. data/lib/active_admin/views/pages/form.rb +1 -0
  230. data/lib/active_admin/views/pages/index.rb +16 -13
  231. data/lib/active_admin/views/pages/layout.rb +1 -0
  232. data/lib/active_admin/views/pages/page.rb +1 -0
  233. data/lib/active_admin/views/pages/show.rb +1 -0
  234. data/lib/active_admin/views/tabbed_navigation.rb +3 -2
  235. data/lib/active_admin/views/title_bar.rb +2 -1
  236. data/lib/active_admin/views.rb +2 -1
  237. data/lib/active_admin.rb +63 -64
  238. data/lib/activeadmin.rb +2 -1
  239. data/lib/generators/active_admin/assets/assets_generator.rb +3 -2
  240. data/lib/generators/active_admin/assets/templates/active_admin.scss +2 -2
  241. data/lib/generators/active_admin/devise/devise_generator.rb +6 -5
  242. data/lib/generators/active_admin/install/install_generator.rb +15 -8
  243. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +9 -2
  244. data/lib/generators/active_admin/install/templates/dashboard.rb +1 -0
  245. data/lib/generators/active_admin/page/page_generator.rb +2 -1
  246. data/lib/generators/active_admin/page/templates/page.rb +1 -0
  247. data/lib/generators/active_admin/resource/resource_generator.rb +4 -3
  248. data/lib/generators/active_admin/webpacker/plugins/jquery.js +7 -0
  249. data/lib/generators/active_admin/webpacker/templates/active_admin.js +5 -0
  250. data/lib/generators/active_admin/webpacker/templates/active_admin.scss +17 -0
  251. data/lib/generators/active_admin/webpacker/templates/print.scss +2 -0
  252. data/lib/generators/active_admin/webpacker/webpacker_generator.rb +27 -0
  253. data/lib/ransack_ext.rb +9 -8
  254. metadata +54 -91
  255. data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
  256. data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
  257. data/app/assets/images/active_admin/orderable.png +0 -0
  258. data/app/assets/javascripts/active_admin/base.es6 +0 -23
  259. data/app/assets/javascripts/active_admin/initializers/filters.es6 +0 -45
  260. data/app/assets/javascripts/active_admin/lib/active_admin.es6 +0 -41
  261. data/app/assets/javascripts/active_admin/lib/per_page.es6 +0 -47
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  class MenuItem
3
4
  include Menu::MenuNode
@@ -45,13 +46,13 @@ module ActiveAdmin
45
46
  #
46
47
  def initialize(options = {})
47
48
  super() # MenuNode
48
- @label = options[:label]
49
- @dirty_id = options[:id] || options[:label]
50
- @url = options[:url] || '#'
51
- @priority = options[:priority] || 10
52
- @html_options = options[:html_options] || {}
53
- @should_display = options[:if] || proc { true }
54
- @parent = options[:parent]
49
+ @label = options[:label]
50
+ @dirty_id = options[:id] || options[:label]
51
+ @url = options[:url] || "#"
52
+ @priority = options[:priority] || 10
53
+ @html_options = options[:html_options] || {}
54
+ @should_display = options[:if] || proc { true }
55
+ @parent = options[:parent]
55
56
 
56
57
  yield(self) if block_given? # Builder style syntax
57
58
  end
@@ -1,4 +1,5 @@
1
- require 'active_admin/resource_collection'
1
+ # frozen_string_literal: true
2
+ require "active_admin/resource_collection"
2
3
 
3
4
  module ActiveAdmin
4
5
 
@@ -31,7 +32,7 @@ module ActiveAdmin
31
32
  end
32
33
  end
33
34
 
34
- RegisterEvent = 'active_admin.namespace.register'.freeze
35
+ RegisterEvent = "active_admin.namespace.register".freeze
35
36
 
36
37
  attr_reader :application, :resources, :menus
37
38
 
@@ -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 preffered method to access this is to
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.publish ActiveAdmin::Resource::RegisterEvent, config
75
+ ActiveSupport::Notifications.instrument ActiveAdmin::Resource::RegisterEvent, { active_admin_resource: config }
75
76
 
76
77
  # Return the config
77
78
  config
@@ -149,10 +150,10 @@ module ActiveAdmin
149
150
  def add_logout_button_to_menu(menu, priority = 20, html_options = {})
150
151
  if logout_link_path
151
152
  html_options = html_options.reverse_merge(method: logout_link_method || :get)
152
- menu.add id: 'logout', priority: priority, html_options: html_options,
153
- label: -> { I18n.t 'active_admin.logout' },
154
- url: -> { render_or_call_method_or_proc_on self, active_admin_namespace.logout_link_path },
155
- if: :current_active_admin_user?
153
+ menu.add id: "logout", priority: priority, html_options: html_options,
154
+ label: -> { I18n.t "active_admin.logout" },
155
+ url: -> { render_or_call_method_or_proc_on self, active_admin_namespace.logout_link_path },
156
+ if: :current_active_admin_user?
156
157
  end
157
158
  end
158
159
 
@@ -164,10 +165,10 @@ module ActiveAdmin
164
165
  #
165
166
  def add_current_user_to_menu(menu, priority = 10, html_options = {})
166
167
  if current_user_method
167
- menu.add id: 'current_user', priority: priority, html_options: html_options,
168
- label: -> { display_name current_active_admin_user },
169
- url: -> { auto_url_for(current_active_admin_user) },
170
- if: :current_active_admin_user?
168
+ menu.add id: "current_user", priority: priority, html_options: html_options,
169
+ label: -> { display_name current_active_admin_user },
170
+ url: -> { auto_url_for(current_active_admin_user) },
171
+ if: :current_active_admin_user?
171
172
  end
172
173
  end
173
174
 
@@ -211,8 +212,8 @@ module ActiveAdmin
211
212
 
212
213
  def unload_resources!
213
214
  resources.each do |resource|
214
- parent = (module_name || 'Object').constantize
215
- name = resource.controller_name.split('::').last
215
+ parent = (module_name || "Object").constantize
216
+ name = resource.controller_name.split("::").last
216
217
  parent.send(:remove_const, name) if parent.const_defined?(name, false)
217
218
 
218
219
  # Remove circular references
@@ -1,4 +1,5 @@
1
- require 'active_admin/dynamic_settings_node'
1
+ # frozen_string_literal: true
2
+ require "active_admin/dynamic_settings_node"
2
3
 
3
4
  module ActiveAdmin
4
5
  class NamespaceSettings < DynamicSettingsNode
@@ -57,7 +58,7 @@ module ActiveAdmin
57
58
  register :filters, true
58
59
 
59
60
  # The namespace root
60
- register :root_to, 'dashboard#index'
61
+ register :root_to, "dashboard#index"
61
62
 
62
63
  # Options that are passed to root_to
63
64
  register :root_to_options, {}
@@ -73,7 +74,7 @@ module ActiveAdmin
73
74
  register :create_another, false
74
75
 
75
76
  # Default CSV options
76
- register :csv_options, { col_sep: ',', byte_order_mark: "\xEF\xBB\xBF" }
77
+ register :csv_options, { col_sep: ",", byte_order_mark: "\xEF\xBB\xBF" }
77
78
 
78
79
  # Default Download Links options
79
80
  register :download_links, true
@@ -102,7 +103,7 @@ module ActiveAdmin
102
103
  ]
103
104
 
104
105
  # Set flash message keys that shouldn't show in ActiveAdmin
105
- register :flash_keys_to_except, ['timedout']
106
+ register :flash_keys_to_except, ["timedout"]
106
107
 
107
108
  # Include association filters by default
108
109
  register :include_default_association_filters, true
@@ -118,6 +119,9 @@ module ActiveAdmin
118
119
  :title,
119
120
  :email,
120
121
  ]
121
- register :filter_method_for_large_association, '_starts_with'
122
+ register :filter_method_for_large_association, "_starts_with"
123
+
124
+ # Switch between asset pipeline and webpacker assets
125
+ register :use_webpacker, false
122
126
  end
123
127
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  class OrderClause
3
4
  attr_reader :field, :order, :active_admin_config
@@ -20,7 +21,7 @@ module ActiveAdmin
20
21
  end
21
22
 
22
23
  def to_sql
23
- [table_column, @op, ' ', @order].compact.join
24
+ [table_column, @op, " ", @order].compact.join
24
25
  end
25
26
 
26
27
  def table
@@ -1,10 +1,11 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  class Comment < ActiveRecord::Base
3
4
 
4
5
  self.table_name = "#{table_name_prefix}active_admin_comments#{table_name_suffix}"
5
6
 
6
7
  belongs_to :resource, polymorphic: true, optional: true
7
- belongs_to :author, polymorphic: true
8
+ belongs_to :author, polymorphic: true
8
9
 
9
10
  validates_presence_of :body, :namespace, :resource
10
11
 
@@ -18,8 +19,8 @@ module ActiveAdmin
18
19
  def self.find_for_resource_in_namespace(resource, namespace)
19
20
  where(
20
21
  resource_type: resource_type(resource),
21
- resource_id: resource.id,
22
- namespace: namespace.to_s
22
+ resource_id: resource.id,
23
+ namespace: namespace.to_s
23
24
  ).order(ActiveAdmin.application.namespaces[namespace.to_sym].comments_order)
24
25
  end
25
26
 
@@ -1,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,5 +1,6 @@
1
- require 'active_admin/views'
2
- require 'active_admin/views/components/panel'
1
+ # frozen_string_literal: true
2
+ require "active_admin/views"
3
+ require "active_admin/views/components/panel"
3
4
 
4
5
  module ActiveAdmin
5
6
  module Comments
@@ -22,13 +23,13 @@ module ActiveAdmin
22
23
  protected
23
24
 
24
25
  def title
25
- I18n.t 'active_admin.comments.title_content', count: @comments.total_count
26
+ I18n.t "active_admin.comments.title_content", count: @comments.total_count
26
27
  end
27
28
 
28
29
  def build_comments
29
30
  if @comments.any?
30
31
  @comments.each(&method(:build_comment))
31
- div page_entries_info(@comments).html_safe, class: 'pagination_information'
32
+ div page_entries_info(@comments).html_safe, class: "pagination_information"
32
33
  else
33
34
  build_empty_message
34
35
  end
@@ -42,56 +43,56 @@ module ActiveAdmin
42
43
 
43
44
  def build_comment(comment)
44
45
  div for: comment do
45
- div class: 'active_admin_comment_meta' do
46
- h4 class: 'active_admin_comment_author' do
47
- comment.author ? auto_link(comment.author) : I18n.t('active_admin.comments.author_missing')
46
+ div class: "active_admin_comment_meta" do
47
+ h4 class: "active_admin_comment_author" do
48
+ comment.author ? auto_link(comment.author) : I18n.t("active_admin.comments.author_missing")
48
49
  end
49
50
  span pretty_format comment.created_at
50
51
  if authorized?(ActiveAdmin::Auth::DESTROY, comment)
51
- text_node link_to I18n.t('active_admin.comments.delete'), comments_url(comment.id), method: :delete, data: { confirm: I18n.t('active_admin.comments.delete_confirmation') }
52
+ text_node link_to I18n.t("active_admin.comments.delete"), comments_url(comment.id), method: :delete, data: { confirm: I18n.t("active_admin.comments.delete_confirmation") }
52
53
  end
53
54
  end
54
- div class: 'active_admin_comment_body' do
55
+ div class: "active_admin_comment_body" do
55
56
  simple_format comment.body
56
57
  end
57
58
  end
58
59
  end
59
60
 
60
61
  def build_empty_message
61
- span I18n.t('active_admin.comments.no_comments_yet'), class: 'empty'
62
+ span I18n.t("active_admin.comments.no_comments_yet"), class: "empty"
62
63
  end
63
64
 
64
65
  def comments_url(*args)
65
66
  parts = []
66
67
  parts << active_admin_namespace.name unless active_admin_namespace.root?
67
68
  parts << active_admin_namespace.comments_registration_name.underscore
68
- parts << 'path'
69
- send parts.join('_'), *args
69
+ parts << "path"
70
+ send parts.join("_"), *args
70
71
  end
71
72
 
72
73
  def comment_form_url
73
74
  parts = []
74
75
  parts << active_admin_namespace.name unless active_admin_namespace.root?
75
76
  parts << active_admin_namespace.comments_registration_name.underscore.pluralize
76
- parts << 'path'
77
- send parts.join '_'
77
+ parts << "path"
78
+ send parts.join "_"
78
79
  end
79
80
 
80
81
  def build_comment_form
81
82
  active_admin_form_for(ActiveAdmin::Comment.new, url: comment_form_url) do |f|
82
83
  f.inputs do
83
- f.input :resource_type, as: :hidden, input_html: { value: ActiveAdmin::Comment.resource_type(parent.resource) }
84
- f.input :resource_id, as: :hidden, input_html: { value: parent.resource.id }
85
- f.input :body, label: false, input_html: { size: '80x8' }
84
+ f.input :resource_type, as: :hidden, input_html: { value: ActiveAdmin::Comment.resource_type(parent.resource) }
85
+ f.input :resource_id, as: :hidden, input_html: { value: parent.resource.id }
86
+ f.input :body, label: false, input_html: { size: "80x8" }
86
87
  end
87
88
  f.actions do
88
- f.action :submit, label: I18n.t('active_admin.comments.add')
89
+ f.action :submit, label: I18n.t("active_admin.comments.add")
89
90
  end
90
91
  end
91
92
  end
92
93
 
93
94
  def default_id_for_prefix
94
- 'active_admin_comments_for'
95
+ "active_admin_comments_for"
95
96
  end
96
97
  end
97
98
 
@@ -1,2 +1,3 @@
1
- require 'active_admin/views'
2
- require 'active_admin/orm/active_record/comments/views/active_admin_comments'
1
+ # frozen_string_literal: true
2
+ require "active_admin/views"
3
+ require "active_admin/orm/active_record/comments/views/active_admin_comments"
@@ -1,21 +1,22 @@
1
- require 'active_admin/orm/active_record/comments/views'
2
- require 'active_admin/orm/active_record/comments/show_page_helper'
3
- require 'active_admin/orm/active_record/comments/namespace_helper'
4
- require 'active_admin/orm/active_record/comments/resource_helper'
1
+ # frozen_string_literal: true
2
+ require "active_admin/orm/active_record/comments/views"
3
+ require "active_admin/orm/active_record/comments/show_page_helper"
4
+ require "active_admin/orm/active_record/comments/namespace_helper"
5
+ require "active_admin/orm/active_record/comments/resource_helper"
5
6
 
6
7
  # Add the comments configuration
7
- ActiveAdmin::Application.inheritable_setting :comments, true
8
- ActiveAdmin::Application.inheritable_setting :comments_registration_name, 'Comment'
9
- ActiveAdmin::Application.inheritable_setting :comments_order, "created_at ASC"
10
- ActiveAdmin::Application.inheritable_setting :comments_menu, {}
8
+ ActiveAdmin::Application.inheritable_setting :comments, true
9
+ ActiveAdmin::Application.inheritable_setting :comments_registration_name, "Comment"
10
+ ActiveAdmin::Application.inheritable_setting :comments_order, "created_at ASC"
11
+ ActiveAdmin::Application.inheritable_setting :comments_menu, {}
11
12
 
12
13
  # Insert helper modules
13
14
  ActiveAdmin::Namespace.send :include, ActiveAdmin::Comments::NamespaceHelper
14
- ActiveAdmin::Resource.send :include, ActiveAdmin::Comments::ResourceHelper
15
+ ActiveAdmin::Resource.send :include, ActiveAdmin::Comments::ResourceHelper
15
16
  ActiveAdmin.application.view_factory.show_page.send :include, ActiveAdmin::Comments::ShowPageHelper
16
17
 
17
18
  # Load the model as soon as it's referenced. By that point, Rails & Kaminari will be ready
18
- ActiveAdmin.autoload :Comment, 'active_admin/orm/active_record/comments/comment'
19
+ ActiveAdmin.autoload :Comment, "active_admin/orm/active_record/comments/comment"
19
20
 
20
21
  # Hint i18n-tasks about model and attribute translations used by default install
21
22
  # i18n-tasks-use t('activerecord.models.comment')
@@ -36,7 +37,7 @@ ActiveAdmin.after_load do |app|
36
37
 
37
38
  menu namespace.comments ? namespace.comments_menu : false
38
39
 
39
- config.comments = false # Don't allow comments on comments
40
+ config.comments = false # Don't allow comments on comments
40
41
  config.batch_actions = false # The default destroy batch action isn't showing up anyway...
41
42
 
42
43
  scope :all, show_count: false
@@ -51,7 +52,7 @@ ActiveAdmin.after_load do |app|
51
52
  # Store the author and namespace
52
53
  before_save do |comment|
53
54
  comment.namespace = active_admin_config.namespace.name
54
- comment.author = current_active_admin_user
55
+ comment.author = current_active_admin_user
55
56
  end
56
57
 
57
58
  controller do
@@ -67,7 +68,7 @@ ActiveAdmin.after_load do |app|
67
68
  redirect_back fallback_location: active_admin_root
68
69
  end
69
70
  failure.html do
70
- flash[:error] = I18n.t 'active_admin.comments.errors.empty_text'
71
+ flash[:error] = I18n.t "active_admin.comments.errors.empty_text"
71
72
  redirect_back fallback_location: active_admin_root
72
73
  end
73
74
  end
@@ -88,12 +89,12 @@ ActiveAdmin.after_load do |app|
88
89
  permit_params :body, :namespace, :resource_id, :resource_type
89
90
 
90
91
  index do
91
- column I18n.t('active_admin.comments.resource_type'), :resource_type
92
- column I18n.t('active_admin.comments.author_type'), :author_type
93
- column I18n.t('active_admin.comments.resource'), :resource
94
- column I18n.t('active_admin.comments.author'), :author
95
- column I18n.t('active_admin.comments.body'), :body
96
- column I18n.t('active_admin.comments.created_at'), :created_at
92
+ column I18n.t("active_admin.comments.resource_type"), :resource_type
93
+ column I18n.t("active_admin.comments.author_type"), :author_type
94
+ column I18n.t("active_admin.comments.resource"), :resource
95
+ column I18n.t("active_admin.comments.author"), :author
96
+ column I18n.t("active_admin.comments.body"), :body
97
+ column I18n.t("active_admin.comments.created_at"), :created_at
97
98
  actions
98
99
  end
99
100
  end
@@ -1,5 +1,6 @@
1
+ # frozen_string_literal: true
1
2
  # ActiveRecord-specific plugins should be required here
2
3
 
3
4
  ActiveAdmin::DatabaseHitDuringLoad.database_error_classes << ActiveRecord::StatementInvalid
4
5
 
5
- require 'active_admin/orm/active_record/comments'
6
+ require "active_admin/orm/active_record/comments"
@@ -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
  #
@@ -65,7 +66,7 @@ module ActiveAdmin
65
66
  end
66
67
 
67
68
  def controller_name
68
- [namespace.module_name, camelized_resource_name + "Controller"].compact.join('::')
69
+ [namespace.module_name, camelized_resource_name + "Controller"].compact.join("::")
69
70
  end
70
71
 
71
72
  # Override from `ActiveAdmin::Resource::Controllers`
@@ -1,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,6 +1,7 @@
1
+ # frozen_string_literal: true
1
2
  ActiveAdmin::Dependency.pundit!
2
3
 
3
- require 'pundit'
4
+ require "pundit"
4
5
 
5
6
  # Add a setting to the application to configure the pundit default policy
6
7
  ActiveAdmin::Application.inheritable_setting :pundit_default_policy, nil
@@ -30,25 +31,22 @@ module ActiveAdmin
30
31
  end
31
32
 
32
33
  def retrieve_policy(subject)
33
- 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
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 e
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
- when Auth::READ then subject.is_a?(Class) ? :index? : :show?
47
+ when Auth::CREATE then :create?
48
+ when Auth::UPDATE then :update?
49
+ when Auth::READ then subject.is_a?(Class) ? :index? : :show?
52
50
  when Auth::DESTROY then subject.is_a?(Class) ? :destroy_all? : :destroy?
53
51
  else "#{action}?"
54
52
  end
@@ -56,8 +54,42 @@ module ActiveAdmin
56
54
 
57
55
  private
58
56
 
57
+ def policy_target(subject)
58
+ case subject
59
+ when nil then resource
60
+ when Class then subject.new
61
+ else subject
62
+ end
63
+ end
64
+
65
+ # This method is needed to fallback to our previous policy searching logic.
66
+ # I.e.: when class name contains `default_policy_namespace` (eg: ShopAdmin)
67
+ # we should try to search it without namespace. This is because that's
68
+ # the only thing that worked in this case before we fixed our buggy namespace
69
+ # detection, so people are probably relying on it.
70
+ # This fallback might be removed in future versions of ActiveAdmin, so
71
+ # pundit_adapter search will work consistently with provided namespaces
72
+ def compat_policy(subject)
73
+ return unless default_policy_namespace
74
+
75
+ target = policy_target(subject)
76
+
77
+ return unless target.class.to_s.include?(default_policy_module) &&
78
+ (policy = policy(target))
79
+
80
+ policy_name = policy.class.to_s
81
+
82
+ Deprecation.warn "You have `pundit_policy_namespace` configured as `#{default_policy_namespace}`, " \
83
+ "but ActiveAdmin was unable to find policy #{default_policy_module}::#{policy_name}. " \
84
+ "#{policy_name} will be used instead. " \
85
+ "This behavior will be removed in future versions of ActiveAdmin. " \
86
+ "To fix this warning, move your #{policy_name} policy to the #{default_policy_module} namespace"
87
+
88
+ policy
89
+ end
90
+
59
91
  def namespace(object)
60
- if default_policy_namespace && !object.class.to_s.include?(default_policy_namespace.to_s.camelize)
92
+ if default_policy_namespace && !object.class.to_s.start_with?("#{default_policy_module}::")
61
93
  [default_policy_namespace.to_sym, object]
62
94
  else
63
95
  object
@@ -68,7 +100,7 @@ module ActiveAdmin
68
100
  ActiveAdmin.application.pundit_default_policy && ActiveAdmin.application.pundit_default_policy.constantize
69
101
  end
70
102
 
71
- def default_policy(user, subject)
103
+ def default_policy(subject)
72
104
  default_policy_class.new(user, subject)
73
105
  end
74
106
 
@@ -76,6 +108,18 @@ module ActiveAdmin
76
108
  ActiveAdmin.application.pundit_policy_namespace
77
109
  end
78
110
 
111
+ def default_policy_module
112
+ default_policy_namespace.to_s.camelize
113
+ end
114
+
115
+ def policy(target)
116
+ policies[target] ||= Pundit.policy(user, target)
117
+ end
118
+
119
+ def policies
120
+ @policies ||= {}
121
+ end
122
+
79
123
  end
80
124
 
81
125
  end
@@ -1,4 +1,5 @@
1
- require 'active_admin/helpers/optional_display'
1
+ # frozen_string_literal: true
2
+ require "active_admin/helpers/optional_display"
2
3
 
3
4
  module ActiveAdmin
4
5
 
@@ -64,7 +65,7 @@ module ActiveAdmin
64
65
  # Adds the default New link on index
65
66
  def add_default_new_action_item
66
67
  add_action_item :new, only: :index do
67
- if controller.action_methods.include?('new') && authorized?(ActiveAdmin::Auth::CREATE, active_admin_config.resource_class)
68
+ if controller.action_methods.include?("new") && authorized?(ActiveAdmin::Auth::CREATE, active_admin_config.resource_class)
68
69
  localizer = ActiveAdmin::Localizers.resource(active_admin_config)
69
70
  link_to localizer.t(:new_model), new_resource_path
70
71
  end
@@ -74,7 +75,7 @@ module ActiveAdmin
74
75
  # Adds the default Edit link on show
75
76
  def add_default_edit_action_item
76
77
  add_action_item :edit, only: :show do
77
- if controller.action_methods.include?('edit') && authorized?(ActiveAdmin::Auth::UPDATE, resource)
78
+ if controller.action_methods.include?("edit") && authorized?(ActiveAdmin::Auth::UPDATE, resource)
78
79
  localizer = ActiveAdmin::Localizers.resource(active_admin_config)
79
80
  link_to localizer.t(:edit_model), edit_resource_path(resource)
80
81
  end
@@ -84,10 +85,10 @@ module ActiveAdmin
84
85
  # Adds the default Destroy link on show
85
86
  def add_default_show_action_item
86
87
  add_action_item :destroy, only: :show do
87
- if controller.action_methods.include?('destroy') && authorized?(ActiveAdmin::Auth::DESTROY, resource)
88
+ if controller.action_methods.include?("destroy") && authorized?(ActiveAdmin::Auth::DESTROY, resource)
88
89
  localizer = ActiveAdmin::Localizers.resource(active_admin_config)
89
90
  link_to localizer.t(:delete_model), resource_path(resource), method: :delete,
90
- data: { confirm: localizer.t(:delete_confirmation) }
91
+ data: { confirm: localizer.t(:delete_confirmation) }
91
92
  end
92
93
  end
93
94
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
 
3
4
  class Resource
@@ -36,7 +37,7 @@ module ActiveAdmin
36
37
  end
37
38
 
38
39
  def counter_cache_col?(c)
39
- c.name.end_with?('_count')
40
+ c.name.end_with?("_count")
40
41
  end
41
42
 
42
43
  def filtered_col?(c)
@@ -1,4 +1,5 @@
1
- require 'active_admin/resource'
1
+ # frozen_string_literal: true
2
+ require "active_admin/resource"
2
3
 
3
4
  module ActiveAdmin
4
5
  class Resource
@@ -46,7 +47,7 @@ module ActiveAdmin
46
47
  end
47
48
 
48
49
  def to_param
49
- :"#{@target_name}_id"
50
+ (@options[:param] || "#{@target_name}_id").to_sym
50
51
  end
51
52
  end
52
53
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  class Resource
3
4
  module Controllers
@@ -6,7 +7,7 @@ module ActiveAdmin
6
7
  # Returns a properly formatted controller name for this
7
8
  # config within its namespace
8
9
  def controller_name
9
- [namespace.module_name, resource_name.plural.camelize + "Controller"].compact.join('::')
10
+ [namespace.module_name, resource_name.plural.camelize + "Controller"].compact.join("::")
10
11
  end
11
12
 
12
13
  # Returns the controller for this config
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  class Resource
3
4
  module Includes