activeadmin 0.6.6 → 1.0.0.pre1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of activeadmin might be problematic. Click here for more details.

Files changed (512) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +11 -8
  3. data/.hound.yml +11 -0
  4. data/.travis.yml +36 -10
  5. data/.yardopts +2 -1
  6. data/CHANGELOG.md +118 -67
  7. data/CONTRIBUTING.md +96 -73
  8. data/Gemfile +35 -35
  9. data/Guardfile +1 -0
  10. data/LICENSE +1 -1
  11. data/README.md +98 -0
  12. data/Rakefile +12 -4
  13. data/activeadmin.gemspec +21 -24
  14. data/app/assets/javascripts/active_admin/application.js.coffee +32 -0
  15. data/app/assets/javascripts/active_admin/base.js.coffee +14 -0
  16. data/app/assets/javascripts/active_admin/ext/jquery-ui.js.coffee +6 -0
  17. data/app/assets/javascripts/active_admin/ext/jquery.js.coffee +7 -0
  18. data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +39 -0
  19. data/app/assets/javascripts/active_admin/{components/jquery.aa.checkbox-toggler.js.coffee → lib/checkbox-toggler.js.coffee} +3 -4
  20. data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +101 -0
  21. data/app/assets/javascripts/active_admin/lib/flash.js.coffee +19 -0
  22. data/app/assets/javascripts/active_admin/lib/has_many.js.coffee +79 -0
  23. data/app/assets/javascripts/active_admin/lib/modal_dialog.js.coffee +37 -0
  24. data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +27 -0
  25. data/app/assets/javascripts/active_admin/lib/popover.js.coffee +68 -0
  26. data/app/assets/javascripts/active_admin/{components/jquery.aa.table-checkbox-toggler.js.coffee → lib/table-checkbox-toggler.js.coffee} +2 -3
  27. data/app/assets/stylesheets/active_admin/{_base.css.scss → _base.scss} +3 -0
  28. data/app/assets/stylesheets/active_admin/{_forms.css.scss → _forms.scss} +61 -17
  29. data/app/assets/stylesheets/active_admin/{_header.css.scss → _header.scss} +9 -5
  30. data/app/assets/stylesheets/active_admin/{_mixins.css.scss → _mixins.scss} +0 -0
  31. data/app/assets/stylesheets/active_admin/{_typography.css.scss → _typography.scss} +0 -0
  32. data/app/assets/stylesheets/active_admin/components/_batch_actions.scss +11 -0
  33. data/app/assets/stylesheets/active_admin/components/_blank_slates.scss +0 -1
  34. data/app/assets/stylesheets/active_admin/components/_buttons.scss +1 -1
  35. data/app/assets/stylesheets/active_admin/components/{_comments.css.scss → _comments.scss} +0 -0
  36. data/app/assets/stylesheets/active_admin/components/{_date_picker.css.scss → _date_picker.scss} +40 -14
  37. data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +5 -4
  38. data/app/assets/stylesheets/active_admin/components/_flash_messages.scss +37 -0
  39. data/app/assets/stylesheets/active_admin/components/_modal_dialog.scss +34 -0
  40. data/app/assets/stylesheets/active_admin/components/_pagination.scss +10 -0
  41. data/app/assets/stylesheets/active_admin/components/{_popovers.css.scss → _popovers.scss} +2 -3
  42. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +4 -0
  43. data/app/assets/stylesheets/active_admin/components/_table_tools.scss +67 -0
  44. data/app/assets/stylesheets/active_admin/components/{_tables.css.scss → _tables.scss} +4 -2
  45. data/app/assets/stylesheets/active_admin/components/_tabs.scss +65 -0
  46. data/app/assets/stylesheets/active_admin/components/_unsupported_browser.scss +16 -0
  47. data/app/assets/stylesheets/active_admin/mixins/{_all.css.scss → _all.scss} +0 -0
  48. data/app/assets/stylesheets/active_admin/mixins/{_buttons.css.scss → _buttons.scss} +0 -1
  49. data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +28 -0
  50. data/app/assets/stylesheets/active_admin/mixins/{_icons.css.scss → _icons.scss} +1 -2
  51. data/app/assets/stylesheets/active_admin/mixins/{_reset.css.scss → _reset.scss} +0 -0
  52. data/app/assets/stylesheets/active_admin/mixins/_rounded.scss +22 -0
  53. data/app/assets/stylesheets/active_admin/mixins/{_sections.css.scss → _sections.scss} +8 -2
  54. data/app/assets/stylesheets/active_admin/mixins/{_shadows.css.scss → _shadows.scss} +0 -7
  55. data/app/assets/stylesheets/active_admin/mixins/_utilities.scss +0 -9
  56. data/app/assets/stylesheets/active_admin/mixins/{_variables.css.scss → _variables.scss} +10 -8
  57. data/app/assets/stylesheets/active_admin/{print.css.scss → print.scss} +4 -0
  58. data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +5 -2
  59. data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +11 -9
  60. data/app/views/active_admin/devise/confirmations/new.html.erb +15 -0
  61. data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +1 -1
  62. data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +1 -1
  63. data/app/views/active_admin/devise/passwords/edit.html.erb +9 -10
  64. data/app/views/active_admin/devise/passwords/new.html.erb +5 -4
  65. data/app/views/active_admin/devise/registrations/new.html.erb +22 -0
  66. data/app/views/active_admin/devise/sessions/new.html.erb +9 -7
  67. data/app/views/active_admin/devise/shared/_links.erb +1 -1
  68. data/app/views/active_admin/devise/unlocks/new.html.erb +5 -4
  69. data/app/views/layouts/active_admin_logged_out.html.erb +3 -5
  70. data/config/locales/ar.yml +120 -0
  71. data/config/locales/bg.yml +26 -6
  72. data/config/locales/bs.yml +122 -0
  73. data/config/locales/ca.yml +10 -1
  74. data/config/locales/cs.yml +7 -2
  75. data/config/locales/da.yml +7 -3
  76. data/config/locales/de-CH.yml +14 -31
  77. data/config/locales/de.yml +33 -33
  78. data/config/locales/el.yml +28 -2
  79. data/config/locales/en-GB.yml +12 -4
  80. data/config/locales/en.yml +29 -3
  81. data/config/locales/{es_MX.yml → es-MX.yml} +9 -24
  82. data/config/locales/es.yml +32 -25
  83. data/config/locales/fa.yml +120 -0
  84. data/config/locales/fi.yml +113 -0
  85. data/config/locales/fr.yml +21 -11
  86. data/config/locales/he.yml +7 -3
  87. data/config/locales/hr.yml +42 -11
  88. data/config/locales/hu.yml +10 -3
  89. data/config/locales/it.yml +31 -3
  90. data/config/locales/ja.yml +8 -3
  91. data/config/locales/ko.yml +7 -1
  92. data/config/locales/lt.yml +42 -11
  93. data/config/locales/lv.yml +7 -3
  94. data/config/locales/{no-NB.yml → nb.yml} +46 -15
  95. data/config/locales/nl.yml +36 -5
  96. data/config/locales/pl.yml +13 -8
  97. data/config/locales/pt-BR.yml +37 -5
  98. data/config/locales/pt-PT.yml +8 -4
  99. data/config/locales/ro.yml +7 -3
  100. data/config/locales/ru.yml +26 -5
  101. data/config/locales/sv-SE.yml +9 -5
  102. data/config/locales/tr.yml +10 -3
  103. data/config/locales/uk.yml +36 -12
  104. data/config/locales/vi.yml +7 -3
  105. data/config/locales/zh-CN.yml +26 -10
  106. data/config/locales/zh-TW.yml +19 -13
  107. data/docs/0-installation.md +65 -29
  108. data/docs/1-general-configuration.md +92 -81
  109. data/docs/10-custom-pages.md +68 -68
  110. data/docs/11-decorators.md +48 -59
  111. data/docs/12-arbre-components.md +80 -74
  112. data/docs/13-authorization-adapter.md +128 -107
  113. data/docs/14-gotchas.md +92 -0
  114. data/docs/2-resource-customization.md +293 -178
  115. data/docs/3-index-pages.md +160 -86
  116. data/docs/3-index-pages/custom-index.md +31 -0
  117. data/docs/3-index-pages/index-as-block.md +14 -9
  118. data/docs/3-index-pages/index-as-blog.md +41 -31
  119. data/docs/3-index-pages/index-as-grid.md +16 -8
  120. data/docs/3-index-pages/index-as-table.md +129 -52
  121. data/docs/4-csv-format.md +31 -24
  122. data/docs/5-forms.md +133 -56
  123. data/docs/6-show-pages.md +89 -27
  124. data/docs/7-sidebars.md +48 -27
  125. data/docs/8-custom-actions.md +98 -77
  126. data/docs/9-batch-actions.md +210 -146
  127. data/docs/README.md +24 -0
  128. data/features/action_item.feature +3 -3
  129. data/features/authorization_pundit.feature +37 -0
  130. data/features/breadcrumb.feature +48 -0
  131. data/features/comments/commenting.feature +56 -13
  132. data/features/development_reloading.feature +17 -30
  133. data/features/edit_page.feature +12 -1
  134. data/features/favicon.feature +3 -3
  135. data/features/i18n.feature +5 -4
  136. data/features/index/batch_actions.feature +41 -0
  137. data/features/index/filters.feature +67 -0
  138. data/features/index/format_as_csv.feature +90 -4
  139. data/features/index/formats.feature +27 -0
  140. data/features/index/index_as_blog.feature +4 -4
  141. data/features/index/index_as_table.feature +102 -6
  142. data/features/index/index_blank_slate.feature +22 -0
  143. data/features/index/index_scope_to.feature +16 -16
  144. data/features/index/page_title.feature +11 -0
  145. data/features/index/pagination.feature +1 -1
  146. data/features/index/switch_index_view.feature +14 -14
  147. data/features/new_page.feature +13 -2
  148. data/features/registering_pages.feature +1 -1
  149. data/features/renamed_resource.feature +32 -0
  150. data/features/show/page_title.feature +11 -0
  151. data/features/show/tabs.feature +27 -0
  152. data/features/sidebar_sections.feature +12 -0
  153. data/features/site_title.feature +2 -2
  154. data/features/specifying_actions.feature +3 -3
  155. data/features/step_definitions/action_item_steps.rb +2 -2
  156. data/features/step_definitions/action_link_steps.rb +14 -1
  157. data/features/step_definitions/additional_web_steps.rb +19 -20
  158. data/features/step_definitions/asset_steps.rb +3 -3
  159. data/features/step_definitions/attribute_steps.rb +8 -3
  160. data/features/step_definitions/batch_action_steps.rb +26 -9
  161. data/features/step_definitions/blog_steps.rb +3 -0
  162. data/features/step_definitions/breadcrumb_steps.rb +1 -1
  163. data/features/step_definitions/comment_steps.rb +1 -1
  164. data/features/step_definitions/configuration_steps.rb +9 -2
  165. data/features/step_definitions/dashboard_steps.rb +2 -2
  166. data/features/step_definitions/factory_steps.rb +9 -8
  167. data/features/step_definitions/filter_steps.rb +25 -3
  168. data/features/step_definitions/flash_steps.rb +3 -3
  169. data/features/step_definitions/format_steps.rb +18 -18
  170. data/features/step_definitions/index_scope_steps.rb +5 -5
  171. data/features/step_definitions/layout_steps.rb +1 -1
  172. data/features/step_definitions/member_link_steps.rb +2 -2
  173. data/features/step_definitions/menu_steps.rb +3 -3
  174. data/features/step_definitions/pagination_steps.rb +2 -3
  175. data/features/step_definitions/sidebar_steps.rb +8 -3
  176. data/features/step_definitions/site_title_steps.rb +6 -4
  177. data/features/step_definitions/symbol_leak_steps.rb +3 -0
  178. data/features/step_definitions/tab_steps.rb +5 -0
  179. data/features/step_definitions/table_steps.rb +4 -4
  180. data/features/step_definitions/user_steps.rb +10 -7
  181. data/features/step_definitions/web_steps.rb +14 -11
  182. data/features/sti_resource.feature +6 -2
  183. data/features/strong_parameters.feature +73 -0
  184. data/features/support/env.rb +34 -9
  185. data/features/support/paths.rb +14 -6
  186. data/features/support/selectors.rb +1 -1
  187. data/features/symbol_leak.feature +35 -0
  188. data/features/users/resetting_password.feature +5 -6
  189. data/lib/active_admin.rb +26 -25
  190. data/lib/active_admin/abstract_view_factory.rb +7 -17
  191. data/lib/active_admin/application.rb +72 -59
  192. data/lib/active_admin/asset_registration.rb +2 -2
  193. data/lib/active_admin/authorization_adapter.rb +2 -2
  194. data/lib/active_admin/base_controller.rb +2 -3
  195. data/lib/active_admin/base_controller/authorization.rb +13 -31
  196. data/lib/active_admin/batch_actions.rb +1 -1
  197. data/lib/active_admin/batch_actions/controller.rb +24 -8
  198. data/lib/active_admin/batch_actions/resource_extension.rb +47 -18
  199. data/lib/active_admin/batch_actions/views/batch_action_form.rb +7 -4
  200. data/lib/active_admin/batch_actions/views/batch_action_popover.rb +3 -3
  201. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +8 -17
  202. data/lib/active_admin/batch_actions/views/selection_cells.rb +4 -4
  203. data/lib/active_admin/callbacks.rb +25 -24
  204. data/lib/active_admin/cancan_adapter.rb +7 -11
  205. data/lib/active_admin/csv_builder.rb +92 -15
  206. data/lib/active_admin/dependency.rb +93 -0
  207. data/lib/active_admin/deprecation.rb +6 -7
  208. data/lib/active_admin/devise.rb +28 -18
  209. data/lib/active_admin/dsl.rb +18 -11
  210. data/lib/active_admin/engine.rb +10 -8
  211. data/lib/active_admin/error.rb +62 -0
  212. data/lib/active_admin/filters/dsl.rb +2 -2
  213. data/lib/active_admin/filters/forms.rb +17 -27
  214. data/lib/active_admin/filters/formtastic_addons.rb +49 -15
  215. data/lib/active_admin/filters/resource_extension.rb +43 -34
  216. data/lib/active_admin/form_builder.rb +93 -154
  217. data/lib/active_admin/helpers/collection.rb +7 -13
  218. data/lib/active_admin/helpers/i18n.rb +7 -0
  219. data/lib/active_admin/helpers/optional_display.rb +5 -5
  220. data/lib/active_admin/helpers/routes/url_helpers.rb +15 -0
  221. data/lib/active_admin/helpers/scope_chain.rb +1 -1
  222. data/lib/active_admin/helpers/settings.rb +16 -9
  223. data/lib/active_admin/iconic.rb +17 -15
  224. data/lib/active_admin/iconic/icons.rb +136 -136
  225. data/lib/active_admin/inputs.rb +11 -7
  226. data/lib/active_admin/inputs/datepicker_input.rb +12 -3
  227. data/lib/active_admin/inputs/filters/base.rb +42 -0
  228. data/lib/active_admin/inputs/filters/base/search_method_select.rb +75 -0
  229. data/lib/active_admin/inputs/filters/boolean_input.rb +24 -0
  230. data/lib/active_admin/inputs/filters/check_boxes_input.rb +50 -0
  231. data/lib/active_admin/inputs/filters/date_range_input.rb +36 -0
  232. data/lib/active_admin/inputs/filters/numeric_input.rb +12 -0
  233. data/lib/active_admin/inputs/filters/select_input.rb +54 -0
  234. data/lib/active_admin/inputs/filters/string_input.rb +26 -0
  235. data/lib/active_admin/menu.rb +6 -4
  236. data/lib/active_admin/menu_collection.rb +1 -4
  237. data/lib/active_admin/namespace.rb +55 -29
  238. data/lib/active_admin/order_clause.rb +26 -0
  239. data/lib/active_admin/orm/active_record.rb +5 -0
  240. data/lib/active_admin/orm/active_record/comments.rb +81 -0
  241. data/lib/active_admin/orm/active_record/comments/comment.rb +45 -0
  242. data/lib/active_admin/{comments → orm/active_record/comments}/namespace_helper.rb +2 -2
  243. data/lib/active_admin/{comments → orm/active_record/comments}/resource_helper.rb +1 -1
  244. data/lib/active_admin/{comments → orm/active_record/comments}/show_page_helper.rb +0 -0
  245. data/lib/active_admin/orm/active_record/comments/views.rb +2 -0
  246. data/lib/active_admin/{comments → orm/active_record/comments}/views/active_admin_comments.rb +16 -14
  247. data/lib/active_admin/orm/mongoid.rb +1 -0
  248. data/lib/active_admin/orm/mongoid/.gitkeep +0 -0
  249. data/lib/active_admin/page.rb +7 -3
  250. data/lib/active_admin/page_dsl.rb +1 -1
  251. data/lib/active_admin/page_presenter.rb +2 -2
  252. data/lib/active_admin/pundit_adapter.rb +68 -0
  253. data/lib/active_admin/resource.rb +16 -17
  254. data/lib/active_admin/resource/action_items.rb +23 -18
  255. data/lib/active_admin/resource/belongs_to.rb +7 -3
  256. data/lib/active_admin/resource/controllers.rb +1 -0
  257. data/lib/active_admin/resource/includes.rb +12 -0
  258. data/lib/active_admin/resource/menu.rb +5 -5
  259. data/lib/active_admin/resource/naming.rb +27 -43
  260. data/lib/active_admin/resource/page_presenters.rb +1 -1
  261. data/lib/active_admin/resource/routes.rb +27 -11
  262. data/lib/active_admin/resource/scope_to.rb +7 -7
  263. data/lib/active_admin/resource/sidebars.rb +1 -0
  264. data/lib/active_admin/resource_controller.rb +6 -7
  265. data/lib/active_admin/resource_controller/data_access.rb +101 -93
  266. data/lib/active_admin/resource_controller/decorators.rb +91 -9
  267. data/lib/active_admin/resource_controller/streaming.rb +37 -0
  268. data/lib/active_admin/resource_dsl.rb +53 -10
  269. data/lib/active_admin/router.rb +7 -7
  270. data/lib/active_admin/scope.rb +6 -6
  271. data/lib/active_admin/sidebar_section.rb +10 -2
  272. data/lib/active_admin/version.rb +1 -1
  273. data/lib/active_admin/view_factory.rb +17 -17
  274. data/lib/active_admin/view_helpers.rb +0 -1
  275. data/lib/active_admin/view_helpers/auto_link_helper.rb +23 -12
  276. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +4 -3
  277. data/lib/active_admin/view_helpers/display_helper.rb +30 -15
  278. data/lib/active_admin/view_helpers/download_format_links_helper.rb +21 -25
  279. data/lib/active_admin/view_helpers/fields_for.rb +4 -4
  280. data/lib/active_admin/view_helpers/flash_helper.rb +4 -3
  281. data/lib/active_admin/view_helpers/form_helper.rb +5 -9
  282. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +6 -6
  283. data/lib/active_admin/views/action_items.rb +2 -2
  284. data/lib/active_admin/views/components/action_list_popover.rb +1 -1
  285. data/lib/active_admin/views/components/active_admin_form.rb +123 -0
  286. data/lib/active_admin/views/components/attributes_table.rb +63 -21
  287. data/lib/active_admin/views/components/blank_slate.rb +1 -1
  288. data/lib/active_admin/views/components/columns.rb +13 -7
  289. data/lib/active_admin/views/components/dropdown_menu.rb +6 -6
  290. data/lib/active_admin/views/components/index_list.rb +7 -7
  291. data/lib/active_admin/views/components/paginated_collection.rb +38 -20
  292. data/lib/active_admin/views/components/panel.rb +8 -2
  293. data/lib/active_admin/views/components/popover.rb +1 -1
  294. data/lib/active_admin/views/components/scopes.rb +5 -4
  295. data/lib/active_admin/views/components/sidebar_section.rb +3 -2
  296. data/lib/active_admin/views/components/site_title.rb +2 -2
  297. data/lib/active_admin/views/components/status_tag.rb +34 -11
  298. data/lib/active_admin/views/components/table_for.rb +90 -45
  299. data/lib/active_admin/views/components/tabs.rb +28 -0
  300. data/lib/active_admin/views/components/unsupported_browser.rb +11 -0
  301. data/lib/active_admin/views/footer.rb +3 -3
  302. data/lib/active_admin/views/header.rb +3 -3
  303. data/lib/active_admin/views/index_as_block.rb +10 -10
  304. data/lib/active_admin/views/index_as_blog.rb +45 -39
  305. data/lib/active_admin/views/index_as_grid.rb +14 -10
  306. data/lib/active_admin/views/index_as_table.rb +242 -129
  307. data/lib/active_admin/views/pages/base.rb +22 -18
  308. data/lib/active_admin/views/pages/form.rb +21 -11
  309. data/lib/active_admin/views/pages/index.rb +40 -35
  310. data/lib/active_admin/views/pages/layout.rb +1 -1
  311. data/lib/active_admin/views/pages/show.rb +4 -4
  312. data/lib/active_admin/views/tabbed_navigation.rb +7 -3
  313. data/lib/active_admin/views/title_bar.rb +10 -8
  314. data/lib/generators/active_admin/assets/assets_generator.rb +3 -28
  315. data/lib/generators/active_admin/assets/templates/{3.1/active_admin.css.scss → active_admin.css.scss} +0 -0
  316. data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +1 -0
  317. data/lib/generators/active_admin/devise/devise_generator.rb +24 -26
  318. data/lib/generators/active_admin/install/install_generator.rb +8 -9
  319. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +28 -26
  320. data/lib/generators/active_admin/install/templates/admin_user.rb.erb +12 -2
  321. data/lib/generators/active_admin/install/templates/dashboard.rb +4 -4
  322. data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb +3 -3
  323. data/lib/generators/active_admin/page/USAGE +8 -0
  324. data/lib/generators/active_admin/page/page_generator.rb +12 -0
  325. data/lib/generators/active_admin/page/templates/page.rb +5 -0
  326. data/lib/generators/active_admin/resource/resource_generator.rb +3 -5
  327. data/lib/generators/active_admin/resource/templates/admin.rb +15 -0
  328. data/lib/ransack_ext.rb +12 -0
  329. data/script/local +2 -2
  330. data/script/travis_cache +107 -0
  331. data/spec/javascripts/coffeescripts/jquery.aa.flash.js.coffee +25 -0
  332. data/spec/javascripts/fixtures/flashes.html +2 -0
  333. data/spec/rails_helper.rb +154 -0
  334. data/spec/{integration → requests}/default_namespace_spec.rb +6 -6
  335. data/spec/{integration → requests}/javascript_spec.rb +5 -5
  336. data/spec/requests/memory_spec.rb +23 -0
  337. data/spec/requests/stylesheets_spec.rb +18 -0
  338. data/spec/spec_helper.rb +12 -173
  339. data/spec/support/detect_rails_version.rb +9 -17
  340. data/spec/support/rails_template.rb +64 -35
  341. data/spec/support/rails_template_with_data.rb +14 -14
  342. data/spec/support/templates/admin/stores.rb +5 -1
  343. data/spec/support/templates/policies/active_admin/comment_policy.rb +9 -0
  344. data/spec/support/templates/policies/active_admin/page_policy.rb +18 -0
  345. data/spec/support/templates/policies/admin_user_policy.rb +11 -0
  346. data/spec/support/templates/policies/application_policy.rb +45 -0
  347. data/spec/support/templates/policies/category_policy.rb +7 -0
  348. data/spec/support/templates/policies/post_policy.rb +15 -0
  349. data/spec/support/templates/policies/store_policy.rb +11 -0
  350. data/spec/support/templates/policies/user_policy.rb +11 -0
  351. data/spec/support/templates/post_decorator.rb +4 -46
  352. data/spec/unit/abstract_view_factory_spec.rb +16 -16
  353. data/spec/unit/action_builder_spec.rb +24 -18
  354. data/spec/unit/active_admin_spec.rb +2 -2
  355. data/spec/unit/application_spec.rb +33 -34
  356. data/spec/unit/asset_registration_spec.rb +25 -29
  357. data/spec/unit/authorization/authorization_adapter_spec.rb +10 -10
  358. data/spec/unit/authorization/controller_authorization_spec.rb +11 -11
  359. data/spec/unit/authorization/index_overriding_spec.rb +22 -0
  360. data/spec/unit/auto_link_spec.rb +43 -13
  361. data/spec/unit/batch_actions/resource_spec.rb +15 -14
  362. data/spec/unit/batch_actions/settings_spec.rb +18 -18
  363. data/spec/unit/belongs_to_spec.rb +28 -19
  364. data/spec/unit/cancan_adapter_spec.rb +8 -8
  365. data/spec/unit/comments_spec.rb +99 -39
  366. data/spec/unit/component_spec.rb +3 -3
  367. data/spec/unit/config_shared_examples.rb +10 -10
  368. data/spec/unit/controller_filters_spec.rb +23 -16
  369. data/spec/unit/csv_builder_spec.rb +165 -24
  370. data/spec/unit/dependency_spec.rb +135 -0
  371. data/spec/unit/devise_spec.rb +17 -37
  372. data/spec/unit/dsl_spec.rb +70 -9
  373. data/spec/unit/event_spec.rb +11 -11
  374. data/spec/unit/filters/filter_form_builder_spec.rb +207 -148
  375. data/spec/unit/filters/resource_spec.rb +60 -26
  376. data/spec/unit/form_builder_spec.rb +419 -145
  377. data/spec/unit/generators/install_spec.rb +23 -0
  378. data/spec/unit/helpers/collection_spec.rb +18 -18
  379. data/spec/unit/helpers/scope_chain_spec.rb +6 -6
  380. data/spec/unit/helpers/settings_spec.rb +4 -4
  381. data/spec/unit/i18n_spec.rb +12 -0
  382. data/spec/unit/menu_collection_spec.rb +14 -14
  383. data/spec/unit/menu_item_spec.rb +42 -42
  384. data/spec/unit/menu_spec.rb +20 -20
  385. data/spec/unit/namespace/authorization_spec.rb +8 -8
  386. data/spec/unit/namespace/register_page_spec.rb +11 -11
  387. data/spec/unit/namespace/register_resource_spec.rb +28 -30
  388. data/spec/unit/namespace_spec.rb +20 -20
  389. data/spec/unit/order_clause_spec.rb +81 -0
  390. data/spec/unit/page_controller_spec.rb +1 -1
  391. data/spec/unit/page_spec.rb +18 -12
  392. data/spec/unit/pretty_format_spec.rb +42 -14
  393. data/spec/unit/pundit_adapter_spec.rb +98 -0
  394. data/spec/unit/resource/action_items_spec.rb +15 -12
  395. data/spec/unit/resource/includes_spec.rb +21 -0
  396. data/spec/unit/resource/menu_spec.rb +1 -1
  397. data/spec/unit/resource/naming_spec.rb +35 -21
  398. data/spec/unit/resource/page_presenters_spec.rb +8 -8
  399. data/spec/unit/resource/pagination_spec.rb +6 -6
  400. data/spec/unit/resource/routes_spec.rb +10 -10
  401. data/spec/unit/resource/scopes_spec.rb +14 -7
  402. data/spec/unit/resource/sidebars_spec.rb +6 -6
  403. data/spec/unit/resource_collection_spec.rb +31 -38
  404. data/spec/unit/resource_controller/data_access_spec.rb +96 -30
  405. data/spec/unit/resource_controller/decorators_spec.rb +83 -0
  406. data/spec/unit/resource_controller/sidebars_spec.rb +7 -8
  407. data/spec/unit/resource_controller_spec.rb +73 -70
  408. data/spec/unit/resource_registration_spec.rb +12 -12
  409. data/spec/unit/resource_spec.rb +77 -42
  410. data/spec/unit/routing_spec.rb +39 -31
  411. data/spec/unit/scope_spec.rb +112 -30
  412. data/spec/unit/settings_spec.rb +51 -21
  413. data/spec/unit/view_factory_spec.rb +2 -3
  414. data/spec/unit/view_helpers/breadcrumbs_spec.rb +71 -60
  415. data/spec/unit/view_helpers/display_name_spec.rb +49 -21
  416. data/spec/unit/view_helpers/download_format_links_helper_spec.rb +5 -5
  417. data/spec/unit/view_helpers/fields_for_spec.rb +18 -18
  418. data/spec/unit/view_helpers/flash_helper_spec.rb +25 -0
  419. data/spec/unit/view_helpers/form_helper_spec.rb +10 -23
  420. data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +64 -22
  421. data/spec/unit/views/components/action_list_popover_spec.rb +16 -6
  422. data/spec/unit/views/components/attributes_table_spec.rb +171 -30
  423. data/spec/unit/views/components/batch_action_popover_spec.rb +20 -6
  424. data/spec/unit/views/components/blank_slate_spec.rb +14 -4
  425. data/spec/unit/views/components/columns_spec.rb +52 -22
  426. data/spec/unit/views/components/index_list_spec.rb +11 -8
  427. data/spec/unit/views/components/index_table_for_spec.rb +46 -0
  428. data/spec/unit/views/components/paginated_collection_spec.rb +79 -90
  429. data/spec/unit/views/components/panel_spec.rb +32 -21
  430. data/spec/unit/views/components/popover_spec.rb +7 -7
  431. data/spec/unit/views/components/sidebar_section_spec.rb +18 -8
  432. data/spec/unit/views/components/site_title_spec.rb +26 -26
  433. data/spec/unit/views/components/status_tag_spec.rb +178 -38
  434. data/spec/unit/views/components/table_for_spec.rb +237 -35
  435. data/spec/unit/views/components/tabs_spec.rb +39 -0
  436. data/spec/unit/views/components/unsupported_browser_spec.rb +47 -0
  437. data/spec/unit/views/pages/form_spec.rb +17 -10
  438. data/spec/unit/views/pages/index_spec.rb +60 -0
  439. data/spec/unit/views/pages/layout_spec.rb +17 -21
  440. data/spec/unit/views/pages/show_spec.rb +18 -6
  441. data/spec/unit/views/tabbed_navigation_spec.rb +61 -52
  442. data/tasks/docs.rake +9 -11
  443. data/tasks/parallel_tests.rake +8 -2
  444. data/tasks/test.rake +13 -9
  445. data/tasks/yard.rake +7 -4
  446. metadata +219 -163
  447. data/.document +0 -5
  448. data/README.rdoc +0 -88
  449. data/app/assets/images/active_admin/admin_notes_icon.png +0 -0
  450. data/app/assets/images/active_admin/datepicker/datepicker-header-bg.png +0 -0
  451. data/app/assets/images/active_admin/datepicker/datepicker-next-link-icon.png +0 -0
  452. data/app/assets/images/active_admin/datepicker/datepicker-nipple.png +0 -0
  453. data/app/assets/images/active_admin/datepicker/datepicker-prev-link-icon.png +0 -0
  454. data/app/assets/images/active_admin/index_list_icons/block_icon.svg +0 -10
  455. data/app/assets/images/active_admin/index_list_icons/blog_icon.svg +0 -4
  456. data/app/assets/images/active_admin/index_list_icons/grid_icon.svg +0 -13
  457. data/app/assets/images/active_admin/index_list_icons/table_icon.svg +0 -3
  458. data/app/assets/images/active_admin/loading.gif +0 -0
  459. data/app/assets/javascripts/active_admin/application.js +0 -3
  460. data/app/assets/javascripts/active_admin/base.js +0 -5
  461. data/app/assets/javascripts/active_admin/components/jquery.aa.dropdown-menu.js.coffee +0 -105
  462. data/app/assets/javascripts/active_admin/components/jquery.aa.popover.js.coffee +0 -97
  463. data/app/assets/javascripts/active_admin/lib/namespace.js.coffee +0 -4
  464. data/app/assets/javascripts/active_admin/pages/application.js.coffee +0 -21
  465. data/app/assets/javascripts/active_admin/pages/batch_actions.js.coffee +0 -26
  466. data/app/assets/stylesheets/active_admin/components/_batch_actions.css.scss +0 -11
  467. data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +0 -41
  468. data/app/assets/stylesheets/active_admin/components/_table_tools.css.scss +0 -95
  469. data/app/assets/stylesheets/active_admin/mixins/_gradients.css.scss +0 -38
  470. data/app/assets/stylesheets/active_admin/mixins/_rounded.css.scss +0 -43
  471. data/app/views/active_admin/dashboard/index.html.arb +0 -1
  472. data/app/views/active_admin/resource/index.csv.erb +0 -23
  473. data/docs/3-index-pages/create-an-index.md +0 -29
  474. data/lib/active_admin/comments.rb +0 -83
  475. data/lib/active_admin/comments/comment.rb +0 -42
  476. data/lib/active_admin/comments/views.rb +0 -2
  477. data/lib/active_admin/dependency_checker.rb +0 -46
  478. data/lib/active_admin/inputs/filter_base.rb +0 -33
  479. data/lib/active_admin/inputs/filter_base/search_method_select.rb +0 -73
  480. data/lib/active_admin/inputs/filter_boolean_input.rb +0 -36
  481. data/lib/active_admin/inputs/filter_check_boxes_input.rb +0 -40
  482. data/lib/active_admin/inputs/filter_date_range_input.rb +0 -34
  483. data/lib/active_admin/inputs/filter_numeric_input.rb +0 -10
  484. data/lib/active_admin/inputs/filter_select_input.rb +0 -49
  485. data/lib/active_admin/inputs/filter_string_input.rb +0 -24
  486. data/lib/active_admin/reloader.rb +0 -130
  487. data/lib/active_admin/resource_controller/actions.rb +0 -81
  488. data/lib/active_admin/sass/active_admin.scss +0 -3
  489. data/lib/active_admin/sass/css_loader.rb +0 -16
  490. data/lib/active_admin/sass/helpers.rb +0 -45
  491. data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +0 -7
  492. data/lib/active_admin/views/dashboard_section_renderer.rb +0 -19
  493. data/lib/active_admin/views/pages/dashboard.rb +0 -62
  494. data/lib/generators/active_admin/assets/templates/3.0/active_admin.js +0 -1
  495. data/lib/generators/active_admin/assets/templates/3.1/active_admin.js +0 -1
  496. data/lib/meta_search_ext.rb +0 -10
  497. data/spec/integration/memory_spec.rb +0 -29
  498. data/spec/integration/stylesheets_spec.rb +0 -41
  499. data/spec/javascripts/compiled/jquery.aa.checkbox-toggler-spec.js +0 -60
  500. data/spec/javascripts/compiled/jquery.aa.popover-spec.js +0 -106
  501. data/spec/javascripts/compiled/jquery.aa.table-checkbox-toggler-spec.js +0 -37
  502. data/spec/javascripts/helpers/vendor/jasmine-fixture-0.0.5.js +0 -108
  503. data/spec/javascripts/helpers/vendor/jasmine-jquery.js +0 -288
  504. data/spec/javascripts/helpers/vendor/sinon-1.2.0.js +0 -2915
  505. data/spec/javascripts/support/jquery-ui-1.8.16.custom.min.js +0 -34
  506. data/spec/javascripts/support/jquery.min.js +0 -4
  507. data/spec/spec_helper_without_rails.rb +0 -11
  508. data/spec/unit/generators/install_rails_3_1_spec.rb +0 -16
  509. data/spec/unit/rails_spec.rb +0 -43
  510. data/spec/unit/reloader_spec.rb +0 -124
  511. data/spec/unit/sass/helpers_spec.rb +0 -47
  512. data/tasks/js.rake +0 -32
