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
@@ -0,0 +1,19 @@
1
+ module ActiveAdmin
2
+
3
+ class SettingsNode
4
+ class << self
5
+ # Never instantiated. Variables are stored in the singleton_class.
6
+ private_class_method :new
7
+
8
+ # @return anonymous class with same accessors as the superclass.
9
+ def build(superclass = self)
10
+ Class.new(superclass)
11
+ end
12
+
13
+ def register(name, value)
14
+ class_attribute name
15
+ send "#{name}=", value
16
+ end
17
+ end
18
+ end
19
+ end
@@ -6,7 +6,9 @@ module ActiveAdmin
6
6
  attr_accessor :name, :options, :block
7
7
 
8
8
  def initialize(name, options = {}, &block)
9
- @name, @options, @block = name.to_s, options, block
9
+ @name = name.to_s
10
+ @options = options
11
+ @block = block
10
12
  normalize_display_options!
11
13
  end
12
14
 
@@ -1,3 +1,3 @@
1
1
  module ActiveAdmin
2
- VERSION = '1.0.0.pre4'
2
+ VERSION = '2.4.0'
3
3
  end
@@ -26,10 +26,10 @@ module ActiveAdmin
26
26
 
27
27
  if config.controller.action_methods.include?("show") &&
28
28
  authorized?(ActiveAdmin::Auth::READ, resource)
29
- url_for config.route_instance_path resource
29
+ url_for config.route_instance_path resource, url_options
30
30
  elsif config.controller.action_methods.include?("edit") &&
31
31
  authorized?(ActiveAdmin::Auth::UPDATE, resource)
32
- url_for config.route_edit_instance_path resource
32
+ url_for config.route_edit_instance_path resource, url_options
33
33
  end
34
34
  end
35
35
 
@@ -12,9 +12,9 @@ module ActiveAdmin
12
12
  # 1. try using `display_name` if we can locate a DB object
13
13
  # 2. try using the model name translation
14
14
  # 3. default to calling `titlecase` on the URL fragment
15
- if part =~ /\A(\d+|[a-f0-9]{24})\z/ && parts[index-1]
15
+ if part =~ /\A(\d+|[a-f0-9]{24}|(?:[a-f0-9]{8}-(?:[a-f0-9]{4}-){3}[a-f0-9]{12}))\z/ && parts[index - 1]
16
16
  parent = active_admin_config.belongs_to_config.try :target
17
- config = parent && parent.resource_name.route_key == parts[index-1] ? parent : active_admin_config
17
+ config = parent && parent.resource_name.route_key == parts[index - 1] ? parent : active_admin_config
18
18
  name = display_name config.find_resource part
19
19
  end
20
20
  name ||= I18n.t "activerecord.models.#{part.singularize}", count: ::ActiveAdmin::Helpers::I18n::PLURAL_MANY_COUNT, default: part.titlecase
@@ -2,8 +2,9 @@ module ActiveAdmin
2
2
  module ViewHelpers
3
3
  module DisplayHelper
4
4
 
