yousty-activeadmin 1.0.4.pre → 1.0.5.pre

Sign up to get free protection for your applications and to get access to all the features.
Files changed (467) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +261 -211
  3. data/CONTRIBUTING.md +73 -39
  4. data/Gemfile +38 -20
  5. data/Guardfile +1 -0
  6. data/LICENSE +1 -1
  7. data/README.md +48 -24
  8. data/Rakefile +12 -4
  9. data/activeadmin.gemspec +21 -26
  10. data/app/assets/javascripts/active_admin/application.js.coffee +34 -5
  11. data/app/assets/javascripts/active_admin/base.js.coffee +11 -2
  12. data/app/assets/javascripts/active_admin/ext/jquery-ui.js.coffee +6 -0
  13. data/app/assets/javascripts/active_admin/ext/jquery.js.coffee +7 -0
  14. data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +39 -0
  15. data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +3 -4
  16. data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +51 -55
  17. data/app/assets/javascripts/active_admin/lib/flash.js.coffee +19 -0
  18. data/app/assets/javascripts/active_admin/lib/has_many.js.coffee +79 -0
  19. data/app/assets/javascripts/active_admin/lib/modal_dialog.js.coffee +37 -0
  20. data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +27 -0
  21. data/app/assets/javascripts/active_admin/lib/popover.js.coffee +29 -58
  22. data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +2 -3
  23. data/app/assets/stylesheets/active_admin/{_base.css.scss → _base.scss} +3 -0
  24. data/app/assets/stylesheets/active_admin/{_forms.css.scss → _forms.scss} +51 -15
  25. data/app/assets/stylesheets/active_admin/{_header.css.scss → _header.scss} +9 -5
  26. data/app/assets/stylesheets/active_admin/{_mixins.css.scss → _mixins.scss} +0 -0
  27. data/app/assets/stylesheets/active_admin/{_typography.css.scss → _typography.scss} +0 -0
  28. data/app/assets/stylesheets/active_admin/components/_batch_actions.scss +11 -0
  29. data/app/assets/stylesheets/active_admin/components/_buttons.scss +1 -1
  30. data/app/assets/stylesheets/active_admin/components/{_comments.css.scss → _comments.scss} +0 -0
  31. data/app/assets/stylesheets/active_admin/components/{_date_picker.css.scss → _date_picker.scss} +40 -12
  32. data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +3 -1
  33. data/app/assets/stylesheets/active_admin/components/_flash_messages.scss +37 -0
  34. data/app/assets/stylesheets/active_admin/components/_modal_dialog.scss +34 -0
  35. data/app/assets/stylesheets/active_admin/components/_pagination.scss +10 -0
  36. data/app/assets/stylesheets/active_admin/components/{_popovers.css.scss → _popovers.scss} +0 -0
  37. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +4 -0
  38. data/app/assets/stylesheets/active_admin/components/_table_tools.scss +67 -0
  39. data/app/assets/stylesheets/active_admin/components/{_tables.css.scss → _tables.scss} +1 -0
  40. data/app/assets/stylesheets/active_admin/components/_tabs.scss +65 -0
  41. data/app/assets/stylesheets/active_admin/components/_unsupported_browser.scss +16 -0
  42. data/app/assets/stylesheets/active_admin/mixins/{_all.css.scss → _all.scss} +0 -0
  43. data/app/assets/stylesheets/active_admin/mixins/{_buttons.css.scss → _buttons.scss} +0 -0
  44. data/app/assets/stylesheets/active_admin/mixins/{_gradients.css.scss → _gradients.scss} +1 -1
  45. data/app/assets/stylesheets/active_admin/mixins/{_icons.css.scss → _icons.scss} +1 -2
  46. data/app/assets/stylesheets/active_admin/mixins/{_reset.css.scss → _reset.scss} +0 -0
  47. data/app/assets/stylesheets/active_admin/mixins/{_rounded.css.scss → _rounded.scss} +0 -0
  48. data/app/assets/stylesheets/active_admin/mixins/{_sections.css.scss → _sections.scss} +7 -1
  49. data/app/assets/stylesheets/active_admin/mixins/{_shadows.css.scss → _shadows.scss} +0 -0
  50. data/app/assets/stylesheets/active_admin/mixins/{_variables.css.scss → _variables.scss} +10 -8
  51. data/app/assets/stylesheets/active_admin/{print.css.scss → print.scss} +4 -0
  52. data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +10 -7
  53. data/app/views/active_admin/devise/confirmations/new.html.erb +15 -0
  54. data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +1 -1
  55. data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +1 -1
  56. data/app/views/active_admin/devise/passwords/edit.html.erb +9 -10
  57. data/app/views/active_admin/devise/passwords/new.html.erb +5 -4
  58. data/app/views/active_admin/devise/registrations/new.html.erb +22 -0
  59. data/app/views/active_admin/devise/sessions/new.html.erb +8 -8
  60. data/app/views/active_admin/devise/shared/_links.erb +1 -1
  61. data/app/views/active_admin/devise/unlocks/new.html.erb +5 -4
  62. data/app/views/layouts/active_admin_logged_out.html.erb +3 -5
  63. data/config/locales/ar.yml +120 -0
  64. data/config/locales/bg.yml +26 -6
  65. data/config/locales/bs.yml +122 -0
  66. data/config/locales/ca.yml +10 -1
  67. data/config/locales/cs.yml +7 -2
  68. data/config/locales/da.yml +7 -3
  69. data/config/locales/de-CH.yml +14 -31
  70. data/config/locales/de.yml +33 -33
  71. data/config/locales/el.yml +127 -0
  72. data/config/locales/en-GB.yml +11 -4
  73. data/config/locales/en.yml +21 -4
  74. data/config/locales/{es_MX.yml → es-MX.yml} +14 -24
  75. data/config/locales/es.yml +32 -25
  76. data/config/locales/fa.yml +120 -0
  77. data/config/locales/fi.yml +9 -5
  78. data/config/locales/fr.yml +28 -12
  79. data/config/locales/he.yml +7 -3
  80. data/config/locales/hr.yml +42 -11
  81. data/config/locales/hu.yml +10 -3
  82. data/config/locales/it.yml +31 -3
  83. data/config/locales/ja.yml +17 -4
  84. data/config/locales/ko.yml +7 -1
  85. data/config/locales/lt.yml +42 -11
  86. data/config/locales/lv.yml +7 -3
  87. data/config/locales/{no-NB.yml → nb.yml} +46 -15
  88. data/config/locales/nl.yml +36 -5
  89. data/config/locales/pl.yml +13 -8
  90. data/config/locales/pt-BR.yml +36 -5
  91. data/config/locales/pt-PT.yml +8 -4
  92. data/config/locales/ro.yml +7 -3
  93. data/config/locales/ru.yml +26 -5
  94. data/config/locales/sv-SE.yml +9 -5
  95. data/config/locales/tr.yml +10 -3
  96. data/config/locales/uk.yml +36 -12
  97. data/config/locales/vi.yml +7 -3
  98. data/config/locales/zh-CN.yml +26 -10
  99. data/config/locales/zh-TW.yml +19 -13
  100. data/docs/0-installation.md +14 -6
  101. data/docs/1-general-configuration.md +8 -5
  102. data/docs/10-custom-pages.md +68 -70
  103. data/docs/11-decorators.md +48 -59
  104. data/docs/12-arbre-components.md +79 -73
  105. data/docs/13-authorization-adapter.md +128 -107
  106. data/docs/14-gotchas.md +90 -0
  107. data/docs/2-resource-customization.md +82 -15
  108. data/docs/3-index-pages.md +71 -12
  109. data/docs/3-index-pages/custom-index.md +31 -0
  110. data/docs/3-index-pages/index-as-table.md +45 -2
  111. data/docs/4-csv-format.md +1 -1
  112. data/docs/5-forms.md +78 -29
  113. data/docs/6-show-pages.md +31 -3
  114. data/docs/7-sidebars.md +46 -25
  115. data/docs/8-custom-actions.md +98 -77
  116. data/docs/9-batch-actions.md +211 -133
  117. data/docs/README.md +24 -0
  118. data/features/action_item.feature +3 -3
  119. data/features/authorization_pundit.feature +37 -0
  120. data/features/belongs_to.feature +3 -0
  121. data/features/breadcrumb.feature +48 -0
  122. data/features/comments/commenting.feature +44 -13
  123. data/features/development_reloading.feature +3 -4
  124. data/features/edit_page.feature +9 -19
  125. data/features/favicon.feature +3 -3
  126. data/features/i18n.feature +5 -0
  127. data/features/index/batch_actions.feature +41 -0
  128. data/features/index/filters.feature +23 -0
  129. data/features/index/format_as_csv.feature +90 -4
  130. data/features/index/index_as_blog.feature +4 -4
  131. data/features/index/index_as_table.feature +102 -6
  132. data/features/index/index_blank_slate.feature +22 -0
  133. data/features/index/index_scope_to.feature +16 -16
  134. data/features/index/page_title.feature +11 -0
  135. data/features/index/pagination.feature +1 -1
  136. data/features/index/switch_index_view.feature +14 -14
  137. data/features/new_page.feature +10 -20
  138. data/features/registering_pages.feature +1 -1
  139. data/features/renamed_resource.feature +32 -0
  140. data/features/show/page_title.feature +11 -0
  141. data/features/show/tabs.feature +27 -0
  142. data/features/sidebar_sections.feature +12 -0
  143. data/features/specifying_actions.feature +3 -3
  144. data/features/step_definitions/action_item_steps.rb +2 -2
  145. data/features/step_definitions/action_link_steps.rb +14 -1
  146. data/features/step_definitions/additional_web_steps.rb +17 -18
  147. data/features/step_definitions/asset_steps.rb +3 -3
  148. data/features/step_definitions/attribute_steps.rb +8 -3
  149. data/features/step_definitions/batch_action_steps.rb +26 -9
  150. data/features/step_definitions/blog_steps.rb +3 -0
  151. data/features/step_definitions/breadcrumb_steps.rb +1 -1
  152. data/features/step_definitions/comment_steps.rb +1 -1
  153. data/features/step_definitions/configuration_steps.rb +1 -1
  154. data/features/step_definitions/dashboard_steps.rb +2 -2
  155. data/features/step_definitions/factory_steps.rb +6 -6
  156. data/features/step_definitions/filter_steps.rb +25 -3
  157. data/features/step_definitions/flash_steps.rb +3 -3
  158. data/features/step_definitions/format_steps.rb +17 -10
  159. data/features/step_definitions/index_scope_steps.rb +5 -5
  160. data/features/step_definitions/layout_steps.rb +1 -1
  161. data/features/step_definitions/member_link_steps.rb +2 -2
  162. data/features/step_definitions/menu_steps.rb +3 -3
  163. data/features/step_definitions/pagination_steps.rb +2 -3
  164. data/features/step_definitions/sidebar_steps.rb +8 -3
  165. data/features/step_definitions/site_title_steps.rb +6 -4
  166. data/features/step_definitions/symbol_leak_steps.rb +1 -1
  167. data/features/step_definitions/tab_steps.rb +5 -0
  168. data/features/step_definitions/table_steps.rb +4 -4
  169. data/features/step_definitions/user_steps.rb +15 -9
  170. data/features/step_definitions/web_steps.rb +10 -11
  171. data/features/sti_resource.feature +2 -10
  172. data/features/strong_parameters.feature +73 -0
  173. data/features/support/env.rb +35 -2
  174. data/features/support/paths.rb +2 -2
  175. data/features/support/selectors.rb +1 -1
  176. data/features/users/resetting_password.feature +7 -7
  177. data/lib/active_admin.rb +18 -13
  178. data/lib/active_admin/abstract_view_factory.rb +7 -17
  179. data/lib/active_admin/application.rb +50 -25
  180. data/lib/active_admin/asset_registration.rb +2 -2
  181. data/lib/active_admin/authorization_adapter.rb +2 -2
  182. data/lib/active_admin/base_controller.rb +2 -3
  183. data/lib/active_admin/base_controller/authorization.rb +13 -31
  184. data/lib/active_admin/batch_actions.rb +1 -1
  185. data/lib/active_admin/batch_actions/controller.rb +13 -7
  186. data/lib/active_admin/batch_actions/resource_extension.rb +43 -17
  187. data/lib/active_admin/batch_actions/views/batch_action_form.rb +7 -4
  188. data/lib/active_admin/batch_actions/views/batch_action_popover.rb +3 -3
  189. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +8 -17
  190. data/lib/active_admin/batch_actions/views/selection_cells.rb +4 -4
  191. data/lib/active_admin/callbacks.rb +25 -24
  192. data/lib/active_admin/cancan_adapter.rb +7 -11
  193. data/lib/active_admin/csv_builder.rb +92 -15
  194. data/lib/active_admin/dependency.rb +93 -0
  195. data/lib/active_admin/deprecation.rb +6 -7
  196. data/lib/active_admin/devise.rb +26 -14
  197. data/lib/active_admin/dsl.rb +18 -11
  198. data/lib/active_admin/engine.rb +7 -2
  199. data/lib/active_admin/error.rb +59 -0
  200. data/lib/active_admin/filters/dsl.rb +2 -2
  201. data/lib/active_admin/filters/forms.rb +19 -30
  202. data/lib/active_admin/filters/formtastic_addons.rb +20 -11
  203. data/lib/active_admin/filters/resource_extension.rb +16 -9
  204. data/lib/active_admin/form_builder.rb +94 -105
  205. data/lib/active_admin/helpers/collection.rb +7 -13
  206. data/lib/active_admin/helpers/i18n.rb +7 -0
  207. data/lib/active_admin/helpers/optional_display.rb +5 -5
  208. data/lib/active_admin/helpers/scope_chain.rb +1 -1
  209. data/lib/active_admin/helpers/settings.rb +16 -9
  210. data/lib/active_admin/iconic.rb +17 -15
  211. data/lib/active_admin/iconic/icons.rb +136 -136
  212. data/lib/active_admin/inputs.rb +11 -7
  213. data/lib/active_admin/inputs/datepicker_input.rb +1 -1
  214. data/lib/active_admin/inputs/filters/base.rb +42 -0
  215. data/lib/active_admin/inputs/filters/base/search_method_select.rb +75 -0
  216. data/lib/active_admin/inputs/filters/boolean_input.rb +24 -0
  217. data/lib/active_admin/inputs/filters/check_boxes_input.rb +50 -0
  218. data/lib/active_admin/inputs/filters/date_range_input.rb +36 -0
  219. data/lib/active_admin/inputs/filters/numeric_input.rb +12 -0
  220. data/lib/active_admin/inputs/filters/select_input.rb +54 -0
  221. data/lib/active_admin/inputs/filters/string_input.rb +26 -0
  222. data/lib/active_admin/menu.rb +3 -3
  223. data/lib/active_admin/menu_collection.rb +1 -4
  224. data/lib/active_admin/namespace.rb +52 -29
  225. data/lib/active_admin/order_clause.rb +26 -0
  226. data/lib/active_admin/orm/active_record.rb +2 -0
  227. data/lib/active_admin/orm/active_record/comments.rb +48 -51
  228. data/lib/active_admin/orm/active_record/comments/comment.rb +16 -10
  229. data/lib/active_admin/orm/active_record/comments/namespace_helper.rb +1 -1
  230. data/lib/active_admin/orm/active_record/comments/resource_helper.rb +1 -1
  231. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +15 -13
  232. data/lib/active_admin/page.rb +5 -1
  233. data/lib/active_admin/page_dsl.rb +1 -1
  234. data/lib/active_admin/page_presenter.rb +2 -2
  235. data/lib/active_admin/pundit_adapter.rb +68 -0
  236. data/lib/active_admin/resource.rb +12 -3
  237. data/lib/active_admin/resource/action_items.rb +15 -8
  238. data/lib/active_admin/resource/belongs_to.rb +7 -3
  239. data/lib/active_admin/resource/controllers.rb +1 -0
  240. data/lib/active_admin/resource/includes.rb +12 -0
  241. data/lib/active_admin/resource/menu.rb +5 -5
  242. data/lib/active_admin/resource/naming.rb +25 -47
  243. data/lib/active_admin/resource/page_presenters.rb +1 -1
  244. data/lib/active_admin/resource/routes.rb +26 -10
  245. data/lib/active_admin/resource/scope_to.rb +7 -7
  246. data/lib/active_admin/resource/sidebars.rb +1 -0
  247. data/lib/active_admin/resource_collection.rb +44 -16
  248. data/lib/active_admin/resource_controller.rb +6 -5
  249. data/lib/active_admin/resource_controller/data_access.rb +87 -82
  250. data/lib/active_admin/resource_controller/decorators.rb +91 -9
  251. data/lib/active_admin/resource_controller/streaming.rb +37 -0
  252. data/lib/active_admin/resource_dsl.rb +54 -10
  253. data/lib/active_admin/router.rb +7 -7
  254. data/lib/active_admin/scope.rb +6 -6
  255. data/lib/active_admin/sidebar_section.rb +10 -2
  256. data/lib/active_admin/version.rb +1 -1
  257. data/lib/active_admin/view_factory.rb +17 -16
  258. data/lib/active_admin/view_helpers.rb +0 -1
  259. data/lib/active_admin/view_helpers/auto_link_helper.rb +23 -12
  260. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +13 -6
  261. data/lib/active_admin/view_helpers/display_helper.rb +30 -17
  262. data/lib/active_admin/view_helpers/download_format_links_helper.rb +21 -24
  263. data/lib/active_admin/view_helpers/fields_for.rb +2 -2
  264. data/lib/active_admin/view_helpers/flash_helper.rb +4 -3
  265. data/lib/active_admin/view_helpers/form_helper.rb +5 -9
  266. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +6 -6
  267. data/lib/active_admin/views/action_items.rb +2 -2
  268. data/lib/active_admin/views/components/action_list_popover.rb +1 -1
  269. data/lib/active_admin/views/components/active_admin_form.rb +123 -0
  270. data/lib/active_admin/views/components/attributes_table.rb +22 -13
  271. data/lib/active_admin/views/components/blank_slate.rb +1 -1
  272. data/lib/active_admin/views/components/columns.rb +13 -7
  273. data/lib/active_admin/views/components/dropdown_menu.rb +6 -6
  274. data/lib/active_admin/views/components/index_list.rb +7 -7
  275. data/lib/active_admin/views/components/paginated_collection.rb +33 -17
  276. data/lib/active_admin/views/components/panel.rb +8 -2
  277. data/lib/active_admin/views/components/popover.rb +1 -1
  278. data/lib/active_admin/views/components/scopes.rb +1 -1
  279. data/lib/active_admin/views/components/sidebar_section.rb +3 -2
  280. data/lib/active_admin/views/components/site_title.rb +2 -2
  281. data/lib/active_admin/views/components/status_tag.rb +34 -11
  282. data/lib/active_admin/views/components/table_for.rb +67 -22
  283. data/lib/active_admin/views/components/tabs.rb +28 -0
  284. data/lib/active_admin/views/components/unsupported_browser.rb +11 -0
  285. data/lib/active_admin/views/footer.rb +3 -3
  286. data/lib/active_admin/views/header.rb +3 -3
  287. data/lib/active_admin/views/index_as_blog.rb +6 -6
  288. data/lib/active_admin/views/index_as_grid.rb +2 -2
  289. data/lib/active_admin/views/index_as_table.rb +127 -40
  290. data/lib/active_admin/views/pages/base.rb +22 -18
  291. data/lib/active_admin/views/pages/form.rb +16 -6
  292. data/lib/active_admin/views/pages/index.rb +36 -20
  293. data/lib/active_admin/views/pages/layout.rb +1 -1
  294. data/lib/active_admin/views/pages/show.rb +4 -4
  295. data/lib/active_admin/views/tabbed_navigation.rb +7 -3
  296. data/lib/active_admin/views/title_bar.rb +10 -8
  297. data/lib/generators/active_admin/assets/assets_generator.rb +1 -3
  298. data/lib/generators/active_admin/devise/devise_generator.rb +20 -28
  299. data/lib/generators/active_admin/install/install_generator.rb +8 -9
  300. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +20 -22
  301. data/lib/generators/active_admin/install/templates/admin_user.rb.erb +12 -9
  302. data/lib/generators/active_admin/install/templates/dashboard.rb +4 -4
  303. data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb +3 -3
  304. data/lib/generators/active_admin/page/USAGE +8 -0
  305. data/lib/generators/active_admin/page/page_generator.rb +12 -0
  306. data/lib/generators/active_admin/page/templates/page.rb +5 -0
  307. data/lib/generators/active_admin/resource/resource_generator.rb +2 -4
  308. data/lib/generators/active_admin/resource/templates/admin.rb +15 -0
  309. data/lib/ransack_ext.rb +4 -4
  310. data/script/local +2 -2
  311. data/script/travis_cache +107 -0
  312. data/spec/javascripts/coffeescripts/jquery.aa.flash.js.coffee +25 -0
  313. data/spec/javascripts/fixtures/flashes.html +2 -0
  314. data/spec/rails_helper.rb +154 -0
  315. data/spec/{integration → requests}/default_namespace_spec.rb +6 -6
  316. data/spec/{integration → requests}/javascript_spec.rb +5 -5
  317. data/spec/requests/memory_spec.rb +23 -0
  318. data/spec/requests/stylesheets_spec.rb +18 -0
  319. data/spec/spec_helper.rb +12 -170
  320. data/spec/support/detect_rails_version.rb +31 -39
  321. data/spec/support/rails_template.rb +61 -34
  322. data/spec/support/rails_template_with_data.rb +14 -14
  323. data/spec/support/templates/admin/stores.rb +3 -5
  324. data/spec/support/templates/policies/active_admin/comment_policy.rb +9 -0
  325. data/spec/support/templates/policies/active_admin/page_policy.rb +18 -0
  326. data/spec/support/templates/policies/admin_user_policy.rb +11 -0
  327. data/spec/support/templates/policies/application_policy.rb +45 -0
  328. data/spec/support/templates/policies/category_policy.rb +7 -0
  329. data/spec/support/templates/policies/post_policy.rb +15 -0
  330. data/spec/support/templates/policies/store_policy.rb +11 -0
  331. data/spec/support/templates/policies/user_policy.rb +11 -0
  332. data/spec/support/templates/post_decorator.rb +4 -46
  333. data/spec/unit/abstract_view_factory_spec.rb +11 -11
  334. data/spec/unit/action_builder_spec.rb +24 -18
  335. data/spec/unit/active_admin_spec.rb +2 -2
  336. data/spec/unit/application_spec.rb +30 -31
  337. data/spec/unit/asset_registration_spec.rb +11 -11
  338. data/spec/unit/authorization/authorization_adapter_spec.rb +7 -7
  339. data/spec/unit/authorization/controller_authorization_spec.rb +11 -11
  340. data/spec/unit/authorization/index_overriding_spec.rb +22 -0
  341. data/spec/unit/auto_link_spec.rb +42 -5
  342. data/spec/unit/batch_actions/resource_spec.rb +15 -14
  343. data/spec/unit/batch_actions/settings_spec.rb +18 -18
  344. data/spec/unit/belongs_to_spec.rb +26 -17
  345. data/spec/unit/cancan_adapter_spec.rb +4 -4
  346. data/spec/unit/comments_spec.rb +99 -39
  347. data/spec/unit/component_spec.rb +3 -3
  348. data/spec/unit/config_shared_examples.rb +8 -8
  349. data/spec/unit/controller_filters_spec.rb +26 -14
  350. data/spec/unit/csv_builder_spec.rb +152 -24
  351. data/spec/unit/dependency_spec.rb +135 -0
  352. data/spec/unit/devise_spec.rb +17 -37
  353. data/spec/unit/dsl_spec.rb +70 -9
  354. data/spec/unit/event_spec.rb +9 -9
  355. data/spec/unit/filters/filter_form_builder_spec.rb +167 -157
  356. data/spec/unit/filters/resource_spec.rb +35 -33
  357. data/spec/unit/form_builder_spec.rb +383 -145
  358. data/spec/unit/generators/install_spec.rb +5 -5
  359. data/spec/unit/helpers/collection_spec.rb +18 -18
  360. data/spec/unit/helpers/scope_chain_spec.rb +5 -5
  361. data/spec/unit/helpers/settings_spec.rb +4 -4
  362. data/spec/unit/i18n_spec.rb +12 -0
  363. data/spec/unit/menu_collection_spec.rb +14 -14
  364. data/spec/unit/menu_item_spec.rb +42 -42
  365. data/spec/unit/menu_spec.rb +20 -20
  366. data/spec/unit/namespace/authorization_spec.rb +5 -5
  367. data/spec/unit/namespace/register_page_spec.rb +9 -9
  368. data/spec/unit/namespace/register_resource_spec.rb +26 -28
  369. data/spec/unit/namespace_spec.rb +20 -20
  370. data/spec/unit/order_clause_spec.rb +81 -0
  371. data/spec/unit/page_controller_spec.rb +1 -1
  372. data/spec/unit/page_spec.rb +18 -12
  373. data/spec/unit/pretty_format_spec.rb +42 -14
  374. data/spec/unit/pundit_adapter_spec.rb +98 -0
  375. data/spec/unit/resource/action_items_spec.rb +13 -10
  376. data/spec/unit/resource/includes_spec.rb +21 -0
  377. data/spec/unit/resource/menu_spec.rb +1 -1
  378. data/spec/unit/resource/naming_spec.rb +23 -23
  379. data/spec/unit/resource/page_presenters_spec.rb +8 -8
  380. data/spec/unit/resource/pagination_spec.rb +6 -6
  381. data/spec/unit/resource/routes_spec.rb +10 -10
  382. data/spec/unit/resource/scopes_spec.rb +14 -7
  383. data/spec/unit/resource/sidebars_spec.rb +6 -6
  384. data/spec/unit/resource_collection_spec.rb +66 -68
  385. data/spec/unit/resource_controller/data_access_spec.rb +39 -21
  386. data/spec/unit/resource_controller/decorators_spec.rb +83 -0
  387. data/spec/unit/resource_controller/sidebars_spec.rb +7 -8
  388. data/spec/unit/resource_controller_spec.rb +66 -62
  389. data/spec/unit/resource_registration_spec.rb +12 -12
  390. data/spec/unit/resource_spec.rb +75 -40
  391. data/spec/unit/routing_spec.rb +39 -31
  392. data/spec/unit/scope_spec.rb +112 -30
  393. data/spec/unit/settings_spec.rb +51 -21
  394. data/spec/unit/view_factory_spec.rb +2 -2
  395. data/spec/unit/view_helpers/breadcrumbs_spec.rb +137 -69
  396. data/spec/unit/view_helpers/display_name_spec.rb +49 -21
  397. data/spec/unit/view_helpers/download_format_links_helper_spec.rb +5 -5
  398. data/spec/unit/view_helpers/fields_for_spec.rb +18 -18
  399. data/spec/unit/view_helpers/flash_helper_spec.rb +25 -0
  400. data/spec/unit/view_helpers/form_helper_spec.rb +9 -22
  401. data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +59 -21
  402. data/spec/unit/views/components/action_list_popover_spec.rb +16 -6
  403. data/spec/unit/views/components/attributes_table_spec.rb +94 -52
  404. data/spec/unit/views/components/batch_action_popover_spec.rb +20 -6
  405. data/spec/unit/views/components/blank_slate_spec.rb +14 -4
  406. data/spec/unit/views/components/columns_spec.rb +52 -22
  407. data/spec/unit/views/components/index_list_spec.rb +11 -8
  408. data/spec/unit/views/components/index_table_for_spec.rb +46 -0
  409. data/spec/unit/views/components/paginated_collection_spec.rb +68 -59
  410. data/spec/unit/views/components/panel_spec.rb +32 -21
  411. data/spec/unit/views/components/popover_spec.rb +7 -7
  412. data/spec/unit/views/components/sidebar_section_spec.rb +18 -8
  413. data/spec/unit/views/components/site_title_spec.rb +8 -8
  414. data/spec/unit/views/components/status_tag_spec.rb +178 -38
  415. data/spec/unit/views/components/table_for_spec.rb +227 -44
  416. data/spec/unit/views/components/tabs_spec.rb +39 -0
  417. data/spec/unit/views/components/unsupported_browser_spec.rb +47 -0
  418. data/spec/unit/views/pages/form_spec.rb +17 -10
  419. data/spec/unit/views/pages/index_spec.rb +60 -0
  420. data/spec/unit/views/pages/layout_spec.rb +17 -21
  421. data/spec/unit/views/pages/show_spec.rb +16 -3
  422. data/spec/unit/views/tabbed_navigation_spec.rb +61 -52
  423. data/tasks/docs.rake +1 -1
  424. data/tasks/parallel_tests.rake +8 -2
  425. data/tasks/test.rake +8 -4
  426. data/tasks/yard.rake +7 -5
  427. metadata +180 -101
  428. data/app/assets/images/active_admin/admin_notes_icon.png +0 -0
  429. data/app/assets/images/active_admin/datepicker/datepicker-header-bg.png +0 -0
  430. data/app/assets/images/active_admin/datepicker/datepicker-next-link-icon.png +0 -0
  431. data/app/assets/images/active_admin/datepicker/datepicker-nipple.png +0 -0
  432. data/app/assets/images/active_admin/datepicker/datepicker-prev-link-icon.png +0 -0
  433. data/app/assets/images/active_admin/index_list_icons/block_icon.svg +0 -10
  434. data/app/assets/images/active_admin/index_list_icons/blog_icon.svg +0 -4
  435. data/app/assets/images/active_admin/index_list_icons/grid_icon.svg +0 -13
  436. data/app/assets/images/active_admin/index_list_icons/table_icon.svg +0 -3
  437. data/app/assets/images/active_admin/loading.gif +0 -0
  438. data/app/assets/javascripts/active_admin/components/application.js.coffee +0 -23
  439. data/app/assets/javascripts/active_admin/components/batch_actions.js.coffee +0 -26
  440. data/app/assets/javascripts/active_admin/components/has_many.js.coffee +0 -41
  441. data/app/assets/stylesheets/active_admin/components/_batch_actions.css.scss +0 -11
  442. data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +0 -39
  443. data/app/assets/stylesheets/active_admin/components/_table_tools.css.scss +0 -95
  444. data/app/views/active_admin/dashboard/index.html.arb +0 -1
  445. data/app/views/active_admin/resource/index.csv.erb +0 -17
  446. data/docs/3-index-pages/create-an-index.md +0 -29
  447. data/lib/active_admin/inputs/filter_base.rb +0 -33
  448. data/lib/active_admin/inputs/filter_base/search_method_select.rb +0 -73
  449. data/lib/active_admin/inputs/filter_boolean_input.rb +0 -32
  450. data/lib/active_admin/inputs/filter_check_boxes_input.rb +0 -51
  451. data/lib/active_admin/inputs/filter_date_range_input.rb +0 -34
  452. data/lib/active_admin/inputs/filter_numeric_input.rb +0 -10
  453. data/lib/active_admin/inputs/filter_select_input.rb +0 -61
  454. data/lib/active_admin/inputs/filter_string_input.rb +0 -24
  455. data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +0 -7
  456. data/spec/integration/memory_spec.rb +0 -29
  457. data/spec/integration/stylesheets_spec.rb +0 -41
  458. data/spec/javascripts/compiled/jquery.aa.checkbox-toggler-spec.js +0 -60
  459. data/spec/javascripts/compiled/jquery.aa.popover-spec.js +0 -106
  460. data/spec/javascripts/compiled/jquery.aa.table-checkbox-toggler-spec.js +0 -37
  461. data/spec/javascripts/helpers/vendor/jasmine-fixture-0.0.5.js +0 -108
  462. data/spec/javascripts/helpers/vendor/jasmine-jquery.js +0 -288
  463. data/spec/javascripts/helpers/vendor/sinon-1.2.0.js +0 -2915
  464. data/spec/javascripts/support/jquery-ui-1.8.16.custom.min.js +0 -34
  465. data/spec/javascripts/support/jquery.min.js +0 -4
  466. data/spec/spec_helper_without_rails.rb +0 -16
  467. data/tasks/js.rake +0 -32
