activeadmin 1.0.0.pre4 → 2.4.0

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

Potentially problematic release.


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

Files changed (542) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +529 -52
  3. data/CODE_OF_CONDUCT.md +64 -12
  4. data/CONTRIBUTING.md +129 -58
  5. data/README.md +80 -79
  6. data/app/assets/javascripts/active_admin/base.es6 +23 -0
  7. data/app/assets/javascripts/active_admin/ext/jquery-ui.es6 +7 -0
  8. data/app/assets/javascripts/active_admin/ext/jquery.es6 +9 -0
  9. data/app/assets/javascripts/active_admin/initializers/datepicker.es6 +16 -0
  10. data/app/assets/javascripts/active_admin/initializers/filters.es6 +45 -0
  11. data/app/assets/javascripts/active_admin/initializers/tabs.es6 +6 -0
  12. data/app/assets/javascripts/active_admin/lib/active_admin.es6 +41 -0
  13. data/app/assets/javascripts/active_admin/lib/batch_actions.es6 +59 -0
  14. data/app/assets/javascripts/active_admin/lib/checkbox-toggler.es6 +49 -0
  15. data/app/assets/javascripts/active_admin/lib/dropdown-menu.es6 +123 -0
  16. data/app/assets/javascripts/active_admin/lib/has_many.es6 +95 -0
  17. data/app/assets/javascripts/active_admin/lib/modal_dialog.es6 +61 -0
  18. data/app/assets/javascripts/active_admin/lib/per_page.es6 +47 -0
  19. data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.es6 +36 -0
  20. data/app/assets/stylesheets/active_admin/_base.scss +2 -2
  21. data/app/assets/stylesheets/active_admin/_forms.scss +19 -26
  22. data/app/assets/stylesheets/active_admin/components/_batch_actions.scss +0 -5
  23. data/app/assets/stylesheets/active_admin/components/_pagination.scss +11 -0
  24. data/app/assets/stylesheets/active_admin/components/_scopes.scss +3 -0
  25. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +0 -4
  26. data/app/assets/stylesheets/active_admin/components/_tables.scss +4 -1
  27. data/app/assets/stylesheets/active_admin/components/_tabs.scss +1 -1
  28. data/app/assets/stylesheets/active_admin/mixins/_all.scss +0 -2
  29. data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +1 -1
  30. data/app/assets/stylesheets/active_admin/print.scss +2 -3
  31. data/app/views/active_admin/devise/confirmations/new.html.erb +2 -2
  32. data/app/views/active_admin/devise/passwords/edit.html.erb +2 -2
  33. data/app/views/active_admin/devise/passwords/new.html.erb +2 -2
  34. data/app/views/active_admin/devise/registrations/new.html.erb +3 -4
  35. data/app/views/active_admin/devise/sessions/new.html.erb +2 -2
  36. data/app/views/active_admin/devise/shared/_error_messages.html.erb +15 -0
  37. data/app/views/active_admin/devise/shared/_links.erb +12 -6
  38. data/app/views/active_admin/devise/unlocks/new.html.erb +2 -2
  39. data/app/views/kaminari/active_admin/_first_page.html.erb +11 -0
  40. data/app/views/kaminari/active_admin/_gap.html.erb +8 -0
  41. data/app/views/kaminari/active_admin/_last_page.html.erb +11 -0
  42. data/app/views/kaminari/active_admin/_next_page.html.erb +11 -0
  43. data/app/views/kaminari/active_admin/_page.html.erb +12 -0
  44. data/app/views/kaminari/active_admin/_paginator.html.erb +25 -0
  45. data/app/views/kaminari/active_admin/_prev_page.html.erb +11 -0
  46. data/app/views/kaminari/active_admin_countless/_first_page.html.erb +11 -0
  47. data/app/views/kaminari/active_admin_countless/_gap.html.erb +8 -0
  48. data/app/views/kaminari/active_admin_countless/_next_page.html.erb +11 -0
  49. data/app/views/kaminari/active_admin_countless/_page.html.erb +12 -0
  50. data/app/views/kaminari/active_admin_countless/_paginator.html.erb +24 -0
  51. data/app/views/kaminari/active_admin_countless/_prev_page.html.erb +11 -0
  52. data/app/views/layouts/active_admin_logged_out.html.erb +2 -2
  53. data/config/locales/ar.yml +4 -5
  54. data/config/locales/bg.yml +1 -3
  55. data/config/locales/bs.yml +1 -2
  56. data/config/locales/ca.yml +2 -4
  57. data/config/locales/cs.yml +1 -2
  58. data/config/locales/da.yml +45 -14
  59. data/config/locales/de-CH.yml +2 -3
  60. data/config/locales/de.yml +30 -3
  61. data/config/locales/el.yml +3 -4
  62. data/config/locales/en-CA.yml +139 -0
  63. data/config/locales/en-GB.yml +44 -3
  64. data/config/locales/en.yml +31 -5
  65. data/config/locales/eo.yml +145 -0
  66. data/config/locales/es-MX.yml +5 -3
  67. data/config/locales/es.yml +32 -6
  68. data/config/locales/fa.yml +1 -2
  69. data/config/locales/fi.yml +2 -3
  70. data/config/locales/fr.yml +27 -5
  71. data/config/locales/he.yml +53 -7
  72. data/config/locales/hr.yml +1 -2
  73. data/config/locales/hu.yml +5 -2
  74. data/config/locales/id.yml +2 -3
  75. data/config/locales/it.yml +15 -7
  76. data/config/locales/ja.yml +8 -3
  77. data/config/locales/ko.yml +1 -2
  78. data/config/locales/lt.yml +27 -6
  79. data/config/locales/lv.yml +1 -2
  80. data/config/locales/mk.yml +134 -0
  81. data/config/locales/nb.yml +16 -7
  82. data/config/locales/nl.yml +13 -3
  83. data/config/locales/pl.yml +75 -5
  84. data/config/locales/pt-BR.yml +10 -3
  85. data/config/locales/pt-PT.yml +1 -2
  86. data/config/locales/ro.yml +1 -2
  87. data/config/locales/ru.yml +5 -3
  88. data/config/locales/sk.yml +168 -0
  89. data/config/locales/sv-SE.yml +4 -3
  90. data/config/locales/tr.yml +10 -2
  91. data/config/locales/uk.yml +4 -3
  92. data/config/locales/vi.yml +48 -8
  93. data/config/locales/zh-CN.yml +38 -7
  94. data/config/locales/zh-TW.yml +2 -3
  95. data/docs/.gitignore +1 -0
  96. data/docs/0-installation.md +19 -13
  97. data/docs/1-general-configuration.md +37 -4
  98. data/docs/10-custom-pages.md +47 -3
  99. data/docs/11-decorators.md +4 -0
  100. data/docs/12-arbre-components.md +73 -9
  101. data/docs/13-authorization-adapter.md +72 -35
  102. data/docs/14-gotchas.md +57 -19
  103. data/docs/2-resource-customization.md +64 -20
  104. data/docs/3-index-pages/custom-index.md +5 -1
  105. data/docs/3-index-pages/index-as-block.md +3 -5
  106. data/docs/3-index-pages/index-as-blog.md +4 -6
  107. data/docs/3-index-pages/index-as-grid.md +3 -5
  108. data/docs/3-index-pages/index-as-table.md +33 -12
  109. data/docs/3-index-pages.md +65 -9
  110. data/docs/4-csv-format.md +16 -0
  111. data/docs/5-forms.md +78 -17
  112. data/docs/6-show-pages.md +5 -29
  113. data/docs/7-sidebars.md +5 -1
  114. data/docs/8-custom-actions.md +18 -1
  115. data/docs/9-batch-actions.md +8 -4
  116. data/docs/CNAME +1 -0
  117. data/docs/Gemfile +3 -0
  118. data/docs/Gemfile.lock +248 -0
  119. data/docs/_config.yml +4 -0
  120. data/docs/_includes/footer.html +8 -0
  121. data/docs/_includes/google-analytics.html +16 -0
  122. data/docs/_includes/head.html +7 -0
  123. data/docs/_includes/toc.html +98 -0
  124. data/docs/_includes/top-menu.html +17 -0
  125. data/docs/_layouts/default.html +21 -0
  126. data/docs/documentation.md +60 -0
  127. data/docs/images/activeadmin.png +0 -0
  128. data/docs/images/code-header.png +0 -0
  129. data/docs/images/divider.png +0 -0
  130. data/docs/images/features.png +0 -0
  131. data/docs/images/tidelift.svg +14 -0
  132. data/docs/index.html +226 -0
  133. data/docs/stylesheets/main.css +1205 -0
  134. data/lib/active_admin/abstract_view_factory.rb +13 -51
  135. data/lib/active_admin/application.rb +50 -140
  136. data/lib/active_admin/application_settings.rb +42 -0
  137. data/lib/active_admin/authorization_adapter.rb +0 -3
  138. data/lib/active_admin/base_controller/authorization.rb +4 -7
  139. data/lib/active_admin/base_controller/menu.rb +10 -14
  140. data/lib/active_admin/base_controller.rb +8 -14
  141. data/lib/active_admin/batch_actions/controller.rb +3 -3
  142. data/lib/active_admin/batch_actions/resource_extension.rb +9 -13
  143. data/lib/active_admin/batch_actions/views/batch_action_form.rb +1 -1
  144. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +1 -1
  145. data/lib/active_admin/batch_actions/views/selection_cells.rb +6 -5
  146. data/lib/active_admin/callbacks.rb +1 -1
  147. data/lib/active_admin/controller_action.rb +2 -1
  148. data/lib/active_admin/csv_builder.rb +15 -12
  149. data/lib/active_admin/dependency.rb +8 -76
  150. data/lib/active_admin/deprecation.rb +0 -25
  151. data/lib/active_admin/devise.rb +3 -3
  152. data/lib/active_admin/dsl.rb +3 -16
  153. data/lib/active_admin/dynamic_setting.rb +38 -0
  154. data/lib/active_admin/dynamic_settings_node.rb +28 -0
  155. data/lib/active_admin/engine.rb +5 -0
  156. data/lib/active_admin/error.rb +5 -3
  157. data/lib/active_admin/filters/active.rb +13 -14
  158. data/lib/active_admin/filters/active_filter.rb +124 -0
  159. data/lib/active_admin/filters/active_sidebar.rb +54 -0
  160. data/lib/active_admin/filters/forms.rb +6 -4
  161. data/lib/active_admin/filters/formtastic_addons.rb +2 -2
  162. data/lib/active_admin/filters/resource_extension.rb +28 -43
  163. data/lib/active_admin/filters.rb +2 -0
  164. data/lib/active_admin/form_builder.rb +100 -59
  165. data/lib/active_admin/generators/boilerplate.rb +12 -4
  166. data/lib/active_admin/helpers/collection.rb +2 -0
  167. data/lib/active_admin/helpers/scope_chain.rb +1 -0
  168. data/lib/active_admin/inputs/datepicker_input.rb +12 -5
  169. data/lib/active_admin/inputs/filters/base/search_method_select.rb +2 -2
  170. data/lib/active_admin/inputs/filters/date_range_input.rb +21 -8
  171. data/lib/active_admin/inputs/filters/select_input.rb +6 -3
  172. data/lib/active_admin/inputs/filters/text_input.rb +25 -0
  173. data/lib/active_admin/inputs.rb +1 -0
  174. data/lib/active_admin/localizers/resource_localizer.rb +35 -0
  175. data/lib/active_admin/localizers.rb +11 -0
  176. data/lib/active_admin/menu.rb +6 -12
  177. data/lib/active_admin/menu_collection.rb +0 -2
  178. data/lib/active_admin/menu_item.rb +4 -32
  179. data/lib/active_admin/namespace.rb +36 -17
  180. data/lib/active_admin/namespace_settings.rb +123 -0
  181. data/lib/active_admin/order_clause.rb +30 -8
  182. data/lib/active_admin/orm/active_record/comments/comment.rb +3 -17
  183. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +19 -7
  184. data/lib/active_admin/orm/active_record/comments.rb +17 -11
  185. data/lib/active_admin/page.rb +23 -4
  186. data/lib/active_admin/page_controller.rb +2 -6
  187. data/lib/active_admin/page_dsl.rb +5 -1
  188. data/lib/active_admin/page_presenter.rb +2 -1
  189. data/lib/active_admin/pundit_adapter.rb +18 -5
  190. data/lib/active_admin/resource/action_items.rb +17 -5
  191. data/lib/active_admin/resource/attributes.rb +47 -0
  192. data/lib/active_admin/resource/belongs_to.rb +10 -1
  193. data/lib/active_admin/resource/menu.rb +7 -4
  194. data/lib/active_admin/resource/model.rb +15 -0
  195. data/lib/active_admin/resource/naming.rb +3 -3
  196. data/lib/active_admin/resource/ordering.rb +11 -0
  197. data/lib/active_admin/resource/page_presenters.rb +1 -1
  198. data/lib/active_admin/resource/routes.rb +52 -20
  199. data/lib/active_admin/resource/scopes.rb +5 -3
  200. data/lib/active_admin/resource/sidebars.rb +1 -1
  201. data/lib/active_admin/resource.rb +59 -7
  202. data/lib/active_admin/resource_collection.rb +2 -2
  203. data/lib/active_admin/resource_controller/action_builder.rb +10 -0
  204. data/lib/active_admin/resource_controller/data_access.rb +32 -27
  205. data/lib/active_admin/resource_controller/decorators.rb +5 -5
  206. data/lib/active_admin/resource_controller/polymorphic_routes.rb +36 -0
  207. data/lib/active_admin/resource_controller/resource_class_methods.rb +2 -0
  208. data/lib/active_admin/resource_controller/scoping.rb +1 -1
  209. data/lib/active_admin/resource_controller.rb +15 -0
  210. data/lib/active_admin/resource_dsl.rb +58 -24
  211. data/lib/active_admin/router.rb +90 -82
  212. data/lib/active_admin/scope.rb +20 -12
  213. data/lib/active_admin/settings_node.rb +19 -0
  214. data/lib/active_admin/sidebar_section.rb +3 -1
  215. data/lib/active_admin/version.rb +1 -1
  216. data/lib/active_admin/view_helpers/auto_link_helper.rb +2 -2
  217. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +2 -2
  218. data/lib/active_admin/view_helpers/display_helper.rb +28 -16
  219. data/lib/active_admin/view_helpers/download_format_links_helper.rb +13 -0
  220. data/lib/active_admin/view_helpers/fields_for.rb +1 -2
  221. data/lib/active_admin/view_helpers/form_helper.rb +2 -2
  222. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +8 -1
  223. data/lib/active_admin/view_helpers/scope_name_helper.rb +16 -0
  224. data/lib/active_admin/view_helpers.rb +2 -1
  225. data/lib/active_admin/views/action_items.rb +1 -1
  226. data/lib/active_admin/views/components/active_admin_form.rb +43 -11
  227. data/lib/active_admin/views/components/attributes_table.rb +4 -4
  228. data/lib/active_admin/views/components/columns.rb +3 -3
  229. data/lib/active_admin/views/components/dropdown_menu.rb +4 -4
  230. data/lib/active_admin/views/components/index_list.rb +4 -3
  231. data/lib/active_admin/views/components/menu.rb +32 -0
  232. data/lib/active_admin/views/components/menu_item.rb +58 -0
  233. data/lib/active_admin/views/components/paginated_collection.rb +7 -11
  234. data/lib/active_admin/views/components/scopes.rb +14 -8
  235. data/lib/active_admin/views/components/sidebar.rb +13 -0
  236. data/lib/active_admin/views/components/site_title.rb +5 -6
  237. data/lib/active_admin/views/components/status_tag.rb +11 -16
  238. data/lib/active_admin/views/components/table_for.rb +7 -16
  239. data/lib/active_admin/views/components/tabs.rb +15 -3
  240. data/lib/active_admin/views/footer.rb +14 -4
  241. data/lib/active_admin/views/header.rb +3 -16
  242. data/lib/active_admin/views/index_as_blog.rb +2 -3
  243. data/lib/active_admin/views/index_as_grid.rb +25 -25
  244. data/lib/active_admin/views/index_as_table.rb +39 -13
  245. data/lib/active_admin/views/pages/base.rb +36 -57
  246. data/lib/active_admin/views/pages/form.rb +2 -3
  247. data/lib/active_admin/views/pages/layout.rb +1 -1
  248. data/lib/active_admin/views/pages/show.rb +8 -2
  249. data/lib/active_admin/views/tabbed_navigation.rb +4 -59
  250. data/lib/active_admin/views/title_bar.rb +4 -4
  251. data/lib/active_admin/views.rb +1 -1
  252. data/lib/active_admin.rb +11 -7
  253. data/lib/generators/active_admin/assets/assets_generator.rb +2 -2
  254. data/lib/generators/active_admin/assets/templates/active_admin.js +1 -0
  255. data/lib/generators/active_admin/devise/devise_generator.rb +8 -5
  256. data/lib/generators/active_admin/install/install_generator.rb +7 -3
  257. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +60 -4
  258. data/lib/generators/active_admin/install/templates/{admin_user.rb.erb → admin_users.rb.erb} +1 -3
  259. data/lib/generators/active_admin/install/templates/dashboard.rb +2 -3
  260. data/lib/generators/active_admin/install/templates/migrations/{create_active_admin_comments.rb → create_active_admin_comments.rb.erb} +2 -5
  261. data/lib/generators/active_admin/page/page_generator.rb +1 -1
  262. data/lib/generators/active_admin/resource/resource_generator.rb +2 -2
  263. data/lib/generators/active_admin/resource/templates/admin.rb.erb +46 -0
  264. data/lib/ransack_ext.rb +5 -5
  265. data/vendor/assets/javascripts/jquery-ui/data.js +41 -0
  266. data/vendor/assets/javascripts/jquery-ui/disable-selection.js +48 -0
  267. data/vendor/assets/javascripts/jquery-ui/escape-selector.js +23 -0
  268. data/vendor/assets/javascripts/jquery-ui/focusable.js +86 -0
  269. data/vendor/assets/javascripts/jquery-ui/form-reset-mixin.js +80 -0
  270. data/vendor/assets/javascripts/jquery-ui/form.js +22 -0
  271. data/vendor/assets/javascripts/jquery-ui/ie.js +17 -0
  272. data/vendor/assets/javascripts/jquery-ui/keycode.js +47 -0
  273. data/vendor/assets/javascripts/jquery-ui/labels.js +65 -0
  274. data/vendor/assets/javascripts/jquery-ui/plugin.js +46 -0
  275. data/vendor/assets/javascripts/jquery-ui/position.js +500 -0
  276. data/vendor/assets/javascripts/jquery-ui/safe-active-element.js +42 -0
  277. data/vendor/assets/javascripts/jquery-ui/safe-blur.js +23 -0
  278. data/vendor/assets/javascripts/jquery-ui/scroll-parent.js +47 -0
  279. data/vendor/assets/javascripts/jquery-ui/tabbable.js +38 -0
  280. data/vendor/assets/javascripts/jquery-ui/unique-id.js +51 -0
  281. data/vendor/assets/javascripts/jquery-ui/version.js +17 -0
  282. data/vendor/assets/javascripts/jquery-ui/widget.js +735 -0
  283. data/vendor/assets/javascripts/jquery-ui/widgets/button.js +391 -0
  284. data/vendor/assets/javascripts/jquery-ui/widgets/checkboxradio.js +291 -0
  285. data/vendor/assets/javascripts/jquery-ui/widgets/controlgroup.js +300 -0
  286. data/vendor/assets/javascripts/jquery-ui/widgets/datepicker.js +2123 -0
  287. data/vendor/assets/javascripts/jquery-ui/widgets/dialog.js +954 -0
  288. data/vendor/assets/javascripts/jquery-ui/widgets/draggable.js +1259 -0
  289. data/vendor/assets/javascripts/jquery-ui/widgets/mouse.js +230 -0
  290. data/vendor/assets/javascripts/jquery-ui/widgets/resizable.js +1207 -0
  291. data/vendor/assets/javascripts/jquery-ui/widgets/sortable.js +1561 -0
  292. data/vendor/assets/javascripts/jquery-ui/widgets/tabs.js +931 -0
  293. data/vendor/assets/stylesheets/active_admin/_normalize.scss +447 -0
  294. metadata +190 -539
  295. data/.gitignore +0 -49
  296. data/.hound.yml +0 -14
  297. data/.travis.yml +0 -46
  298. data/.yardopts +0 -8
  299. data/Gemfile +0 -75
  300. data/Guardfile +0 -8
  301. data/Rakefile +0 -33
  302. data/activeadmin.gemspec +0 -31
  303. data/app/assets/images/active_admin/datepicker/datepicker-input-icon.png +0 -0
  304. data/app/assets/javascripts/active_admin/base.js.coffee +0 -9
  305. data/app/assets/javascripts/active_admin/ext/jquery-ui.js.coffee +0 -6
  306. data/app/assets/javascripts/active_admin/ext/jquery.js.coffee +0 -7
  307. data/app/assets/javascripts/active_admin/initializers/batch_actions.js.coffee +0 -7
  308. data/app/assets/javascripts/active_admin/initializers/datepicker.js.coffee +0 -10
  309. data/app/assets/javascripts/active_admin/initializers/filters.js.coffee +0 -15
  310. data/app/assets/javascripts/active_admin/initializers/tabs.js.coffee +0 -3
  311. data/app/assets/javascripts/active_admin/jquery_ui.js.erb +0 -11
  312. data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +0 -39
  313. data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +0 -36
  314. data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +0 -101
  315. data/app/assets/javascripts/active_admin/lib/flash.js.coffee +0 -19
  316. data/app/assets/javascripts/active_admin/lib/has_many.js.coffee +0 -79
  317. data/app/assets/javascripts/active_admin/lib/modal_dialog.js.coffee +0 -45
  318. data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +0 -31
  319. data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +0 -24
  320. data/app/assets/stylesheets/active_admin/mixins/_reset.scss +0 -165
  321. data/cucumber.yml +0 -3
  322. data/features/action_item.feature +0 -73
  323. data/features/authorization.feature +0 -64
  324. data/features/authorization_cancan.feature +0 -52
  325. data/features/authorization_pundit.feature +0 -37
  326. data/features/belongs_to.feature +0 -66
  327. data/features/breadcrumb.feature +0 -75
  328. data/features/comments/commenting.feature +0 -171
  329. data/features/comments/viewing_index.feature +0 -19
  330. data/features/dashboard.feature +0 -16
  331. data/features/decorators.feature +0 -43
  332. data/features/development_reloading.feature +0 -30
  333. data/features/edit_page.feature +0 -117
  334. data/features/favicon.feature +0 -20
  335. data/features/first_boot.feature +0 -16
  336. data/features/global_navigation.feature +0 -29
  337. data/features/i18n.feature +0 -43
  338. data/features/index/batch_actions.feature +0 -196
  339. data/features/index/filters.feature +0 -161
  340. data/features/index/format_as_csv.feature +0 -203
  341. data/features/index/formats.feature +0 -66
  342. data/features/index/index_as_block.feature +0 -15
  343. data/features/index/index_as_blog.feature +0 -69
  344. data/features/index/index_as_grid.feature +0 -45
  345. data/features/index/index_as_table.feature +0 -291
  346. data/features/index/index_blank_slate.feature +0 -83
  347. data/features/index/index_parameters.feature +0 -75
  348. data/features/index/index_scope_to.feature +0 -56
  349. data/features/index/index_scopes.feature +0 -251
  350. data/features/index/page_title.feature +0 -42
  351. data/features/index/pagination.feature +0 -63
  352. data/features/index/switch_index_view.feature +0 -73
  353. data/features/menu.feature +0 -53
  354. data/features/meta_tags.feature +0 -21
  355. data/features/new_page.feature +0 -109
  356. data/features/registering_assets.feature +0 -34
  357. data/features/registering_pages.feature +0 -148
  358. data/features/registering_resources.feature +0 -33
  359. data/features/renamed_resource.feature +0 -32
  360. data/features/root_to.feature +0 -17
  361. data/features/show/columns.feature +0 -40
  362. data/features/show/default_content.feature +0 -44
  363. data/features/show/page_title.feature +0 -59
  364. data/features/show/tabs.feature +0 -27
  365. data/features/sidebar_sections.feature +0 -210
  366. data/features/site_title.feature +0 -47
  367. data/features/specifying_actions.feature +0 -93
  368. data/features/step_definitions/action_item_steps.rb +0 -7
  369. data/features/step_definitions/action_link_steps.rb +0 -20
  370. data/features/step_definitions/additional_web_steps.rb +0 -81
  371. data/features/step_definitions/asset_steps.rb +0 -15
  372. data/features/step_definitions/attribute_steps.rb +0 -18
  373. data/features/step_definitions/batch_action_steps.rb +0 -81
  374. data/features/step_definitions/blog_steps.rb +0 -3
  375. data/features/step_definitions/breadcrumb_steps.rb +0 -3
  376. data/features/step_definitions/column_steps.rb +0 -8
  377. data/features/step_definitions/comment_steps.rb +0 -12
  378. data/features/step_definitions/configuration_steps.rb +0 -100
  379. data/features/step_definitions/dashboard_steps.rb +0 -15
  380. data/features/step_definitions/factory_steps.rb +0 -35
  381. data/features/step_definitions/filter_steps.rb +0 -39
  382. data/features/step_definitions/flash_steps.rb +0 -11
  383. data/features/step_definitions/format_steps.rb +0 -52
  384. data/features/step_definitions/i18n_steps.rb +0 -3
  385. data/features/step_definitions/index_scope_steps.rb +0 -21
  386. data/features/step_definitions/index_views_steps.rb +0 -3
  387. data/features/step_definitions/layout_steps.rb +0 -3
  388. data/features/step_definitions/member_link_steps.rb +0 -7
  389. data/features/step_definitions/menu_steps.rb +0 -11
  390. data/features/step_definitions/meta_tag_steps.rb +0 -3
  391. data/features/step_definitions/pagination_steps.rb +0 -15
  392. data/features/step_definitions/sidebar_steps.rb +0 -13
  393. data/features/step_definitions/site_title_steps.rb +0 -17
  394. data/features/step_definitions/symbol_leak_steps.rb +0 -3
  395. data/features/step_definitions/tab_steps.rb +0 -8
  396. data/features/step_definitions/table_steps.rb +0 -120
  397. data/features/step_definitions/user_steps.rb +0 -45
  398. data/features/step_definitions/web_steps.rb +0 -85
  399. data/features/sti_resource.feature +0 -65
  400. data/features/strong_parameters.feature +0 -73
  401. data/features/support/env.rb +0 -162
  402. data/features/support/paths.rb +0 -71
  403. data/features/support/selectors.rb +0 -45
  404. data/features/symbol_leak.feature +0 -35
  405. data/features/users/logging_in.feature +0 -34
  406. data/features/users/logging_out.feature +0 -13
  407. data/features/users/resetting_password.feature +0 -34
  408. data/lib/active_admin/event.rb +0 -24
  409. data/lib/active_admin/filters/humanized.rb +0 -68
  410. data/lib/active_admin/helpers/settings.rb +0 -115
  411. data/lib/active_admin/reloader.rb +0 -25
  412. data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +0 -1
  413. data/lib/generators/active_admin/resource/templates/admin.rb +0 -45
  414. data/script/local +0 -53
  415. data/script/travis_cache +0 -107
  416. data/script/use_rails +0 -53
  417. data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +0 -50
  418. data/spec/javascripts/coffeescripts/jquery.aa.flash.js.coffee +0 -25
  419. data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +0 -34
  420. data/spec/javascripts/fixtures/checkboxes.html +0 -9
  421. data/spec/javascripts/fixtures/flashes.html +0 -2
  422. data/spec/javascripts/fixtures/table_checkboxes.html +0 -17
  423. data/spec/javascripts/helpers/SpecHelper.js +0 -3
  424. data/spec/javascripts/support/jasmine.yml +0 -74
  425. data/spec/javascripts/support/jasmine_config.rb +0 -23
  426. data/spec/javascripts/support/jasmine_runner.rb +0 -32
  427. data/spec/rails_helper.rb +0 -169
  428. data/spec/requests/default_namespace_spec.rb +0 -61
  429. data/spec/requests/javascript_spec.rb +0 -22
  430. data/spec/requests/memory_spec.rb +0 -21
  431. data/spec/requests/stylesheets_spec.rb +0 -18
  432. data/spec/spec_helper.rb +0 -17
  433. data/spec/support/active_admin_request_helpers.rb +0 -27
  434. data/spec/support/deferred_garbage_collection.rb +0 -19
  435. data/spec/support/detect_rails_version.rb +0 -34
  436. data/spec/support/jslint.yml +0 -80
  437. data/spec/support/rails_template.rb +0 -158
  438. data/spec/support/rails_template_with_data.rb +0 -55
  439. data/spec/support/templates/admin/stores.rb +0 -9
  440. data/spec/support/templates/en.yml +0 -8
  441. data/spec/support/templates/policies/active_admin/comment_policy.rb +0 -9
  442. data/spec/support/templates/policies/active_admin/page_policy.rb +0 -18
  443. data/spec/support/templates/policies/admin_user_policy.rb +0 -11
  444. data/spec/support/templates/policies/application_policy.rb +0 -45
  445. data/spec/support/templates/policies/category_policy.rb +0 -7
  446. data/spec/support/templates/policies/post_policy.rb +0 -15
  447. data/spec/support/templates/policies/store_policy.rb +0 -11
  448. data/spec/support/templates/policies/user_policy.rb +0 -11
  449. data/spec/support/templates/post_decorator.rb +0 -11
  450. data/spec/unit/abstract_view_factory_spec.rb +0 -79
  451. data/spec/unit/action_builder_spec.rb +0 -134
  452. data/spec/unit/active_admin_spec.rb +0 -11
  453. data/spec/unit/application_spec.rb +0 -165
  454. data/spec/unit/asset_registration_spec.rb +0 -52
  455. data/spec/unit/authorization/authorization_adapter_spec.rb +0 -61
  456. data/spec/unit/authorization/controller_authorization_spec.rb +0 -39
  457. data/spec/unit/authorization/index_overriding_spec.rb +0 -23
  458. data/spec/unit/auto_link_spec.rb +0 -69
  459. data/spec/unit/batch_actions/resource_spec.rb +0 -97
  460. data/spec/unit/batch_actions/settings_spec.rb +0 -61
  461. data/spec/unit/belongs_to_spec.rb +0 -65
  462. data/spec/unit/cancan_adapter_spec.rb +0 -43
  463. data/spec/unit/comments_spec.rb +0 -188
  464. data/spec/unit/component_spec.rb +0 -18
  465. data/spec/unit/config_shared_examples.rb +0 -59
  466. data/spec/unit/controller_filters_spec.rb +0 -41
  467. data/spec/unit/csv_builder_spec.rb +0 -303
  468. data/spec/unit/dependency_spec.rb +0 -135
  469. data/spec/unit/devise_spec.rb +0 -96
  470. data/spec/unit/dsl_spec.rb +0 -122
  471. data/spec/unit/filters/filter_form_builder_spec.rb +0 -434
  472. data/spec/unit/filters/humanized_spec.rb +0 -56
  473. data/spec/unit/filters/resource_spec.rb +0 -128
  474. data/spec/unit/form_builder_spec.rb +0 -815
  475. data/spec/unit/generators/install_spec.rb +0 -24
  476. data/spec/unit/helpers/collection_spec.rb +0 -65
  477. data/spec/unit/helpers/scope_chain_spec.rb +0 -36
  478. data/spec/unit/helpers/settings_spec.rb +0 -30
  479. data/spec/unit/i18n_spec.rb +0 -12
  480. data/spec/unit/menu_collection_spec.rb +0 -62
  481. data/spec/unit/menu_item_spec.rb +0 -143
  482. data/spec/unit/menu_spec.rb +0 -71
  483. data/spec/unit/namespace/authorization_spec.rb +0 -27
  484. data/spec/unit/namespace/register_page_spec.rb +0 -73
  485. data/spec/unit/namespace/register_resource_spec.rb +0 -160
  486. data/spec/unit/namespace_spec.rb +0 -103
  487. data/spec/unit/order_clause_spec.rb +0 -81
  488. data/spec/unit/page_controller_spec.rb +0 -5
  489. data/spec/unit/page_spec.rb +0 -78
  490. data/spec/unit/pretty_format_spec.rb +0 -77
  491. data/spec/unit/pundit_adapter_spec.rb +0 -98
  492. data/spec/unit/resource/action_items_spec.rb +0 -65
  493. data/spec/unit/resource/includes_spec.rb +0 -21
  494. data/spec/unit/resource/menu_spec.rb +0 -18
  495. data/spec/unit/resource/naming_spec.rb +0 -122
  496. data/spec/unit/resource/page_presenters_spec.rb +0 -44
  497. data/spec/unit/resource/pagination_spec.rb +0 -38
  498. data/spec/unit/resource/routes_spec.rb +0 -77
  499. data/spec/unit/resource/scopes_spec.rb +0 -50
  500. data/spec/unit/resource/sidebars_spec.rb +0 -43
  501. data/spec/unit/resource_collection_spec.rb +0 -175
  502. data/spec/unit/resource_controller/data_access_spec.rb +0 -140
  503. data/spec/unit/resource_controller/decorators_spec.rb +0 -94
  504. data/spec/unit/resource_controller/sidebars_spec.rb +0 -38
  505. data/spec/unit/resource_controller_spec.rb +0 -269
  506. data/spec/unit/resource_registration_spec.rb +0 -56
  507. data/spec/unit/resource_spec.rb +0 -331
  508. data/spec/unit/routing_spec.rb +0 -185
  509. data/spec/unit/scope_spec.rb +0 -185
  510. data/spec/unit/settings_spec.rb +0 -118
  511. data/spec/unit/view_factory_spec.rb +0 -19
  512. data/spec/unit/view_helpers/breadcrumbs_spec.rb +0 -217
  513. data/spec/unit/view_helpers/display_helper_spec.rb +0 -165
  514. data/spec/unit/view_helpers/download_format_links_helper_spec.rb +0 -39
  515. data/spec/unit/view_helpers/fields_for_spec.rb +0 -50
  516. data/spec/unit/view_helpers/flash_helper_spec.rb +0 -25
  517. data/spec/unit/view_helpers/form_helper_spec.rb +0 -43
  518. data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +0 -139
  519. data/spec/unit/views/components/attributes_table_spec.rb +0 -272
  520. data/spec/unit/views/components/batch_action_selector_spec.rb +0 -43
  521. data/spec/unit/views/components/blank_slate_spec.rb +0 -27
  522. data/spec/unit/views/components/columns_spec.rb +0 -189
  523. data/spec/unit/views/components/index_list_spec.rb +0 -35
  524. data/spec/unit/views/components/index_table_for_spec.rb +0 -127
  525. data/spec/unit/views/components/paginated_collection_spec.rb +0 -249
  526. data/spec/unit/views/components/panel_spec.rb +0 -58
  527. data/spec/unit/views/components/sidebar_section_spec.rb +0 -68
  528. data/spec/unit/views/components/site_title_spec.rb +0 -78
  529. data/spec/unit/views/components/status_tag_spec.rb +0 -249
  530. data/spec/unit/views/components/table_for_spec.rb +0 -434
  531. data/spec/unit/views/components/tabs_spec.rb +0 -39
  532. data/spec/unit/views/components/unsupported_browser_spec.rb +0 -41
  533. data/spec/unit/views/index_as_blog_spec.rb +0 -76
  534. data/spec/unit/views/pages/form_spec.rb +0 -51
  535. data/spec/unit/views/pages/index_spec.rb +0 -60
  536. data/spec/unit/views/pages/layout_spec.rb +0 -59
  537. data/spec/unit/views/pages/show_spec.rb +0 -33
  538. data/spec/unit/views/tabbed_navigation_spec.rb +0 -158
  539. data/tasks/docs.rake +0 -37
  540. data/tasks/parallel_tests.rake +0 -66
  541. data/tasks/test.rake +0 -91
  542. data/tasks/yard.rake +0 -9
