activeadmin 0.6.6 → 1.0.0.pre1

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 (512) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +11 -8
  3. data/.hound.yml +11 -0
  4. data/.travis.yml +36 -10
  5. data/.yardopts +2 -1
  6. data/CHANGELOG.md +118 -67
  7. data/CONTRIBUTING.md +96 -73
  8. data/Gemfile +35 -35
  9. data/Guardfile +1 -0
  10. data/LICENSE +1 -1
  11. data/README.md +98 -0
  12. data/Rakefile +12 -4
  13. data/activeadmin.gemspec +21 -24
  14. data/app/assets/javascripts/active_admin/application.js.coffee +32 -0
  15. data/app/assets/javascripts/active_admin/base.js.coffee +14 -0
  16. data/app/assets/javascripts/active_admin/ext/jquery-ui.js.coffee +6 -0
  17. data/app/assets/javascripts/active_admin/ext/jquery.js.coffee +7 -0
  18. data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +39 -0
  19. data/app/assets/javascripts/active_admin/{components/jquery.aa.checkbox-toggler.js.coffee → lib/checkbox-toggler.js.coffee} +3 -4
  20. data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +101 -0
  21. data/app/assets/javascripts/active_admin/lib/flash.js.coffee +19 -0
  22. data/app/assets/javascripts/active_admin/lib/has_many.js.coffee +79 -0
  23. data/app/assets/javascripts/active_admin/lib/modal_dialog.js.coffee +37 -0
  24. data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +27 -0
  25. data/app/assets/javascripts/active_admin/lib/popover.js.coffee +68 -0
  26. data/app/assets/javascripts/active_admin/{components/jquery.aa.table-checkbox-toggler.js.coffee → lib/table-checkbox-toggler.js.coffee} +2 -3
  27. data/app/assets/stylesheets/active_admin/{_base.css.scss → _base.scss} +3 -0
  28. data/app/assets/stylesheets/active_admin/{_forms.css.scss → _forms.scss} +61 -17
  29. data/app/assets/stylesheets/active_admin/{_header.css.scss → _header.scss} +9 -5
  30. data/app/assets/stylesheets/active_admin/{_mixins.css.scss → _mixins.scss} +0 -0
  31. data/app/assets/stylesheets/active_admin/{_typography.css.scss → _typography.scss} +0 -0
  32. data/app/assets/stylesheets/active_admin/components/_batch_actions.scss +11 -0
  33. data/app/assets/stylesheets/active_admin/components/_blank_slates.scss +0 -1
  34. data/app/assets/stylesheets/active_admin/components/_buttons.scss +1 -1
  35. data/app/assets/stylesheets/active_admin/components/{_comments.css.scss → _comments.scss} +0 -0
  36. data/app/assets/stylesheets/active_admin/components/{_date_picker.css.scss → _date_picker.scss} +40 -14
  37. data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +5 -4
  38. data/app/assets/stylesheets/active_admin/components/_flash_messages.scss +37 -0
  39. data/app/assets/stylesheets/active_admin/components/_modal_dialog.scss +34 -0
  40. data/app/assets/stylesheets/active_admin/components/_pagination.scss +10 -0
  41. data/app/assets/stylesheets/active_admin/components/{_popovers.css.scss → _popovers.scss} +2 -3
  42. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +4 -0
  43. data/app/assets/stylesheets/active_admin/components/_table_tools.scss +67 -0
  44. data/app/assets/stylesheets/active_admin/components/{_tables.css.scss → _tables.scss} +4 -2
  45. data/app/assets/stylesheets/active_admin/components/_tabs.scss +65 -0
  46. data/app/assets/stylesheets/active_admin/components/_unsupported_browser.scss +16 -0
  47. data/app/assets/stylesheets/active_admin/mixins/{_all.css.scss → _all.scss} +0 -0
  48. data/app/assets/stylesheets/active_admin/mixins/{_buttons.css.scss → _buttons.scss} +0 -1
  49. data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +28 -0
  50. data/app/assets/stylesheets/active_admin/mixins/{_icons.css.scss → _icons.scss} +1 -2
  51. data/app/assets/stylesheets/active_admin/mixins/{_reset.css.scss → _reset.scss} +0 -0
  52. data/app/assets/stylesheets/active_admin/mixins/_rounded.scss +22 -0
  53. data/app/assets/stylesheets/active_admin/mixins/{_sections.css.scss → _sections.scss} +8 -2
  54. data/app/assets/stylesheets/active_admin/mixins/{_shadows.css.scss → _shadows.scss} +0 -7
  55. data/app/assets/stylesheets/active_admin/mixins/_utilities.scss +0 -9
  56. data/app/assets/stylesheets/active_admin/mixins/{_variables.css.scss → _variables.scss} +10 -8
  57. data/app/assets/stylesheets/active_admin/{print.css.scss → print.scss} +4 -0
  58. data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +5 -2
  59. data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +11 -9
  60. data/app/views/active_admin/devise/confirmations/new.html.erb +15 -0
  61. data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +1 -1
  62. data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +1 -1
  63. data/app/views/active_admin/devise/passwords/edit.html.erb +9 -10
  64. data/app/views/active_admin/devise/passwords/new.html.erb +5 -4
  65. data/app/views/active_admin/devise/registrations/new.html.erb +22 -0
  66. data/app/views/active_admin/devise/sessions/new.html.erb +9 -7
  67. data/app/views/active_admin/devise/shared/_links.erb +1 -1
  68. data/app/views/active_admin/devise/unlocks/new.html.erb +5 -4
  69. data/app/views/layouts/active_admin_logged_out.html.erb +3 -5
  70. data/config/locales/ar.yml +120 -0
  71. data/config/locales/bg.yml +26 -6
  72. data/config/locales/bs.yml +122 -0
  73. data/config/locales/ca.yml +10 -1
  74. data/config/locales/cs.yml +7 -2
  75. data/config/locales/da.yml +7 -3
  76. data/config/locales/de-CH.yml +14 -31
  77. data/config/locales/de.yml +33 -33
  78. data/config/locales/el.yml +28 -2
  79. data/config/locales/en-GB.yml +12 -4
  80. data/config/locales/en.yml +29 -3
  81. data/config/locales/{es_MX.yml → es-MX.yml} +9 -24
  82. data/config/locales/es.yml +32 -25
  83. data/config/locales/fa.yml +120 -0
  84. data/config/locales/fi.yml +113 -0
  85. data/config/locales/fr.yml +21 -11
  86. data/config/locales/he.yml +7 -3
  87. data/config/locales/hr.yml +42 -11
  88. data/config/locales/hu.yml +10 -3
  89. data/config/locales/it.yml +31 -3
  90. data/config/locales/ja.yml +8 -3
  91. data/config/locales/ko.yml +7 -1
  92. data/config/locales/lt.yml +42 -11
  93. data/config/locales/lv.yml +7 -3
  94. data/config/locales/{no-NB.yml → nb.yml} +46 -15
  95. data/config/locales/nl.yml +36 -5
  96. data/config/locales/pl.yml +13 -8
  97. data/config/locales/pt-BR.yml +37 -5
  98. data/config/locales/pt-PT.yml +8 -4
  99. data/config/locales/ro.yml +7 -3
  100. data/config/locales/ru.yml +26 -5
  101. data/config/locales/sv-SE.yml +9 -5
  102. data/config/locales/tr.yml +10 -3
  103. data/config/locales/uk.yml +36 -12
  104. data/config/locales/vi.yml +7 -3
  105. data/config/locales/zh-CN.yml +26 -10
  106. data/config/locales/zh-TW.yml +19 -13
  107. data/docs/0-installation.md +65 -29
  108. data/docs/1-general-configuration.md +92 -81
  109. data/docs/10-custom-pages.md +68 -68
  110. data/docs/11-decorators.md +48 -59
  111. data/docs/12-arbre-components.md +80 -74
  112. data/docs/13-authorization-adapter.md +128 -107
  113. data/docs/14-gotchas.md +92 -0
  114. data/docs/2-resource-customization.md +293 -178
  115. data/docs/3-index-pages.md +160 -86
  116. data/docs/3-index-pages/custom-index.md +31 -0
  117. data/docs/3-index-pages/index-as-block.md +14 -9
  118. data/docs/3-index-pages/index-as-blog.md +41 -31
  119. data/docs/3-index-pages/index-as-grid.md +16 -8
  120. data/docs/3-index-pages/index-as-table.md +129 -52
  121. data/docs/4-csv-format.md +31 -24
  122. data/docs/5-forms.md +133 -56
  123. data/docs/6-show-pages.md +89 -27
  124. data/docs/7-sidebars.md +48 -27
  125. data/docs/8-custom-actions.md +98 -77
  126. data/docs/9-batch-actions.md +210 -146
  127. data/docs/README.md +24 -0
  128. data/features/action_item.feature +3 -3
  129. data/features/authorization_pundit.feature +37 -0
  130. data/features/breadcrumb.feature +48 -0
  131. data/features/comments/commenting.feature +56 -13
  132. data/features/development_reloading.feature +17 -30
  133. data/features/edit_page.feature +12 -1
  134. data/features/favicon.feature +3 -3
  135. data/features/i18n.feature +5 -4
  136. data/features/index/batch_actions.feature +41 -0
  137. data/features/index/filters.feature +67 -0
  138. data/features/index/format_as_csv.feature +90 -4
  139. data/features/index/formats.feature +27 -0
  140. data/features/index/index_as_blog.feature +4 -4
  141. data/features/index/index_as_table.feature +102 -6
  142. data/features/index/index_blank_slate.feature +22 -0
  143. data/features/index/index_scope_to.feature +16 -16
  144. data/features/index/page_title.feature +11 -0
  145. data/features/index/pagination.feature +1 -1
  146. data/features/index/switch_index_view.feature +14 -14
  147. data/features/new_page.feature +13 -2
  148. data/features/registering_pages.feature +1 -1
  149. data/features/renamed_resource.feature +32 -0
  150. data/features/show/page_title.feature +11 -0
  151. data/features/show/tabs.feature +27 -0
  152. data/features/sidebar_sections.feature +12 -0
  153. data/features/site_title.feature +2 -2
  154. data/features/specifying_actions.feature +3 -3
  155. data/features/step_definitions/action_item_steps.rb +2 -2
  156. data/features/step_definitions/action_link_steps.rb +14 -1
  157. data/features/step_definitions/additional_web_steps.rb +19 -20
  158. data/features/step_definitions/asset_steps.rb +3 -3
  159. data/features/step_definitions/attribute_steps.rb +8 -3
  160. data/features/step_definitions/batch_action_steps.rb +26 -9
  161. data/features/step_definitions/blog_steps.rb +3 -0
  162. data/features/step_definitions/breadcrumb_steps.rb +1 -1
  163. data/features/step_definitions/comment_steps.rb +1 -1
  164. data/features/step_definitions/configuration_steps.rb +9 -2
  165. data/features/step_definitions/dashboard_steps.rb +2 -2
  166. data/features/step_definitions/factory_steps.rb +9 -8
  167. data/features/step_definitions/filter_steps.rb +25 -3
  168. data/features/step_definitions/flash_steps.rb +3 -3
  169. data/features/step_definitions/format_steps.rb +18 -18
  170. data/features/step_definitions/index_scope_steps.rb +5 -5
  171. data/features/step_definitions/layout_steps.rb +1 -1
  172. data/features/step_definitions/member_link_steps.rb +2 -2
  173. data/features/step_definitions/menu_steps.rb +3 -3
  174. data/features/step_definitions/pagination_steps.rb +2 -3
  175. data/features/step_definitions/sidebar_steps.rb +8 -3
  176. data/features/step_definitions/site_title_steps.rb +6 -4
  177. data/features/step_definitions/symbol_leak_steps.rb +3 -0
  178. data/features/step_definitions/tab_steps.rb +5 -0
  179. data/features/step_definitions/table_steps.rb +4 -4
  180. data/features/step_definitions/user_steps.rb +10 -7
  181. data/features/step_definitions/web_steps.rb +14 -11
  182. data/features/sti_resource.feature +6 -2
  183. data/features/strong_parameters.feature +73 -0
  184. data/features/support/env.rb +34 -9
  185. data/features/support/paths.rb +14 -6
  186. data/features/support/selectors.rb +1 -1
  187. data/features/symbol_leak.feature +35 -0
  188. data/features/users/resetting_password.feature +5 -6
  189. data/lib/active_admin.rb +26 -25
  190. data/lib/active_admin/abstract_view_factory.rb +7 -17
  191. data/lib/active_admin/application.rb +72 -59
  192. data/lib/active_admin/asset_registration.rb +2 -2
  193. data/lib/active_admin/authorization_adapter.rb +2 -2
  194. data/lib/active_admin/base_controller.rb +2 -3
  195. data/lib/active_admin/base_controller/authorization.rb +13 -31
  196. data/lib/active_admin/batch_actions.rb +1 -1
  197. data/lib/active_admin/batch_actions/controller.rb +24 -8
  198. data/lib/active_admin/batch_actions/resource_extension.rb +47 -18
  199. data/lib/active_admin/batch_actions/views/batch_action_form.rb +7 -4
  200. data/lib/active_admin/batch_actions/views/batch_action_popover.rb +3 -3
  201. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +8 -17
  202. data/lib/active_admin/batch_actions/views/selection_cells.rb +4 -4
  203. data/lib/active_admin/callbacks.rb +25 -24
  204. data/lib/active_admin/cancan_adapter.rb +7 -11
  205. data/lib/active_admin/csv_builder.rb +92 -15
  206. data/lib/active_admin/dependency.rb +93 -0
  207. data/lib/active_admin/deprecation.rb +6 -7
  208. data/lib/active_admin/devise.rb +28 -18
  209. data/lib/active_admin/dsl.rb +18 -11
  210. data/lib/active_admin/engine.rb +10 -8
  211. data/lib/active_admin/error.rb +62 -0
  212. data/lib/active_admin/filters/dsl.rb +2 -2
  213. data/lib/active_admin/filters/forms.rb +17 -27
  214. data/lib/active_admin/filters/formtastic_addons.rb +49 -15
  215. data/lib/active_admin/filters/resource_extension.rb +43 -34
  216. data/lib/active_admin/form_builder.rb +93 -154
  217. data/lib/active_admin/helpers/collection.rb +7 -13
  218. data/lib/active_admin/helpers/i18n.rb +7 -0
  219. data/lib/active_admin/helpers/optional_display.rb +5 -5
  220. data/lib/active_admin/helpers/routes/url_helpers.rb +15 -0
  221. data/lib/active_admin/helpers/scope_chain.rb +1 -1
  222. data/lib/active_admin/helpers/settings.rb +16 -9
  223. data/lib/active_admin/iconic.rb +17 -15
  224. data/lib/active_admin/iconic/icons.rb +136 -136
  225. data/lib/active_admin/inputs.rb +11 -7
  226. data/lib/active_admin/inputs/datepicker_input.rb +12 -3
  227. data/lib/active_admin/inputs/filters/base.rb +42 -0
  228. data/lib/active_admin/inputs/filters/base/search_method_select.rb +75 -0
  229. data/lib/active_admin/inputs/filters/boolean_input.rb +24 -0
  230. data/lib/active_admin/inputs/filters/check_boxes_input.rb +50 -0
  231. data/lib/active_admin/inputs/filters/date_range_input.rb +36 -0
  232. data/lib/active_admin/inputs/filters/numeric_input.rb +12 -0
  233. data/lib/active_admin/inputs/filters/select_input.rb +54 -0
  234. data/lib/active_admin/inputs/filters/string_input.rb +26 -0
  235. data/lib/active_admin/menu.rb +6 -4
  236. data/lib/active_admin/menu_collection.rb +1 -4
  237. data/lib/active_admin/namespace.rb +55 -29
  238. data/lib/active_admin/order_clause.rb +26 -0
  239. data/lib/active_admin/orm/active_record.rb +5 -0
  240. data/lib/active_admin/orm/active_record/comments.rb +81 -0
  241. data/lib/active_admin/orm/active_record/comments/comment.rb +45 -0
  242. data/lib/active_admin/{comments → orm/active_record/comments}/namespace_helper.rb +2 -2
  243. data/lib/active_admin/{comments → orm/active_record/comments}/resource_helper.rb +1 -1
  244. data/lib/active_admin/{comments → orm/active_record/comments}/show_page_helper.rb +0 -0
  245. data/lib/active_admin/orm/active_record/comments/views.rb +2 -0
  246. data/lib/active_admin/{comments → orm/active_record/comments}/views/active_admin_comments.rb +16 -14
  247. data/lib/active_admin/orm/mongoid.rb +1 -0
  248. data/lib/active_admin/orm/mongoid/.gitkeep +0 -0
  249. data/lib/active_admin/page.rb +7 -3
  250. data/lib/active_admin/page_dsl.rb +1 -1
  251. data/lib/active_admin/page_presenter.rb +2 -2
  252. data/lib/active_admin/pundit_adapter.rb +68 -0
  253. data/lib/active_admin/resource.rb +16 -17
  254. data/lib/active_admin/resource/action_items.rb +23 -18
  255. data/lib/active_admin/resource/belongs_to.rb +7 -3
  256. data/lib/active_admin/resource/controllers.rb +1 -0
  257. data/lib/active_admin/resource/includes.rb +12 -0
  258. data/lib/active_admin/resource/menu.rb +5 -5
  259. data/lib/active_admin/resource/naming.rb +27 -43
  260. data/lib/active_admin/resource/page_presenters.rb +1 -1
  261. data/lib/active_admin/resource/routes.rb +27 -11
  262. data/lib/active_admin/resource/scope_to.rb +7 -7
  263. data/lib/active_admin/resource/sidebars.rb +1 -0
  264. data/lib/active_admin/resource_controller.rb +6 -7
  265. data/lib/active_admin/resource_controller/data_access.rb +101 -93
  266. data/lib/active_admin/resource_controller/decorators.rb +91 -9
  267. data/lib/active_admin/resource_controller/streaming.rb +37 -0
  268. data/lib/active_admin/resource_dsl.rb +53 -10
  269. data/lib/active_admin/router.rb +7 -7
  270. data/lib/active_admin/scope.rb +6 -6
  271. data/lib/active_admin/sidebar_section.rb +10 -2
  272. data/lib/active_admin/version.rb +1 -1
  273. data/lib/active_admin/view_factory.rb +17 -17
  274. data/lib/active_admin/view_helpers.rb +0 -1
  275. data/lib/active_admin/view_helpers/auto_link_helper.rb +23 -12
  276. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +4 -3
  277. data/lib/active_admin/view_helpers/display_helper.rb +30 -15
  278. data/lib/active_admin/view_helpers/download_format_links_helper.rb +21 -25
  279. data/lib/active_admin/view_helpers/fields_for.rb +4 -4
  280. data/lib/active_admin/view_helpers/flash_helper.rb +4 -3
  281. data/lib/active_admin/view_helpers/form_helper.rb +5 -9
  282. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +6 -6
  283. data/lib/active_admin/views/action_items.rb +2 -2
  284. data/lib/active_admin/views/components/action_list_popover.rb +1 -1
  285. data/lib/active_admin/views/components/active_admin_form.rb +123 -0
  286. data/lib/active_admin/views/components/attributes_table.rb +63 -21
  287. data/lib/active_admin/views/components/blank_slate.rb +1 -1
  288. data/lib/active_admin/views/components/columns.rb +13 -7
  289. data/lib/active_admin/views/components/dropdown_menu.rb +6 -6
  290. data/lib/active_admin/views/components/index_list.rb +7 -7
  291. data/lib/active_admin/views/components/paginated_collection.rb +38 -20
  292. data/lib/active_admin/views/components/panel.rb +8 -2
  293. data/lib/active_admin/views/components/popover.rb +1 -1
  294. data/lib/active_admin/views/components/scopes.rb +5 -4
  295. data/lib/active_admin/views/components/sidebar_section.rb +3 -2
  296. data/lib/active_admin/views/components/site_title.rb +2 -2
  297. data/lib/active_admin/views/components/status_tag.rb +34 -11
  298. data/lib/active_admin/views/components/table_for.rb +90 -45
  299. data/lib/active_admin/views/components/tabs.rb +28 -0
  300. data/lib/active_admin/views/components/unsupported_browser.rb +11 -0
  301. data/lib/active_admin/views/footer.rb +3 -3
  302. data/lib/active_admin/views/header.rb +3 -3
  303. data/lib/active_admin/views/index_as_block.rb +10 -10
  304. data/lib/active_admin/views/index_as_blog.rb +45 -39
  305. data/lib/active_admin/views/index_as_grid.rb +14 -10
  306. data/lib/active_admin/views/index_as_table.rb +242 -129
  307. data/lib/active_admin/views/pages/base.rb +22 -18
  308. data/lib/active_admin/views/pages/form.rb +21 -11
  309. data/lib/active_admin/views/pages/index.rb +40 -35
  310. data/lib/active_admin/views/pages/layout.rb +1 -1
  311. data/lib/active_admin/views/pages/show.rb +4 -4
  312. data/lib/active_admin/views/tabbed_navigation.rb +7 -3
  313. data/lib/active_admin/views/title_bar.rb +10 -8
  314. data/lib/generators/active_admin/assets/assets_generator.rb +3 -28
  315. data/lib/generators/active_admin/assets/templates/{3.1/active_admin.css.scss → active_admin.css.scss} +0 -0
  316. data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +1 -0
  317. data/lib/generators/active_admin/devise/devise_generator.rb +24 -26
  318. data/lib/generators/active_admin/install/install_generator.rb +8 -9
  319. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +28 -26
  320. data/lib/generators/active_admin/install/templates/admin_user.rb.erb +12 -2
  321. data/lib/generators/active_admin/install/templates/dashboard.rb +4 -4
  322. data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb +3 -3
  323. data/lib/generators/active_admin/page/USAGE +8 -0
  324. data/lib/generators/active_admin/page/page_generator.rb +12 -0
  325. data/lib/generators/active_admin/page/templates/page.rb +5 -0
  326. data/lib/generators/active_admin/resource/resource_generator.rb +3 -5
  327. data/lib/generators/active_admin/resource/templates/admin.rb +15 -0
  328. data/lib/ransack_ext.rb +12 -0
  329. data/script/local +2 -2
  330. data/script/travis_cache +107 -0
  331. data/spec/javascripts/coffeescripts/jquery.aa.flash.js.coffee +25 -0
  332. data/spec/javascripts/fixtures/flashes.html +2 -0
  333. data/spec/rails_helper.rb +154 -0
  334. data/spec/{integration → requests}/default_namespace_spec.rb +6 -6
  335. data/spec/{integration → requests}/javascript_spec.rb +5 -5
  336. data/spec/requests/memory_spec.rb +23 -0
  337. data/spec/requests/stylesheets_spec.rb +18 -0
  338. data/spec/spec_helper.rb +12 -173
  339. data/spec/support/detect_rails_version.rb +9 -17
  340. data/spec/support/rails_template.rb +64 -35
  341. data/spec/support/rails_template_with_data.rb +14 -14
  342. data/spec/support/templates/admin/stores.rb +5 -1
  343. data/spec/support/templates/policies/active_admin/comment_policy.rb +9 -0
  344. data/spec/support/templates/policies/active_admin/page_policy.rb +18 -0
  345. data/spec/support/templates/policies/admin_user_policy.rb +11 -0
  346. data/spec/support/templates/policies/application_policy.rb +45 -0
  347. data/spec/support/templates/policies/category_policy.rb +7 -0
  348. data/spec/support/templates/policies/post_policy.rb +15 -0
  349. data/spec/support/templates/policies/store_policy.rb +11 -0
  350. data/spec/support/templates/policies/user_policy.rb +11 -0
  351. data/spec/support/templates/post_decorator.rb +4 -46
  352. data/spec/unit/abstract_view_factory_spec.rb +16 -16
  353. data/spec/unit/action_builder_spec.rb +24 -18
  354. data/spec/unit/active_admin_spec.rb +2 -2
  355. data/spec/unit/application_spec.rb +33 -34
  356. data/spec/unit/asset_registration_spec.rb +25 -29
  357. data/spec/unit/authorization/authorization_adapter_spec.rb +10 -10
  358. data/spec/unit/authorization/controller_authorization_spec.rb +11 -11
  359. data/spec/unit/authorization/index_overriding_spec.rb +22 -0
  360. data/spec/unit/auto_link_spec.rb +43 -13
  361. data/spec/unit/batch_actions/resource_spec.rb +15 -14
  362. data/spec/unit/batch_actions/settings_spec.rb +18 -18
  363. data/spec/unit/belongs_to_spec.rb +28 -19
  364. data/spec/unit/cancan_adapter_spec.rb +8 -8
  365. data/spec/unit/comments_spec.rb +99 -39
  366. data/spec/unit/component_spec.rb +3 -3
  367. data/spec/unit/config_shared_examples.rb +10 -10
  368. data/spec/unit/controller_filters_spec.rb +23 -16
  369. data/spec/unit/csv_builder_spec.rb +165 -24
  370. data/spec/unit/dependency_spec.rb +135 -0
  371. data/spec/unit/devise_spec.rb +17 -37
  372. data/spec/unit/dsl_spec.rb +70 -9
  373. data/spec/unit/event_spec.rb +11 -11
  374. data/spec/unit/filters/filter_form_builder_spec.rb +207 -148
  375. data/spec/unit/filters/resource_spec.rb +60 -26
  376. data/spec/unit/form_builder_spec.rb +419 -145
  377. data/spec/unit/generators/install_spec.rb +23 -0
  378. data/spec/unit/helpers/collection_spec.rb +18 -18
  379. data/spec/unit/helpers/scope_chain_spec.rb +6 -6
  380. data/spec/unit/helpers/settings_spec.rb +4 -4
  381. data/spec/unit/i18n_spec.rb +12 -0
  382. data/spec/unit/menu_collection_spec.rb +14 -14
  383. data/spec/unit/menu_item_spec.rb +42 -42
  384. data/spec/unit/menu_spec.rb +20 -20
  385. data/spec/unit/namespace/authorization_spec.rb +8 -8
  386. data/spec/unit/namespace/register_page_spec.rb +11 -11
  387. data/spec/unit/namespace/register_resource_spec.rb +28 -30
  388. data/spec/unit/namespace_spec.rb +20 -20
  389. data/spec/unit/order_clause_spec.rb +81 -0
  390. data/spec/unit/page_controller_spec.rb +1 -1
  391. data/spec/unit/page_spec.rb +18 -12
  392. data/spec/unit/pretty_format_spec.rb +42 -14
  393. data/spec/unit/pundit_adapter_spec.rb +98 -0
  394. data/spec/unit/resource/action_items_spec.rb +15 -12
  395. data/spec/unit/resource/includes_spec.rb +21 -0
  396. data/spec/unit/resource/menu_spec.rb +1 -1
  397. data/spec/unit/resource/naming_spec.rb +35 -21
  398. data/spec/unit/resource/page_presenters_spec.rb +8 -8
  399. data/spec/unit/resource/pagination_spec.rb +6 -6
  400. data/spec/unit/resource/routes_spec.rb +10 -10
  401. data/spec/unit/resource/scopes_spec.rb +14 -7
  402. data/spec/unit/resource/sidebars_spec.rb +6 -6
  403. data/spec/unit/resource_collection_spec.rb +31 -38
  404. data/spec/unit/resource_controller/data_access_spec.rb +96 -30
  405. data/spec/unit/resource_controller/decorators_spec.rb +83 -0
  406. data/spec/unit/resource_controller/sidebars_spec.rb +7 -8
  407. data/spec/unit/resource_controller_spec.rb +73 -70
  408. data/spec/unit/resource_registration_spec.rb +12 -12
  409. data/spec/unit/resource_spec.rb +77 -42
  410. data/spec/unit/routing_spec.rb +39 -31
  411. data/spec/unit/scope_spec.rb +112 -30
  412. data/spec/unit/settings_spec.rb +51 -21
  413. data/spec/unit/view_factory_spec.rb +2 -3
  414. data/spec/unit/view_helpers/breadcrumbs_spec.rb +71 -60
  415. data/spec/unit/view_helpers/display_name_spec.rb +49 -21
  416. data/spec/unit/view_helpers/download_format_links_helper_spec.rb +5 -5
  417. data/spec/unit/view_helpers/fields_for_spec.rb +18 -18
  418. data/spec/unit/view_helpers/flash_helper_spec.rb +25 -0
  419. data/spec/unit/view_helpers/form_helper_spec.rb +10 -23
  420. data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +64 -22
  421. data/spec/unit/views/components/action_list_popover_spec.rb +16 -6
  422. data/spec/unit/views/components/attributes_table_spec.rb +171 -30
  423. data/spec/unit/views/components/batch_action_popover_spec.rb +20 -6
  424. data/spec/unit/views/components/blank_slate_spec.rb +14 -4
  425. data/spec/unit/views/components/columns_spec.rb +52 -22
  426. data/spec/unit/views/components/index_list_spec.rb +11 -8
  427. data/spec/unit/views/components/index_table_for_spec.rb +46 -0
  428. data/spec/unit/views/components/paginated_collection_spec.rb +79 -90
  429. data/spec/unit/views/components/panel_spec.rb +32 -21
  430. data/spec/unit/views/components/popover_spec.rb +7 -7
  431. data/spec/unit/views/components/sidebar_section_spec.rb +18 -8
  432. data/spec/unit/views/components/site_title_spec.rb +26 -26
  433. data/spec/unit/views/components/status_tag_spec.rb +178 -38
  434. data/spec/unit/views/components/table_for_spec.rb +237 -35
  435. data/spec/unit/views/components/tabs_spec.rb +39 -0
  436. data/spec/unit/views/components/unsupported_browser_spec.rb +47 -0
  437. data/spec/unit/views/pages/form_spec.rb +17 -10
  438. data/spec/unit/views/pages/index_spec.rb +60 -0
  439. data/spec/unit/views/pages/layout_spec.rb +17 -21
  440. data/spec/unit/views/pages/show_spec.rb +18 -6
  441. data/spec/unit/views/tabbed_navigation_spec.rb +61 -52
  442. data/tasks/docs.rake +9 -11
  443. data/tasks/parallel_tests.rake +8 -2
  444. data/tasks/test.rake +13 -9
  445. data/tasks/yard.rake +7 -4
  446. metadata +219 -163
  447. data/.document +0 -5
  448. data/README.rdoc +0 -88
  449. data/app/assets/images/active_admin/admin_notes_icon.png +0 -0
  450. data/app/assets/images/active_admin/datepicker/datepicker-header-bg.png +0 -0
  451. data/app/assets/images/active_admin/datepicker/datepicker-next-link-icon.png +0 -0
  452. data/app/assets/images/active_admin/datepicker/datepicker-nipple.png +0 -0
  453. data/app/assets/images/active_admin/datepicker/datepicker-prev-link-icon.png +0 -0
  454. data/app/assets/images/active_admin/index_list_icons/block_icon.svg +0 -10
  455. data/app/assets/images/active_admin/index_list_icons/blog_icon.svg +0 -4
  456. data/app/assets/images/active_admin/index_list_icons/grid_icon.svg +0 -13
  457. data/app/assets/images/active_admin/index_list_icons/table_icon.svg +0 -3
  458. data/app/assets/images/active_admin/loading.gif +0 -0
  459. data/app/assets/javascripts/active_admin/application.js +0 -3
  460. data/app/assets/javascripts/active_admin/base.js +0 -5
  461. data/app/assets/javascripts/active_admin/components/jquery.aa.dropdown-menu.js.coffee +0 -105
  462. data/app/assets/javascripts/active_admin/components/jquery.aa.popover.js.coffee +0 -97
  463. data/app/assets/javascripts/active_admin/lib/namespace.js.coffee +0 -4
  464. data/app/assets/javascripts/active_admin/pages/application.js.coffee +0 -21
  465. data/app/assets/javascripts/active_admin/pages/batch_actions.js.coffee +0 -26
  466. data/app/assets/stylesheets/active_admin/components/_batch_actions.css.scss +0 -11
  467. data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +0 -41
  468. data/app/assets/stylesheets/active_admin/components/_table_tools.css.scss +0 -95
  469. data/app/assets/stylesheets/active_admin/mixins/_gradients.css.scss +0 -38
  470. data/app/assets/stylesheets/active_admin/mixins/_rounded.css.scss +0 -43
  471. data/app/views/active_admin/dashboard/index.html.arb +0 -1
  472. data/app/views/active_admin/resource/index.csv.erb +0 -23
  473. data/docs/3-index-pages/create-an-index.md +0 -29
  474. data/lib/active_admin/comments.rb +0 -83
  475. data/lib/active_admin/comments/comment.rb +0 -42
  476. data/lib/active_admin/comments/views.rb +0 -2
  477. data/lib/active_admin/dependency_checker.rb +0 -46
  478. data/lib/active_admin/inputs/filter_base.rb +0 -33
  479. data/lib/active_admin/inputs/filter_base/search_method_select.rb +0 -73
  480. data/lib/active_admin/inputs/filter_boolean_input.rb +0 -36
  481. data/lib/active_admin/inputs/filter_check_boxes_input.rb +0 -40
  482. data/lib/active_admin/inputs/filter_date_range_input.rb +0 -34
  483. data/lib/active_admin/inputs/filter_numeric_input.rb +0 -10
  484. data/lib/active_admin/inputs/filter_select_input.rb +0 -49
  485. data/lib/active_admin/inputs/filter_string_input.rb +0 -24
  486. data/lib/active_admin/reloader.rb +0 -130
  487. data/lib/active_admin/resource_controller/actions.rb +0 -81
  488. data/lib/active_admin/sass/active_admin.scss +0 -3
  489. data/lib/active_admin/sass/css_loader.rb +0 -16
  490. data/lib/active_admin/sass/helpers.rb +0 -45
  491. data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +0 -7
  492. data/lib/active_admin/views/dashboard_section_renderer.rb +0 -19
  493. data/lib/active_admin/views/pages/dashboard.rb +0 -62
  494. data/lib/generators/active_admin/assets/templates/3.0/active_admin.js +0 -1
  495. data/lib/generators/active_admin/assets/templates/3.1/active_admin.js +0 -1
  496. data/lib/meta_search_ext.rb +0 -10
  497. data/spec/integration/memory_spec.rb +0 -29
  498. data/spec/integration/stylesheets_spec.rb +0 -41
  499. data/spec/javascripts/compiled/jquery.aa.checkbox-toggler-spec.js +0 -60
  500. data/spec/javascripts/compiled/jquery.aa.popover-spec.js +0 -106
  501. data/spec/javascripts/compiled/jquery.aa.table-checkbox-toggler-spec.js +0 -37
  502. data/spec/javascripts/helpers/vendor/jasmine-fixture-0.0.5.js +0 -108
  503. data/spec/javascripts/helpers/vendor/jasmine-jquery.js +0 -288
  504. data/spec/javascripts/helpers/vendor/sinon-1.2.0.js +0 -2915
  505. data/spec/javascripts/support/jquery-ui-1.8.16.custom.min.js +0 -34
  506. data/spec/javascripts/support/jquery.min.js +0 -4
  507. data/spec/spec_helper_without_rails.rb +0 -11
  508. data/spec/unit/generators/install_rails_3_1_spec.rb +0 -16
  509. data/spec/unit/rails_spec.rb +0 -43
  510. data/spec/unit/reloader_spec.rb +0 -124
  511. data/spec/unit/sass/helpers_spec.rb +0 -47
  512. data/tasks/js.rake +0 -32
