activeadmin 1.1.0 → 2.5.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 (486) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +492 -108
  3. data/CODE_OF_CONDUCT.md +64 -12
  4. data/CONTRIBUTING.md +117 -49
  5. data/README.md +73 -19
  6. data/app/assets/javascripts/active_admin/base.js +509 -0
  7. data/app/assets/stylesheets/active_admin/_base.scss +29 -29
  8. data/app/assets/stylesheets/active_admin/_forms.scss +3 -15
  9. data/app/assets/stylesheets/active_admin/_header.scss +3 -5
  10. data/app/assets/stylesheets/active_admin/_mixins.scss +1 -1
  11. data/app/assets/stylesheets/active_admin/components/_scopes.scss +3 -0
  12. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +0 -5
  13. data/app/assets/stylesheets/active_admin/components/_tables.scss +1 -2
  14. data/app/assets/stylesheets/active_admin/components/_tabs.scss +1 -1
  15. data/app/assets/stylesheets/active_admin/mixins/_all.scss +8 -8
  16. data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +1 -1
  17. data/app/assets/stylesheets/active_admin/mixins/_variables.scss +5 -0
  18. data/app/assets/stylesheets/active_admin/print.scss +2 -2
  19. data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +1 -1
  20. data/app/javascript/active_admin/base.js +19 -0
  21. data/app/javascript/active_admin/ext/jquery-ui.js +7 -0
  22. data/app/javascript/active_admin/ext/jquery.js +9 -0
  23. data/app/javascript/active_admin/initializers/batch-actions.js +61 -0
  24. data/app/javascript/active_admin/initializers/checkbox-toggler.js +3 -0
  25. data/app/javascript/active_admin/initializers/datepicker.js +16 -0
  26. data/app/javascript/active_admin/initializers/dropdown-menu.js +9 -0
  27. data/app/javascript/active_admin/initializers/filters.js +10 -0
  28. data/app/javascript/active_admin/initializers/has-many.js +95 -0
  29. data/app/javascript/active_admin/initializers/per-page.js +13 -0
  30. data/app/javascript/active_admin/initializers/table-checkbox-toggler.js +3 -0
  31. data/app/javascript/active_admin/initializers/tabs.js +6 -0
  32. data/app/javascript/active_admin/lib/checkbox-toggler.js +49 -0
  33. data/app/javascript/active_admin/lib/dropdown-menu.js +116 -0
  34. data/app/javascript/active_admin/lib/filters.js +39 -0
  35. data/app/javascript/active_admin/lib/modal-dialog.js +63 -0
  36. data/app/javascript/active_admin/lib/per-page.js +38 -0
  37. data/app/javascript/active_admin/lib/table-checkbox-toggler.js +38 -0
  38. data/app/javascript/active_admin/lib/utils.js +40 -0
  39. data/app/views/active_admin/devise/confirmations/new.html.erb +2 -2
  40. data/app/views/active_admin/devise/passwords/edit.html.erb +2 -2
  41. data/app/views/active_admin/devise/passwords/new.html.erb +2 -2
  42. data/app/views/active_admin/devise/registrations/new.html.erb +2 -3
  43. data/app/views/active_admin/devise/sessions/new.html.erb +1 -1
  44. data/app/views/active_admin/devise/shared/_error_messages.html.erb +15 -0
  45. data/app/views/active_admin/devise/unlocks/new.html.erb +2 -2
  46. data/app/views/kaminari/active_admin_countless/_first_page.html.erb +11 -0
  47. data/app/views/kaminari/active_admin_countless/_gap.html.erb +8 -0
  48. data/app/views/kaminari/active_admin_countless/_next_page.html.erb +11 -0
  49. data/app/views/kaminari/active_admin_countless/_page.html.erb +12 -0
  50. data/app/views/kaminari/active_admin_countless/_paginator.html.erb +24 -0
  51. data/app/views/kaminari/active_admin_countless/_prev_page.html.erb +11 -0
  52. data/app/views/layouts/active_admin_logged_out.html.erb +2 -2
  53. data/config/locales/ar.yml +3 -2
  54. data/config/locales/az.yml +138 -0
  55. data/config/locales/bg.yml +1 -1
  56. data/config/locales/bs.yml +1 -0
  57. data/config/locales/ca.yml +1 -1
  58. data/config/locales/cs.yml +1 -0
  59. data/config/locales/da.yml +1 -0
  60. data/config/locales/de-CH.yml +1 -0
  61. data/config/locales/de.yml +29 -0
  62. data/config/locales/el.yml +1 -0
  63. data/config/locales/en-CA.yml +1 -0
  64. data/config/locales/en-GB.yml +1 -0
  65. data/config/locales/en.yml +21 -1
  66. data/config/locales/eo.yml +145 -0
  67. data/config/locales/es-MX.yml +1 -0
  68. data/config/locales/es.yml +21 -1
  69. data/config/locales/fa.yml +1 -0
  70. data/config/locales/fi.yml +2 -1
  71. data/config/locales/fr.yml +2 -1
  72. data/config/locales/he.yml +1 -1
  73. data/config/locales/hr.yml +1 -0
  74. data/config/locales/hu.yml +5 -0
  75. data/config/locales/id.yml +1 -0
  76. data/config/locales/it.yml +13 -3
  77. data/config/locales/ja.yml +6 -0
  78. data/config/locales/ko.yml +1 -0
  79. data/config/locales/lt.yml +3 -2
  80. data/config/locales/lv.yml +1 -0
  81. data/config/locales/mk.yml +134 -0
  82. data/config/locales/nb.yml +16 -5
  83. data/config/locales/nl.yml +12 -0
  84. data/config/locales/pl.yml +72 -3
  85. data/config/locales/pt-BR.yml +9 -0
  86. data/config/locales/pt-PT.yml +1 -0
  87. data/config/locales/ro.yml +1 -0
  88. data/config/locales/ru.yml +3 -0
  89. data/config/locales/sk.yml +60 -0
  90. data/config/locales/sv-SE.yml +3 -0
  91. data/config/locales/tr.yml +10 -0
  92. data/config/locales/uk.yml +3 -0
  93. data/config/locales/vi.yml +48 -6
  94. data/config/locales/zh-CN.yml +34 -5
  95. data/config/locales/zh-TW.yml +1 -0
  96. data/docs/.gitignore +1 -0
  97. data/docs/0-installation.md +2 -2
  98. data/docs/1-general-configuration.md +36 -1
  99. data/docs/10-custom-pages.md +14 -0
  100. data/docs/12-arbre-components.md +41 -1
  101. data/docs/13-authorization-adapter.md +41 -22
  102. data/docs/2-resource-customization.md +10 -5
  103. data/docs/3-index-pages/custom-index.md +1 -1
  104. data/docs/3-index-pages/index-as-blog.md +1 -1
  105. data/docs/3-index-pages/index-as-table.md +12 -5
  106. data/docs/3-index-pages.md +17 -0
  107. data/docs/5-forms.md +16 -2
  108. data/docs/8-custom-actions.md +11 -0
  109. data/docs/CNAME +1 -1
  110. data/docs/Gemfile +2 -1
  111. data/docs/Gemfile.lock +249 -0
  112. data/docs/_config.yml +3 -1
  113. data/docs/_includes/toc.html +1 -1
  114. data/docs/_includes/top-menu.html +9 -1
  115. data/docs/documentation.md +1 -1
  116. data/docs/images/tidelift.svg +14 -0
  117. data/docs/index.html +109 -8
  118. data/docs/stylesheets/main.css +55 -2
  119. data/lib/active_admin/abstract_view_factory.rb +13 -51
  120. data/lib/active_admin/application.rb +53 -160
  121. data/lib/active_admin/application_settings.rb +42 -0
  122. data/lib/active_admin/asset_registration.rb +0 -8
  123. data/lib/active_admin/base_controller/authorization.rb +4 -6
  124. data/lib/active_admin/base_controller.rb +6 -6
  125. data/lib/active_admin/batch_actions/controller.rb +2 -2
  126. data/lib/active_admin/batch_actions/resource_extension.rb +9 -5
  127. data/lib/active_admin/callbacks.rb +1 -1
  128. data/lib/active_admin/controller_action.rb +2 -1
  129. data/lib/active_admin/csv_builder.rb +10 -7
  130. data/lib/active_admin/dependency.rb +3 -67
  131. data/lib/active_admin/deprecation.rb +0 -25
  132. data/lib/active_admin/dsl.rb +1 -8
  133. data/lib/active_admin/dynamic_setting.rb +38 -0
  134. data/lib/active_admin/dynamic_settings_node.rb +28 -0
  135. data/lib/active_admin/engine.rb +5 -0
  136. data/lib/active_admin/error.rb +4 -2
  137. data/lib/active_admin/filters/active_filter.rb +49 -12
  138. data/lib/active_admin/filters/active_sidebar.rb +6 -2
  139. data/lib/active_admin/filters/forms.rb +7 -4
  140. data/lib/active_admin/filters/formtastic_addons.rb +1 -1
  141. data/lib/active_admin/filters/resource_extension.rb +28 -4
  142. data/lib/active_admin/form_builder.rb +98 -63
  143. data/lib/active_admin/generators/boilerplate.rb +12 -4
  144. data/lib/active_admin/helpers/scope_chain.rb +1 -0
  145. data/lib/active_admin/inputs/datepicker_input.rb +8 -1
  146. data/lib/active_admin/inputs/filters/base/search_method_select.rb +2 -2
  147. data/lib/active_admin/inputs/filters/date_range_input.rb +4 -4
  148. data/lib/active_admin/inputs/filters/select_input.rb +5 -1
  149. data/lib/active_admin/menu.rb +2 -8
  150. data/lib/active_admin/menu_item.rb +4 -32
  151. data/lib/active_admin/namespace.rb +20 -8
  152. data/lib/active_admin/namespace_settings.rb +123 -0
  153. data/lib/active_admin/order_clause.rb +2 -2
  154. data/lib/active_admin/orm/active_record/comments/comment.rb +2 -2
  155. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +17 -7
  156. data/lib/active_admin/orm/active_record/comments.rb +15 -4
  157. data/lib/active_admin/page_dsl.rb +1 -1
  158. data/lib/active_admin/page_presenter.rb +2 -1
  159. data/lib/active_admin/pundit_adapter.rb +18 -5
  160. data/lib/active_admin/resource/action_items.rb +7 -2
  161. data/lib/active_admin/resource/attributes.rb +7 -4
  162. data/lib/active_admin/resource/belongs_to.rb +6 -1
  163. data/lib/active_admin/resource/menu.rb +3 -3
  164. data/lib/active_admin/resource/model.rb +15 -0
  165. data/lib/active_admin/resource/naming.rb +3 -3
  166. data/lib/active_admin/resource/routes.rb +20 -7
  167. data/lib/active_admin/resource/scopes.rb +3 -3
  168. data/lib/active_admin/resource/sidebars.rb +1 -1
  169. data/lib/active_admin/resource.rb +18 -4
  170. data/lib/active_admin/resource_collection.rb +2 -2
  171. data/lib/active_admin/resource_controller/action_builder.rb +10 -0
  172. data/lib/active_admin/resource_controller/data_access.rb +5 -1
  173. data/lib/active_admin/resource_controller/decorators.rb +5 -5
  174. data/lib/active_admin/resource_controller/polymorphic_routes.rb +37 -0
  175. data/lib/active_admin/resource_controller/resource_class_methods.rb +2 -0
  176. data/lib/active_admin/resource_controller/scoping.rb +1 -1
  177. data/lib/active_admin/resource_controller.rb +2 -0
  178. data/lib/active_admin/resource_dsl.rb +7 -3
  179. data/lib/active_admin/router.rb +90 -84
  180. data/lib/active_admin/scope.rb +16 -8
  181. data/lib/active_admin/settings_node.rb +19 -0
  182. data/lib/active_admin/sidebar_section.rb +3 -1
  183. data/lib/active_admin/version.rb +1 -1
  184. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +2 -2
  185. data/lib/active_admin/view_helpers/display_helper.rb +13 -4
  186. data/lib/active_admin/view_helpers/download_format_links_helper.rb +1 -0
  187. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +3 -0
  188. data/lib/active_admin/view_helpers.rb +1 -1
  189. data/lib/active_admin/views/components/active_admin_form.rb +9 -4
  190. data/lib/active_admin/views/components/attributes_table.rb +3 -3
  191. data/lib/active_admin/views/components/menu.rb +32 -0
  192. data/lib/active_admin/views/components/menu_item.rb +58 -0
  193. data/lib/active_admin/views/components/paginated_collection.rb +4 -3
  194. data/lib/active_admin/views/components/scopes.rb +11 -4
  195. data/lib/active_admin/views/components/sidebar.rb +13 -0
  196. data/lib/active_admin/views/components/site_title.rb +5 -6
  197. data/lib/active_admin/views/components/status_tag.rb +6 -19
  198. data/lib/active_admin/views/components/table_for.rb +4 -12
  199. data/lib/active_admin/views/components/tabs.rb +15 -3
  200. data/lib/active_admin/views/footer.rb +3 -7
  201. data/lib/active_admin/views/header.rb +3 -15
  202. data/lib/active_admin/views/index_as_blog.rb +1 -1
  203. data/lib/active_admin/views/index_as_grid.rb +25 -25
  204. data/lib/active_admin/views/index_as_table.rb +18 -10
  205. data/lib/active_admin/views/pages/base.rb +31 -54
  206. data/lib/active_admin/views/pages/index.rb +1 -0
  207. data/lib/active_admin/views/tabbed_navigation.rb +4 -59
  208. data/lib/active_admin/views.rb +1 -1
  209. data/lib/active_admin.rb +9 -4
  210. data/lib/generators/active_admin/assets/assets_generator.rb +2 -2
  211. data/lib/generators/active_admin/assets/templates/active_admin.js +1 -0
  212. data/lib/generators/active_admin/install/install_generator.rb +7 -3
  213. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +38 -3
  214. data/lib/generators/active_admin/install/templates/dashboard.rb +2 -3
  215. data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb.erb +1 -15
  216. data/lib/generators/active_admin/page/page_generator.rb +1 -1
  217. data/lib/generators/active_admin/resource/resource_generator.rb +2 -2
  218. data/lib/generators/active_admin/resource/templates/admin.rb.erb +40 -37
  219. data/lib/ransack_ext.rb +3 -3
  220. data/vendor/assets/javascripts/jquery-ui/form-reset-mixin.js +80 -0
  221. data/vendor/assets/javascripts/jquery-ui/form.js +22 -0
  222. data/vendor/assets/javascripts/jquery-ui/labels.js +65 -0
  223. data/vendor/assets/javascripts/jquery-ui/widgets/checkboxradio.js +274 -283
  224. metadata +115 -527
  225. data/.github/ISSUE_TEMPLATE.md +0 -20
  226. data/.gitignore +0 -49
  227. data/.mdlrc +0 -1
  228. data/.rubocop.yml +0 -76
  229. data/.simplecov +0 -13
  230. data/.travis.yml +0 -51
  231. data/.yardopts +0 -7
  232. data/Gemfile +0 -58
  233. data/Rakefile +0 -54
  234. data/activeadmin.gemspec +0 -32
  235. data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
  236. data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
  237. data/app/assets/images/active_admin/orderable.png +0 -0
  238. data/app/assets/javascripts/active_admin/base.js.coffee +0 -13
  239. data/app/assets/javascripts/active_admin/ext/jquery-ui.js.coffee +0 -6
  240. data/app/assets/javascripts/active_admin/ext/jquery.js.coffee +0 -7
  241. data/app/assets/javascripts/active_admin/initializers/batch_actions.js.coffee +0 -11
  242. data/app/assets/javascripts/active_admin/initializers/datepicker.js.coffee +0 -14
  243. data/app/assets/javascripts/active_admin/initializers/filters.js.coffee +0 -26
  244. data/app/assets/javascripts/active_admin/initializers/tabs.js.coffee +0 -7
  245. data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +0 -42
  246. data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +0 -46
  247. data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +0 -104
  248. data/app/assets/javascripts/active_admin/lib/flash.js.coffee +0 -19
  249. data/app/assets/javascripts/active_admin/lib/has_many.js.coffee +0 -79
  250. data/app/assets/javascripts/active_admin/lib/modal_dialog.js.coffee +0 -45
  251. data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +0 -46
  252. data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +0 -22
  253. data/codecov.yml +0 -25
  254. data/config/i18n-tasks.yml +0 -26
  255. data/config/mdl_style.rb +0 -9
  256. data/cucumber.yml +0 -3
  257. data/features/action_item.feature +0 -73
  258. data/features/authorization.feature +0 -64
  259. data/features/authorization_cancan.feature +0 -52
  260. data/features/authorization_pundit.feature +0 -37
  261. data/features/belongs_to.feature +0 -124
  262. data/features/breadcrumb.feature +0 -75
  263. data/features/comments/commenting.feature +0 -178
  264. data/features/comments/viewing_index.feature +0 -19
  265. data/features/create_another.feature +0 -55
  266. data/features/dashboard.feature +0 -16
  267. data/features/decorators.feature +0 -43
  268. data/features/development_reloading.feature +0 -28
  269. data/features/edit_page.feature +0 -116
  270. data/features/favicon.feature +0 -20
  271. data/features/first_boot.feature +0 -16
  272. data/features/footer.feature +0 -28
  273. data/features/global_navigation.feature +0 -29
  274. data/features/i18n.feature +0 -55
  275. data/features/index/batch_actions.feature +0 -218
  276. data/features/index/filters.feature +0 -239
  277. data/features/index/format_as_csv.feature +0 -220
  278. data/features/index/formats.feature +0 -88
  279. data/features/index/index_as_block.feature +0 -15
  280. data/features/index/index_as_blog.feature +0 -69
  281. data/features/index/index_as_grid.feature +0 -45
  282. data/features/index/index_as_table.feature +0 -291
  283. data/features/index/index_blank_slate.feature +0 -83
  284. data/features/index/index_parameters.feature +0 -75
  285. data/features/index/index_scope_to.feature +0 -56
  286. data/features/index/index_scopes.feature +0 -285
  287. data/features/index/page_title.feature +0 -41
  288. data/features/index/pagination.feature +0 -63
  289. data/features/index/switch_index_view.feature +0 -73
  290. data/features/menu.feature +0 -72
  291. data/features/meta_tags.feature +0 -21
  292. data/features/new_page.feature +0 -107
  293. data/features/registering_assets.feature +0 -38
  294. data/features/registering_pages.feature +0 -237
  295. data/features/registering_resources.feature +0 -33
  296. data/features/renamed_resource.feature +0 -30
  297. data/features/root_to.feature +0 -17
  298. data/features/show/attributes_table_title.feature +0 -54
  299. data/features/show/columns.feature +0 -40
  300. data/features/show/default_content.feature +0 -44
  301. data/features/show/page_title.feature +0 -58
  302. data/features/show/tabs.feature +0 -33
  303. data/features/sidebar_sections.feature +0 -210
  304. data/features/site_title.feature +0 -47
  305. data/features/specifying_actions.feature +0 -118
  306. data/features/step_definitions/action_item_steps.rb +0 -7
  307. data/features/step_definitions/action_link_steps.rb +0 -19
  308. data/features/step_definitions/additional_web_steps.rb +0 -81
  309. data/features/step_definitions/asset_steps.rb +0 -15
  310. data/features/step_definitions/attribute_steps.rb +0 -18
  311. data/features/step_definitions/attributes_table_title_steps.rb +0 -11
  312. data/features/step_definitions/batch_action_steps.rb +0 -81
  313. data/features/step_definitions/blog_steps.rb +0 -3
  314. data/features/step_definitions/breadcrumb_steps.rb +0 -3
  315. data/features/step_definitions/column_steps.rb +0 -8
  316. data/features/step_definitions/comment_steps.rb +0 -32
  317. data/features/step_definitions/configuration_steps.rb +0 -100
  318. data/features/step_definitions/dashboard_steps.rb +0 -15
  319. data/features/step_definitions/factory_steps.rb +0 -35
  320. data/features/step_definitions/filter_steps.rb +0 -48
  321. data/features/step_definitions/flash_steps.rb +0 -11
  322. data/features/step_definitions/footer_steps.rb +0 -11
  323. data/features/step_definitions/format_steps.rb +0 -56
  324. data/features/step_definitions/i18n_steps.rb +0 -11
  325. data/features/step_definitions/index_scope_steps.rb +0 -29
  326. data/features/step_definitions/index_views_steps.rb +0 -3
  327. data/features/step_definitions/layout_steps.rb +0 -3
  328. data/features/step_definitions/member_link_steps.rb +0 -7
  329. data/features/step_definitions/menu_steps.rb +0 -11
  330. data/features/step_definitions/meta_tag_steps.rb +0 -3
  331. data/features/step_definitions/pagination_steps.rb +0 -15
  332. data/features/step_definitions/sidebar_steps.rb +0 -11
  333. data/features/step_definitions/site_title_steps.rb +0 -17
  334. data/features/step_definitions/tab_steps.rb +0 -8
  335. data/features/step_definitions/table_steps.rb +0 -116
  336. data/features/step_definitions/user_steps.rb +0 -52
  337. data/features/step_definitions/web_steps.rb +0 -86
  338. data/features/sti_resource.feature +0 -65
  339. data/features/strong_parameters.feature +0 -69
  340. data/features/support/env.rb +0 -122
  341. data/features/support/paths.rb +0 -73
  342. data/features/support/regular_env.rb +0 -7
  343. data/features/support/reload_env.rb +0 -7
  344. data/features/support/selectors.rb +0 -45
  345. data/features/users/logging_in.feature +0 -36
  346. data/features/users/logging_out.feature +0 -13
  347. data/features/users/resetting_password.feature +0 -34
  348. data/gemfiles/rails_42.gemfile +0 -10
  349. data/gemfiles/rails_50.gemfile +0 -10
  350. data/gemfiles/rails_51.gemfile +0 -10
  351. data/lib/active_admin/event.rb +0 -24
  352. data/lib/active_admin/helpers/settings.rb +0 -114
  353. data/lib/active_admin/reloader.rb +0 -25
  354. data/lib/bug_report_templates/active_admin_master.rb +0 -113
  355. data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +0 -1
  356. data/spec/bug_report_templates_spec.rb +0 -26
  357. data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +0 -50
  358. data/spec/javascripts/coffeescripts/jquery.aa.flash.js.coffee +0 -25
  359. data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +0 -34
  360. data/spec/javascripts/fixtures/checkboxes.html +0 -9
  361. data/spec/javascripts/fixtures/flashes.html +0 -2
  362. data/spec/javascripts/fixtures/table_checkboxes.html +0 -17
  363. data/spec/javascripts/helpers/SpecHelper.js +0 -3
  364. data/spec/javascripts/support/jasmine.yml +0 -74
  365. data/spec/javascripts/support/jasmine_runner.rb +0 -19
  366. data/spec/rails_helper.rb +0 -59
  367. data/spec/requests/default_namespace_spec.rb +0 -81
  368. data/spec/requests/memory_spec.rb +0 -25
  369. data/spec/requests/stylesheets_spec.rb +0 -18
  370. data/spec/spec_helper.rb +0 -1
  371. data/spec/support/active_admin_integration_spec_helper.rb +0 -73
  372. data/spec/support/active_admin_request_helpers.rb +0 -39
  373. data/spec/support/rails_template.rb +0 -150
  374. data/spec/support/rails_template_with_data.rb +0 -327
  375. data/spec/support/templates/admin/stores.rb +0 -7
  376. data/spec/support/templates/en.yml +0 -8
  377. data/spec/support/templates/manifest.js +0 -3
  378. data/spec/support/templates/policies/active_admin/comment_policy.rb +0 -9
  379. data/spec/support/templates/policies/active_admin/page_policy.rb +0 -18
  380. data/spec/support/templates/policies/admin_user_policy.rb +0 -11
  381. data/spec/support/templates/policies/application_policy.rb +0 -44
  382. data/spec/support/templates/policies/category_policy.rb +0 -7
  383. data/spec/support/templates/policies/post_policy.rb +0 -15
  384. data/spec/support/templates/policies/store_policy.rb +0 -11
  385. data/spec/support/templates/policies/user_policy.rb +0 -11
  386. data/spec/support/templates/post_decorator.rb +0 -10
  387. data/spec/unit/abstract_view_factory_spec.rb +0 -78
  388. data/spec/unit/action_builder_spec.rb +0 -125
  389. data/spec/unit/active_admin_spec.rb +0 -11
  390. data/spec/unit/application_spec.rb +0 -184
  391. data/spec/unit/asset_registration_spec.rb +0 -81
  392. data/spec/unit/authorization/authorization_adapter_spec.rb +0 -61
  393. data/spec/unit/authorization/controller_authorization_spec.rb +0 -43
  394. data/spec/unit/authorization/index_overriding_spec.rb +0 -23
  395. data/spec/unit/auto_link_spec.rb +0 -93
  396. data/spec/unit/batch_actions/resource_spec.rb +0 -84
  397. data/spec/unit/batch_actions/settings_spec.rb +0 -61
  398. data/spec/unit/belongs_to_spec.rb +0 -76
  399. data/spec/unit/cancan_adapter_spec.rb +0 -43
  400. data/spec/unit/comments_spec.rb +0 -176
  401. data/spec/unit/component_spec.rb +0 -18
  402. data/spec/unit/config_shared_examples.rb +0 -59
  403. data/spec/unit/controller_filters_spec.rb +0 -41
  404. data/spec/unit/csv_builder_spec.rb +0 -304
  405. data/spec/unit/dependency_spec.rb +0 -135
  406. data/spec/unit/devise_spec.rb +0 -110
  407. data/spec/unit/dsl_spec.rb +0 -120
  408. data/spec/unit/filters/active_filter_spec.rb +0 -135
  409. data/spec/unit/filters/active_spec.rb +0 -24
  410. data/spec/unit/filters/filter_form_builder_spec.rb +0 -502
  411. data/spec/unit/filters/resource_spec.rb +0 -128
  412. data/spec/unit/form_builder_spec.rb +0 -990
  413. data/spec/unit/generators/install_spec.rb +0 -31
  414. data/spec/unit/helpers/collection_spec.rb +0 -68
  415. data/spec/unit/helpers/scope_chain_spec.rb +0 -35
  416. data/spec/unit/helpers/settings_spec.rb +0 -30
  417. data/spec/unit/i18n_spec.rb +0 -29
  418. data/spec/unit/localizers/resource_localizer_spec.rb +0 -36
  419. data/spec/unit/menu_collection_spec.rb +0 -62
  420. data/spec/unit/menu_item_spec.rb +0 -141
  421. data/spec/unit/menu_spec.rb +0 -71
  422. data/spec/unit/namespace/authorization_spec.rb +0 -27
  423. data/spec/unit/namespace/register_page_spec.rb +0 -99
  424. data/spec/unit/namespace/register_resource_spec.rb +0 -162
  425. data/spec/unit/namespace_spec.rb +0 -124
  426. data/spec/unit/order_clause_spec.rb +0 -81
  427. data/spec/unit/page_controller_spec.rb +0 -5
  428. data/spec/unit/page_spec.rb +0 -128
  429. data/spec/unit/pretty_format_spec.rb +0 -82
  430. data/spec/unit/pundit_adapter_spec.rb +0 -98
  431. data/spec/unit/resource/action_items_spec.rb +0 -69
  432. data/spec/unit/resource/attributes_spec.rb +0 -49
  433. data/spec/unit/resource/includes_spec.rb +0 -21
  434. data/spec/unit/resource/menu_spec.rb +0 -18
  435. data/spec/unit/resource/naming_spec.rb +0 -122
  436. data/spec/unit/resource/ordering_spec.rb +0 -35
  437. data/spec/unit/resource/page_presenters_spec.rb +0 -44
  438. data/spec/unit/resource/pagination_spec.rb +0 -38
  439. data/spec/unit/resource/routes_spec.rb +0 -125
  440. data/spec/unit/resource/scopes_spec.rb +0 -50
  441. data/spec/unit/resource/sidebars_spec.rb +0 -43
  442. data/spec/unit/resource_collection_spec.rb +0 -175
  443. data/spec/unit/resource_controller/data_access_spec.rb +0 -230
  444. data/spec/unit/resource_controller/decorators_spec.rb +0 -94
  445. data/spec/unit/resource_controller/sidebars_spec.rb +0 -37
  446. data/spec/unit/resource_controller_spec.rb +0 -273
  447. data/spec/unit/resource_registration_spec.rb +0 -61
  448. data/spec/unit/resource_spec.rb +0 -320
  449. data/spec/unit/routing_spec.rb +0 -211
  450. data/spec/unit/scope_spec.rb +0 -209
  451. data/spec/unit/settings_spec.rb +0 -117
  452. data/spec/unit/view_factory_spec.rb +0 -19
  453. data/spec/unit/view_helpers/breadcrumbs_spec.rb +0 -252
  454. data/spec/unit/view_helpers/display_helper_spec.rb +0 -195
  455. data/spec/unit/view_helpers/download_format_links_helper_spec.rb +0 -39
  456. data/spec/unit/view_helpers/fields_for_spec.rb +0 -50
  457. data/spec/unit/view_helpers/flash_helper_spec.rb +0 -24
  458. data/spec/unit/view_helpers/form_helper_spec.rb +0 -42
  459. data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +0 -138
  460. data/spec/unit/views/components/attributes_table_spec.rb +0 -271
  461. data/spec/unit/views/components/batch_action_selector_spec.rb +0 -43
  462. data/spec/unit/views/components/blank_slate_spec.rb +0 -27
  463. data/spec/unit/views/components/columns_spec.rb +0 -187
  464. data/spec/unit/views/components/index_list_spec.rb +0 -49
  465. data/spec/unit/views/components/index_table_for_spec.rb +0 -127
  466. data/spec/unit/views/components/paginated_collection_spec.rb +0 -249
  467. data/spec/unit/views/components/panel_spec.rb +0 -58
  468. data/spec/unit/views/components/sidebar_section_spec.rb +0 -68
  469. data/spec/unit/views/components/site_title_spec.rb +0 -76
  470. data/spec/unit/views/components/status_tag_spec.rb +0 -265
  471. data/spec/unit/views/components/table_for_spec.rb +0 -436
  472. data/spec/unit/views/components/tabs_spec.rb +0 -67
  473. data/spec/unit/views/components/unsupported_browser_spec.rb +0 -41
  474. data/spec/unit/views/index_as_blog_spec.rb +0 -76
  475. data/spec/unit/views/pages/form_spec.rb +0 -54
  476. data/spec/unit/views/pages/index_spec.rb +0 -60
  477. data/spec/unit/views/pages/layout_spec.rb +0 -59
  478. data/spec/unit/views/pages/show_spec.rb +0 -32
  479. data/spec/unit/views/tabbed_navigation_spec.rb +0 -158
  480. data/tasks/docs.rake +0 -64
  481. data/tasks/lint.rake +0 -21
  482. data/tasks/local.rake +0 -25
  483. data/tasks/parallel_tests.rake +0 -66
  484. data/tasks/test.rake +0 -29
  485. /data/{vendor → app}/assets/stylesheets/active_admin/_normalize.scss +0 -0
  486. /data/lib/generators/active_admin/install/templates/{admin_user.rb.erb → admin_users.rb.erb} +0 -0