@@ -4,6 +4,7 @@ require 'pundit'
4
4
 
5
5
  # Add a setting to the application to configure the pundit default policy
6
6
  ActiveAdmin::Application.inheritable_setting :pundit_default_policy, nil
7
+ ActiveAdmin::Application.inheritable_setting :pundit_policy_namespace, nil
7
8
 
8
9
  module ActiveAdmin
9
10
 
@@ -19,7 +20,7 @@ module ActiveAdmin
19
20
  def scope_collection(collection, action = Auth::READ)
20
21
  # scoping is appliable only to read/index action
21
22
  # which means there is no way how to scope other actions
22
- Pundit.policy_scope!(user, collection)
23
+ Pundit.policy_scope!(user, namespace(collection))
23
24
  rescue Pundit::NotDefinedError => e
24
25
  if default_policy_class && default_policy_class.const_defined?(:Scope)
25
26
  default_policy_class::Scope.new(user, collection).resolve
@@ -30,9 +31,9 @@ module ActiveAdmin
30
31
 
31
32
  def retrieve_policy(subject)
32
33
  case subject
33
- when nil then Pundit.policy!(user, resource)
34
- when Class then Pundit.policy!(user, subject.new)
35
- else Pundit.policy!(user, subject)
34
+ when nil then Pundit.policy!(user, namespace(resource))
35
+ when Class then Pundit.policy!(user, namespace(subject.new))
36
+ else Pundit.policy!(user, namespace(subject))
36
37
  end
