activeadmin 1.0.0.pre1 → 2.9.0

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 (595) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +587 -939
  3. data/CODE_OF_CONDUCT.md +74 -0
  4. data/CONTRIBUTING.md +110 -59
  5. data/LICENSE +0 -5
  6. data/README.md +80 -61
  7. data/app/assets/javascripts/active_admin/base.js +517 -0
  8. data/app/assets/stylesheets/active_admin/_base.scss +31 -34
  9. data/app/assets/stylesheets/active_admin/_forms.scss +33 -35
  10. data/app/assets/stylesheets/active_admin/_header.scss +40 -8
  11. data/app/assets/stylesheets/active_admin/_mixins.scss +1 -1
  12. data/app/assets/stylesheets/active_admin/_normalize.scss +447 -0
  13. data/app/assets/stylesheets/active_admin/components/_batch_actions.scss +0 -5
  14. data/app/assets/stylesheets/active_admin/components/_buttons.scss +0 -5
  15. data/app/assets/stylesheets/active_admin/components/_comments.scss +2 -2
  16. data/app/assets/stylesheets/active_admin/components/_pagination.scss +11 -0
  17. data/app/assets/stylesheets/active_admin/components/_scopes.scss +3 -0
  18. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +0 -4
  19. data/app/assets/stylesheets/active_admin/components/_tables.scss +5 -3
  20. data/app/assets/stylesheets/active_admin/components/_tabs.scss +1 -1
  21. data/app/assets/stylesheets/active_admin/mixins/_all.scss +8 -11
  22. data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +1 -1
  23. data/app/assets/stylesheets/active_admin/mixins/_sections.scss +0 -1
  24. data/app/assets/stylesheets/active_admin/mixins/_typography.scss +1 -1
  25. data/app/assets/stylesheets/active_admin/mixins/_variables.scss +9 -1
  26. data/app/assets/stylesheets/active_admin/print.scss +3 -4
  27. data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +1 -1
  28. data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +0 -5
  29. data/app/javascript/active_admin/base.js +28 -0
  30. data/app/javascript/active_admin/ext/jquery-ui.js +7 -0
  31. data/app/javascript/active_admin/ext/jquery.js +9 -0
  32. data/app/javascript/active_admin/initializers/batch-actions.js +61 -0
  33. data/app/javascript/active_admin/initializers/checkbox-toggler.js +3 -0
  34. data/app/javascript/active_admin/initializers/datepicker.js +16 -0
  35. data/app/javascript/active_admin/initializers/dropdown-menu.js +9 -0
  36. data/app/javascript/active_admin/initializers/filters.js +10 -0
  37. data/app/javascript/active_admin/initializers/has-many.js +95 -0
  38. data/app/javascript/active_admin/initializers/per-page.js +13 -0
  39. data/app/javascript/active_admin/initializers/table-checkbox-toggler.js +3 -0
  40. data/app/javascript/active_admin/initializers/tabs.js +6 -0
  41. data/app/javascript/active_admin/lib/checkbox-toggler.js +49 -0
  42. data/app/javascript/active_admin/lib/dropdown-menu.js +116 -0
  43. data/app/javascript/active_admin/lib/filters.js +39 -0
  44. data/app/javascript/active_admin/lib/modal-dialog.js +63 -0
  45. data/app/javascript/active_admin/lib/per-page.js +38 -0
  46. data/app/javascript/active_admin/lib/table-checkbox-toggler.js +38 -0
  47. data/app/javascript/active_admin/lib/utils.js +40 -0
  48. data/app/views/active_admin/devise/confirmations/new.html.erb +2 -2
  49. data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +1 -1
  50. data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +2 -2
  51. data/app/views/active_admin/devise/passwords/edit.html.erb +2 -2
  52. data/app/views/active_admin/devise/passwords/new.html.erb +2 -2
  53. data/app/views/active_admin/devise/registrations/new.html.erb +3 -4
  54. data/app/views/active_admin/devise/sessions/new.html.erb +2 -2
  55. data/app/views/active_admin/devise/shared/_error_messages.html.erb +15 -0
  56. data/app/views/active_admin/devise/shared/_links.erb +12 -6
  57. data/app/views/active_admin/devise/unlocks/new.html.erb +2 -2
  58. data/app/views/kaminari/active_admin/_first_page.html.erb +11 -0
  59. data/app/views/kaminari/active_admin/_gap.html.erb +8 -0
  60. data/app/views/kaminari/active_admin/_last_page.html.erb +11 -0
  61. data/app/views/kaminari/active_admin/_next_page.html.erb +11 -0
  62. data/app/views/kaminari/active_admin/_page.html.erb +12 -0
  63. data/app/views/kaminari/active_admin/_paginator.html.erb +25 -0
  64. data/app/views/kaminari/active_admin/_prev_page.html.erb +11 -0
  65. data/app/views/kaminari/active_admin_countless/_first_page.html.erb +11 -0
  66. data/app/views/kaminari/active_admin_countless/_gap.html.erb +8 -0
  67. data/app/views/kaminari/active_admin_countless/_next_page.html.erb +11 -0
  68. data/app/views/kaminari/active_admin_countless/_page.html.erb +12 -0
  69. data/app/views/kaminari/active_admin_countless/_paginator.html.erb +24 -0
  70. data/app/views/kaminari/active_admin_countless/_prev_page.html.erb +11 -0
  71. data/app/views/layouts/active_admin_logged_out.html.erb +21 -7
  72. data/config/locales/ar.yml +62 -47
  73. data/config/locales/az.yml +138 -0
  74. data/config/locales/bg.yml +1 -3
  75. data/config/locales/bs.yml +1 -2
  76. data/config/locales/ca.yml +2 -4
  77. data/config/locales/cs.yml +1 -2
  78. data/config/locales/da.yml +45 -14
  79. data/config/locales/de-CH.yml +4 -3
  80. data/config/locales/de.yml +46 -3
  81. data/config/locales/el.yml +3 -4
  82. data/config/locales/en-CA.yml +139 -0
  83. data/config/locales/en-GB.yml +46 -5
  84. data/config/locales/en.yml +44 -9
  85. data/config/locales/eo.yml +145 -0
  86. data/config/locales/es-MX.yml +9 -6
  87. data/config/locales/es.yml +63 -14
  88. data/config/locales/fa.yml +1 -2
  89. data/config/locales/fi.yml +2 -3
  90. data/config/locales/fr.yml +36 -8
  91. data/config/locales/he.yml +53 -7
  92. data/config/locales/hr.yml +1 -2
  93. data/config/locales/hu.yml +6 -3
  94. data/config/locales/id.yml +135 -0
  95. data/config/locales/it.yml +49 -4
  96. data/config/locales/ja.yml +31 -7
  97. data/config/locales/ko.yml +66 -36
  98. data/config/locales/lt.yml +27 -6
  99. data/config/locales/lv.yml +3 -4
  100. data/config/locales/mk.yml +134 -0
  101. data/config/locales/nb.yml +22 -8
  102. data/config/locales/nl.yml +26 -3
  103. data/config/locales/pl.yml +75 -5
  104. data/config/locales/pt-BR.yml +24 -2
  105. data/config/locales/pt-PT.yml +1 -2
  106. data/config/locales/ro.yml +1 -2
  107. data/config/locales/ru.yml +21 -4
  108. data/config/locales/sk.yml +168 -0
  109. data/config/locales/sv-SE.yml +50 -8
  110. data/config/locales/tr.yml +92 -45
  111. data/config/locales/uk.yml +30 -16
  112. data/config/locales/vi.yml +53 -12
  113. data/config/locales/zh-CN.yml +44 -7
  114. data/config/locales/zh-TW.yml +42 -3
  115. data/docs/.gitignore +1 -0
  116. data/docs/0-installation.md +68 -18
  117. data/docs/1-general-configuration.md +88 -4
  118. data/docs/10-custom-pages.md +56 -2
  119. data/docs/11-decorators.md +20 -5
  120. data/docs/12-arbre-components.md +75 -11
  121. data/docs/13-authorization-adapter.md +73 -36
  122. data/docs/14-gotchas.md +64 -18
  123. data/docs/2-resource-customization.md +91 -23
  124. data/docs/3-index-pages/custom-index.md +5 -1
  125. data/docs/3-index-pages/index-as-block.md +3 -5
  126. data/docs/3-index-pages/index-as-blog.md +4 -6
  127. data/docs/3-index-pages/index-as-grid.md +3 -5
  128. data/docs/3-index-pages/index-as-table.md +46 -9
  129. data/docs/3-index-pages.md +73 -10
  130. data/docs/4-csv-format.md +35 -0
  131. data/docs/5-forms.md +96 -18
  132. data/docs/6-show-pages.md +13 -25
  133. data/docs/7-sidebars.md +13 -1
  134. data/docs/8-custom-actions.md +18 -1
  135. data/docs/9-batch-actions.md +9 -5
  136. data/docs/CNAME +1 -0
  137. data/docs/Gemfile +3 -0
  138. data/docs/Gemfile.lock +259 -0
  139. data/docs/_config.yml +4 -0
  140. data/docs/_includes/footer.html +8 -0
  141. data/docs/_includes/google-analytics.html +16 -0
  142. data/docs/_includes/head.html +7 -0
  143. data/docs/_includes/toc.html +98 -0
  144. data/docs/_includes/top-menu.html +17 -0
  145. data/docs/_layouts/default.html +21 -0
  146. data/docs/documentation.md +60 -0
  147. data/docs/images/activeadmin.png +0 -0
  148. data/docs/images/code-header.png +0 -0
  149. data/docs/images/divider.png +0 -0
  150. data/docs/images/features.png +0 -0
  151. data/docs/images/tidelift.svg +14 -0
  152. data/docs/index.html +226 -0
  153. data/docs/stylesheets/main.css +1205 -0
  154. data/lib/active_admin/abstract_view_factory.rb +13 -51
  155. data/lib/active_admin/application.rb +105 -138
  156. data/lib/active_admin/application_settings.rb +42 -0
  157. data/lib/active_admin/authorization_adapter.rb +4 -7
  158. data/lib/active_admin/base_controller/authorization.rb +16 -21
  159. data/lib/active_admin/base_controller/menu.rb +10 -10
  160. data/lib/active_admin/base_controller.rb +15 -11
  161. data/lib/active_admin/batch_actions/controller.rb +6 -7
  162. data/lib/active_admin/batch_actions/resource_extension.rb +15 -15
  163. data/lib/active_admin/batch_actions/views/batch_action_form.rb +4 -4
  164. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +8 -7
  165. data/lib/active_admin/batch_actions/views/selection_cells.rb +7 -6
  166. data/lib/active_admin/batch_actions.rb +0 -1
  167. data/lib/active_admin/callbacks.rb +2 -2
  168. data/lib/active_admin/cancan_adapter.rb +1 -1
  169. data/lib/active_admin/collection_decorator.rb +31 -0
  170. data/lib/active_admin/controller_action.rb +2 -1
  171. data/lib/active_admin/csv_builder.rb +30 -20
  172. data/lib/active_admin/dependency.rb +36 -29
  173. data/lib/active_admin/deprecation.rb +0 -25
  174. data/lib/active_admin/devise.rb +9 -9
  175. data/lib/active_admin/dsl.rb +5 -18
  176. data/lib/active_admin/dynamic_setting.rb +38 -0
  177. data/lib/active_admin/dynamic_settings_node.rb +28 -0
  178. data/lib/active_admin/engine.rb +14 -7
  179. data/lib/active_admin/error.rb +6 -6
  180. data/lib/active_admin/filters/active.rb +29 -0
  181. data/lib/active_admin/filters/active_filter.rb +123 -0
  182. data/lib/active_admin/filters/active_sidebar.rb +54 -0
  183. data/lib/active_admin/filters/forms.rb +17 -10
  184. data/lib/active_admin/filters/formtastic_addons.rb +2 -7
  185. data/lib/active_admin/filters/resource_extension.rb +50 -14
  186. data/lib/active_admin/filters.rb +7 -5
  187. data/lib/active_admin/form_builder.rb +112 -67
  188. data/lib/active_admin/generators/boilerplate.rb +53 -0
  189. data/lib/active_admin/helpers/collection.rb +2 -0
  190. data/lib/active_admin/helpers/optional_display.rb +2 -2
  191. data/lib/active_admin/helpers/routes/url_helpers.rb +1 -1
  192. data/lib/active_admin/helpers/scope_chain.rb +1 -0
  193. data/lib/active_admin/inputs/datepicker_input.rb +13 -6
  194. data/lib/active_admin/inputs/filters/base/search_method_select.rb +9 -9
  195. data/lib/active_admin/inputs/filters/base.rb +3 -1
  196. data/lib/active_admin/inputs/filters/boolean_input.rb +1 -1
  197. data/lib/active_admin/inputs/filters/check_boxes_input.rb +1 -1
  198. data/lib/active_admin/inputs/filters/date_picker_input.rb +13 -0
  199. data/lib/active_admin/inputs/filters/date_range_input.rb +25 -9
  200. data/lib/active_admin/inputs/filters/select_input.rb +8 -4
  201. data/lib/active_admin/inputs/filters/text_input.rb +25 -0
  202. data/lib/active_admin/inputs.rb +2 -0
  203. data/lib/active_admin/localizers/resource_localizer.rb +35 -0
  204. data/lib/active_admin/localizers.rb +11 -0
  205. data/lib/active_admin/menu.rb +13 -15
  206. data/lib/active_admin/menu_collection.rb +0 -2
  207. data/lib/active_admin/menu_item.rb +10 -38
  208. data/lib/active_admin/namespace.rb +51 -32
  209. data/lib/active_admin/namespace_settings.rb +126 -0
  210. data/lib/active_admin/order_clause.rb +30 -8
  211. data/lib/active_admin/orm/active_record/comments/comment.rb +6 -20
  212. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +44 -21
  213. data/lib/active_admin/orm/active_record/comments/views.rb +2 -2
  214. data/lib/active_admin/orm/active_record/comments.rb +49 -29
  215. data/lib/active_admin/orm/active_record.rb +1 -1
  216. data/lib/active_admin/page.rb +24 -5
  217. data/lib/active_admin/page_controller.rb +2 -2
  218. data/lib/active_admin/page_dsl.rb +5 -1
  219. data/lib/active_admin/page_presenter.rb +2 -1
  220. data/lib/active_admin/pundit_adapter.rb +22 -9
  221. data/lib/active_admin/resource/action_items.rb +34 -12
  222. data/lib/active_admin/resource/attributes.rb +47 -0
  223. data/lib/active_admin/resource/belongs_to.rb +17 -4
  224. data/lib/active_admin/resource/controllers.rb +1 -1
  225. data/lib/active_admin/resource/menu.rb +9 -6
  226. data/lib/active_admin/resource/model.rb +15 -0
  227. data/lib/active_admin/resource/naming.rb +5 -5
  228. data/lib/active_admin/resource/ordering.rb +11 -0
  229. data/lib/active_admin/resource/page_presenters.rb +1 -1
  230. data/lib/active_admin/resource/pagination.rb +4 -0
  231. data/lib/active_admin/resource/routes.rb +56 -26
  232. data/lib/active_admin/resource/scope_to.rb +7 -7
  233. data/lib/active_admin/resource/scopes.rb +5 -3
  234. data/lib/active_admin/resource/sidebars.rb +2 -2
  235. data/lib/active_admin/resource.rb +80 -22
  236. data/lib/active_admin/resource_collection.rb +5 -3
  237. data/lib/active_admin/resource_controller/action_builder.rb +10 -0
  238. data/lib/active_admin/resource_controller/data_access.rb +56 -43
  239. data/lib/active_admin/resource_controller/decorators.rb +9 -31
  240. data/lib/active_admin/resource_controller/polymorphic_routes.rb +37 -0
  241. data/lib/active_admin/resource_controller/resource_class_methods.rb +2 -0
  242. data/lib/active_admin/resource_controller/scoping.rb +1 -1
  243. data/lib/active_admin/resource_controller/streaming.rb +12 -5
  244. data/lib/active_admin/resource_controller.rb +26 -10
  245. data/lib/active_admin/resource_dsl.rb +67 -21
  246. data/lib/active_admin/router.rb +90 -82
  247. data/lib/active_admin/scope.rb +21 -14
  248. data/lib/active_admin/settings_node.rb +19 -0
  249. data/lib/active_admin/sidebar_section.rb +6 -12
  250. data/lib/active_admin/version.rb +1 -1
  251. data/lib/active_admin/view_factory.rb +17 -18
  252. data/lib/active_admin/view_helpers/auto_link_helper.rb +2 -2
  253. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +5 -5
  254. data/lib/active_admin/view_helpers/display_helper.rb +51 -9
  255. data/lib/active_admin/view_helpers/download_format_links_helper.rb +14 -1
  256. data/lib/active_admin/view_helpers/fields_for.rb +4 -4
  257. data/lib/active_admin/view_helpers/form_helper.rb +2 -2
  258. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +11 -4
  259. data/lib/active_admin/view_helpers/scope_name_helper.rb +16 -0
  260. data/lib/active_admin/view_helpers.rb +2 -2
  261. data/lib/active_admin/views/action_items.rb +1 -1
  262. data/lib/active_admin/views/components/active_admin_form.rb +45 -13
  263. data/lib/active_admin/views/components/attributes_table.rb +11 -29
  264. data/lib/active_admin/views/components/blank_slate.rb +1 -1
  265. data/lib/active_admin/views/components/columns.rb +12 -7
  266. data/lib/active_admin/views/components/dropdown_menu.rb +11 -13
  267. data/lib/active_admin/views/components/index_list.rb +6 -5
  268. data/lib/active_admin/views/components/menu.rb +32 -0
  269. data/lib/active_admin/views/components/menu_item.rb +58 -0
  270. data/lib/active_admin/views/components/paginated_collection.rb +52 -33
  271. data/lib/active_admin/views/components/panel.rb +2 -4
  272. data/lib/active_admin/views/components/scopes.rb +20 -12
  273. data/lib/active_admin/views/components/sidebar.rb +13 -0
  274. data/lib/active_admin/views/components/sidebar_section.rb +6 -1
  275. data/lib/active_admin/views/components/site_title.rb +6 -7
  276. data/lib/active_admin/views/components/status_tag.rb +19 -23
  277. data/lib/active_admin/views/components/table_for.rb +31 -57
  278. data/lib/active_admin/views/components/tabs.rb +17 -5
  279. data/lib/active_admin/views/footer.rb +15 -4
  280. data/lib/active_admin/views/header.rb +3 -16
  281. data/lib/active_admin/views/index_as_blog.rb +3 -4
  282. data/lib/active_admin/views/index_as_grid.rb +28 -28
  283. data/lib/active_admin/views/index_as_table.rb +76 -28
  284. data/lib/active_admin/views/pages/base.rb +45 -58
  285. data/lib/active_admin/views/pages/form.rb +5 -2
  286. data/lib/active_admin/views/pages/index.rb +15 -13
  287. data/lib/active_admin/views/pages/layout.rb +1 -1
  288. data/lib/active_admin/views/pages/show.rb +9 -3
  289. data/lib/active_admin/views/tabbed_navigation.rb +4 -59
  290. data/lib/active_admin/views/title_bar.rb +6 -6
  291. data/lib/active_admin/views.rb +1 -1
  292. data/lib/active_admin.rb +69 -67
  293. data/lib/activeadmin.rb +1 -1
  294. data/lib/generators/active_admin/assets/assets_generator.rb +3 -3
  295. data/lib/generators/active_admin/assets/templates/active_admin.js +1 -0
  296. data/lib/generators/active_admin/assets/templates/{active_admin.css.scss → active_admin.scss} +3 -3
  297. data/lib/generators/active_admin/devise/devise_generator.rb +17 -26
  298. data/lib/generators/active_admin/install/install_generator.rb +18 -8
  299. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +107 -5
  300. data/lib/generators/active_admin/install/templates/{admin_user.rb.erb → admin_users.rb.erb} +1 -3
  301. data/lib/generators/active_admin/install/templates/dashboard.rb +2 -3
  302. data/lib/generators/active_admin/install/templates/migrations/{create_active_admin_comments.rb → create_active_admin_comments.rb.erb} +2 -5
  303. data/lib/generators/active_admin/page/page_generator.rb +1 -1
  304. data/lib/generators/active_admin/page/templates/page.rb +1 -1
  305. data/lib/generators/active_admin/resource/resource_generator.rb +8 -2
  306. data/lib/generators/active_admin/resource/templates/admin.rb.erb +46 -0
  307. data/lib/generators/active_admin/webpacker/plugins/jquery.js +7 -0
  308. data/lib/generators/active_admin/webpacker/templates/active_admin.js +5 -0
  309. data/lib/generators/active_admin/webpacker/templates/active_admin.scss +17 -0
  310. data/lib/generators/active_admin/webpacker/templates/print.scss +2 -0
  311. data/lib/generators/active_admin/webpacker/webpacker_generator.rb +26 -0
  312. data/lib/ransack_ext.rb +11 -3
  313. data/vendor/assets/javascripts/jquery-ui/data.js +41 -0
  314. data/vendor/assets/javascripts/jquery-ui/disable-selection.js +48 -0
  315. data/vendor/assets/javascripts/jquery-ui/escape-selector.js +23 -0
  316. data/vendor/assets/javascripts/jquery-ui/focusable.js +86 -0
  317. data/vendor/assets/javascripts/jquery-ui/form-reset-mixin.js +80 -0
  318. data/vendor/assets/javascripts/jquery-ui/form.js +22 -0
  319. data/vendor/assets/javascripts/jquery-ui/ie.js +17 -0
  320. data/vendor/assets/javascripts/jquery-ui/keycode.js +47 -0
  321. data/vendor/assets/javascripts/jquery-ui/labels.js +65 -0
  322. data/vendor/assets/javascripts/jquery-ui/plugin.js +46 -0
  323. data/vendor/assets/javascripts/jquery-ui/position.js +500 -0
  324. data/vendor/assets/javascripts/jquery-ui/safe-active-element.js +42 -0
  325. data/vendor/assets/javascripts/jquery-ui/safe-blur.js +23 -0
  326. data/vendor/assets/javascripts/jquery-ui/scroll-parent.js +47 -0
  327. data/vendor/assets/javascripts/jquery-ui/tabbable.js +38 -0
  328. data/vendor/assets/javascripts/jquery-ui/unique-id.js +51 -0
  329. data/vendor/assets/javascripts/jquery-ui/version.js +17 -0
  330. data/vendor/assets/javascripts/jquery-ui/widget.js +735 -0
  331. data/vendor/assets/javascripts/jquery-ui/widgets/button.js +391 -0
  332. data/vendor/assets/javascripts/jquery-ui/widgets/checkboxradio.js +291 -0
  333. data/vendor/assets/javascripts/jquery-ui/widgets/controlgroup.js +300 -0
  334. data/vendor/assets/javascripts/jquery-ui/widgets/datepicker.js +2123 -0
  335. data/vendor/assets/javascripts/jquery-ui/widgets/dialog.js +954 -0
  336. data/vendor/assets/javascripts/jquery-ui/widgets/draggable.js +1259 -0
  337. data/vendor/assets/javascripts/jquery-ui/widgets/mouse.js +230 -0
  338. data/vendor/assets/javascripts/jquery-ui/widgets/resizable.js +1207 -0
  339. data/vendor/assets/javascripts/jquery-ui/widgets/sortable.js +1561 -0
  340. data/vendor/assets/javascripts/jquery-ui/widgets/tabs.js +931 -0
  341. metadata +182 -553
  342. data/.gitignore +0 -49
  343. data/.hound.yml +0 -11
  344. data/.travis.yml +0 -42
  345. data/.yardopts +0 -8
  346. data/Gemfile +0 -54
  347. data/Guardfile +0 -8
  348. data/Rakefile +0 -33
  349. data/activeadmin.gemspec +0 -28
  350. data/app/assets/images/active_admin/datepicker/datepicker-input-icon.png +0 -0
  351. data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
  352. data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
  353. data/app/assets/images/active_admin/orderable.png +0 -0
  354. data/app/assets/javascripts/active_admin/application.js.coffee +0 -32
  355. data/app/assets/javascripts/active_admin/base.js.coffee +0 -14
  356. data/app/assets/javascripts/active_admin/ext/jquery-ui.js.coffee +0 -6
  357. data/app/assets/javascripts/active_admin/ext/jquery.js.coffee +0 -7
  358. data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +0 -39
  359. data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +0 -36
  360. data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +0 -101
  361. data/app/assets/javascripts/active_admin/lib/flash.js.coffee +0 -19
  362. data/app/assets/javascripts/active_admin/lib/has_many.js.coffee +0 -79
  363. data/app/assets/javascripts/active_admin/lib/modal_dialog.js.coffee +0 -37
  364. data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +0 -27
  365. data/app/assets/javascripts/active_admin/lib/popover.js.coffee +0 -68
  366. data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +0 -24
  367. data/app/assets/stylesheets/active_admin/components/_popovers.scss +0 -122
  368. data/app/assets/stylesheets/active_admin/mixins/_icons.scss +0 -20
  369. data/app/assets/stylesheets/active_admin/mixins/_reset.scss +0 -165
  370. data/cucumber.yml +0 -3
  371. data/features/action_item.feature +0 -73
  372. data/features/authorization.feature +0 -64
  373. data/features/authorization_cancan.feature +0 -52
  374. data/features/authorization_pundit.feature +0 -37
  375. data/features/belongs_to.feature +0 -66
  376. data/features/breadcrumb.feature +0 -75
  377. data/features/comments/commenting.feature +0 -171
  378. data/features/comments/viewing_index.feature +0 -19
  379. data/features/dashboard.feature +0 -16
  380. data/features/decorators.feature +0 -41
  381. data/features/development_reloading.feature +0 -30
  382. data/features/edit_page.feature +0 -117
  383. data/features/favicon.feature +0 -20
  384. data/features/first_boot.feature +0 -16
  385. data/features/global_navigation.feature +0 -29
  386. data/features/i18n.feature +0 -43
  387. data/features/index/batch_actions.feature +0 -164
  388. data/features/index/filters.feature +0 -161
  389. data/features/index/format_as_csv.feature +0 -203
  390. data/features/index/formats.feature +0 -66
  391. data/features/index/index_as_block.feature +0 -15
  392. data/features/index/index_as_blog.feature +0 -69
  393. data/features/index/index_as_grid.feature +0 -45
  394. data/features/index/index_as_table.feature +0 -291
  395. data/features/index/index_blank_slate.feature +0 -83
  396. data/features/index/index_parameters.feature +0 -75
  397. data/features/index/index_scope_to.feature +0 -56
  398. data/features/index/index_scopes.feature +0 -251
  399. data/features/index/page_title.feature +0 -41
  400. data/features/index/pagination.feature +0 -59
  401. data/features/index/switch_index_view.feature +0 -73
  402. data/features/menu.feature +0 -53
  403. data/features/new_page.feature +0 -109
  404. data/features/registering_assets.feature +0 -35
  405. data/features/registering_pages.feature +0 -148
  406. data/features/registering_resources.feature +0 -33
  407. data/features/renamed_resource.feature +0 -32
  408. data/features/root_to.feature +0 -17
  409. data/features/show/default_content.feature +0 -43
  410. data/features/show/page_title.feature +0 -58
  411. data/features/show/tabs.feature +0 -27
  412. data/features/sidebar_sections.feature +0 -210
  413. data/features/site_title.feature +0 -47
  414. data/features/specifying_actions.feature +0 -93
  415. data/features/step_definitions/action_item_steps.rb +0 -7
  416. data/features/step_definitions/action_link_steps.rb +0 -20
  417. data/features/step_definitions/additional_web_steps.rb +0 -81
  418. data/features/step_definitions/asset_steps.rb +0 -15
  419. data/features/step_definitions/attribute_steps.rb +0 -18
  420. data/features/step_definitions/batch_action_steps.rb +0 -72
  421. data/features/step_definitions/blog_steps.rb +0 -3
  422. data/features/step_definitions/breadcrumb_steps.rb +0 -3
  423. data/features/step_definitions/comment_steps.rb +0 -12
  424. data/features/step_definitions/configuration_steps.rb +0 -100
  425. data/features/step_definitions/dashboard_steps.rb +0 -15
  426. data/features/step_definitions/factory_steps.rb +0 -34
  427. data/features/step_definitions/filter_steps.rb +0 -39
  428. data/features/step_definitions/flash_steps.rb +0 -11
  429. data/features/step_definitions/format_steps.rb +0 -52
  430. data/features/step_definitions/i18n_steps.rb +0 -3
  431. data/features/step_definitions/index_scope_steps.rb +0 -21
  432. data/features/step_definitions/index_views_steps.rb +0 -3
  433. data/features/step_definitions/layout_steps.rb +0 -3
  434. data/features/step_definitions/member_link_steps.rb +0 -7
  435. data/features/step_definitions/menu_steps.rb +0 -11
  436. data/features/step_definitions/pagination_steps.rb +0 -7
  437. data/features/step_definitions/sidebar_steps.rb +0 -13
  438. data/features/step_definitions/site_title_steps.rb +0 -17
  439. data/features/step_definitions/symbol_leak_steps.rb +0 -3
  440. data/features/step_definitions/tab_steps.rb +0 -8
  441. data/features/step_definitions/table_steps.rb +0 -119
  442. data/features/step_definitions/user_steps.rb +0 -45
  443. data/features/step_definitions/web_steps.rb +0 -85
  444. data/features/sti_resource.feature +0 -65
  445. data/features/strong_parameters.feature +0 -73
  446. data/features/support/env.rb +0 -145
  447. data/features/support/paths.rb +0 -71
  448. data/features/support/selectors.rb +0 -45
  449. data/features/symbol_leak.feature +0 -35
  450. data/features/users/logging_in.feature +0 -34
  451. data/features/users/logging_out.feature +0 -13
  452. data/features/users/resetting_password.feature +0 -34
  453. data/lib/active_admin/batch_actions/views/batch_action_popover.rb +0 -28
  454. data/lib/active_admin/event.rb +0 -33
  455. data/lib/active_admin/helpers/settings.rb +0 -115
  456. data/lib/active_admin/iconic/icons.rb +0 -142
  457. data/lib/active_admin/iconic.rb +0 -53
  458. data/lib/active_admin/view_helpers/icon_helper.rb +0 -12
  459. data/lib/active_admin/views/components/action_list_popover.rb +0 -29
  460. data/lib/active_admin/views/components/popover.rb +0 -27
  461. data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +0 -1
  462. data/lib/generators/active_admin/resource/templates/admin.rb +0 -18
  463. data/script/local +0 -44
  464. data/script/travis_cache +0 -107
  465. data/script/use_rails +0 -53
  466. data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +0 -50
  467. data/spec/javascripts/coffeescripts/jquery.aa.flash.js.coffee +0 -25
  468. data/spec/javascripts/coffeescripts/jquery.aa.popover-spec.js.coffee +0 -82
  469. data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +0 -34
  470. data/spec/javascripts/fixtures/checkboxes.html +0 -9
  471. data/spec/javascripts/fixtures/flashes.html +0 -2
  472. data/spec/javascripts/fixtures/table_checkboxes.html +0 -17
  473. data/spec/javascripts/helpers/SpecHelper.js +0 -3
  474. data/spec/javascripts/support/jasmine.yml +0 -74
  475. data/spec/javascripts/support/jasmine_config.rb +0 -23
  476. data/spec/javascripts/support/jasmine_runner.rb +0 -32
  477. data/spec/rails_helper.rb +0 -154
  478. data/spec/requests/default_namespace_spec.rb +0 -61
  479. data/spec/requests/javascript_spec.rb +0 -20
  480. data/spec/requests/memory_spec.rb +0 -23
  481. data/spec/requests/stylesheets_spec.rb +0 -18
  482. data/spec/spec_helper.rb +0 -17
  483. data/spec/support/deferred_garbage_collection.rb +0 -19
  484. data/spec/support/detect_rails_version.rb +0 -34
  485. data/spec/support/integration_example_group.rb +0 -31
  486. data/spec/support/jslint.yml +0 -80
  487. data/spec/support/rails_template.rb +0 -138
  488. data/spec/support/rails_template_with_data.rb +0 -59
  489. data/spec/support/templates/admin/stores.rb +0 -9
  490. data/spec/support/templates/cucumber.rb +0 -24
  491. data/spec/support/templates/cucumber_with_reloading.rb +0 -5
  492. data/spec/support/templates/en.yml +0 -8
  493. data/spec/support/templates/policies/active_admin/comment_policy.rb +0 -9
  494. data/spec/support/templates/policies/active_admin/page_policy.rb +0 -18
  495. data/spec/support/templates/policies/admin_user_policy.rb +0 -11
  496. data/spec/support/templates/policies/application_policy.rb +0 -45
  497. data/spec/support/templates/policies/category_policy.rb +0 -7
  498. data/spec/support/templates/policies/post_policy.rb +0 -15
  499. data/spec/support/templates/policies/store_policy.rb +0 -11
  500. data/spec/support/templates/policies/user_policy.rb +0 -11
  501. data/spec/support/templates/post_decorator.rb +0 -11
  502. data/spec/unit/abstract_view_factory_spec.rb +0 -79
  503. data/spec/unit/action_builder_spec.rb +0 -132
  504. data/spec/unit/active_admin_spec.rb +0 -11
  505. data/spec/unit/application_spec.rb +0 -140
  506. data/spec/unit/asset_registration_spec.rb +0 -52
  507. data/spec/unit/authorization/authorization_adapter_spec.rb +0 -61
  508. data/spec/unit/authorization/controller_authorization_spec.rb +0 -39
  509. data/spec/unit/authorization/index_overriding_spec.rb +0 -22
  510. data/spec/unit/auto_link_spec.rb +0 -69
  511. data/spec/unit/batch_actions/resource_spec.rb +0 -92
  512. data/spec/unit/batch_actions/settings_spec.rb +0 -61
  513. data/spec/unit/belongs_to_spec.rb +0 -51
  514. data/spec/unit/cancan_adapter_spec.rb +0 -43
  515. data/spec/unit/comments_spec.rb +0 -166
  516. data/spec/unit/component_spec.rb +0 -18
  517. data/spec/unit/config_shared_examples.rb +0 -59
  518. data/spec/unit/controller_filters_spec.rb +0 -44
  519. data/spec/unit/csv_builder_spec.rb +0 -244
  520. data/spec/unit/dependency_spec.rb +0 -135
  521. data/spec/unit/devise_spec.rb +0 -96
  522. data/spec/unit/dsl_spec.rb +0 -122
  523. data/spec/unit/event_spec.rb +0 -47
  524. data/spec/unit/filters/filter_form_builder_spec.rb +0 -433
  525. data/spec/unit/filters/resource_spec.rb +0 -121
  526. data/spec/unit/form_builder_spec.rb +0 -752
  527. data/spec/unit/generators/install_spec.rb +0 -23
  528. data/spec/unit/helpers/collection_spec.rb +0 -65
  529. data/spec/unit/helpers/scope_chain_spec.rb +0 -36
  530. data/spec/unit/helpers/settings_spec.rb +0 -30
  531. data/spec/unit/i18n_spec.rb +0 -12
  532. data/spec/unit/menu_collection_spec.rb +0 -62
  533. data/spec/unit/menu_item_spec.rb +0 -143
  534. data/spec/unit/menu_spec.rb +0 -71
  535. data/spec/unit/namespace/authorization_spec.rb +0 -27
  536. data/spec/unit/namespace/register_page_spec.rb +0 -74
  537. data/spec/unit/namespace/register_resource_spec.rb +0 -161
  538. data/spec/unit/namespace_spec.rb +0 -103
  539. data/spec/unit/order_clause_spec.rb +0 -81
  540. data/spec/unit/page_controller_spec.rb +0 -5
  541. data/spec/unit/page_spec.rb +0 -78
  542. data/spec/unit/pretty_format_spec.rb +0 -63
  543. data/spec/unit/pundit_adapter_spec.rb +0 -98
  544. data/spec/unit/resource/action_items_spec.rb +0 -65
  545. data/spec/unit/resource/includes_spec.rb +0 -21
  546. data/spec/unit/resource/menu_spec.rb +0 -18
  547. data/spec/unit/resource/naming_spec.rb +0 -122
  548. data/spec/unit/resource/page_presenters_spec.rb +0 -44
  549. data/spec/unit/resource/pagination_spec.rb +0 -38
  550. data/spec/unit/resource/routes_spec.rb +0 -73
  551. data/spec/unit/resource/scopes_spec.rb +0 -50
  552. data/spec/unit/resource/sidebars_spec.rb +0 -43
  553. data/spec/unit/resource_collection_spec.rb +0 -158
  554. data/spec/unit/resource_controller/data_access_spec.rb +0 -140
  555. data/spec/unit/resource_controller/decorators_spec.rb +0 -83
  556. data/spec/unit/resource_controller/sidebars_spec.rb +0 -45
  557. data/spec/unit/resource_controller_spec.rb +0 -269
  558. data/spec/unit/resource_registration_spec.rb +0 -56
  559. data/spec/unit/resource_spec.rb +0 -278
  560. data/spec/unit/routing_spec.rb +0 -180
  561. data/spec/unit/scope_spec.rb +0 -190
  562. data/spec/unit/settings_spec.rb +0 -118
  563. data/spec/unit/view_factory_spec.rb +0 -21
  564. data/spec/unit/view_helpers/breadcrumbs_spec.rb +0 -217
  565. data/spec/unit/view_helpers/display_name_spec.rb +0 -69
  566. data/spec/unit/view_helpers/download_format_links_helper_spec.rb +0 -39
  567. data/spec/unit/view_helpers/fields_for_spec.rb +0 -50
  568. data/spec/unit/view_helpers/flash_helper_spec.rb +0 -25
  569. data/spec/unit/view_helpers/form_helper_spec.rb +0 -43
  570. data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +0 -139
  571. data/spec/unit/views/components/action_list_popover_spec.rb +0 -40
  572. data/spec/unit/views/components/attributes_table_spec.rb +0 -272
  573. data/spec/unit/views/components/batch_action_popover_spec.rb +0 -47
  574. data/spec/unit/views/components/blank_slate_spec.rb +0 -27
  575. data/spec/unit/views/components/columns_spec.rb +0 -172
  576. data/spec/unit/views/components/index_list_spec.rb +0 -35
  577. data/spec/unit/views/components/index_table_for_spec.rb +0 -46
  578. data/spec/unit/views/components/paginated_collection_spec.rb +0 -236
  579. data/spec/unit/views/components/panel_spec.rb +0 -62
  580. data/spec/unit/views/components/popover_spec.rb +0 -33
  581. data/spec/unit/views/components/sidebar_section_spec.rb +0 -47
  582. data/spec/unit/views/components/site_title_spec.rb +0 -78
  583. data/spec/unit/views/components/status_tag_spec.rb +0 -235
  584. data/spec/unit/views/components/table_for_spec.rb +0 -384
  585. data/spec/unit/views/components/tabs_spec.rb +0 -39
  586. data/spec/unit/views/components/unsupported_browser_spec.rb +0 -47
  587. data/spec/unit/views/pages/form_spec.rb +0 -42
  588. data/spec/unit/views/pages/index_spec.rb +0 -60
  589. data/spec/unit/views/pages/layout_spec.rb +0 -59
  590. data/spec/unit/views/pages/show_spec.rb +0 -33
  591. data/spec/unit/views/tabbed_navigation_spec.rb +0 -158
  592. data/tasks/docs.rake +0 -37
  593. data/tasks/parallel_tests.rake +0 -66
  594. data/tasks/test.rake +0 -83
  595. data/tasks/yard.rake +0 -9
