yousty-activeadmin 1.0.4.pre → 1.0.5.pre

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (467) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +261 -211
  3. data/CONTRIBUTING.md +73 -39
  4. data/Gemfile +38 -20
  5. data/Guardfile +1 -0
  6. data/LICENSE +1 -1
  7. data/README.md +48 -24
  8. data/Rakefile +12 -4
  9. data/activeadmin.gemspec +21 -26
  10. data/app/assets/javascripts/active_admin/application.js.coffee +34 -5
  11. data/app/assets/javascripts/active_admin/base.js.coffee +11 -2
  12. data/app/assets/javascripts/active_admin/ext/jquery-ui.js.coffee +6 -0
  13. data/app/assets/javascripts/active_admin/ext/jquery.js.coffee +7 -0
  14. data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +39 -0
  15. data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +3 -4
  16. data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +51 -55
  17. data/app/assets/javascripts/active_admin/lib/flash.js.coffee +19 -0
  18. data/app/assets/javascripts/active_admin/lib/has_many.js.coffee +79 -0
  19. data/app/assets/javascripts/active_admin/lib/modal_dialog.js.coffee +37 -0
  20. data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +27 -0
  21. data/app/assets/javascripts/active_admin/lib/popover.js.coffee +29 -58
  22. data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +2 -3
  23. data/app/assets/stylesheets/active_admin/{_base.css.scss → _base.scss} +3 -0
  24. data/app/assets/stylesheets/active_admin/{_forms.css.scss → _forms.scss} +51 -15
  25. data/app/assets/stylesheets/active_admin/{_header.css.scss → _header.scss} +9 -5
  26. data/app/assets/stylesheets/active_admin/{_mixins.css.scss → _mixins.scss} +0 -0
  27. data/app/assets/stylesheets/active_admin/{_typography.css.scss → _typography.scss} +0 -0
  28. data/app/assets/stylesheets/active_admin/components/_batch_actions.scss +11 -0
  29. data/app/assets/stylesheets/active_admin/components/_buttons.scss +1 -1
  30. data/app/assets/stylesheets/active_admin/components/{_comments.css.scss → _comments.scss} +0 -0
  31. data/app/assets/stylesheets/active_admin/components/{_date_picker.css.scss → _date_picker.scss} +40 -12
  32. data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +3 -1
  33. data/app/assets/stylesheets/active_admin/components/_flash_messages.scss +37 -0
  34. data/app/assets/stylesheets/active_admin/components/_modal_dialog.scss +34 -0
  35. data/app/assets/stylesheets/active_admin/components/_pagination.scss +10 -0
  36. data/app/assets/stylesheets/active_admin/components/{_popovers.css.scss → _popovers.scss} +0 -0
  37. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +4 -0
  38. data/app/assets/stylesheets/active_admin/components/_table_tools.scss +67 -0
  39. data/app/assets/stylesheets/active_admin/components/{_tables.css.scss → _tables.scss} +1 -0
  40. data/app/assets/stylesheets/active_admin/components/_tabs.scss +65 -0
  41. data/app/assets/stylesheets/active_admin/components/_unsupported_browser.scss +16 -0
  42. data/app/assets/stylesheets/active_admin/mixins/{_all.css.scss → _all.scss} +0 -0
  43. data/app/assets/stylesheets/active_admin/mixins/{_buttons.css.scss → _buttons.scss} +0 -0
  44. data/app/assets/stylesheets/active_admin/mixins/{_gradients.css.scss → _gradients.scss} +1 -1
  45. data/app/assets/stylesheets/active_admin/mixins/{_icons.css.scss → _icons.scss} +1 -2
  46. data/app/assets/stylesheets/active_admin/mixins/{_reset.css.scss → _reset.scss} +0 -0
  47. data/app/assets/stylesheets/active_admin/mixins/{_rounded.css.scss → _rounded.scss} +0 -0
  48. data/app/assets/stylesheets/active_admin/mixins/{_sections.css.scss → _sections.scss} +7 -1
  49. data/app/assets/stylesheets/active_admin/mixins/{_shadows.css.scss → _shadows.scss} +0 -0
  50. data/app/assets/stylesheets/active_admin/mixins/{_variables.css.scss → _variables.scss} +10 -8
  51. data/app/assets/stylesheets/active_admin/{print.css.scss → print.scss} +4 -0
  52. data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +10 -7
  53. data/app/views/active_admin/devise/confirmations/new.html.erb +15 -0
  54. data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +1 -1
  55. data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +1 -1
  56. data/app/views/active_admin/devise/passwords/edit.html.erb +9 -10
  57. data/app/views/active_admin/devise/passwords/new.html.erb +5 -4
  58. data/app/views/active_admin/devise/registrations/new.html.erb +22 -0
  59. data/app/views/active_admin/devise/sessions/new.html.erb +8 -8
  60. data/app/views/active_admin/devise/shared/_links.erb +1 -1
  61. data/app/views/active_admin/devise/unlocks/new.html.erb +5 -4
  62. data/app/views/layouts/active_admin_logged_out.html.erb +3 -5
  63. data/config/locales/ar.yml +120 -0
  64. data/config/locales/bg.yml +26 -6
  65. data/config/locales/bs.yml +122 -0
  66. data/config/locales/ca.yml +10 -1
  67. data/config/locales/cs.yml +7 -2
  68. data/config/locales/da.yml +7 -3
  69. data/config/locales/de-CH.yml +14 -31
  70. data/config/locales/de.yml +33 -33
  71. data/config/locales/el.yml +127 -0
  72. data/config/locales/en-GB.yml +11 -4
  73. data/config/locales/en.yml +21 -4
  74. data/config/locales/{es_MX.yml → es-MX.yml} +14 -24
  75. data/config/locales/es.yml +32 -25
  76. data/config/locales/fa.yml +120 -0
  77. data/config/locales/fi.yml +9 -5
  78. data/config/locales/fr.yml +28 -12
  79. data/config/locales/he.yml +7 -3
  80. data/config/locales/hr.yml +42 -11
  81. data/config/locales/hu.yml +10 -3
  82. data/config/locales/it.yml +31 -3
  83. data/config/locales/ja.yml +17 -4
  84. data/config/locales/ko.yml +7 -1
  85. data/config/locales/lt.yml +42 -11
  86. data/config/locales/lv.yml +7 -3
  87. data/config/locales/{no-NB.yml → nb.yml} +46 -15
  88. data/config/locales/nl.yml +36 -5
  89. data/config/locales/pl.yml +13 -8
  90. data/config/locales/pt-BR.yml +36 -5
  91. data/config/locales/pt-PT.yml +8 -4
  92. data/config/locales/ro.yml +7 -3
  93. data/config/locales/ru.yml +26 -5
  94. data/config/locales/sv-SE.yml +9 -5
  95. data/config/locales/tr.yml +10 -3
  96. data/config/locales/uk.yml +36 -12
  97. data/config/locales/vi.yml +7 -3
  98. data/config/locales/zh-CN.yml +26 -10
  99. data/config/locales/zh-TW.yml +19 -13
  100. data/docs/0-installation.md +14 -6
  101. data/docs/1-general-configuration.md +8 -5
  102. data/docs/10-custom-pages.md +68 -70
  103. data/docs/11-decorators.md +48 -59
  104. data/docs/12-arbre-components.md +79 -73
  105. data/docs/13-authorization-adapter.md +128 -107
  106. data/docs/14-gotchas.md +90 -0
  107. data/docs/2-resource-customization.md +82 -15
  108. data/docs/3-index-pages.md +71 -12
  109. data/docs/3-index-pages/custom-index.md +31 -0
  110. data/docs/3-index-pages/index-as-table.md +45 -2
  111. data/docs/4-csv-format.md +1 -1
  112. data/docs/5-forms.md +78 -29
  113. data/docs/6-show-pages.md +31 -3
  114. data/docs/7-sidebars.md +46 -25
  115. data/docs/8-custom-actions.md +98 -77
  116. data/docs/9-batch-actions.md +211 -133
  117. data/docs/README.md +24 -0
  118. data/features/action_item.feature +3 -3
  119. data/features/authorization_pundit.feature +37 -0
  120. data/features/belongs_to.feature +3 -0
  121. data/features/breadcrumb.feature +48 -0
  122. data/features/comments/commenting.feature +44 -13
  123. data/features/development_reloading.feature +3 -4
  124. data/features/edit_page.feature +9 -19
  125. data/features/favicon.feature +3 -3
  126. data/features/i18n.feature +5 -0
  127. data/features/index/batch_actions.feature +41 -0
  128. data/features/index/filters.feature +23 -0
  129. data/features/index/format_as_csv.feature +90 -4
  130. data/features/index/index_as_blog.feature +4 -4
  131. data/features/index/index_as_table.feature +102 -6
  132. data/features/index/index_blank_slate.feature +22 -0
  133. data/features/index/index_scope_to.feature +16 -16
  134. data/features/index/page_title.feature +11 -0
  135. data/features/index/pagination.feature +1 -1
  136. data/features/index/switch_index_view.feature +14 -14
  137. data/features/new_page.feature +10 -20
  138. data/features/registering_pages.feature +1 -1
  139. data/features/renamed_resource.feature +32 -0
  140. data/features/show/page_title.feature +11 -0
  141. data/features/show/tabs.feature +27 -0
  142. data/features/sidebar_sections.feature +12 -0
  143. data/features/specifying_actions.feature +3 -3
  144. data/features/step_definitions/action_item_steps.rb +2 -2
  145. data/features/step_definitions/action_link_steps.rb +14 -1
  146. data/features/step_definitions/additional_web_steps.rb +17 -18
  147. data/features/step_definitions/asset_steps.rb +3 -3
  148. data/features/step_definitions/attribute_steps.rb +8 -3
  149. data/features/step_definitions/batch_action_steps.rb +26 -9
  150. data/features/step_definitions/blog_steps.rb +3 -0
  151. data/features/step_definitions/breadcrumb_steps.rb +1 -1
  152. data/features/step_definitions/comment_steps.rb +1 -1
  153. data/features/step_definitions/configuration_steps.rb +1 -1
  154. data/features/step_definitions/dashboard_steps.rb +2 -2
  155. data/features/step_definitions/factory_steps.rb +6 -6
  156. data/features/step_definitions/filter_steps.rb +25 -3
  157. data/features/step_definitions/flash_steps.rb +3 -3
  158. data/features/step_definitions/format_steps.rb +17 -10
  159. data/features/step_definitions/index_scope_steps.rb +5 -5
  160. data/features/step_definitions/layout_steps.rb +1 -1
  161. data/features/step_definitions/member_link_steps.rb +2 -2
  162. data/features/step_definitions/menu_steps.rb +3 -3
  163. data/features/step_definitions/pagination_steps.rb +2 -3
  164. data/features/step_definitions/sidebar_steps.rb +8 -3
  165. data/features/step_definitions/site_title_steps.rb +6 -4
  166. data/features/step_definitions/symbol_leak_steps.rb +1 -1
  167. data/features/step_definitions/tab_steps.rb +5 -0
  168. data/features/step_definitions/table_steps.rb +4 -4
  169. data/features/step_definitions/user_steps.rb +15 -9
  170. data/features/step_definitions/web_steps.rb +10 -11
  171. data/features/sti_resource.feature +2 -10
  172. data/features/strong_parameters.feature +73 -0
  173. data/features/support/env.rb +35 -2
  174. data/features/support/paths.rb +2 -2
  175. data/features/support/selectors.rb +1 -1
  176. data/features/users/resetting_password.feature +7 -7
  177. data/lib/active_admin.rb +18 -13
  178. data/lib/active_admin/abstract_view_factory.rb +7 -17
  179. data/lib/active_admin/application.rb +50 -25
  180. data/lib/active_admin/asset_registration.rb +2 -2
  181. data/lib/active_admin/authorization_adapter.rb +2 -2
  182. data/lib/active_admin/base_controller.rb +2 -3
  183. data/lib/active_admin/base_controller/authorization.rb +13 -31
  184. data/lib/active_admin/batch_actions.rb +1 -1
  185. data/lib/active_admin/batch_actions/controller.rb +13 -7
  186. data/lib/active_admin/batch_actions/resource_extension.rb +43 -17
  187. data/lib/active_admin/batch_actions/views/batch_action_form.rb +7 -4
  188. data/lib/active_admin/batch_actions/views/batch_action_popover.rb +3 -3
  189. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +8 -17
  190. data/lib/active_admin/batch_actions/views/selection_cells.rb +4 -4
  191. data/lib/active_admin/callbacks.rb +25 -24
  192. data/lib/active_admin/cancan_adapter.rb +7 -11
  193. data/lib/active_admin/csv_builder.rb +92 -15
  194. data/lib/active_admin/dependency.rb +93 -0
  195. data/lib/active_admin/deprecation.rb +6 -7
  196. data/lib/active_admin/devise.rb +26 -14
  197. data/lib/active_admin/dsl.rb +18 -11
  198. data/lib/active_admin/engine.rb +7 -2
  199. data/lib/active_admin/error.rb +59 -0
  200. data/lib/active_admin/filters/dsl.rb +2 -2
  201. data/lib/active_admin/filters/forms.rb +19 -30
  202. data/lib/active_admin/filters/formtastic_addons.rb +20 -11
  203. data/lib/active_admin/filters/resource_extension.rb +16 -9
  204. data/lib/active_admin/form_builder.rb +94 -105
  205. data/lib/active_admin/helpers/collection.rb +7 -13
  206. data/lib/active_admin/helpers/i18n.rb +7 -0
  207. data/lib/active_admin/helpers/optional_display.rb +5 -5
  208. data/lib/active_admin/helpers/scope_chain.rb +1 -1
  209. data/lib/active_admin/helpers/settings.rb +16 -9
  210. data/lib/active_admin/iconic.rb +17 -15
  211. data/lib/active_admin/iconic/icons.rb +136 -136
  212. data/lib/active_admin/inputs.rb +11 -7
  213. data/lib/active_admin/inputs/datepicker_input.rb +1 -1
  214. data/lib/active_admin/inputs/filters/base.rb +42 -0
  215. data/lib/active_admin/inputs/filters/base/search_method_select.rb +75 -0
  216. data/lib/active_admin/inputs/filters/boolean_input.rb +24 -0
  217. data/lib/active_admin/inputs/filters/check_boxes_input.rb +50 -0
  218. data/lib/active_admin/inputs/filters/date_range_input.rb +36 -0
  219. data/lib/active_admin/inputs/filters/numeric_input.rb +12 -0
  220. data/lib/active_admin/inputs/filters/select_input.rb +54 -0
  221. data/lib/active_admin/inputs/filters/string_input.rb +26 -0
  222. data/lib/active_admin/menu.rb +3 -3
  223. data/lib/active_admin/menu_collection.rb +1 -4
  224. data/lib/active_admin/namespace.rb +52 -29
  225. data/lib/active_admin/order_clause.rb +26 -0
  226. data/lib/active_admin/orm/active_record.rb +2 -0
  227. data/lib/active_admin/orm/active_record/comments.rb +48 -51
  228. data/lib/active_admin/orm/active_record/comments/comment.rb +16 -10
  229. data/lib/active_admin/orm/active_record/comments/namespace_helper.rb +1 -1
  230. data/lib/active_admin/orm/active_record/comments/resource_helper.rb +1 -1
  231. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +15 -13
  232. data/lib/active_admin/page.rb +5 -1
  233. data/lib/active_admin/page_dsl.rb +1 -1
  234. data/lib/active_admin/page_presenter.rb +2 -2
  235. data/lib/active_admin/pundit_adapter.rb +68 -0
  236. data/lib/active_admin/resource.rb +12 -3
  237. data/lib/active_admin/resource/action_items.rb +15 -8
  238. data/lib/active_admin/resource/belongs_to.rb +7 -3
  239. data/lib/active_admin/resource/controllers.rb +1 -0
  240. data/lib/active_admin/resource/includes.rb +12 -0
  241. data/lib/active_admin/resource/menu.rb +5 -5
  242. data/lib/active_admin/resource/naming.rb +25 -47
  243. data/lib/active_admin/resource/page_presenters.rb +1 -1
  244. data/lib/active_admin/resource/routes.rb +26 -10
  245. data/lib/active_admin/resource/scope_to.rb +7 -7
  246. data/lib/active_admin/resource/sidebars.rb +1 -0
  247. data/lib/active_admin/resource_collection.rb +44 -16
  248. data/lib/active_admin/resource_controller.rb +6 -5
  249. data/lib/active_admin/resource_controller/data_access.rb +87 -82
  250. data/lib/active_admin/resource_controller/decorators.rb +91 -9
  251. data/lib/active_admin/resource_controller/streaming.rb +37 -0
  252. data/lib/active_admin/resource_dsl.rb +54 -10
  253. data/lib/active_admin/router.rb +7 -7
  254. data/lib/active_admin/scope.rb +6 -6
  255. data/lib/active_admin/sidebar_section.rb +10 -2
  256. data/lib/active_admin/version.rb +1 -1
  257. data/lib/active_admin/view_factory.rb +17 -16
  258. data/lib/active_admin/view_helpers.rb +0 -1
  259. data/lib/active_admin/view_helpers/auto_link_helper.rb +23 -12
  260. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +13 -6
  261. data/lib/active_admin/view_helpers/display_helper.rb +30 -17
  262. data/lib/active_admin/view_helpers/download_format_links_helper.rb +21 -24
  263. data/lib/active_admin/view_helpers/fields_for.rb +2 -2
  264. data/lib/active_admin/view_helpers/flash_helper.rb +4 -3
  265. data/lib/active_admin/view_helpers/form_helper.rb +5 -9
  266. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +6 -6
  267. data/lib/active_admin/views/action_items.rb +2 -2
  268. data/lib/active_admin/views/components/action_list_popover.rb +1 -1
  269. data/lib/active_admin/views/components/active_admin_form.rb +123 -0
  270. data/lib/active_admin/views/components/attributes_table.rb +22 -13
  271. data/lib/active_admin/views/components/blank_slate.rb +1 -1
  272. data/lib/active_admin/views/components/columns.rb +13 -7
  273. data/lib/active_admin/views/components/dropdown_menu.rb +6 -6
  274. data/lib/active_admin/views/components/index_list.rb +7 -7
  275. data/lib/active_admin/views/components/paginated_collection.rb +33 -17
  276. data/lib/active_admin/views/components/panel.rb +8 -2
  277. data/lib/active_admin/views/components/popover.rb +1 -1
  278. data/lib/active_admin/views/components/scopes.rb +1 -1
  279. data/lib/active_admin/views/components/sidebar_section.rb +3 -2
  280. data/lib/active_admin/views/components/site_title.rb +2 -2
  281. data/lib/active_admin/views/components/status_tag.rb +34 -11
  282. data/lib/active_admin/views/components/table_for.rb +67 -22
  283. data/lib/active_admin/views/components/tabs.rb +28 -0
  284. data/lib/active_admin/views/components/unsupported_browser.rb +11 -0
  285. data/lib/active_admin/views/footer.rb +3 -3
  286. data/lib/active_admin/views/header.rb +3 -3
  287. data/lib/active_admin/views/index_as_blog.rb +6 -6
  288. data/lib/active_admin/views/index_as_grid.rb +2 -2
  289. data/lib/active_admin/views/index_as_table.rb +127 -40
  290. data/lib/active_admin/views/pages/base.rb +22 -18
  291. data/lib/active_admin/views/pages/form.rb +16 -6
  292. data/lib/active_admin/views/pages/index.rb +36 -20
  293. data/lib/active_admin/views/pages/layout.rb +1 -1
  294. data/lib/active_admin/views/pages/show.rb +4 -4
  295. data/lib/active_admin/views/tabbed_navigation.rb +7 -3
  296. data/lib/active_admin/views/title_bar.rb +10 -8
  297. data/lib/generators/active_admin/assets/assets_generator.rb +1 -3
  298. data/lib/generators/active_admin/devise/devise_generator.rb +20 -28
  299. data/lib/generators/active_admin/install/install_generator.rb +8 -9
  300. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +20 -22
  301. data/lib/generators/active_admin/install/templates/admin_user.rb.erb +12 -9
  302. data/lib/generators/active_admin/install/templates/dashboard.rb +4 -4
  303. data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb +3 -3
  304. data/lib/generators/active_admin/page/USAGE +8 -0
  305. data/lib/generators/active_admin/page/page_generator.rb +12 -0
  306. data/lib/generators/active_admin/page/templates/page.rb +5 -0
  307. data/lib/generators/active_admin/resource/resource_generator.rb +2 -4
  308. data/lib/generators/active_admin/resource/templates/admin.rb +15 -0
  309. data/lib/ransack_ext.rb +4 -4
  310. data/script/local +2 -2
  311. data/script/travis_cache +107 -0
  312. data/spec/javascripts/coffeescripts/jquery.aa.flash.js.coffee +25 -0
  313. data/spec/javascripts/fixtures/flashes.html +2 -0
  314. data/spec/rails_helper.rb +154 -0
  315. data/spec/{integration → requests}/default_namespace_spec.rb +6 -6
  316. data/spec/{integration → requests}/javascript_spec.rb +5 -5
  317. data/spec/requests/memory_spec.rb +23 -0
  318. data/spec/requests/stylesheets_spec.rb +18 -0
  319. data/spec/spec_helper.rb +12 -170
  320. data/spec/support/detect_rails_version.rb +31 -39
  321. data/spec/support/rails_template.rb +61 -34
  322. data/spec/support/rails_template_with_data.rb +14 -14
  323. data/spec/support/templates/admin/stores.rb +3 -5
  324. data/spec/support/templates/policies/active_admin/comment_policy.rb +9 -0
  325. data/spec/support/templates/policies/active_admin/page_policy.rb +18 -0
  326. data/spec/support/templates/policies/admin_user_policy.rb +11 -0
  327. data/spec/support/templates/policies/application_policy.rb +45 -0
  328. data/spec/support/templates/policies/category_policy.rb +7 -0
  329. data/spec/support/templates/policies/post_policy.rb +15 -0
  330. data/spec/support/templates/policies/store_policy.rb +11 -0
  331. data/spec/support/templates/policies/user_policy.rb +11 -0
  332. data/spec/support/templates/post_decorator.rb +4 -46
  333. data/spec/unit/abstract_view_factory_spec.rb +11 -11
  334. data/spec/unit/action_builder_spec.rb +24 -18
  335. data/spec/unit/active_admin_spec.rb +2 -2
  336. data/spec/unit/application_spec.rb +30 -31
  337. data/spec/unit/asset_registration_spec.rb +11 -11
  338. data/spec/unit/authorization/authorization_adapter_spec.rb +7 -7
  339. data/spec/unit/authorization/controller_authorization_spec.rb +11 -11
  340. data/spec/unit/authorization/index_overriding_spec.rb +22 -0
  341. data/spec/unit/auto_link_spec.rb +42 -5
  342. data/spec/unit/batch_actions/resource_spec.rb +15 -14
  343. data/spec/unit/batch_actions/settings_spec.rb +18 -18
  344. data/spec/unit/belongs_to_spec.rb +26 -17
  345. data/spec/unit/cancan_adapter_spec.rb +4 -4
  346. data/spec/unit/comments_spec.rb +99 -39
  347. data/spec/unit/component_spec.rb +3 -3
  348. data/spec/unit/config_shared_examples.rb +8 -8
  349. data/spec/unit/controller_filters_spec.rb +26 -14
  350. data/spec/unit/csv_builder_spec.rb +152 -24
  351. data/spec/unit/dependency_spec.rb +135 -0
  352. data/spec/unit/devise_spec.rb +17 -37
  353. data/spec/unit/dsl_spec.rb +70 -9
  354. data/spec/unit/event_spec.rb +9 -9
  355. data/spec/unit/filters/filter_form_builder_spec.rb +167 -157
  356. data/spec/unit/filters/resource_spec.rb +35 -33
  357. data/spec/unit/form_builder_spec.rb +383 -145
  358. data/spec/unit/generators/install_spec.rb +5 -5
  359. data/spec/unit/helpers/collection_spec.rb +18 -18
  360. data/spec/unit/helpers/scope_chain_spec.rb +5 -5
  361. data/spec/unit/helpers/settings_spec.rb +4 -4
  362. data/spec/unit/i18n_spec.rb +12 -0
  363. data/spec/unit/menu_collection_spec.rb +14 -14
  364. data/spec/unit/menu_item_spec.rb +42 -42
  365. data/spec/unit/menu_spec.rb +20 -20
  366. data/spec/unit/namespace/authorization_spec.rb +5 -5
  367. data/spec/unit/namespace/register_page_spec.rb +9 -9
  368. data/spec/unit/namespace/register_resource_spec.rb +26 -28
  369. data/spec/unit/namespace_spec.rb +20 -20
  370. data/spec/unit/order_clause_spec.rb +81 -0
  371. data/spec/unit/page_controller_spec.rb +1 -1
  372. data/spec/unit/page_spec.rb +18 -12
  373. data/spec/unit/pretty_format_spec.rb +42 -14
  374. data/spec/unit/pundit_adapter_spec.rb +98 -0
  375. data/spec/unit/resource/action_items_spec.rb +13 -10
  376. data/spec/unit/resource/includes_spec.rb +21 -0
  377. data/spec/unit/resource/menu_spec.rb +1 -1
  378. data/spec/unit/resource/naming_spec.rb +23 -23
  379. data/spec/unit/resource/page_presenters_spec.rb +8 -8
  380. data/spec/unit/resource/pagination_spec.rb +6 -6
  381. data/spec/unit/resource/routes_spec.rb +10 -10
  382. data/spec/unit/resource/scopes_spec.rb +14 -7
  383. data/spec/unit/resource/sidebars_spec.rb +6 -6
  384. data/spec/unit/resource_collection_spec.rb +66 -68
  385. data/spec/unit/resource_controller/data_access_spec.rb +39 -21
  386. data/spec/unit/resource_controller/decorators_spec.rb +83 -0
  387. data/spec/unit/resource_controller/sidebars_spec.rb +7 -8
  388. data/spec/unit/resource_controller_spec.rb +66 -62
  389. data/spec/unit/resource_registration_spec.rb +12 -12
  390. data/spec/unit/resource_spec.rb +75 -40
  391. data/spec/unit/routing_spec.rb +39 -31
  392. data/spec/unit/scope_spec.rb +112 -30
  393. data/spec/unit/settings_spec.rb +51 -21
  394. data/spec/unit/view_factory_spec.rb +2 -2
  395. data/spec/unit/view_helpers/breadcrumbs_spec.rb +137 -69
  396. data/spec/unit/view_helpers/display_name_spec.rb +49 -21
  397. data/spec/unit/view_helpers/download_format_links_helper_spec.rb +5 -5
  398. data/spec/unit/view_helpers/fields_for_spec.rb +18 -18
  399. data/spec/unit/view_helpers/flash_helper_spec.rb +25 -0
  400. data/spec/unit/view_helpers/form_helper_spec.rb +9 -22
  401. data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +59 -21
  402. data/spec/unit/views/components/action_list_popover_spec.rb +16 -6
  403. data/spec/unit/views/components/attributes_table_spec.rb +94 -52
  404. data/spec/unit/views/components/batch_action_popover_spec.rb +20 -6
  405. data/spec/unit/views/components/blank_slate_spec.rb +14 -4
  406. data/spec/unit/views/components/columns_spec.rb +52 -22
  407. data/spec/unit/views/components/index_list_spec.rb +11 -8
  408. data/spec/unit/views/components/index_table_for_spec.rb +46 -0
  409. data/spec/unit/views/components/paginated_collection_spec.rb +68 -59
  410. data/spec/unit/views/components/panel_spec.rb +32 -21
  411. data/spec/unit/views/components/popover_spec.rb +7 -7
  412. data/spec/unit/views/components/sidebar_section_spec.rb +18 -8
  413. data/spec/unit/views/components/site_title_spec.rb +8 -8
  414. data/spec/unit/views/components/status_tag_spec.rb +178 -38
  415. data/spec/unit/views/components/table_for_spec.rb +227 -44
  416. data/spec/unit/views/components/tabs_spec.rb +39 -0
  417. data/spec/unit/views/components/unsupported_browser_spec.rb +47 -0
  418. data/spec/unit/views/pages/form_spec.rb +17 -10
  419. data/spec/unit/views/pages/index_spec.rb +60 -0
  420. data/spec/unit/views/pages/layout_spec.rb +17 -21
  421. data/spec/unit/views/pages/show_spec.rb +16 -3
  422. data/spec/unit/views/tabbed_navigation_spec.rb +61 -52
  423. data/tasks/docs.rake +1 -1
  424. data/tasks/parallel_tests.rake +8 -2
  425. data/tasks/test.rake +8 -4
  426. data/tasks/yard.rake +7 -5
  427. metadata +180 -101
  428. data/app/assets/images/active_admin/admin_notes_icon.png +0 -0
  429. data/app/assets/images/active_admin/datepicker/datepicker-header-bg.png +0 -0
  430. data/app/assets/images/active_admin/datepicker/datepicker-next-link-icon.png +0 -0
  431. data/app/assets/images/active_admin/datepicker/datepicker-nipple.png +0 -0
  432. data/app/assets/images/active_admin/datepicker/datepicker-prev-link-icon.png +0 -0
  433. data/app/assets/images/active_admin/index_list_icons/block_icon.svg +0 -10
  434. data/app/assets/images/active_admin/index_list_icons/blog_icon.svg +0 -4
  435. data/app/assets/images/active_admin/index_list_icons/grid_icon.svg +0 -13
  436. data/app/assets/images/active_admin/index_list_icons/table_icon.svg +0 -3
  437. data/app/assets/images/active_admin/loading.gif +0 -0
  438. data/app/assets/javascripts/active_admin/components/application.js.coffee +0 -23
  439. data/app/assets/javascripts/active_admin/components/batch_actions.js.coffee +0 -26
  440. data/app/assets/javascripts/active_admin/components/has_many.js.coffee +0 -41
  441. data/app/assets/stylesheets/active_admin/components/_batch_actions.css.scss +0 -11
  442. data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +0 -39
  443. data/app/assets/stylesheets/active_admin/components/_table_tools.css.scss +0 -95
  444. data/app/views/active_admin/dashboard/index.html.arb +0 -1
  445. data/app/views/active_admin/resource/index.csv.erb +0 -17
  446. data/docs/3-index-pages/create-an-index.md +0 -29
  447. data/lib/active_admin/inputs/filter_base.rb +0 -33
  448. data/lib/active_admin/inputs/filter_base/search_method_select.rb +0 -73
  449. data/lib/active_admin/inputs/filter_boolean_input.rb +0 -32
  450. data/lib/active_admin/inputs/filter_check_boxes_input.rb +0 -51
  451. data/lib/active_admin/inputs/filter_date_range_input.rb +0 -34
  452. data/lib/active_admin/inputs/filter_numeric_input.rb +0 -10
  453. data/lib/active_admin/inputs/filter_select_input.rb +0 -61
  454. data/lib/active_admin/inputs/filter_string_input.rb +0 -24
  455. data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +0 -7
  456. data/spec/integration/memory_spec.rb +0 -29
  457. data/spec/integration/stylesheets_spec.rb +0 -41
  458. data/spec/javascripts/compiled/jquery.aa.checkbox-toggler-spec.js +0 -60
  459. data/spec/javascripts/compiled/jquery.aa.popover-spec.js +0 -106
  460. data/spec/javascripts/compiled/jquery.aa.table-checkbox-toggler-spec.js +0 -37
  461. data/spec/javascripts/helpers/vendor/jasmine-fixture-0.0.5.js +0 -108
  462. data/spec/javascripts/helpers/vendor/jasmine-jquery.js +0 -288
  463. data/spec/javascripts/helpers/vendor/sinon-1.2.0.js +0 -2915
  464. data/spec/javascripts/support/jquery-ui-1.8.16.custom.min.js +0 -34
  465. data/spec/javascripts/support/jquery.min.js +0 -4
  466. data/spec/spec_helper_without_rails.rb +0 -16
  467. data/tasks/js.rake +0 -32