37
38
  rescue Pundit::NotDefinedError => e
38
39
  if default_policy_class
@@ -43,7 +44,7 @@ module ActiveAdmin
43
44
  end
44
45
 
45
46
  def format_action(action, subject)
46
- # https://github.com/elabs/pundit/blob/master/lib/generators/pundit/install/templates/application_policy.rb
47
+ # https://github.com/varvet/pundit/blob/master/lib/generators/pundit/install/templates/application_policy.rb
47
48
  case action
48
49
  when Auth::CREATE then :create?
49
50
  when Auth::UPDATE then :update?
@@ -55,6 +56,14 @@ module ActiveAdmin
55
56
 
56
57
  private
57
58
 
59
+ def namespace(object)
60
+ if default_policy_namespace && !object.class.to_s.include?(default_policy_namespace.to_s.camelize)
61
+ [default_policy_namespace.to_sym, object]
62
+ else
63
+ object
64
+ end
65
+ end
66
+
58
67
  def default_policy_class
59
68
  ActiveAdmin.application.pundit_default_policy && ActiveAdmin.application.pundit_default_policy.constantize
60
69
  end
@@ -63,6 +72,10 @@ module ActiveAdmin
63
72
  default_policy_class.new(user, subject)
64
73
  end
65
74
 
75
+ def default_policy_namespace
76
+ ActiveAdmin.application.pundit_policy_namespace
77
+ end
78
+
66
79
  end