@@ -32,7 +32,7 @@ module ActiveAdmin
32
32
  #
33
33
  # @param [Symbol, String] action The action to get the config for
34
34
  # @param [String] type The string specified in the presenters index_name method
35
- # @returns [PagePresenter, nil]
35
+ # @return [PagePresenter, nil]
36
36
  def get_page_presenter(action, type=nil)
37
37
 
38
38
  if action.to_s == "index" && type && page_presenters[:index].kind_of?(Hash)
@@ -1,13 +1,13 @@
1
1
  module ActiveAdmin
2
2
  class Resource
3
3
  module Routes
4
- # @params params [Hash] of params: {study_id: 3}
4
+ # @param params [Hash] of params: { study_id: 3 }
5
5
  # @return [String] the path to this resource collection page
6
6
  # @example "/admin/posts"
7
7
  def route_collection_path(params = {})
8
8
  RouteBuilder.new(self).collection_path(params)
9
9
  end
10
-
10
+
11
11
  # @param resource [ActiveRecord::Base] the instance we want the path of
12
12
  # @return [String] the path to this resource collection page
13
13
  # @example "/admin/posts/1"
@@ -15,13 +15,17 @@ module ActiveAdmin
15
15
  RouteBuilder.new(self).instance_path(resource)
16
16
  end
