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,4 +1,8 @@
1
- <!-- Please don't edit this file. It will be clobbered. -->
1
+ <!--
2
+ WARNING: Please DO NOT edit this file! Update
3
+ source documentation in lib/active_admin/views
4
+ and execute rake yard to regenerate it.
5
+ -->
2
6
 
3
7
  # Index as a Grid
4
8
 
@@ -6,16 +10,20 @@ Sometimes you want to display the index screen for a set of resources as a grid
6
10
  (possibly a grid of thumbnail images). To do so, use the :grid option for the
7
11
  index block.
8
12
 
9
- index :as => :grid do |product|
10
- link_to(image_tag(product.image_path), admin_product_path(product))
11
- end
13
+ ```ruby
14
+ index as: :grid do |product|
15
+ link_to image_tag(product.image_path), admin_product_path(product)
16
+ end
17
+ ```
12
18
 
13
19
  The block is rendered within a cell in the grid once for each resource in the
14
20
  collection. The resource is passed into the block for you to use in the view.
15
21
 
16
- You can customize the number of colums that are rendered using the columns
22
+ You can customize the number of columns that are rendered using the columns
17
23
  option:
18
24
 
19
- index :as => :grid, :columns => 5 do |product|
20
- link_to(image_tag(product.image_path), admin_product_path(product))
21
- end
25
+ ```ruby
26
+ index as: :grid, columns: 5 do |product|
27
+ link_to image_tag(product.image_path), admin_product_path(product)
28
+ end
29
+ ```
@@ -1,4 +1,8 @@
1
- <!-- Please don't edit this file. It will be clobbered. -->
1
+ <!--
2
+ WARNING: Please DO NOT edit this file! Update
3
+ source documentation in lib/active_admin/views
4
+ and execute rake yard to regenerate it.
5
+ -->
2
6
 
3
7
  # Index as a Table
4
8
 
@@ -11,22 +15,30 @@ displayed.
11
15
  To display an attribute or a method on a resource, simply pass a symbol into the
12
16
  column method:
13
17
 
14
- index do
15
- column :title
16
- end
18
+ ```ruby
19
+ index do
20
+ selectable_column
21
+ column :title
22
+ end
23
+ ```
17
24
 
18
25
  For association columns we make an educated guess on what to display by
19
26
  calling the following methods in the following order:
20
27
 
21
- :display_name, :full_name, :name, :username, :login, :title, :email, :to_s
28
+ ```ruby
29
+ :display_name, :full_name, :name, :username, :login, :title, :email, :to_s
30
+ ```
22
31
 
23
- This can be customized in config/initializers/active_admin.rb.
32
+ This can be customized in `config/initializers/active_admin.rb`.
24
33
 
25
34
  If the default title does not work for you, pass it as the first argument:
26
35
 
27
- index do
28
- column "My Custom Title", :title
29
- end
36
+ ```ruby
37
+ index do
38
+ selectable_column
39
+ column "My Custom Title", :title
40
+ end
41
+ ```
30
42
 
31
43
  Sometimes that just isn't enough and you need to write some view-specific code.
32
44
  For example, say we wanted a "Title" column that links to the posts admin screen.
@@ -34,36 +46,70 @@ For example, say we wanted a "Title" column that links to the posts admin screen
34
46
  `column` accepts a block that will be rendered for each of the objects in the collection.
35
47
  The block is called once for each resource, which is passed as an argument to the block.
36
48
 
37
- index do
38
- column "Title" do |post|
39
- link_to post.title, admin_post_path(post)
40
- end
41
- end
49
+ ```ruby
50
+ index do
51
+ selectable_column
52
+ column "Title" do |post|
53
+ link_to post.title, admin_post_path(post)
54
+ end
55
+ end
56
+ ```
42
57
 
43
58
  To setup links to View, Edit and Delete a resource, use the `actions` method:
44
59
 
45
- index do
46
- column :title
47
- actions
48
- end
60
+ ```ruby
61
+ index do
62
+ selectable_column
63
+ column :title
64
+ actions
65
+ end
66
+ ```
49
67
 
50
68
  You can also append custom links to the default links:
51
69
 
52
- index do
53
- column :title
54
- actions do |post|
55
- link_to "Preview", admin_preview_post_path(post), :class => "member_link"
56
- end
57
- end
70
+ ```ruby
71
+ index do
72
+ selectable_column
73
+ column :title
74
+ actions do |post|
75
+ item "Preview", admin_preview_post_path(post), class: "member_link"
76
+ end
77
+ end
78
+ ```
58
79
 