@@ -7,8 +7,8 @@ module ActiveAdmin
7
7
  def to_html
8
8
  input_wrapping do
9
9
  [ label_html,
10
- builder.text_field(gt_input_name, input_html_options(gt_input_name, gt_input_placeholder)),
11
- builder.text_field(lt_input_name, input_html_options(lt_input_name, lt_input_placeholder)),
10
+ builder.text_field(gt_input_name, input_html_options_for(gt_input_name, gt_input_placeholder)),
11
+ builder.text_field(lt_input_name, input_html_options_for(lt_input_name, lt_input_placeholder)),
12
12
  ].join("\n").html_safe
13
13
  end
14
14
  end
@@ -22,7 +22,7 @@ module ActiveAdmin
22
22
  column && column.type == :date ? "#{method}_lteq" : "#{method}_lteq_datetime"
23
23
  end
24
24
 
25
- def input_html_options(input_name = gt_input_name, placeholder = gt_input_placeholder)
25
+ def input_html_options_for(input_name = gt_input_name, placeholder = gt_input_placeholder)
26
26
  current_value = begin
27
27
  #cast value to date object before rendering input
28
28
  @object.public_send(input_name).to_s.to_date
@@ -33,7 +33,7 @@ module ActiveAdmin
33
33
  class: "datepicker",