17
17
 
18
+ def route_edit_instance_path(resource)
19
+ RouteBuilder.new(self).edit_instance_path(resource)
20
+ end
21
+
18
22
  # Returns the routes prefix for this config
19
23
  def route_prefix
20
24
  namespace.module_name.try(:underscore)
21
25
  end
22
26
 
23
27
  def route_uncountable?
24
- config = controller.resources_configuration[:self]
28
+ config = resources_configuration[:self]
25
29
 
26
30
  config[:route_collection_name] == config[:route_instance_name]
27
31
  end
@@ -35,29 +39,41 @@ module ActiveAdmin
35
39
 
36
40
  def collection_path(params)
37
41
  route_name = route_name(
38
- resource.controller.resources_configuration[:self][:route_collection_name],
39
- (resource.route_uncountable? ? 'index_path' : 'path')
42
+ resource.resources_configuration[:self][:route_collection_name],
43
+ suffix: (resource.route_uncountable? ? "index_path" : "path")
40
44
  )
41
45
 
42
- routes.send(route_name, *route_collection_params(params))
46
+ routes.public_send route_name, *route_collection_params(params)
43
47
  end
44
48
 
45
49
  # @return [String] the path to this resource collection page
46
50
  # @param instance [ActiveRecord::Base] the instance we want the path of
