activeadmin 1.3.0 → 2.13.1

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 (582) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +764 -135
  3. data/CODE_OF_CONDUCT.md +64 -12
  4. data/CONTRIBUTING.md +83 -61
  5. data/README.md +73 -19
  6. data/app/assets/javascripts/active_admin/base.js +524 -0
  7. data/app/assets/stylesheets/active_admin/_base.scss +53 -37
  8. data/app/assets/stylesheets/active_admin/_forms.scss +3 -25
  9. data/app/assets/stylesheets/active_admin/_header.scss +40 -8
  10. data/app/assets/stylesheets/active_admin/_mixins.scss +1 -1
  11. data/{vendor → app}/assets/stylesheets/active_admin/_normalize.scss +25 -123
  12. data/app/assets/stylesheets/active_admin/{print.scss → _print.scss} +2 -2
  13. data/app/assets/stylesheets/active_admin/components/_comments.scss +2 -2
  14. data/app/assets/stylesheets/active_admin/components/_date_picker.scss +1 -2
  15. data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +0 -1
  16. data/app/assets/stylesheets/active_admin/components/_scopes.scss +3 -0
  17. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +0 -5
  18. data/app/assets/stylesheets/active_admin/components/_tables.scss +1 -2
  19. data/app/assets/stylesheets/active_admin/components/_tabs.scss +1 -1
  20. data/app/assets/stylesheets/active_admin/mixins/_all.scss +8 -8
  21. data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +1 -1
  22. data/app/assets/stylesheets/active_admin/mixins/_variables.scss +17 -0
  23. data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +1 -1
  24. data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +0 -1
  25. data/app/javascript/active_admin/base.js +28 -0
  26. data/app/javascript/active_admin/ext/jquery-ui.js +7 -0
  27. data/app/javascript/active_admin/ext/jquery.js +9 -0
  28. data/app/javascript/active_admin/initializers/batch-actions.js +61 -0
  29. data/app/javascript/active_admin/initializers/checkbox-toggler.js +3 -0
  30. data/app/javascript/active_admin/initializers/datepicker.js +16 -0
  31. data/app/javascript/active_admin/initializers/dropdown-menu.js +9 -0
  32. data/app/javascript/active_admin/initializers/filters.js +10 -0
  33. data/app/javascript/active_admin/initializers/has-many.js +98 -0
  34. data/app/javascript/active_admin/initializers/per-page.js +13 -0
  35. data/app/javascript/active_admin/initializers/table-checkbox-toggler.js +3 -0
  36. data/app/javascript/active_admin/initializers/tabs.js +6 -0
  37. data/app/javascript/active_admin/lib/checkbox-toggler.js +49 -0
  38. data/app/javascript/active_admin/lib/dropdown-menu.js +116 -0
  39. data/app/javascript/active_admin/lib/filters.js +39 -0
  40. data/app/javascript/active_admin/lib/modal-dialog.js +63 -0
  41. data/app/javascript/active_admin/lib/per-page.js +38 -0
  42. data/app/javascript/active_admin/lib/table-checkbox-toggler.js +38 -0
  43. data/app/javascript/active_admin/lib/utils.js +40 -0
  44. data/app/views/active_admin/devise/confirmations/new.html.erb +2 -2
  45. data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +1 -1
  46. data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +2 -2
  47. data/app/views/active_admin/devise/passwords/edit.html.erb +2 -2
  48. data/app/views/active_admin/devise/passwords/new.html.erb +2 -2
  49. data/app/views/active_admin/devise/registrations/new.html.erb +2 -3
  50. data/app/views/active_admin/devise/sessions/new.html.erb +1 -1
  51. data/app/views/active_admin/devise/shared/_error_messages.html.erb +15 -0
  52. data/app/views/active_admin/devise/shared/_links.erb +1 -1
  53. data/app/views/active_admin/devise/unlocks/new.html.erb +2 -2
  54. data/app/views/active_admin/page/index.html.arb +1 -0
  55. data/app/views/active_admin/resource/edit.html.arb +1 -0
  56. data/app/views/active_admin/resource/index.html.arb +1 -0
  57. data/app/views/active_admin/resource/new.html.arb +1 -0
  58. data/app/views/active_admin/resource/show.html.arb +1 -0
  59. data/app/views/kaminari/active_admin_countless/_first_page.html.erb +11 -0
  60. data/app/views/kaminari/active_admin_countless/_gap.html.erb +8 -0
  61. data/app/views/kaminari/active_admin_countless/_next_page.html.erb +11 -0
  62. data/app/views/kaminari/active_admin_countless/_page.html.erb +12 -0
  63. data/app/views/kaminari/active_admin_countless/_paginator.html.erb +24 -0
  64. data/app/views/kaminari/active_admin_countless/_prev_page.html.erb +11 -0
  65. data/app/views/layouts/active_admin.html.arb +1 -0
  66. data/app/views/layouts/active_admin_logged_out.html.erb +17 -7
  67. data/config/locales/ar.yml +9 -8
  68. data/config/locales/az.yml +138 -0
  69. data/config/locales/bg.yml +1 -1
  70. data/config/locales/bs.yml +1 -0
  71. data/config/locales/ca.yml +1 -1
  72. data/config/locales/cs.yml +1 -0
  73. data/config/locales/da.yml +1 -0
  74. data/config/locales/de-CH.yml +1 -0
  75. data/config/locales/de.yml +29 -0
  76. data/config/locales/el.yml +1 -0
  77. data/config/locales/en-CA.yml +4 -3
  78. data/config/locales/en-GB.yml +4 -3
  79. data/config/locales/en.yml +23 -4
  80. data/config/locales/eo.yml +1 -0
  81. data/config/locales/es-MX.yml +3 -1
  82. data/config/locales/es.yml +26 -6
  83. data/config/locales/fa.yml +1 -0
  84. data/config/locales/fi.yml +2 -1
  85. data/config/locales/fr.yml +6 -5
  86. data/config/locales/he.yml +1 -1
  87. data/config/locales/hr.yml +1 -0
  88. data/config/locales/hu.yml +5 -0
  89. data/config/locales/id.yml +1 -0
  90. data/config/locales/it.yml +23 -0
  91. data/config/locales/ja.yml +4 -3
  92. data/config/locales/ko.yml +2 -1
  93. data/config/locales/lt.yml +3 -2
  94. data/config/locales/lv.yml +3 -2
  95. data/config/locales/mk.yml +134 -0
  96. data/config/locales/nb.yml +16 -5
  97. data/config/locales/nl.yml +13 -1
  98. data/config/locales/pl.yml +72 -3
  99. data/config/locales/pt-BR.yml +1 -0
  100. data/config/locales/pt-PT.yml +1 -0
  101. data/config/locales/ro.yml +4 -2
  102. data/config/locales/ru.yml +3 -0
  103. data/config/locales/sk.yml +60 -0
  104. data/config/locales/sv-SE.yml +1 -0
  105. data/config/locales/tr.yml +10 -0
  106. data/config/locales/uk.yml +3 -0
  107. data/config/locales/vi.yml +7 -5
  108. data/config/locales/zh-CN.yml +34 -5
  109. data/config/locales/zh-TW.yml +1 -0
  110. data/docs/.gitignore +1 -0
  111. data/docs/0-installation.md +29 -5
  112. data/docs/1-general-configuration.md +36 -1
  113. data/docs/10-custom-pages.md +14 -0
  114. data/docs/11-decorators.md +16 -5
  115. data/docs/12-arbre-components.md +41 -1
  116. data/docs/13-authorization-adapter.md +41 -22
  117. data/docs/2-resource-customization.md +19 -5
  118. data/docs/3-index-pages/custom-index.md +1 -1
  119. data/docs/3-index-pages/index-as-blog.md +1 -1
  120. data/docs/3-index-pages/index-as-table.md +12 -5
  121. data/docs/3-index-pages.md +18 -1
  122. data/docs/5-forms.md +25 -5
  123. data/docs/6-show-pages.md +12 -0
  124. data/docs/8-custom-actions.md +12 -1
  125. data/docs/9-batch-actions.md +2 -2
  126. data/docs/CNAME +1 -1
  127. data/docs/Gemfile +4 -2
  128. data/docs/Gemfile.lock +283 -0
  129. data/docs/_config.yml +3 -1
  130. data/docs/_includes/toc.html +1 -1
  131. data/docs/_includes/top-menu.html +9 -1
  132. data/docs/documentation.md +2 -2
  133. data/docs/images/tidelift.svg +14 -0
  134. data/docs/index.html +110 -9
  135. data/docs/stylesheets/main.css +55 -2
  136. data/lib/active_admin/abstract_view_factory.rb +14 -51
  137. data/lib/active_admin/application.rb +65 -172
  138. data/lib/active_admin/application_settings.rb +43 -0
  139. data/lib/active_admin/asset_registration.rb +1 -8
  140. data/lib/active_admin/authorization_adapter.rb +4 -3
  141. data/lib/active_admin/base_controller/authorization.rb +18 -18
  142. data/lib/active_admin/base_controller/menu.rb +1 -0
  143. data/lib/active_admin/base_controller.rb +12 -11
  144. data/lib/active_admin/batch_actions/controller.rb +6 -5
  145. data/lib/active_admin/batch_actions/resource_extension.rb +16 -10
  146. data/lib/active_admin/batch_actions/views/batch_action_form.rb +4 -3
  147. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +7 -6
  148. data/lib/active_admin/batch_actions/views/selection_cells.rb +4 -3
  149. data/lib/active_admin/batch_actions.rb +1 -0
  150. data/lib/active_admin/callbacks.rb +2 -1
  151. data/lib/active_admin/cancan_adapter.rb +2 -1
  152. data/lib/active_admin/collection_decorator.rb +32 -0
  153. data/lib/active_admin/component.rb +1 -0
  154. data/lib/active_admin/controller_action.rb +3 -1
  155. data/lib/active_admin/csv_builder.rb +15 -23
  156. data/lib/active_admin/dependency.rb +14 -77
  157. data/lib/active_admin/deprecation.rb +1 -25
  158. data/lib/active_admin/devise.rb +16 -5
  159. data/lib/active_admin/dsl.rb +3 -9
  160. data/lib/active_admin/dynamic_setting.rb +39 -0
  161. data/lib/active_admin/dynamic_settings_node.rb +29 -0
  162. data/lib/active_admin/engine.rb +16 -7
  163. data/lib/active_admin/error.rb +5 -4
  164. data/lib/active_admin/filters/active.rb +2 -1
  165. data/lib/active_admin/filters/active_filter.rb +12 -11
  166. data/lib/active_admin/filters/active_sidebar.rb +8 -30
  167. data/lib/active_admin/filters/dsl.rb +1 -0
  168. data/lib/active_admin/filters/forms.rb +13 -9
  169. data/lib/active_admin/filters/formtastic_addons.rb +3 -7
  170. data/lib/active_admin/filters/resource_extension.rb +30 -5
  171. data/lib/active_admin/filters.rb +8 -7
  172. data/lib/active_admin/form_builder.rb +110 -70
  173. data/lib/active_admin/generators/boilerplate.rb +13 -4
  174. data/lib/active_admin/helpers/collection.rb +2 -0
  175. data/lib/active_admin/helpers/i18n.rb +1 -0
  176. data/lib/active_admin/helpers/optional_display.rb +3 -2
  177. data/lib/active_admin/helpers/routes/url_helpers.rb +1 -0
  178. data/lib/active_admin/helpers/scope_chain.rb +2 -0
  179. data/lib/active_admin/inputs/datepicker_input.rb +10 -2
  180. data/lib/active_admin/inputs/filters/base/search_method_select.rb +7 -6
  181. data/lib/active_admin/inputs/filters/base.rb +2 -1
  182. data/lib/active_admin/inputs/filters/boolean_input.rb +2 -1
  183. data/lib/active_admin/inputs/filters/check_boxes_input.rb +2 -1
  184. data/lib/active_admin/inputs/filters/date_picker_input.rb +1 -0
  185. data/lib/active_admin/inputs/filters/date_range_input.rb +16 -12
  186. data/lib/active_admin/inputs/filters/numeric_input.rb +1 -0
  187. data/lib/active_admin/inputs/filters/select_input.rb +3 -2
  188. data/lib/active_admin/inputs/filters/string_input.rb +1 -0
  189. data/lib/active_admin/inputs/filters/text_input.rb +1 -0
  190. data/lib/active_admin/inputs.rb +1 -0
  191. data/lib/active_admin/localizers/resource_localizer.rb +4 -3
  192. data/lib/active_admin/localizers.rb +2 -1
  193. data/lib/active_admin/menu.rb +9 -11
  194. data/lib/active_admin/menu_collection.rb +1 -0
  195. data/lib/active_admin/menu_item.rb +11 -38
  196. data/lib/active_admin/namespace.rb +33 -20
  197. data/lib/active_admin/namespace_settings.rb +127 -0
  198. data/lib/active_admin/order_clause.rb +3 -2
  199. data/lib/active_admin/orm/active_record/comments/comment.rb +5 -4
  200. data/lib/active_admin/orm/active_record/comments/namespace_helper.rb +1 -0
  201. data/lib/active_admin/orm/active_record/comments/resource_helper.rb +1 -0
  202. data/lib/active_admin/orm/active_record/comments/show_page_helper.rb +1 -0
  203. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +30 -24
  204. data/lib/active_admin/orm/active_record/comments/views.rb +3 -2
  205. data/lib/active_admin/orm/active_record/comments.rb +35 -23
  206. data/lib/active_admin/orm/active_record.rb +2 -1
  207. data/lib/active_admin/orm/mongoid.rb +1 -0
  208. data/lib/active_admin/page.rb +2 -1
  209. data/lib/active_admin/page_controller.rb +1 -0
  210. data/lib/active_admin/page_dsl.rb +2 -1
  211. data/lib/active_admin/page_presenter.rb +3 -1
  212. data/lib/active_admin/pundit_adapter.rb +73 -16
  213. data/lib/active_admin/resource/action_items.rb +12 -6
  214. data/lib/active_admin/resource/attributes.rb +9 -5
  215. data/lib/active_admin/resource/belongs_to.rb +9 -3
  216. data/lib/active_admin/resource/controllers.rb +2 -1
  217. data/lib/active_admin/resource/includes.rb +1 -0
  218. data/lib/active_admin/resource/menu.rb +6 -5
  219. data/lib/active_admin/resource/model.rb +16 -0
  220. data/lib/active_admin/resource/naming.rb +6 -5
  221. data/lib/active_admin/resource/ordering.rb +1 -0
  222. data/lib/active_admin/resource/page_presenters.rb +1 -0
  223. data/lib/active_admin/resource/pagination.rb +1 -0
  224. data/lib/active_admin/resource/routes.rb +26 -14
  225. data/lib/active_admin/resource/scope_to.rb +8 -7
  226. data/lib/active_admin/resource/scopes.rb +4 -3
  227. data/lib/active_admin/resource/sidebars.rb +3 -2
  228. data/lib/active_admin/resource.rb +37 -22
  229. data/lib/active_admin/resource_collection.rb +3 -2
  230. data/lib/active_admin/resource_controller/action_builder.rb +11 -0
  231. data/lib/active_admin/resource_controller/data_access.rb +31 -5
  232. data/lib/active_admin/resource_controller/decorators.rb +10 -31
  233. data/lib/active_admin/resource_controller/polymorphic_routes.rb +38 -0
  234. data/lib/active_admin/resource_controller/resource_class_methods.rb +3 -0
  235. data/lib/active_admin/resource_controller/scoping.rb +2 -1
  236. data/lib/active_admin/resource_controller/sidebars.rb +1 -0
  237. data/lib/active_admin/resource_controller/streaming.rb +9 -7
  238. data/lib/active_admin/resource_controller.rb +14 -10
  239. data/lib/active_admin/resource_dsl.rb +16 -28
  240. data/lib/active_admin/router.rb +91 -84
  241. data/lib/active_admin/scope.rb +20 -11
  242. data/lib/active_admin/settings_node.rb +20 -0
  243. data/lib/active_admin/sidebar_section.rb +4 -1
  244. data/lib/active_admin/version.rb +2 -1
  245. data/lib/active_admin/view_factory.rb +18 -17
  246. data/lib/active_admin/view_helpers/active_admin_application_helper.rb +1 -0
  247. data/lib/active_admin/view_helpers/auto_link_helper.rb +1 -0
  248. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +6 -5
  249. data/lib/active_admin/view_helpers/display_helper.rb +25 -8
  250. data/lib/active_admin/view_helpers/download_format_links_helper.rb +3 -1
  251. data/lib/active_admin/view_helpers/fields_for.rb +3 -2
  252. data/lib/active_admin/view_helpers/flash_helper.rb +1 -0
  253. data/lib/active_admin/view_helpers/form_helper.rb +1 -0
  254. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +4 -0
  255. data/lib/active_admin/view_helpers/scope_name_helper.rb +1 -0
  256. data/lib/active_admin/view_helpers/sidebar_helper.rb +1 -0
  257. data/lib/active_admin/view_helpers/title_helper.rb +1 -0
  258. data/lib/active_admin/view_helpers/view_factory_helper.rb +1 -0
  259. data/lib/active_admin/view_helpers.rb +2 -1
  260. data/lib/active_admin/views/action_items.rb +1 -0
  261. data/lib/active_admin/views/components/active_admin_form.rb +14 -8
  262. data/lib/active_admin/views/components/active_filters_sidebar_content.rb +59 -0
  263. data/lib/active_admin/views/components/attributes_table.rb +9 -8
  264. data/lib/active_admin/views/components/blank_slate.rb +2 -1
  265. data/lib/active_admin/views/components/columns.rb +1 -0
  266. data/lib/active_admin/views/components/dropdown_menu.rb +7 -9
  267. data/lib/active_admin/views/components/index_list.rb +4 -3
  268. data/lib/active_admin/views/components/menu.rb +33 -0
  269. data/lib/active_admin/views/components/menu_item.rb +59 -0
  270. data/lib/active_admin/views/components/paginated_collection.rb +22 -20
  271. data/lib/active_admin/views/components/panel.rb +2 -1
  272. data/lib/active_admin/views/components/scopes.rb +18 -8
  273. data/lib/active_admin/views/components/sidebar.rb +14 -0
  274. data/lib/active_admin/views/components/sidebar_section.rb +1 -3
  275. data/lib/active_admin/views/components/site_title.rb +7 -7
  276. data/lib/active_admin/views/components/status_tag.rb +14 -26
  277. data/lib/active_admin/views/components/table_for.rb +22 -29
  278. data/lib/active_admin/views/components/tabs.rb +18 -5
  279. data/lib/active_admin/views/components/unsupported_browser.rb +1 -0
  280. data/lib/active_admin/views/footer.rb +6 -8
  281. data/lib/active_admin/views/header.rb +4 -15
  282. data/lib/active_admin/views/index_as_block.rb +1 -0
  283. data/lib/active_admin/views/index_as_blog.rb +3 -2
  284. data/lib/active_admin/views/index_as_grid.rb +27 -26
  285. data/lib/active_admin/views/index_as_table.rb +34 -25
  286. data/lib/active_admin/views/pages/base.rb +44 -60
  287. data/lib/active_admin/views/pages/form.rb +1 -0
  288. data/lib/active_admin/views/pages/index.rb +16 -13
  289. data/lib/active_admin/views/pages/layout.rb +1 -0
  290. data/lib/active_admin/views/pages/page.rb +1 -0
  291. data/lib/active_admin/views/pages/show.rb +1 -0
  292. data/lib/active_admin/views/tabbed_navigation.rb +5 -59
  293. data/lib/active_admin/views/title_bar.rb +2 -1
  294. data/lib/active_admin/views.rb +2 -1
  295. data/lib/active_admin.rb +68 -63
  296. data/lib/activeadmin.rb +2 -1
  297. data/lib/generators/active_admin/assets/assets_generator.rb +3 -2
  298. data/lib/generators/active_admin/assets/templates/active_admin.js +1 -0
  299. data/lib/generators/active_admin/assets/templates/active_admin.scss +2 -2
  300. data/lib/generators/active_admin/devise/devise_generator.rb +6 -5
  301. data/lib/generators/active_admin/install/install_generator.rb +19 -8
  302. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +45 -3
  303. data/lib/generators/active_admin/install/templates/dashboard.rb +3 -3
  304. data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb.erb +1 -15
  305. data/lib/generators/active_admin/page/page_generator.rb +2 -1
  306. data/lib/generators/active_admin/page/templates/page.rb +1 -0
  307. data/lib/generators/active_admin/resource/resource_generator.rb +4 -3
  308. data/lib/generators/active_admin/resource/templates/admin.rb.erb +40 -37
  309. data/lib/generators/active_admin/webpacker/plugins/jquery.js +7 -0
  310. data/lib/generators/active_admin/webpacker/templates/active_admin.js +5 -0
  311. data/lib/generators/active_admin/webpacker/templates/active_admin.scss +17 -0
  312. data/lib/generators/active_admin/webpacker/templates/print.scss +2 -0
  313. data/lib/generators/active_admin/webpacker/webpacker_generator.rb +27 -0
  314. data/lib/ransack_ext.rb +10 -9
  315. data/vendor/assets/javascripts/jquery-ui/form-reset-mixin.js +80 -0
  316. data/vendor/assets/javascripts/jquery-ui/form.js +22 -0
  317. data/vendor/assets/javascripts/jquery-ui/labels.js +65 -0
  318. data/vendor/assets/javascripts/jquery-ui/widgets/checkboxradio.js +274 -283
  319. metadata +126 -558
  320. data/.github/ISSUE_TEMPLATE.md +0 -20
  321. data/.gitignore +0 -49
  322. data/.mdlrc +0 -1
  323. data/.rubocop.yml +0 -76
  324. data/.simplecov +0 -13
  325. data/.travis.yml +0 -51
  326. data/.yardopts +0 -7
  327. data/Gemfile +0 -58
  328. data/Rakefile +0 -54
  329. data/activeadmin.gemspec +0 -32
  330. data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
  331. data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
  332. data/app/assets/images/active_admin/orderable.png +0 -0
  333. data/app/assets/javascripts/active_admin/base.js.coffee +0 -13
  334. data/app/assets/javascripts/active_admin/ext/jquery-ui.js.coffee +0 -6
  335. data/app/assets/javascripts/active_admin/ext/jquery.js.coffee +0 -7
  336. data/app/assets/javascripts/active_admin/initializers/batch_actions.js.coffee +0 -11
  337. data/app/assets/javascripts/active_admin/initializers/datepicker.js.coffee +0 -14
  338. data/app/assets/javascripts/active_admin/initializers/filters.js.coffee +0 -26
  339. data/app/assets/javascripts/active_admin/initializers/tabs.js.coffee +0 -7
  340. data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +0 -42
  341. data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +0 -46
  342. data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +0 -104
  343. data/app/assets/javascripts/active_admin/lib/flash.js.coffee +0 -19
  344. data/app/assets/javascripts/active_admin/lib/has_many.js.coffee +0 -79
  345. data/app/assets/javascripts/active_admin/lib/modal_dialog.js.coffee +0 -45
  346. data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +0 -46
  347. data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +0 -22
  348. data/codecov.yml +0 -25
  349. data/config/i18n-tasks.yml +0 -26
  350. data/config/mdl_style.rb +0 -9
  351. data/cucumber.yml +0 -3
  352. data/features/action_item.feature +0 -73
  353. data/features/authorization.feature +0 -64
  354. data/features/authorization_cancan.feature +0 -52
  355. data/features/authorization_pundit.feature +0 -37
  356. data/features/belongs_to.feature +0 -124
  357. data/features/breadcrumb.feature +0 -75
  358. data/features/comments/commenting.feature +0 -178
  359. data/features/comments/viewing_index.feature +0 -19
  360. data/features/create_another.feature +0 -55
  361. data/features/dashboard.feature +0 -16
  362. data/features/decorators.feature +0 -43
  363. data/features/development_reloading.feature +0 -28
  364. data/features/edit_page.feature +0 -116
  365. data/features/favicon.feature +0 -20
  366. data/features/first_boot.feature +0 -16
  367. data/features/footer.feature +0 -28
  368. data/features/global_navigation.feature +0 -29
  369. data/features/i18n.feature +0 -55
  370. data/features/index/batch_actions.feature +0 -218
  371. data/features/index/filters.feature +0 -250
  372. data/features/index/format_as_csv.feature +0 -220
  373. data/features/index/formats.feature +0 -88
  374. data/features/index/index_as_block.feature +0 -15
  375. data/features/index/index_as_blog.feature +0 -69
  376. data/features/index/index_as_grid.feature +0 -45
  377. data/features/index/index_as_table.feature +0 -291
  378. data/features/index/index_blank_slate.feature +0 -83
  379. data/features/index/index_parameters.feature +0 -75
  380. data/features/index/index_scope_to.feature +0 -56
  381. data/features/index/index_scopes.feature +0 -285
  382. data/features/index/page_title.feature +0 -41
  383. data/features/index/pagination.feature +0 -63
  384. data/features/index/switch_index_view.feature +0 -73
  385. data/features/menu.feature +0 -72
  386. data/features/meta_tags.feature +0 -21
  387. data/features/new_page.feature +0 -136
  388. data/features/registering_assets.feature +0 -38
  389. data/features/registering_pages.feature +0 -237
  390. data/features/registering_resources.feature +0 -33
  391. data/features/renamed_resource.feature +0 -30
  392. data/features/root_to.feature +0 -17
  393. data/features/show/attributes_table_title.feature +0 -54
  394. data/features/show/columns.feature +0 -40
  395. data/features/show/default_content.feature +0 -44
  396. data/features/show/page_title.feature +0 -58
  397. data/features/show/tabs.feature +0 -33
  398. data/features/sidebar_sections.feature +0 -210
  399. data/features/site_title.feature +0 -47
  400. data/features/specifying_actions.feature +0 -118
  401. data/features/step_definitions/action_item_steps.rb +0 -7
  402. data/features/step_definitions/action_link_steps.rb +0 -19
  403. data/features/step_definitions/additional_web_steps.rb +0 -81
  404. data/features/step_definitions/asset_steps.rb +0 -15
  405. data/features/step_definitions/attribute_steps.rb +0 -18
  406. data/features/step_definitions/attributes_table_title_steps.rb +0 -11
  407. data/features/step_definitions/batch_action_steps.rb +0 -81
  408. data/features/step_definitions/blog_steps.rb +0 -3
  409. data/features/step_definitions/breadcrumb_steps.rb +0 -3
  410. data/features/step_definitions/column_steps.rb +0 -8
  411. data/features/step_definitions/comment_steps.rb +0 -32
  412. data/features/step_definitions/configuration_steps.rb +0 -100
  413. data/features/step_definitions/dashboard_steps.rb +0 -15
  414. data/features/step_definitions/factory_steps.rb +0 -35
  415. data/features/step_definitions/filter_steps.rb +0 -47
  416. data/features/step_definitions/flash_steps.rb +0 -11
  417. data/features/step_definitions/footer_steps.rb +0 -11
  418. data/features/step_definitions/format_steps.rb +0 -56
  419. data/features/step_definitions/i18n_steps.rb +0 -11
  420. data/features/step_definitions/index_scope_steps.rb +0 -29
  421. data/features/step_definitions/index_views_steps.rb +0 -3
  422. data/features/step_definitions/layout_steps.rb +0 -3
  423. data/features/step_definitions/member_link_steps.rb +0 -7
  424. data/features/step_definitions/menu_steps.rb +0 -11
  425. data/features/step_definitions/meta_tag_steps.rb +0 -3
  426. data/features/step_definitions/pagination_steps.rb +0 -15
  427. data/features/step_definitions/sidebar_steps.rb +0 -11
  428. data/features/step_definitions/site_title_steps.rb +0 -17
  429. data/features/step_definitions/tab_steps.rb +0 -8
  430. data/features/step_definitions/table_steps.rb +0 -116
  431. data/features/step_definitions/user_steps.rb +0 -52
  432. data/features/step_definitions/web_steps.rb +0 -86
  433. data/features/sti_resource.feature +0 -65
  434. data/features/strong_parameters.feature +0 -69
  435. data/features/support/env.rb +0 -122
  436. data/features/support/paths.rb +0 -73
  437. data/features/support/regular_env.rb +0 -7
  438. data/features/support/reload_env.rb +0 -7
  439. data/features/support/selectors.rb +0 -45
  440. data/features/users/logging_in.feature +0 -36
  441. data/features/users/logging_out.feature +0 -13
  442. data/features/users/resetting_password.feature +0 -34
  443. data/gemfiles/rails_42.gemfile +0 -10
  444. data/gemfiles/rails_50.gemfile +0 -10
  445. data/gemfiles/rails_51.gemfile +0 -10
  446. data/gemfiles/rails_52.gemfile +0 -11
  447. data/lib/active_admin/event.rb +0 -24
  448. data/lib/active_admin/helpers/output_safety_helper.rb +0 -35
  449. data/lib/active_admin/helpers/settings.rb +0 -114
  450. data/lib/active_admin/reloader.rb +0 -25
  451. data/lib/bug_report_templates/active_admin_master.rb +0 -112
  452. data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +0 -1
  453. data/spec/bug_report_templates_spec.rb +0 -26
  454. data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +0 -50
  455. data/spec/javascripts/coffeescripts/jquery.aa.flash.js.coffee +0 -25
  456. data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +0 -34
  457. data/spec/javascripts/fixtures/checkboxes.html +0 -9
  458. data/spec/javascripts/fixtures/flashes.html +0 -2
  459. data/spec/javascripts/fixtures/table_checkboxes.html +0 -17
  460. data/spec/javascripts/helpers/SpecHelper.js +0 -3
  461. data/spec/javascripts/support/jasmine.yml +0 -74
  462. data/spec/javascripts/support/jasmine_runner.rb +0 -19
  463. data/spec/rails_helper.rb +0 -59
  464. data/spec/requests/default_namespace_spec.rb +0 -81
  465. data/spec/requests/memory_spec.rb +0 -25
  466. data/spec/requests/stylesheets_spec.rb +0 -18
  467. data/spec/spec_helper.rb +0 -1
  468. data/spec/support/active_admin_integration_spec_helper.rb +0 -73
  469. data/spec/support/active_admin_request_helpers.rb +0 -39
  470. data/spec/support/rails_template.rb +0 -153
  471. data/spec/support/rails_template_with_data.rb +0 -327
  472. data/spec/support/templates/admin/stores.rb +0 -7
  473. data/spec/support/templates/en.yml +0 -8
  474. data/spec/support/templates/manifest.js +0 -3
  475. data/spec/support/templates/policies/active_admin/comment_policy.rb +0 -9
  476. data/spec/support/templates/policies/active_admin/page_policy.rb +0 -18
  477. data/spec/support/templates/policies/admin_user_policy.rb +0 -11
  478. data/spec/support/templates/policies/application_policy.rb +0 -44
  479. data/spec/support/templates/policies/category_policy.rb +0 -7
  480. data/spec/support/templates/policies/post_policy.rb +0 -15
  481. data/spec/support/templates/policies/store_policy.rb +0 -11
  482. data/spec/support/templates/policies/user_policy.rb +0 -11
  483. data/spec/support/templates/post_decorator.rb +0 -24
  484. data/spec/unit/abstract_view_factory_spec.rb +0 -78
  485. data/spec/unit/action_builder_spec.rb +0 -158
  486. data/spec/unit/active_admin_spec.rb +0 -11
  487. data/spec/unit/application_spec.rb +0 -184
  488. data/spec/unit/asset_registration_spec.rb +0 -81
  489. data/spec/unit/authorization/authorization_adapter_spec.rb +0 -61
  490. data/spec/unit/authorization/controller_authorization_spec.rb +0 -43
  491. data/spec/unit/authorization/index_overriding_spec.rb +0 -23
  492. data/spec/unit/auto_link_spec.rb +0 -93
  493. data/spec/unit/batch_actions/resource_spec.rb +0 -84
  494. data/spec/unit/batch_actions/settings_spec.rb +0 -61
  495. data/spec/unit/belongs_to_spec.rb +0 -76
  496. data/spec/unit/cancan_adapter_spec.rb +0 -43
  497. data/spec/unit/comments_spec.rb +0 -176
  498. data/spec/unit/component_spec.rb +0 -18
  499. data/spec/unit/config_shared_examples.rb +0 -59
  500. data/spec/unit/controller_filters_spec.rb +0 -41
  501. data/spec/unit/csv_builder_spec.rb +0 -313
  502. data/spec/unit/dependency_spec.rb +0 -135
  503. data/spec/unit/devise_spec.rb +0 -110
  504. data/spec/unit/dsl_spec.rb +0 -120
  505. data/spec/unit/filters/active_filter_spec.rb +0 -189
  506. data/spec/unit/filters/active_spec.rb +0 -24
  507. data/spec/unit/filters/filter_form_builder_spec.rb +0 -524
  508. data/spec/unit/filters/resource_spec.rb +0 -128
  509. data/spec/unit/form_builder_spec.rb +0 -990
  510. data/spec/unit/generators/install_spec.rb +0 -31
  511. data/spec/unit/helpers/collection_spec.rb +0 -68
  512. data/spec/unit/helpers/output_safety_helper_spec.rb +0 -79
  513. data/spec/unit/helpers/scope_chain_spec.rb +0 -35
  514. data/spec/unit/helpers/settings_spec.rb +0 -30
  515. data/spec/unit/i18n_spec.rb +0 -29
  516. data/spec/unit/localizers/resource_localizer_spec.rb +0 -36
  517. data/spec/unit/menu_collection_spec.rb +0 -62
  518. data/spec/unit/menu_item_spec.rb +0 -141
  519. data/spec/unit/menu_spec.rb +0 -71
  520. data/spec/unit/namespace/authorization_spec.rb +0 -27
  521. data/spec/unit/namespace/register_page_spec.rb +0 -99
  522. data/spec/unit/namespace/register_resource_spec.rb +0 -162
  523. data/spec/unit/namespace_spec.rb +0 -124
  524. data/spec/unit/order_clause_spec.rb +0 -81
  525. data/spec/unit/page_controller_spec.rb +0 -5
  526. data/spec/unit/page_spec.rb +0 -128
  527. data/spec/unit/pretty_format_spec.rb +0 -82
  528. data/spec/unit/pundit_adapter_spec.rb +0 -98
  529. data/spec/unit/resource/action_items_spec.rb +0 -69
  530. data/spec/unit/resource/attributes_spec.rb +0 -49
  531. data/spec/unit/resource/includes_spec.rb +0 -21
  532. data/spec/unit/resource/menu_spec.rb +0 -18
  533. data/spec/unit/resource/naming_spec.rb +0 -122
  534. data/spec/unit/resource/ordering_spec.rb +0 -35
  535. data/spec/unit/resource/page_presenters_spec.rb +0 -44
  536. data/spec/unit/resource/pagination_spec.rb +0 -38
  537. data/spec/unit/resource/routes_spec.rb +0 -125
  538. data/spec/unit/resource/scopes_spec.rb +0 -50
  539. data/spec/unit/resource/sidebars_spec.rb +0 -43
  540. data/spec/unit/resource_collection_spec.rb +0 -175
  541. data/spec/unit/resource_controller/data_access_spec.rb +0 -234
  542. data/spec/unit/resource_controller/decorators_spec.rb +0 -94
  543. data/spec/unit/resource_controller/sidebars_spec.rb +0 -37
  544. data/spec/unit/resource_controller_spec.rb +0 -273
  545. data/spec/unit/resource_registration_spec.rb +0 -61
  546. data/spec/unit/resource_spec.rb +0 -320
  547. data/spec/unit/routing_spec.rb +0 -211
  548. data/spec/unit/scope_spec.rb +0 -209
  549. data/spec/unit/settings_spec.rb +0 -117
  550. data/spec/unit/view_factory_spec.rb +0 -19
  551. data/spec/unit/view_helpers/breadcrumbs_spec.rb +0 -253
  552. data/spec/unit/view_helpers/display_helper_spec.rb +0 -203
  553. data/spec/unit/view_helpers/download_format_links_helper_spec.rb +0 -39
  554. data/spec/unit/view_helpers/fields_for_spec.rb +0 -50
  555. data/spec/unit/view_helpers/flash_helper_spec.rb +0 -24
  556. data/spec/unit/view_helpers/form_helper_spec.rb +0 -42
  557. data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +0 -138
  558. data/spec/unit/views/components/attributes_table_spec.rb +0 -271
  559. data/spec/unit/views/components/batch_action_selector_spec.rb +0 -43
  560. data/spec/unit/views/components/blank_slate_spec.rb +0 -27
  561. data/spec/unit/views/components/columns_spec.rb +0 -187
  562. data/spec/unit/views/components/index_list_spec.rb +0 -49
  563. data/spec/unit/views/components/index_table_for_spec.rb +0 -127
  564. data/spec/unit/views/components/paginated_collection_spec.rb +0 -249
  565. data/spec/unit/views/components/panel_spec.rb +0 -58
  566. data/spec/unit/views/components/sidebar_section_spec.rb +0 -68
  567. data/spec/unit/views/components/site_title_spec.rb +0 -76
  568. data/spec/unit/views/components/status_tag_spec.rb +0 -265
  569. data/spec/unit/views/components/table_for_spec.rb +0 -436
  570. data/spec/unit/views/components/tabs_spec.rb +0 -67
  571. data/spec/unit/views/components/unsupported_browser_spec.rb +0 -41
  572. data/spec/unit/views/index_as_blog_spec.rb +0 -76
  573. data/spec/unit/views/pages/form_spec.rb +0 -54
  574. data/spec/unit/views/pages/index_spec.rb +0 -60
  575. data/spec/unit/views/pages/layout_spec.rb +0 -59
  576. data/spec/unit/views/pages/show_spec.rb +0 -32
  577. data/spec/unit/views/tabbed_navigation_spec.rb +0 -158
  578. data/tasks/docs.rake +0 -64
  579. data/tasks/lint.rake +0 -21
  580. data/tasks/local.rake +0 -25
  581. data/tasks/parallel_tests.rake +0 -66
  582. data/tasks/test.rake +0 -29
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  class ResourceController < BaseController
3
4
 