@@ -4,24 +4,36 @@ module ActiveAdmin
4
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
- def route_collection_path(params = {})
8
- RouteBuilder.new(self).collection_path(params)
7
+ def route_collection_path(params = {}, additional_params = {})
8
+ route_builder.collection_path(params, additional_params)
9
+ end
10
+
11
+ def route_batch_action_path(params = {}, additional_params = {})
12
+ route_builder.batch_action_path(params, additional_params)
9
13
  end
10
14
 
11
15
  # @param resource [ActiveRecord::Base] the instance we want the path of
12
16
  # @return [String] the path to this resource collection page
13
17
  # @example "/admin/posts/1"
14
- def route_instance_path(resource)
15
- RouteBuilder.new(self).instance_path(resource)
18
+ def route_instance_path(resource, additional_params = {})
19
+ route_builder.instance_path(resource, additional_params)
16
20
  end
17
21
 
18
- def route_edit_instance_path(resource)
19
- RouteBuilder.new(self).edit_instance_path(resource)
22
+ def route_edit_instance_path(resource, additional_params = {})
23
+ route_builder.member_action_path(:edit, resource, additional_params)
24
+ end
25
+
26
+ def route_member_action_path(action, resource, additional_params = {})
27
+ route_builder.member_action_path(action, resource, additional_params)
20
28
  end