5
- DISPLAY_NAME_FALLBACK = ->{
6
- name, klass = "", self.class
5
+ DISPLAY_NAME_FALLBACK = -> {
6
+ name = ""
7
+ klass = self.class
7
8
  name << klass.model_name.human if klass.respond_to? :model_name
8
9
  name << " ##{send(klass.primary_key)}" if klass.respond_to? :primary_key
9
10
  name.present? ? name : to_s
@@ -15,7 +16,7 @@ module ActiveAdmin
15
16
  # Attempts to call any known display name methods on the resource.
16
17
  # See the setting in `application.rb` for the list of methods and their priority.
17
18
  def display_name(resource)
18
- render_in_context resource, display_name_method_for(resource) unless resource.nil?
19
+ ERB::Util.html_escape(render_in_context(resource, display_name_method_for(resource))) unless resource.nil?
19
20
  end
20
21
 
21
22
  # Looks up and caches the first available display name method.
@@ -25,7 +26,7 @@ module ActiveAdmin
25
26
  @@display_name_methods_cache ||= {}
26
27
  @@display_name_methods_cache[resource.class] ||= begin
27
28
  methods = active_admin_application.display_name_methods - association_methods_for(resource)
28
- method = methods.detect{ |method| resource.respond_to? method }
29
+ method = methods.detect { |method| resource.respond_to? method }
29
30
 
30
31
  if method != :to_s || resource.method(method).source_location
31
32
  method
@@ -42,16 +43,19 @@ module ActiveAdmin
42
43
 
43
44
  def format_attribute(resource, attr)
44
45
  value = find_value resource, attr
45
- value = pretty_format value if attr.is_a? Symbol
46
- value = Arbre::Context.new{ status_tag value } if boolean_attr? resource, attr
47
- value
46
+
47
+ if value.is_a?(Arbre::Element)
48
+ value
49
+ elsif boolean_attr?(resource, attr, value)
50
+ Arbre::Context.new { status_tag value }
51
+ else
52
+ pretty_format value
53
+ end
48
54
  end
49
55
 
50
56
  def find_value(resource, attr)
51
57
  if attr.is_a? Proc
52
58
  attr.call resource
53
- elsif attr =~ /\A(.+)_id\z/ && reflection_for(resource, $1.to_sym)
54
- resource.public_send $1
55
59
  elsif resource.respond_to? attr
56
60
  resource.public_send attr
57
61
  elsif resource.respond_to? :[]
@@ -65,25 +69,33 @@ module ActiveAdmin
65
69
  when String, Numeric, Symbol, Arbre::Element
66
70
  object.to_s
67
71
  when Date, Time
68
- localize object, format: active_admin_application.localize_format
72
+ I18n.localize object, format: active_admin_application.localize_format
73
+ when Array
74
+ format_collection(object)
69
75
  else
70
76
  if defined?(::ActiveRecord) && object.is_a?(ActiveRecord::Base) ||
71
77
  defined?(::Mongoid) && object.class.include?(Mongoid::Document)
72
78
  auto_link object
79
+ elsif defined?(::ActiveRecord) && object.is_a?(ActiveRecord::Relation)
80
+ format_collection(object)
73
81
  else
74
82
  display_name object
75
83
  end
76
84
  end
77
85
  end
78
86
 
79
- def reflection_for(resource, method)
80
- klass = resource.class
81
- klass.reflect_on_association method if klass.respond_to? :reflect_on_association
87
+ def format_collection(collection)
88
+ safe_join(collection.map { |item| pretty_format(item) }, ', ')
82
89
  end
83
90
 
84
- def boolean_attr?(resource, attr)
85
- if resource.class.respond_to? :columns_hash
86
- column = resource.class.columns_hash[attr.to_s] and column.type == :boolean
91
+ def boolean_attr?(resource, attr, value)
92
+ case value
93
+ when TrueClass, FalseClass
94
+ true
95
+ else
96
+ if resource.class.respond_to? :columns_hash
97
+ column = resource.class.columns_hash[attr.to_s] and column.type == :boolean
98
+ end
87
99
  end
88
100
  end
89
101
 
@@ -1,6 +1,19 @@
1
1
  module ActiveAdmin
2
2
  module ViewHelpers
3
3
  module DownloadFormatLinksHelper
4
+ private
5
+
6
+ def build_download_formats(download_links)
7
+ download_links = instance_exec(&download_links) if download_links.is_a?(Proc)
8
+
9
+ if download_links.is_a?(Array) && !download_links.empty?
10
+ download_links
11
+ elsif download_links == false
12
+ []
13
+ else
14
+ self.class.formats
15
+ end
16
+ end
4
17
 
5
18
  def build_download_format_links(formats = self.class.formats)
6
19
  params = request.query_parameters.except :format, :commit
@@ -16,7 +16,6 @@ module ActiveAdmin
16
16
  def fields_for_params(params, options = {})
17
17
  namespace = options[:namespace]
18
18
  except = Array.wrap(options[:except]).map &:to_s
19
- params = params.respond_to?(:to_unsafe_h) ? params.to_unsafe_h : params
20
19
 
21
20
  params.flat_map do |k, v|
22
21
  next if namespace.nil? && %w(controller action commit utf8).include?(k.to_s)
@@ -39,7 +38,7 @@ module ActiveAdmin
39
38
  end
40
39
  when nil
41
40
  { k => '' }
42
- when TrueClass,FalseClass
41
+ when TrueClass, FalseClass
43
42
  { k => v }
44
43
  else
45
44
  raise "I don't know what to do with #{v.class} params: #{v.inspect}"
@@ -8,8 +8,8 @@ module ActiveAdmin
8
8
  end.content
9
9
  end
10
10
 
11
- def hidden_field_tags_for(params, options={})
12
- fields_for_params(params, options).map do |kv|
11
+ def hidden_field_tags_for(params, options = {})
12
+ fields_for_params(params.to_unsafe_hash, options).map do |kv|
13
13
  k, v = kv.first
14
14
  hidden_field_tag k, v, id: sanitize_to_id("hidden_active_admin_#{k}")
15
15
  end.join("\n").html_safe
@@ -1,4 +1,7 @@
1
+ # Utility methods for internal use.
2
+ # @private
1
3
  module MethodOrProcHelper
4
+ extend self
2
5
 
3
6
  # This method will either call the symbol on self or instance_exec the Proc
4
7
  # within self. Any args will be passed along to the method dispatch.
@@ -18,6 +21,8 @@ module MethodOrProcHelper
18
21
  send(symbol_or_proc, *args)
19
22
  when Proc
20
23
  instance_exec(*args, &symbol_or_proc)
24
+ else
25
+ symbol_or_proc
21
26
  end
22
27
  end
23
28
 
@@ -60,6 +65,8 @@ module MethodOrProcHelper
60
65
  else
61
66
  symbol_or_proc.call(receiver, *args)
62
67
  end
68
+ else
69
+ symbol_or_proc
63
70
  end
64
71
  end
65
72
 
@@ -71,7 +78,7 @@ module MethodOrProcHelper
71
78
  case string_symbol_or_proc
72
79
  when Symbol, Proc
73
80
  call_method_or_proc_on(obj, string_symbol_or_proc, options)
74
- when String
81
+ else
75
82
  string_symbol_or_proc
76
83
  end
77
84
  end
@@ -0,0 +1,16 @@
1
+ module ActiveAdmin
2
+ module ViewHelpers
3
+ module ScopeNameHelper
4
+
5
+ def scope_name(scope)
6
+ case scope.name
7
+ when Proc then
8
+ self.instance_exec(&scope.name).to_s
9
+ else
10
+ scope.name.to_s
11
+ end
12
+ end
13
+
14
+ end
15
+ end
16
+ end
@@ -2,7 +2,7 @@ module ActiveAdmin
2
2
  module ViewHelpers
3
3
 
4
4
  # Require all ruby files in the view helpers dir
5
- Dir[File.expand_path('../view_helpers', __FILE__) + "/*.rb"].each{|f| require f }
5
+ Dir[File.expand_path('view_helpers', __dir__) + "/*.rb"].each { |f| require f }
6
6
 
7
7
  include ActiveAdminApplicationHelper
8
8
  include AutoLinkHelper
@@ -14,6 +14,7 @@ module ActiveAdmin
14
14
  include TitleHelper
15
15
  include ViewFactoryHelper
16
16
  include FlashHelper
17
+ include ScopeNameHelper
17
18
 
18
19
  end
19
20
  end
@@ -5,7 +5,7 @@ module ActiveAdmin
5
5
 
6
6
  def build(action_items)
7
7
  action_items.each do |action_item|
8
- span class: "action_item" do
8
+ span class: action_item.html_class do
9
9
  instance_exec(&action_item.block)
10
10
  end
11
11
  end
@@ -19,7 +19,7 @@ module ActiveAdmin
19
19
  opening_tag << children.to_s << closing_tag
20
20
  end
21
21
  end
22
-
22
+
23
23
  class ActiveAdminForm < FormtasticProxy
24
24
  builder_method :active_admin_form_for
25
25
 
@@ -27,14 +27,14 @@ module ActiveAdmin
27
27
  @resource = resource
28
28
  options = options.deep_dup
29
29
  options[:builder] ||= ActiveAdmin::FormBuilder
30
- form_string = semantic_form_for(resource, options) do |f|
30
+ form_string = helpers.semantic_form_for(resource, options) do |f|
31
31
  @form_builder = f
32
32
  end
33
33
 
34
34
  @opening_tag, @closing_tag = split_string_on(form_string, "</form>")
35
35
  instance_eval(&block) if block_given?
36
36
 
37
- # Rails 4 sets multipart automatically if a file field is present,
37
+ # Rails sets multipart automatically if a file field is present,
38
38
  # but the form tag has already been rendered before the block eval.
39
39
  if multipart? && @opening_tag !~ /multipart/
40
40
  @opening_tag.sub!(/<form/, '<form enctype="multipart/form-data"')
@@ -43,7 +43,7 @@ module ActiveAdmin
43
43
 
44
44
  def inputs(*args, &block)
45
45
  if block_given?
46
- form_builder.template.assign(has_many_block: true)
46
+ form_builder.template.assigns[:has_many_block] = true
47
47
  end
48
48
  if block_given? && block.arity == 0
49
49
  wrapped_block = proc do
@@ -57,6 +57,12 @@ module ActiveAdmin
57
57
  end
58
58
  insert_tag(SemanticInputsProxy, form_builder, *args, &wrapped_block)
59
59
  else
60
+ # Set except option to prevent sensitive fields from being shown in forms by default.
61
+ opts = args.extract_options!
62
+ opts[:except] ||= []
63
+ ActiveAdmin.application.filter_attributes.each { |e| opts[:except] << e }
64
+ args << opts
65
+
60
66
  proxy_call_to_form(:inputs, *args, &block)
61
67
  end
62
68
  end
@@ -72,10 +78,17 @@ module ActiveAdmin
72
78
  end
73
79
 
74
80
  def commit_action_with_cancel_link
81
+ add_create_another_checkbox
75
82
  action(:submit)
76
83
  cancel_link
77
84
  end
78
85
 
86
+ def add_create_another_checkbox
87
+ if %w(new create).include?(helpers.action_name) && active_admin_config && active_admin_config.create_another
88
+ current_arbre_element.add_child(create_another_checkbox)
89
+ end
90
+ end
91
+
79
92
  def has_many(*args, &block)
80
93
  insert_tag(HasManyProxy, form_builder, *args, &block)
81
94
  end
@@ -91,18 +104,37 @@ module ActiveAdmin
91
104
  def form_buffers
92
105
  raise "'form_buffers' has been removed from ActiveAdmin::FormBuilder, please read https://github.com/activeadmin/activeadmin/blob/master/docs/5-forms.md for details."
93
106
  end
107
+
108
+ private
109
+
110
+ def create_another_checkbox
111
+ create_another = params[:create_another]
112
+ label = @resource.class.model_name.human
113
+ Arbre::Context.new do
114
+ li class: 'create_another' do
115
+ input(
116
+ checked: create_another,
117
+ id: 'create_another',
118
+ name: 'create_another',
119
+ type: 'checkbox'
120
+ )
121
+ label(I18n.t('active_admin.create_another', model: label), for: 'create_another')
122
+ end
123
+ end
124
+ end
94
125
  end
95
126
 
96
127
  class SemanticInputsProxy < FormtasticProxy
97
128
  def build(form_builder, *args, &block)
98
- options = args.extract_options!
99
- legend = args.shift
129
+ html_options = args.extract_options!
130
+ html_options[:class] ||= "inputs"
131
+ legend = args.shift if args.first.is_a?(::String)
132
+ legend = html_options.delete(:name) if html_options.key?(:name)
100
133
  legend_tag = legend ? "<legend><span>#{legend}</span></legend>" : ""
101
- klasses = ["inputs"]
102
- klasses << options[:class] if options[:class]
103
- @opening_tag = "<fieldset class=\"#{klasses.join(" ")}\">#{legend_tag}<ol>"
134
+ fieldset_attrs = html_options.map { |k, v| %Q{#{k}="#{v}"} }.join(" ")
135
+ @opening_tag = "<fieldset #{fieldset_attrs}>#{legend_tag}<ol>"
104
136
  @closing_tag = "</ol></fieldset>"
105
- super(*(args << options), &block)
137
+ super(*(args << html_options), &block)
106
138
  end
107
139
  end
108
140
 
@@ -120,4 +152,4 @@ module ActiveAdmin
120
152
  end
121
153
  end
122
154
  end
123
- end
155
+ end
@@ -7,7 +7,7 @@ module ActiveAdmin
7
7
  def build(obj, *attrs)
8
8
  @collection = Array.wrap(obj)
9
9
  @resource_class = @collection.first.class
10
- options = { }
10
+ options = {}
11
11
  options[:for] = @collection.first if single_record?
12
12
  super(options)
13
13
  @table = table
@@ -16,7 +16,7 @@ module ActiveAdmin
16
16
  end
17
17
 
18
18
  def rows(*attrs)
19
- attrs.each {|attr| row(attr) }
19
+ attrs.each { |attr| row(attr) }
20
20
  end
21
21
 
22
22
  def row(*args, &block)
@@ -26,7 +26,7 @@ module ActiveAdmin
26
26
  if options[:class]
27
27
  classes << options[:class]
28
28
  elsif title.present?
29
- classes << "row-#{ActiveAdmin::Dependency.rails.parameterize(title.to_s)}"
29
+ classes << "row-#{title.to_s.parameterize(separator: "_")}"
30
30
  end
31
31
  options[:class] = classes.join(' ')
32
32
 
@@ -79,7 +79,7 @@ module ActiveAdmin
79
79
  end
80
80
 
81
81
  def content_for(record, attr)
82
- value = format_attribute record, attr
82
+ value = helpers.format_attribute record, attr
83
83
  value.blank? && current_arbre_element.children.to_s.empty? ? empty_value : value
84
84
  # Don't add the same Arbre twice, while still allowing format_attribute to call status_tag
85
85
  current_arbre_element << value unless current_arbre_element.children.include? value
@@ -14,7 +14,7 @@ module ActiveAdmin
14
14
  #
15
15
  # To create a two column layout:
16
16
  #
17
- # colums do
17
+ # columns do
18
18
  # column do
19
19
  # span "Column # 1
20
20
  # end
@@ -28,7 +28,7 @@ module ActiveAdmin
28
28
  #
29
29
  # To make a column span multiple, pass the :span option to the column method:
30
30
  #
31
- # colums do
31
+ # columns do
32
32
  # column span: 2 do
33
33
  # span "Column # 1
34
34
  # end
@@ -49,7 +49,7 @@ module ActiveAdmin
49
49
  #
50
50
  # To overcome this, columns include a :max_width and :min_width option.
51
51
  #
52
- # colums do
52
+ # columns do
53
53
  # column max_width: "200px", min_width: "100px" do
54
54
  # span "Column # 1
55
55
  # end
@@ -7,7 +7,7 @@ module ActiveAdmin
7
7
  #
8
8
  # dropdown_menu "Administration" do
9
9
  # item "Edit Details", edit_details_path
10
- # item "Edit My Account", edit_my_acccount_path
10
+ # item "Edit My Account", edit_my_account_path
11
11
  # end
12
12
  #
13
13
  # This will create a button with the label "Administration" and
@@ -26,10 +26,10 @@ module ActiveAdmin
26
26
  options = options.dup
27
27
 
28
28
  # Easily set options for the button or menu
29
- button_options = options.delete(:button) || {}
29
+ button_options = options.delete(:button) || {}
30
30
  menu_options = options.delete(:menu) || {}
31
31
 
32
- @button = build_button(name, button_options)
32
+ @button = build_button(name, button_options)
33
33
  @menu = build_menu(menu_options)
34
34
 
35
35
  super(options)
@@ -58,7 +58,7 @@ module ActiveAdmin
58
58
 
59
59
  menu_list = nil
60
60
 
61
- div :class => 'dropdown_menu_list_wrapper' do
61
+ div class: 'dropdown_menu_list_wrapper' do
62
62
  menu_list = ul(options)
63
63
  end
64
64
 
@@ -36,7 +36,10 @@ module ActiveAdmin
36
36
  # @param [Class] index_class The class on which to build the link and html classes
37
37
  def build_index_list(index_class)
38
38
  li class: classes_for_index(index_class) do
39
- a href: url_for(as: index_class.index_name.to_sym), class: "table_tools_button" do
39
+ params = request.query_parameters.except :page, :commit, :format
40
+ url_with_params = url_for(params.merge(as: index_class.index_name.to_sym))
41
+
42
+ a href: url_with_params, class: "table_tools_button" do
40
43
  name = index_class.index_name
41
44
  I18n.t("active_admin.index_list.#{name}", default: name.to_s.titleize)
42
45
  end
@@ -64,5 +67,3 @@ module ActiveAdmin
64
67
  end
65
68
  end
66
69
  end
67
-
68
-
@@ -0,0 +1,32 @@
1
+ module ActiveAdmin
2
+ module Views
3
+
4
+ # Renders an ActiveAdmin::Menu as a set of unordered list items.
5
+ #
6
+ # This component takes cares of deciding which items should be
7
+ # displayed given the current context and renders them appropriately.
8
+ #
9
+ # The entire component is rendered within one ul element.
10
+ class Menu < Component
11
+ attr_reader :menu
12
+ builder_method :menu
13
+
14
+ # @param [ActiveAdmin::Menu] menu the Menu to render
15
+ # @param [Hash] options the options as passed to the underlying ul element.
16
+ #
17
+ def build(menu, options = {})
18
+ @menu = menu
19
+ super(options)
20
+
21
+ menu.items.each do |item|
22
+ menu_item(item) if helpers.render_in_context self, item.should_display
23
+ end
24
+ children.sort!
25
+ end
26
+
27
+ def tag_name
28
+ 'ul'
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,58 @@
1
+ module ActiveAdmin
2
+ module Views
3
+
4
+ # Arbre component used to render ActiveAdmin::MenuItem
5
+ class MenuItem < Component
6
+ builder_method :menu_item
7
+ attr_reader :label
8
+ attr_reader :url
9
+ attr_reader :priority
10
+
11
+ def build(item, options = {})
12
+ super(options.merge(id: item.id))
13
+ @label = helpers.render_in_context self, item.label
14
+ @url = helpers.render_in_context self, item.url
15
+ @priority = item.priority
16
+ @submenu = nil
17
+
18
+ add_class "current" if item.current? assigns[:current_tab]
19
+
20
+ if url
21
+ text_node link_to label, url, item.html_options
22
+ else
23
+ span label, item.html_options
24
+ end
25
+
26
+ if item.items.any?
27
+ add_class "has_nested"
28
+ @submenu = menu(item)
29
+ end
30
+ end
31
+
32
+ def tag_name
33
+ 'li'
34
+ end
35
+
36
+ # Sorts by priority first, then alphabetically by label if needed.
37
+ def <=>(other)
38
+ result = priority <=> other.priority
39
+ result == 0 ? label <=> other.label : result
40
+ end
41
+
42
+ def visible?
43
+ url.nil? || real_url? || @submenu && @submenu.children.any?
44
+ end
45
+
46
+ def to_s
47
+ visible? ? super : ''
48
+ end
49
+
50
+ private
51
+
52
+ # URL is not nil, empty, or '#'
53
+ def real_url?
54
+ url && url.present? && url != '#'
55
+ end
56
+ end
57
+ end
58
+ end
@@ -1,4 +1,5 @@
1
1
  require 'active_admin/helpers/collection'
2
+ require 'active_admin/view_helpers/download_format_links_helper'
2
3
 
3
4
  module ActiveAdmin
4
5
  module Views
@@ -70,19 +71,14 @@ module ActiveAdmin
70
71
  build_pagination
71
72
  div(page_entries_info(options).html_safe, class: "pagination_information")
72
73
 
73
- download_links = @download_links.is_a?(Proc) ? instance_exec(&@download_links) : @download_links
74
-
75
- if download_links.is_a?(Array) && !download_links.empty?
76
- build_download_format_links download_links
77
- else
78
- build_download_format_links unless download_links == false
79
- end
74
+ formats = build_download_formats @download_links
75
+ build_download_format_links formats if formats.any?
80
76
  end
81
77
  end
82
78
 
83
79
  def build_per_page_select
84
80
  div class: "pagination_per_page" do
85
- text_node "Per page:"
81
+ text_node I18n.t("active_admin.pagination.per_page")
86
82
  select do
87
83
  @per_page.each do |per_page|
88
84
  option(
@@ -96,17 +92,17 @@ module ActiveAdmin
96
92
  end
97
93
 
98
94
  def build_pagination
99
- options = {}
95
+ options = { theme: @display_total ? 'active_admin' : 'active_admin_countless' }
100
96
  options[:params] = @params if @params
101
97
  options[:param_name] = @param_name if @param_name
102
98
 
103
- if !@display_total && collection.respond_to?(:offset)
99
+ if !@display_total
104
100
  # The #paginate method in kaminari will query the resource with a
105
101
  # count(*) to determine how many pages there should be unless
106
102
  # you pass in the :total_pages option. We issue a query to determine
107
103
  # if there is another page or not, but the limit/offset make this
108
104
  # query fast.
109
- offset = collection.offset(collection.current_page * @per_page.to_i).limit(1).count
105
+ offset = collection.offset(collection.current_page * collection.limit_value).limit(1).count
110
106
  options[:total_pages] = collection.current_page + offset
111
107
  options[:right] = 0
112
108
  end