@@ -23,9 +24,9 @@ module ActiveAdmin
23
24
 
24
25
  COLLECTION_APPLIES = [
25
26
  :authorization_scope,
26
- :sorting,
27
27
  :filtering,
28
28
  :scoping,
29
+ :sorting,
29
30
  :includes,
30
31
  :pagination,
31
32
  :collection_decorator
@@ -128,7 +129,7 @@ module ActiveAdmin
128
129
  #
129
130
  # @return [ActiveRecord::Base] An un-saved active record base object
130
131
  def build_new_resource
131
- scoped_collection.send(
132
+ apply_authorization_scope(scoped_collection).send(
132
133
  method_for_build,
133
134
  *resource_params.map { |params| params.slice(active_admin_config.resource_class.inheritance_column) }
134
135
  )
@@ -249,21 +250,32 @@ module ActiveAdmin
249
250
  end
250
251
 
251
252
  def apply_pagination(chain)
253
+ # skip pagination if CSV format was requested
254
+ return chain if params["format"] == "csv"
252
255
  # skip pagination if already was paginated by scope
253
256
  return chain if chain.respond_to?(:total_pages)
254
- page_method_name = Kaminari.config.page_method_name
255
257
  page = params[Kaminari.config.param_name]
256
258
 
257
- chain.public_send(page_method_name, page).per(per_page)
259
+ paginate(chain, page, per_page)
258
260
  end
259
261
 
260
262
  def collection_applies(options = {})
261
- only = Array(options.fetch(:only, COLLECTION_APPLIES))
263
+ only = Array(options.fetch(:only, COLLECTION_APPLIES))
262
264
  except = Array(options.fetch(:except, []))
263
265
 
264
266
  COLLECTION_APPLIES & only - except
265
267
  end
266
268
 
269
+ def in_paginated_batches(&block)
270
+ ActiveRecord::Base.uncached do
271
+ (1..paginated_collection.total_pages).each do |page|
272
+ paginated_collection(page).each do |resource|
273
+ yield apply_decorator(resource)
274
+ end
275
+ end
276
+ end
277
+ end
278
+
267
279
  def per_page
268
280
  if active_admin_config.paginate
269
281
  dynamic_per_page || configured_per_page
@@ -317,6 +329,20 @@ module ActiveAdmin
317
329
  def create_another?
318
330
  params[:create_another].present?
319
331
  end
332
+
333
+ def paginated_collection(page_no = 1)
334
+ paginate(collection, page_no, batch_size)
335
+ end
336
+
337
+ def paginate(chain, page, per_page)
338
+ page_method_name = Kaminari.config.page_method_name
339
+
340
+ chain.public_send(page_method_name, page).per(per_page)
341
+ end
342
+
343
+ def batch_size
344
+ 1000
345
+ end
320
346
  end
321
347
  end
322
348
  end
@@ -1,8 +1,9 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  class ResourceController < BaseController
3
4
  module Decorators
4
5
 
5
- protected
6
+ protected
6
7
 
7
8
  def apply_decorator(resource)
8
9
  decorate? ? decorator_class.new(resource) : resource
@@ -24,11 +25,11 @@ module ActiveAdmin
24
25
  end
25
26
  end
26
27
 
27
- private
28
+ private
28
29
 
29
30
  def decorate?
30
31
  case action_name
31
- when 'new', 'edit', 'create', 'update'
32
+ when "new", "edit", "create", "update"
32
33
  form = active_admin_config.get_page_presenter :form
33
34
  form && form.options[:decorate] && decorator_class.present?
34
35
  else
@@ -53,49 +54,27 @@ module ActiveAdmin
53
54
 
54
55
  def self.wrap(decorator)
55
56
  collection_decorator = find_collection_decorator(decorator)
56
-
57
- if draper_collection_decorator? collection_decorator
58
- name = "#{collection_decorator.name} of #{decorator} + ActiveAdmin"
59
- @cache[name] ||= wrap! collection_decorator, name
60
- else
61
- collection_decorator
62
- end
57
+ name = "#{collection_decorator.name} of #{decorator} + ActiveAdmin"
58
+ @cache[name] ||= wrap! collection_decorator, name
63
59
  end
64
60
 
65
- private
66
-
67
61
  def self.wrap!(parent, name)
68
62
  ::Class.new parent do
69
63
  delegate :reorder, :page, :current_page, :total_pages, :limit_value,
70
- :total_count, :total_pages, :to_key, :group_values, :except,
71
- :find_each, :ransack
64
+ :total_count, :total_pages, :offset, :to_key, :group_values,
65
+ :except, :find_each, :ransack, to: :object
72
66
 
73
67
  define_singleton_method(:name) { name }
74
68
  end
75
69
  end
76
70
 
77
- # Draper::CollectionDecorator was introduced in 1.0.0
78
- # Draper::Decorator#collection_decorator_class was introduced in 1.3.0
79
71
  def self.find_collection_decorator(decorator)
80
- if Dependency.draper? '>= 1.3.0'
72
+ if decorator.respond_to?(:collection_decorator_class)
81
73
  decorator.collection_decorator_class
82
- elsif Dependency.draper? '>= 1.0.0'
83
- draper_collection_decorator
84
74
  else
85
- decorator
75
+ CollectionDecorator
86
76
  end
87
77
  end
88
-
89
- def self.draper_collection_decorator?(decorator)
90
- decorator && decorator <= draper_collection_decorator
91
- rescue NameError
92
- false
93
- end
94
-
95
- def self.draper_collection_decorator
96
- ::Draper::CollectionDecorator
97
- end
98
-
99
78
  end
100
79
  end
101
80
  end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+ require "active_admin/resource"
3
+ require "active_admin/resource/model"
4
+
5
+ module ActiveAdmin
6
+ class ResourceController < BaseController
7
+ module PolymorphicRoutes
8
+ def polymorphic_url(record_or_hash_or_array, options = {})
9
+ super(map_named_resources_for(record_or_hash_or_array), options)
10
+ end
11
+
12
+ def polymorphic_path(record_or_hash_or_array, options = {})
13
+ super(map_named_resources_for(record_or_hash_or_array), options)
14
+ end
15
+
16
+ private
17
+
18
+ def map_named_resources_for(record_or_hash_or_array)
19
+ return record_or_hash_or_array unless record_or_hash_or_array.is_a?(Array)
20
+
21
+ record_or_hash_or_array.map { |record| to_named_resource(record) }
22
+ end
23
+
24
+ def to_named_resource(record)
25
+ if record.is_a?(resource_class)
26
+ return ActiveAdmin::Model.new(active_admin_config, record)
27
+ end
28
+
29
+ belongs_to_resource = active_admin_config.belongs_to_config.try(:resource)
30
+ if belongs_to_resource && record.is_a?(belongs_to_resource.resource_class)
31
+ return ActiveAdmin::Model.new(belongs_to_resource, record)
32
+ end
33
+
34
+ record
35
+ end
36
+ end
37
+ end
38
+ end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  class ResourceController < BaseController
3
4
  module ResourceClassMethods
@@ -13,6 +14,8 @@ module ActiveAdmin
13
14
  @active_admin_config ? @active_admin_config.resource_class : nil
14
15
  end
15
16
 
17
+ private
18
+
16
19
  def resource_class
17
20
  self.class.resource_class
18
21
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  class ResourceController < BaseController
3
4
 
@@ -15,7 +16,7 @@ module ActiveAdmin
15
16
  # Collection can be scoped conditionally with an :if or :unless proc.
16
17
  def begin_of_association_chain
17
18
  return nil unless active_admin_config.scope_to?(self)
18
- render_in_context(self, active_admin_config.scope_to_method)
19
+ MethodOrProcHelper.render_in_context(self, active_admin_config.scope_to_method)
19
20
  end
20
21
 
21
22
  # Overriding from InheritedResources::BaseHelpers
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  class ResourceController < BaseController
3
4
 
@@ -1,4 +1,5 @@
1
- require 'csv'
1
+ # frozen_string_literal: true
2
+ require "csv"
2
3
 
3
4
  module ActiveAdmin
4
5
  class ResourceController < BaseController
@@ -18,23 +19,24 @@ module ActiveAdmin
18
19
  protected
19
20
 
20
21
  def stream_resource(&block)
21
- headers['X-Accel-Buffering'] = 'no'
22
- headers['Cache-Control'] = 'no-cache'
22
+ headers["X-Accel-Buffering"] = "no"
23
+ headers["Cache-Control"] = "no-cache"
24
+ headers["Last-Modified"] = Time.current.httpdate
23
25
 
24
26
  if ActiveAdmin.application.disable_streaming_in.include? Rails.env
25
- self.response_body = block['']
27
+ self.response_body = block[String.new]
26
28
  else
27
29
  self.response_body = Enumerator.new &block
28
30
  end
29
31
  end
30
32
 
31
33
  def csv_filename
32
- "#{resource_collection_name.to_s.gsub('_', '-')}-#{Time.zone.now.to_date.to_s(:default)}.csv"
34
+ "#{resource_collection_name.to_s.gsub('_', '-')}-#{Time.zone.now.to_date.to_formatted_s(:default)}.csv"
33
35
  end
34
36
 
35
37
  def stream_csv
36
- headers['Content-Type'] = 'text/csv; charset=utf-8' # In Rails 5 it's set to HTML??
37
- headers['Content-Disposition'] = %{attachment; filename="#{csv_filename}"}
38
+ headers["Content-Type"] = "text/csv; charset=utf-8" # In Rails 5 it's set to HTML??
39
+ headers["Content-Disposition"] = %{attachment; filename="#{csv_filename}"}
38
40
  stream_resource &active_admin_config.csv_builder.method(:build).to_proc.curry[self]
39
41
  end
40
42
 
@@ -1,10 +1,13 @@
1
- require 'active_admin/resource_controller/action_builder'
2
- require 'active_admin/resource_controller/data_access'
3
- require 'active_admin/resource_controller/decorators'
4
- require 'active_admin/resource_controller/scoping'
5
- require 'active_admin/resource_controller/streaming'
6
- require 'active_admin/resource_controller/sidebars'
7
- require 'active_admin/resource_controller/resource_class_methods'
1
+ # frozen_string_literal: true
2
+ require "active_admin/collection_decorator"
3
+ require "active_admin/resource_controller/action_builder"
4
+ require "active_admin/resource_controller/data_access"
5
+ require "active_admin/resource_controller/decorators"
6
+ require "active_admin/resource_controller/polymorphic_routes"
7
+ require "active_admin/resource_controller/scoping"
8
+ require "active_admin/resource_controller/streaming"
9
+ require "active_admin/resource_controller/sidebars"
10
+ require "active_admin/resource_controller/resource_class_methods"
8
11
 
9
12
  module ActiveAdmin
10
13
  # All Resources Controller inherits from this controller.
@@ -18,17 +21,18 @@ module ActiveAdmin
18
21
  include ActionBuilder
19
22
  include Decorators
20
23
  include DataAccess
24
+ include PolymorphicRoutes
21
25
  include Scoping
22
26
  include Streaming
23
27
  include Sidebars
24
28
  include ViewHelpers::DownloadFormatLinksHelper
25
- extend ResourceClassMethods
29
+ extend ResourceClassMethods
26
30
 
27
31
  def self.active_admin_config=(config)
28
32
  if @active_admin_config = config
29
33
  defaults resource_class: config.resource_class,
30
- route_prefix: config.route_prefix,
31
- instance_name: config.resource_name.singular
34
+ route_prefix: config.route_prefix,
35
+ instance_name: config.resource_name.singular
32
36
  end
33
37
  end
34
38
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  # This is the class where all the register blocks are evaluated.
3
4
  class ResourceDSL < DSL
@@ -62,11 +63,12 @@ module ActiveAdmin
62
63
  #
63
64
  def permit_params(*args, &block)
64
65
  param_key = config.param_key.to_sym
65
- belongs_to_param = config.belongs_to_param
66
- create_another_param = :create_another if config.create_another
67
66
 
68
67
  controller do
69
68
  define_method :permitted_params do
69
+ belongs_to_param = active_admin_config.belongs_to_param
70
+ create_another_param = :create_another if active_admin_config.create_another
71
+
70
72
  permitted_params =
71
73
  active_admin_namespace.permitted_params +
72
74
  Array.wrap(belongs_to_param) +
@@ -74,6 +76,8 @@ module ActiveAdmin
74
76
 
75
77
  params.permit(*permitted_params, param_key => block ? instance_exec(&block) : args)
76
78
  end
79
+
80
+ private :permitted_params
77
81
  end
78
82
  end
79
83
 
@@ -119,7 +123,7 @@ module ActiveAdmin
119
123
  #
120
124
  # ActiveAdmin.register Post do
121
125
  # member_action :comments do
122
- # @post = Post.find(params[:id]
126
+ # @post = Post.find(params[:id])
123
127
  # @comments = @post.comments
124
128
  # end
125
129
  # end
@@ -131,14 +135,14 @@ module ActiveAdmin
131
135
  # action.
132
136
  #
133
137
  def action(set, name, options = {}, &block)
134
- warn "Warning: method `#{name}` already defined" if controller.method_defined?(name)
138
+ warn "Warning: method `#{name}` already defined in #{controller.name}" if controller.method_defined?(name)
135
139
 
136
140
  set << ControllerAction.new(name, options)
137
141
  title = options.delete(:title)
138
142
 
139
143
  controller do
140
144
  before_action(only: [name]) { @page_title = title } if title
141
- define_method(name, &block || Proc.new{})
145
+ define_method(name, &block || Proc.new {})
142
146
  end
143
147
  end
144
148
 
@@ -181,31 +185,15 @@ module ActiveAdmin
181
185
  # == Before / After Destroy
182
186
  # Called before and after the object is destroyed from the database.
183
187
  #
184
- delegate :before_build, :after_build, to: :controller
185
- delegate :before_create, :after_create, to: :controller
186
- delegate :before_update, :after_update, to: :controller
187
- delegate :before_save, :after_save, to: :controller
188
+ delegate :before_build, :after_build, to: :controller
189
+ delegate :before_create, :after_create, to: :controller
190
+ delegate :before_update, :after_update, to: :controller
191
+ delegate :before_save, :after_save, to: :controller
188
192
  delegate :before_destroy, :after_destroy, to: :controller
189
193
 
190
- # This code defines both *_filter and *_action for Rails 4.0 to Rails 5 and *_action for Rails >= 5.1
191
- phases = [
192
- :before, :skip_before,
193
- :after, :skip_after,
194
- :around, :skip
195
- ]
196
- keywords = if Rails::VERSION::MAJOR == 5 && Rails::VERSION::MINOR >= 1
197
- [:action]
198
- else
199
- [:action, :filter]
200
- end
201
-
202
- keywords.each do |name|
203
- phases.each do |action|
204
- define_method "#{action}_#{name}" do |*args, &block|
205
- controller.public_send "#{action}_action", *args, &block
206
- end
207
- end
208
- end
194
+ standard_rails_filters =
195
+ AbstractController::Callbacks::ClassMethods.public_instance_methods.select { |m| m.match(/_action\z/) }
196
+ delegate *standard_rails_filters, to: :controller
209
197
 
210
198
  # Specify which actions to create in the controller
211
199
  #
@@ -1,108 +1,115 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
3
+ # @private
2
4
  class Router
3
- def initialize(application)
4
- @application = application
5
+ attr_reader :namespaces, :router
6
+
7
+ def initialize(router:, namespaces:)
8
+ @router = router
9
+ @namespaces = namespaces
5
10
  end
6
11
 
7
- # Creates all the necessary routes for the ActiveAdmin configurations
8
- #
9
- # Use this within the routes.rb file:
10
- #
11
- # Application.routes.draw do |map|
12
- # ActiveAdmin.routes(self)
13
- # end
14
- #
15
- def apply(router)
16
- define_root_routes router
17
- define_resource_routes router
12
+ def apply
13
+ define_root_routes
14
+ define_resources_routes
18
15
  end
19
16
 
20
- def define_root_routes(router)
21
- router.instance_exec @application.namespaces do |namespaces|
22
- namespaces.each do |namespace|
23
- if namespace.root?
24
- root namespace.root_to_options.merge(to: namespace.root_to)
25
- else
26
- namespace namespace.name, namespace.route_options.dup do
27
- root namespace.root_to_options.merge(to: namespace.root_to, as: :root)
28
- end
17
+ private
18
+
19
+ def define_root_routes
20
+ namespaces.each do |namespace|
21
+ if namespace.root?
22
+ router.root namespace.root_to_options.merge(to: namespace.root_to)
23
+ else
24
+ router.namespace namespace.name, namespace.route_options.dup do
25
+ router.root namespace.root_to_options.merge(to: namespace.root_to, as: :root)
29
26
  end
30
27
  end
31
28
  end
32
29
  end
33
30
 
34
31
  # Defines the routes for each resource
35
- def define_resource_routes(router)
36
- router.instance_exec @application.namespaces, self do |namespaces, aa_router|
37
- resources = namespaces.flat_map{ |n| n.resources.values }
38
- resources.each do |config|
39
- routes = aa_router.resource_routes(config)
40
-
41
- # Add in the parent if it exists
42
- if config.belongs_to?
43
- belongs_to = routes
44
- routes = Proc.new do
45
- # If it's optional, make the normal resource routes
46
- instance_exec &belongs_to if config.belongs_to_config.optional?
47
-
48
- # Make the nested belongs_to routes
49
- # :only is set to nothing so that we don't clobber any existing routes on the resource
50
- resources config.belongs_to_config.target.resource_name.plural, only: [] do
51
- instance_exec &belongs_to
52
- end
53
- end
54
- end
32
+ def define_resources_routes
33
+ resources = namespaces.flat_map { |n| n.resources.values }
34
+ resources.each do |config|
35
+ define_resource_routes(config)
36
+ end
37
+ end
55
38
 
56
- # Add on the namespace if required
57
- unless config.namespace.root?
58
- nested = routes
59
- routes = Proc.new do
60
- namespace config.namespace.name, config.namespace.route_options.dup do
61
- instance_exec &nested
62
- end
63
- end
64
- end
39
+ def define_resource_routes(config)
40
+ if config.namespace.root?
41
+ define_routes(config)
42
+ else
43
+ # Add on the namespace if required
44
+ define_namespace(config)
45
+ end
46
+ end
65
47
 
66
- instance_exec &routes
67
- end
48
+ def define_routes(config)
49
+ if config.belongs_to?
50
+ define_belongs_to_routes(config)
51
+ else
52
+ page_or_resource_routes(config)
68
53
  end
69
54
  end
70
55
 
56
+ def page_or_resource_routes(config)
57
+ config.is_a?(Page) ? page_routes(config) : resource_routes(config)
58
+ end
59
+
71
60
  def resource_routes(config)
72
- Proc.new do
73
- # Builds one route for each HTTP verb passed in
74
- build_route = proc{ |verbs, *args|
75
- [*verbs].each{ |verb| send verb, *args }
76
- }
77
- # Deals with +ControllerAction+ instances
78
- build_action = proc{ |action|
79
- build_route.call(action.http_verb, action.name)
80
- }
81
- case config
82
- when ::ActiveAdmin::Resource
83
- resources config.resource_name.route_key, only: config.defined_actions do
84
- member do
85
- config.member_actions.each &build_action
86
- end
87
-
88
- collection do
89
- config.collection_actions.each &build_action
90
- post :batch_action if config.batch_actions_enabled?
91
- end
92
- end
93
- when ::ActiveAdmin::Page
94
- page = config.underscored_resource_name
95
- get "/#{page}" => "#{page}#index"
96
- config.page_actions.each do |action|
97
- Array.wrap(action.http_verb).each do |verb|
98
- build_route.call verb, "/#{page}/#{action.name}" => "#{page}##{action.name}"
99
- end
100
- end
101
- else
102
- raise "Unsupported config class: #{config.class}"
61
+ router.resources config.resource_name.route_key, only: config.defined_actions do
62
+ define_actions(config)
63
+ end
64
+ end
65
+
66
+ def page_routes(config)
67
+ page = config.underscored_resource_name
68
+ router.get "/#{page}" => "#{page}#index"
69
+ config.page_actions.each do |action|
70
+ Array.wrap(action.http_verb).each do |verb|
71
+ build_route(verb, "/#{page}/#{action.name}" => "#{page}##{action.name}")
103
72
  end
104
73
  end
74
+ end
75
+
76
+ # Defines member and collection actions
77
+ def define_actions(config)
78
+ router.member do
79
+ config.member_actions.each { |action| build_action(action) }
80
+ end
81
+
82
+ router.collection do
83
+ config.collection_actions.each { |action| build_action(action) }
84
+ router.post :batch_action if config.batch_actions_enabled?
85
+ end
86
+ end
87
+
88
+ # Deals with +ControllerAction+ instances
89
+ # Builds one route for each HTTP verb passed in
90
+ def build_action(action)
91
+ build_route(action.http_verb, action.name)
92
+ end
93
+
94
+ def build_route(verbs, *args)
95
+ Array.wrap(verbs).each { |verb| router.send(verb, *args) }
96
+ end
97
+
98
+ def define_belongs_to_routes(config)
99
+ # If it's optional, make the normal resource routes
100
+ page_or_resource_routes(config) if config.belongs_to_config.optional?
101
+
102
+ # Make the nested belongs_to routes
103
+ # :only is set to nothing so that we don't clobber any existing routes on the resource
104
+ router.resources config.belongs_to_config.target.resource_name.plural, only: [] do
105
+ page_or_resource_routes(config)
106
+ end
107
+ end
105
108
 
109
+ def define_namespace(config)
110
+ router.namespace config.namespace.name, config.namespace.route_options.dup do
111
+ define_routes(config)
112
+ end
106
113
  end
107
114
  end
108
115
  end
@@ -1,7 +1,8 @@
1
+ # frozen_string_literal: true
1
2
  module ActiveAdmin
2
3
  class Scope
3
4
 
4
- attr_reader :scope_method, :id, :scope_block, :display_if_block, :show_count, :default_block
5
+ attr_reader :scope_method, :id, :scope_block, :display_if_block, :show_count, :default_block, :group
5
6
 
6
7
  # Create a Scope
7
8
  #
@@ -24,30 +25,38 @@ module ActiveAdmin
24
25
  # Scope.new ->{Date.today.strftime '%A'}, :published_today
25
26
  # # => Scope with dynamic title using the :published_today scope method
26
27
  #
28
+ # Scope.new :published, nil, group: :status
29
+ # # => Scope with the group :status
30
+ #
27
31
  def initialize(name, method = nil, options = {}, &block)
28
- @name, @scope_method = name, method.try(:to_sym)
32
+ @name = name
33
+ @scope_method = method.try(:to_sym)
29
34
 
30
35
  if name.is_a? Proc
31
36
  raise "A string/symbol is required as the second argument if your label is a proc." unless method
32
- @id = ActiveAdmin::Dependency.rails.parameterize method.to_s
37
+ @id = method.to_s.parameterize(separator: "_")
33
38
  else
34
39
  @scope_method ||= name.to_sym
35
- @id = ActiveAdmin::Dependency.rails.parameterize name.to_s
40
+ @id = name.to_s.parameterize(separator: "_")
36
41
  end
37
42
 
38
- @scope_method = nil if @scope_method == :all
39
- @scope_method, @scope_block = nil, block if block_given?
43
+ @scope_method = nil if @scope_method == :all
44
+ if block_given?
45
+ @scope_method = nil
46
+ @scope_block = block
47
+ end
40
48
 
41
- @localizer = options[:localizer]
42
- @show_count = options.fetch(:show_count, true)
43
- @display_if_block = options[:if] || proc{ true }
44
- @default_block = options[:default] || proc{ false }
49
+ @localizer = options[:localizer]
50
+ @show_count = options.fetch(:show_count, true)
51
+ @display_if_block = options[:if] || proc { true }
52
+ @default_block = options[:default] || proc { false }
53
+ @group = options[:group].try(:to_sym)
45
54
  end
46
55
 
47
56
  def name
48
57
  case @name
49
58
  when String then @name
50
- when Symbol then @localizer ? @localizer.t(@name, scope: 'scopes') : @name.to_s.titleize
59
+ when Symbol then @localizer ? @localizer.t(@name, scope: "scopes") : @name.to_s.titleize
51
60
  else @name
52
61
  end
53
62
  end