59
80
  Or forego the default links entirely:
60
81
 
61
- index do
62
- column :title
63
- actions :defaults => false do |post|
64
- link_to "View", admin_post_path(post)
65
- end
66
- end
82
+ ```ruby
83
+ index do
84
+ column :title
85
+ actions defaults: false do |post|
86
+ item "View", admin_post_path(post)
87
+ end
88
+ end
89
+ ```
90
+
91
+ Or append custom action with custom html via arbre:
92
+
93
+ ```ruby
94
+ index do
95
+ column :title
96
+ actions do |post|
97
+ a link_to "View", admin_post_path(post)
98
+ end
99
+ end
100
+ ```
101
+
102
+ In case you prefer to list actions links in a dropdown menu:
103
+
104
+ ```ruby
105
+ index do
106
+ selectable_column
107
+ column :title
108
+ actions dropdown: true do |post|
109
+ item "Preview", admin_preview_post_path(post)
110
+ end
111
+ end
112
+ ```
67
113
 
68
114
  ## Sorting
69
115
 
@@ -74,17 +120,33 @@ Active Admin a hint for how to sort the table.
74
120
  If a column is defined using a block, you must pass the key to turn on sorting. The key
75
121
  is the attribute which gets used to sort objects using Active Record.
76
122
 
77
- index do
78
- column "Title", :sortable => :title do |post|
79
- link_to post.title, admin_post_path(post)
80
- end
81
- end
123
+ By default, this is the column on the resource's table that the attribute corresponds to.
124
+ Otherwise, any attribute that the resource collection responds to can be used.
125
+
126
+ ```ruby
127
+ index do
128
+ column :title, sortable: :title do |post|
129
+ link_to post.title, admin_post_path(post)
130
+ end
131
+ end
132
+ ```
82
133
 
83
134
  You can turn off sorting on any column by passing false:
84
135
 
85
- index do
86
- column :title, :sortable => false
87
- end
136
+ ```ruby
137
+ index do
138
+ column :title, sortable: false
139
+ end
140
+ ```
141
+
142
+ It's also possible to sort by PostgreSQL's hstore column key. You should set `sortable`
143
+ option to a `column->'key'` value:
144
+
145
+ ```ruby
146
+ index do
147
+ column :keywords, sortable: "meta->'keywords'"
148
+ end
149
+ ```
88
150
 
89
151
  ## Associated Sorting
90
152
 
@@ -93,17 +155,21 @@ can't sort by associated objects. Though with a few simple changes, you can.
93
155
 
94
156
  Assuming you're on the Books index page, and Book has_one Publisher:
95
157
 
96
- controller do
97
- def scoped_collection
98
- resource_class.includes(:publisher) # prevents N+1 queries to your database
99
- end
100
- end
158
+ ```ruby
159
+ controller do
160
+ def scoped_collection
161
+ super.includes :publisher # prevents N+1 queries to your database
162
+ end
163
+ end
164
+ ```
101
165
 
102
166
  Then it's simple to sort by any Publisher attribute from within the index table:
103
167
 
104
- index do
105
- column :publisher, sortable: 'publishers.name'
106
- end
168
+ ```ruby
169
+ index do
170
+ column :publisher, sortable: 'publishers.name'
171
+ end
172
+ ```
107
173
 
108
174
  ## Showing and Hiding Columns
109
175
 
@@ -112,9 +178,20 @@ easily do things that show or hide columns based on the current context.
112
178
 
113
179
  For example, if you were using CanCan:
114
180
 
115
- index do
116
- column :title, :sortable => false
117
- if can? :manage, Post
118
- column :some_secret_data
119
- end
120
- end
181
+ ```ruby
182
+ index do
183
+ column :title, sortable: false
184
+ column :secret_data if can? :manage, Post
185
+ end
186
+ ```
187
+
188
+ ## Custom row class
189
+
190
+ In order to add special class to table rows pass the proc object as a `:row_class` option
191
+ of the `index` method.
192
+
193
+ ```ruby
194
+ index row_class: ->elem { 'active' if elem.active? } do
195
+ # columns
196
+ end
197
+ ```
@@ -6,27 +6,34 @@ registered model.
6
6
 
7
7
  Customizing the CSV format is as simple as customizing the index page.
8
8
 
