activeadmin 1.3.0 → 2.0.0.rc1

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 (423) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +307 -123
  3. data/CODE_OF_CONDUCT.md +64 -12
  4. data/CONTRIBUTING.md +90 -46
  5. data/README.md +66 -19
  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 +55 -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/_forms.scss +3 -15
  21. data/app/assets/stylesheets/active_admin/components/_scopes.scss +3 -0
  22. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +0 -5
  23. data/app/assets/stylesheets/active_admin/components/_tabs.scss +1 -1
  24. data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +1 -1
  25. data/app/views/active_admin/devise/confirmations/new.html.erb +2 -2
  26. data/app/views/active_admin/devise/passwords/edit.html.erb +2 -2
  27. data/app/views/active_admin/devise/passwords/new.html.erb +2 -2
  28. data/app/views/active_admin/devise/registrations/new.html.erb +2 -3
  29. data/app/views/active_admin/devise/sessions/new.html.erb +1 -1
  30. data/app/views/active_admin/devise/shared/_error_messages.html.erb +15 -0
  31. data/app/views/active_admin/devise/unlocks/new.html.erb +2 -2
  32. data/app/views/layouts/active_admin_logged_out.html.erb +2 -2
  33. data/config/locales/bg.yml +0 -1
  34. data/config/locales/de.yml +10 -0
  35. data/config/locales/en.yml +19 -1
  36. data/config/locales/es.yml +20 -1
  37. data/config/locales/fi.yml +1 -1
  38. data/config/locales/he.yml +0 -1
  39. data/config/locales/hu.yml +4 -0
  40. data/config/locales/it.yml +4 -0
  41. data/config/locales/lt.yml +2 -2
  42. data/config/locales/nb.yml +15 -5
  43. data/config/locales/nl.yml +11 -0
  44. data/config/locales/pl.yml +71 -3
  45. data/config/locales/ru.yml +2 -0
  46. data/config/locales/tr.yml +9 -0
  47. data/config/locales/uk.yml +2 -0
  48. data/config/locales/zh-CN.yml +33 -5
  49. data/docs/.gitignore +1 -0
  50. data/docs/0-installation.md +2 -2
  51. data/docs/1-general-configuration.md +16 -1
  52. data/docs/10-custom-pages.md +14 -0
  53. data/docs/12-arbre-components.md +28 -1
  54. data/docs/13-authorization-adapter.md +40 -21
  55. data/docs/2-resource-customization.md +8 -3
  56. data/docs/3-index-pages/custom-index.md +1 -1
  57. data/docs/3-index-pages/index-as-blog.md +1 -1
  58. data/docs/3-index-pages/index-as-table.md +5 -5
  59. data/docs/3-index-pages.md +17 -0
  60. data/docs/5-forms.md +16 -2
  61. data/docs/8-custom-actions.md +11 -0
  62. data/docs/CNAME +1 -1
  63. data/docs/Gemfile +2 -0
  64. data/docs/Gemfile.lock +249 -0
  65. data/docs/_config.yml +1 -1
  66. data/docs/_includes/toc.html +1 -1
  67. data/docs/_includes/top-menu.html +9 -1
  68. data/docs/documentation.md +1 -1
  69. data/docs/images/tidelift.svg +14 -0
  70. data/docs/index.html +2 -2
  71. data/docs/stylesheets/main.css +26 -2
  72. data/lib/active_admin/abstract_view_factory.rb +13 -51
  73. data/lib/active_admin/application.rb +49 -155
  74. data/lib/active_admin/application_settings.rb +42 -0
  75. data/lib/active_admin/asset_registration.rb +0 -8
  76. data/lib/active_admin/base_controller/authorization.rb +3 -6
  77. data/lib/active_admin/base_controller.rb +6 -6
  78. data/lib/active_admin/batch_actions/controller.rb +2 -2
  79. data/lib/active_admin/batch_actions/resource_extension.rb +4 -4
  80. data/lib/active_admin/callbacks.rb +1 -1
  81. data/lib/active_admin/csv_builder.rb +1 -1
  82. data/lib/active_admin/dependency.rb +1 -69
  83. data/lib/active_admin/deprecation.rb +0 -25
  84. data/lib/active_admin/dsl.rb +1 -8
  85. data/lib/active_admin/dynamic_setting.rb +38 -0
  86. data/lib/active_admin/dynamic_settings_node.rb +28 -0
  87. data/lib/active_admin/engine.rb +5 -0
  88. data/lib/active_admin/error.rb +1 -1
  89. data/lib/active_admin/filters/active_filter.rb +4 -2
  90. data/lib/active_admin/filters/active_sidebar.rb +5 -1
  91. data/lib/active_admin/filters/forms.rb +7 -4
  92. data/lib/active_admin/filters/formtastic_addons.rb +1 -1
  93. data/lib/active_admin/filters/resource_extension.rb +4 -4
  94. data/lib/active_admin/form_builder.rb +97 -62
  95. data/lib/active_admin/generators/boilerplate.rb +1 -1
  96. data/lib/active_admin/helpers/scope_chain.rb +1 -0
  97. data/lib/active_admin/inputs/datepicker_input.rb +8 -1
  98. data/lib/active_admin/inputs/filters/base/search_method_select.rb +2 -2
  99. data/lib/active_admin/menu.rb +2 -8
  100. data/lib/active_admin/menu_item.rb +4 -32
  101. data/lib/active_admin/namespace.rb +20 -8
  102. data/lib/active_admin/namespace_settings.rb +110 -0
  103. data/lib/active_admin/orm/active_record/comments/comment.rb +2 -2
  104. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +10 -5
  105. data/lib/active_admin/orm/active_record/comments.rb +15 -4
  106. data/lib/active_admin/page_dsl.rb +1 -1
  107. data/lib/active_admin/pundit_adapter.rb +13 -4
  108. data/lib/active_admin/resource/action_items.rb +7 -2
  109. data/lib/active_admin/resource/attributes.rb +7 -4
  110. data/lib/active_admin/resource/menu.rb +3 -3
  111. data/lib/active_admin/resource/naming.rb +3 -3
  112. data/lib/active_admin/resource/routes.rb +9 -4
  113. data/lib/active_admin/resource/scopes.rb +3 -3
  114. data/lib/active_admin/resource/sidebars.rb +1 -1
  115. data/lib/active_admin/resource.rb +2 -2
  116. data/lib/active_admin/resource_collection.rb +2 -2
  117. data/lib/active_admin/resource_controller/action_builder.rb +10 -0
  118. data/lib/active_admin/resource_controller/decorators.rb +3 -3
  119. data/lib/active_admin/resource_controller/resource_class_methods.rb +2 -0
  120. data/lib/active_admin/resource_controller/scoping.rb +1 -1
  121. data/lib/active_admin/resource_dsl.rb +5 -3
  122. data/lib/active_admin/router.rb +89 -84
  123. data/lib/active_admin/scope.rb +9 -5
  124. data/lib/active_admin/settings_node.rb +19 -0
  125. data/lib/active_admin/version.rb +1 -1
  126. data/lib/active_admin/view_helpers/display_helper.rb +10 -2
  127. data/lib/active_admin/view_helpers/download_format_links_helper.rb +1 -0
  128. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +3 -0
  129. data/lib/active_admin/view_helpers.rb +1 -1
  130. data/lib/active_admin/views/components/active_admin_form.rb +9 -4
  131. data/lib/active_admin/views/components/attributes_table.rb +3 -3
  132. data/lib/active_admin/views/components/menu.rb +32 -0
  133. data/lib/active_admin/views/components/menu_item.rb +58 -0
  134. data/lib/active_admin/views/components/paginated_collection.rb +1 -1
  135. data/lib/active_admin/views/components/scopes.rb +11 -4
  136. data/lib/active_admin/views/components/sidebar.rb +13 -0
  137. data/lib/active_admin/views/components/sidebar_section.rb +0 -3
  138. data/lib/active_admin/views/components/site_title.rb +5 -6
  139. data/lib/active_admin/views/components/status_tag.rb +1 -18
  140. data/lib/active_admin/views/components/table_for.rb +3 -12
  141. data/lib/active_admin/views/components/tabs.rb +15 -3
  142. data/lib/active_admin/views/footer.rb +3 -7
  143. data/lib/active_admin/views/header.rb +3 -15
  144. data/lib/active_admin/views/index_as_blog.rb +1 -1
  145. data/lib/active_admin/views/index_as_grid.rb +25 -25
  146. data/lib/active_admin/views/index_as_table.rb +11 -10
  147. data/lib/active_admin/views/pages/base.rb +30 -53
  148. data/lib/active_admin/views/tabbed_navigation.rb +4 -59
  149. data/lib/active_admin/views.rb +1 -1
  150. data/lib/active_admin.rb +9 -4
  151. data/lib/generators/active_admin/assets/assets_generator.rb +2 -2
  152. data/lib/generators/active_admin/assets/templates/active_admin.js +1 -0
  153. data/lib/generators/active_admin/install/install_generator.rb +6 -2
  154. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +20 -1
  155. data/lib/generators/active_admin/install/templates/dashboard.rb +2 -3
  156. data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb.erb +1 -15
  157. data/lib/generators/active_admin/page/page_generator.rb +1 -1
  158. data/lib/generators/active_admin/resource/resource_generator.rb +1 -1
  159. data/lib/ransack_ext.rb +3 -3
  160. data/vendor/assets/javascripts/jquery-ui/form-reset-mixin.js +80 -0
  161. data/vendor/assets/javascripts/jquery-ui/form.js +22 -0
  162. data/vendor/assets/javascripts/jquery-ui/labels.js +65 -0
  163. data/vendor/assets/javascripts/jquery-ui/widgets/checkboxradio.js +274 -283
  164. metadata +120 -523
  165. data/.github/ISSUE_TEMPLATE.md +0 -20
  166. data/.gitignore +0 -49
  167. data/.mdlrc +0 -1
  168. data/.rubocop.yml +0 -76
  169. data/.simplecov +0 -13
  170. data/.travis.yml +0 -51
  171. data/.yardopts +0 -7
  172. data/Gemfile +0 -58
  173. data/Rakefile +0 -54
  174. data/activeadmin.gemspec +0 -32
  175. data/app/assets/javascripts/active_admin/base.js.coffee +0 -13
  176. data/app/assets/javascripts/active_admin/ext/jquery-ui.js.coffee +0 -6
  177. data/app/assets/javascripts/active_admin/ext/jquery.js.coffee +0 -7
  178. data/app/assets/javascripts/active_admin/initializers/batch_actions.js.coffee +0 -11
  179. data/app/assets/javascripts/active_admin/initializers/datepicker.js.coffee +0 -14
  180. data/app/assets/javascripts/active_admin/initializers/filters.js.coffee +0 -26
  181. data/app/assets/javascripts/active_admin/initializers/tabs.js.coffee +0 -7
  182. data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +0 -42
  183. data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +0 -46
  184. data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +0 -104
  185. data/app/assets/javascripts/active_admin/lib/flash.js.coffee +0 -19
  186. data/app/assets/javascripts/active_admin/lib/has_many.js.coffee +0 -79
  187. data/app/assets/javascripts/active_admin/lib/modal_dialog.js.coffee +0 -45
  188. data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +0 -46
  189. data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +0 -22
  190. data/codecov.yml +0 -25
  191. data/config/i18n-tasks.yml +0 -26
  192. data/config/mdl_style.rb +0 -9
  193. data/cucumber.yml +0 -3
  194. data/features/action_item.feature +0 -73
  195. data/features/authorization.feature +0 -64
  196. data/features/authorization_cancan.feature +0 -52
  197. data/features/authorization_pundit.feature +0 -37
  198. data/features/belongs_to.feature +0 -124
  199. data/features/breadcrumb.feature +0 -75
  200. data/features/comments/commenting.feature +0 -178
  201. data/features/comments/viewing_index.feature +0 -19
  202. data/features/create_another.feature +0 -55
  203. data/features/dashboard.feature +0 -16
  204. data/features/decorators.feature +0 -43
  205. data/features/development_reloading.feature +0 -28
  206. data/features/edit_page.feature +0 -116
  207. data/features/favicon.feature +0 -20
  208. data/features/first_boot.feature +0 -16
  209. data/features/footer.feature +0 -28
  210. data/features/global_navigation.feature +0 -29
  211. data/features/i18n.feature +0 -55
  212. data/features/index/batch_actions.feature +0 -218
  213. data/features/index/filters.feature +0 -250
  214. data/features/index/format_as_csv.feature +0 -220
  215. data/features/index/formats.feature +0 -88
  216. data/features/index/index_as_block.feature +0 -15
  217. data/features/index/index_as_blog.feature +0 -69
  218. data/features/index/index_as_grid.feature +0 -45
  219. data/features/index/index_as_table.feature +0 -291
  220. data/features/index/index_blank_slate.feature +0 -83
  221. data/features/index/index_parameters.feature +0 -75
  222. data/features/index/index_scope_to.feature +0 -56
  223. data/features/index/index_scopes.feature +0 -285
  224. data/features/index/page_title.feature +0 -41
  225. data/features/index/pagination.feature +0 -63
  226. data/features/index/switch_index_view.feature +0 -73
  227. data/features/menu.feature +0 -72
  228. data/features/meta_tags.feature +0 -21
  229. data/features/new_page.feature +0 -136
  230. data/features/registering_assets.feature +0 -38
  231. data/features/registering_pages.feature +0 -237
  232. data/features/registering_resources.feature +0 -33
  233. data/features/renamed_resource.feature +0 -30
  234. data/features/root_to.feature +0 -17
  235. data/features/show/attributes_table_title.feature +0 -54
  236. data/features/show/columns.feature +0 -40
  237. data/features/show/default_content.feature +0 -44
  238. data/features/show/page_title.feature +0 -58
  239. data/features/show/tabs.feature +0 -33
  240. data/features/sidebar_sections.feature +0 -210
  241. data/features/site_title.feature +0 -47
  242. data/features/specifying_actions.feature +0 -118
  243. data/features/step_definitions/action_item_steps.rb +0 -7
  244. data/features/step_definitions/action_link_steps.rb +0 -19
  245. data/features/step_definitions/additional_web_steps.rb +0 -81
  246. data/features/step_definitions/asset_steps.rb +0 -15
  247. data/features/step_definitions/attribute_steps.rb +0 -18
  248. data/features/step_definitions/attributes_table_title_steps.rb +0 -11
  249. data/features/step_definitions/batch_action_steps.rb +0 -81
  250. data/features/step_definitions/blog_steps.rb +0 -3
  251. data/features/step_definitions/breadcrumb_steps.rb +0 -3
  252. data/features/step_definitions/column_steps.rb +0 -8
  253. data/features/step_definitions/comment_steps.rb +0 -32
  254. data/features/step_definitions/configuration_steps.rb +0 -100
  255. data/features/step_definitions/dashboard_steps.rb +0 -15
  256. data/features/step_definitions/factory_steps.rb +0 -35
  257. data/features/step_definitions/filter_steps.rb +0 -47
  258. data/features/step_definitions/flash_steps.rb +0 -11
  259. data/features/step_definitions/footer_steps.rb +0 -11
  260. data/features/step_definitions/format_steps.rb +0 -56
  261. data/features/step_definitions/i18n_steps.rb +0 -11
  262. data/features/step_definitions/index_scope_steps.rb +0 -29
  263. data/features/step_definitions/index_views_steps.rb +0 -3
  264. data/features/step_definitions/layout_steps.rb +0 -3
  265. data/features/step_definitions/member_link_steps.rb +0 -7
  266. data/features/step_definitions/menu_steps.rb +0 -11
  267. data/features/step_definitions/meta_tag_steps.rb +0 -3
  268. data/features/step_definitions/pagination_steps.rb +0 -15
  269. data/features/step_definitions/sidebar_steps.rb +0 -11
  270. data/features/step_definitions/site_title_steps.rb +0 -17
  271. data/features/step_definitions/tab_steps.rb +0 -8
  272. data/features/step_definitions/table_steps.rb +0 -116
  273. data/features/step_definitions/user_steps.rb +0 -52
  274. data/features/step_definitions/web_steps.rb +0 -86
  275. data/features/sti_resource.feature +0 -65
  276. data/features/strong_parameters.feature +0 -69
  277. data/features/support/env.rb +0 -122
  278. data/features/support/paths.rb +0 -73
  279. data/features/support/regular_env.rb +0 -7
  280. data/features/support/reload_env.rb +0 -7
  281. data/features/support/selectors.rb +0 -45
  282. data/features/users/logging_in.feature +0 -36
  283. data/features/users/logging_out.feature +0 -13
  284. data/features/users/resetting_password.feature +0 -34
  285. data/gemfiles/rails_42.gemfile +0 -10
  286. data/gemfiles/rails_50.gemfile +0 -10
  287. data/gemfiles/rails_51.gemfile +0 -10
  288. data/gemfiles/rails_52.gemfile +0 -11
  289. data/lib/active_admin/event.rb +0 -24
  290. data/lib/active_admin/helpers/output_safety_helper.rb +0 -35
  291. data/lib/active_admin/helpers/settings.rb +0 -114
  292. data/lib/bug_report_templates/active_admin_master.rb +0 -112
  293. data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +0 -1
  294. data/spec/bug_report_templates_spec.rb +0 -26
  295. data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +0 -50
  296. data/spec/javascripts/coffeescripts/jquery.aa.flash.js.coffee +0 -25
  297. data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +0 -34
  298. data/spec/javascripts/fixtures/checkboxes.html +0 -9
  299. data/spec/javascripts/fixtures/flashes.html +0 -2
  300. data/spec/javascripts/fixtures/table_checkboxes.html +0 -17
  301. data/spec/javascripts/helpers/SpecHelper.js +0 -3
  302. data/spec/javascripts/support/jasmine.yml +0 -74
  303. data/spec/javascripts/support/jasmine_runner.rb +0 -19
  304. data/spec/rails_helper.rb +0 -59
  305. data/spec/requests/default_namespace_spec.rb +0 -81
  306. data/spec/requests/memory_spec.rb +0 -25
  307. data/spec/requests/stylesheets_spec.rb +0 -18
  308. data/spec/spec_helper.rb +0 -1
  309. data/spec/support/active_admin_integration_spec_helper.rb +0 -73
  310. data/spec/support/active_admin_request_helpers.rb +0 -39
  311. data/spec/support/rails_template.rb +0 -153
  312. data/spec/support/rails_template_with_data.rb +0 -327
  313. data/spec/support/templates/admin/stores.rb +0 -7
  314. data/spec/support/templates/en.yml +0 -8
  315. data/spec/support/templates/manifest.js +0 -3
  316. data/spec/support/templates/policies/active_admin/comment_policy.rb +0 -9
  317. data/spec/support/templates/policies/active_admin/page_policy.rb +0 -18
  318. data/spec/support/templates/policies/admin_user_policy.rb +0 -11
  319. data/spec/support/templates/policies/application_policy.rb +0 -44
  320. data/spec/support/templates/policies/category_policy.rb +0 -7
  321. data/spec/support/templates/policies/post_policy.rb +0 -15
  322. data/spec/support/templates/policies/store_policy.rb +0 -11
  323. data/spec/support/templates/policies/user_policy.rb +0 -11
  324. data/spec/support/templates/post_decorator.rb +0 -24
  325. data/spec/unit/abstract_view_factory_spec.rb +0 -78
  326. data/spec/unit/action_builder_spec.rb +0 -158
  327. data/spec/unit/active_admin_spec.rb +0 -11
  328. data/spec/unit/application_spec.rb +0 -184
  329. data/spec/unit/asset_registration_spec.rb +0 -81
  330. data/spec/unit/authorization/authorization_adapter_spec.rb +0 -61
  331. data/spec/unit/authorization/controller_authorization_spec.rb +0 -43
  332. data/spec/unit/authorization/index_overriding_spec.rb +0 -23
  333. data/spec/unit/auto_link_spec.rb +0 -93
  334. data/spec/unit/batch_actions/resource_spec.rb +0 -84
  335. data/spec/unit/batch_actions/settings_spec.rb +0 -61
  336. data/spec/unit/belongs_to_spec.rb +0 -76
  337. data/spec/unit/cancan_adapter_spec.rb +0 -43
  338. data/spec/unit/comments_spec.rb +0 -176
  339. data/spec/unit/component_spec.rb +0 -18
  340. data/spec/unit/config_shared_examples.rb +0 -59
  341. data/spec/unit/controller_filters_spec.rb +0 -41
  342. data/spec/unit/csv_builder_spec.rb +0 -313
  343. data/spec/unit/dependency_spec.rb +0 -135
  344. data/spec/unit/devise_spec.rb +0 -110
  345. data/spec/unit/dsl_spec.rb +0 -120
  346. data/spec/unit/filters/active_filter_spec.rb +0 -189
  347. data/spec/unit/filters/active_spec.rb +0 -24
  348. data/spec/unit/filters/filter_form_builder_spec.rb +0 -524
  349. data/spec/unit/filters/resource_spec.rb +0 -128
  350. data/spec/unit/form_builder_spec.rb +0 -990
  351. data/spec/unit/generators/install_spec.rb +0 -31
  352. data/spec/unit/helpers/collection_spec.rb +0 -68
  353. data/spec/unit/helpers/output_safety_helper_spec.rb +0 -79
  354. data/spec/unit/helpers/scope_chain_spec.rb +0 -35
  355. data/spec/unit/helpers/settings_spec.rb +0 -30
  356. data/spec/unit/i18n_spec.rb +0 -29
  357. data/spec/unit/localizers/resource_localizer_spec.rb +0 -36
  358. data/spec/unit/menu_collection_spec.rb +0 -62
  359. data/spec/unit/menu_item_spec.rb +0 -141
  360. data/spec/unit/menu_spec.rb +0 -71
  361. data/spec/unit/namespace/authorization_spec.rb +0 -27
  362. data/spec/unit/namespace/register_page_spec.rb +0 -99
  363. data/spec/unit/namespace/register_resource_spec.rb +0 -162
  364. data/spec/unit/namespace_spec.rb +0 -124
  365. data/spec/unit/order_clause_spec.rb +0 -81
  366. data/spec/unit/page_controller_spec.rb +0 -5
  367. data/spec/unit/page_spec.rb +0 -128
  368. data/spec/unit/pretty_format_spec.rb +0 -82
  369. data/spec/unit/pundit_adapter_spec.rb +0 -98
  370. data/spec/unit/resource/action_items_spec.rb +0 -69
  371. data/spec/unit/resource/attributes_spec.rb +0 -49
  372. data/spec/unit/resource/includes_spec.rb +0 -21
  373. data/spec/unit/resource/menu_spec.rb +0 -18
  374. data/spec/unit/resource/naming_spec.rb +0 -122
  375. data/spec/unit/resource/ordering_spec.rb +0 -35
  376. data/spec/unit/resource/page_presenters_spec.rb +0 -44
  377. data/spec/unit/resource/pagination_spec.rb +0 -38
  378. data/spec/unit/resource/routes_spec.rb +0 -125
  379. data/spec/unit/resource/scopes_spec.rb +0 -50
  380. data/spec/unit/resource/sidebars_spec.rb +0 -43
  381. data/spec/unit/resource_collection_spec.rb +0 -175
  382. data/spec/unit/resource_controller/data_access_spec.rb +0 -234
  383. data/spec/unit/resource_controller/decorators_spec.rb +0 -94
  384. data/spec/unit/resource_controller/sidebars_spec.rb +0 -37
  385. data/spec/unit/resource_controller_spec.rb +0 -273
  386. data/spec/unit/resource_registration_spec.rb +0 -61
  387. data/spec/unit/resource_spec.rb +0 -320
  388. data/spec/unit/routing_spec.rb +0 -211
  389. data/spec/unit/scope_spec.rb +0 -209
  390. data/spec/unit/settings_spec.rb +0 -117
  391. data/spec/unit/view_factory_spec.rb +0 -19
  392. data/spec/unit/view_helpers/breadcrumbs_spec.rb +0 -253
  393. data/spec/unit/view_helpers/display_helper_spec.rb +0 -203
  394. data/spec/unit/view_helpers/download_format_links_helper_spec.rb +0 -39
  395. data/spec/unit/view_helpers/fields_for_spec.rb +0 -50
  396. data/spec/unit/view_helpers/flash_helper_spec.rb +0 -24
  397. data/spec/unit/view_helpers/form_helper_spec.rb +0 -42
  398. data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +0 -138
  399. data/spec/unit/views/components/attributes_table_spec.rb +0 -271
  400. data/spec/unit/views/components/batch_action_selector_spec.rb +0 -43
  401. data/spec/unit/views/components/blank_slate_spec.rb +0 -27
  402. data/spec/unit/views/components/columns_spec.rb +0 -187
  403. data/spec/unit/views/components/index_list_spec.rb +0 -49
  404. data/spec/unit/views/components/index_table_for_spec.rb +0 -127
  405. data/spec/unit/views/components/paginated_collection_spec.rb +0 -249
  406. data/spec/unit/views/components/panel_spec.rb +0 -58
  407. data/spec/unit/views/components/sidebar_section_spec.rb +0 -68
  408. data/spec/unit/views/components/site_title_spec.rb +0 -76
  409. data/spec/unit/views/components/status_tag_spec.rb +0 -265
  410. data/spec/unit/views/components/table_for_spec.rb +0 -436
  411. data/spec/unit/views/components/tabs_spec.rb +0 -67
  412. data/spec/unit/views/components/unsupported_browser_spec.rb +0 -41
  413. data/spec/unit/views/index_as_blog_spec.rb +0 -76
  414. data/spec/unit/views/pages/form_spec.rb +0 -54
  415. data/spec/unit/views/pages/index_spec.rb +0 -60
  416. data/spec/unit/views/pages/layout_spec.rb +0 -59
  417. data/spec/unit/views/pages/show_spec.rb +0 -32
  418. data/spec/unit/views/tabbed_navigation_spec.rb +0 -158
  419. data/tasks/docs.rake +0 -64
  420. data/tasks/lint.rake +0 -21
  421. data/tasks/local.rake +0 -25
  422. data/tasks/parallel_tests.rake +0 -66
  423. data/tasks/test.rake +0 -29