@@ -0,0 +1,93 @@
1
+ module ActiveAdmin
2
+ module Dependency
3
+ DEVISE = '~> 3.2'
4
+
5
+ # Provides a clean interface to check for gem dependencies at runtime.
6
+ #
7
+ # ActiveAdmin::Dependency.draper
8
+ # => #<ActiveAdmin::Dependency::Matcher for draper 1.2.1>
9
+ #
10
+ # ActiveAdmin::Dependency.draper?
11
+ # => true
12
+ #
13
+ # ActiveAdmin::Dependency.draper? '>= 1.5.0'
14
+ # => false
15
+ #
16
+ # ActiveAdmin::Dependency.draper? '= 1.2.1'
17
+ # => true
18
+ #
19
+ # ActiveAdmin::Dependency.draper? '~> 1.2.0'
20
+ # => true
21
+ #
22
+ # ActiveAdmin::Dependency.rails? '>= 4.1.0', '<= 4.1.1'
23
+ # => true
24
+ #
25
+ # ActiveAdmin::Dependency.rails! '2'
26
+ # -> ActiveAdmin::DependencyError: You provided rails 3.2.18 but we need: 2.
27
+ #
28
+ # ActiveAdmin::Dependency.devise!
29
+ # -> ActiveAdmin::DependencyError: To use devise you need to specify it in your Gemfile.
30
+ #
31
+ #
32
+ # All but the pessimistic operator (~>) can also be run using Ruby's comparison syntax.
33
+ #
34
+ # ActiveAdmin::Dependency.rails >= '3.2.18'
35
+ # => true
36
+ #
37
+ # Which is especially useful if you're looking up a gem with dashes in the name.
38
+ #
39
+ # ActiveAdmin::Dependency['jquery-ui-rails'] < 5
40
+ # => false
41
+ #
42
+ def self.method_missing(name, *args)
43
+ if name[-1] == '?'
44
+ Matcher.new(name[0..-2]).match? args
45
+ elsif name[-1] == '!'
46
+ Matcher.new(name[0..-2]).match! args
47
+ else
48
+ Matcher.new name.to_s
49
+ end
50
+ end
51
+
52
+ def self.[](name)
53
+ Matcher.new name.to_s
54
+ end
55
+
56
+ class Matcher
57
+ def initialize(name)
58
+ @name, @spec = name, Gem.loaded_specs[name]
59
+ end
60
+
61
+ def match?(*reqs)
62
+ !!@spec && Gem::Requirement.create(reqs).satisfied_by?(@spec.version)
63
+ end
64
+
65
+ def match!(*reqs)
66
+ unless @spec
67
+ raise DependencyError, "To use #{@name} you need to specify it in your Gemfile."
68
+ end
69
+
70
+ unless match? reqs
71
+ raise DependencyError, "You provided #{@spec.name} #{@spec.version} but we need: #{reqs.join ', '}."
72
+ end
73
+ end
74
+
75
+ include Comparable
76
+
77
+ def <=>(other)
78
+ if @spec
79
+ @spec.version <=> Gem::Version.create(other)
80
+ else
81
+ # you'd otherwise get an unhelpful error message:
82
+ # ArgumentError: comparison of ActiveAdmin::Dependency::Matcher with 2 failed
83
+ raise DependencyError, "To use #{@name} you need to specify it in your Gemfile."
84
+ end
85
+ end
86
+
87
+ def inspect
88
+ info = @spec ? "#{@spec.name} #{@spec.version}" : '(missing)'
89
+ "<ActiveAdmin::Dependency::Matcher for #{info}>"
90
+ end
91
+ end
92
+ end
93
+ end
@@ -23,13 +23,12 @@ module ActiveAdmin
23
23
  # end
