yousty-activeadmin 1.0.4.pre → 1.0.5.pre

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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