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
@@ -1,43 +1,105 @@
1
1
  # Customize the Show Page
2
2
 
3
- Customize the show page is as simple as implementing the show block:
3
+ The show block is rendered within the context of the view and uses [Arbre](https://github.com/activeadmin/arbre) syntax.
4
4
 
5
- ActiveAdmin.register Post do
6
- show do
7
- h3 post.title
8
- div do
9
- simple_format post.body
10
- end
11
- end
5
+ With the `show` block, you can render anything you want.
6
+
7
+ ```ruby
8
+ ActiveAdmin.register Post do
9
+ show do
10
+ h3 post.title
11
+ div do
12
+ simple_format post.body
12
13
  end
14
+ end
15
+ end
16
+ ```
17
+
18
+ You can render a partial at any point:
19
+
20
+ ```ruby
21
+ ActiveAdmin.register Post do
22
+ show do
23
+ # renders app/views/admin/posts/_some_partial.html.erb
24
+ render 'some_partial'
25
+ end
26
+ end
27
+ ```
13
28
 
14
- The show block is rendered within the context of the view and uses the Arbre HTML DSL. You
15
- can also render a partial at any point.
29
+ If you'd like to keep the default AA look, you can use `attributes_table`:
16
30
 
17
- ActiveAdmin.register Post do
18
- show do
19
- # renders app/views/admin/posts/_some_partial.html.erb
20
- render "some_partial"
31
+ ```ruby
32
+ ActiveAdmin.register Ad do
33
+ show do
34
+ attributes_table do
35
+ row :title
36
+ row :image do |ad|
37
+ image_tag ad.image.url
21
38
  end
22
39
  end
40
+ active_admin_comments
41
+ end
42
+ end
43
+ ```
23
44
 
24
- If you'd like to keep the default active_admin look, you can also use "attributes_table":
45
+ You can also customize the title of the object in the show screen:
25
46
 
26
- ActiveAdmin.register Ad do
27
- show do |ad|
28
- attributes_table do
29
- row :title
30
- row :image do
31
- image_tag(ad.image.url)
32
- end
33
- end
34
- active_admin_comments
47
+ ```ruby
48
+ show title: :name do
49
+ # ...
50
+ end
51
+ ```
52
+
53
+ If you want a more data-dense page, you can combine a sidebar:
54
+
55
+ ```ruby
56
+ ActiveAdmin.register Book do
57
+ show do
58
+ panel "Table of Contents" do
59
+ table_for book.chapters do
60
+ column :number
61
+ column :title
62
+ column :page
35
63
  end
36
64
  end
65
+ active_admin_comments
66
+ end
37
67
 
38
- You can customize the title of the object in the show screen. The default is the resource name and the ID. You can customize as follows:
39
-
40
- show :title => :name do
68
+ sidebar "Details", only: :show do
69
+ attributes_table_for book do
70
+ row :title
71
+ row :author
72
+ row :publisher
73
+ row('Published?') { |b| status_tag b.published? }
41
74
  end
75
+ end
76
+ end
77
+ ```
78
+
79
+ # Tabs
42
80
 
81
+ You can arrage content in tabs as shown below:
43
82
 
83
+ ```ruby
84
+ ActiveAdmin.register Order do
85
+ show do
86
+ tabs do
87
+ tab 'Overview' do
88
+ attributes_table do
89
+ row(:status) { status_tag(order.status) }
90
+ row(:paid) { number_to_currency(order.amount_paid_in_dollars) }
91
+ end
92
+ end
93
+
94
+ tab 'Payments' do
95
+ table_for order.payments do
96
+ column('Payment Type') { |p| p.payment_type.titleize }
97
+ column('Received On', :created_at)
98
+ column('Payment Details & Notes', :notes)
99
+ column('Amount') { |p| number_to_currency(p.amount_in_dollars) }
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
105
+ ```
@@ -1,42 +1,63 @@
1
1
  # Sidebar Sections
2
2
 
3
- To add a sidebar section to all the screen within a section, use the sidebar method:
3
+ Sidebars allow you to put whatever content you want on the side the page.
4
4
 
5
- sidebar :help do
6
- "Need help? Email us at help@example.com"
7
- end
5
+ ```ruby
6
+ sidebar :help do
7
+ "Need help? Email us at help@example.com"
8
+ end
9
+ ```
8
10
 
9
- This will generate a sidebar section on each screen of the resource. With the block as
10
- the contents of the section. The first argument is the section title.
11
+ This will generate a sidebar on every page for that resource. The first
12
+ argument is used as the title, and can be a symbol, string, or lambda.
11
13
 
12
- You can also use Arbre syntax to define the content.
14
+ You can also use [Arbre](https://github.com/activeadmin/arbre) to define HTML content.
13
15
 
14
- sidebar :help do
15
- ul do
16
- li "Second List First Item"
17
- li "Second List Second Item"
18
- end
19
- end
16
+ ```ruby
17
+ sidebar :help do
18
+ ul do
19
+ li "Second List First Item"
20
+ li "Second List Second Item"
21
+ end
22
+ end
23
+ ```
20
24
 
21
- Sidebar sections can be rendered on a specific action by using the :only or :except
22
- options.
25
+ Sidebars can be rendered on a specific action by passing `:only` or `:except`.
23
26
 
24
- sidebar :help, :only => :index do
25
- "Need help? Email us at help@example.com"
26
- end
27
+ ```ruby
28
+ sidebar :help, only: :index do
29
+ "Need help? Email us at help@example.com"
30
+ end
31
+ ```
27
32
 
28
33
  If you want to conditionally display a sidebar section, use the :if option and
29
- pass it a proc which will be rendered within the context of the view.
34
+ pass it a proc which will be rendered within the view context.
30
35
 
31
- sidebar :help, :if => proc{ current_admin_user.super_admin? }
32
- "Only for super admins!"
33
- end
36
+ ```ruby
37
+ sidebar :help, if: proc{ current_admin_user.super_admin? } do
38
+ "Only for super admins!"
39
+ end
40
+ ```
34
41
 
35
- If you only pass a symbol, Active Admin will attempt to locate a partial to render.
42
+ You can also render a partial:
36
43
 
37
- # Will render app/views/admin/posts/_help_sidebar.html.erb
38
- sidebar :help
44
+ ```ruby
45
+ sidebar :help # app/views/admin/posts/_help_sidebar.html.erb
46
+ sidebar :help, partial: 'custom' # app/views/admin/posts/_custom.html.erb
47
+ ```
39
48
 
40
- Or you can pass your own custom partial to render.
49
+ It's possible to add custom class name to the sidebar parent element by passing
50
+ `class` option:
41
51
 
42
- sidebar :help, :partial => "custom_help_partial"
52
+ ```ruby
53
+ sidebar :help, class: 'custom_class'
54
+ ```
55
+
56
+ By default sidebars are positioned in the same order as they defined, but it's also
57
+ possible to specify their position manually:
58
+
59
+ ```ruby
60
+ sidebar :help, priority: 0 # will push Help section to the top (above default Filters section)
61
+ ```
62
+
63
+ Default sidebar priority is `10`.
@@ -12,18 +12,19 @@ generating a route for you.
12
12
 
13
13
  To add a collection action, use the collection_action method:
14
14
 
15
+ ```ruby
16
+ ActiveAdmin.register Post do
15
17
 
16
- ActiveAdmin.register Post do
18
+ collection_action :import_csv, method: :post do
19
+ # Do some CSV importing work here...
20
+ redirect_to collection_path, notice: "CSV imported successfully!"
21
+ end
17
22
 
18
- collection_action :import_csv, :method => :post do
19
- # Do some CSV importing work here...
20
- redirect_to {:action => :index}, {:notice => "CSV imported successfully!"}
21
- end
23
+ end
24
+ ```
22
25
 
23
- end
24
-
25
- This collection action will generate a route at "/admin/posts/import_csv"
26
- pointing to the Admin::PostsController#import_csv controller action.
26
+ This collection action will generate a route at `/admin/posts/import_csv`
27
+ pointing to the `Admin::PostsController#import_csv` controller action.
27
28
 
28
29
  ## Member Actions
29
30
 
@@ -32,108 +33,128 @@ A member action is a controller action which operates on a single resource.
32
33
  For example, to add a lock action to a user resource, you would do the
33
34
  following:
34
35
 
35
- ActiveAdmin.register User do
36
+ ```ruby
37
+ ActiveAdmin.register User do
36
38
 
37
- member_action :lock, :method => :put do
38
- user = User.find(params[:id])
39
- user.lock!
40
- redirect_to {:action => :show}, {:notice => "Locked!"}
41
- end
39
+ member_action :lock, method: :put do
40
+ resource.lock!
41
+ redirect_to resource_path, notice: "Locked!"
42
+ end
42
43
 
43
- end
44
+ end
45
+ ```
44
46
 
45
- This will generate a route at "/admin/users/:id/lock" pointing to the
46
- Admin::UserController#lock controller action.
47
+ This will generate a route at `/admin/users/:id/lock` pointing to the
48
+ `Admin::UserController#lock` controller action.
47
49
 
48
- ## Controller Action HTTP Verb
50
+ ## HTTP Verbs
49
51
 
50
- The collection_action and member_actions methods both accept the "method"
52
+ The `collection_action` and `member_action` methods both accept the `:method`
51
53
  argument to set the HTTP verb for the controller action and route.
52
54
 
53
- The generated routes will be scoped to the given method you pass in. By default
54
- your action will use the :get verb.
55
+ Sometimes you want to create an action with the same name, that handles multiple
56
+ HTTP verbs. In that case, this is the suggested approach:
55
57
 
56
- ## Rendering in Custom Actions
58
+ ```ruby
59
+ member_action :foo, method: [:get, :post] do
60
+ if request.post?
61
+ resource.update_attributes! foo: params[:foo] || {}
62
+ head :ok
63
+ else
64
+ render :foo
65
+ end
66
+ end
67
+ ```
68
+
69
+ ## Rendering
57
70
 
58
71
  Custom controller actions support rendering within the standard Active Admin
59
72
  layout.
60
73
 
61
- ActiveAdmin.register Post do
62
-
63
- # /admin/posts/:id/comments
64
- member_action :comments do
65
- @post = Post.find(params[:id])
74
+ ```ruby
75
+ ActiveAdmin.register Post do
66
76
 
67
- # This will render app/views/admin/posts/comments.html.erb
68
- end
77
+ # /admin/posts/:id/comments
78
+ member_action :comments do
79
+ @comments = resource.comments
80
+ # This will render app/views/admin/posts/comments.html.erb
81
+ end
69
82
 
70
- end
83
+ end
84
+ ```
71
85
 
72
86
  If you would like to use the same view syntax as the rest of Active Admin, you
73
87
  can use the Arbre file extension: .arb.
74
88
 
75
- For example, create app/views/admin/posts/comments.html.arb with:
76
-
77
- table_for assigns[:post].comments do
78
- column :id
79
- column :author
80
- column :body do |comment|
81
- simple_format comment.body
82
- end
83
- end
89
+ For example, create `app/views/admin/posts/comments.html.arb` with:
84
90
 
85
- ### Custom Action Items
91
+ ```ruby
92
+ table_for assigns[:post].comments do
93
+ column :id
94
+ column :author
95
+ column :body do |comment|
96
+ simple_format comment.body
97
+ end
98
+ end
99
+ ```
86
100
 
87
- To include your own action items (like the New, Edit and Delete buttons), add an
88
- `action_item` block. For example, to add a "View on site" button to view a blog
89
- post:
101
+ ## Page Titles
90
102
 
91
- action_item :only => :show do
92
- link_to('View on site', post_path(post)) if post.published?
93
- end
103
+ The page title for the custom action will be the translated version of
104
+ the controller action name. For example, a member_action named "upload_csv" will
105
+ look up a translation key of `active_admin.upload_csv`. If none are found, it
106
+ defaults to the name of the controller action.
94
107
 
95
- Actions items also accept the :if option to conditionally display them:
108
+ If this doesn't work for you, you can always set the `@page_title` instance
109
+ variable in your controller action to customize the page title.
96
110
 
97
- action_item :only => :show, :if => proc{ current_admin_user.super_admin? } do
98
- "Only display this to super admins on the show screen"
99
- end
111
+ ```ruby
112
+ ActiveAdmin.register Post do
100
113
 
101
- ### Page Titles
114
+ member_action :comments do
115
+ @comments = resource.comments
116
+ @page_title = "#{resource.title}: Comments" # Sets the page title
117
+ end
102
118
 
103
- The page title for the custom action will be the internationalized version of
104
- the controller action name. For example, a member_action named "upload_csv" will
105
- look up a translation key of "active_admin.upload_csv". If none are found, it
106
- just title cases the controller action's name.
119
+ end
120
+ ```
107
121
 
108
- If this method doesn't work for your requirements, you can always set the
109
- @page_title instance variable in your controller action to customize the page
110
- title.
122
+ # Action Items
111
123
 
112
- ActiveAdmin.register Post do
124
+ To include your own action items (like the New, Edit and Delete buttons), add an
125
+ `action_item` block. The first parameter is just a name to identify the action,
126
+ and is required. For example, to add a "View on site" button to view a blog
127
+ post:
113
128
 
114
- # /admin/posts/:id/comments
115
- member_action :comments do
116
- @post = Post.find(params[:id])
117
- @page_title = "#{@post.title}: Comments" # Set the page title
129
+ ```ruby
130
+ action_item :view, only: :show do
131
+ link_to 'View on site', post_path(post) if post.published?
132
+ end
133
+ ```
118
134
 
119
- # This will render app/views/admin/posts/comments.html.erb
120
- end
135
+ Actions items also accept the `:if` option to conditionally display them:
121
136
 
122
- end
137
+ ```ruby
138
+ action_item :super_action, only: :show, if: proc{ current_admin_user.super_admin? } do
139
+ "Only display this to super admins on the show screen"
140
+ end
141
+ ```
123
142
 
124
- ## Modify the Controller
143
+ # Modifying the Controller
125
144
 
126
145
  The generated controller is available to you within the registration block by
127
- using the #controller method.
146
+ using the `controller` method.
128
147
 
129
- ActiveAdmin.register Post do
148
+ ```ruby
149
+ ActiveAdmin.register Post do
130
150
 
131
- controller do
132
- # This code is evaluated within the controller class
133
-
134
- def define_a_method
135
- # Instance method
136
- end
137
- end
151
+ controller do
152
+ # This code is evaluated within the controller class
138
153
 
154
+ def define_a_method
155
+ # Instance method
139
156
  end
157
+ end
158
+
159
+ end
160
+ ```
@@ -1,169 +1,233 @@
1
- # Index Batch Actions
2
-
3
- By default, the index view includes a way to quickly delete records from the listing,
4
- as well as an API for you to easily create your own "Batch Action" for handling a request to operate
5
- on multiple records at once.
6
-
7
- ## Provided Batch Action
8
-
9
- The `batch_action` API provides one default batch action for use in your application immediately, for deleting
10
- multiple records at once. You are able to disable this action if you desire (see below).
11
-
12
- ## Creating Your Own Batch Actions
13
-
14
- To create your own batch action, use the `batch_action` method. You are provided an array of record IDs
15
- to operate on. The array should contain at least one ID.
16
-
17
- ActiveAdmin.register Post do
18
- batch_action :flag do |selection|
19
- Post.find(selection).each do |post|
20
- post.flag! :hot
21
- end
22
- end
1
+ # Batch Actions
2
+
3
+ By default, the index page provides you a "Batch Action" to quickly delete records,
4
+ as well as an API for you to easily create your own. Note that if you override the
5
+ default index, you must add `selectable_column` back for batch actions to be usable:
6
+
7
+ ```ruby
8
+ index do
9
+ selectable_column
10
+ # ...
11
+ end
12
+ ```
13
+
14
+ ## Creating your own
15
+
16
+ Use the `batch_action` DSL method to create your own. It behaves just like a
17
+ controller method, so you can send the client whatever data you like. Your block
18
+ is passed an array of the record IDs that the user selected, so you can perform
19
+ your desired batch action on all of them:
20
+
21
+ ```ruby
22
+ ActiveAdmin.register Post do
23
+ batch_action :flag do |ids|
24
+ batch_action_collection.find(ids).each do |post|
25
+ post.flag! :hot
23
26
  end
27
+ redirect_to collection_path, alert: "The posts have been flagged."
28
+ end
29
+ end
30
+ ```
24
31
 
25
32
  ### Disabling Batch Actions
26
33
 
27
- You can disable batch actions at the application or namespace level in
28
- `config/initializers/active_admin.rb`:
29
-
30
- ActiveAdmin.setup do |config|
31
-
32
- # Disable all batch actions
33
- config.batch_actions = false
34
-
35
-
36
- # Or disable for a given namespace
37
- config.namespace :admin do |admin|
38
- admin.batch_actions = false
39
- end
40
- end
41
-
42
- You can disable batch actions on any given resource using:
43
-
44
- ActiveAdmin.register Post do
45
- config.batch_actions = false
46
- end
47
-
48
-
49
- ### Modifying a Previously Registered Batch Action
50
-
51
- If you wanted to modify the behavior of the provided "Delete" batch action, you can override by:
52
-
53
- ActiveAdmin.register Post do
54
- batch_action :destroy, :if => proc { can?( :destroy, Post ) } do |selection|
55
- redirect_to collection_path, :alert => "Didn't really delete these!"
56
- end
57
- end
58
-
59
- ### Removing a Batch Action
60
-
61
- You can also remove batch actions by simply passing false as the second parameter:
62
-
63
- ActiveAdmin.register Post do
64
- batch_action :destroy, false
65
- end
66
-
67
- ### Conditional Display of Batch Action
68
-
69
- You can control whether or not the batch action is available via the `:if` option. Provide a boolean or a proc, which is executed in context of the view.
70
-
71
- ActiveAdmin.register Post do
72
- batch_action :flag, :if => proc { false } do |selection|
73
- # This action won't ever be displayed
74
- end
75
- end
76
-
77
- ### Batch Action Priority in Menu
78
-
79
- You can also change the order of batch actions, by providing a value for the :priority param:
80
-
81
- ActiveAdmin.register Post do
82
- batch_action :destroy, :priority => 1 do |selection|
83
- # Do some deleting in here...
84
- end
85
- end
86
-
87
- ### Batch Action I18n of Labels
34
+ You can disable batch actions at the application, namespace, or resource level:
35
+
36
+ ```ruby
37
+ # config/initializers/active_admin.rb
38
+ ActiveAdmin.setup do |config|
39
+
40
+ # Application level:
41
+ config.batch_actions = false
42
+
43
+ # Namespace level:
44
+ config.namespace :admin do |admin|
45
+ admin.batch_actions = false
46
+ end
47
+ end
48
+
49
+ # app/admin/post.rb
50
+ ActiveAdmin.register Post do
51
+
52
+ # Resource level:
53
+ config.batch_actions = false
54
+ end
55
+ ```
56
+
57
+ ### Modification
58
+
59
+ If you want, you can override the default batch action to do whatever you want:
60
+
61
+ ```ruby
62
+ ActiveAdmin.register Post do
63
+ batch_action :destroy do |ids|
64
+ redirect_to collection_path, alert: "Didn't really delete these!"
65
+ end
66
+ end
67
+ ```
68
+
69
+ ### Removal
70
+
71
+ You can remove batch actions by simply passing false as the second parameter:
72
+
73
+ ```ruby
74
+ ActiveAdmin.register Post do
75
+ batch_action :destroy, false
76
+ end
77
+ ```
78
+
79
+ ### Conditional display
80
+
81
+ You can control whether or not the batch action is available via the `:if`
82
+ option, which is executed in the view context.
83
+
84
+ ```ruby
85
+ ActiveAdmin.register Post do
86
+ batch_action :flag, if: proc{ can? :flag, Post } do |ids|
87
+ # ...
88
+ end
89
+ end
90
+ ```
91
+
92
+ ### Priority in the drop-down menu
93
+
94
+ You can change the order of batch actions through the `:priority` option:
95
+
96
+ ```ruby
97
+ ActiveAdmin.register Post do
98
+ batch_action :destroy, priority: 1 do |ids|
99
+ # ...
100
+ end
101
+ end
102
+ ```
103
+
104
+ ### Confirmation prompt
105
+
106
+ You can pass a custom string to prompt the user with:
107
+
108
+ ```ruby
109
+ ActiveAdmin.register Post do
110
+ batch_action :destroy, confirm: "Are you sure??" do |ids|
111
+ # ...
112
+ end
113
+ end
114
+ ```
115
+
116
+ ### Batch Action forms
117
+
118
+ If you want to capture input from the user as they perform a batch action,
119
+ Active Admin has just the thing for you:
120
+
121
+ ```ruby
122
+ batch_action :flag, form: {
123
+ type: %w[Offensive Spam Other],
124
+ reason: :text,
125
+ notes: :textarea,
126
+ hide: :checkbox,
127
+ date: :datepicker
128
+ } do |ids, inputs|
129
+ # inputs is a hash of all the form fields you requested
130
+ redirect_to collection_path, notice: [ids, inputs].to_s
131
+ end
132
+ ```
133
+
134
+ If you pass a nested array, it will behave just like Formtastic would, with the first
135
+ element being the text displayed and the second element being the value.
136
+
137
+ ```ruby
138
+ batch_action :doit, form: {user: [['Jake',2], ['Mary',3]]} do |ids, inputs|
139
+ User.find(inputs[:user])
140
+ # ...
141
+ end
142
+ ```
143
+
144
+ When you have dynamic form inputs you can pass a proc instead:
145
+
146
+ ```ruby
147
+ # NOTE: multi-pluck is new to Rails 4
148
+ batch_action :doit, form: ->{{user: User.pluck(:name, :id)}} do |ids, inputs|
149
+ User.find(inputs[:user])
150
+ # ...
151
+ end
152
+ ```
153
+
154
+ Under the covers this is powered by the JS `ActiveAdmin.modal_dialog` which you can use yourself:
155
+
156
+ ```coffee
157
+ if $('body.admin_users').length
158
+ $('a[data-prompt]').click ->
159
+ ActiveAdmin.modal_dialog $(@).data('prompt'), comment: 'textarea',
160
+ (inputs)=>
161
+ $.post "/admin/users/#{$(@).data 'id'}/change_state",
162
+ comment: inputs.comment, state: $(@).data('state'),
163
+ success: ->
164
+ window.location.reload()
165
+ ```
166
+
167
+ ### Translation
88
168
 
89
169
  By default, the name of the batch action will be used to lookup a label for the
90
- menu. It will lookup in `active_admin.batch_actions.labels.#{your_batch_action_name}`. For
91
- example:
170
+ menu. It will lookup in `active_admin.batch_actions.labels.#{your_batch_action}`.
92
171
 
93
- ActiveAdmin.register Post do
94
- batch_action :publish do |selection|
95
- # do some publishing...
96
- end
97
- end
98
-
99
- Can be translated with:
172
+ So this:
100
173
 
101
- # config/locales/en.yml
102
- en:
103
- active_admin:
104
- batch_actions:
105
- labels:
106
- publish: "Publish"
174
+ ```ruby
175
+ ActiveAdmin.register Post do
176
+ batch_action :publish do |ids|
177
+ # ...
178
+ end
179
+ end
180
+ ```
107
181
 
108
- ### Batch Action Confirmation
182
+ Can be translated with:
109
183
 
110
- You can also request that the user confirm the action, before the action is performed:
184
+ ```yaml
185
+ # config/locales/en.yml
186
+ en:
187
+ active_admin:
188
+ batch_actions:
189
+ labels:
190
+ publish: "Publish"
191
+ ```
111
192
 
112
- ActiveAdmin.register Post do
113
- batch_action :destroy, :confirm => "Are you sure you want to delete all of these?" do |selection|
114
- # Do some deleting...
115
- end
116
- end
193
+ ### Support for other index types
117
194
 
118
- ### Customizing Table Columns
195
+ You can easily use `batch_action` in the other index views, *Grid*, *Block*,
196
+ and *Blog*; however, these will require custom styling to fit your needs.
119
197
 
120
- To include the column with checkboxes in after overriding the list of columns for the `index` block in the *Table* listing, use the following helper as seen below:
198
+ ```ruby
199
+ ActiveAdmin.register Post do
121
200
 
122
- ActiveAdmin.register Post do
201
+ # By default, the "Delete" batch action is provided
123
202
 
124
- batch_action :flag do |selection|
125
- Post.find(selection).each { |p| p.flag! }
126
- redirect_to collection_path, :notice => "Posts flagged!"
127
- end
203
+ # Index as Grid
204
+ index as: :grid do |post|
205
+ resource_selection_cell post
206
+ h2 auto_link post
207
+ end
128
208
 
129
- index do
130
- selectable_column
131
- column :title
132
- default_actions
133
- end
209
+ # Index as Blog requires nothing special
134
210
 
211
+ # Index as Block
212
+ index as: :block do |post|
213
+ div for: post do
214
+ resource_selection_cell post
135
215
  end
216
+ end
136
217
 
218
+ end
219
+ ```
137
220
 
138
- ### Support for Other Index Types
139
-
140
- You can easily use `batch_action` in the other index views, *Grid*, *Block*, and *Blog*; however, these views will require more custom styling to fit your application needs.
141
-
142
- ActiveAdmin.register Post do
143
-
144
- # By default, the "Delete" batch action is provided
145
-
146
- # Index as Grid
147
- index as: :grid do |post|
148
- resource_selection_cell post
149
- h2 auto_link( post )
150
- end
151
-
152
- # Index as Blog requires nothing special
153
-
154
- # Index as Block
155
- index as: :block do |post|
156
- div for: post do
157
- resource_selection_cell post
158
- end
159
- end
160
-
161
- end
162
-
163
- ### Batch Actions and Custom Actions
221
+ ### BTW
164
222
 
165
- In order to perform the batch action, the entire *Table*, *Grid*, etc. is wrapped in a form that submits the id's of the selected rows to your batch_action.
223
+ In order to perform the batch action, the entire *Table*, *Grid*, etc. is
224
+ wrapped in a form that submits the IDs of the selected rows to your batch_action.
166
225
 
167
- Since nested `<form>` tags in HTML often results in unexpected behavior, you may need to modify custom actions or forms you are using on your page with batch actions enabled.
226
+ Since nested `<form>` tags in HTML often results in unexpected behavior, you
227
+ may need to modify the custom behavior you've built using to prevent conflicts.
168
228
 
169
- Specifically, if you are using HTTP methods like `PUT` or `PATCH` with a custom form on your index page this may result in your batch action being `PUT`ed instead of `POST`ed which in turn will create a routing error. You can get around this by either moving the nested form to another page (ie. the Object's show page) or, if possible, changing the method of the custom action to `POST` so that it doesn't override the batch action. Remember, behavior may vary by browser.
229
+ Specifically, if you are using HTTP methods like `PUT` or `PATCH` with a custom
230
+ form on your index page this may result in your batch action being `PUT`ed
231
+ instead of `POST`ed which will create a routing error. You can get around this
232
+ by either moving the nested form to another page or using a POST so it doesn't
233
+ override the batch action. As well, behavior may vary by browser.