@@ -0,0 +1,28 @@
1
+ module ActiveAdmin
2
+ module Views
3
+ class Tabs < ActiveAdmin::Component
4
+ builder_method :tabs
5
+
6
+ def tab(title, options = {}, &block)
7
+ title = title.to_s.titleize if title.is_a? Symbol
8
+ @menu << build_menu_item(title, options, &block)
9
+ @tabs_content << build_content_item(title, options, &block)
10
+ end
11
+
12
+ def build(&block)
13
+ @menu = ul(class: 'nav nav-tabs', role: "tablist")
14
+ @tabs_content = div(class: 'tab-content')
15
+ end
16
+
17
+ def build_menu_item(title, options, &block)
18
+ options = options.reverse_merge({})
19
+ li { link_to title, "##{title.parameterize}", options }
20
+ end
21
+
22
+ def build_content_item(title, options, &block)
23
+ options = options.reverse_merge(id: title.parameterize)
24
+ div(options, &block)
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,11 @@
1
+ module ActiveAdmin
2
+ module Views
3
+ class UnsupportedBrowser < Component
4
+ def build
5
+ h1 I18n.t("active_admin.unsupported_browser.headline").html_safe
6
+ para I18n.t("active_admin.unsupported_browser.recommendation").html_safe
7
+ para I18n.t("active_admin.unsupported_browser.turn_off_compatibility_view").html_safe
8
+ end
9
+ end
10
+ end
11
+ end
@@ -3,7 +3,7 @@ module ActiveAdmin
3
3
  class Footer < Component
