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,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,19 +68,19 @@ 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
75
+ end
74
76
 
75
- def destroy
76
- destroy! do |success, failure|
77
- success.html do
78
- redirect_back fallback_location: active_admin_root
79
- end
80
- failure.html do
81
- redirect_back fallback_location: active_admin_root
82
- end
77
+ def destroy
78
+ destroy! do |success, failure|
79
+ success.html do
80
+ redirect_back fallback_location: active_admin_root
81
+ end
82
+ failure.html do
83
+ redirect_back fallback_location: active_admin_root
83
84
  end
84
85
  end
85
86
  end
@@ -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,20 @@ 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::READ then subject.is_a?(Class) ? :index? : :show?
52
48
  when Auth::DESTROY then subject.is_a?(Class) ? :destroy_all? : :destroy?
53
49
  else "#{action}?"
54
50
  end
@@ -56,8 +52,42 @@ module ActiveAdmin
56
52
 
57
53
  private
58
54
 
55
+ def policy_target(subject)
56
+ case subject
57
+ when nil then resource
58
+ when Class then subject.new
59
+ else subject
60
+ end
61
+ end
62
+
63
+ # This method is needed to fallback to our previous policy searching logic.
64
+ # I.e.: when class name contains `default_policy_namespace` (eg: ShopAdmin)
65
+ # we should try to search it without namespace. This is because that's
66
+ # the only thing that worked in this case before we fixed our buggy namespace
67
+ # detection, so people are probably relying on it.
68
+ # This fallback might be removed in future versions of ActiveAdmin, so
69
+ # pundit_adapter search will work consistently with provided namespaces
70
+ def compat_policy(subject)
71
+ return unless default_policy_namespace
72
+
73
+ target = policy_target(subject)
74
+
75
+ return unless target.class.to_s.include?(default_policy_module) &&
76
+ (policy = policy(target))
77
+
78
+ policy_name = policy.class.to_s
79
+
80
+ Deprecation.warn "You have `pundit_policy_namespace` configured as `#{default_policy_namespace}`, " \
81
+ "but ActiveAdmin was unable to find policy #{default_policy_module}::#{policy_name}. " \
82
+ "#{policy_name} will be used instead. " \
83
+ "This behavior will be removed in future versions of ActiveAdmin. " \
84
+ "To fix this warning, move your #{policy_name} policy to the #{default_policy_module} namespace"
85
+
86
+ policy
87
+ end
88
+
59
89
  def namespace(object)
60
- if default_policy_namespace && !object.class.to_s.include?(default_policy_namespace.to_s.camelize)
90
+ if default_policy_namespace && !object.class.to_s.start_with?("#{default_policy_module}::")
61
91
  [default_policy_namespace.to_sym, object]
62
92
  else
63
93
  object
@@ -68,7 +98,7 @@ module ActiveAdmin
68
98
  ActiveAdmin.application.pundit_default_policy && ActiveAdmin.application.pundit_default_policy.constantize
69
99
  end
70
100
 
71
- def default_policy(user, subject)
101
+ def default_policy(subject)
72
102
  default_policy_class.new(user, subject)
73
103
  end
74
104
 
@@ -76,6 +106,18 @@ module ActiveAdmin
76
106
  ActiveAdmin.application.pundit_policy_namespace
77
107
  end
78
108
 
109
+ def default_policy_module
110
+ default_policy_namespace.to_s.camelize
111
+ end
112
+
113
+ def policy(target)
114
+ policies[target] ||= Pundit.policy(user, target)
115
+ end
116
+
117
+ def policies
118
+ @policies ||= {}
119
+ end
120
+
79
121
  end
80
122
 
81
123
  end
@@ -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::NEW, 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::EDIT, 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
@@ -14,6 +15,9 @@ module ActiveAdmin
14
15
  # The resource which initiated this relationship
15
16
  attr_reader :owner
16
17
 
18
+ # The name of the relation
19
+ attr_reader :target_name
20
+
17
21
  def initialize(owner, target_name, options = {})
18
22
  @owner = owner
19
23
  @target_name = target_name
@@ -43,7 +47,7 @@ module ActiveAdmin
43
47
  end
44
48
 
45
49
  def to_param
46
- :"#{@target_name}_id"
50
+ (@options[:param] || "#{@target_name}_id").to_sym
47
51
  end
48
52
  end
49
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
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  class Resource
3
4
 
@@ -7,12 +8,12 @@ module ActiveAdmin
7
8
  # To disable this menu item, call `menu(false)` from the DSL
8
9
  def menu_item_options=(options)
9
10
  if options == false
10
- @include_in_menu = false
11
+ @include_in_menu = false
11
12
  @menu_item_options = {}
12
13
  else
13
14
  @include_in_menu = true
14
15
  @navigation_menu_name = options[:menu_name]
15
- @menu_item_options = default_menu_options.merge options
16
+ @menu_item_options = default_menu_options.merge options
16
17
  end
17
18
  end
18
19
 
@@ -27,8 +28,8 @@ module ActiveAdmin
27
28
  {
28
29
  id: resource_name.plural,
29
30
  label: proc { resource.plural_resource_label },
30
- url: proc { resource.route_collection_path(params, url_options) },
31
- if: proc { authorized?(Auth::READ, menu_resource_class) }
31
+ url: proc { resource.route_collection_path(params, url_options) },
32
+ if: proc { authorized?(Auth::READ, menu_resource_class) }
32
33
  }
33
34
  end