47
51
  # @example "/admin/posts/1"
48
52
  def instance_path(instance)
49
- route_name = route_name(resource.controller.resources_configuration[:self][:route_instance_name])
53
+ route_name = route_name(resource.resources_configuration[:self][:route_instance_name])
54
+
55
+ routes.public_send route_name, *route_instance_params(instance)
56
+ end
57
+
58
+ # @return [String] the path to the edit page of this resource
59
+ # @param instance [ActiveRecord::Base] the instance we want the path of
60
+ # @example "/admin/posts/1/edit"
61
+ def edit_instance_path(instance)
62
+ path = resource.resources_configuration[:self][:route_instance_name]
63
+ route_name = route_name(path, action: :edit)
50
64
 
51
- routes.send(route_name, *route_instance_params(instance))
65
+ routes.public_send route_name, *route_instance_params(instance)
52
66
  end
53
67
 
54
68
  private
55
69
 
56
70
  attr_reader :resource
57
71
 
58
- def route_name(resource_path_name, suffix = 'path')
72
+ def route_name(resource_path_name, options = {})
73
+ suffix = options[:suffix] || "path"
59
74
  route = []
60
75
 
76
+ route << options[:action] # "edit" or "new"
61
77
  route << resource.route_prefix # "admin"
62
78
  route << belongs_to_name if nested? # "category"