4
4
 
5
5
  def build
6
- super :id => "footer"
6
+ super id: "footer"
7
7
  powered_by_message
8
8
  end
9
9
 
@@ -11,8 +11,8 @@ module ActiveAdmin
11
11
 
12
12
  def powered_by_message
13
13
  para I18n.t('active_admin.powered_by',
14
- :active_admin => link_to("Active Admin", "http://www.activeadmin.info"),
15
- :version => ActiveAdmin::VERSION).html_safe
14
+ active_admin: link_to("Active Admin", "http://www.activeadmin.info"),
15
+ version: ActiveAdmin::VERSION).html_safe
16
16
  end
17
17
 
18
18
  end
@@ -3,7 +3,7 @@ module ActiveAdmin
3
3
  class Header < Component
4
4
 
5
5
  def build(namespace, menu)
6
- super(:id => "header")
6
+ super(id: "header")
7
7
 
8
8
  @namespace = namespace
9
9
  @menu = menu
@@ -20,11 +20,11 @@ module ActiveAdmin
20
20
  end
21
21
 
22
22
  def build_global_navigation
23
- insert_tag view_factory.global_navigation, @menu, :class => 'header-item tabs'
23
+ insert_tag view_factory.global_navigation, @menu, class: 'header-item tabs'
24
24
  end