21
29
 
22
30
  # Returns the routes prefix for this config
23
31
  def route_prefix
24
- namespace.module_name.try(:underscore)
32
+ namespace.route_prefix
33
+ end
34
+
35
+ def route_builder
36
+ @route_builder ||= RouteBuilder.new(self)
25
37
  end
26
38
 
27
39
  def route_uncountable?
@@ -30,39 +42,50 @@ module ActiveAdmin
30
42
  config[:route_collection_name] == config[:route_instance_name]
31
43
  end
32
44
 
33
- private
34
-
35
45
  class RouteBuilder
36
46
  def initialize(resource)
37
47
  @resource = resource
38
48
  end
39
49
 
40
- def collection_path(params)
50
+ def collection_path(params, additional_params = {})
41
51
  route_name = route_name(
42
52
  resource.resources_configuration[:self][:route_collection_name],
43
53
  suffix: (resource.route_uncountable? ? "index_path" : "path")
44
54
  )
45
55
 
46
- routes.public_send route_name, *route_collection_params(params)
56
+ routes.public_send route_name, *route_collection_params(params), additional_params
57
+ end
58
+
59
+ def batch_action_path(params, additional_params = {})
60
+ route_name = route_name(
61
+ resource.resources_configuration[:self][:route_collection_name],
62
+ action: :batch_action,
63
+ suffix: (resource.route_uncountable? ? "index_path" : "path")
64
+ )
65
+
66
+ query = params.slice(:q, :scope)
67
+ query = query.permit!.to_h
68
+ routes.public_send route_name, *route_collection_params(params), additional_params.merge(query)
47
69
  end