34
34
  maxlength: 10,
35
35
  placeholder: placeholder,
36
- value: current_value ? current_value.strftime("%Y-%m-%d") : "" }
36
+ value: current_value ? current_value.strftime("%Y-%m-%d") : "" }.merge(input_html_options)
37
37
  end
38
38
 
39
39
  def gt_input_placeholder
@@ -15,7 +15,7 @@ module ActiveAdmin
15
15
  "#{reflection.through_reflection.name}_#{reflection.foreign_key}"
16
16
  else
17
17
  name = method.to_s
18
- name.concat '_id' if reflection
18
+ name.concat "_#{reflection.association_primary_key}" if reflection_searchable?
19
19
  name
20
20
  end
21
21
  end
@@ -48,6 +48,10 @@ module ActiveAdmin
48
48
  klass.reorder("#{method} asc").distinct.pluck method
49
49
  end
50
50
 
51
+ def reflection_searchable?
52
+ reflection && !reflection.polymorphic?
53
+ end
54
+
51
55
  end
52
56
  end
53
57
  end
@@ -68,14 +68,8 @@ module ActiveAdmin
68
68
  self == item || include?(item)
69
69
  end
70
70
 
71
- # Returns sorted array of menu items that should be displayed in this context.
72
- # Sorts by priority first, then alphabetically by label if needed.
73
- def items(context = nil)
74
- @children.values.select{ |i| i.display?(context) }.sort do |a, b|
75
- result = a.priority <=> b.priority
76
- result = a.label(context) <=> b.label(context) if result == 0
77
- result
78
- end
71
+ def items
72
+ @children.values
79
73
  end