25
25
 
26
26
  def build_utility_navigation
27
- insert_tag view_factory.utility_navigation, @utility_menu, :id => "utility_nav", :class => 'header-item tabs'
27
+ insert_tag view_factory.utility_navigation, @utility_menu, id: "utility_nav", class: 'header-item tabs'
28
28
  end
29
29
 
30
30
  end
@@ -1,21 +1,21 @@
1
1
  module ActiveAdmin
2
2
  module Views
3
3
 
4
- # = Index as a Block
4
+ # # Index as a Block
5
5
  #
6
6
  # If you want to fully customize the display of your resources on the index
7
7
  # screen, Index as a Block allows you to render a block of content for each
8
8
  # resource.
9
9
  #
10
- # index :as => :block do |product|
11
- # div :for => product do
12
- # resource_selection_cell product
13
- # h2 auto_link(product.title)
14
- # div do
15
- # simple_format product.description
16
- # end
17
- # end
18
- # end
10
+ # ```ruby
11
+ # index as: :block do |product|
12
+ # div for: product do
13
+ # resource_selection_cell product
14
+ # h2 auto_link product.title
15
+ # div simple_format product.description
16
+ # end
17
+ # end
18
+ # ```
19
19
  #
20
20
  class IndexAsBlock < ActiveAdmin::Component
