activeadmin 2.2.0 → 2.14.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 (299) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +469 -32
  3. data/CONTRIBUTING.md +46 -69
  4. data/README.md +13 -6
  5. data/app/assets/javascripts/active_admin/base.js +521 -0
  6. data/app/assets/stylesheets/active_admin/_base.scss +53 -37
  7. data/app/assets/stylesheets/active_admin/_forms.scss +1 -11
  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/_footer.scss +6 -1
  19. data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +1 -1
  20. data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +0 -1
  21. data/app/javascript/active_admin/base.js +28 -0
  22. data/app/{assets/javascripts/active_admin/lib/batch_actions.es6 → javascript/active_admin/initializers/batch-actions.js} +9 -3
  23. data/app/javascript/active_admin/initializers/checkbox-toggler.js +3 -0
  24. data/app/javascript/active_admin/initializers/dropdown-menu.js +9 -0
  25. data/app/javascript/active_admin/initializers/filters.js +10 -0
  26. data/app/{assets/javascripts/active_admin/lib/has_many.es6 → javascript/active_admin/initializers/has-many.js} +4 -1
  27. data/app/javascript/active_admin/initializers/per-page.js +13 -0
  28. data/app/javascript/active_admin/initializers/table-checkbox-toggler.js +3 -0
  29. data/app/{assets/javascripts/active_admin/lib/checkbox-toggler.es6 → javascript/active_admin/lib/checkbox-toggler.js} +5 -5
  30. data/app/{assets/javascripts/active_admin/lib/dropdown-menu.es6 → javascript/active_admin/lib/dropdown-menu.js} +3 -10
  31. data/app/javascript/active_admin/lib/filters.js +39 -0
  32. data/app/{assets/javascripts/active_admin/lib/modal_dialog.es6 → javascript/active_admin/lib/modal-dialog.js} +10 -8
  33. data/app/javascript/active_admin/lib/per-page.js +38 -0
  34. data/app/{assets/javascripts/active_admin/lib/table-checkbox-toggler.es6 → javascript/active_admin/lib/table-checkbox-toggler.js} +5 -3
  35. data/app/javascript/active_admin/lib/utils.js +40 -0
  36. data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +1 -1
  37. data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +2 -2
  38. data/app/views/active_admin/devise/shared/_links.erb +1 -1
  39. data/app/views/active_admin/page/index.html.arb +1 -0
  40. data/app/views/active_admin/resource/edit.html.arb +1 -0
  41. data/app/views/active_admin/resource/index.html.arb +1 -0
  42. data/app/views/active_admin/resource/new.html.arb +1 -0
  43. data/app/views/active_admin/resource/show.html.arb +1 -0
  44. data/app/views/kaminari/active_admin_countless/_first_page.html.erb +11 -0
  45. data/app/views/kaminari/active_admin_countless/_gap.html.erb +8 -0
  46. data/app/views/kaminari/active_admin_countless/_next_page.html.erb +11 -0
  47. data/app/views/kaminari/active_admin_countless/_page.html.erb +12 -0
  48. data/app/views/kaminari/active_admin_countless/_paginator.html.erb +24 -0
  49. data/app/views/kaminari/active_admin_countless/_prev_page.html.erb +11 -0
  50. data/app/views/layouts/active_admin.html.arb +1 -0
  51. data/app/views/layouts/active_admin_logged_out.html.erb +18 -7
  52. data/config/locales/ar.yml +6 -6
  53. data/config/locales/az.yml +138 -0
  54. data/config/locales/ca.yml +0 -1
  55. data/config/locales/de.yml +18 -0
  56. data/config/locales/en-CA.yml +3 -3
  57. data/config/locales/en-GB.yml +3 -3
  58. data/config/locales/en.yml +3 -3
  59. data/config/locales/es-MX.yml +2 -1
  60. data/config/locales/es.yml +5 -5
  61. data/config/locales/fr.yml +7 -7
  62. data/config/locales/it.yml +18 -0
  63. data/config/locales/ja.yml +3 -3
  64. data/config/locales/ko.yml +1 -1
  65. data/config/locales/lv.yml +2 -2
  66. data/config/locales/nl.yml +1 -1
  67. data/config/locales/ro.yml +3 -2
  68. data/config/locales/sk.yml +59 -0
  69. data/config/locales/vi.yml +40 -12
  70. data/config/locales/zh-CN.yml +36 -17
  71. data/lib/active_admin/abstract_view_factory.rb +1 -0
  72. data/lib/active_admin/application.rb +20 -20
  73. data/lib/active_admin/application_settings.rb +4 -3
  74. data/lib/active_admin/asset_registration.rb +4 -3
  75. data/lib/active_admin/authorization_adapter.rb +6 -3
  76. data/lib/active_admin/base_controller/authorization.rb +15 -13
  77. data/lib/active_admin/base_controller/menu.rb +1 -0
  78. data/lib/active_admin/base_controller.rb +6 -5
  79. data/lib/active_admin/batch_actions/controller.rb +4 -3
  80. data/lib/active_admin/batch_actions/resource_extension.rb +10 -8
  81. data/lib/active_admin/batch_actions/views/batch_action_form.rb +4 -3
  82. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +7 -6
  83. data/lib/active_admin/batch_actions/views/selection_cells.rb +4 -3
  84. data/lib/active_admin/batch_actions.rb +1 -0
  85. data/lib/active_admin/callbacks.rb +1 -0
  86. data/lib/active_admin/cancan_adapter.rb +2 -1
  87. data/lib/active_admin/collection_decorator.rb +32 -0
  88. data/lib/active_admin/component.rb +1 -0
  89. data/lib/active_admin/controller_action.rb +1 -0
  90. data/lib/active_admin/csv_builder.rb +13 -23
  91. data/lib/active_admin/dependency.rb +12 -15
  92. data/lib/active_admin/deprecation.rb +1 -0
  93. data/lib/active_admin/devise.rb +16 -5
  94. data/lib/active_admin/dsl.rb +2 -1
  95. data/lib/active_admin/dynamic_setting.rb +1 -0
  96. data/lib/active_admin/dynamic_settings_node.rb +3 -2
  97. data/lib/active_admin/engine.rb +13 -9
  98. data/lib/active_admin/error.rb +1 -2
  99. data/lib/active_admin/filters/active.rb +2 -1
  100. data/lib/active_admin/filters/active_filter.rb +7 -7
  101. data/lib/active_admin/filters/active_sidebar.rb +4 -30
  102. data/lib/active_admin/filters/dsl.rb +1 -0
  103. data/lib/active_admin/filters/forms.rb +7 -6
  104. data/lib/active_admin/filters/formtastic_addons.rb +2 -6
  105. data/lib/active_admin/filters/resource_extension.rb +30 -5
  106. data/lib/active_admin/filters.rb +8 -7
  107. data/lib/active_admin/form_builder.rb +25 -20
  108. data/lib/active_admin/generators/boilerplate.rb +13 -4
  109. data/lib/active_admin/helpers/collection.rb +2 -0
  110. data/lib/active_admin/helpers/i18n.rb +1 -0
  111. data/lib/active_admin/helpers/optional_display.rb +3 -2
  112. data/lib/active_admin/helpers/routes/url_helpers.rb +1 -0
  113. data/lib/active_admin/helpers/scope_chain.rb +1 -0
  114. data/lib/active_admin/inputs/datepicker_input.rb +2 -1
  115. data/lib/active_admin/inputs/filters/base/search_method_select.rb +5 -4
  116. data/lib/active_admin/inputs/filters/base.rb +2 -1
  117. data/lib/active_admin/inputs/filters/boolean_input.rb +2 -1
  118. data/lib/active_admin/inputs/filters/check_boxes_input.rb +2 -1
  119. data/lib/active_admin/inputs/filters/date_picker_input.rb +1 -0
  120. data/lib/active_admin/inputs/filters/date_range_input.rb +16 -12
  121. data/lib/active_admin/inputs/filters/numeric_input.rb +1 -0
  122. data/lib/active_admin/inputs/filters/select_input.rb +3 -2
  123. data/lib/active_admin/inputs/filters/string_input.rb +1 -0
  124. data/lib/active_admin/inputs/filters/text_input.rb +1 -0
  125. data/lib/active_admin/inputs.rb +1 -0
  126. data/lib/active_admin/localizers/resource_localizer.rb +4 -3
  127. data/lib/active_admin/localizers.rb +2 -1
  128. data/lib/active_admin/menu.rb +7 -3
  129. data/lib/active_admin/menu_collection.rb +1 -0
  130. data/lib/active_admin/menu_item.rb +8 -7
  131. data/lib/active_admin/namespace.rb +15 -14
  132. data/lib/active_admin/namespace_settings.rb +21 -4
  133. data/lib/active_admin/order_clause.rb +3 -2
  134. data/lib/active_admin/orm/active_record/comments/comment.rb +4 -3
  135. data/lib/active_admin/orm/active_record/comments/namespace_helper.rb +1 -0
  136. data/lib/active_admin/orm/active_record/comments/resource_helper.rb +1 -0
  137. data/lib/active_admin/orm/active_record/comments/show_page_helper.rb +1 -0
  138. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +21 -20
  139. data/lib/active_admin/orm/active_record/comments/views.rb +3 -2
  140. data/lib/active_admin/orm/active_record/comments.rb +28 -27
  141. data/lib/active_admin/orm/active_record.rb +2 -1
  142. data/lib/active_admin/orm/mongoid.rb +1 -0
  143. data/lib/active_admin/page.rb +2 -1
  144. data/lib/active_admin/page_controller.rb +1 -0
  145. data/lib/active_admin/page_dsl.rb +1 -0
  146. data/lib/active_admin/page_presenter.rb +1 -0
  147. data/lib/active_admin/pundit_adapter.rb +57 -15
  148. data/lib/active_admin/resource/action_items.rb +6 -5
  149. data/lib/active_admin/resource/attributes.rb +2 -1
  150. data/lib/active_admin/resource/belongs_to.rb +6 -2
  151. data/lib/active_admin/resource/controllers.rb +2 -1
  152. data/lib/active_admin/resource/includes.rb +1 -0
  153. data/lib/active_admin/resource/menu.rb +5 -4
  154. data/lib/active_admin/resource/model.rb +16 -0
  155. data/lib/active_admin/resource/naming.rb +6 -5
  156. data/lib/active_admin/resource/ordering.rb +1 -0
  157. data/lib/active_admin/resource/page_presenters.rb +1 -0
  158. data/lib/active_admin/resource/pagination.rb +1 -0
  159. data/lib/active_admin/resource/routes.rb +17 -10
  160. data/lib/active_admin/resource/scope_to.rb +8 -7
  161. data/lib/active_admin/resource/scopes.rb +1 -0
  162. data/lib/active_admin/resource/sidebars.rb +2 -1
  163. data/lib/active_admin/resource.rb +33 -19
  164. data/lib/active_admin/resource_collection.rb +1 -0
  165. data/lib/active_admin/resource_controller/action_builder.rb +1 -0
  166. data/lib/active_admin/resource_controller/data_access.rb +31 -5
  167. data/lib/active_admin/resource_controller/decorators.rb +8 -29
  168. data/lib/active_admin/resource_controller/polymorphic_routes.rb +38 -0
  169. data/lib/active_admin/resource_controller/resource_class_methods.rb +1 -0
  170. data/lib/active_admin/resource_controller/scoping.rb +1 -0
  171. data/lib/active_admin/resource_controller/sidebars.rb +1 -0
  172. data/lib/active_admin/resource_controller/streaming.rb +9 -7
  173. data/lib/active_admin/resource_controller.rb +14 -10
  174. data/lib/active_admin/resource_dsl.rb +11 -25
  175. data/lib/active_admin/router.rb +1 -0
  176. data/lib/active_admin/scope.rb +7 -6
  177. data/lib/active_admin/settings_node.rb +1 -0
  178. data/lib/active_admin/sidebar_section.rb +1 -0
  179. data/lib/active_admin/version.rb +2 -1
  180. data/lib/active_admin/view_factory.rb +18 -17
  181. data/lib/active_admin/view_helpers/active_admin_application_helper.rb +1 -0
  182. data/lib/active_admin/view_helpers/auto_link_helper.rb +2 -1
  183. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +4 -3
  184. data/lib/active_admin/view_helpers/display_helper.rb +15 -7
  185. data/lib/active_admin/view_helpers/download_format_links_helper.rb +2 -1
  186. data/lib/active_admin/view_helpers/fields_for.rb +3 -2
  187. data/lib/active_admin/view_helpers/flash_helper.rb +1 -0
  188. data/lib/active_admin/view_helpers/form_helper.rb +1 -0
  189. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +1 -0
  190. data/lib/active_admin/view_helpers/scope_name_helper.rb +1 -0
  191. data/lib/active_admin/view_helpers/sidebar_helper.rb +1 -0
  192. data/lib/active_admin/view_helpers/title_helper.rb +1 -0
  193. data/lib/active_admin/view_helpers/view_factory_helper.rb +1 -0
  194. data/lib/active_admin/view_helpers.rb +2 -1
  195. data/lib/active_admin/views/action_items.rb +1 -0
  196. data/lib/active_admin/views/components/active_admin_form.rb +7 -6
  197. data/lib/active_admin/views/components/active_filters_sidebar_content.rb +59 -0
  198. data/lib/active_admin/views/components/attributes_table.rb +6 -5
  199. data/lib/active_admin/views/components/blank_slate.rb +2 -1
  200. data/lib/active_admin/views/components/columns.rb +1 -0
  201. data/lib/active_admin/views/components/dropdown_menu.rb +7 -9
  202. data/lib/active_admin/views/components/index_list.rb +4 -3
  203. data/lib/active_admin/views/components/menu.rb +2 -1
  204. data/lib/active_admin/views/components/menu_item.rb +5 -4
  205. data/lib/active_admin/views/components/paginated_collection.rb +21 -19
  206. data/lib/active_admin/views/components/panel.rb +2 -1
  207. data/lib/active_admin/views/components/scopes.rb +8 -5
  208. data/lib/active_admin/views/components/sidebar.rb +1 -0
  209. data/lib/active_admin/views/components/sidebar_section.rb +1 -0
  210. data/lib/active_admin/views/components/site_title.rb +2 -1
  211. data/lib/active_admin/views/components/status_tag.rb +12 -11
  212. data/lib/active_admin/views/components/table_for.rb +19 -17
  213. data/lib/active_admin/views/components/tabs.rb +4 -3
  214. data/lib/active_admin/views/components/unsupported_browser.rb +1 -0
  215. data/lib/active_admin/views/footer.rb +3 -1
  216. data/lib/active_admin/views/header.rb +3 -2
  217. data/lib/active_admin/views/index_as_block.rb +1 -0
  218. data/lib/active_admin/views/index_as_blog.rb +2 -1
  219. data/lib/active_admin/views/index_as_grid.rb +2 -1
  220. data/lib/active_admin/views/index_as_table.rb +24 -16
  221. data/lib/active_admin/views/pages/base.rb +22 -14
  222. data/lib/active_admin/views/pages/form.rb +1 -0
  223. data/lib/active_admin/views/pages/index.rb +16 -13
  224. data/lib/active_admin/views/pages/layout.rb +1 -0
  225. data/lib/active_admin/views/pages/page.rb +1 -0
  226. data/lib/active_admin/views/pages/show.rb +1 -0
  227. data/lib/active_admin/views/tabbed_navigation.rb +3 -2
  228. data/lib/active_admin/views/title_bar.rb +2 -1
  229. data/lib/active_admin/views.rb +2 -1
  230. data/lib/active_admin.rb +63 -64
  231. data/lib/activeadmin.rb +2 -1
  232. data/lib/generators/active_admin/assets/assets_generator.rb +3 -2
  233. data/lib/generators/active_admin/assets/templates/active_admin.scss +2 -2
  234. data/lib/generators/active_admin/devise/devise_generator.rb +6 -5
  235. data/lib/generators/active_admin/install/install_generator.rb +15 -8
  236. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +38 -1
  237. data/lib/generators/active_admin/install/templates/dashboard.rb +1 -0
  238. data/lib/generators/active_admin/page/page_generator.rb +2 -1
  239. data/lib/generators/active_admin/page/templates/page.rb +1 -0
  240. data/lib/generators/active_admin/resource/resource_generator.rb +4 -3
  241. data/lib/generators/active_admin/resource/templates/admin.rb.erb +4 -2
  242. data/lib/generators/active_admin/webpacker/plugins/jquery.js +7 -0
  243. data/lib/generators/active_admin/webpacker/templates/active_admin.js +5 -0
  244. data/lib/generators/active_admin/webpacker/templates/active_admin.scss +17 -0
  245. data/lib/generators/active_admin/webpacker/templates/print.scss +2 -0
  246. data/lib/generators/active_admin/webpacker/webpacker_generator.rb +27 -0
  247. data/lib/ransack_ext.rb +9 -8
  248. metadata +64 -132
  249. data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
  250. data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
  251. data/app/assets/images/active_admin/orderable.png +0 -0
  252. data/app/assets/javascripts/active_admin/base.es6 +0 -23
  253. data/app/assets/javascripts/active_admin/initializers/filters.es6 +0 -45
  254. data/app/assets/javascripts/active_admin/lib/active_admin.es6 +0 -41
  255. data/app/assets/javascripts/active_admin/lib/per_page.es6 +0 -47
  256. data/docs/.gitignore +0 -1
  257. data/docs/0-installation.md +0 -118
  258. data/docs/1-general-configuration.md +0 -204
  259. data/docs/10-custom-pages.md +0 -150
  260. data/docs/11-decorators.md +0 -59
  261. data/docs/12-arbre-components.md +0 -214
  262. data/docs/13-authorization-adapter.md +0 -285
  263. data/docs/14-gotchas.md +0 -138
  264. data/docs/2-resource-customization.md +0 -466
  265. data/docs/3-index-pages/custom-index.md +0 -35
  266. data/docs/3-index-pages/index-as-block.md +0 -19
  267. data/docs/3-index-pages/index-as-blog.md +0 -69
  268. data/docs/3-index-pages/index-as-grid.md +0 -27
  269. data/docs/3-index-pages/index-as-table.md +0 -227
  270. data/docs/3-index-pages.md +0 -328
  271. data/docs/4-csv-format.md +0 -74
  272. data/docs/5-forms.md +0 -232
  273. data/docs/6-show-pages.md +0 -81
  274. data/docs/7-sidebars.md +0 -75
  275. data/docs/8-custom-actions.md +0 -177
  276. data/docs/9-batch-actions.md +0 -237
  277. data/docs/CNAME +0 -1
  278. data/docs/Gemfile +0 -4
  279. data/docs/Gemfile.lock +0 -249
  280. data/docs/README.md +0 -24
  281. data/docs/_config.yml +0 -2
  282. data/docs/_includes/footer.html +0 -8
  283. data/docs/_includes/google-analytics.html +0 -16
  284. data/docs/_includes/head.html +0 -7
  285. data/docs/_includes/toc.html +0 -98
  286. data/docs/_includes/top-menu.html +0 -17
  287. data/docs/_layouts/default.html +0 -21
  288. data/docs/documentation.md +0 -60
  289. data/docs/images/activeadmin.png +0 -0
  290. data/docs/images/code-header.png +0 -0
  291. data/docs/images/divider.png +0 -0
  292. data/docs/images/features.png +0 -0
  293. data/docs/images/tidelift.svg +0 -14
  294. data/docs/index.html +0 -125
  295. data/docs/stylesheets/main.css +0 -1176
  296. /data/app/{assets/javascripts/active_admin/ext/jquery-ui.es6 → javascript/active_admin/ext/jquery-ui.js} +0 -0
  297. /data/app/{assets/javascripts/active_admin/ext/jquery.es6 → javascript/active_admin/ext/jquery.js} +0 -0
  298. /data/app/{assets/javascripts/active_admin/initializers/datepicker.es6 → javascript/active_admin/initializers/datepicker.js} +0 -0
  299. /data/app/{assets/javascripts/active_admin/initializers/tabs.es6 → javascript/active_admin/initializers/tabs.js} +0 -0
