activeadmin-rails 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (584) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +64 -0
  3. data/.github/ISSUE_TEMPLATE.md +20 -0
  4. data/.github/workflows/ci.yaml +64 -0
  5. data/.github/workflows/daily.yaml +64 -0
  6. data/.github/workflows/pages.yml +72 -0
  7. data/.gitignore +23 -0
  8. data/.mdlrc +1 -0
  9. data/.rubocop.yml +84 -0
  10. data/.simplecov +13 -0
  11. data/.yardopts +7 -0
  12. data/CHANGELOG.md +514 -0
  13. data/CODE_OF_CONDUCT.md +22 -0
  14. data/CONTRIBUTING.md +190 -0
  15. data/Gemfile +51 -0
  16. data/LICENSE +20 -0
  17. data/README.md +84 -0
  18. data/Rakefile +56 -0
  19. data/activeadmin-rails.gemspec +39 -0
  20. data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
  21. data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
  22. data/app/assets/images/active_admin/orderable.png +0 -0
  23. data/app/assets/javascripts/active_admin/base.es6 +23 -0
  24. data/app/assets/javascripts/active_admin/ext/jquery-ui.es6 +7 -0
  25. data/app/assets/javascripts/active_admin/ext/jquery.es6 +9 -0
  26. data/app/assets/javascripts/active_admin/initializers/datepicker.es6 +16 -0
  27. data/app/assets/javascripts/active_admin/initializers/filters.es6 +45 -0
  28. data/app/assets/javascripts/active_admin/initializers/tabs.es6 +6 -0
  29. data/app/assets/javascripts/active_admin/lib/active_admin.es6 +41 -0
  30. data/app/assets/javascripts/active_admin/lib/batch_actions.es6 +59 -0
  31. data/app/assets/javascripts/active_admin/lib/checkbox-toggler.es6 +49 -0
  32. data/app/assets/javascripts/active_admin/lib/dropdown-menu.es6 +123 -0
  33. data/app/assets/javascripts/active_admin/lib/has_many.es6 +89 -0
  34. data/app/assets/javascripts/active_admin/lib/modal_dialog.es6 +61 -0
  35. data/app/assets/javascripts/active_admin/lib/per_page.es6 +47 -0
  36. data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.es6 +36 -0
  37. data/app/assets/stylesheets/active_admin/_base.scss +41 -0
  38. data/app/assets/stylesheets/active_admin/_forms.scss +338 -0
  39. data/app/assets/stylesheets/active_admin/_header.scss +156 -0
  40. data/app/assets/stylesheets/active_admin/_mixins.scss +1 -0
  41. data/app/assets/stylesheets/active_admin/_typography.scss +100 -0
  42. data/app/assets/stylesheets/active_admin/components/_batch_actions.scss +6 -0
  43. data/app/assets/stylesheets/active_admin/components/_blank_slates.scss +30 -0
  44. data/app/assets/stylesheets/active_admin/components/_breadcrumbs.scss +20 -0
  45. data/app/assets/stylesheets/active_admin/components/_buttons.scss +6 -0
  46. data/app/assets/stylesheets/active_admin/components/_columns.scss +3 -0
  47. data/app/assets/stylesheets/active_admin/components/_comments.scss +41 -0
  48. data/app/assets/stylesheets/active_admin/components/_date_picker.scss +149 -0
  49. data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +152 -0
  50. data/app/assets/stylesheets/active_admin/components/_flash_messages.scss +37 -0
  51. data/app/assets/stylesheets/active_admin/components/_grid.scss +9 -0
  52. data/app/assets/stylesheets/active_admin/components/_index_list.scss +12 -0
  53. data/app/assets/stylesheets/active_admin/components/_links.scss +5 -0
  54. data/app/assets/stylesheets/active_admin/components/_modal_dialog.scss +34 -0
  55. data/app/assets/stylesheets/active_admin/components/_pagination.scss +55 -0
  56. data/app/assets/stylesheets/active_admin/components/_panels.scss +6 -0
  57. data/app/assets/stylesheets/active_admin/components/_scopes.scss +13 -0
  58. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +17 -0
  59. data/app/assets/stylesheets/active_admin/components/_table_tools.scss +67 -0
  60. data/app/assets/stylesheets/active_admin/components/_tables.scss +113 -0
  61. data/app/assets/stylesheets/active_admin/components/_tabs.scss +65 -0
  62. data/app/assets/stylesheets/active_admin/components/_unsupported_browser.scss +16 -0
  63. data/app/assets/stylesheets/active_admin/mixins/_all.scss +8 -0
  64. data/app/assets/stylesheets/active_admin/mixins/_buttons.scss +65 -0
  65. data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +28 -0
  66. data/app/assets/stylesheets/active_admin/mixins/_rounded.scss +22 -0
  67. data/app/assets/stylesheets/active_admin/mixins/_sections.scss +41 -0
  68. data/app/assets/stylesheets/active_admin/mixins/_shadows.scss +15 -0
  69. data/app/assets/stylesheets/active_admin/mixins/_typography.scss +3 -0
  70. data/app/assets/stylesheets/active_admin/mixins/_utilities.scss +17 -0
  71. data/app/assets/stylesheets/active_admin/mixins/_variables.scss +34 -0
  72. data/app/assets/stylesheets/active_admin/pages/_logged_out.scss +44 -0
  73. data/app/assets/stylesheets/active_admin/print.scss +287 -0
  74. data/app/assets/stylesheets/active_admin/structure/_footer.scss +14 -0
  75. data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +29 -0
  76. data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +41 -0
  77. data/app/views/active_admin/_head.html.erb +14 -0
  78. data/app/views/active_admin/base/_action_items.html.arb +7 -0
  79. data/app/views/active_admin/base/_breadcrumbs.html.arb +8 -0
  80. data/app/views/active_admin/base/_footer.html.arb +11 -0
  81. data/app/views/active_admin/base/_header.html.arb +5 -0
  82. data/app/views/active_admin/base/_sidebar.html.arb +3 -0
  83. data/app/views/active_admin/base/_title_bar.html.arb +9 -0
  84. data/app/views/active_admin/base/_unsupported_browser.html.erb +5 -0
  85. data/app/views/active_admin/devise/confirmations/new.html.erb +15 -0
  86. data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +8 -0
  87. data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +7 -0
  88. data/app/views/active_admin/devise/passwords/edit.html.erb +18 -0
  89. data/app/views/active_admin/devise/passwords/new.html.erb +15 -0
  90. data/app/views/active_admin/devise/registrations/new.html.erb +22 -0
  91. data/app/views/active_admin/devise/sessions/new.html.erb +20 -0
  92. data/app/views/active_admin/devise/shared/_error_messages.html.erb +15 -0
  93. data/app/views/active_admin/devise/shared/_links.erb +33 -0
  94. data/app/views/active_admin/devise/unlocks/new.html.erb +15 -0
  95. data/app/views/active_admin/page/_content.html.arb +1 -0
  96. data/app/views/active_admin/page/index.html.arb +8 -0
  97. data/app/views/active_admin/resource/_filters_form.html.erb +1 -0
  98. data/app/views/active_admin/resource/_form.html.arb +11 -0
  99. data/app/views/active_admin/resource/_index_as_table.html.arb +8 -0
  100. data/app/views/active_admin/resource/_show.html.arb +1 -0
  101. data/app/views/active_admin/resource/edit.html.arb +13 -0
  102. data/app/views/active_admin/resource/index.html.arb +101 -0
  103. data/app/views/active_admin/resource/new.html.arb +13 -0
  104. data/app/views/active_admin/resource/show.html.arb +22 -0
  105. data/app/views/kaminari/active_admin/_first_page.html.erb +11 -0
  106. data/app/views/kaminari/active_admin/_gap.html.erb +8 -0
  107. data/app/views/kaminari/active_admin/_last_page.html.erb +11 -0
  108. data/app/views/kaminari/active_admin/_next_page.html.erb +11 -0
  109. data/app/views/kaminari/active_admin/_page.html.erb +12 -0
  110. data/app/views/kaminari/active_admin/_paginator.html.erb +25 -0
  111. data/app/views/kaminari/active_admin/_prev_page.html.erb +11 -0
  112. data/app/views/layouts/active_admin.html.erb +33 -0
  113. data/app/views/layouts/active_admin_logged_out.html.erb +39 -0
  114. data/codecov.yml +25 -0
  115. data/config/i18n-tasks.yml +26 -0
  116. data/config/locales/ar.yml +133 -0
  117. data/config/locales/bg.yml +118 -0
  118. data/config/locales/bs.yml +119 -0
  119. data/config/locales/ca.yml +104 -0
  120. data/config/locales/cs.yml +107 -0
  121. data/config/locales/da.yml +135 -0
  122. data/config/locales/de-CH.yml +99 -0
  123. data/config/locales/de.yml +142 -0
  124. data/config/locales/el.yml +124 -0
  125. data/config/locales/en-CA.yml +137 -0
  126. data/config/locales/en-GB.yml +137 -0
  127. data/config/locales/en.yml +160 -0
  128. data/config/locales/eo.yml +143 -0
  129. data/config/locales/es-MX.yml +94 -0
  130. data/config/locales/es.yml +160 -0
  131. data/config/locales/fa.yml +117 -0
  132. data/config/locales/fi.yml +110 -0
  133. data/config/locales/fr.yml +139 -0
  134. data/config/locales/he.yml +140 -0
  135. data/config/locales/hr.yml +121 -0
  136. data/config/locales/hu.yml +96 -0
  137. data/config/locales/id.yml +133 -0
  138. data/config/locales/it.yml +142 -0
  139. data/config/locales/ja.yml +139 -0
  140. data/config/locales/ko.yml +118 -0
  141. data/config/locales/lt.yml +140 -0
  142. data/config/locales/lv.yml +90 -0
  143. data/config/locales/nb.yml +128 -0
  144. data/config/locales/nl.yml +142 -0
  145. data/config/locales/pl.yml +166 -0
  146. data/config/locales/pt-BR.yml +141 -0
  147. data/config/locales/pt-PT.yml +90 -0
  148. data/config/locales/ro.yml +94 -0
  149. data/config/locales/ru.yml +139 -0
  150. data/config/locales/sk.yml +107 -0
  151. data/config/locales/sv-SE.yml +133 -0
  152. data/config/locales/tr.yml +142 -0
  153. data/config/locales/uk.yml +134 -0
  154. data/config/locales/vi.yml +132 -0
  155. data/config/locales/zh-CN.yml +141 -0
  156. data/config/locales/zh-TW.yml +133 -0
  157. data/config/mdl_style.rb +9 -0
  158. data/cucumber.yml +6 -0
  159. data/docs/0-installation.md +121 -0
  160. data/docs/1-general-configuration.md +207 -0
  161. data/docs/10-custom-pages.md +148 -0
  162. data/docs/11-decorators.md +66 -0
  163. data/docs/12-arbo-components.md +200 -0
  164. data/docs/13-authorization-adapter.md +288 -0
  165. data/docs/14-gotchas.md +141 -0
  166. data/docs/2-resource-customization.md +480 -0
  167. data/docs/3-index-pages/custom-index.md +39 -0
  168. data/docs/3-index-pages/index-as-block.md +23 -0
  169. data/docs/3-index-pages/index-as-blog.md +73 -0
  170. data/docs/3-index-pages/index-as-grid.md +31 -0
  171. data/docs/3-index-pages/index-as-table.md +259 -0
  172. data/docs/3-index-pages.md +349 -0
  173. data/docs/4-csv-format.md +86 -0
  174. data/docs/5-forms.md +233 -0
  175. data/docs/6-show-pages.md +61 -0
  176. data/docs/7-sidebars.md +63 -0
  177. data/docs/8-custom-actions.md +160 -0
  178. data/docs/9-batch-actions.md +248 -0
  179. data/docs/CNAME +1 -0
  180. data/docs/Gemfile +7 -0
  181. data/docs/README.md +24 -0
  182. data/docs/_config.yml +15 -0
  183. data/docs/_includes/nav_footer_custom.html +3 -0
  184. data/docs/documentation.md +61 -0
  185. data/docs/images/activeadmin.png +0 -0
  186. data/docs/images/divider.png +0 -0
  187. data/docs/images/features.png +0 -0
  188. data/docs/index.css +835 -0
  189. data/docs/index.html +105 -0
  190. data/features/action_item.feature +73 -0
  191. data/features/authorization.feature +64 -0
  192. data/features/authorization_cancan.feature +52 -0
  193. data/features/authorization_pundit.feature +37 -0
  194. data/features/belongs_to.feature +124 -0
  195. data/features/breadcrumb.feature +76 -0
  196. data/features/comments/commenting.feature +178 -0
  197. data/features/comments/viewing_index.feature +18 -0
  198. data/features/create_another.feature +55 -0
  199. data/features/dashboard.feature +16 -0
  200. data/features/decorators.feature +43 -0
  201. data/features/development_reloading.feature +28 -0
  202. data/features/edit_page.feature +116 -0
  203. data/features/favicon.feature +20 -0
  204. data/features/filter_attributes.feature +46 -0
  205. data/features/first_boot.feature +16 -0
  206. data/features/footer.feature +29 -0
  207. data/features/global_navigation.feature +29 -0
  208. data/features/i18n.feature +55 -0
  209. data/features/index/batch_actions.feature +218 -0
  210. data/features/index/filters.feature +251 -0
  211. data/features/index/format_as_csv.feature +273 -0
  212. data/features/index/formats.feature +88 -0
  213. data/features/index/index_as_block.feature +15 -0
  214. data/features/index/index_as_blog.feature +69 -0
  215. data/features/index/index_as_grid.feature +45 -0
  216. data/features/index/index_as_table.feature +291 -0
  217. data/features/index/index_blank_slate.feature +83 -0
  218. data/features/index/index_parameters.feature +75 -0
  219. data/features/index/index_scope_to.feature +56 -0
  220. data/features/index/index_scopes.feature +325 -0
  221. data/features/index/page_title.feature +41 -0
  222. data/features/index/pagination.feature +63 -0
  223. data/features/index/switch_index_view.feature +73 -0
  224. data/features/menu.feature +85 -0
  225. data/features/meta_tags.feature +21 -0
  226. data/features/new_page.feature +136 -0
  227. data/features/registering_assets.feature +34 -0
  228. data/features/registering_pages.feature +237 -0
  229. data/features/registering_resources.feature +33 -0
  230. data/features/renamed_resource.feature +29 -0
  231. data/features/root_to.feature +18 -0
  232. data/features/show/attributes_table_title.feature +54 -0
  233. data/features/show/columns.feature +40 -0
  234. data/features/show/default_content.feature +44 -0
  235. data/features/show/page_title.feature +58 -0
  236. data/features/show/tabs.feature +47 -0
  237. data/features/sidebar_sections.feature +210 -0
  238. data/features/site_title.feature +47 -0
  239. data/features/specifying_actions.feature +118 -0
  240. data/features/step_definitions/action_item_steps.rb +7 -0
  241. data/features/step_definitions/action_link_steps.rb +19 -0
  242. data/features/step_definitions/additional_web_steps.rb +81 -0
  243. data/features/step_definitions/asset_steps.rb +15 -0
  244. data/features/step_definitions/attribute_steps.rb +18 -0
  245. data/features/step_definitions/attributes_table_title_steps.rb +11 -0
  246. data/features/step_definitions/batch_action_steps.rb +78 -0
  247. data/features/step_definitions/blog_steps.rb +3 -0
  248. data/features/step_definitions/breadcrumb_steps.rb +13 -0
  249. data/features/step_definitions/column_steps.rb +8 -0
  250. data/features/step_definitions/comment_steps.rb +32 -0
  251. data/features/step_definitions/configuration_steps.rb +102 -0
  252. data/features/step_definitions/dashboard_steps.rb +15 -0
  253. data/features/step_definitions/factory_steps.rb +35 -0
  254. data/features/step_definitions/filter_steps.rb +57 -0
  255. data/features/step_definitions/flash_steps.rb +11 -0
  256. data/features/step_definitions/footer_steps.rb +21 -0
  257. data/features/step_definitions/format_steps.rb +60 -0
  258. data/features/step_definitions/i18n_steps.rb +11 -0
  259. data/features/step_definitions/index_scope_steps.rb +42 -0
  260. data/features/step_definitions/index_views_steps.rb +3 -0
  261. data/features/step_definitions/layout_steps.rb +3 -0
  262. data/features/step_definitions/member_link_steps.rb +7 -0
  263. data/features/step_definitions/menu_steps.rb +11 -0
  264. data/features/step_definitions/meta_tag_steps.rb +3 -0
  265. data/features/step_definitions/pagination_steps.rb +15 -0
  266. data/features/step_definitions/root_steps.rb +9 -0
  267. data/features/step_definitions/sidebar_steps.rb +11 -0
  268. data/features/step_definitions/site_title_steps.rb +31 -0
  269. data/features/step_definitions/tab_steps.rb +17 -0
  270. data/features/step_definitions/table_steps.rb +116 -0
  271. data/features/step_definitions/user_steps.rb +52 -0
  272. data/features/step_definitions/web_steps.rb +86 -0
  273. data/features/sti_resource.feature +65 -0
  274. data/features/strong_parameters.feature +69 -0
  275. data/features/support/env.rb +129 -0
  276. data/features/support/paths.rb +75 -0
  277. data/features/support/regular_env.rb +7 -0
  278. data/features/support/reload_env.rb +7 -0
  279. data/features/support/selectors.rb +45 -0
  280. data/features/users/logging_in.feature +32 -0
  281. data/features/users/logging_out.feature +29 -0
  282. data/features/users/resetting_password.feature +30 -0
  283. data/gemfiles/rails_42.gemfile +12 -0
  284. data/gemfiles/rails_52.gemfile +15 -0
  285. data/gemfiles/rails_60.gemfile +16 -0
  286. data/gemfiles/rails_61.gemfile +15 -0
  287. data/gemfiles/rails_61_turbolinks.gemfile +15 -0
  288. data/gemfiles/rails_70.gemfile +15 -0
  289. data/gemfiles/rails_70_hotwire.gemfile +15 -0
  290. data/gemfiles/rails_71.gemfile +17 -0
  291. data/lib/active_admin/abstract_view_factory.rb +47 -0
  292. data/lib/active_admin/application.rb +255 -0
  293. data/lib/active_admin/application_settings.rb +42 -0
  294. data/lib/active_admin/asset_registration.rb +29 -0
  295. data/lib/active_admin/authorization_adapter.rb +129 -0
  296. data/lib/active_admin/base_controller/authorization.rb +126 -0
  297. data/lib/active_admin/base_controller/menu.rb +34 -0
  298. data/lib/active_admin/base_controller.rb +91 -0
  299. data/lib/active_admin/batch_actions/controller.rb +45 -0
  300. data/lib/active_admin/batch_actions/resource_extension.rb +151 -0
  301. data/lib/active_admin/batch_actions/views/batch_action_form.rb +45 -0
  302. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +58 -0
  303. data/lib/active_admin/batch_actions/views/selection_cells.rb +38 -0
  304. data/lib/active_admin/batch_actions.rb +16 -0
  305. data/lib/active_admin/callbacks.rb +88 -0
  306. data/lib/active_admin/cancan_adapter.rb +36 -0
  307. data/lib/active_admin/component.rb +5 -0
  308. data/lib/active_admin/controller_action.rb +12 -0
  309. data/lib/active_admin/csv_builder.rb +136 -0
  310. data/lib/active_admin/dependency.rb +96 -0
  311. data/lib/active_admin/deprecation.rb +10 -0
  312. data/lib/active_admin/devise.rb +80 -0
  313. data/lib/active_admin/dsl.rb +193 -0
  314. data/lib/active_admin/dynamic_setting.rb +38 -0
  315. data/lib/active_admin/dynamic_settings_node.rb +28 -0
  316. data/lib/active_admin/engine.rb +22 -0
  317. data/lib/active_admin/error.rb +62 -0
  318. data/lib/active_admin/event.rb +24 -0
  319. data/lib/active_admin/filters/active.rb +29 -0
  320. data/lib/active_admin/filters/active_filter.rb +123 -0
  321. data/lib/active_admin/filters/active_sidebar.rb +50 -0
  322. data/lib/active_admin/filters/dsl.rb +21 -0
  323. data/lib/active_admin/filters/forms.rb +85 -0
  324. data/lib/active_admin/filters/formtastic_addons.rb +79 -0
  325. data/lib/active_admin/filters/resource_extension.rb +153 -0
  326. data/lib/active_admin/filters.rb +11 -0
  327. data/lib/active_admin/form_builder.rb +182 -0
  328. data/lib/active_admin/generators/boilerplate.rb +45 -0
  329. data/lib/active_admin/helpers/collection.rb +19 -0
  330. data/lib/active_admin/helpers/i18n.rb +7 -0
  331. data/lib/active_admin/helpers/optional_display.rb +38 -0
  332. data/lib/active_admin/helpers/routes/url_helpers.rb +15 -0
  333. data/lib/active_admin/helpers/scope_chain.rb +23 -0
  334. data/lib/active_admin/inputs/datepicker_input.rb +27 -0
  335. data/lib/active_admin/inputs/filters/base/search_method_select.rb +75 -0
  336. data/lib/active_admin/inputs/filters/base.rb +44 -0
  337. data/lib/active_admin/inputs/filters/boolean_input.rb +24 -0
  338. data/lib/active_admin/inputs/filters/check_boxes_input.rb +50 -0
  339. data/lib/active_admin/inputs/filters/date_picker_input.rb +13 -0
  340. data/lib/active_admin/inputs/filters/date_range_input.rb +49 -0
  341. data/lib/active_admin/inputs/filters/numeric_input.rb +12 -0
  342. data/lib/active_admin/inputs/filters/select_input.rb +58 -0
  343. data/lib/active_admin/inputs/filters/string_input.rb +26 -0
  344. data/lib/active_admin/inputs/filters/text_input.rb +25 -0
  345. data/lib/active_admin/inputs.rb +21 -0
  346. data/lib/active_admin/localizers/resource_localizer.rb +35 -0
  347. data/lib/active_admin/localizers.rb +11 -0
  348. data/lib/active_admin/menu.rb +106 -0
  349. data/lib/active_admin/menu_collection.rb +55 -0
  350. data/lib/active_admin/menu_item.rb +79 -0
  351. data/lib/active_admin/namespace.rb +325 -0
  352. data/lib/active_admin/namespace_settings.rb +107 -0
  353. data/lib/active_admin/order_clause.rb +48 -0
  354. data/lib/active_admin/orm/active_record/comments/comment.rb +35 -0
  355. data/lib/active_admin/orm/active_record/comments/namespace_helper.rb +14 -0
  356. data/lib/active_admin/orm/active_record/comments/resource_helper.rb +17 -0
  357. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +95 -0
  358. data/lib/active_admin/orm/active_record/comments/views.rb +2 -0
  359. data/lib/active_admin/orm/active_record/comments.rb +99 -0
  360. data/lib/active_admin/orm/active_record.rb +5 -0
  361. data/lib/active_admin/orm/mongoid/.gitkeep +0 -0
  362. data/lib/active_admin/orm/mongoid.rb +1 -0
  363. data/lib/active_admin/page.rb +114 -0
  364. data/lib/active_admin/page_controller.rb +29 -0
  365. data/lib/active_admin/page_dsl.rb +35 -0
  366. data/lib/active_admin/page_presenter.rb +32 -0
  367. data/lib/active_admin/pundit_adapter.rb +68 -0
  368. data/lib/active_admin/resource/action_items.rb +120 -0
  369. data/lib/active_admin/resource/attributes.rb +47 -0
  370. data/lib/active_admin/resource/belongs_to.rb +48 -0
  371. data/lib/active_admin/resource/controllers.rb +19 -0
  372. data/lib/active_admin/resource/includes.rb +12 -0
  373. data/lib/active_admin/resource/menu.rb +65 -0
  374. data/lib/active_admin/resource/naming.rb +62 -0
  375. data/lib/active_admin/resource/ordering.rb +11 -0
  376. data/lib/active_admin/resource/page_presenters.rb +90 -0
  377. data/lib/active_admin/resource/pagination.rb +23 -0
  378. data/lib/active_admin/resource/routes.rb +134 -0
  379. data/lib/active_admin/resource/scope_to.rb +74 -0
  380. data/lib/active_admin/resource/scopes.rb +52 -0
  381. data/lib/active_admin/resource/sidebars.rb +32 -0
  382. data/lib/active_admin/resource.rb +215 -0
  383. data/lib/active_admin/resource_collection.rb +72 -0
  384. data/lib/active_admin/resource_controller/action_builder.rb +21 -0
  385. data/lib/active_admin/resource_controller/data_access.rb +341 -0
  386. data/lib/active_admin/resource_controller/decorators.rb +102 -0
  387. data/lib/active_admin/resource_controller/resource_class_methods.rb +24 -0
  388. data/lib/active_admin/resource_controller/scoping.rb +31 -0
  389. data/lib/active_admin/resource_controller/sidebars.rb +18 -0
  390. data/lib/active_admin/resource_controller/streaming.rb +47 -0
  391. data/lib/active_admin/resource_controller.rb +116 -0
  392. data/lib/active_admin/resource_dsl.rb +221 -0
  393. data/lib/active_admin/router.rb +113 -0
  394. data/lib/active_admin/scope.rb +60 -0
  395. data/lib/active_admin/settings_node.rb +19 -0
  396. data/lib/active_admin/sidebar_section.rb +37 -0
  397. data/lib/active_admin/version.rb +3 -0
  398. data/lib/active_admin/view_factory.rb +10 -0
  399. data/lib/active_admin/view_helpers/active_admin_application_helper.rb +12 -0
  400. data/lib/active_admin/view_helpers/auto_link_helper.rb +45 -0
  401. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +52 -0
  402. data/lib/active_admin/view_helpers/display_helper.rb +95 -0
  403. data/lib/active_admin/view_helpers/download_format_links_helper.rb +58 -0
  404. data/lib/active_admin/view_helpers/fields_for.rb +50 -0
  405. data/lib/active_admin/view_helpers/flash_helper.rb +14 -0
  406. data/lib/active_admin/view_helpers/form_helper.rb +20 -0
  407. data/lib/active_admin/view_helpers/layout_helper.rb +32 -0
  408. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +97 -0
  409. data/lib/active_admin/view_helpers/scope_name_helper.rb +16 -0
  410. data/lib/active_admin/view_helpers/sidebar_helper.rb +15 -0
  411. data/lib/active_admin/view_helpers/title_helper.rb +11 -0
  412. data/lib/active_admin/view_helpers/view_factory_helper.rb +11 -0
  413. data/lib/active_admin/view_helpers.rb +21 -0
  414. data/lib/active_admin/views/components/action_link.rb +13 -0
  415. data/lib/active_admin/views/components/active_admin_form.rb +163 -0
  416. data/lib/active_admin/views/components/attributes_panel.rb +23 -0
  417. data/lib/active_admin/views/components/attributes_table.rb +94 -0
  418. data/lib/active_admin/views/components/blank_slate.rb +17 -0
  419. data/lib/active_admin/views/components/columns.rb +161 -0
  420. data/lib/active_admin/views/components/dropdown_menu.rb +71 -0
  421. data/lib/active_admin/views/components/index_list.rb +69 -0
  422. data/lib/active_admin/views/components/menu.rb +32 -0
  423. data/lib/active_admin/views/components/menu_item.rb +58 -0
  424. data/lib/active_admin/views/components/paginated_collection.rb +159 -0
  425. data/lib/active_admin/views/components/panel.rb +38 -0
  426. data/lib/active_admin/views/components/scopes.rb +72 -0
  427. data/lib/active_admin/views/components/sidebar_section.rb +34 -0
  428. data/lib/active_admin/views/components/site_title.rb +28 -0
  429. data/lib/active_admin/views/components/status_tag.rb +88 -0
  430. data/lib/active_admin/views/components/table_for.rb +209 -0
  431. data/lib/active_admin/views/components/tabs.rb +40 -0
  432. data/lib/active_admin/views/index_as_block.rb +36 -0
  433. data/lib/active_admin/views/index_as_blog.rb +155 -0
  434. data/lib/active_admin/views/index_as_grid.rb +80 -0
  435. data/lib/active_admin/views/index_as_table.rb +377 -0
  436. data/lib/active_admin/views.rb +8 -0
  437. data/lib/active_admin.rb +132 -0
  438. data/lib/activeadmin-rails.rb +1 -0
  439. data/lib/bug_report_templates/active_admin_main.rb +110 -0
  440. data/lib/generators/active_admin/assets/assets_generator.rb +14 -0
  441. data/lib/generators/active_admin/assets/templates/active_admin.js +1 -0
  442. data/lib/generators/active_admin/assets/templates/active_admin.scss +17 -0
  443. data/lib/generators/active_admin/devise/devise_generator.rb +68 -0
  444. data/lib/generators/active_admin/install/install_generator.rb +45 -0
  445. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +300 -0
  446. data/lib/generators/active_admin/install/templates/admin_users.rb.erb +28 -0
  447. data/lib/generators/active_admin/install/templates/dashboard.rb +33 -0
  448. data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb.erb +16 -0
  449. data/lib/generators/active_admin/page/USAGE +8 -0
  450. data/lib/generators/active_admin/page/page_generator.rb +12 -0
  451. data/lib/generators/active_admin/page/templates/page.rb +5 -0
  452. data/lib/generators/active_admin/resource/resource_generator.rb +20 -0
  453. data/lib/generators/active_admin/resource/templates/admin.rb.erb +6 -0
  454. data/lib/ransack_ext.rb +20 -0
  455. data/spec/bug_report_templates_spec.rb +28 -0
  456. data/spec/changelog_spec.rb +15 -0
  457. data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +50 -0
  458. data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +34 -0
  459. data/spec/javascripts/fixtures/checkboxes.html +9 -0
  460. data/spec/javascripts/fixtures/table_checkboxes.html +17 -0
  461. data/spec/javascripts/helpers/SpecHelper.js +3 -0
  462. data/spec/javascripts/support/jasmine.yml +74 -0
  463. data/spec/javascripts/support/jasmine_runner.rb +19 -0
  464. data/spec/rails_helper.rb +67 -0
  465. data/spec/requests/default_namespace_spec.rb +81 -0
  466. data/spec/requests/memory_spec.rb +25 -0
  467. data/spec/requests/pages/form_spec.rb +73 -0
  468. data/spec/requests/pages/index_spec.rb +96 -0
  469. data/spec/requests/pages/layout_spec.rb +59 -0
  470. data/spec/requests/pages/show_spec.rb +38 -0
  471. data/spec/requests/stylesheets_spec.rb +18 -0
  472. data/spec/spec_helper.rb +1 -0
  473. data/spec/support/active_admin_integration_spec_helper.rb +79 -0
  474. data/spec/support/active_admin_request_helpers.rb +39 -0
  475. data/spec/support/rails_template.rb +224 -0
  476. data/spec/support/rails_template_with_data.rb +328 -0
  477. data/spec/support/templates/admin/stores.rb +7 -0
  478. data/spec/support/templates/en.yml +8 -0
  479. data/spec/support/templates/manifest.js +3 -0
  480. data/spec/support/templates/policies/active_admin/comment_policy.rb +9 -0
  481. data/spec/support/templates/policies/active_admin/page_policy.rb +18 -0
  482. data/spec/support/templates/policies/admin_user_policy.rb +11 -0
  483. data/spec/support/templates/policies/application_policy.rb +44 -0
  484. data/spec/support/templates/policies/category_policy.rb +7 -0
  485. data/spec/support/templates/policies/post_policy.rb +15 -0
  486. data/spec/support/templates/policies/store_policy.rb +11 -0
  487. data/spec/support/templates/policies/user_policy.rb +11 -0
  488. data/spec/support/templates/post_decorator.rb +24 -0
  489. data/spec/unit/abstract_view_factory_spec.rb +78 -0
  490. data/spec/unit/action_builder_spec.rb +160 -0
  491. data/spec/unit/active_admin_spec.rb +11 -0
  492. data/spec/unit/application_spec.rb +180 -0
  493. data/spec/unit/asset_registration_spec.rb +52 -0
  494. data/spec/unit/authorization/authorization_adapter_spec.rb +61 -0
  495. data/spec/unit/authorization/controller_authorization_spec.rb +43 -0
  496. data/spec/unit/authorization/index_overriding_spec.rb +23 -0
  497. data/spec/unit/auto_link_spec.rb +103 -0
  498. data/spec/unit/batch_actions/resource_spec.rb +84 -0
  499. data/spec/unit/batch_actions/settings_spec.rb +61 -0
  500. data/spec/unit/belongs_to_spec.rb +76 -0
  501. data/spec/unit/cancan_adapter_spec.rb +43 -0
  502. data/spec/unit/comments_spec.rb +204 -0
  503. data/spec/unit/component_spec.rb +18 -0
  504. data/spec/unit/config_shared_examples.rb +59 -0
  505. data/spec/unit/controller_filters_spec.rb +41 -0
  506. data/spec/unit/csv_builder_spec.rb +321 -0
  507. data/spec/unit/dependency_spec.rb +135 -0
  508. data/spec/unit/devise_spec.rb +110 -0
  509. data/spec/unit/dsl_spec.rb +120 -0
  510. data/spec/unit/dynamic_settings_spec.rb +28 -0
  511. data/spec/unit/filters/active_filter_spec.rb +222 -0
  512. data/spec/unit/filters/active_spec.rb +24 -0
  513. data/spec/unit/filters/filter_form_builder_spec.rb +524 -0
  514. data/spec/unit/filters/resource_spec.rb +128 -0
  515. data/spec/unit/form_builder_spec.rb +1013 -0
  516. data/spec/unit/generators/install_spec.rb +31 -0
  517. data/spec/unit/helpers/collection_spec.rb +68 -0
  518. data/spec/unit/helpers/scope_chain_spec.rb +35 -0
  519. data/spec/unit/i18n_spec.rb +29 -0
  520. data/spec/unit/localizers/resource_localizer_spec.rb +36 -0
  521. data/spec/unit/menu_collection_spec.rb +40 -0
  522. data/spec/unit/menu_item_spec.rb +82 -0
  523. data/spec/unit/menu_spec.rb +60 -0
  524. data/spec/unit/namespace/authorization_spec.rb +27 -0
  525. data/spec/unit/namespace/register_page_spec.rb +99 -0
  526. data/spec/unit/namespace/register_resource_spec.rb +162 -0
  527. data/spec/unit/namespace_spec.rb +132 -0
  528. data/spec/unit/order_clause_spec.rb +81 -0
  529. data/spec/unit/page_controller_spec.rb +5 -0
  530. data/spec/unit/page_spec.rb +128 -0
  531. data/spec/unit/pretty_format_spec.rb +133 -0
  532. data/spec/unit/pundit_adapter_spec.rb +98 -0
  533. data/spec/unit/resource/action_items_spec.rb +83 -0
  534. data/spec/unit/resource/attributes_spec.rb +56 -0
  535. data/spec/unit/resource/includes_spec.rb +21 -0
  536. data/spec/unit/resource/menu_spec.rb +18 -0
  537. data/spec/unit/resource/naming_spec.rb +120 -0
  538. data/spec/unit/resource/ordering_spec.rb +35 -0
  539. data/spec/unit/resource/page_presenters_spec.rb +44 -0
  540. data/spec/unit/resource/pagination_spec.rb +38 -0
  541. data/spec/unit/resource/routes_spec.rb +125 -0
  542. data/spec/unit/resource/scopes_spec.rb +50 -0
  543. data/spec/unit/resource/sidebars_spec.rb +43 -0
  544. data/spec/unit/resource_collection_spec.rb +175 -0
  545. data/spec/unit/resource_controller/data_access_spec.rb +234 -0
  546. data/spec/unit/resource_controller/decorators_spec.rb +94 -0
  547. data/spec/unit/resource_controller/sidebars_spec.rb +37 -0
  548. data/spec/unit/resource_controller_spec.rb +290 -0
  549. data/spec/unit/resource_registration_spec.rb +61 -0
  550. data/spec/unit/resource_spec.rb +320 -0
  551. data/spec/unit/routing_spec.rb +211 -0
  552. data/spec/unit/scope_spec.rb +225 -0
  553. data/spec/unit/settings_node_spec.rb +26 -0
  554. data/spec/unit/view_factory_spec.rb +13 -0
  555. data/spec/unit/view_helpers/breadcrumbs_spec.rb +255 -0
  556. data/spec/unit/view_helpers/display_helper_spec.rb +203 -0
  557. data/spec/unit/view_helpers/download_format_links_helper_spec.rb +39 -0
  558. data/spec/unit/view_helpers/fields_for_spec.rb +50 -0
  559. data/spec/unit/view_helpers/flash_helper_spec.rb +24 -0
  560. data/spec/unit/view_helpers/form_helper_spec.rb +42 -0
  561. data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +138 -0
  562. data/spec/unit/views/components/attributes_table_spec.rb +271 -0
  563. data/spec/unit/views/components/batch_action_selector_spec.rb +43 -0
  564. data/spec/unit/views/components/blank_slate_spec.rb +27 -0
  565. data/spec/unit/views/components/columns_spec.rb +187 -0
  566. data/spec/unit/views/components/index_list_spec.rb +49 -0
  567. data/spec/unit/views/components/index_table_for_spec.rb +127 -0
  568. data/spec/unit/views/components/menu_item_spec.rb +29 -0
  569. data/spec/unit/views/components/menu_spec.rb +168 -0
  570. data/spec/unit/views/components/paginated_collection_spec.rb +249 -0
  571. data/spec/unit/views/components/panel_spec.rb +58 -0
  572. data/spec/unit/views/components/sidebar_section_spec.rb +68 -0
  573. data/spec/unit/views/components/site_title_spec.rb +82 -0
  574. data/spec/unit/views/components/status_tag_spec.rb +265 -0
  575. data/spec/unit/views/components/table_for_spec.rb +441 -0
  576. data/spec/unit/views/components/tabs_spec.rb +99 -0
  577. data/spec/unit/views/index_as_blog_spec.rb +76 -0
  578. data/tasks/docs.rake +64 -0
  579. data/tasks/lint.rake +21 -0
  580. data/tasks/local.rake +25 -0
  581. data/tasks/parallel_tests.rake +66 -0
  582. data/tasks/test.rake +24 -0
  583. data/vendor/assets/stylesheets/active_admin/_normalize.scss +447 -0
  584. metadata +1012 -0