21
21
 
@@ -1,65 +1,71 @@
1
1
  module ActiveAdmin
2
2
  module Views
3
3
 
4
- # = Index as Blog
4
+ # # Index as Blog
5
5
  #
6
6
  # Render your index page as a set of posts. The post has two main options:
7
7
  # title and body.
8
8
  #
9
- # index :as => :blog do
10
- # title :my_title # Calls #my_title on each resource
11
- # body :my_body # Calls #my_body on each resource
12
- # end
9
+ # ```ruby
10
+ # index as: :blog do
11
+ # title :my_title # Calls #my_title on each resource
12
+ # body :my_body # Calls #my_body on each resource
13
+ # end
14
+ # ```
13
15
  #
14
- # == Post Title
16
+ # ## Post Title
15
17
  #
16
18
  # The title is the content that will be rendered within a link to the
17
19
  # resource. There are two main ways to set the content for the title
18
20
  #
19
- # First, you can pass in a method to be called on your
20
- # resource. For example:
21
- #
22
- # index :as => :blog do
23
- # title :a_method_to_call
24
- # end
21
+ # First, you can pass in a method to be called on your resource. For example:
25
22
  #
26
- # This will result in the title of the post being the return value of
27
- # Resource#a_method_to_call
23
+ # ```ruby
24
+ # index as: :blog do
25
+ # title :a_method_to_call
26
+ # end
27
+ # ```
28
28
  #