67
80
 
68
81
  end
@@ -24,6 +24,7 @@ module ActiveAdmin
24
24
  # this action item on.
25
25
  # :except: A single or array of controller actions not to
26
26
  # display this action item on.
27
+ # :priority: A single integer value. To control the display order. Default is 10.
27
28
  def add_action_item(name, options = {}, &block)
28
29
  self.action_items << ActiveAdmin::ActionItem.new(name, options, &block)
29
30
  end
@@ -38,7 +39,7 @@ module ActiveAdmin
38
39
  #
39
40
  # @return [Array] Array of ActionItems for the controller actions
40
41
  def action_items_for(action, render_context = nil)
41
- action_items.select{ |item| item.display_on? action, render_context }
42
+ action_items.select { |item| item.display_on? action, render_context }.sort_by(&:priority)
42
43
  end
43
44
 
44
45
  # Clears all the existing action items for this resource
@@ -64,7 +65,8 @@ module ActiveAdmin
64
65
  def add_default_new_action_item
65
66
  add_action_item :new, only: :index do
66
67
  if controller.action_methods.include?('new') && authorized?(ActiveAdmin::Auth::CREATE, active_admin_config.resource_class)
67
- link_to I18n.t('active_admin.new_model', model: active_admin_config.resource_label), new_resource_path
68
+ localizer = ActiveAdmin::Localizers.resource(active_admin_config)
69
+ link_to localizer.t(:new_model), new_resource_path
68
70
  end