48
70
 
49
71
  # @return [String] the path to this resource collection page
50
72
  # @param instance [ActiveRecord::Base] the instance we want the path of
51
73
  # @example "/admin/posts/1"
52
- def instance_path(instance)
74
+ def instance_path(instance, additional_params = {})
53
75
  route_name = route_name(resource.resources_configuration[:self][:route_instance_name])
54
76
 
55
- routes.public_send route_name, *route_instance_params(instance)
77
+ routes.public_send route_name, *route_instance_params(instance), additional_params
56
78
  end
57
79
 
58
- # @return [String] the path to the edit page of this resource
80
+ # @return [String] the path to the member action of this resource
81
+ # @param action [Symbol]
59
82
  # @param instance [ActiveRecord::Base] the instance we want the path of
60
83
  # @example "/admin/posts/1/edit"
61
- def edit_instance_path(instance)
84
+ def member_action_path(action, instance, additional_params = {})
62
85
  path = resource.resources_configuration[:self][:route_instance_name]
63
- route_name = route_name(path, action: :edit)
86
+ route_name = route_name(path, action: action)
64
87
 
65
- routes.public_send route_name, *route_instance_params(instance)
88
+ routes.public_send route_name, *route_instance_params(instance), additional_params
66
89
  end
67
90
 