34
35
 
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+ module ActiveAdmin
3
+ class Model
4
+ def initialize(resource, record)
5
+ @record = record
6
+
7
+ if resource
8
+ @record.extend(resource.resource_name_extension)
9
+ end
10
+ end
11
+
12
+ def to_model
13
+ @record
14
+ end
15
+ end
16
+ end
@@ -1,10 +1,11 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  class Resource
3
4
 
4
5
  module Naming
5
6
  def resource_name
6
7
  @resource_name ||= begin
7
- as = @options[:as].gsub /\s/, '' if @options[:as]
8
+ as = @options[:as].gsub /\s/, "" if @options[:as]
8
9
 
9
10
  if as || !resource_class.respond_to?(:model_name)
10
11
  Name.new resource_class, as
@@ -17,13 +18,13 @@ module ActiveAdmin
17
18
  # Returns the name to call this resource such as "Bank Account"
18
19
  def resource_label
19
20
  resource_name.translate count: 1,
20
- default: resource_name.to_s.gsub('::', ' ').titleize
21
+ default: resource_name.to_s.gsub("::", " ").titleize
21
22
  end
22
23
 
23
24
  # Returns the plural version of this resource such as "Bank Accounts"
24
25
  def plural_resource_label(options = {})
25
- defaults = { count: Helpers::I18n::PLURAL_MANY_COUNT,
26
- default: resource_label.pluralize.titleize }
26
+ defaults = { count: Helpers::I18n::PLURAL_MANY_COUNT,
27
+ default: resource_label.pluralize.titleize }
27
28
  resource_name.translate defaults.merge options
28
29
  end
29
30
 
@@ -46,7 +47,7 @@ module ActiveAdmin
46
47
  end
47
48
 
48
49
  def translate(options = {})
49
- I18n.t i18n_key, { scope: [:activerecord, :models] }.merge(options)
50
+ I18n.t i18n_key, **{ scope: [:activerecord, :models] }.merge(options)
50
51
  end
51
52
 
52
53
  def route_key
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  class Resource
3
4
  module Ordering
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  class Resource
3
4
  module PagePresenters
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
 
3
4
  class Resource
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  class Resource
3
4
  module Routes
@@ -42,8 +43,6 @@ module ActiveAdmin
42
43
  config[:route_collection_name] == config[:route_instance_name]
43
44
  end
44
45
 
45
- private
46
-
47
46
  class RouteBuilder
48
47
  def initialize(resource)
49
48
  @resource = resource
@@ -98,19 +97,19 @@ module ActiveAdmin
98
97
  suffix = options[:suffix] || "path"
99
98
  route = []
100
99
 
101
- route << options[:action] # "batch_action", "edit" or "new"
102
- route << resource.route_prefix # "admin"
100
+ route << options[:action] # "batch_action", "edit" or "new"
101
+ route << resource.route_prefix # "admin"
103
102
  route << belongs_to_name if nested? # "category"
104
- route << resource_path_name # "posts" or "post"
105
- route << suffix # "path" or "index path"
103
+ route << resource_path_name # "posts" or "post"
104
+ route << suffix # "path" or "index path"
106
105
 
107
- route.compact.join('_').to_sym # :admin_category_posts_path
106
+ route.compact.join("_").to_sym # :admin_category_posts_path
108
107
  end
109
108
 
110
109
  # @return params to pass to instance path
111
110
  def route_instance_params(instance)
112
111
  if nested?
113
- [instance.public_send(belongs_to_name).to_param, instance.to_param]
112
+ [instance.public_send(belongs_to_target_name).to_param, instance.to_param]
114
113
  else
115
114
  instance.to_param
116
115
  end
@@ -123,11 +122,19 @@ module ActiveAdmin
123
122
  end
124
123
 
125
124
  def nested?
126
- resource.belongs_to? && resource.belongs_to_config.required?
125
+ resource.belongs_to? && belongs_to_config.required?
126
+ end
127
+
128
+ def belongs_to_target_name
129
+ belongs_to_config.target_name
127
130
  end
128
131
 
129
132
  def belongs_to_name
130
- resource.belongs_to_config.target.resource_name.singular if nested?
133
+ belongs_to_config.target.resource_name.singular
134
+ end
135
+
136
+ def belongs_to_config
137
+ resource.belongs_to_config
131
138
  end
132
139
 
133
140
  def routes
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  class Resource
3
4
  module ScopeTo
@@ -38,10 +39,10 @@ module ActiveAdmin
38
39
  options = args.extract_options!
39
40
  method = args.first
40
41
 
41
- scope_to_config[:method] = block || method
42
- scope_to_config[:association_method] = options[:association_method]
43
- scope_to_config[:if] = options[:if]
44
- scope_to_config[:unless] = options[:unless]
42
+ scope_to_config[:method] = block || method
43
+ scope_to_config[:association_method] = options[:association_method]
44
+ scope_to_config[:if] = options[:if]
45
+ scope_to_config[:unless] = options[:unless]
45
46
 
46
47
  end
47
48
 
@@ -55,10 +56,10 @@ module ActiveAdmin
55
56
 
56
57
  def scope_to_config
57
58
  @scope_to_config ||= {
58
- method: nil,
59
+ method: nil,
59
60
  association_method: nil,
60
- if: nil,
61
- unless: nil
61
+ if: nil,
62
+ unless: nil
62
63
  }
63
64
  end
64
65
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  class Resource
3
4
  module Scopes
@@ -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