63
79
  route << resource_path_name # "posts" or "post"
@@ -70,7 +86,7 @@ module ActiveAdmin
70
86
  # @return params to pass to instance path
71
87
  def route_instance_params(instance)
72
88
  if nested?
73
- [instance.send(belongs_to_name).to_param, instance.to_param]
89
+ [instance.public_send(belongs_to_name).to_param, instance.to_param]
74
90
  else
75
91
  instance.to_param
76
92
  end
@@ -20,7 +20,7 @@ module ActiveAdmin
20
20
  # method to call as the association. If its different, you can
21
21
  # pass in the association_method as an option.
22
22
  #
23
- # scope_to :current_user, :association_method => :blog_posts
23
+ # scope_to :current_user, association_method: :blog_posts
24
24
  #
25
25
  # will result in the following
26
26
  #
@@ -28,11 +28,11 @@ module ActiveAdmin
28
28
  #
29
29
  # To conditionally use this scope, you can use conditional procs
30
30
  #
31
- # scope_to :current_user, :if => proc{ admin_user_signed_in? }
31
+ # scope_to :current_user, if: proc{ admin_user_signed_in? }
32
32
  #
33
33
  # or
34
34
  #
35
- # scope_to :current_user, :unless => proc{ current_user.admin? }
35
+ # scope_to :current_user, unless: proc{ current_user.admin? }
36
36
  #