@@ -1,6 +1,7 @@
1
- require 'active_admin/router'
2
- require 'active_admin/application_settings'
3
- require 'active_admin/namespace_settings'
1
+ # frozen_string_literal: true
2
+ require "active_admin/router"
3
+ require "active_admin/application_settings"
4
+ require "active_admin/namespace_settings"
4
5
 
5
6
  module ActiveAdmin
6
7
  class Application
@@ -45,8 +46,8 @@ module ActiveAdmin
45
46
  include AssetRegistration
46
47
 
47
48
  # Event that gets triggered on load of Active Admin
48
- BeforeLoadEvent = 'active_admin.application.before_load'.freeze
49
- AfterLoadEvent = 'active_admin.application.after_load'.freeze
49
+ BeforeLoadEvent = "active_admin.application.before_load".freeze
50
+ AfterLoadEvent = "active_admin.application.after_load".freeze
50
51
 
51
52
  # Runs before the app's AA initializer
52
53
  def setup!
@@ -73,9 +74,9 @@ module ActiveAdmin
73
74
  def namespace(name)
74
75
  name ||= :root
75
76
 
76
- namespace = namespaces[name] ||= begin
77
+ namespace = namespaces[name.to_sym] ||= begin
77
78
  namespace = Namespace.new(self, name)