80
74
 
81
75
  attr_reader :children
@@ -1,9 +1,6 @@
1
- require 'active_admin/view_helpers/method_or_proc_helper'
2
-
3
1
  module ActiveAdmin
4
2
  class MenuItem
5
3
  include Menu::MenuNode
6
- include MethodOrProcHelper
7
4
 
8
5
  attr_reader :html_options, :parent, :priority
9
6
 
@@ -53,7 +50,7 @@ module ActiveAdmin
53
50
  @url = options[:url] || '#'
54
51
  @priority = options[:priority] || 10
55
52
  @html_options = options[:html_options] || {}
56
- @should_display = options[:if] || proc{true}
53
+ @should_display = options[:if] || proc { true }
57
54
  @parent = options[:parent]
58
55
 
59
56
  yield(self) if block_given? # Builder style syntax
@@ -63,35 +60,10 @@ module ActiveAdmin
63
60
  @id ||= normalize_id @dirty_id
64
61
  end
65
62
 
66
- def label(context = nil)
67
- render_in_context context, @label
68
- end
69
-
70
- def url(context = nil)
71
- render_in_context context, @url
72
- end
63
+ attr_reader :label
64
+ attr_reader :url
73
65
 
74
66
  # Don't display if the :if option passed says so
75
- # Don't display if the link isn't real, we have children, and none of the children are being displayed.
76
- def display?(context = nil)
77
- return false unless render_in_context(context, @should_display)
78
- return false if !real_url?(context) && @children.any? && !items(context).any?
79
- true
80
- end
81
-
82
- # Returns an array of the ancestry of this menu item.
83
- # The first item is the immediate parent of the item.
84
- def ancestors
85
- parent ? [parent, parent.ancestors].flatten : []
86
- end
87
-
88
- private
89
-
90
- # URL is not nil, empty, or '#'
91
- def real_url?(context = nil)
92
- url = url context
93
- url.present? && url != '#'
94
- end
95
-
67
+ attr_reader :should_display
96
68
  end