9
- ActiveAdmin.register Post do
10
- csv do
11
- column :title
12
- column("Author") { |post| post.author.full_name }
13
- end
14
- end
15
-
16
- You can set custom csv options:
17
-
18
- ActiveAdmin.register Post do
19
- csv :force_quotes => true do
20
- column :title
21
- column("Author") { |post| post.author.full_name }
22
- end
23
- end
24
-
25
- You can set options for the CSV format system-wide:
26
-
27
- # config/initializers/active_admin.rb
28
- # Set the CSV builder separator
29
- config.csv_options = { :col_sep => ';' }
30
-
31
- # Force the use of quotes
32
- config.csv_options = { :force_quotes => true }
9
+ ```ruby
10
+ ActiveAdmin.register Post do
11
+ csv do
12
+ column :title
13
+ column(:author) { |post| post.author.full_name }
14
+ end
15
+ end
16
+ ```
17
+
18
+ You can also set custom CSV settings for an individual resource:
19
+
20
+ ```ruby
21
+ ActiveAdmin.register Post do
22
+ csv force_quotes: true, col_sep: ';', column_names: false do
23
+ column :title
24
+ column(:author) { |post| post.author.full_name }
25
+ end
26
+ end
27
+ ```
28
+
29
+ Or system-wide:
30
+
31
+ ```ruby
32
+ # config/initializers/active_admin.rb
33
+
34
+ # Set the CSV builder separator
35
+ config.csv_options = { col_sep: ';' }
36
+
37
+ # Force the use of quotes
38
+ config.csv_options = { force_quotes: true }
39
+ ```
@@ -1,82 +1,159 @@
1
- # Customizing the Form
1
+ # Forms
2
2
 