78
- ActiveSupport::Notifications.publish ActiveAdmin::Namespace::RegisterEvent, namespace
79
+ ActiveSupport::Notifications.instrument ActiveAdmin::Namespace::RegisterEvent, { active_admin_namespace: namespace }
79
80
  namespace
80
81
  end
81
82
 
@@ -111,10 +112,10 @@ module ActiveAdmin
111
112
  # To reload everything simply call `ActiveAdmin.unload!`
112
113
  def load!
113
114
  unless loaded?
114
- ActiveSupport::Notifications.publish BeforeLoadEvent, self # before_load hook
115
- files.each { |file| load file } # load files
116
- namespace(default_namespace) # init AA resources
117
- ActiveSupport::Notifications.publish AfterLoadEvent, self # after_load hook
115
+ ActiveSupport::Notifications.instrument BeforeLoadEvent, { active_admin_application: self } # before_load hook
116
+ files.each { |file| load file } # load files
117
+ namespace(default_namespace) # init AA resources
118
+ ActiveSupport::Notifications.instrument AfterLoadEvent, { active_admin_application: self } # after_load hook
118
119
  @@loaded = true
119
120
  end
120
121
  end
@@ -125,7 +126,7 @@ module ActiveAdmin
125
126
 
126
127
  # Returns ALL the files to be loaded