97
69
  end
@@ -25,6 +25,12 @@ module ActiveAdmin
25
25
  # resource will be accessible from "/posts" and the controller will be PostsController.
26
26
  #
27
27
  class Namespace
28
+ class << self
29
+ def setting(name, default)
30
+ Deprecation.warn "This method does not do anything and will be removed."
31
+ end
32
+ end
33
+
28
34
  RegisterEvent = 'active_admin.namespace.register'.freeze
29
35
 
30
36
  attr_reader :application, :resources, :menus
@@ -41,6 +47,18 @@ module ActiveAdmin
41
47
  @name.to_sym
42
48
  end
43
49
 
50
+ def settings
51
+ @settings ||= SettingsNode.build(application.namespace_settings)
52
+ end
53
+
54
+ def respond_to_missing?(method, include_private = false)
55
+ settings.respond_to?(method) || super
56
+ end
57
+
58
+ def method_missing(method, *args)
59
+ settings.respond_to?(method) ? settings.send(method, *args) : super
60
+ end
61
+
44
62
  # Register a resource into this namespace. The preffered method to access this is to
45
63
  # use the global registration ActiveAdmin.register which delegates to the proper
46
64
  # namespace instance.
@@ -100,12 +118,6 @@ module ActiveAdmin
100
118
  resources[klass]