@@ -1,7 +1,7 @@
1
1
  module ActiveAdmin
2
2
  module Dependency
3
3
  module Requirements
4
- DEVISE = '>= 3.2', '< 5'
4
+ DEVISE = '>= 4.0', '< 5'
5
5
  end
6
6
 
7
7
  # Provides a clean interface to check for gem dependencies at runtime.
@@ -55,10 +55,6 @@ module ActiveAdmin
55
55
  Matcher.new name.to_s
56
56
  end
57
57
 
58
- def self.rails5?
59
- rails >= '5.x'
60
- end
61
-
62
58
  class Matcher
63
59
  attr_reader :name
64
60
 
@@ -94,70 +90,6 @@ module ActiveAdmin
94
90
  info = spec ? "#{spec.name} #{spec.version}" : '(missing)'
95
91
  "<ActiveAdmin::Dependency::Matcher for #{info}>"
96
92
  end
97
-
98
- def adapter
99
- @adapter ||= Adapter.const_get(@name.camelize).new self
100
- end
101
-
102
- def method_missing(method, *args, &block)
103
- if respond_to_missing?(method)
104
- adapter.send method, *args, &block
105
- else
106
- super
107
- end
108
- end
109
-
110
- def respond_to_missing?(method, include_private = false)
111
- adapter.respond_to?(method) || super
112
- rescue NameError
113
- # 🐾
114
- end
115
- end
116
-
117
- # Dependency adapters provide an easy way to wrap the conditional logic
118
- # necessary to support multiple versions of a gem.
119
- #
120
- # ActiveAdmin::Dependency.rails.adapter.parameterize 'a b'
121
- # => 'a_b'
122
- #
123
- # ActiveAdmin::Dependency.rails.parameterize 'a b'
124
- # => 'a_b'
125
- #
126
- # ActiveAdmin::Dependency.devise.adapter
127
- # -> NameError: uninitialized constant ActiveAdmin::Dependency::Adapter::Devise
128
- #
129
- module Adapter
130
- class Base
131
- def initialize(version)
132
- @version = version
133
- end
134
- end
135
-
136
- class Rails < Base
137
- def parameterize(string)
138
- if Dependency.rails5?
139
- string.parameterize separator: '_'
140
- else
141
- string.parameterize '_'
142
- end
143
- end
144
-
145
- def redirect_back(controller, fallback_location)
146
- controller.instance_exec do
147
- if Dependency.rails5?
148
- redirect_back fallback_location: fallback_location
149
- elsif controller.request.headers.key? 'HTTP_REFERER'
150
- redirect_to :back
151
- else
152
- redirect_to fallback_location
153
- end
154
- end
155
- end
156
-
157
- def render_key
158
- Dependency.rails5? ? :body : :text
159
- end
160
- end
161
93
  end