29
29
  # Second, you can pass a block to the tile option which will then be
30
30
  # used as the contents fo the title. The resource being rendered
31
31
  # is passed in to the block. For Example:
32
32
  #
33
- # index :as => :blog do
34
- # title do |post|
35
- # span post.title, :class => 'title'
36
- # span post.created_at, :class => 'created_at'
37
- # end
38
- # end
33
+ # ```ruby
34
+ # index as: :blog do
35
+ # title do |post|
36
+ # span post.title, class: 'title'
37
+ # span post.created_at, class: 'created_at'
38
+ # end
39
+ # end
40
+ # ```
39
41
  #
40
- # == Post Body
42
+ # ## Post Body
41
43
  #
42
44
  # The body is rendered underneath the title of each post. The same two
43
45
  # style of options work as the Post Title above.
44
46
  #
45
47
  # Call a method on the resource as the body:
46
48
  #
47
- # index :as => :blog do
48
- # title :my_title
49
- # body :my_body # Return value of #my_body will be the body
50
- # end
49
+ # ```ruby
50
+ # index as: :blog do
51
+ # title :my_title
52
+ # body :my_body
53
+ # end
54
+ # ```
51
55
  #
52
56
  # Or, render a block as the body:
53
57
  #
54
- # index :as => :blog do
55
- # title :my_title
56
- # body do |post|
57
- # div truncate(post.title)
58
- # div :class => 'meta' do
59
- # span "Post in #{post.categories.join(', ')}"
60
- # end
61
- # end
58
+ # ```ruby
59
+ # index as: :blog do
60
+ # title :my_title
61
+ # body do |post|
62
+ # div truncate post.title
63
+ # div class: 'meta' do
64
+ # span "Post in #{post.categories.join(', ')}"
62
65
  # end
66
+ # end
67
+ # end
68
+ # ```
63
69
  #
64
70
  class IndexAsBlog < ActiveAdmin::Component
65
71
 
@@ -69,7 +75,7 @@ module ActiveAdmin
69
75
 
70
76
  # Call the block passed in. This will set the
71
77
  # title and body methods
72
- instance_eval &page_presenter.block if page_presenter.block
78
+ instance_exec &page_presenter.block if page_presenter.block
73
79
 
74
80
  add_class "index"
75
81
  build_posts
@@ -107,7 +113,7 @@ module ActiveAdmin
107
113
  end
108
114
 
109
115
  def build_post(post)
110
- div :for => post do
116
+ div for: post do
111
117
  resource_selection_cell(post) if active_admin_config.batch_actions.any?
112
118
  build_title(post)
113
119
  build_body(post)
@@ -117,7 +123,7 @@ module ActiveAdmin
117
123
  def build_title(post)
118
124
  if @title
119
125
  h3 do
120
- a(:href => resource_path(post)) do
126
+ a(href: resource_path(post)) do
121
127
  render_method_on_post_or_call_proc post, @title
122
128
  end
123
129
  end
@@ -130,7 +136,7 @@ module ActiveAdmin
130
136
 
131
137
  def build_body(post)
132
138
  if @body
133
- div :class => 'content' do
139
+ div class: 'content' do
134
140
  render_method_on_post_or_call_proc post, @body
135
141
  end
136
142
  end
@@ -138,8 +144,8 @@ module ActiveAdmin
138
144
 
139
145
  def render_method_on_post_or_call_proc(post, proc)
140
146
  case proc
141
- when String,Symbol
142
- post.send proc
147
+ when String, Symbol
148
+ post.public_send proc
143
149
  else
144
150
  instance_exec post, &proc
145
151
  end
@@ -1,25 +1,29 @@
1
1
  module ActiveAdmin
2
2
  module Views
3
3
 
4
- # = Index as a Grid
4
+ # # Index as a Grid
5
5
  #
6
6
  # Sometimes you want to display the index screen for a set of resources as a grid
7
7
  # (possibly a grid of thumbnail images). To do so, use the :grid option for the
8
8
  # index block.
9
9
  #
10
- # index :as => :grid do |product|
11
- # link_to(image_tag(product.image_path), admin_products_path(product))
12
- # end
10
+ # ```ruby
11
+ # index as: :grid do |product|
12
+ # link_to image_tag(product.image_path), admin_product_path(product)
13
+ # end
14
+ # ```
13
15
  #
14
16
  # The block is rendered within a cell in the grid once for each resource in the
15
17
  # collection. The resource is passed into the block for you to use in the view.
16
18
  #
17
- # You can customize the number of colums that are rendered using the columns
19
+ # You can customize the number of columns that are rendered using the columns
18
20
  # option:
19
21
  #
20
- # index :as => :grid, :columns => 5 do |product|
21
- # link_to(image_tag(product.image_path), admin_products_path(product))
22
- # end
22
+ # ```ruby
23
+ # index as: :grid, columns: 5 do |product|
24
+ # link_to image_tag(product.image_path), admin_product_path(product)
25
+ # end
26
+ # ```
23
27
  #
24
28
  class IndexAsGrid < ActiveAdmin::Component
25
29
 
@@ -42,7 +46,7 @@ module ActiveAdmin
42
46
 
43
47
  def build_table
44
48
  resource_selection_toggle_panel if active_admin_config.batch_actions.any?
45
- table :class => "index_grid" do
49
+ table class: "index_grid" do
46
50
  collection.in_groups_of(number_of_columns).each do |group|
47
51
  build_row(group)
48
52
  end
@@ -58,7 +62,7 @@ module ActiveAdmin
58
62
  end
59
63
 
60
64
  def build_item(item)
61
- td :for => item do
65
+ td for: item do
62
66
  instance_exec(item, &@page_presenter.block)
63
67
  end
64
68
  end
@@ -1,66 +1,114 @@
1
1
  module ActiveAdmin
2
2
  module Views
3
3
 
4
- # = Index as a Table
4
+ # # Index as a Table
5
5
  #
6
6
  # By default, the index page is a table with each of the models content columns and links to
7
7
  # show, edit and delete the object. There are many ways to customize what gets
8
8
  # displayed.
9
9
  #
10
- # == Defining Columns
10
+ # ## Defining Columns
11
11
  #
12
12
  # To display an attribute or a method on a resource, simply pass a symbol into the
13
13
  # column method:
14
14
  #