24
24
  #
25
25
  def deprecate(klass, method, message)
26
- klass.class_eval <<-EOC, __FILE__, __LINE__ + 1
27
- alias_method :deprecated_#{method}, :#{method}
28
- def #{method}(*args)
29
- ActiveAdmin::Deprecation.warn('#{message}', caller)
30
- send(:deprecated_#{method}, *args)
31
- end
32
- EOC
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
33
32
  end
34
33
 
35
34
  end
@@ -1,28 +1,26 @@
1
+ ActiveAdmin::Dependency.devise! ActiveAdmin::Dependency::DEVISE
2
+
1
3
  require 'devise'
2
4
 
3
5
  module ActiveAdmin
4
6
  module Devise
5
7
 
6
8
  def self.config
7
- config = {
8
- :path => ActiveAdmin.application.default_namespace,
9
- :controllers => ActiveAdmin::Devise.controllers,
10
- :path_names => { :sign_in => 'login', :sign_out => "logout" }
9
+ {
10
+ path: ActiveAdmin.application.default_namespace || "/",
11
+ controllers: ActiveAdmin::Devise.controllers,
12
+ path_names: { sign_in: 'login', sign_out: "logout" },
13
+ sign_out_via: [*::Devise.sign_out_via, ActiveAdmin.application.logout_link_method].uniq
11
14
  }
12
-
13
- if ::Devise.respond_to?(:sign_out_via)
14
- logout_methods = [::Devise.sign_out_via, ActiveAdmin.application.logout_link_method].flatten.uniq
15
- config.merge!( :sign_out_via => logout_methods)
16
- end
17
-
18
- config
19
15
  end
20
16
 
21
17
  def self.controllers
22
18
  {
23
- :sessions => "active_admin/devise/sessions",
24
- :passwords => "active_admin/devise/passwords",
25
- :unlocks => "active_admin/devise/unlocks"
19
+ sessions: "active_admin/devise/sessions",
20
+ passwords: "active_admin/devise/passwords",
21
+ unlocks: "active_admin/devise/unlocks",
22
+ registrations: "active_admin/devise/registrations",
23
+ confirmations: "active_admin/devise/confirmations"
26
24
  }
27
25
  end
28
26
 
@@ -66,5 +64,19 @@ module ActiveAdmin
66
64
  include ::ActiveAdmin::Devise::Controller
67
65
  end
68
66
 
67
+ class RegistrationsController < ::Devise::RegistrationsController
68
+ include ::ActiveAdmin::Devise::Controller
69
+ end
70
+
71
+ class ConfirmationsController < ::Devise::ConfirmationsController
72
+ include ::ActiveAdmin::Devise::Controller
73
+ end
74
+
75
+ def self.controllers_for_filters
76
+ [SessionsController, PasswordsController, UnlocksController,
77
+ RegistrationsController, ConfirmationsController
78
+ ]
79
+ end
80
+
69
81
  end
70
82
  end
@@ -1,9 +1,8 @@
1
1
  module ActiveAdmin
2
2
 
3
- #
4
3
  # The Active Admin DSL. This class is where all the registration blocks
5
- # are instance eval'd. This is the central place for the API given to
6
- # users of Active Admin
4
+ # are evaluated. This is the central place for the API given to
5
+ # users of Active Admin.
7
6
  #
8
7
  class DSL
9
8
 
@@ -13,10 +12,10 @@ module ActiveAdmin
13
12
 
14
13
  # Runs the registration block inside this object
15
14
  def run_registration_block(&block)
16
- instance_eval &block if block_given?
15
+ instance_exec &block if block_given?
17
16
  end
18
17
 
19
- # The instance of ActiveAdmin::Config that's being registered
18
+ # The instance of ActiveAdmin::Resource that's being registered
20
19
  # currently. You can use this within your registration blocks to
21
20
  # modify options:
22
21
  #
@@ -51,13 +50,13 @@ module ActiveAdmin
51
50
  #
52
51
  # @param [Module] mod A module to include
53
52
  #
54
- # @returns [Nil]
53
+ # @return [Nil]
55
54
  def include(mod)
56
55
  mod.included(self)
57
56
  end
58
57
 
59
58
  # Returns the controller for this resource. If you pass a
60
- # block, it will be eval'd in the controller
59
+ # block, it will be evaluated in the controller.
61
60
  #
62
61
  # Example:
63
62
  #
@@ -72,19 +71,27 @@ module ActiveAdmin
72
71
  # end
73
72
  #
74
73
  def controller(&block)
75
- @config.controller.class_eval(&block) if block_given?
74
+ @config.controller.class_exec(&block) if block_given?
76
75
  @config.controller
77
76
  end
78
77
 
79
78
  # Add a new action item to the resource
80
79
  #
80
+ # @param [Symbol] name
81
81
  # @param [Hash] options valid keys include:
82
82
  # :only: A single or array of controller actions to display
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(options = {}, &block)
87
- config.add_action_item(options, &block)
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
+
94
+ config.add_action_item(name, options, &block)
88
95
  end
89
96
 
90
97
  # Add a new batch action item to the resource
@@ -101,7 +108,7 @@ module ActiveAdmin
101
108
  def batch_action(title, options = {}, &block)
102
109
  # Create symbol & title information
103
110
  if title.is_a? String
104
- sym = title.titleize.gsub(' ', '').underscore.to_sym
111
+ sym = title.titleize.tr(' ', '').underscore.to_sym
105
112
  else
106
113
  sym = title
107
114
  title = sym.to_s.titleize
@@ -1,7 +1,12 @@
1
1
  module ActiveAdmin
2
2
  class Engine < ::Rails::Engine
3
- initializer "ActiveAdmin precompile hook", :group => :all do |app|
4
- app.config.assets.precompile += %w(active_admin.js active_admin.css active_admin/print.css)
3
+ initializer "active_admin.precompile", group: :all do |app|
4
+ ActiveAdmin.application.stylesheets.each do |path, _|
5
+ app.config.assets.precompile << path
6
+ end
7
+ ActiveAdmin.application.javascripts.each do |path|
8
+ app.config.assets.precompile << path
9
+ end
5
10
  end
6
11
  end
7
12
  end
@@ -0,0 +1,59 @@
1
+ module ActiveAdmin
2
+ # Exception class to raise when there is an authorized access
3
+ # exception thrown. The exception has a few goodies that may
4
+ # be useful for capturing / recognizing security issues.
5
+ class AccessDenied < StandardError
6
+ attr_reader :user, :action, :subject
7
+
8
+ def initialize(user, action, subject)
9
+ @user, @action, @subject = user, action, subject
10
+
11
+ super()
12
+ end
13
+
14
+ def message
15
+ I18n.t("active_admin.access_denied.message")
16
+ end
17
+ end
18
+
19
+ class Error < RuntimeError
20
+ end
21
+
22
+ class ErrorLoading < Error
23
+ # Locates the most recent file and line from the caught exception's backtrace.
24
+ def find_cause(folder, backtrace)
25
+ backtrace.grep(/\/(#{folder}\/.*\.rb):(\d+)/){ [$1, $2] }.first
26
+ end
27
+ end
28
+
29
+ class DatabaseHitDuringLoad < ErrorLoading
30
+ def initialize(exception)
31
+ file, line = find_cause(:app, exception.backtrace)
32
+
33
+ super "Your file, #{file} (line #{line}), caused a database error while Active Admin was loading. This " +
34
+ "is most common when your database is missing or doesn't have the latest migrations applied. To " +
35
+ "prevent this error, move the code to a place where it will only be run when a page is rendered. " +
36
+ "One solution can be, to wrap the query in a Proc." +
37
+ "Original error message: #{exception.message}"
38
+ end
39
+
40
+ def self.capture
41
+ yield
42
+ rescue *database_error_classes => exception
43
+ raise new exception
44
+ end
45
+
46
+ private
47
+
48
+ def self.database_error_classes
49
+ @classes ||= []
50
+ end
51
+ end
52
+
53
+ class DependencyError < ErrorLoading
54
+ end
55
+
56
+ class NoMenuError < KeyError
57
+ end
58
+
59
+ end
@@ -8,8 +8,8 @@ module ActiveAdmin
8
8
  end
9
9
 
10
10
  # For docs, please see ActiveAdmin::Filters::ResourceExtension#remove_filter
11
- def remove_filter(attribute)
12
- config.remove_filter(attribute)
11
+ def remove_filter(*attributes)
12
+ config.remove_filter(*attributes)
13
13
  end
14
14
 
15
15
  # For docs, please see ActiveAdmin::Filters::ResourceExtension#preserve_default_filters!
@@ -1,19 +1,17 @@
1
1
  module ActiveAdmin
2
2
  module Filters
3
-
4
3
  # This form builder defines methods to build filter forms such
5
4
  # as the one found in the sidebar of the index page of a standard resource.
6
5
  class FormBuilder < ::ActiveAdmin::FormBuilder
7
6
  include ::ActiveAdmin::Filters::FormtasticAddons
7
+ self.input_namespaces = [::Object, ::ActiveAdmin::Inputs::Filters, ::ActiveAdmin::Inputs, ::Formtastic::Inputs]
8
8
 
9
- def initialize(*args)
10
- @use_form_buffer = true # force ActiveAdmin::FormBuilder to use the form buffer
11
- super
12
- end
9
+ # TODO: remove input class finders after formtastic 4 (where it will be default)
10
+ self.input_class_finder = ::Formtastic::InputClassFinder
13
11
 
14
12
  def filter(method, options = {})
15
13
  if method.present? && options[:as] ||= default_input_type(method)
16
- input(method, options)
14
+ template.concat input(method, options)
17
15
  end
18
16
  end
19
17
 
@@ -22,8 +20,10 @@ module ActiveAdmin
22
20
  # Returns the default filter type for a given attribute. If you want
23
21
  # to use a custom search method, you have to specify the type yourself.
24
22
  def default_input_type(method, options = {})
25
- if method =~ /_(contains|starts_with|ends_with)\z/
23
+ if method =~ /_(eq|equals|cont|contains|start|starts_with|end|ends_with)\z/
26
24
  :string
25
+ elsif klass._ransackers.key?(method.to_s)
26
+ klass._ransackers[method.to_s].type
27
27
  elsif reflection_for(method) || polymorphic_foreign_type?(method)
28
28
  :select
29
29
  elsif column = column_for(method)
@@ -39,15 +39,6 @@ module ActiveAdmin
39
39
  end
40
40
  end
41
41
  end
42
-
43
- def custom_input_class_name(as)
44
- "Filter#{as.to_s.camelize}Input"
45
- end
46
-
47
- def active_admin_input_class_name(as)
48
- "ActiveAdmin::Inputs::Filter#{as.to_s.camelize}Input"
49
- end
50
-
51
42
  end
52
43
 
53
44
 
@@ -56,30 +47,28 @@ module ActiveAdmin
56
47
 
57
48
  # Helper method to render a filter form
58
49
  def active_admin_filters_form_for(search, filters, options = {})
59
- defaults = { :builder => ActiveAdmin::Filters::FormBuilder,
60
- :url => collection_path,
61
- :html => {:class => 'filter_form'} }
62
- required = { :html => {:method => :get},
63
- :as => :q }
50
+ defaults = { builder: ActiveAdmin::Filters::FormBuilder,
51
+ url: collection_path,
52
+ html: {class: 'filter_form'} }
53
+ required = { html: {method: :get},
54
+ as: :q }
64
55
  options = defaults.deep_merge(options).deep_merge(required)
65
56
 
66
57
  form_for search, options do |f|
67
58
  filters.each do |attribute, opts|
68
- should = opts.delete(:if) || proc{ true }
69
- shouldnt = opts.delete(:unless) || proc{ false }
59
+ next if opts.key?(:if) && !call_method_or_proc_on(self, opts[:if])
60
+ next if opts.key?(:unless) && call_method_or_proc_on(self, opts[:unless])
70
61
 
71
- if call_method_or_proc_on(self, should) && !call_method_or_proc_on(self, shouldnt)
72
- f.filter attribute, opts
73
- end
62
+ f.filter attribute, opts.except(:if, :unless)
74
63
  end
75
64
 
76
- buttons = content_tag :div, :class => "buttons" do
65
+ buttons = content_tag :div, class: "buttons" do
77
66
  f.submit(I18n.t('active_admin.filters.buttons.filter')) +
78
- link_to(I18n.t('active_admin.filters.buttons.clear'), '#', :class => 'clear_filters_btn') +
79
- hidden_field_tags_for(params, :except => [:q, :page])
67
+ link_to(I18n.t('active_admin.filters.buttons.clear'), '#', class: 'clear_filters_btn') +
68
+ hidden_field_tags_for(params, except: [:q, :page])
80
69
  end
81
70
 
82
- f.form_buffers.last + buttons
71
+ f.template.concat buttons
83
72
  end
84
73
  end
85
74
 
@@ -11,7 +11,7 @@ module ActiveAdmin
11
11
  if klass.respond_to?(:human_attribute_name)
12
12
  klass.human_attribute_name(method)
13
13
  else
14
- method.to_s.send(builder.label_str_method)
14
+ method.to_s.public_send(builder.label_str_method)
15
15
  end
16
16
  end
17
17
 
@@ -37,34 +37,43 @@ module ActiveAdmin
37
37
  end
38
38
 
39
39
  def polymorphic_foreign_type?(method)
40
- klass.reflections.values.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
 
44
- def searchable_through_association?(method = method)
45
- ref = reflection_for(method)
46
- ref.options[:through] && ref.through_reflection.klass.ransackable_attributes.include?(ref.foreign_key) if ref
47
- end
48
-
49
44
  #
50
- # These help figure out whether the given method will be recognized by Ransack.
45
+ # These help figure out whether the given method or association will be recognized by Ransack.
51
46
  #
52
47
 
48
+ def searchable_has_many_through?
49
+ if reflection && reflection.options[:through]
50
+ reflection.through_reflection.klass.ransackable_attributes.include? reflection.foreign_key
51
+ else
52
+ false
53
+ end
54
+ end
55
+
53
56
  def seems_searchable?
54
- has_predicate? || ransacker?
57
+ has_predicate? || ransacker? || scope?
55
58
  end
56
59
 
57
60
  # If the given method has a predicate (like _eq or _lteq), it's pretty
58
61
  # likely we're dealing with a valid search method.
59
62
  def has_predicate?
60
- !!Ransack::Predicate.detect_and_strip_from_string!(method.to_s)
63
+ !!Ransack::Predicate.detect_from_string(method.to_s)
61
64
  end
62
65
 
63
- # Ransack lets you define custom search methods, so we need to check for them.
66
+ # Ransack lets you define custom search methods, called ransackers.
64
67
  def ransacker?
65
68
  klass._ransackers.key? method.to_s
66
69
  end
67
70
 
71
+ # Ransack supports exposing selected scopes on your model for advanced searches.
72
+ def scope?
73
+ context = Ransack::Context.for klass
74
+ context.respond_to?(:ransackable_scope?) && context.ransackable_scope?(method.to_s, klass)
75
+ end
76
+
68
77
  end
69
78
  end
70
79
  end