68
91
  private
@@ -73,20 +96,19 @@ module ActiveAdmin
73
96
  suffix = options[:suffix] || "path"
74
97
  route = []
75
98
 
76
- route << options[:action] # "edit" or "new"
77
- route << resource.route_prefix # "admin"
99
+ route << options[:action] # "batch_action", "edit" or "new"
100
+ route << resource.route_prefix # "admin"
78
101
  route << belongs_to_name if nested? # "category"
79
- route << resource_path_name # "posts" or "post"
80
- route << suffix # "path" or "index path"
102
+ route << resource_path_name # "posts" or "post"
103
+ route << suffix # "path" or "index path"
81
104
 
82
- route.compact.join('_').to_sym # :admin_category_posts_path
105
+ route.compact.join("_").to_sym # :admin_category_posts_path
83
106
  end
84
107
 
85
-
86
108
  # @return params to pass to instance path
87
109
  def route_instance_params(instance)
88
110
  if nested?
89
- [instance.public_send(belongs_to_name).to_param, instance.to_param]
111
+ [instance.public_send(belongs_to_target_name).to_param, instance.to_param]
90
112
  else
91
113
  instance.to_param
92
114
  end
@@ -99,11 +121,19 @@ module ActiveAdmin
99
121
  end
100
122
 