37
37
  def scope_to(*args, &block)
38
38
  options = args.extract_options!
@@ -55,10 +55,10 @@ module ActiveAdmin
55
55
 
56
56
  def scope_to_config
57
57
  @scope_to_config ||= {
58
- :method => nil,
59
- :association_method => nil,
60
- :if => nil,
61
- :unless => nil
58
+ method: nil,
59
+ association_method: nil,
60
+ if: nil,
61
+ unless: nil
62
62
  }
63
63
  end
64
64
 
@@ -15,6 +15,7 @@ module ActiveAdmin
15
15
 
16
16
  def sidebar_sections_for(action, render_context = nil)
17
17
  sidebar_sections.select{|section| section.display_on?(action, render_context) }
18
+ .sort_by(&:priority)
18
19
  end
19
20
 
20
21
  def sidebar_sections?
@@ -4,14 +4,19 @@ module ActiveAdmin
4
4
  class ResourceCollection
5
5
  include Enumerable
6
6
  extend Forwardable
7
- def_delegators :@resources, :empty?, :has_key?, :keys, :values, :[]=
7
+ def_delegators :@collection, :empty?, :has_key?, :keys, :values, :size
8
8
 
9
9
  def initialize
10
- @resources = {}
10
+ @collection = {}
11
11
  end
12
12
 
13
13
  def add(resource)
14
- @resources[resource.resource_name] ||= resource
14
+ if match = @collection[resource.resource_name]
15
+ raise_if_mismatched! match, resource
16
+ match
17
+ else
18
+ @collection[resource.resource_name] = resource
19
+ end
15
20
  end
16
21
 
17
22
  # Changes `each` to pass in the value, instead of both the key and value.
@@ -19,23 +24,46 @@ module ActiveAdmin
19
24
  values.each &block
20
25
  end
21
26
 
22
- # Finds a resource based on the resource name, the resource class, or the base class.
23
- def [](klass)
24
- if match = @resources[klass]
25
- match
26
- elsif match = real_resources.detect{ |r| [r.resource_name.to_s, r.resource_class.to_s].include? klass.to_s }
27
- match
28
- elsif klass.respond_to? :base_class
29
- real_resources.detect{ |r| r.resource_class.to_s == klass.base_class.to_s }
30
- end
27
+ def [](obj)
28
+ @collection[obj] || find_resource(obj)
31
29
  end
32
30
 
33
31
  private
34
32
 