69
71
  end
70
72
  end
@@ -73,7 +75,8 @@ module ActiveAdmin
73
75
  def add_default_edit_action_item
74
76
  add_action_item :edit, only: :show do
75
77
  if controller.action_methods.include?('edit') && authorized?(ActiveAdmin::Auth::UPDATE, resource)
76
- link_to I18n.t('active_admin.edit_model', model: active_admin_config.resource_label), edit_resource_path(resource)
78
+ localizer = ActiveAdmin::Localizers.resource(active_admin_config)
79
+ link_to localizer.t(:edit_model), edit_resource_path(resource)
77
80
  end
78
81
  end
79
82
  end
@@ -82,8 +85,9 @@ module ActiveAdmin
82
85
  def add_default_show_action_item
83
86
  add_action_item :destroy, only: :show do
84
87
  if controller.action_methods.include?('destroy') && authorized?(ActiveAdmin::Auth::DESTROY, resource)
85
- link_to I18n.t('active_admin.delete_model', model: active_admin_config.resource_label), resource_path(resource),
86
- method: :delete, data: {confirm: I18n.t('active_admin.delete_confirmation')}
88
+ localizer = ActiveAdmin::Localizers.resource(active_admin_config)
89
+ link_to localizer.t(:delete_model), resource_path(resource), method: :delete,
90
+ data: { confirm: localizer.t(:delete_confirmation) }
87
91
  end