127
128
  def files
128
- load_paths.flatten.compact.uniq.flat_map { |path| Dir["#{path}/**/*.rb"] }
129
+ load_paths.flatten.compact.uniq.flat_map { |path| Dir["#{path}/**/*.rb"].sort }
129
130
  end
130
131
 
131
132
  # Creates all the necessary routes for the ActiveAdmin configurations
@@ -144,13 +145,13 @@ module ActiveAdmin
144
145
 
145
146
  # Adds before, around and after filters to all controllers.
146
147
  # Example usage:
147
- # ActiveAdmin.before_filter :authenticate_admin!
148
+ # ActiveAdmin.before_action :authenticate_admin!
148
149
  #
149
150
  AbstractController::Callbacks::ClassMethods.public_instance_methods.
150
- select { |m| m.match(/(filter|action)/) }.each do |name|
151
+ select { |m| m.match(/_action\z/) }.each do |name|
151
152
  define_method name do |*args, &block|
152
- controllers_for_filters.each do |controller|
153
- controller.public_send name, *args, &block
153
+ ActiveSupport.on_load(:active_admin_controller) do
154
+ public_send name, *args, &block
154
155
  end
155
156
  end
156
157
  end
@@ -164,9 +165,8 @@ module ActiveAdmin
164
165
  private