162
94
 
163
95
  end
@@ -6,30 +6,5 @@ module ActiveAdmin
6
6
  ActiveSupport::Deprecation.warn "Active Admin: #{message}", callstack
7
7
  end
8
8
 
9
- # Deprecate a method.
10
- #
11
- # @param [Module] klass the Class or Module to deprecate the method on
12
- # @param [Symbol] method the method to deprecate
13
- # @param [String] message the message to display to the end user
14
- #
15
- # Example:
16
- #
17
- # class MyClass
18
- # def my_method
19
- # # ...
20
- # end
21
- # ActiveAdmin::Deprecation.deprecate self, :my_method,
22
- # "MyClass#my_method is being removed in the next release"
23
- # end
24
- #
25
- def deprecate(klass, method, message)
26
- klass.send :define_method, "deprecated_#{method}", klass.instance_method(method)
27
-
28
- klass.send :define_method, method do |*args|
29
- ActiveAdmin::Deprecation.warn "#{message}", caller
30
- send "deprecated_#{method}", *args
31
- end
32
- end
33
-
34
9
  end
35
10
  end
@@ -83,14 +83,7 @@ module ActiveAdmin
83
83
  # this action item on.
84
84
  # :except: A single or array of controller actions not to
85
85
  # display this action item on.
86
- def action_item(name = nil, options = {}, &block)
87
- if name.is_a?(Hash)
88
- options = name
89
- name = nil
90
- end
91
-
92
- Deprecation.warn "using `action_item` without a name is deprecated! Use `action_item(:edit)`." unless name
93
-
86
+ def action_item(name, options = {}, &block)
94
87
  config.add_action_item(name, options, &block)