@@ -0,0 +1,141 @@
1
+ ---
2
+ layout: default
3
+ nav_order: 14
4
+ title: Gotchas
5
+ redirect_from: /docs/14-gotchas.html
6
+ ---
7
+
8
+ # Gotchas
9
+
10
+ ## Security
11
+
12
+ ### Spreadsheet applications vulnerable to unescaped CSV data
13
+
14
+ If your CSV export includes untrusted data provided by your users, it's possible
15
+ that they could include an executable formula that could call arbitrary commands
16
+ on your computer. See
17
+ [#4256](https://github.com/activeadmin/activeadmin/issues/4256) for more
18
+ details.
19
+
20
+ ## Session Commits & Asset Pipeline
21
+
22
+ When configuring the asset pipeline ensure that the asset prefix
23
+ (`config.assets.prefix`) is not the same as the namespace of ActiveAdmin
24
+ (default namespace is `/admin`). If they are the same Sprockets will prevent the
25
+ session from being committed. Flash messages won't work and you will be unable to
26
+ use the session for storing anything.
27
+
28
+ For more information see [the following
29
+ post](http://www.intridea.com/blog/2013/3/20/rails-assets-prefix-may-disable-your-session).
30
+
31
+ ## Helpers
32
+
33
+ There are two known gotchas with helpers. This hopefully will help you to
34
+ find a solution.
35
+
36
+ ### Helpers are not reloading in development
37
+
38
+ This is a known and still open
39
+ [issue](https://github.com/activeadmin/activeadmin/issues/697) the only way is
40
+ to restart your server each time you change a helper.
41
+
42
+ ### Helper maybe not included by default
43
+
44
+ If you use `config.action_controller.include_all_helpers = false` in your
45
+ application config, you need to include it by hand.
46
+
47
+ #### Solutions
48
+
49
+ ##### First use a monkey patch
50
+
51
+ This works for all ActiveAdmin resources at once.
52
+
53
+ ```ruby
54
+ # config/initializers/active_admin_helpers.rb
55
+ ActiveAdmin::BaseController.class_eval do
56
+ helper ApplicationHelper
57
+ end
58
+ ```
59
+
60
+ ##### Second use the `controller` method
61
+
62
+ This works only for one resource at a time.
63
+
64
+ ```ruby
65
+ ActiveAdmin.register User do
66
+ controller do
67
+ helper UserHelper
68
+ end
69
+ end
70
+ ```
71
+
72
+ ## CSS
73
+
74
+ In order to avoid the override of your application style with the Active Admin
75
+ one, you can do one of these things:
76
+
77
+ * You can properly move the generated file `active_admin.scss` from
78
+ `app/assets/stylesheets` to `vendor/assets/stylesheets`.
79
+ * You can remove all `require_tree` commands from your root level css files,
80
+ where the `active_admin.scss` is in the tree.
81
+
82
+ ## Conflicts
83
+
84
+ ### With gems that provides a `search` class method on a model
85
+
86
+ If a gem defines a `search` class method on a model, this can result in conflicts
87
+ with the same method provided by `ransack` (a dependency of ActiveAdmin).
88
+
89
+ Each of this conflicts need to solved is a different way. Some solutions are
90
+ listed below.
91
+
92
+ #### `tire`, `retire` and `elasticsearch-rails`
93
+
94
+ This conflict can be solved, by using explicitly the `search` method of `tire`,
95
+ `retire` or `elasticsearch-rails`:
96
+
97
+ ##### For `tire` and `retire`
98
+
99
+ ```ruby
100
+ YourModel.tire.search
101
+ ```
102
+
103
+ ##### For `elasticsearch-rails`
104
+
105
+ ```ruby
106
+ YourModel.__elasticsearch__.search
107
+ ```
108
+
109
+ ### Sunspot Solr
110
+
111
+ ```ruby
112
+ YourModel.solr_search
113
+ ```
114
+
115
+ ### Rails 5 scaffold generators
116
+
117
+ Active Admin requires the `inherited_resources` gem which may break scaffolding
118
+ under Rails 5 as it replaces the default scaffold generator. The solution is to
119
+ configure the default controller in `config/application.rb` as outlined in
120
+ [activeadmin/inherited_resources#195](https://github.com/activeadmin/inherited_resources/issues/195)
121
+
122
+ ```ruby
123
+ module SampleApp
124
+ class Application < Rails::Application
125
+ ...
126
+ config.app_generators.scaffold_controller = :scaffold_controller
127
+ ...
128
+ end
129
+ end
130
+ ```
131
+
132
+ ## Authentication & Application Controller
133
+
134
+ The `ActiveAdmin::BaseController` inherits from the `ApplicationController`. Any
135
+ authentication method(s) specified in the `ApplicationController` callbacks will
136
+ be called instead of the authentication method in the active admin config file.
137
+ For example, if the ApplicationController has a callback `before_action
138
+ :custom_authentication_method` and the config file's authentication method is
139
+ `config.authentication_method = :authenticate_active_admin_user`, then
140
+ `custom_authentication_method` will be called instead of
141
+ `authenticate_active_admin_user`.
@@ -0,0 +1,480 @@
1
+ ---
2
+ layout: default
3
+ nav_order: 2
4
+ title: Working with Resources
5
+ redirect_from: /docs/2-resource-customization.html
6
+ ---
7
+
8
+ # Working with Resources
9
+
10
+ Every Active Admin resource corresponds to a Rails model. So before creating a
11
+ resource you must first create a Rails model for it.
12
+
13
+ ## Create a Resource
14
+
15
+ The basic command for creating a resource is `rails g active_admin:resource Post`.
16
+ The generator will produce an empty `app/admin/posts.rb` file like so:
17
+
18
+ ```ruby
19
+ ActiveAdmin.configure_resource Post do |config|
20
+ # ...
21
+ end
22
+ ```
23
+
24
+ TODO: and an empty `app/controllers/admin/posts_controller.rb` file like so:
25
+
26
+ ```ruby
27
+ class Admin::PostsController < ActiveAdmin::ResourceController
28
+ # ...
29
+ end
30
+ ```
31
+
32
+ ## Setting up Strong Parameters
33
+
34
+ Override the [permitted_attr_names] method to define which attributes may be changed:
35
+
36
+ ```ruby
37
+ class Admin::PostsController < ActiveAdmin::ResourceController
38
+ def permitted_attr_names
39
+ [:title, :content, :publisher_id]
40
+ end
41
+ end
42
+ ```
43
+
44
+ or more directly, override [permitted_params]:
45
+
46
+ ```ruby
47
+ class Admin::PostsController < ActiveAdmin::ResourceController
48
+ def permitted_params
49
+ params.permit(post: [:title, :content, :publisher_id])
50
+ end
51
+ end
52
+ ```
53
+
54
+ Any form field that sends multiple values (such as a HABTM association, or an
55
+ array attribute) needs to pass an empty array:
56
+
57
+ If your HABTM is `roles`, you should permit `role_ids: []`
58
+
59
+ ```ruby
60
+ class Admin::PostsController < ActiveAdmin::ResourceController
61
+ def permitted_attr_names
62
+ [:title, :content, :publisher_id, role_ids: []]
63
+ end
64
+ end
65
+ ```
66
+
67
+ Nested associations in the same form also require an array, but it
68
+ needs to be filled with any attributes used.
69
+
70
+ ```ruby
71
+ class Admin::PostsController < ActiveAdmin::ResourceController
72
+ def permitted_attr_names
73
+ [:title, :content, :publisher_id,
74
+ tags_attributes: [:id, :name, :description, :_destroy]]
75
+ end
76
+ end
77
+
78
+ # Note that `accepts_nested_attributes_for` is still required:
79
+ class Post < ActiveRecord::Base
80
+ accepts_nested_attributes_for :tags, allow_destroy: true
81
+ end
82
+ ```
83
+
84
+ If you want to dynamically choose which attributes can be set:
85
+
86
+ ```ruby
87
+ class Admin::PostsController < ActiveAdmin::ResourceController
88
+ def permitted_attr_names
89
+ params = [:title, :content, :publisher_id]
90
+ params.push :author_id if current_user.admin?
91
+ params
92
+ end
93
+ end
94
+ ```
95
+
96
+ [permitted_attr_names] is called by a method called [permitted_params]. You should
97
+ use this method when overriding `create` or `update` actions:
98
+
99
+ ```ruby
100
+ class Admin::PostsController < ActiveAdmin::ResourceController
101
+ def create
102
+ # Good
103
+ @post = Post.new(permitted_params[:post])
104
+ # Bad
105
+ @post = Post.new(params[:post])
106
+
107
+ if @post.save
108
+ # ...
109
+ end
110
+ end
111
+ end
112
+ ```
113
+
114
+ ## Disabling Actions on a Resource
115
+
116
+ All CRUD actions are enabled by default. These can be disabled for a given resource:
117
+
118
+ ```ruby
119
+ class Admin::PostsController < ActiveAdmin::ResourceController
120
+ actions :all, except: [:update, :destroy]
121
+ end
122
+ ```
123
+
124
+ ## Renaming Action Items
125
+
126
+ You can use translations to override labels and page titles for actions such as
127
+ new, edit, and destroy by providing a resource specific translation. For
128
+ example, to change 'New Offer' to 'Make an Offer' add the following in
129
+ config/locales/[en].yml:
130
+
131
+ ```yaml
132
+ en:
133
+ active_admin:
134
+ resources:
135
+ offer: # Registered resource
136
+ new_model: 'Make an Offer' # new action item
137
+ edit_model: 'Change Offer' # edit action item
138
+ delete_model: 'Cancel Offer' # delete action item
139
+ ```
140
+
141
+ See the [default en.yml](/config/locales/en.yml) locale file for
142
+ existing translations and examples.
143
+
144
+ ## Rename the Resource
145
+
146
+ By default, any references to the resource (menu, routes, buttons, etc) in the
147
+ interface will use the name of the class. You can rename the resource by using
148
+ the `:as` option.
149
+
150
+ ```ruby
151
+ ActiveAdmin.configure_resource Post, as: "Article"
152
+ ```
153
+
154
+ The resource will then be available at `/admin/articles`.
155
+ The controller and view names should be updated also.
156
+
157
+ ## Customize the Namespace
158
+
159
+ We use the `admin` namespace by default, but you can use anything:
160
+
161
+ ```ruby
162
+ # Available at /today/posts
163
+ ActiveAdmin.configure_resource Post, namespace: :today
164
+
165
+ # Available at /posts
166
+ ActiveAdmin.configure_resource Post, namespace: false
167
+ ```
168
+
169
+ ## Customize the Menu
170
+
171
+ The resource will be displayed in the global navigation by default. To disable
172
+ the resource from being displayed in the global navigation:
173
+
174
+ ```ruby
175
+ ActiveAdmin.configure_resource Post do |config|
176
+ config.menu_item_options = false
177
+ end
178
+ ```
179
+
180
+ Menu item options include:
181
+
182
+ * `:label` - The string or proc label to display in the menu. If it's a proc, it
183
+ will be called each time the menu is rendered.
184
+ * `:parent` - The string id (or label) of the parent used for this menu
185
+ * `:if` - A block or a symbol of a method to call to decide if the menu item
186
+ should be displayed
187
+ * `:priority` - The integer value of the priority, which defaults to `10`
188
+
189
+ ### Labels
190
+
191
+ To change the name of the label in the menu:
192
+
193
+ ```ruby
194
+ ActiveAdmin.configure_resource Post do |config|
195
+ config.menu_item_options = { label: "My Posts" }
196
+ end
197
+ ```
198
+
199
+ If you want something more dynamic, pass a proc instead:
200
+
201
+ ```ruby
202
+ ActiveAdmin.configure_resource Post do |config|
203
+ config.menu_item_options = { label: proc{ I18n.t "mypost" } }
204
+ end
205
+ ```
206
+
207
+ ### Menu Priority
208
+
209
+ Menu items are sorted first by their numeric priority, then alphabetically. Since
210
+ every menu by default has a priority of `10`, the menu is normally alphabetical.
211
+
212
+ You can easily customize this:
213
+
214
+ ```ruby
215
+ ActiveAdmin.configure_resource Post do |config|
216
+ config.menu_item_options = { priority: 1 } # so it's on the very left
217
+ end
218
+ ```
219
+
220
+ ### Conditionally Showing / Hiding Menu Items
221
+
222
+ Menu items can be shown or hidden at runtime using the `:if` option.
223
+
224
+ ```ruby
225
+ ActiveAdmin.configure_resource Post do |config|
226
+ config.menu_item_options = { if: proc{ current_user.can_edit_posts? } }
227
+ end
228
+ ```
229
+
230
+ The proc will be called in the context of the view, so you have access to all
231
+ your helpers and current user session information.
232
+
233
+ ### Drop Down Menus
234
+
235
+ In many cases, a single level navigation will not be enough to manage a large
236
+ application. In that case, you can group your menu items under a parent menu item.
237
+
238
+ ```ruby
239
+ ActiveAdmin.configure_resource Post do |config|
240
+ config.menu_item_options = { parent: "Blog" }
241
+ end
242
+ ```
243
+
244
+ Note that the "Blog" parent menu item doesn't even have to exist yet; it can be
245
+ dynamically generated for you.
246
+
247
+ ### Customizing Parent Menu Items
248
+
249
+ All of the options given to a standard menu item are also available to
250
+ parent menu items. In the case of complex parent menu items, you should
251
+ configure them in the Active Admin initializer.
252
+
253
+ ```ruby
254
+ # config/initializers/active_admin.rb
255
+ config.namespace :admin do |admin|
256
+ admin.build_menu do |menu|
257
+ menu.add label: 'Blog', priority: 0
258
+ end
259
+ end
260
+
261
+ # app/admin/post.rb
262
+ ActiveAdmin.configure_resource Post do |config|
263
+ config.menu_item_options = { parent: 'Blog' }
264
+ end
265
+ ```
266
+
267
+ ### Dynamic Parent Menu Items
268
+
269
+ While the above works fine, what if you want a parent menu item with a dynamic
270
+ name? Well, you have to refer to it by its `:id`.
271
+
272
+ ```ruby
273
+ # config/initializers/active_admin.rb
274
+ config.namespace :admin do |admin|
275
+ admin.build_menu do |menu|
276
+ menu.add id: 'blog', label: proc{"Something dynamic"}, priority: 0
277
+ end
278
+ end
279
+
280
+ # app/admin/post.rb
281
+ ActiveAdmin.configure_resource Post do |config|
282
+ config.menu_item_options = { parent: 'blog' }
283
+ end
284
+ ```
285
+
286
+ ### Adding Custom Menu Items
287
+
288
+ Sometimes it's not enough to just customize the menu label. In this case, you
289
+ can customize the menu for the namespace within the Active Admin initializer.
290
+
291
+ ```ruby
292
+ # config/initializers/active_admin.rb
293
+ config.namespace :admin do |admin|
294
+ admin.build_menu do |menu|
295
+ menu.add label: "The Application", url: "/", priority: 0
296
+
297
+ menu.add label: "Sites" do |sites|
298
+ sites.add label: "Google",
299
+ url: "http://google.com",
300
+ html_options: { target: :blank }
301
+
302
+ sites.add label: "Facebook",
303
+ url: "http://facebook.com"
304
+
305
+ sites.add label: "Github",
306
+ url: "http://github.com"
307
+ end
308
+ end
309
+ end
310
+ ```
311
+
312
+ This will be registered on application start before your resources are loaded.
313
+
314
+ ## Scoping the queries
315
+
316
+ If your administrators have different access levels, you may sometimes want to
317
+ scope what they have access to. Assuming your User model has the proper
318
+ has_many relationships, you can simply scope the listings and finders like so:
319
+
320
+ ```ruby
321
+ ActiveAdmin.configure_resource Post do |config|
322
+ config.scope_to :current_user # limits the accessible posts to `current_user.posts`
323
+
324
+ # Or if the association doesn't have the default name:
325
+ config.scope_to :current_user, association_method: :blog_posts
326
+
327
+ # Finally, you can pass a block to be called:
328
+ config.scope_to do
329
+ User.most_popular_posts
330
+ end
331
+ end
332
+ ```
333
+
334
+ You can also conditionally apply the scope:
335
+
336
+ ```ruby
337
+ ActiveAdmin.configure_resource Post do |config|
338
+ config.scope_to :current_user, if: proc{ current_user.limited_access? }
339
+ config.scope_to :current_user, unless: proc{ current_user.admin? }
340
+ end
341
+ ```
342
+
343
+ ## Eager loading
344
+
345
+ A common way to increase page performance is to eliminate N+1 queries by eager
346
+ loading associations:
347
+
348
+ ```ruby
349
+ class Admin::PostsController < ActiveAdmin::ResourceController
350
+ def apply_includes(collection)
351
+ collection.includes :author, :categories
352
+ end
353
+ end
354
+ ```
355
+
356
+ ## Customizing resource retrieval
357
+
358
+ Our controllers are built on [Inherited
359
+ Resources](https://github.com/activeadmin/inherited_resources), so you can use
360
+ [all of its
361
+ features](https://github.com/activeadmin/inherited_resources#overwriting-defaults).
362
+
363
+ If you need to customize the collection properties, you can overwrite the
364
+ `scoped_collection` method.
365
+
366
+ ```ruby
367
+ class Admin::PostsController < ActiveAdmin::ResourceController
368
+ def scoped_collection
369
+ end_of_association_chain.where(visibility: true)
370
+ end
371
+ end
372
+ ```
373
+
374
+ If you need to completely replace the record retrieving code (e.g., you have a
375
+ custom `to_param` implementation in your models), override the `resource` method
376
+ on the controller:
377
+
378
+ ```ruby
379
+ class Admin::PostsController < ActiveAdmin::ResourceController
380
+ def find_resource
381
+ scoped_collection.where(id: params[:id]).first!
382
+ end
383
+ end
384
+ ```
385
+
386
+ Note that if you use an authorization library like CanCan, you should be careful
387
+ to not write code like this, otherwise **your authorization rules won't be
388
+ applied**:
389
+
390
+ ```ruby
391
+ class Admin::PostsController < ActiveAdmin::ResourceController
392
+ def find_resource
393
+ Post.where(id: params[:id]).first!
394
+ end
395
+ end
396
+ ```
397
+
398
+ ## Belongs To
399
+
400
+ It's common to want to scope a series of resources to a relationship. For
401
+ example a Project may have many Milestones and Tickets. To nest the resource
402
+ within another, you can use the `belongs_to` method:
403
+
404
+ ```ruby
405
+ ActiveAdmin.configure_resource Project
406
+ ActiveAdmin.configure_resource Ticket do |config|
407
+ config.belongs_to :project
408
+ end
409
+ ```
410
+
411
+ Projects will be available as usual and tickets will be available by visiting
412
+ `/admin/projects/1/tickets` assuming that a Project with the id of 1 exists.
413
+ Active Admin does not add "Tickets" to the global navigation because the routes
414
+ can only be generated when there is a project id.
415
+
416
+ To create links to the resource, you can add them to a sidebar (one of the many
417
+ possibilities for how you may with to handle your user interface):
418
+
419
+ ```ruby
420
+ ActiveAdmin.register Project do
421
+
422
+ sidebar "Project Details", only: [:show, :edit] do
423
+ ul do
424
+ li link_to "Tickets", admin_project_tickets_path(resource)
425
+ li link_to "Milestones", admin_project_milestones_path(resource)
426
+ end
427
+ end
428
+ end
429
+
430
+ ActiveAdmin.configure_resource Ticket do |config|
431
+ config.belongs_to :project
432
+ end
433
+
434
+ ActiveAdmin.configure_resource Milestone do |config|
435
+ config.belongs_to :project
436
+ end
437
+ ```
438
+
439
+ In some cases (like Projects), there are many sub resources and you would
440
+ actually like the global navigation to switch when the user navigates "into" a
441
+ project. To accomplish this, Active Admin stores the `belongs_to` resources in a
442
+ separate menu which you can use if you so wish. To use:
443
+
444
+ ```ruby
445
+ ActiveAdmin.configure_resource Ticket do |config|
446
+ config.belongs_to :project
447
+ config.navigation_menu_name = :project
448
+ end
449
+
450
+ ActiveAdmin.configure_resource Milestone do |config|
451
+ config.belongs_to :project
452
+ config.navigation_menu_name = :project
453
+ end
454
+ ```
455
+
456
+ Now, when you navigate to the tickets section, the global navigation will
457
+ only display "Tickets" and "Milestones". When you navigate back to a
458
+ non-belongs_to resource, it will switch back to the default menu.
459
+
460
+ You can also defer the menu lookup until runtime so that you can dynamically show
461
+ different menus, say perhaps based on user permissions. For example:
462
+
463
+ ```ruby
464
+ ActiveAdmin.configure_resource Ticket do |config|
465
+ config.belongs_to :project
466
+ config.navigation_menu_name = -> { authorized?(:manage, SomeResource) ? :project : :restricted_menu }
467
+ end
468
+ ```
469
+
470
+ If you still want your `belongs_to` resources to be available in the default menu
471
+ and through non-nested routes, you can use the `:optional` option. For example:
472
+
473
+ ```ruby
474
+ ActiveAdmin.configure_resource Ticket do |config|
475
+ config.belongs_to :project, optional: true
476
+ end
477
+ ```
478
+
479
+ [permitted_attr_names]: https://rubydoc.info/github/varyonic/activeadmin/master/ActiveAdmin%2FResourceController%2FDataAccess:permitted_attr_names
480
+ [permitted_params]: https://rubydoc.info/github/varyonic/activeadmin/master/ActiveAdmin%2FResourceController%2FDataAccess:permitted_params
@@ -0,0 +1,39 @@
1
+ ---
2
+ layout: default
3
+ parent: Customizing the Index Page
4
+ nav_order: 4
5
+ title: Custom Index
6
+ redirect_from: /docs/3-index-pages/custom-index.html
7
+ ---
8
+
9
+ # Custom Index
10
+
11
+ If the supplied Active Admin index components are insufficient for your project
12
+ feel free to define your own. Index classes inherit from `ActiveAdmin::Component`
13
+ and require a `build` method and an `index_name` class method.
14
+
15
+ ```ruby
16
+ module ActiveAdmin
17
+ module Views
18
+ class IndexAsMyIdea < ActiveAdmin::Component
19
+
20
+ def build(page_presenter, collection)
21
+ # ...
22
+ end
23
+
24
+ def self.index_name
25
+ "my_idea"
26
+ end
27
+
28
+ end
29
+ end
30
+ end
31
+ ```
32
+
33
+ The build method takes a PagePresenter object and collection of whatever you
34
+ choose.
35
+
36
+ The `index_name` class method takes no arguments and returns a string that should
37
+ be representative of the the class name. If this method is not defined, your
38
+ index component will not be able take advantage of Active Admin's
39
+ *multiple index pages* feature.
@@ -0,0 +1,23 @@
1
+ ---
2
+ layout: default
3
+ parent: Customizing the Index Page
4
+ nav_order: 2
5
+ title: Index as a Block
6
+ redirect_from: /docs/3-index-pages/index-as-block.html
7
+ ---
8
+
9
+ # Index as a Block
10
+
11
+ If you want to fully customize the display of your resources on the index
12
+ screen, Index as a Block allows you to render a block of content for each
13
+ resource.
14
+
15
+ ```ruby
16
+ index as: :block do |product|
17
+ div for: product do
18
+ resource_selection_cell product
19
+ h2 auto_link product.title
20
+ div simple_format product.description
21
+ end
22
+ end
23
+ ```