35
- # REFACTOR: ResourceCollection currently stores Resource and Page objects. That doesn't
36
- # make sense, because by definition a ResourceCollection is a collection of resources.
37
- def real_resources
38
- select{ |r| r.respond_to? :resource_class }
33
+ # Finds a resource based on the resource name, resource class, or base class.
34
+ def find_resource(obj)
35
+ resources.detect do |r|
36
+ r.resource_name.to_s == obj.to_s || r.resource_class.to_s == obj.to_s
37
+ end ||
38
+ if obj.respond_to? :base_class
39
+ resources.detect{ |r| r.resource_class.to_s == obj.base_class.to_s }
40
+ end
41
+ end
42
+
43
+ def resources
44
+ select{ |r| r.class <= Resource } # can otherwise be a Page
45
+ end
46
+
47
+ def raise_if_mismatched!(existing, given)
48
+ if existing.class != given.class
49
+ raise IncorrectClass.new existing, given
50
+ elsif given.class <= Resource && existing.resource_class != given.resource_class
51
+ raise ConfigMismatch.new existing, given
52
+ end
53
+ end
54
+
55
+ class IncorrectClass < StandardError
56
+ def initialize(existing, given)
57
+ super "You're trying to register #{given.resource_name} which is a #{given.class}, " +
58
+ "but #{existing.resource_name}, a #{existing.class} has already claimed that name."
59
+ end
60
+ end
61
+
62
+ class ConfigMismatch < StandardError
63
+ def initialize(existing, given)
64
+ super "You're trying to register #{given.resource_class} as #{given.resource_name}, " +
65
+ "but the existing #{existing.class} config was built for #{existing.resource_class}!"
66
+ end
39
67
  end
40
68
 
41
69
  end
@@ -1,8 +1,8 @@
1
- require 'inherited_resources'
2
1
  require 'active_admin/resource_controller/action_builder'
3
2
  require 'active_admin/resource_controller/data_access'
4
3
  require 'active_admin/resource_controller/decorators'
5
4
  require 'active_admin/resource_controller/scoping'
5
+ require 'active_admin/resource_controller/streaming'
6
6
  require 'active_admin/resource_controller/sidebars'
7
7
  require 'active_admin/resource_controller/resource_class_methods'
8
8
 
@@ -13,20 +13,21 @@ module ActiveAdmin
13
13
  layout :determine_active_admin_layout
14
14
 
15
15
  respond_to :html, :xml, :json
16
- respond_to :csv, :only => :index
16
+ respond_to :csv, only: :index
17
17
 
18
18
  include ActionBuilder
19
19
  include Decorators
20
20
  include DataAccess
21
21
  include Scoping
22
+ include Streaming
22
23
  include Sidebars
23
24
  extend ResourceClassMethods
24
25
 
25
26
  def self.active_admin_config=(config)
26
27
  if @active_admin_config = config
27
- defaults :resource_class => config.resource_class,
28
- :route_prefix => config.route_prefix,
29
- :instance_name => config.resource_name.singular
28
+ defaults resource_class: config.resource_class,
29
+ route_prefix: config.route_prefix,
30
+ instance_name: config.resource_name.singular
30
31
  end
31
32
  end
32
33
 
@@ -7,13 +7,14 @@ module ActiveAdmin
7
7
  # The module also deals with authorization and resource callbacks.
8
8
  #
9
9
  module DataAccess
10
- extend ActiveSupport::Concern
11
10
 
12
- include ActiveAdmin::Callbacks
13
- include ActiveAdmin::ScopeChain
11
+ def self.included(base)
12
+ base.class_exec do
13
+ include Callbacks
14
+ include ScopeChain
14
15
 
15
- included do
16
- define_active_admin_callbacks :build, :create, :update, :save, :destroy
16
+ define_active_admin_callbacks :build, :create, :update, :save, :destroy
17
+ end
17
18
  end
18
19
 
19
20
  protected
@@ -25,16 +26,13 @@ module ActiveAdmin
25
26
  # either the @collection instance variable or an instance variable named
26
27
  # after the resource that the collection is for. eg: Post => @post.
27
28
  #
28
- # @returns [ActiveRecord::Relation] The collection for the index
29
+ # @return [ActiveRecord::Relation] The collection for the index
29
30
  def collection
30
- _collection = get_collection_ivar
31
-
32
- return _collection if _collection
33
-
34
- _collection = find_collection
35
- authorize! ActiveAdmin::Authorization::READ, active_admin_config.resource_class
36
-
37
- set_collection_ivar _collection
31
+ get_collection_ivar || begin
32
+ collection = find_collection
33
+ authorize! Authorization::READ, active_admin_config.resource_class
34
+ set_collection_ivar collection
35
+ end
38
36
  end
39
37
 
40
38
 
@@ -43,7 +41,7 @@ module ActiveAdmin
43
41
  # some additional db # work before your controller returns and
44
42
  # authorizes the collection.
45
43
  #
46
- # @returns [ActiveRecord::Relation] The collectin for the index
44
+ # @return [ActiveRecord::Relation] The collectin for the index
47
45
  def find_collection
48
46
  collection = scoped_collection
49
47
 
@@ -51,8 +49,13 @@ module ActiveAdmin
51
49
  collection = apply_sorting(collection)
52
50
  collection = apply_filtering(collection)
53
51
  collection = apply_scoping(collection)
54
- collection = apply_pagination(collection)
55
- collection = apply_decorator(collection)
52
+ collection = apply_includes(collection)
53
+
54
+ unless request.format == 'text/csv'
55
+ collection = apply_pagination(collection)
56
+ end
57
+
58
+ collection = apply_collection_decorator(collection)
56
59
 
57
60
  collection
58
61
  end
@@ -81,37 +84,27 @@ module ActiveAdmin
81
84
  # * update
82
85
  # * destroy
83
86
  #
84
- # @returns [ActiveRecord::Base] An active record object
87
+ # @return [ActiveRecord::Base] An active record object
85
88
  def resource
86
- _resource = get_resource_ivar
87
-
88
- return _resource if _resource
89
-
90
- _resource = find_resource
91
- authorize_resource! _resource
89
+ get_resource_ivar || begin
90
+ resource = find_resource
91
+ authorize_resource! resource
92
92
 
93
- if decorator?
94
- _resource = decorator_class.new(_resource)
93
+ resource = apply_decorator resource
94
+ set_resource_ivar resource
95
95
  end
96
-
97
- set_resource_ivar(_resource)
98
- end
99
-
100
- def decorator?
101
- !!active_admin_config.decorator_class
102
- end
103
-
104
- def decorator_class
105
- active_admin_config.decorator_class
106
96
  end
107
97
 
108
-
109
98
  # Does the actual work of finding a resource in the database. This
110
99
  # method uses the finder method as defined in InheritedResources.
111
100
  #
112
- # @returns [ActiveRecord::Base] An active record object.
101
+ # Note that public_send can't be used here because Rails 3.2's
102
+ # ActiveRecord::Associations::CollectionProxy (belongs_to associations)
103
+ # mysteriously returns an Enumerator object.
104
+ #
105
+ # @return [ActiveRecord::Base] An active record object.
113
106
  def find_resource
114
- scoped_collection.send(method_for_find, params[:id])
107
+ scoped_collection.send method_for_find, params[:id]
115
108
  end
116
109
 
117
110
 
@@ -122,31 +115,34 @@ module ActiveAdmin
122
115
  # This method is used to instantiate and authorize new resources in the