101
123
  def nested?
102
- resource.belongs_to? && resource.belongs_to_config.required?
124
+ resource.belongs_to? && belongs_to_config.required?
125
+ end
126
+
127
+ def belongs_to_target_name
128
+ belongs_to_config.target_name
103
129
  end
104
130
 
105
131
  def belongs_to_name
106
- resource.belongs_to_config.target.resource_name.singular if nested?
132
+ belongs_to_config.target.resource_name.singular
133
+ end
134
+
135
+ def belongs_to_config
136
+ resource.belongs_to_config
107
137
  end
108
138
 
109
139
  def routes
@@ -38,10 +38,10 @@ module ActiveAdmin
38
38
  options = args.extract_options!
39
39
  method = args.first
40
40
 
41
- scope_to_config[:method] = block || method
42
- scope_to_config[:association_method] = options[:association_method]
43
- scope_to_config[:if] = options[:if]
44
- scope_to_config[:unless] = options[:unless]
41
+ scope_to_config[:method] = block || method
42
+ scope_to_config[:association_method] = options[:association_method]
43
+ scope_to_config[:if] = options[:if]
44
+ scope_to_config[:unless] = options[:unless]
45
45
 
46
46
  end
47
47
 
@@ -55,10 +55,10 @@ module ActiveAdmin
55
55
 
56
56
  def scope_to_config
57
57
  @scope_to_config ||= {
58
- method: nil,
58
+ method: nil,
59
59
  association_method: nil,
60
- if: nil,
61
- unless: nil
60
+ if: nil,
61
+ unless: nil
62
62
  }
63
63
  end
64
64
 
@@ -10,7 +10,7 @@ module ActiveAdmin
10
10
  # Returns a scope for this object by its identifier
11
11
  def get_scope_by_id(id)
12
12
  id = id.to_s
13
- scopes.find{|s| s.id == id }
13
+ scopes.find { |s| s.id == id }
14
14
  end
15
15
 
16
16
  def default_scope(context = nil)
@@ -27,14 +27,16 @@ module ActiveAdmin
27
27
  # If you want to internationalize the scope name, you can add
28
28
  # to your i18n files a key like "active_admin.scopes.scope_method".
29
29
  def scope(*args, &block)
30
- options = args.extract_options!
30
+ default_options = { show_count: namespace.scopes_show_count }
31
+ options = default_options.merge(args.extract_options!)
31
32
  title = args[0] rescue nil
32
33
  method = args[1] rescue nil
33
34
 
35
+ options[:localizer] ||= ActiveAdmin::Localizers.resource(self)
34
36
  scope = ActiveAdmin::Scope.new(title, method, options, &block)
35
37
 
36
38
  # Finds and replaces a scope by the same name if it already exists
37
- existing_scope_index = scopes.index{|existing_scope| existing_scope.id == scope.id }
39
+ existing_scope_index = scopes.index { |existing_scope| existing_scope.id == scope.id }
38
40
  if existing_scope_index
39
41
  scopes.delete_at(existing_scope_index)
40
42
  scopes.insert(existing_scope_index, scope)
@@ -1,4 +1,4 @@
1
- require 'active_admin/helpers/optional_display'
1
+ require "active_admin/helpers/optional_display"
2
2
 
3
3
  module ActiveAdmin
4
4
 
@@ -14,7 +14,7 @@ module ActiveAdmin
14
14
  end
15
15
 
16
16
  def sidebar_sections_for(action, render_context = nil)
17
- sidebar_sections.select{|section| section.display_on?(action, render_context) }
17
+ sidebar_sections.select { |section| section.display_on?(action, render_context) }
18
18
  .sort_by(&:priority)
19
19
  end
20
20
 