@@ -0,0 +1,92 @@
1
+ #Gotchas
2
+
3
+ ## Session Commits & Asset Pipeline
4
+
5
+ When configuring the asset pipeline ensure that the asset prefix
6
+ (`config.assets.prefix`) is not the same as the namespace of ActiveAdmin
7
+ (default namespace is `/admin`). If they are the same Sprockets will prevent the
8
+ session from being committed. Flash messages won't work and you will be unable to
9
+ use the session for storing anything.
10
+
11
+ For more information see the following post:
12
+ [http://www.intridea.com/blog/2013/3/20/rails-assets-prefix-may-disable-your-session](http://www.intridea.com/blog/2013/3/20/rails-assets-prefix-may-disable-your-session)
13
+
14
+ ## Helpers
15
+
16
+ There are two knowing gotchas with helpers. This hopefully will help you to
17
+ find a solution.
18
+
19
+ ### Helpers are not reloading in development
20
+
21
+ This is a known and still open [issue](https://github.com/activeadmin/activeadmin/issues/697)
22
+ the only way is to restart your server each time you change a helper.
23
+
24
+ ### Helper maybe not included by default
25
+
26
+ If you use `config.action_controller.include_all_helpers = false` in your application config,
27
+ you need to include it by hand.
28
+
29
+ #### Solutions
30
+
31
+ ##### First use a monkey patch
32
+
33
+ This works for all ActiveAdmin resources at once.
34
+
35
+ ```ruby
36
+ # config/initializers/active_admin_helpers.rb
37
+ ActiveAdmin::BaseController.class_eval do
38
+ helper ApplicationHelper
39
+ end
40
+ ```
41
+
42
+ ##### Second use the `controller` method
43
+
44
+ This works only for one resource at a time.
45
+
46
+ ```ruby
47
+ ActiveAdmin.register User do
48
+ controller do
49
+ helper UserHelper
50
+ end
51
+ end
52
+ ```
53
+
54
+ ## CSS
55
+
56
+ In order to avoid the override of your application style with the Active Admin one, you can do one of this things:
57
+ * You can properly move the generated file `active_admin.css.scss` from `app/assets/stylesheets` to `vendor/assets/stylesheets`.
58
+ * You can remove all `require_tree` comands from your root level css files, where the `active_admin.css.scss` is in the tree.
59
+
60
+ ## Conflicts
61
+
62
+ ### With gems that provides a `search` class method on a model
63
+
64
+ If a gem defines a `search` class method on a model, this can result in conflicts
65
+ with the same method provided by `ransack` (a dependency of ActiveAdmin).
66
+
67
+ Each of this conflicts need to solved is a different way. Some solutions are
68
+ listed below.
69
+
70
+ #### `tire`, `retire` and `elasticsearch-rails`
71
+
72
+ This conflict can be solved, by using explicitly the `search` method of `tire`,
73
+ `retire` or `elasticsearch-rails`:
74
+
75
+ ##### For `tire` and `retire`
76
+
77
+ ```ruby
78
+ YourModel.tire.search
79
+ ```
80
+
81
+ ##### For `elasticsearch-rails`
82
+
83
+ ```ruby
84
+ YourModel.__elasticsearch__.search
85
+ ```
86
+
87
+ ### Sunspot Solr
88
+
89
+ ```ruby
90
+ YourModel.solr_search
91
+ ```
92
+
@@ -1,147 +1,258 @@
1
- # Customize The Resource
1
+ # Working with Resources
2
+
3
+ Every Active Admin resource corresponds to a Rails model. So before creating a
4
+ resource you must first create a Rails model for it.
5
+
6
+ ## Create a Resource
7
+
8
+ The basic command for creating a resource is `rails g active_admin:resource Post`.
9
+ The generator will produce an empty `app/admin/post.rb` file like so:
10
+
11
+ ```ruby
12
+ ActiveAdmin.register Post do
13
+ # everything happens here :D
14
+ end
15
+ ```
16
+
17
+ ## Setting up Strong Parameters
18
+
19
+ Rails 4 replaces `attr_accessible` with [Strong Parameters](https://github.com/rails/strong_parameters),
20
+ which moves attribute whitelisting from the model to the controller.
21
+
22
+ Use the `permit_params` method to define which attributes may be changed:
23
+
24
+ ```ruby
25
+ ActiveAdmin.register Post do
26
+ permit_params :title, :content, :publisher_id
27
+ end
28
+ ```
29
+
30
+ Any form field that sends multiple values (such as a HABTM association, or an array attribute)
31
+ needs to pass an empty array to `permit_params`:
32
+
33
+ ```ruby
34
+ ActiveAdmin.register Post do
35
+ permit_params :title, :content, :publisher_id, roles: []
36
+ end
37
+ ```
38
+
39
+ Nested associations in the same form also require an array, but it
40
+ needs to be filled with any attributes used.
41
+
42
+ ```ruby
43
+ ActiveAdmin.register Post do
44
+ permit_params :title, :content, :publisher_id,
45
+ tags_attributes: [:id, :name, :description, :_destroy]
46
+ end
47
+
48
+ # Note that `accepts_nested_attributes_for` is still required:
49
+ class Post < ActiveRecord::Base
50
+ accepts_nested_attributes_for :tags, allow_destroy: true
51
+ end
52
+ ```
53
+
54
+ If you want to dynamically choose which attributes can be set, pass a block:
55
+
56
+ ```ruby
57
+ ActiveAdmin.register Post do
58
+ permit_params do
59
+ params = [:title, :content, :publisher_id]
60
+ params.push :author_id if current_user.admin?
61
+ params
62
+ end
63
+ end
64
+ ```
65
+
66
+ The `permit_params` call creates a method called `permitted_params`. You should use this method when overriding `create` or `update` actions:
67
+
68
+ ```ruby
69
+ ActiveAdmin.register Post do
70
+ controller do
71
+ def create
72
+ # Good
73
+ @post = Post.new(permitted_params[:post])
74
+ # Bad
75
+ @post = Post.new(params[:post])
76
+
77
+ if @post.save
78
+ # ...
79
+ end
80
+ end
81
+ end
82
+ end
83
+ ```
84
+
85
+ ## Disabling Actions on a Resource
86
+
87
+ All CRUD actions are enabled by default. These can be disabled for a given resource:
88
+
89
+ ```ruby
90
+ ActiveAdmin.register Post do
91
+ actions :all, except: [:update, :destroy]
92
+ end
93
+ ```
2
94
 
3
95
  ## Rename the Resource
4
96
 
5
97
  By default, any references to the resource (menu, routes, buttons, etc) in the
6
98
  interface will use the name of the class. You can rename the resource by using
7
- the <tt>:as</tt> option.
99
+ the `:as` option.
8
100
 
9
- ActiveAdmin.register Post, :as => "Article"
101
+ ```ruby
102
+ ActiveAdmin.register Post, as: "Article"
103
+ ```
10
104
 
11
- The resource will then be available as /admin/articles
105
+ The resource will then be available at `/admin/articles`.
12
106
 
13
107
  ## Customize the Namespace
14
108
 
15
- By default, resources live in the "admin" namespace.
16
-
17
- You can register resources in different namespaces:
18
-
19
- # Available at /today/posts
20
- ActiveAdmin.register Post, :namespace => "today"
109
+ We use the `admin` namespace by default, but you can use anything:
21
110
 
22
- # Available at /posts
23
- ActiveAdmin.register Post, :namespace => false
111
+ ```ruby
112
+ # Available at /today/posts
113
+ ActiveAdmin.register Post, namespace: :today
24
114
 
115
+ # Available at /posts
116
+ ActiveAdmin.register Post, namespace: false
117
+ ```
25
118
 
26
119
  ## Customize the Menu
27
120
 
28
121
  The resource will be displayed in the global navigation by default. To disable
29
- the resource from being displayed in the global navigation, pass `false` to the
30
- `menu` method:
122
+ the resource from being displayed in the global navigation:
31
123
 
32
- ActiveAdmin.register Post do
33
- menu false
34
- end
124
+ ```ruby
125
+ ActiveAdmin.register Post do
126
+ menu false
127
+ end
128
+ ```
35
129
 
36
130
  The menu method accepts a hash with the following options:
37
131
 
38
132
  * `:label` - The string or proc label to display in the menu. If it's a proc, it
39
133
  will be called each time the menu is rendered.
40
- * `:parent` - The string label of the parent to set for this menu
134
+ * `:parent` - The string id (or label) of the parent used for this menu
41
135
  * `:if` - A block or a symbol of a method to call to decide if the menu item
42
136
  should be displayed
43
- * `:priority` - The integer value of the priority. Defaults to 10
137
+ * `:priority` - The integer value of the priority, which defaults to `10`
44
138
 
45
139
  ### Labels
46
140
 
47
141
  To change the name of the label in the menu:
48
142
 
49
- ActiveAdmin.register Post do
50
- menu :label => "My Posts"
51
- end
52
-
53
- By default the menu uses a pluralized version of your resource name.
143
+ ```ruby
144
+ ActiveAdmin.register Post do
145
+ menu label: "My Posts"
146
+ end
147
+ ```
54
148
 
55
- If you wish to translate your label at runtime, store the label as a proc
56
- instead of a string. The proc will be called each time the menu is rendered.
149
+ If you want something more dynamic, pass a proc instead:
57
150
 
58
- ActiveAdmin.register Post do
59
- menu :label => proc{ I18n.t("mypost") }
60
- end
151
+ ```ruby
152
+ ActiveAdmin.register Post do
153
+ menu label: proc{ I18n.t "mypost" }
154
+ end
155
+ ```
61
156
 
62
157
  ### Menu Priority
63
158
 
64
- By default Active Admin sorts menus alphabetically. Some times you want specific
65
- resources to show up at the beginning or the end of your menu.
159
+ Menu items are sorted first by their numeric priority, then alphabetically. Since
160
+ every menu by default has a priority of `10`, the menu is normally alphabetical.
66
161
 
67
- Each menu item is given an integer priority value (default 10). You can set it
68
- to edit the location of the menu item.
162
+ You can easily customize this:
69
163
 
70
- ActiveAdmin.register Post do
71
- menu :priority => 1
72
- end
73
-
74
- This would ensure that the Post menu item, is at the beginning of the menu.
164
+ ```ruby
165
+ ActiveAdmin.register Post do
166
+ menu priority: 1 # so it's on the very left
167
+ end
168
+ ```
75
169
 
76
170
  ### Conditionally Showing / Hiding Menu Items
77
171
 
78
172
  Menu items can be shown or hidden at runtime using the `:if` option.
173
+ ```ruby
174
+ ActiveAdmin.register Post do
175
+ menu if: proc{ current_user.can_edit_posts? }
176
+ end
177
+ ```
79
178
 
80
- ActiveAdmin.register Post do
81
- menu :if => proc{ current_admin_user.can_edit_posts? }
82
- end
83
-
84
- The `proc` will be called in the context of the view, so you have access to all
179
+ The proc will be called in the context of the view, so you have access to all
85
180
  your helpers and current user session information.
86
181
 
87
182
  ### Drop Down Menus
88
183
 
89
- In many cases, a single level navigation will not be enough for the
90
- administration of a production application. In that case, you can categorize
91
- your resources and creating drop down menus to access them.
92
-
93
- To add the menu as a child of another menu:
184
+ In many cases, a single level navigation will not be enough to manage a large
185
+ application. In that case, you can group your menu items under a parent menu item.
94
186
 
95
- ActiveAdmin.register Post do
96
- menu :parent => "Blog"
97
- end
187
+ ```ruby
188
+ ActiveAdmin.register Post do
189
+ menu parent: "Blog"
190
+ end
191
+ ```
98
192
 
99
- Note, the "Blog" menu does not even have to exist yet. It will be generated on
100
- the fly as a drop down list for you.
193
+ Note that the "Blog" parent menu item doesn't even have to exist yet; it can be
194
+ dynamically generated for you.
101
195
 
102
196
  ### Customizing Parent Menu Items
103
197
 
104
- All of the options given to a standard menu item are also available to the
105
- parent menu items. You can customize their attributes in the Active Admin
106
- initializer.
107
-
108
- # config/initializers/active_admin.rb
109
- ActiveAdmin.setup do |config|
110
- config.namespace :admin do |admin|
111
-
112
- # This block will edit the default menu
113
- admin.build_menu do |menu|
114
- menu.add :label => "Blog", :priority => 0
115
- end
116
-
117
- end
118
- end
119
-
120
- Now, if you use `menu :parent => "Blog"`, your resource menu item will be a
121
- child of the Blog menu item with the priority of 0.
198
+ All of the options given to a standard menu item are also available to
199
+ parent menu items. In the case of complex parent menu items, you should
200
+ configure them in the Active Admin initializer.
201
+
202
+ ```ruby
203
+ # config/initializers/active_admin.rb
204
+ config.namespace :admin do |admin|
205
+ admin.build_menu do |menu|
206
+ menu.add label: 'Blog', priority: 0
207
+ end
208
+ end
209
+
210
+ # app/admin/post.rb
211
+ ActiveAdmin.register Post do
212
+ menu parent: 'Blog'
213
+ end
214
+ ```
215
+
216
+ ### Dynamic Parent Menu Items
217
+
218
+ While the above works fine, what if you want a parent menu item with a dynamic
219
+ name? Well, you have to refer to it by its `:id`.
220
+
221
+ ```ruby
222
+ # config/initializers/active_admin.rb
223
+ config.namespace :admin do |admin|
224
+ admin.build_menu do |menu|
225
+ menu.add id: 'blog', label: proc{"Something dynamic"}, priority: 0
226
+ end
227
+ end
228
+
229
+ # app/admin/post.rb
230
+ ActiveAdmin.register Post do
231
+ menu parent: 'blog'
232
+ end
233
+ ```
122
234
 
123
235
  ### Adding Custom Menu Items
124
236
 
125
237
  Sometimes it's not enough to just customize the menu label. In this case, you
126
238
  can customize the menu for the namespace within the Active Admin initializer.
127
239
 
128
- # config/initializers/active_admin.rb
129
- ActiveAdmin.setup do |config|
130
- config.namespace :admin do |admin|
131
- admin.build_menu do |menu|
132
- menu.add :label => "The Application", :url => "/", :priority => 0
133
-
134
- menu.add :label => "Sites" do |sites|
135
- sites.add :label => "Google", :url => "http://google.com", :html_options => { :target => :blank }
136
- sites.add :label => "Facebook", :url => "http://facebook.com"
137
- sites.add :label => "Github", :url => "http://github.com"
138
- end
139
- end
140
- end
240
+ ```ruby
241
+ # config/initializers/active_admin.rb
242
+ config.namespace :admin do |admin|
243
+ admin.build_menu do |menu|
244
+ menu.add label: "The Application", url: "/", priority: 0
245
+
246
+ menu.add label: "Sites" do |sites|
247
+ sites.add label: "Google", url: "http://google.com", html_options: { target: :blank }
248
+ sites.add label: "Facebook", url: "http://facebook.com"
249
+ sites.add label: "Github", url: "http://github.com"
141
250
  end
251
+ end
252
+ end
253
+ ```
142
254
 
143
- This block will be run once on application startup to build the menu before each
144
- of the resources are added to it.
255
+ This will be registered on application start before your resources are loaded.
145
256
 
146
257
  ## Scoping the queries
147
258
 
@@ -149,77 +260,68 @@ If your administrators have different access levels, you may sometimes want to
149
260
  scope what they have access to. Assuming your User model has the proper
150
261
  has_many relationships, you can simply scope the listings and finders like so:
151
262
 
152
- ActiveAdmin.register Post do
153
- scope_to :current_user
263
+ ```ruby
264
+ ActiveAdmin.register Post do
265
+ scope_to :current_user # limits the accessible posts to `current_user.posts`
154
266
 
155
- # or if the association doesn't have the default name.
156
- # scope_to :current_user, :association_method => :blog_posts
157
- end
267
+ # Or if the association doesn't have the default name:
268
+ scope_to :current_user, association_method: :blog_posts
158
269
 
159
- That approach limits the posts an admin can access to ```current_user.posts```.
270
+ # Finally, you can pass a block to be called:
271
+ scope_to do
272
+ User.most_popular_posts
273
+ end
274
+ end
275
+ ```
160
276
 
161
- If you want to conditionally apply the scope, then there are options for that as well:
277
+ You can also conditionally apply the scope:
162
278
 
163
- ActiveAdmin.register Post do
164
- # Only scope the query if there is a user to scope to, helper provided via Devise
165
- scope_to :current_user, :if => proc{ admin_user_signed_in? }
279
+ ```ruby
280
+ ActiveAdmin.register Post do
281
+ scope_to :current_user, if: proc{ current_user.limited_access? }
282
+ scope_to :current_user, unless: proc{ current_user.admin? }
283
+ end
284
+ ```
166
285
 
167
- # Don't scope the query if the user is an admin
168
- scope_to :current_user, :unless => proc{ current_admin_user.admin? }
286
+ ## Eager loading
169
287
 
170
- # Get fancy and can combine with block syntax
171
- scope_to :if => proc{ admin_user_signed_in? } do
172
- User.most_popular
173
- end
174
- end
175
-
176
- If you want to do something fancier, for example override a default scope, you can
177
- also use :association_method parameter with a normal method on your User model.
178
- The only requirement is that your method returns an instance of ActiveRecord::Relation.
288
+ A common way to increase page performance is to elimate N+1 queries by eager loading associations:
179
289
 
180
- class Ad < ActiveRecord::Base
181
- default_scope lambda { where :published => true }
182
- end
290
+ ```ruby
291
+ ActiveAdmin.register Post do
292
+ includes :author, :categories
293
+ end
294
+ ```
183
295
 
184
- class User < ActiveRecord::Base
185
- def managed_ads
186
- # Overrides Ad's default_scope
187
- Ad.unscoped
188
- end
189
- end
190
-
191
- ActiveAdmin.register Ad do
192
- scope_to :current_user, :association_method => :managed_ads
193
- end
296
+ ## Customizing resource retrieval
194
297
 
195
- In case you just need to customize the query independently of the current user, you can
196
- override the `scoped_collection` method on the controller:
298
+ If you need to customize the collection properties, you can overwrite the `scoped_collection` method.
197
299
 
198
- ActiveAdmin.register Post do
199
- controller do
200
- def scoped_collection
201
- Post.includes(:author)
202
- end
203
- end
300
+ ```ruby
301
+ ActiveAdmin.register Post do
302
+ controller do
303
+ def scoped_collection
304
+ end_of_association_chain.where(visibility: true)
204
305
  end
205
-
206
- ## Customizing resource retrieval
306
+ end
307
+ end
308
+ ```
207
309
 
208
310
  If you need to completely replace the record retrieving code (e.g., you have a custom
209
311
  `to_param` implementation in your models), override the `resource` method on the controller:
210
312
 
211
- ActiveAdmin.register Post do
212
- controller do
213
- def resource
214
- Post.where(id: params[:id]).first!
215
- end
216
- end
313
+ ```ruby
314
+ ActiveAdmin.register Post do
315
+ controller do
316
+ def find_resource
317
+ Post.where(id: params[:id]).first!
217
318
  end
319
+ end
320
+ end
321
+ ```
218
322
 
219
- In fact, the controllers use [Inherited Resource](https://github.com/josevalim/inherited_resources),
220
- so you can use all the
221
- [customization features in Inherited Resource](https://github.com/josevalim/inherited_resources#overwriting-defaults).
222
-
323
+ Our controllers are built on [Inherited Resources](https://github.com/josevalim/inherited_resources),
324
+ so you can use [all of its features](https://github.com/josevalim/inherited_resources#overwriting-defaults).
223
325
 
224
326
  ## Belongs To
225
327
 
@@ -227,66 +329,79 @@ It's common to want to scope a series of resources to a relationship. For
227
329
  example a Project may have many Milestones and Tickets. To nest the resource
228
330
  within another, you can use the `belongs_to` method:
229
331
 
230
- ActiveAdmin.register Project do
231
- end
232
-
233
- ActiveAdmin.register Ticket do
234
- belongs_to :project
235
- end
332
+ ```ruby
333
+ ActiveAdmin.register Project
334
+ ActiveAdmin.register Ticket do
335
+ belongs_to :project
336
+ end
337
+ ```
236
338
 
237
339
  Projects will be available as usual and tickets will be availble by visiting
238
- "/admin/projects/1/tickets" assuming that a Project with the id of 1 exists.
340
+ `/admin/projects/1/tickets` assuming that a Project with the id of 1 exists.
239
341
  Active Admin does not add "Tickets" to the global navigation because the routes
240
342
  can only be generated when there is a project id.
241
343
 
242
344
  To create links to the resource, you can add them to a sidebar (one of the many
243
345
  possibilities for how you may with to handle your user interface):
244
346
 
245
- ActiveAdmin.register Project do
246
-
247
- sidebar "Project Details", only: [:show, :edit] do
248
- ul do
249
- li link_to("Tickets", admin_project_tickets_path(project))
250
- li link_to("Milestones", admin_project_milestones_path(project))
251
- end
252
- end
347
+ ```ruby
348
+ ActiveAdmin.register Project do
253
349
 
350
+ sidebar "Project Details", only: [:show, :edit] do
351
+ ul do
352
+ li link_to "Tickets", admin_project_tickets_path(project)
353
+ li link_to "Milestones", admin_project_milestones_path(project)
254
354
  end
355
+ end
356
+ end
255
357
 
256
- ActiveAdmin.register Ticket do
257
- belongs_to :project
258
- end
259
-
260
- ActiveAdmin.register Milestone do
261
- belongs_to :project
262
- end
358
+ ActiveAdmin.register Ticket do
359
+ belongs_to :project
360
+ end
263
361
 
362
+ ActiveAdmin.register Milestone do
363
+ belongs_to :project
364
+ end
365
+ ```
264
366
 
265
367
  In some cases (like Projects), there are many sub resources and you would
266
368
  actually like the global navigation to switch when the user navigates "into" a
267
369
  project. To accomplish this, Active Admin stores the `belongs_to` resources in a
268
370
  seperate menu which you can use if you so wish. To use:
269
371
 
270
- ActiveAdmin.register Ticket do
271
- belongs_to :project
272
- navigation_menu :project
273
- end
372
+ ```ruby
373
+ ActiveAdmin.register Ticket do
374
+ belongs_to :project
375
+ navigation_menu :project
376
+ end
274
377
 
275
- ActiveAdmin.register Milestone do
276
- belongs_to :project
277
- navigation_menu :project
278
- end
378
+ ActiveAdmin.register Milestone do
379
+ belongs_to :project
380
+ navigation_menu :project
381
+ end
382
+ ```
279
383
 
280
384
  Now, when you navigate to the tickets section, the global navigation will
281
385
  only display "Tickets" and "Milestones". When you navigate back to a
282
386
  non-belongs_to resource, it will switch back to the default menu.
283
387
 
284
388
  You can also defer the menu lookup until runtime so that you can dynamically show
285
- different menus, say perhaps on user permissions or level. For example:
286
-
287
- ActiveAdmin.register Ticket do
288
- belongs_to: :project
289
- navigation_menu do
290
- authorized?(:manage, SomeResource) ? :project : :restricted_menu
291
- end
292
- end
389
+ different menus, say perhaps based on user permissions. For example:
390
+
391
+ ```ruby
392
+ ActiveAdmin.register Ticket do
393
+ belongs_to :project
394
+ navigation_menu do
395
+ authorized?(:manage, SomeResource) ? :project : :restricted_menu
396
+ end
397
+ end
398
+ ```
399
+
400
+ If you still want your `belongs_to` resources to be available in the default menu
401
+ and through non-nested routes, you can use the `:optional` option. For example:
402
+
403
+ ```ruby
404
+ ActiveAdmin.register Ticket do
405
+ belongs_to :project, optional: true
406
+ end
407
+ ```