101
119
  end
102
120
 
103
- # Override from ActiveAdmin::Settings to inherit default attributes
104
- # from the application
105
- def read_default_setting(name)
106
- application.public_send name
107
- end
108
-
109
121
  def fetch_menu(name)
110
122
  @menus.fetch(name)
111
123
  end
@@ -138,8 +150,8 @@ module ActiveAdmin
138
150
  if logout_link_path
139
151
  html_options = html_options.reverse_merge(method: logout_link_method || :get)
140
152
  menu.add id: 'logout', priority: priority, html_options: html_options,
141
- label: ->{ I18n.t 'active_admin.logout' },
142
- url: ->{ render_or_call_method_or_proc_on self, active_admin_namespace.logout_link_path },
153
+ label: -> { I18n.t 'active_admin.logout' },
154
+ url: -> { render_or_call_method_or_proc_on self, active_admin_namespace.logout_link_path },
143
155
  if: :current_active_admin_user?
144
156
  end
145
157
  end
@@ -0,0 +1,123 @@
1
+ require 'active_admin/dynamic_settings_node'
2
+
3
+ module ActiveAdmin
4
+ class NamespaceSettings < DynamicSettingsNode
5
+ # The default number of resources to display on index pages
6
+ register :default_per_page, 30
7
+
8
+ # The max number of resources to display on index pages and batch exports
9
+ register :max_per_page, 10_000
10
+
11
+ # The title which gets displayed in the main layout
12
+ register :site_title, "", :string_symbol_or_proc
13
+
14
+ # Set the site title link href (defaults to AA dashboard)
15
+ register :site_title_link, ""
16
+
17
+ # Set the site title image displayed in the main layout (has precendence over :site_title)
18
+ register :site_title_image, "", :string_symbol_or_proc
19
+
20
+ # Add to the site head
21
+ register :head, "", :string_symbol_or_proc
22
+
23
+ # Set the site footer text (defaults to Powered by ActiveAdmin text with version)
24
+ register :footer, "", :string_symbol_or_proc
25
+
26
+ # Set a favicon
27
+ register :favicon, false
28
+
29
+ # Additional meta tags to place in head of logged in pages
30
+ register :meta_tags, {}
31
+
32
+ # Additional meta tags to place in head of logged out pages
33
+ register :meta_tags_for_logged_out_pages, { robots: "noindex, nofollow" }
34
+
35
+ # The view factory to use to generate all the view classes. Take
36
+ # a look at ActiveAdmin::ViewFactory
37
+ register :view_factory, ActiveAdmin::ViewFactory.new
38
+
39
+ # The method to call in controllers to get the current user
40
+ register :current_user_method, false
41
+
42
+ # The method to call in the controllers to ensure that there
43
+ # is a currently authenticated admin user
44
+ register :authentication_method, false
45
+
46
+ # The path to log user's out with. If set to a symbol, we assume
47
+ # that it's a method to call which returns the path
48
+ register :logout_link_path, :destroy_admin_user_session_path
49
+
50
+ # The method to use when generating the link for user logout
51
+ register :logout_link_method, :get
52
+
53
+ # Whether the batch actions are enabled or not
54
+ register :batch_actions, false
55
+
56
+ # Whether filters are enabled
57
+ register :filters, true
58
+
59
+ # The namespace root
60
+ register :root_to, 'dashboard#index'
61
+
62
+ # Options that are passed to root_to
63
+ register :root_to_options, {}
64
+
65
+ # Options passed to the routes, i.e. { path: '/custom' }
66
+ register :route_options, {}
67
+
68
+ # Display breadcrumbs
69
+ register :breadcrumb, true
70
+
71
+ # Display create another checkbox on a new page
72
+ # @return [Boolean] (true)
73
+ register :create_another, false
74
+
75
+ # Default CSV options
76
+ register :csv_options, { col_sep: ',', byte_order_mark: "\xEF\xBB\xBF" }
77
+
78
+ # Default Download Links options
79
+ register :download_links, true
80
+
81
+ # The authorization adapter to use
82
+ register :authorization_adapter, ActiveAdmin::AuthorizationAdapter
83
+
84
+ # A proc to be used when a user is not authorized to view the current resource
85
+ register :on_unauthorized_access, :rescue_active_admin_access_denied
86
+
87
+ # A regex to detect unsupported browser, set to false to disable
88
+ register :unsupported_browser_matcher, /MSIE [1-8]\.0/
89
+
90
+ # Whether to display 'Current Filters' on search screen
91
+ register :current_filters, true
92
+
93
+ # class to handle ordering
94
+ register :order_clause, ActiveAdmin::OrderClause
95
+
96
+ # default show_count for scopes
97
+ register :scopes_show_count, true
98
+
99
+ # Request parameters that are permitted by default
100
+ register :permitted_params, [
101
+ :utf8, :_method, :authenticity_token, :commit, :id
102
+ ]
103
+
104
+ # Set flash message keys that shouldn't show in ActiveAdmin
105
+ register :flash_keys_to_except, ['timedout']
106
+
107
+ # Include association filters by default
108
+ register :include_default_association_filters, true
109
+
110
+ register :maximum_association_filter_arity, :unlimited
111
+
112
+ register :filter_columns_for_large_association, [
113
+ :display_name,
114
+ :full_name,
115
+ :name,
116
+ :username,
117
+ :login,
118
+ :title,
119
+ :email,
120
+ ]
121
+ register :filter_method_for_large_association, '_starts_with'
122
+ end
123
+ end
@@ -3,7 +3,7 @@ module ActiveAdmin
3
3
  attr_reader :field, :order, :active_admin_config