@@ -1,15 +1,18 @@
1
- require 'active_admin/resource/action_items'
2
- require 'active_admin/resource/controllers'
3
- require 'active_admin/resource/menu'
4
- require 'active_admin/resource/page_presenters'
5
- require 'active_admin/resource/pagination'
6
- require 'active_admin/resource/routes'
7
- require 'active_admin/resource/naming'
8
- require 'active_admin/resource/scopes'
9
- require 'active_admin/resource/includes'
10
- require 'active_admin/resource/scope_to'
11
- require 'active_admin/resource/sidebars'
12
- require 'active_admin/resource/belongs_to'
1
+ require "active_admin/resource/action_items"
2
+ require "active_admin/resource/attributes"
3
+ require "active_admin/resource/controllers"
4
+ require "active_admin/resource/menu"
5
+ require "active_admin/resource/page_presenters"
6
+ require "active_admin/resource/pagination"
7
+ require "active_admin/resource/routes"
8
+ require "active_admin/resource/naming"
9
+ require "active_admin/resource/scopes"
10
+ require "active_admin/resource/includes"
11
+ require "active_admin/resource/scope_to"
12
+ require "active_admin/resource/sidebars"
13
+ require "active_admin/resource/belongs_to"
14
+ require "active_admin/resource/ordering"
15
+ require "active_admin/resource/model"
13
16
 
14
17
  module ActiveAdmin
15
18
 
@@ -24,7 +27,7 @@ module ActiveAdmin
24
27
  class Resource
25
28
 
26
29
  # Event dispatched when a new resource is registered
27
- RegisterEvent = 'active_admin.resource.register'.freeze
30
+ RegisterEvent = "active_admin.resource.register".freeze
28
31
 
29
32
  # The namespace this config belongs to
30
33
  attr_reader :namespace
@@ -41,7 +44,7 @@ module ActiveAdmin
41
44
  # The default sort order to use in the controller
42
45
  attr_writer :sort_order
43
46
  def sort_order
44
- @sort_order ||= (resource_class.respond_to?(:primary_key) ? resource_class.primary_key.to_s : 'id') + '_desc'
47
+ @sort_order ||= (resource_class.respond_to?(:primary_key) ? resource_class.primary_key.to_s : "id") + "_desc"
45
48
  end
46
49
 
47
50
  # Set the configuration for the CSV
@@ -50,6 +53,12 @@ module ActiveAdmin
50
53
  # Set breadcrumb builder
51
54
  attr_writer :breadcrumb
52
55
 
56
+ #Set order clause
57
+ attr_writer :order_clause
58
+ # Display create another checkbox on a new page
59
+ # @return [Boolean]
60
+ attr_writer :create_another
61
+
53
62
  # Store a reference to the DSL so that we can dereference it during garbage collection.
54
63
  attr_accessor :dsl
55
64
 
@@ -61,9 +70,10 @@ module ActiveAdmin
61
70
  def initialize(namespace, resource_class, options = {})
62
71
  @namespace = namespace
63
72
  @resource_class_name = "::#{resource_class.name}"
64
- @options = options
73
+ @options = options
65
74
  @sort_order = options[:sort_order]
66
- @member_actions, @collection_actions = [], []
75
+ @member_actions = []
76
+ @collection_actions = []
67
77
  end
68
78
  end
69
79
 
@@ -82,6 +92,8 @@ module ActiveAdmin
82
92
  include ScopeTo
83
93
  include Sidebars
84
94
  include Routes
95
+ include Ordering
96
+ include Attributes
85
97
 
86
98
  # The class this resource wraps. If you register the Post model, Resource#resource_class
87
99
  # will point to the Post class
@@ -93,6 +105,10 @@ module ActiveAdmin
93
105
  ActiveSupport::Dependencies.constantize(decorator_class_name) if decorator_class_name
94
106
  end
95
107
 
108
+ def resource_name_extension
109
+ @resource_name_extension ||= define_resource_name_extension(self)
110
+ end
111
+
96
112
  def resource_table_name
97
113
  resource_class.quoted_table_name
98
114
  end
@@ -121,7 +137,8 @@ module ActiveAdmin
121
137
 
122
138
  def belongs_to(target, options = {})
123
139
  @belongs_to = Resource::BelongsTo.new(self, target, options)
124
- self.navigation_menu_name = target unless @belongs_to.optional?
140
+ self.menu_item_options = false if @belongs_to.required?
141
+ options[:class_name] ||= @belongs_to.resource.resource_class_name if @belongs_to.resource
125
142
  controller.send :belongs_to, target, options.dup
126
143
  end
127
144
 
@@ -129,6 +146,12 @@ module ActiveAdmin
129
146
  @belongs_to
130
147
  end
131
148
 
149
+ def belongs_to_param
150
+ if belongs_to? && belongs_to_config.required?
151
+ belongs_to_config.to_param
152
+ end
153
+ end
154
+
132
155
  # Do we belong to another resource?
133
156
  def belongs_to?
134
157
  !!belongs_to_config
@@ -143,20 +166,55 @@ module ActiveAdmin
143
166
  instance_variable_defined?(:@breadcrumb) ? @breadcrumb : namespace.breadcrumb
144
167
  end
145
168
 
169
+ def order_clause
170
+ @order_clause || namespace.order_clause
171
+ end
172
+
173
+ def create_another
174
+ instance_variable_defined?(:@create_another) ? @create_another : namespace.create_another
175
+ end
176
+
146
177
  def find_resource(id)
147
- resource = resource_class.public_send(method_for_find, id)
148
- decorator_class ? decorator_class.new(resource) : resource
178
+ resource = resource_class.public_send *method_for_find(id)
179
+ (decorator_class && resource) ? decorator_class.new(resource) : resource
180
+ end
181
+
182
+ def resource_columns
183
+ resource_attributes.values
184
+ end
185
+
186
+ def resource_attributes
187
+ @resource_attributes ||= default_attributes
188
+ end
189
+
190
+ def association_columns
191
+ @association_columns ||= resource_attributes.select { |key, value| key != value }.values
192
+ end
193
+
194
+ def content_columns
195
+ @content_columns ||= resource_attributes.select { |key, value| key == value }.values
149
196
  end
150
197
 
151
198
  private
152
199
 
153
- def method_for_find
154
- resources_configuration[:self][:finder] || :"find_by_#{resource_class.primary_key}"
200
+ def method_for_find(id)
201
+ if finder = resources_configuration[:self][:finder]
202
+ [finder, id]
203
+ else
204
+ [:find_by, { resource_class.primary_key => id }]
205
+ end
155
206
  end
156
207
 
157
208
  def default_csv_builder
158
- @default_csv_builder ||= CSVBuilder.default_for_resource(resource_class)
209
+ @default_csv_builder ||= CSVBuilder.default_for_resource(self)
159
210
  end
160
211
 
212
+ def define_resource_name_extension(resource)
213
+ Module.new do
214
+ define_method :model_name do
215
+ resource.resource_name
216
+ end
217
+ end
218
+ end
161
219
  end # class Resource
162
220
  end # module ActiveAdmin
@@ -33,15 +33,17 @@ module ActiveAdmin
33
33
  # Finds a resource based on the resource name, resource class, or base class.
34
34
  def find_resource(obj)
35
35
  resources.detect do |r|
36
- r.resource_name.to_s == obj.to_s || r.resource_class.to_s == obj.to_s
36
+ r.resource_name.to_s == obj.to_s
37
+ end || resources.detect do |r|
38
+ r.resource_class.to_s == obj.to_s
37
39
  end ||
38
40
  if obj.respond_to? :base_class
39
- resources.detect{ |r| r.resource_class.to_s == obj.base_class.to_s }
41
+ resources.detect { |r| r.resource_class.to_s == obj.base_class.to_s }
40
42
  end
41
43
  end
42
44
 
43
45
  def resources
44
- select{ |r| r.class <= Resource } # can otherwise be a Page
46
+ select { |r| r.class <= Resource } # can otherwise be a Page
45
47
  end
46
48
 
47
49
  def raise_if_mismatched!(existing, given)
@@ -7,12 +7,22 @@ module ActiveAdmin
7
7
  module ClassMethods
8
8
 
9
9
  def clear_member_actions!
10
+ remove_action_methods(:member)
10
11
  active_admin_config.clear_member_actions!
11
12
  end
12
13
 
13
14
  def clear_collection_actions!