123
116
  # new and create controller actions.
124
117
  #
125
- # @returns [ActiveRecord::Base] An un-saved active record base object
118
+ # @return [ActiveRecord::Base] An un-saved active record base object
126
119
  def build_resource
127
- return resource if resource = get_resource_ivar
128
-
129
- resource = build_new_resource
120
+ get_resource_ivar || begin
121
+ resource = build_new_resource
122
+ run_build_callbacks resource
123
+ authorize_resource! resource
130
124
 
131
- run_build_callbacks resource
132
- authorize_resource! resource
133
-
134
- set_resource_ivar(resource)
125
+ resource = apply_decorator resource
126
+ set_resource_ivar resource
127
+ end
135
128
  end
136
129
 
137
130
  # Builds a new resource. This method uses the method_for_build provided
138
131
  # by Inherited Resources.
139
132
  #
140
- # @returns [ActiveRecord::Base] An un-saved active record base object
133
+ # Note that public_send can't be used here w/ Rails 3.2 & a belongs_to
134
+ # config, or you'll get undefined method `build' for []:Array.
135
+ #
136
+ # @return [ActiveRecord::Base] An un-saved active record base object
141
137
  def build_new_resource
142
- scoped_collection.send(method_for_build, *resource_params)
138
+ scoped_collection.send method_for_build, *resource_params
143
139
  end
144
140
 
145
141
  # Calls all the appropriate callbacks and then creates the new resource.
146
142
  #
147
143
  # @param [ActiveRecord::Base] object The new resource to create
148
144
  #
149
- # @returns [void]
145
+ # @return [void]
150
146
  def create_resource(object)
151
147
  run_create_callbacks object do
152
148
  save_resource(object)
@@ -157,7 +153,7 @@ module ActiveAdmin
157
153
  #
158
154
  # @param [ActiveRecord::Base] object The new resource to save
159
155
  #
160
- # @returns [void]
156
+ # @return [void]
161
157
  def save_resource(object)
162
158
  run_save_callbacks object do
163
159
  object.save
@@ -173,7 +169,7 @@ module ActiveAdmin
173
169
  # and the Active Record "role" in the second. The role
174
170
  # may be set to nil.
175
171
  #
176
- # @returns [void]
172
+ # @return [void]
177
173
  def update_resource(object, attributes)
178
174
  if object.respond_to?(:assign_attributes)
179
175
  object.assign_attributes(*attributes)
@@ -188,7 +184,7 @@ module ActiveAdmin
188
184
 
189
185
  # Destroys an object from the database and calls appropriate callbacks.
190
186
  #
191
- # @returns [void]
187
+ # @return [void]
192
188
  def destroy_resource(object)
193
189
  run_destroy_callbacks object do
194
190
  object.destroy
@@ -208,23 +204,19 @@ module ActiveAdmin
208
204
  #
209
205
  # @param [ActiveRecord::Relation] collection The collection to scope
210
206
  #
211
- # @retruns [ActiveRecord::Relation] a scoped collection of query
207
+ # @return [ActiveRecord::Relation] a scoped collection of query
212
208
  def apply_authorization_scope(collection)
213
209
  action_name = action_to_permission(params[:action])
214
210
  active_admin_authorization.scope_collection(collection, action_name)
215
211
  end
216
212
 
217
-
218
213
  def apply_sorting(chain)
219
214
  params[:order] ||= active_admin_config.sort_order
220
- if params[:order] && params[:order] =~ /^([\w\_\.]+)_(desc|asc)$/
221
- column = $1
222
- order = $2
223
- table = active_admin_config.resource_column_names.include?(column) ? active_admin_config.resource_table_name : nil
224
- table_column = (column =~ /\./) ? column :
225
- [table, active_admin_config.resource_quoted_column_name(column)].compact.join(".")
226
-
227
- chain.reorder("#{table_column} #{order}")
215
+
216
+ order_clause = OrderClause.new params[:order]
217
+
218
+ if order_clause.valid?
219
+ chain.reorder(order_clause.to_sql(active_admin_config))
228
220
  else
229
221
  chain # just return the chain
230
222
  end
@@ -237,13 +229,12 @@ module ActiveAdmin
237
229
  @search.result
238
230
  end
239
231
 
240
- def clean_search_params(search_params)
241
- return {} unless search_params.is_a?(Hash)
242
- search_params = search_params.dup
243
- search_params.delete_if do |key, value|
244
- value == ""
232
+ def clean_search_params(params)
233
+ if params.is_a? Hash
234
+ params.dup.delete_if{ |key, value| value.blank? }
235
+ else
236
+ {}
245
237
  end
246
- search_params
247
238
  end
248
239
 
249
240
  def apply_scoping(chain)
@@ -256,43 +247,57 @@ module ActiveAdmin
256
247
  end
257
248
  end
258
249
 
250
+ def apply_includes(chain)
251
+ if active_admin_config.includes.any?
252
+ chain.includes *active_admin_config.includes
253
+ else
254
+ chain
255
+ end
256
+ end
257
+
259
258
  def collection_before_scope
260
259
  @collection_before_scope
261
260
  end
262
261
 
263
262
  def current_scope
264
263
  @current_scope ||= if params[:scope]
265
- active_admin_config.get_scope_by_id(params[:scope]) if params[:scope]
264
+ active_admin_config.get_scope_by_id(params[:scope])
266
265
  else
267
266
  active_admin_config.default_scope(self)
268
267
  end
269
268
  end
270
269
 
271
270
  def apply_pagination(chain)
272
- page_method = Kaminari.config.page_method_name
273
- page_param = params[Kaminari.config.param_name]
271
+ page_method_name = Kaminari.config.page_method_name
272
+ page = params[Kaminari.config.param_name]
274
273
 
275
- chain.send(page_method, page_param).per(per_page)
274
+ chain.public_send(page_method_name, page).per(per_page)
276
275
  end
277
276
 
278
277
  def per_page
279
- return max_per_page if active_admin_config.paginate == false
280
-
281
- @per_page || active_admin_config.per_page
278
+ if active_admin_config.paginate
279
+ dynamic_per_page || configured_per_page
280
+ else
281
+ max_per_page
282
+ end
282
283
  end
283
284
 
284
- def max_per_page
285
- 10_000
285
+ def dynamic_per_page
286
+ params[:per_page] || @per_page
286
287
  end
287
288
 
288
- def apply_decorator(chain)
289
- if decorator?
290
- decorator_class.decorate_collection(chain)
289
+ def configured_per_page
290
+ if active_admin_config.per_page.is_a?(Array)
291
+ active_admin_config.per_page[0]
291
292
  else
292
- chain
293
+ active_admin_config.per_page
293
294
  end
294
295
  end
295
296
 
297
+ def max_per_page
298
+ 10_000
299
+ end
300
+
296
301
  end
297
302
  end
298
303
  end