15
- # index do
16
- # selectable_column
17
- # column :title
18
- # end
15
+ # ```ruby
16
+ # index do
17
+ # selectable_column
18
+ # column :title
19
+ # end
20
+ # ```
21
+ #
22
+ # For association columns we make an educated guess on what to display by
23
+ # calling the following methods in the following order:
24
+ #
25
+ # ```ruby
26
+ # :display_name, :full_name, :name, :username, :login, :title, :email, :to_s
27
+ # ```
28
+ #
29
+ # This can be customized in `config/initializers/active_admin.rb`.
19
30
  #
20
31
  # If the default title does not work for you, pass it as the first argument:
21
32
  #
22
- # index do
23
- # selectable_column
24
- # column "My Custom Title", :title
25
- # end
33
+ # ```ruby
34
+ # index do
35
+ # selectable_column
36
+ # column "My Custom Title", :title
37
+ # end
38
+ # ```
39
+ #
40
+ # Sometimes that just isn't enough and you need to write some view-specific code.
41
+ # For example, say we wanted a "Title" column that links to the posts admin screen.
42
+ #
43
+ # `column` accepts a block that will be rendered for each of the objects in the collection.
44
+ # The block is called once for each resource, which is passed as an argument to the block.
45
+ #
46
+ # ```ruby
47
+ # index do
48
+ # selectable_column
49
+ # column "Title" do |post|
50
+ # link_to post.title, admin_post_path(post)
51
+ # end
52
+ # end
53
+ # ```
26
54
  #
27
- # Sometimes calling methods just isn't enough and you need to write some view
28
- # specific code. For example, say we wanted a colum called Title which holds a
29
- # link to the posts admin screen.
55
+ # To setup links to View, Edit and Delete a resource, use the `actions` method:
30
56
  #
31
- # The column method accepts a block as an argument which will then be rendered
32
- # within the context of the view for each of the objects in the collection.
57
+ # ```ruby
58
+ # index do
59
+ # selectable_column
60
+ # column :title
61
+ # actions
62
+ # end
63
+ # ```
33
64
  #
34
- # index do
35
- # selectable_column
36
- # column "Title" do |post|
37
- # link_to post.title, admin_post_path(post)
38
- # end
39
- # end
65
+ # You can also append custom links to the default links:
40
66
  #
41
- # The block gets called once for each resource in the collection. The resource gets passed into
42
- # the block as an argument.
67
+ # ```ruby
68
+ # index do
69
+ # selectable_column
70
+ # column :title
71
+ # actions do |post|
72
+ # item "Preview", admin_preview_post_path(post), class: "member_link"
73
+ # end
74
+ # end
75
+ # ```
43
76
  #
44
- # To setup links to View, Edit and Delete a resource, use the default_actions method:
77
+ # Or forego the default links entirely:
45
78
  #
46
- # index do
47
- # selectable_column
48
- # column :title
49
- # default_actions
50
- # end
79
+ # ```ruby
80
+ # index do
81
+ # column :title
82
+ # actions defaults: false do |post|
83
+ # item "View", admin_post_path(post)
84
+ # end
85
+ # end
86
+ # ```
51
87
  #
52
- # Alternatively, you can create a column with custom links:
88
+ # Or append custom action with custom html via arbre:
53
89
  #
54
- # index do
55
- # selectable_column
56
- # column :title
57
- # column "Actions" do |post|
58
- # link_to "View", admin_post_path(post)
59
- # end
60
- # end
90
+ # ```ruby
91
+ # index do
92
+ # column :title
93
+ # actions do |post|
94
+ # a link_to "View", admin_post_path(post)
95
+ # end
96
+ # end
97
+ # ```
61
98
  #
99
+ # In case you prefer to list actions links in a dropdown menu:
62
100
  #
63
- # == Sorting
101
+ # ```ruby
102
+ # index do
103
+ # selectable_column
104
+ # column :title
105
+ # actions dropdown: true do |post|
106
+ # item "Preview", admin_preview_post_path(post)
107
+ # end
108
+ # end
109
+ # ```
110
+ #
111
+ # ## Sorting
64
112
  #
65
113
  # When a column is generated from an Active Record attribute, the table is
66
114
  # sortable by default. If you are creating a custom column, you may need to give
@@ -72,48 +120,89 @@ module ActiveAdmin
72
120
  # By default, this is the column on the resource's table that the attribute corresponds to.
73
121
  # Otherwise, any attribute that the resource collection responds to can be used.
74
122
  #
75
- # index do
76
- # column "Title", :sortable => :title do |post|
77
- # link_to post.title, admin_post_path(post)
78
- # end
79
- # end
123
+ # ```ruby
124
+ # index do
125
+ # column :title, sortable: :title do |post|
126
+ # link_to post.title, admin_post_path(post)
127
+ # end
128
+ # end
129
+ # ```
80
130
  #
81
- # You can also sort using an attribute on another table by passing the table name
82
- # and the attribute separated by a dot:
131
+ # You can turn off sorting on any column by passing false:
83
132
  #
84
- # index do
85
- # column :title, :sortable => 'categories.name'
86
- # end
133
+ # ```ruby
134
+ # index do
135
+ # column :title, sortable: false
136
+ # end
137
+ # ```
87
138
  #
88
- # You can turn off sorting on any column by passing false:
139
+ # It's also possible to sort by PostgreSQL's hstore column key. You should set `sortable`
140
+ # option to a `column->'key'` value:
141
+ #
142
+ # ```ruby
143
+ # index do
144
+ # column :keywords, sortable: "meta->'keywords'"
145
+ # end
146
+ # ```
147
+ #
148
+ # ## Associated Sorting
89
149
  #
90
- # index do
91
- # column :title, :sortable => false
92
- # end
150
+ # You're normally able to sort columns alphabetically, but by default you
151
+ # can't sort by associated objects. Though with a few simple changes, you can.
93
152
  #
94
- # == Showing and Hiding Columns
153
+ # Assuming you're on the Books index page, and Book has_one Publisher:
154
+ #
155
+ # ```ruby
156
+ # controller do
157
+ # def scoped_collection
158
+ # super.includes :publisher # prevents N+1 queries to your database
159
+ # end
160
+ # end
161
+ # ```
162
+ #
163
+ # Then it's simple to sort by any Publisher attribute from within the index table:
164
+ #
165
+ # ```ruby
166
+ # index do
167
+ # column :publisher, sortable: 'publishers.name'
168
+ # end
169
+ # ```
170
+ #
171
+ # ## Showing and Hiding Columns
95
172
  #
96
173
  # The entire index block is rendered within the context of the view, so you can
97
174
  # easily do things that show or hide columns based on the current context.
98
175
  #
99
176
  # For example, if you were using CanCan:
100
177
  #
101
- # index do
102
- # column :title, :sortable => false
103
- # if can? :manage, Post
104
- # column :some_secret_data
105
- # end
106
- # end
178
+ # ```ruby
179
+ # index do
180
+ # column :title, sortable: false
181
+ # column :secret_data if can? :manage, Post
182
+ # end
183
+ # ```
184
+ #
185
+ # ## Custom row class
186
+ #
187
+ # In order to add special class to table rows pass the proc object as a `:row_class` option
188
+ # of the `index` method.
189
+ #
190
+ # ```ruby
191
+ # index row_class: ->elem { 'active' if elem.active? } do
192
+ # # columns
193
+ # end
194
+ # ```
107
195
  #
108
196
  class IndexAsTable < ActiveAdmin::Component
109
197
 
110
198
  def build(page_presenter, collection)
111
199
  table_options = {
112
- :id => "index_table_#{active_admin_config.resource_name.plural}",
113
- :sortable => true,
114
- :class => "index_table index",
115
- :i18n => active_admin_config.resource_class,
116
- :paginator => page_presenter[:paginator] != false
200
+ id: "index_table_#{active_admin_config.resource_name.plural}",
201
+ sortable: true,
202
+ class: "index_table index",
203
+ i18n: active_admin_config.resource_class,
204
+ paginator: page_presenter[:paginator] != false,
205
+ row_class: page_presenter[:row_class]
117
206
  }
118
207
 