4
4
 
5
5
  def initialize(active_admin_config, clause)
6
- clause =~ /^([\w\_\.]+)(->'\w+')?_(desc|asc)$/
6
+ clause =~ /^([\w\.]+)(->'\w+')?_(desc|asc)$/
7
7
  @column = $1
8
8
  @op = $2
9
9
  @order = $3
@@ -16,7 +16,7 @@ module ActiveAdmin
16
16
  end
17
17
 
18
18
  def apply(chain)
19
- chain.reorder(sql)
19
+ chain.reorder(Arel.sql sql)
20
20
  end
21
21
 
22
22
  def to_sql
@@ -3,7 +3,7 @@ module ActiveAdmin
3
3
 
4
4
  self.table_name = "#{table_name_prefix}active_admin_comments#{table_name_suffix}"
5
5
 
6
- belongs_to :resource, polymorphic: true
6
+ belongs_to :resource, polymorphic: true, optional: true
7
7
  belongs_to :author, polymorphic: true
8
8
 
9
9
  validates_presence_of :body, :namespace, :resource
@@ -18,7 +18,7 @@ module ActiveAdmin
18
18
  def self.find_for_resource_in_namespace(resource, namespace)
19
19
  where(
20
20
  resource_type: resource_type(resource),
21
- resource_id: resource,
21
+ resource_id: resource.id,
22
22
  namespace: namespace.to_s
23
23
  ).order(ActiveAdmin.application.namespaces[namespace.to_sym].comments_order)
24
24
  end
@@ -11,10 +11,12 @@ module ActiveAdmin
11
11
  attr_accessor :resource
12
12
 
13
13
  def build(resource)
14
- @resource = resource
15
- @comments = ActiveAdmin::Comment.find_for_resource_in_namespace(resource, active_admin_namespace.name).page(params[:page])
16
- super(title, for: resource)
17
- build_comments
14
+ if authorized?(ActiveAdmin::Auth::READ, ActiveAdmin::Comment)
15
+ @resource = resource
16
+ @comments = active_admin_authorization.scope_collection(ActiveAdmin::Comment.find_for_resource_in_namespace(resource, active_admin_namespace.name).includes(:author).page(params[:page]))
17
+ super(title, for: resource)
18
+ build_comments
19
+ end
18
20
  end
19
21
 
20
22
  protected
@@ -24,10 +26,18 @@ module ActiveAdmin
24
26
  end
25
27
 
26
28
  def build_comments
27
- @comments.any? ? @comments.each(&method(:build_comment)) : build_empty_message
28
- div page_entries_info(@comments).html_safe, class: 'pagination_information'
29
+ if @comments.any?
30
+ @comments.each(&method(:build_comment))
31
+ div page_entries_info(@comments).html_safe, class: 'pagination_information'
32
+ else
33
+ build_empty_message
34
+ end
35
+
29
36
  text_node paginate @comments
30
- build_comment_form
37
+
38
+ if authorized?(ActiveAdmin::Auth::CREATE, ActiveAdmin::Comment)
39
+ build_comment_form
40
+ end
31
41
  end
32
42
 
33
43
  def build_comment(comment)
@@ -17,6 +17,17 @@ ActiveAdmin.application.view_factory.show_page.send :include, ActiveAdmin::Comme
17
17
  # Load the model as soon as it's referenced. By that point, Rails & Kaminari will be ready
18
18
  ActiveAdmin.autoload :Comment, 'active_admin/orm/active_record/comments/comment'
19
19
 
20
+ # Hint i18n-tasks about model and attribute translations used by default install
21
+ # i18n-tasks-use t('activerecord.models.comment')
22
+ # i18n-tasks-use t('activerecord.models.active_admin/comment')
23
+ # i18n-tasks-use t('activerecord.attributes.active_admin/comment.author_type')
24
+ # i18n-tasks-use t('activerecord.attributes.active_admin/comment.body')
25
+ # i18n-tasks-use t('activerecord.attributes.active_admin/comment.created_at')
26
+ # i18n-tasks-use t('activerecord.attributes.active_admin/comment.namespace')
27
+ # i18n-tasks-use t('activerecord.attributes.active_admin/comment.resource_type')
28
+ # i18n-tasks-use t('activerecord.attributes.active_admin/comment.updated_at')
29
+ # i18n-tasks-use t('active_admin.scopes.all')
30
+
20
31
  # Walk through all the loaded namespaces after they're loaded
21
32
  ActiveAdmin.after_load do |app|
22
33
  app.namespaces.each do |namespace|
@@ -53,21 +64,21 @@ ActiveAdmin.after_load do |app|
53
64
  def create
54
65
  create! do |success, failure|
55
66
  success.html do
56
- ActiveAdmin::Dependency.rails.redirect_back self, active_admin_root
67
+ redirect_back fallback_location: active_admin_root
57
68
  end
58
69
  failure.html do
59
70
  flash[:error] = I18n.t 'active_admin.comments.errors.empty_text'
60
- ActiveAdmin::Dependency.rails.redirect_back self, active_admin_root
71
+ redirect_back fallback_location: active_admin_root
61
72
  end
62
73
  end
63
74
 
64
75
  def destroy
65
76
  destroy! do |success, failure|
66
77
  success.html do
67
- ActiveAdmin::Dependency.rails.redirect_back self, active_admin_root
78
+ redirect_back fallback_location: active_admin_root
68
79
  end
69
80
  failure.html do
70
- ActiveAdmin::Dependency.rails.redirect_back self, active_admin_root
81
+ redirect_back fallback_location: active_admin_root
71
82
  end
72
83
  end
73
84
  end
@@ -21,7 +21,7 @@ module ActiveAdmin
21
21
  def page_action(name, options = {}, &block)
22
22
  config.page_actions << ControllerAction.new(name, options)
23
23
  controller do
24
- define_method(name, &block || Proc.new{})
24
+ define_method(name, &block || Proc.new {})
25
25
  end
26
26
  end
27
27
 
@@ -21,7 +21,8 @@ module ActiveAdmin
21
21
  delegate :has_key?, :fetch, to: :options
22
22
 
23
23
  def initialize(options = {}, &block)
24
- @options, @block = options, block
24
+ @options = options
25
+ @block = block
25
26
  end
26
27
 
27
28
  def [](key)
@@ -4,6 +4,7 @@ require 'pundit'
4
4
 
5
5
  # Add a setting to the application to configure the pundit default policy
6
6
  ActiveAdmin::Application.inheritable_setting :pundit_default_policy, nil
7
+ ActiveAdmin::Application.inheritable_setting :pundit_policy_namespace, nil
7
8
 
8
9
  module ActiveAdmin
9
10
 
@@ -19,7 +20,7 @@ module ActiveAdmin
19
20
  def scope_collection(collection, action = Auth::READ)