15
+ remove_action_methods(:collection)
14
16
  active_admin_config.clear_collection_actions!
15
17
  end
18
+
19
+ private
20
+
21
+ def remove_action_methods(actions_type)
22
+ active_admin_config.public_send("#{actions_type}_actions").each do |action|
23
+ remove_method action.name
24
+ end
25
+ end
16
26
  end
17
27
 
18
28
  end
@@ -14,6 +14,8 @@ module ActiveAdmin
14
14
  include ScopeChain
15
15
 
16
16
  define_active_admin_callbacks :build, :create, :update, :save, :destroy
17
+
18
+ helper_method :current_scope
17
19
  end
18
20
  end
19
21
 
@@ -45,7 +47,6 @@ module ActiveAdmin
45
47
  end
46
48
  end
47
49
 
48
-
49
50
  # Does the actual work of retrieving the current collection from the db.
50
51
  # This is a great method to override if you would like to perform
51
52
  # some additional db # work before your controller returns and
@@ -60,7 +61,6 @@ module ActiveAdmin
60
61
  collection
61
62
  end
62
63
 
63
-
64
64
  # Override this method in your controllers to modify the start point
65
65
  # of our searches and index.
66
66
  #
@@ -88,9 +88,9 @@ module ActiveAdmin
88
88
  def resource
89
89
  get_resource_ivar || begin
90
90
  resource = find_resource
91
+ resource = apply_decorations(resource)
91
92
  authorize_resource! resource
92
93
 
93
- resource = apply_decorator resource
94
94
  set_resource_ivar resource
95
95
  end
96
96
  end
@@ -98,16 +98,11 @@ module ActiveAdmin
98
98
  # Does the actual work of finding a resource in the database. This
99
99
  # method uses the finder method as defined in InheritedResources.
100
100
  #
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
101
  # @return [ActiveRecord::Base] An active record object.
106
102
  def find_resource
107
103
  scoped_collection.send method_for_find, params[:id]
108
104
  end
109
105
 
110
-
111
106
  # Builds, memoize and authorize a new instance of the resource. The
112
107
  # actual work of building the new instance is delegated to the
113
108
  # #build_new_resource method.
@@ -119,10 +114,11 @@ module ActiveAdmin
119
114
  def build_resource
120
115
  get_resource_ivar || begin
121
116
  resource = build_new_resource
117
+ resource = apply_decorations(resource)
118
+ resource = assign_attributes(resource, resource_params)
122
119
  run_build_callbacks resource
123
120
  authorize_resource! resource
124
121
 
125
- resource = apply_decorator resource
126
122
  set_resource_ivar resource
127
123
  end
128
124
  end
@@ -130,12 +126,12 @@ module ActiveAdmin
130
126
  # Builds a new resource. This method uses the method_for_build provided
131
127
  # by Inherited Resources.
132
128
  #
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
129
  # @return [ActiveRecord::Base] An un-saved active record base object
137
130
  def build_new_resource
138
- scoped_collection.send method_for_build, *resource_params
131
+ scoped_collection.send(
132
+ method_for_build,
133
+ *resource_params.map { |params| params.slice(active_admin_config.resource_class.inheritance_column) }
134
+ )
139
135
  end
140
136
 
141
137
  # Calls all the appropriate callbacks and then creates the new resource.
@@ -171,11 +167,7 @@ module ActiveAdmin
171
167
  #
172
168
  # @return [void]
173
169
  def update_resource(object, attributes)
174
- if object.respond_to?(:assign_attributes)
175
- object.assign_attributes(*attributes)
176
- else
177
- object.attributes = attributes[0]
178
- end
170
+ object = assign_attributes(object, attributes)
179
171
 
180
172
  run_update_callbacks object do
181
173
  save_resource(object)
@@ -191,12 +183,10 @@ module ActiveAdmin
191
183
  end
192
184
  end
193
185
 
194
-
195
186
  #
196
187
  # Collection Helper Methods
197
188
  #
198
189
 
199
-
200
190
  # Gives the authorization library a change to pre-scope the collection.
201
191
  #
202
192
  # In the case of the CanCan adapter, it calls `#accessible_by` on
@@ -212,11 +202,10 @@ module ActiveAdmin
212
202
 
213
203
  def apply_sorting(chain)
214
204
  params[:order] ||= active_admin_config.sort_order
215
-
216
- order_clause = OrderClause.new params[:order]
205
+ order_clause = active_admin_config.order_clause.new(active_admin_config, params[:order])
217
206
 
218
207
  if order_clause.valid?
219
- chain.reorder(order_clause.to_sql(active_admin_config))
208
+ order_clause.apply(chain)
220
209
  else
221
210
  chain # just return the chain
222
211
  end
@@ -225,18 +214,10 @@ module ActiveAdmin
225
214
  # Applies any Ransack search methods to the currently scoped collection.
226
215
  # Both `search` and `ransack` are provided, but we use `ransack` to prevent conflicts.
227
216
  def apply_filtering(chain)
228
- @search = chain.ransack clean_search_params params[:q]
217
+ @search = chain.ransack(params[:q] || {})
229
218
  @search.result
230
219
  end
231
220
 
232
- def clean_search_params(params)
233
- if params.is_a? Hash
234
- params.dup.delete_if{ |key, value| value.blank? }
235
- else
236
- {}
237
- end
238
- end
239
-
240
221
  def apply_scoping(chain)
241
222
  @collection_before_scope = chain
242
223
 
@@ -261,13 +242,15 @@ module ActiveAdmin
261
242
 
262
243
  def current_scope
263
244
  @current_scope ||= if params[:scope]
264
- active_admin_config.get_scope_by_id(params[:scope])
265
- else
266
- active_admin_config.default_scope(self)
267
- end
245
+ active_admin_config.get_scope_by_id(params[:scope])
246
+ else
247
+ active_admin_config.default_scope(self)
248
+ end
268
249
  end
269
250
 
270
251
  def apply_pagination(chain)
252
+ # skip pagination if already was paginated by scope
253
+ return chain if chain.respond_to?(:total_pages)
271
254
  page_method_name = Kaminari.config.page_method_name
272
255
  page = params[Kaminari.config.param_name]
273
256
 
@@ -277,14 +260,15 @@ module ActiveAdmin
277
260
  def collection_applies(options = {})
278
261
  only = Array(options.fetch(:only, COLLECTION_APPLIES))
279
262
  except = Array(options.fetch(:except, []))
280
- COLLECTION_APPLIES && only - except
263
+
264
+ COLLECTION_APPLIES & only - except
281
265
  end
282
266
 
283
267
  def per_page
284
268
  if active_admin_config.paginate
285
269
  dynamic_per_page || configured_per_page
286
270
  else
287
- max_per_page
271
+ active_admin_config.max_per_page
288
272
  end
289
273
  end
290
274
 
@@ -293,17 +277,46 @@ module ActiveAdmin
293
277
  end
294
278
 
295
279
  def configured_per_page
296
- if active_admin_config.per_page.is_a?(Array)
297
- active_admin_config.per_page[0]
280
+ Array(active_admin_config.per_page).first
281
+ end
282
+
283
+ # @param resource [ActiveRecord::Base]
284
+ # @param attributes [Array<Hash]
285
+ # @return [ActiveRecord::Base] resource
286
+ #
287
+ def assign_attributes(resource, attributes)
288
+ if resource.respond_to?(:assign_attributes)
289
+ resource.assign_attributes(*attributes)
298
290
  else
299
- active_admin_config.per_page
291
+ resource.attributes = attributes[0]
300
292
  end
293
+
294
+ resource
301
295
  end
302
296
 
303
- def max_per_page
304
- 10_000
297
+ # @param resource [ActiveRecord::Base]
298
+ # @return [ActiveRecord::Base] resource
299
+ #
300
+ def apply_decorations(resource)
301
+ apply_decorator(resource)
305
302
  end
306
303
 
304
+ # @return [String]
305
+ def smart_resource_url
306
+ if create_another?
307
+ new_resource_url(create_another: params[:create_another])
308
+ else
309
+ super
310
+ end
311
+ end
312
+
313
+ private
314
+
315
+ # @return [Boolean] true if user requested to create one more
316
+ # resource after creating this one.
317
+ def create_another?
318
+ params[:create_another].present?
319
+ end
307
320
  end
308
321
  end
309
322
  end