165
166
 
166
167
  def register_default_assets
167
- register_stylesheet 'active_admin.css', media: 'screen'
168
- register_stylesheet 'active_admin/print.css', media: 'print'
169
- register_javascript 'active_admin.js'
168
+ register_stylesheet "active_admin.css", media: "all"
169
+ register_javascript "active_admin.js"
170
170
  end
171
171
 
172
172
  # Since app/admin is alphabetically before app/models, we have to remove it
@@ -176,7 +176,7 @@ module ActiveAdmin
176
176
  # files from being loaded twice in production.
177
177
  def remove_active_admin_load_paths_from_rails_autoload_and_eager_load
178
178
  ActiveSupport::Dependencies.autoload_paths -= load_paths
179
- Rails.application.config.eager_load_paths -= load_paths
179
+ Rails.application.config.eager_load_paths -= load_paths
180
180
  end
181
181
 
182
182
  # Hook into the Rails code reloading mechanism so that things are reloaded
@@ -1,4 +1,5 @@
1
- require 'active_admin/settings_node'
1
+ # frozen_string_literal: true
2
+ require "active_admin/settings_node"
2
3
 
3
4
  module ActiveAdmin
4
5
  class ApplicationSettings < SettingsNode
@@ -15,7 +16,7 @@ module ActiveAdmin
15
16
  # Load paths for admin configurations. Add folders to this load path