88
92
  end
89
93
  end
@@ -103,6 +107,14 @@ module ActiveAdmin
103
107
  @block = block
104
108
  normalize_display_options!
105
109
  end
110
+
111
+ def html_class
112
+ "action_item #{@options[:class]}".rstrip
113
+ end
114
+
115
+ def priority
116
+ @options[:priority] || 10
117
+ end
106
118
  end
107
119
 
108
120
  end
@@ -0,0 +1,47 @@
1
+ module ActiveAdmin
2
+
3
+ class Resource
4
+ module Attributes
5
+
6
+ def default_attributes
7
+ resource_class.columns.each_with_object({}) do |c, attrs|
8
+ unless reject_col?(c)
9
+ name = c.name.to_sym
10
+ attrs[name] = (method_for_column(name) || name)
11
+ end
12
+ end
13
+ end
14
+
15
+ def method_for_column(c)
16
+ resource_class.respond_to?(:reflect_on_all_associations) && foreign_methods.has_key?(c) && foreign_methods[c].name.to_sym
17
+ end
18
+
19
+ def foreign_methods
20
+ @foreign_methods ||= resource_class.reflect_on_all_associations.
21
+ select { |r| r.macro == :belongs_to }.
22
+ reject { |r| r.chain.length > 2 && !r.options[:polymorphic] }.
23
+ index_by { |r| r.foreign_key.to_sym }
24
+ end
25
+
26
+ def reject_col?(c)
27
+ primary_col?(c) || sti_col?(c) || counter_cache_col?(c) || filtered_col?(c)
28
+ end
29
+
30
+ def primary_col?(c)
31
+ c.name == resource_class.primary_key
32
+ end
33
+
34
+ def sti_col?(c)
35
+ c.name == resource_class.inheritance_column
36
+ end
37
+
38
+ def counter_cache_col?(c)
39
+ c.name.end_with?('_count')
40
+ end
41
+
42
+ def filtered_col?(c)
43
+ ActiveAdmin.application.filter_attributes.include?(c.name.to_sym)
44
+ end
45
+ end
46
+ end
47
+ end
@@ -14,8 +14,13 @@ module ActiveAdmin
14
14
  # The resource which initiated this relationship