119
208
  table_for collection, table_options do |t|
@@ -128,11 +217,12 @@ module ActiveAdmin
128
217
 
129
218
  def default_table
130
219
  proc do
131
- id_column
220
+ selectable_column
221
+ id_column if resource_class.primary_key # View based Models have no primary_key
132
222
  resource_class.content_columns.each do |col|
133
223
  column col.name.to_sym
134
224
  end
135
- default_actions
225
+ actions
136
226
  end
137
227
  end
138
228
 
@@ -149,90 +239,113 @@ module ActiveAdmin
149
239
  # Display a column for checkbox
150
240
  def selectable_column
151
241
  return unless active_admin_config.batch_actions.any?
152
- column( resource_selection_toggle_cell, { :class => "selectable" } ) { |resource| resource_selection_cell( resource ) }
242
+ column resource_selection_toggle_cell, class: 'col-selectable', sortable: false do |resource|
243
+ resource_selection_cell resource
244
+ end
153
245
  end
154
246
 
155
247
  # Display a column for the id
156
248
  def id_column
157
- column(resource_class.human_attribute_name(resource_class.primary_key), :sortable => resource_class.primary_key) do |resource|
158
- link_to resource.id, resource_path(resource), :class => "resource_id_link"
249
+ raise "#{resource_class.name} as no primary_key!" unless resource_class.primary_key
250
+ column(resource_class.human_attribute_name(resource_class.primary_key), sortable: resource_class.primary_key) do |resource|
251
+ if controller.action_methods.include?('show')
252
+ link_to resource.id, resource_path(resource), class: "resource_id_link"
253
+ else
254
+ resource.id
255
+ end
159
256
  end
160
257
  end
161
258
 
259
+ def default_actions
260
+ raise '`default_actions` is no longer provided in ActiveAdmin 1.x. Use `actions` instead.'
261
+ end
262
+
162
263
  # Add links to perform actions.
163
264
  #
164
- # # Add default links.
165
- # actions
265
+ # ```ruby
266
+ # # Add default links.
267
+ # actions
268
+ #
269
+ # # Add default links with a custom column title (empty by default).
270
+ # actions name: 'A title!'
271
+ #
272
+ # # Append some actions onto the end of the default actions.
273
+ # actions do |admin_user|
274
+ # item 'Grant Admin', grant_admin_admin_user_path(admin_user)
275
+ # item 'Grant User', grant_user_admin_user_path(admin_user)
276
+ # end
277
+ #
278
+ # # Append some actions onto the end of the default actions using arbre dsl.
279
+ # actions do |admin_user|
280
+ # a link_to 'Grant Admin', grant_admin_admin_user_path(admin_user)
281
+ # end
282
+ #
283
+ # # Custom actions without the defaults.
284
+ # actions defaults: false do |admin_user|
285
+ # item 'Grant Admin', grant_admin_admin_user_path(admin_user)
286
+ # end
166
287
  #
167
- # # Append some actions onto the end of the default actions.
168
- # actions do |admin_user|
169
- # link_to 'Grant Admin', grant_admin_admin_user_path(admin_user)
170
- # end
288
+ # # Append some actions onto the end of the default actions displayed in a Dropdown Menu
289
+ # actions dropdown: true do |admin_user|
290
+ # item 'Grant Admin', grant_admin_admin_user_path(admin_user)
291
+ # end
171
292
  #
172
- # # Custom actions without the defaults.
173
- # actions :defaults => false do |admin_user|
174
- # link_to 'Grant Admin', grant_admin_admin_user_path(admin_user)
175
- # end
293
+ # # Custom actions without the defaults displayed in a Dropdown Menu.
294
+ # actions defaults: false, dropdown: true, dropdown_name: 'Additional actions' do |admin_user|
295
+ # item 'Grant Admin', grant_admin_admin_user_path(admin_user)
296
+ # end
297
+ #
298
+ # ```
176
299
  def actions(options = {}, &block)
177
- options = {
178
- :name => "",
179
- :defaults => true
180
- }.merge(options)
181
- column options[:name] do |resource|
182
- text_node default_actions(resource) if options[:defaults]
183
- text_node instance_exec(resource, &block) if block_given?
184
- end
185
- end
300
+ name = options.delete(:name) { '' }
301
+ defaults = options.delete(:defaults) { true }
302
+ dropdown = options.delete(:dropdown) { false }
303
+ dropdown_name = options.delete(:dropdown_name) { I18n.t 'active_admin.dropdown_actions.button_label', default: 'Actions' }
186
304
 
187
- def default_actions(*args)
188
- links = proc do |resource|
189
- links = ''.html_safe
190
- if controller.action_methods.include?('show') && authorized?(ActiveAdmin::Auth::READ, resource)
191
- links << link_to(I18n.t('active_admin.view'), resource_path(resource), :class => "member_link view_link")
192
- end
193
- if controller.action_methods.include?('edit') && authorized?(ActiveAdmin::Auth::UPDATE, resource)
194
- links << link_to(I18n.t('active_admin.edit'), edit_resource_path(resource), :class => "member_link edit_link")
195
- end
196
- if controller.action_methods.include?('destroy') && authorized?(ActiveAdmin::Auth::DESTROY, resource)
197
- links << link_to(I18n.t('active_admin.delete'), resource_path(resource), :method => :delete, 'data-confirm' => I18n.t('active_admin.delete_confirmation'), :class => "member_link delete_link")
305
+ options[:class] ||= 'col-actions'
306
+
307
+ column name, options do |resource|
308
+ if dropdown
309
+ dropdown_menu dropdown_name do
310
+ defaults(resource) if defaults
311
+ instance_exec(resource, &block) if block_given?
312
+ end
313
+ else
314
+ table_actions do
315
+ defaults(resource, css_class: :member_link) if defaults
316
+ if block_given?
317
+ block_result = instance_exec(resource, &block)
318
+ text_node block_result unless block_result.is_a? Arbre::Element
319
+ end
320
+ end
198
321
  end
199
- links
200
322
  end
323
+ end
324
+
325
+ private
201
326
 
202
- options = args.extract_options!
203
- if options.present? || args.empty?
204
- actions options
205
- else
206
- links.call(args.first)
327
+ def defaults(resource, options = {})
328
+ if controller.action_methods.include?('show') && authorized?(ActiveAdmin::Auth::READ, resource)
329
+ item I18n.t('active_admin.view'), resource_path(resource), class: "view_link #{options[:css_class]}"
330
+ end
331
+ if controller.action_methods.include?('edit') && authorized?(ActiveAdmin::Auth::UPDATE, resource)
332
+ item I18n.t('active_admin.edit'), edit_resource_path(resource), class: "edit_link #{options[:css_class]}"
333
+ end
334
+ if controller.action_methods.include?('destroy') && authorized?(ActiveAdmin::Auth::DESTROY, resource)
335
+ item I18n.t('active_admin.delete'), resource_path(resource), class: "delete_link #{options[:css_class]}",
336
+ method: :delete, data: {confirm: I18n.t('active_admin.delete_confirmation')}
207
337
  end
208
338
  end
209
339
 
210
- # Display A Status Tag Column
211
- #
212
- # index do |i|
213
- # i.status_tag :state
214
- # end
215
- #
216
- # index do |i|
217
- # i.status_tag "State", :status_name
218
- # end
219
- #
220
- # index do |i|
221
- # i.status_tag do |post|
222
- # post.published? ? 'published' : 'draft'
223
- # end
224
- # end
225
- #
226
- def status_tag(*args, &block)
227
- col = Column.new(*args, &block)
228
- data = col.data
229
- col.data = proc do |resource|
230
- status_tag call_method_or_proc_on(resource, data)
340
+ class TableActions < ActiveAdmin::Component
341
+ builder_method :table_actions
342
+
343
+ def item *args
344
+ text_node link_to *args
231
345
  end
232
- add_column col
233
346
  end
234
- end # TableBuilder
347
+ end # IndexTableFor
235
348
 
236
- end # Table
349
+ end # IndexAsTable
237
350
  end
238
351
  end