16
17
  # to load up other resources for administration. External gems can
17
18
  # include their paths in this load path to provide active_admin UIs
18
- register :load_paths, [File.expand_path('app/admin', Rails.root)]
19
+ register :load_paths, [File.expand_path("app/admin", Rails.root)]
19
20
 
20
21
  # Set default localize format for Date/Time values
21
22
  register :localize_format, :long
@@ -34,7 +35,7 @@ module ActiveAdmin
34
35
  :to_s ]
35
36
 
36
37
  # To make debugging easier, by default don't stream in development
37
- register :disable_streaming_in, ['development']
38
+ register :disable_streaming_in, ["development"]
38
39
 
39
40
  # Remove sensitive attributes from being displayed, made editable, or exported by default
40
41
  register :filter_attributes, [:encrypted_password, :password, :password_confirmation]
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  module AssetRegistration
3
4
 
@@ -13,12 +14,12 @@ module ActiveAdmin
13
14
  stylesheets.clear
14
15
  end
15
16
 
16
- def register_javascript(name)
17
- javascripts.add name
17
+ def register_javascript(path, options = {})
18
+ javascripts[path] = options
18
19
  end
19
20
 
20
21
  def javascripts
21
- @javascripts ||= Set.new
22
+ @javascripts ||= {}
22
23
  end