15
15
  attr_reader :owner
16
16
 
17
+ # The name of the relation
18
+ attr_reader :target_name
19
+
17
20
  def initialize(owner, target_name, options = {})
18
- @owner, @target_name, @options = owner, target_name, options
21
+ @owner = owner
22
+ @target_name = target_name
23
+ @options = options
19
24
  end
20
25
 
21
26
  # Returns the target resource class or raises an exception if it doesn't exist
@@ -39,6 +44,10 @@ module ActiveAdmin
39
44
  def required?
40
45
  !optional?
41
46
  end
47
+
48
+ def to_param
49
+ :"#{@target_name}_id"
50
+ end
42
51
  end
43
52
  end
44
53
  end
@@ -10,6 +10,7 @@ module ActiveAdmin
10
10
  @include_in_menu = false
11
11
  @menu_item_options = {}
12
12
  else
13
+ @include_in_menu = true
13
14
  @navigation_menu_name = options[:menu_name]
14
15
  @menu_item_options = default_menu_options.merge options
15
16
  end
@@ -25,13 +26,15 @@ module ActiveAdmin
25
26
  resource = self
26
27
  {
27
28
  id: resource_name.plural,
28
- label: proc{ resource.plural_resource_label },
29
- url: proc{ resource.route_collection_path(params) },
30
- if: proc{ authorized?(Auth::READ, menu_resource_class) }
29
+ label: proc { resource.plural_resource_label },
30
+ url: proc { resource.route_collection_path(params, url_options) },
31
+ if: proc { authorized?(Auth::READ, menu_resource_class) }
31
32
  }
32
33
  end
33
34
 
34
- attr_writer :navigation_menu_name
35
+ def navigation_menu_name=(menu_name)
36
+ self.menu_item_options = { menu_name: menu_name }
37
+ end
35
38
 
36
39
  def navigation_menu_name
37
40
  case @navigation_menu_name ||= DEFAULT_MENU
@@ -0,0 +1,15 @@
1
+ module ActiveAdmin
2
+ class Model
3
+ def initialize(resource, record)
4
+ @record = record
5
+
6
+ if resource
7
+ @record.extend(resource.resource_name_extension)
8
+ end
9
+ end
10
+
11
+ def to_model
12
+ @record
13
+ end
14
+ end
15
+ end
@@ -22,8 +22,8 @@ module ActiveAdmin
22
22
 
23
23
  # Returns the plural version of this resource such as "Bank Accounts"
24
24
  def plural_resource_label(options = {})
25
- defaults = {count: Helpers::I18n::PLURAL_MANY_COUNT,
26
- default: resource_label.pluralize.titleize}
25
+ defaults = { count: Helpers::I18n::PLURAL_MANY_COUNT,
26
+ default: resource_label.pluralize.titleize }
27
27
  resource_name.translate defaults.merge options
28
28
  end
29
29
 
@@ -46,7 +46,7 @@ module ActiveAdmin
46
46
  end
47
47
 
48
48
  def translate(options = {})
49
- I18n.t i18n_key, {scope: [:activerecord, :models]}.merge(options)
49
+ I18n.t i18n_key, { scope: [:activerecord, :models] }.merge(options)
50
50
  end