95
88
  end
96
89
 
@@ -0,0 +1,38 @@
1
+ module ActiveAdmin
2
+
3
+ class DynamicSetting
4
+ def self.build(setting, type)
5
+ (type ? klass(type) : self).new(setting)
6
+ end
7
+
8
+ def self.klass(type)
9
+ klass = "#{type.to_s.camelcase}Setting"
10
+ raise ArgumentError, "Unknown type: #{type}" unless ActiveAdmin.const_defined?(klass)
11
+ ActiveAdmin.const_get(klass)
12
+ end
13
+
14
+ def initialize(setting)
15
+ @setting = setting
16
+ end
17
+
18
+ def value(*_args)
19
+ @setting
20
+ end
21
+ end
22
+
23
+ # Many configuration options (Ex: site_title, title_image) could either be
24
+ # static (String), methods (Symbol) or procs (Proc). This wrapper takes care of
25
+ # returning the content when String or using instance_eval when Symbol or Proc.
26
+ #
27
+ class StringSymbolOrProcSetting < DynamicSetting
28
+ def value(context = self)
29
+ case @setting
30
+ when Symbol, Proc
31
+ context.instance_eval(&@setting)
32
+ else
33
+ @setting
34
+ end
35
+ end
36
+ end
37
+
38
+ end
@@ -0,0 +1,28 @@
1
+ require 'active_admin/dynamic_setting'
2
+ require 'active_admin/settings_node'
3
+
4
+ module ActiveAdmin
5
+
6
+ class DynamicSettingsNode < SettingsNode
7
+ class << self
8
+ def register(name, value, type = nil)
9
+ class_attribute "#{name}_setting"
10
+ add_reader(name)
11
+ add_writer(name, type)
12
+ send "#{name}=", value
13
+ end
14
+
15
+ def add_reader(name)
16
+ define_singleton_method(name) do |*args|
17
+ send("#{name}_setting").value(*args)
18
+ end
19
+ end
20
+
21
+ def add_writer(name, type)
22
+ define_singleton_method("#{name}=") do |value|
23
+ send("#{name}_setting=", DynamicSetting.build(value, type))
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -1,5 +1,10 @@
1
1
  module ActiveAdmin