23
24
 
24
25
  def clear_javascripts!
@@ -1,10 +1,13 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
 
3
4
  # Default Authorization permissions for Active Admin
4
5
  module Authorization
5
- READ = :read
6
- CREATE = :create
7
- UPDATE = :update
6
+ READ = :read
7
+ NEW = :new
8
+ CREATE = :create
9
+ EDIT = :edit
10
+ UPDATE = :update
8
11
  DESTROY = :destroy
9
12
  end
10
13
 
@@ -1,15 +1,16 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  class BaseController < ::InheritedResources::Base
3
4
  module Authorization
4
5
  extend ActiveSupport::Concern
5
6
 
6
7
  ACTIONS_DICTIONARY = {
7
- index: ActiveAdmin::Authorization::READ,
8
- show: ActiveAdmin::Authorization::READ,
9
- new: ActiveAdmin::Authorization::CREATE,
10
- create: ActiveAdmin::Authorization::CREATE,
11
- edit: ActiveAdmin::Authorization::UPDATE,
12
- update: ActiveAdmin::Authorization::UPDATE,
8
+ index: ActiveAdmin::Authorization::READ,
9
+ show: ActiveAdmin::Authorization::READ,
10
+ new: ActiveAdmin::Authorization::NEW,
11
+ create: ActiveAdmin::Authorization::CREATE,
12
+ edit: ActiveAdmin::Authorization::EDIT,
13
+ update: ActiveAdmin::Authorization::UPDATE,
13
14
  destroy: ActiveAdmin::Authorization::DESTROY
14
15
  }
15
16
 
@@ -52,9 +53,10 @@ module ActiveAdmin
52
53
  # an ActiveAdmin::AccessDenied.
53
54
  def authorize!(action, subject = nil)
54
55
  unless authorized? action, subject
55
- raise ActiveAdmin::AccessDenied.new(current_active_admin_user,
56
- action,
57
- subject)
56
+ raise ActiveAdmin::AccessDenied.new(
57
+ current_active_admin_user,
58
+ action,
59
+ subject)
58
60
  end
59
61
  end
60
62
 
@@ -80,7 +82,7 @@ module ActiveAdmin
80
82
  def active_admin_authorization_adapter
81
83
  adapter = active_admin_namespace.authorization_adapter
82
84
  if adapter.is_a? String