51
51
 
52
52
  def route_key
@@ -0,0 +1,11 @@
1
+ module ActiveAdmin
2
+ class Resource
3
+ module Ordering
4
+
5
+ def ordering
6
+ @ordering ||= {}.with_indifferent_access
7
+ end
8
+
9
+ end
10
+ end
11
+ end
@@ -33,7 +33,7 @@ module ActiveAdmin
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
35
  # @return [PagePresenter, nil]
36
- def get_page_presenter(action, type=nil)
36
+ def get_page_presenter(action, type = nil)
37
37
 
38
38
  if action.to_s == "index" && type && page_presenters[:index].kind_of?(Hash)
39
39
  page_presenters[:index][type.to_sym]
@@ -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?
@@ -37,32 +49,45 @@ module ActiveAdmin
37
49
  @resource = resource
38
50
  end
39
51
 
40
- def collection_path(params)
52
+ def collection_path(params, additional_params = {})
53
+ route_name = route_name(
54
+ resource.resources_configuration[:self][:route_collection_name],
55
+ suffix: (resource.route_uncountable? ? "index_path" : "path")
56
+ )
57
+
58
+ routes.public_send route_name, *route_collection_params(params), additional_params
59
+ end
60
+
61
+ def batch_action_path(params, additional_params = {})
41
62
  route_name = route_name(
42
63
  resource.resources_configuration[:self][:route_collection_name],
64
+ action: :batch_action,
43
65
  suffix: (resource.route_uncountable? ? "index_path" : "path")
44
66
  )
45
67
 
46
- routes.public_send route_name, *route_collection_params(params)
68
+ query = params.slice(:q, :scope)
69
+ query = query.permit!.to_h
70
+ routes.public_send route_name, *route_collection_params(params), additional_params.merge(query)
47
71
  end
48
72
 
49
73
  # @return [String] the path to this resource collection page
50
74
  # @param instance [ActiveRecord::Base] the instance we want the path of
51
75
  # @example "/admin/posts/1"
52
- def instance_path(instance)
76
+ def instance_path(instance, additional_params = {})
53
77
  route_name = route_name(resource.resources_configuration[:self][:route_instance_name])
54
78
 
55
- routes.public_send route_name, *route_instance_params(instance)
79
+ routes.public_send route_name, *route_instance_params(instance), additional_params
56
80
  end
57
81
 
58
- # @return [String] the path to the edit page of this resource
82
+ # @return [String] the path to the member action of this resource
83
+ # @param action [Symbol]
59
84
  # @param instance [ActiveRecord::Base] the instance we want the path of
60
85
  # @example "/admin/posts/1/edit"
61
- def edit_instance_path(instance)
86
+ def member_action_path(action, instance, additional_params = {})
62
87
  path = resource.resources_configuration[:self][:route_instance_name]
63
- route_name = route_name(path, action: :edit)
88
+ route_name = route_name(path, action: action)
64
89
 
65
- routes.public_send route_name, *route_instance_params(instance)
90
+ routes.public_send route_name, *route_instance_params(instance), additional_params
66
91
  end
67
92
 
68
93
  private
@@ -73,7 +98,7 @@ module ActiveAdmin
73
98
  suffix = options[:suffix] || "path"
74
99
  route = []
75
100
 
76
- route << options[:action] # "edit" or "new"
101
+ route << options[:action] # "batch_action", "edit" or "new"
77
102
  route << resource.route_prefix # "admin"
78
103
  route << belongs_to_name if nested? # "category"
79
104
  route << resource_path_name # "posts" or "post"
@@ -82,11 +107,10 @@ module ActiveAdmin
82
107
  route.compact.join('_').to_sym # :admin_category_posts_path
83
108
  end
84
109
 
85
-
86
110
  # @return params to pass to instance path
87
111
  def route_instance_params(instance)
88
112
  if nested?
89
- [instance.public_send(belongs_to_name).to_param, instance.to_param]
113
+ [instance.public_send(belongs_to_target_name).to_param, instance.to_param]
90
114
  else
91
115
  instance.to_param
92
116
  end
@@ -99,11 +123,19 @@ module ActiveAdmin
99
123
  end
100
124
 
101
125
  def nested?
102
- resource.belongs_to? && resource.belongs_to_config.required?
126
+ resource.belongs_to? && belongs_to_config.required?
127
+ end
128
+
129
+ def belongs_to_target_name
130
+ belongs_to_config.target_name
103
131
  end
104
132
 
105
133
  def belongs_to_name
106
- resource.belongs_to_config.target.resource_name.singular if nested?
134
+ belongs_to_config.target.resource_name.singular
135
+ end
136
+
137
+ def belongs_to_config
138
+ resource.belongs_to_config
107
139
  end
108
140
 
109
141
  def routes
@@ -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)
@@ -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,4 +1,5 @@
1
1
  require 'active_admin/resource/action_items'
2
+ require 'active_admin/resource/attributes'
2
3
  require 'active_admin/resource/controllers'
3
4
  require 'active_admin/resource/menu'
4
5
  require 'active_admin/resource/page_presenters'
@@ -10,6 +11,8 @@ require 'active_admin/resource/includes'
10
11
  require 'active_admin/resource/scope_to'
11
12
  require 'active_admin/resource/sidebars'
12
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
 
@@ -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
 
@@ -63,7 +72,8 @@ module ActiveAdmin
63
72
  @resource_class_name = "::#{resource_class.name}"
64
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,9 +166,33 @@ 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
178
  resource = resource_class.public_send *method_for_find(id)
148
- decorator_class ? decorator_class.new(resource) : resource
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
@@ -153,16 +200,21 @@ module ActiveAdmin
153
200
  def method_for_find(id)
154
201
  if finder = resources_configuration[:self][:finder]
155
202
  [finder, id]
156
- elsif Rails::VERSION::MAJOR >= 4
157
- [:find_by, { resource_class.primary_key => id }]
158
203
  else
159
- [:"find_by_#{resource_class.primary_key}", id]
204
+ [:find_by, { resource_class.primary_key => id }]
160
205
  end
161
206
  end
162
207
 
163
208
  def default_csv_builder
164
- @default_csv_builder ||= CSVBuilder.default_for_resource(resource_class)
209
+ @default_csv_builder ||= CSVBuilder.default_for_resource(self)
165
210
  end
166
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
167
219
  end # class Resource
168
220
  end # module ActiveAdmin
@@ -38,12 +38,12 @@ module ActiveAdmin
38
38
  r.resource_class.to_s == obj.to_s
39
39
  end ||
40
40
  if obj.respond_to? :base_class
41
- 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 }
42
42
  end
43
43
  end
44
44
 
45
45
  def resources
46
- select{ |r| r.class <= Resource } # can otherwise be a Page
46
+ select { |r| r.class <= Resource } # can otherwise be a Page
47
47
  end
48
48
 
49
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