3
- Active Admin gives complete control over the output of the form by creating a thin DSL on top of
4
- the fabulous DSL created by [Formtastic](http://github.com/justinfrench/formtastic).
3
+ Active Admin gives you complete control over the output of the form by creating
4
+ a thin DSL on top of [Formtastic](https://github.com/justinfrench/formtastic):
5
5
 
6
- ActiveAdmin.register Post do
7
-
8
- form do |f|
9
- f.inputs "Details" do
10
- f.input :title
11
- f.input :published_at, :label => "Publish Post At"
12
- f.input :category
13
- end
14
- f.inputs "Content" do
15
- f.input :body
16
- end
17
- f.actions
18
- end
6
+ ```ruby
7
+ ActiveAdmin.register Post do
19
8
 
9
+ form do |f|
10
+ inputs 'Details' do
11
+ input :title
12
+ input :published_at, label: "Publish Post At"
13
+ li "Created at #{f.object.created_at}" unless f.object.new_record?
14
+ input :category
15
+ end
16
+ panel 'Markup' do
17
+ "The following can be used in the content below..."
20
18
  end
19
+ inputs 'Content', :body
20
+ para "Press cancel to return to the list without saving."
21
+ actions
22
+ end
21
23
 
22
- Please view [the documentation](http://github.com/justinfrench/formtastic)
23
- for Formtastic to see all the wonderful things you can do.
24
+ end
25
+ ```
24
26
 
25
- If you require a more custom form than can be provided through the DSL, you can pass
26
- a partial in to render the form yourself.
27
+ For more details, please see Formtastic's documentation.
27
28
 
28
- For example:
29
+ ## Default
29
30
 
30
- ActiveAdmin.register Post do
31
- form :partial => "form"
32
- end
31
+ Resources come with a default form defined as such:
32
+
33
+ ```ruby
34
+ form do |f|
35
+ f.semantic_errors # shows errors on :base
36
+ f.inputs # builds an input field for every attribute
37
+ f.actions # adds the 'Submit' and 'Cancel' buttons
38
+ end
39
+ ```
40
+
41
+ ## Partials
42
+
43
+ If you want to split a custom form into a separate partial use:
33
44
 
34
- Then implement app/views/admin/posts/_form.html.erb:
45
+ ```ruby
46
+ ActiveAdmin.register Post do
47
+ form partial: 'form'
48
+ end
49
+ ```
35
50
 
36
- <%= semantic_form_for [:admin, @post] do |f| %>
37
- <%= f.inputs :title, :body %>
38
- <%= f.actions :commit %>
39
- <% end %>
51
+ Which looks for something like this:
52
+
53
+ ```ruby
54
+ # app/views/admin/posts/_form.html.arb
55
+ insert_tag active_admin_form_for resource do |f|
56
+ inputs :title, :body
57
+ actions
58
+ end
59
+ ```
60
+
61
+ This is a regular Rails partial so any template engine may be used.
40
62
 
41
63
  ## Nested Resources
42
64
 
43
- You can create forms with nested models using the `has_many` method:
65
+ You can create forms with nested models using the `has_many` method, even if your model uses `has_one`:
44
66
 
45
- ActiveAdmin.register Post do
67
+ ```ruby
68
+ ActiveAdmin.register Post do
46
69
 
47
- form do |f|
48
- f.inputs "Details" do
49
- f.input :title
50
- f.input :published_at, :label => "Publish Post At"
51
- end
52
- f.inputs "Content" do
53
- f.input :body
54
- end
55
- f.inputs do
56
- f.has_many :categories, :allow_destroy => true, :heading => 'Themes', :new_record => false do |cf|
57
- cf.input :title
58
- end
59
- end
60
- f.actions
70
+ form do |f|
71
+ f.inputs 'Details' do
72
+ f.input :title
73
+ f.input :published_at, label: 'Publish Post At'
74
+ end
75
+ f.inputs 'Content', :body
76
+ f.inputs do
77
+ f.has_many :categories, heading: 'Themes', allow_destroy: true, new_record: false do |a|
78
+ a.input :title
79
+ end
80
+ end
81
+ f.inputs do
82
+ f.has_many :taggings, sortable: :position, sortable_start: 1 do |t|
83
+ t.input :tag
61
84
  end
62
-
63
85
  end
86
+ f.inputs do
87
+ f.has_many :comment, new_record: 'Leave Comment' do |b|
88
+ b.input :body
89
+ end
90
+ end
91
+ f.actions
92
+ end
93
+
94
+ end
95
+ ```
64
96
 
65
- The `:allow_destroy` option will add a checkbox to the end of the nested form allowing
66
- removal of the child object upon submission. Be sure to set `:allow_destroy => true`
97
+ The `:allow_destroy` option adds a checkbox to the end of the nested form allowing
98
+ removal of the child object upon submission. Be sure to set `allow_destroy: true`
67
99
  on the association to use this option.
68
100
 
69
- The `:heading` option will add a custom heading to has_many form. You can hide a heading by setting `:heading => false`.
101
+ The `:heading` option adds a custom heading. You can hide it entirely by passing `false`.
102
+
103
+ The `:new_record` option controls the visibility of the new record button (shown by default).
104
+ If you pass a string, it will be used as the text for the new record button.
105
+
106
+ The `:sortable` option adds a hidden field and will enable drag & drop sorting of the children. It
107
+ expects the name of the column that will store the index of each child.
70
108
 
71
- The `:new_record` option will show or hide new record link at the bottom of has_many form. It is set as true by default.
109
+ The `:sortable_start` option sets the value (0 by default) of the first position in the list.
110
+
111
+ ## Datepicker
112
+
113
+ ActiveAdmin offers the `datepicker` input, which uses the [jQuery UI datepicker](http://jqueryui.com/datepicker/).
114
+ The datepicker input accepts any of the options available to the standard jQueryUI Datepicker. For example:
115
+
116
+ ```ruby
117
+ form do |f|
118
+ f.input :starts_at, as: :datepicker, datepicker_options: { min_date: "2013-10-8", max_date: "+3D" }
119
+ f.input :ends_at, as: :datepicker, datepicker_options: { min_date: 3.days.ago.to_date, max_date: "+1W +5D" }
120
+ end
121
+ ```
72
122
 
73
123
  ## Displaying Errors
74
124
 
75
- To display a list of all errors, include `semantic_errors` at top of form. Particularly useful to display errors on the base or virtual attributes.
125
+ To display a list of all validation errors:
76
126
 
77
- form do |f|
78
- f.semantic_errors *f.object.errors.keys
79
- f.inputs
80
- f.buttons
81
- end
127
+ ```ruby
128
+ form do |f|
129
+ f.semantic_errors *f.object.errors.keys
130
+ # ...
131
+ end
132
+ ```
82
133
 
134
+ This is particularly useful to display errors on virtual or hidden attributes.
135
+
136
+ # Tabs
137
+
138
+ You can arrage content in tabs as shown below:
139
+
140
+ ```ruby
141
+ form do |f|
142
+ tabs do
143
+ tab 'Basic' do
144
+ f.inputs 'Basic Details' do
145
+ f.input :email
146
+ f.input :password
147
+ f.input :password_confirmation
148
+ end
149
+ end
150
+
151
+ tab 'Advanced' do
152
+ f.inputs 'Advanced Details' do
153
+ f.input :role
154
+ end
155
+ end
156
+ end
157
+ f.actions
158
+ end
159
+ ```