83
- ActiveSupport::Dependencies.constantize adapter
85
+ adapter.constantize
84
86
  else
85
87
  adapter
86
88
  end
@@ -112,9 +114,9 @@ module ActiveAdmin
112
114
  redirect_backwards_or_to_root
113
115
  end
114
116
 
115
- format.csv { render body: error, status: :unauthorized }
116
- format.json { render json: { error: error }, status: :unauthorized }
117
- format.xml { render xml: "<error>#{error}</error>", status: :unauthorized }
117
+ format.csv { render body: error, status: :unauthorized }
118
+ format.json { render json: { error: error }, status: :unauthorized }
119
+ format.xml { render xml: "<error>#{error}</error>", status: :unauthorized }
118
120
  end
119
121
  end
120
122
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  class BaseController < ::InheritedResources::Base
3
4
  module Menu
@@ -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
  #
@@ -33,7 +34,7 @@ module ActiveAdmin
33
34
  def initialize(options = {}, &block)
34
35
  @resource = options.delete(:resource)
35
36
  @columns = []
36
- @options = options
37
+ @options = ActiveAdmin.application.csv_options.merge options
37
38
  @block = block
38
39
  end
39
40
 
@@ -42,26 +43,19 @@ 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
- options = ActiveAdmin.application.csv_options.merge self.options
48
- bom = options.delete :byte_order_mark
46
+ columns = exec_columns controller.view_context
47
+ bom = options[:byte_order_mark]
49
48
  column_names = options.delete(:column_names) { true }
50
- csv_options = options.except :encoding_options, :humanize_name
49
+ csv_options = options.except :encoding_options, :humanize_name, :byte_order_mark
51
50
 
52
51
  csv << bom if bom
53
52
 
54
53
  if column_names
55
- csv << CSV.generate_line(columns.map { |c| encode c.name, options }, csv_options)
54
+ csv << CSV.generate_line(columns.map { |c| encode c.name, options }, **csv_options)
56
55
  end
57
56
 
58
- ActiveRecord::Base.uncached do
59
- (1..paginated_collection.total_pages).each do |page|
60
- paginated_collection(page).each do |resource|
61
- resource = controller.send :apply_decorator, resource
62
- csv << CSV.generate_line(build_row(resource, columns, options), csv_options)
63
- end
64
- end
57
+ controller.send(:in_paginated_batches) do |resource|
58
+ csv << CSV.generate_line(build_row(resource, columns, options), **csv_options)
65
59
  end
66
60
 
67
61
  csv
@@ -82,7 +76,11 @@ module ActiveAdmin
82
76
 
83
77
  def encode(content, options)
84
78
  if options[:encoding]
85
- content.to_s.encode options[:encoding], options[:encoding_options]
79
+ if options[:encoding_options]
80
+ content.to_s.encode options[:encoding], **options[:encoding_options]
81
+ else
82
+ content.to_s.encode options[:encoding]
83
+ end
86
84
  else
87
85
  content
88
86
  end
@@ -121,13 +119,5 @@ module ActiveAdmin
121
119
  def column_transitive_options
122
120
  @column_transitive_options ||= @options.slice(*COLUMN_TRANSITIVE_OPTIONS)
123
121
  end
124
-
125
- def paginated_collection(page_no = 1)
126
- @collection.public_send(Kaminari.config.page_method_name, page_no).per(batch_size)
127
- end
128
-
129
- def batch_size
130
- 1000
131
- end
132
122
  end
133
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
@@ -55,10 +56,6 @@ module ActiveAdmin
55
56
  Matcher.new name.to_s
56
57
  end
57
58
 
58
- def self.supports_zeitwerk?
59
- rails >= "6.0.0.beta3" && RUBY_ENGINE != "jruby"
60
- end
61
-
62
59
  class Matcher
63
60
  attr_reader :name
64
61
 
@@ -91,7 +88,7 @@ module ActiveAdmin
91
88
  end
92
89
 
93
90
  def inspect
94
- info = spec ? "#{spec.name} #{spec.version}" : '(missing)'
91
+ info = spec ? "#{spec.name} #{spec.version}" : "(missing)"
95
92
  "<ActiveAdmin::Dependency::Matcher for #{info}>"
96
93
  end
97
94
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  module Deprecation
3
4
  module_function