20
21
  # scoping is appliable only to read/index action
21
22
  # which means there is no way how to scope other actions
22
- Pundit.policy_scope!(user, collection)
23
+ Pundit.policy_scope!(user, namespace(collection))
23
24
  rescue Pundit::NotDefinedError => e
24
25
  if default_policy_class && default_policy_class.const_defined?(:Scope)
25
26
  default_policy_class::Scope.new(user, collection).resolve
@@ -30,9 +31,9 @@ module ActiveAdmin
30
31
 
31
32
  def retrieve_policy(subject)
32
33
  case subject
33
- when nil then Pundit.policy!(user, resource)
34
- when Class then Pundit.policy!(user, subject.new)
35
- else Pundit.policy!(user, 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))
36
37
  end
37
38
  rescue Pundit::NotDefinedError => e
38
39
  if default_policy_class
@@ -43,7 +44,7 @@ module ActiveAdmin
43
44
  end
44
45
 
45
46
  def format_action(action, subject)
46
- # https://github.com/elabs/pundit/blob/master/lib/generators/pundit/install/templates/application_policy.rb
47
+ # https://github.com/varvet/pundit/blob/master/lib/generators/pundit/install/templates/application_policy.rb
47
48
  case action
48
49
  when Auth::CREATE then :create?
49
50
  when Auth::UPDATE then :update?
@@ -55,6 +56,14 @@ module ActiveAdmin
55
56
 
56
57
  private
57
58
 
59
+ def namespace(object)
60
+ if default_policy_namespace && !object.class.to_s.include?(default_policy_namespace.to_s.camelize)
61
+ [default_policy_namespace.to_sym, object]
62
+ else
63
+ object
64
+ end
65
+ end
66
+
58
67
  def default_policy_class
59
68
  ActiveAdmin.application.pundit_default_policy && ActiveAdmin.application.pundit_default_policy.constantize
60
69
  end
@@ -63,6 +72,10 @@ module ActiveAdmin
63
72
  default_policy_class.new(user, subject)
64
73
  end
65
74
 
75
+ def default_policy_namespace
76
+ ActiveAdmin.application.pundit_policy_namespace
77
+ end
78
+
66
79
  end
67
80
 
68
81
  end
@@ -24,6 +24,7 @@ module ActiveAdmin
24
24
  # this action item on.
25
25
  # :except: A single or array of controller actions not to
26
26
  # display this action item on.
27
+ # :priority: A single integer value. To control the display order. Default is 10.
27
28
  def add_action_item(name, options = {}, &block)
28
29
  self.action_items << ActiveAdmin::ActionItem.new(name, options, &block)
29
30
  end
@@ -38,7 +39,7 @@ module ActiveAdmin
38
39
  #
39
40
  # @return [Array] Array of ActionItems for the controller actions
40
41
  def action_items_for(action, render_context = nil)
41
- action_items.select{ |item| item.display_on? action, render_context }
42
+ action_items.select { |item| item.display_on? action, render_context }.sort_by(&:priority)
42
43
  end
43
44
 
44
45
  # Clears all the existing action items for this resource
@@ -86,7 +87,7 @@ module ActiveAdmin
86
87
  if controller.action_methods.include?('destroy') && authorized?(ActiveAdmin::Auth::DESTROY, resource)
87
88
  localizer = ActiveAdmin::Localizers.resource(active_admin_config)
88
89
  link_to localizer.t(:delete_model), resource_path(resource), method: :delete,
89
- data: {confirm: localizer.t(:delete_confirmation)}
90
+ data: { confirm: localizer.t(:delete_confirmation) }
90
91
  end
91
92
  end
92
93
  end
@@ -110,6 +111,10 @@ module ActiveAdmin
110
111
  def html_class
111
112
  "action_item #{@options[:class]}".rstrip
112
113
  end
114
+
115
+ def priority
116
+ @options[:priority] || 10
117
+ end
113
118
  end
114
119
 
115
120
  end
@@ -18,13 +18,13 @@ module ActiveAdmin
18
18
 
19
19
  def foreign_methods
20
20
  @foreign_methods ||= resource_class.reflect_on_all_associations.
21
- select{ |r| r.macro == :belongs_to }.
22
- reject{ |r| r.chain.length > 2 && !r.options[:polymorphic] }.
23
- index_by{ |r| r.foreign_key.to_sym }
21
+ select { |r| r.macro == :belongs_to }.
22
+ reject { |r| r.chain.length > 2 && !r.options[:polymorphic] }.
23
+ index_by { |r| r.foreign_key.to_sym }
24
24
  end
25
25
 
26
26
  def reject_col?(c)
27
- primary_col?(c) || sti_col?(c) || counter_cache_col?(c)
27
+ primary_col?(c) || sti_col?(c) || counter_cache_col?(c) || filtered_col?(c)
28
28
  end
29
29
 
30
30
  def primary_col?(c)
@@ -39,6 +39,9 @@ module ActiveAdmin
39
39
  c.name.end_with?('_count')
40
40
  end
41
41
 
42
+ def filtered_col?(c)
43
+ ActiveAdmin.application.filter_attributes.include?(c.name.to_sym)
44
+ end
42
45
  end
43
46
  end
44
47
  end
@@ -14,8 +14,13 @@ module ActiveAdmin
14
14
  # The resource which initiated this relationship
15
15
  attr_reader :owner
16
16
 
17
+ # The name of the relation
18
+ attr_reader :target_name
19
+
17
20
  def initialize(owner, target_name, options = {})
18
- @owner, @target_name, @options = owner, target_name, options
21
+ @owner = owner
22
+ @target_name = target_name
23
+ @options = options
19
24
  end
20
25
 
21
26
  # Returns the target resource class or raises an exception if it doesn't exist
@@ -26,9 +26,9 @@ module ActiveAdmin
26
26
  resource = self
27
27
  {
28
28
  id: resource_name.plural,
29
- 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) }
29
+ 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) }
32
32
  }
33
33
  end
34
34
 
@@ -0,0 +1,15 @@
1
+ module ActiveAdmin
2
+ class Model
3
+ def initialize(resource, record)
4
+ @record = record
5
+
6
+ if resource
7
+ @record.extend(resource.resource_name_extension)
8
+ end
9
+ end
10
+
11
+ def to_model
12
+ @record
13
+ end
14
+ end
15
+ end
@@ -22,8 +22,8 @@ module ActiveAdmin
22
22
 
23
23
  # Returns the plural version of this resource such as "Bank Accounts"
24
24
  def plural_resource_label(options = {})
25
- defaults = {count: Helpers::I18n::PLURAL_MANY_COUNT,
26
- default: resource_label.pluralize.titleize}
25
+ defaults = { count: Helpers::I18n::PLURAL_MANY_COUNT,
26
+ default: resource_label.pluralize.titleize }
27
27
  resource_name.translate defaults.merge options
28
28
  end
29
29
 
@@ -46,7 +46,7 @@ module ActiveAdmin
46
46
  end
47
47
 
48
48
  def translate(options = {})
49
- I18n.t i18n_key, {scope: [:activerecord, :models]}.merge(options)
49
+ I18n.t i18n_key, { scope: [:activerecord, :models] }.merge(options)
50
50
  end
51
51
 
52
52
  def route_key