2
2
  class Engine < ::Rails::Engine
3
+ initializer "active_admin.load_app_path" do |app|
4
+ ActiveAdmin::Application.setting :app_path, app.root
5
+ ActiveAdmin::Application.setting :load_paths, [File.expand_path('app/admin', app.root)]
6
+ end
7
+
3
8
  initializer "active_admin.precompile", group: :all do |app|
4
9
  ActiveAdmin.application.stylesheets.each do |path, _|
5
10
  app.config.assets.precompile << path
@@ -22,7 +22,7 @@ module ActiveAdmin
22
22
  class ErrorLoading < Error
23
23
  # Locates the most recent file and line from the caught exception's backtrace.
24
24
  def find_cause(folder, backtrace)
25
- backtrace.grep(/\/(#{folder}\/.*\.rb):(\d+)/){ [$1, $2] }.first
25
+ backtrace.grep(/\/(#{folder}\/.*\.rb):(\d+)/) { [$1, $2] }.first
26
26
  end
27
27
  end
28
28
 
@@ -28,7 +28,9 @@ module ActiveAdmin
28
28
  def label
29
29
  # TODO: to remind us to go back to the simpler str.downcase once we support ruby >= 2.4 only.
30
30
  translated_predicate = predicate_name.mb_chars.downcase.to_s
31
- if filter_label
31
+ if filter_label && filter_label.is_a?(Proc)
32
+ "#{filter_label.call} #{translated_predicate}"
33
+ elsif filter_label
32
34
  "#{filter_label} #{translated_predicate}"
33
35
  elsif related_class
34
36
  "#{related_class_name} #{translated_predicate}"
@@ -100,7 +102,7 @@ module ActiveAdmin
100
102
 
101
103
  def related_primary_key
102
104
  if predicate_association
103
- predicate_association.active_record_primary_key
105
+ predicate_association.association_primary_key
104
106
  elsif related_class
105
107
  related_class.primary_key
106
108
  end
@@ -5,7 +5,7 @@ module ActiveAdmin
5
5
  class ActiveSidebar < ActiveAdmin::SidebarSection
6
6
 
7
7
  def initialize
8
- super I18n.t("active_admin.search_status.headline"), sidebar_options
8
+ super 'search_status', sidebar_options
9
9
  end
10
10
 
11
11
  def block
@@ -39,6 +39,10 @@ module ActiveAdmin
39
39
  end
40
40
  end
41
41
 
42
+ def title
43
+ I18n.t("active_admin.search_status.headline")
44
+ end
45
+
42
46
  protected
43
47
 
44
48
  def sidebar_options
@@ -48,8 +48,8 @@ module ActiveAdmin
48
48
  def active_admin_filters_form_for(search, filters, options = {})
49
49
  defaults = { builder: ActiveAdmin::Filters::FormBuilder,
50
50
  url: collection_path,
51
- html: {class: 'filter_form'} }
52
- required = { html: {method: :get},
51
+ html: { class: 'filter_form' } }
52
+ required = { html: { method: :get },
53
53
  as: :q }
54
54
  options = defaults.deep_merge(options).deep_merge(required)
55
55
 
@@ -57,8 +57,11 @@ module ActiveAdmin
57
57
  filters.each do |attribute, opts|
58
58
  next if opts.key?(:if) && !call_method_or_proc_on(self, opts[:if])
59
59
  next if opts.key?(:unless) && call_method_or_proc_on(self, opts[:unless])
60
- opts[:input_html] = instance_exec(&opts[:input_html]) if opts[:input_html].is_a?(Proc)
61
- f.filter attribute, opts.except(:if, :unless)
60
+
61
+ filter_opts = opts.except(:if, :unless)
62
+ filter_opts[:input_html] = instance_exec(&filter_opts[:input_html]) if filter_opts[:input_html].is_a?(Proc)
63
+
64
+ f.filter attribute, filter_opts
62
65
  end
63
66
 
64
67
  buttons = content_tag :div, class: "buttons" do
@@ -37,7 +37,7 @@ module ActiveAdmin
37
37
  end
38
38
 
39
39
  def polymorphic_foreign_type?(method)
40
- klass.reflect_on_all_associations.select{ |r| r.macro == :belongs_to && r.options[:polymorphic] }
40
+ klass.reflect_on_all_associations.select { |r| r.macro == :belongs_to && r.options[:polymorphic] }
41
41
  .map(&:foreign_type).include? method.to_s
42
42
  end
43
43
 
@@ -83,7 +83,7 @@ module ActiveAdmin
83
83
  @filters_to_remove = nil
84
84
  end
85
85
 
86
- private
86
+ private
87
87
 
88
88
  # Collapses the waveform, if you will, of which filters should be displayed.
89
89
  # Removes filters and adds in default filters as desired.
@@ -123,10 +123,10 @@ module ActiveAdmin
123
123
  # Returns a default set of filters for the associations
124
124
  def default_association_filters
125
125
  if resource_class.respond_to?(:reflect_on_all_associations)
126
- poly, not_poly = resource_class.reflect_on_all_associations.partition{ |r| r.macro == :belongs_to && r.options[:polymorphic] }
126
+ poly, not_poly = resource_class.reflect_on_all_associations.partition { |r| r.macro == :belongs_to && r.options[:polymorphic] }
127
127
 
128
128
  # remove deeply nested associations
129
- not_poly.reject!{ |r| r.chain.length > 2 }
129
+ not_poly.reject! { |r| r.chain.length > 2 }
130
130
 
131
131
  filters = poly.map(&:foreign_type) + not_poly.map(&:name)
132
132
  filters.map &:to_sym
@@ -140,7 +140,7 @@ module ActiveAdmin
140
140
  end
141
141
 
142
142
  def filters_sidebar_section
143
- ActiveAdmin::SidebarSection.new :filters, only: :index, if: ->{ active_admin_config.filters.any? } do
143
+ ActiveAdmin::SidebarSection.new :filters, only: :index, if: -> { active_admin_config.filters.any? } do
144
144
  active_admin_filters_form_for assigns[:search], active_admin_config.filters
145
145
  end
146
146
  end
@@ -13,7 +13,6 @@ end
13
13
 
14
14
  module ActiveAdmin
15
15
  class FormBuilder < ::Formtastic::FormBuilder
16
- include MethodOrProcHelper
17
16
 
18
17
  self.input_namespaces = [::Object, ::ActiveAdmin::Inputs, ::Formtastic::Inputs]
19
18
 
@@ -21,7 +20,7 @@ module ActiveAdmin
21
20
  self.input_class_finder = ::Formtastic::InputClassFinder
22
21
  self.action_class_finder = ::Formtastic::ActionClassFinder
23
22
 
24
- def cancel_link(url = {action: "index"}, html_options = {}, li_attrs = {})
23
+ def cancel_link(url = { action: "index" }, html_options = {}, li_attrs = {})
25
24
  li_attrs[:class] ||= "cancel"
26
25
  li_content = template.link_to I18n.t('active_admin.cancel'), url, html_options
27
26
  template.content_tag(:li, li_content, li_attrs)
@@ -29,75 +28,95 @@ module ActiveAdmin
29
28
 
30
29
  attr_accessor :already_in_an_inputs_block
31
30
 
32
- def assoc_heading(assoc)
33
- object.class.reflect_on_association(assoc).klass.model_name.
34
- human(count: ::ActiveAdmin::Helpers::I18n::PLURAL_MANY_COUNT)
31
+ def has_many(assoc, options = {}, &block)
32
+ HasManyBuilder.new(self, assoc, options).render(&block)
35
33
  end
34
+ end
36
35
 
37
- def has_many(assoc, options = {}, &block)
38
- # remove options that should not render as attributes
39
- custom_settings = :new_record, :allow_destroy, :heading, :sortable, :sortable_start
40
- builder_options = {new_record: true}.merge! options.slice *custom_settings
41
- options = {for: assoc }.merge! options.except *custom_settings
42
- options[:class] = [options[:class], "inputs has_many_fields"].compact.join(' ')
43
- sortable_column = builder_options[:sortable]
44
- sortable_start = builder_options.fetch(:sortable_start, 0)
36
+ # Decorates a FormBuilder with the additional attributes and methods
37
+ # to build a has_many block. Nested has_many blocks are handled by
38
+ # nested decorators.
39
+ class HasManyBuilder < SimpleDelegator
40
+ attr_reader :assoc
41
+ attr_reader :options
42
+ attr_reader :heading, :sortable_column, :sortable_start
43
+ attr_reader :new_record, :destroy_option
44
+
45
+ def initialize(has_many_form, assoc, options)
46
+ super has_many_form
47
+ @assoc = assoc
48
+ @options = extract_custom_settings!(options.dup)
49
+ @options.reverse_merge!(for: assoc)
50
+ @options[:class] = [options[:class], "inputs has_many_fields"].compact.join(' ')
45
51
 
46
52
  if sortable_column
47
- options[:for] = [assoc, sorted_children(assoc, sortable_column)]
53
+ @options[:for] = [assoc, sorted_children(sortable_column)]
48
54
  end
55
+ end
49
56
 
57
+ def render(&block)
50
58
  html = "".html_safe
51
- unless builder_options.key?(:heading) && !builder_options[:heading]
52
- html << template.content_tag(:h3) do
53
- builder_options[:heading] || assoc_heading(assoc)
54
- end
55
- end
59
+ html << template.content_tag(:h3) { heading } if heading.present?
60
+ html << template.capture { content_has_many(&block) }
61
+ html = wrap_div_or_li(html)
62
+ template.concat(html) if template.output_buffer
63
+ html
64
+ end
56
65
 
57
- html << template.capture do
58
- form_block = proc do |has_many_form|
59
- index = parent_child_index options[:parent] if options[:parent]
60
- block_contents = template.capture do
61
- block.call(has_many_form, index)
62
- end
63
- template.concat(block_contents)
64
- template.concat has_many_actions(has_many_form, builder_options, "".html_safe)
65
- end
66
+ protected
66
67
 
67
- template.assigns[:has_many_block] = true
68
- contents = without_wrapper { inputs(options, &form_block) } || "".html_safe
68
+ # remove options that should not render as attributes
69
+ def extract_custom_settings!(options)
70
+ @heading = options.key?(:heading) ? options.delete(:heading) : default_heading
71
+ @sortable_column = options.delete(:sortable)
72
+ @sortable_start = options.delete(:sortable_start) || 0
73
+ @new_record = options.key?(:new_record) ? options.delete(:new_record) : true
74
+ @destroy_option = options.delete(:allow_destroy)
75
+ options
76
+ end
69
77
 
70
- if builder_options[:new_record]
71
- contents << js_for_has_many(assoc, form_block, template, builder_options[:new_record], options[:class])
72
- else
73
- contents
74
- end
78
+ def default_heading
79
+ assoc_klass.model_name.
80
+ human(count: ::ActiveAdmin::Helpers::I18n::PLURAL_MANY_COUNT)
81
+ end
82
+
83
+ def assoc_klass
84
+ @assoc_klass ||= __getobj__.object.class.reflect_on_association(assoc).klass
85
+ end
86
+
87
+ def content_has_many(&block)
88
+ form_block = proc do |form_builder|
89
+ render_has_many_form(form_builder, options[:parent], &block)
75
90
  end
76
91
 
77
- tag = @already_in_an_inputs_block ? :li : :div
78
- html = template.content_tag(tag, html, class: "has_many_container #{assoc}", 'data-sortable' => sortable_column, 'data-sortable-start' => sortable_start)
79
- template.concat(html) if template.output_buffer
80
- html
92
+ template.assigns[:has_many_block] = true
93
+ contents = without_wrapper { inputs(options, &form_block) }
94
+ contents ||= "".html_safe
95
+
96
+ js = new_record ? js_for_has_many(options[:class], &form_block) : ''
97
+ contents << js
81
98
  end
82
99
 
83
- protected
100
+ # Renders the Formtastic inputs then appends ActiveAdmin delete and sort actions.
101
+ def render_has_many_form(form_builder, parent, &block)
102
+ index = parent && form_builder.send(:parent_child_index, parent)
103
+ template.concat template.capture { yield(form_builder, index) }
104
+ template.concat has_many_actions(form_builder, "".html_safe)
105
+ end
84
106
 
85
- def has_many_actions(has_many_form, builder_options, contents)
86
- if has_many_form.object.new_record?
107
+ def has_many_actions(form_builder, contents)
108
+ if form_builder.object.new_record?
87
109
  contents << template.content_tag(:li) do
88
110
  template.link_to I18n.t('active_admin.has_many_remove'), "#", class: 'button has_many_remove'
89
111
  end
90
- elsif call_method_or_proc_on(has_many_form.object,
91
- builder_options[:allow_destroy],
92
- exec: false)
93
-
94
- has_many_form.input(:_destroy, as: :boolean,
95
- wrapper_html: {class: 'has_many_delete'},
112
+ elsif allow_destroy?(form_builder.object)
113
+ form_builder.input(:_destroy, as: :boolean,
114
+ wrapper_html: { class: 'has_many_delete' },
96
115
  label: I18n.t('active_admin.has_many_delete'))
97
116
  end
98
117
 
99
- if builder_options[:sortable]
100
- has_many_form.input builder_options[:sortable], as: :hidden
118
+ if sortable_column
119
+ form_builder.input sortable_column, as: :hidden
101
120
 
102
121
  contents << template.content_tag(:li, class: 'handle') do
103
122
  I18n.t('active_admin.move')
@@ -107,41 +126,57 @@ module ActiveAdmin
107
126
  contents
108
127
  end
109
128
 
110
- def sorted_children(assoc, column)
111
- object.public_send(assoc).sort_by do |o|
129
+ def allow_destroy?(form_object)
130
+ !! case destroy_option
131
+ when Symbol, String
132
+ form_object.public_send destroy_option
133
+ when Proc
134
+ destroy_option.call form_object
135
+ else
136
+ destroy_option
137
+ end
138
+ end
139
+
140
+ def sorted_children(column)
141
+ __getobj__.object.public_send(assoc).sort_by do |o|
112
142
  attribute = o.public_send column
113
143
  [attribute.nil? ? Float::INFINITY : attribute, o.id || Float::INFINITY]
114
144
  end
115
145
  end
116
146
 
117
- private
118
-
119
147
  def without_wrapper
120
- is_being_wrapped = @already_in_an_inputs_block
121
- @already_in_an_inputs_block = false
148
+ is_being_wrapped = already_in_an_inputs_block
149
+ self.already_in_an_inputs_block = false
122
150
 
123
151
  html = yield
124
152
 
125
- @already_in_an_inputs_block = is_being_wrapped
153
+ self.already_in_an_inputs_block = is_being_wrapped
126
154
  html
127
155
  end
128
156
 
129
157
  # Capture the ADD JS
130
- def js_for_has_many(assoc, form_block, template, new_record, class_string)
131
- assoc_reflection = object.class.reflect_on_association assoc
132
- assoc_name = assoc_reflection.klass.model_name
158
+ def js_for_has_many(class_string, &form_block)
159
+ assoc_name = assoc_klass.model_name
133
160
  placeholder = "NEW_#{assoc_name.to_s.underscore.upcase.gsub(/\//, '_')}_RECORD"
134
161
  opts = {
135
- for: [assoc, assoc_reflection.klass.new],
162
+ for: [assoc, assoc_klass.new],
136
163
  class: class_string,
137
164
  for_options: { child_index: placeholder }
138
165
  }
139
- html = template.capture{ inputs_for_nested_attributes opts, &form_block }
166
+ html = template.capture { __getobj__.send(:inputs_for_nested_attributes, opts, &form_block) }
140
167
  text = new_record.is_a?(String) ? new_record : I18n.t('active_admin.has_many_new', model: assoc_name.human)
141
168
 
142
169
  template.link_to text, '#', class: "button has_many_add", data: {
143
170
  html: CGI.escapeHTML(html).html_safe, placeholder: placeholder
144
171
  }
145
172
  end
173
+
174
+ def wrap_div_or_li(html)
175
+ template.content_tag(already_in_an_inputs_block ? :li : :div,
176
+ html,
177
+ class: "has_many_container #{assoc}",
178
+ 'data-sortable' => sortable_column,
179
+ 'data-sortable-start' => sortable_start)
180
+ end
146
181
  end
147
182
  end
@@ -34,7 +34,7 @@ module ActiveAdmin
34
34
  end
35
35
 
36
36
  def form_inputs
37
- attributes.reject{|a| %w(id created_at updated_at).include? a}.map{ |a| form_input(a) }.join("\n")
37
+ attributes.reject { |a| %w(id created_at updated_at).include? a }.map { |a| form_input(a) }.join("\n")
38
38
  end
39
39
 
40
40
  def form_input(name)
@@ -1,5 +1,6 @@
1
1
  module ActiveAdmin
2
2
  module ScopeChain
3
+ private
3
4
  # Scope an ActiveRecord::Relation chain
4
5
  #
5
6
  # Example:
@@ -9,10 +9,17 @@ module ActiveAdmin
9
9
  end
10
10
  end
11
11
 
12
+ # Can pass proc to filter label option
13
+ def label_from_options
14
+ res = super
15
+ res = res.call if res.is_a? Proc
16
+ res
17
+ end
18
+
12
19
  private
13
20
  def datepicker_options
14
21
  options = self.options.fetch(:datepicker_options, {})
15
- options = Hash[options.map{ |k, v| [k.to_s.camelcase(:lower), v] }]
22
+ options = Hash[options.map { |k, v| [k.to_s.camelcase(:lower), v] }]
16
23
  { datepicker_options: options }
17
24
  end
18
25
  end
@@ -57,8 +57,8 @@ module ActiveAdmin
57
57
 
58
58
  def current_filter
59
59
  @current_filter ||= begin
60
- methods = filters.map{ |f| "#{method}_#{f}" }
61
- methods.detect{ |m| @object.public_send m } || methods.first
60
+ methods = filters.map { |f| "#{method}_#{f}" }
61
+ methods.detect { |m| @object.public_send m } || methods.first
62
62
  end
63
63
  end
64
64
 
@@ -68,14 +68,8 @@ module ActiveAdmin
68
68
  self == item || include?(item)
69
69
  end
70
70
 
71
- # Returns sorted array of menu items that should be displayed in this context.
72
- # Sorts by priority first, then alphabetically by label if needed.
73
- def items(context = nil)
74
- @children.values.select{ |i| i.display?(context) }.sort do |a, b|
75
- result = a.priority <=> b.priority
76
- result = a.label(context) <=> b.label(context) if result == 0
77
- result
78
- end
71
+ def items
72
+ @children.values
79
73
  end
80
74
 
81
75
  attr_reader :children