activeadmin 0.6.6 → 1.0.0.pre1

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 (512) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +11 -8
  3. data/.hound.yml +11 -0
  4. data/.travis.yml +36 -10
  5. data/.yardopts +2 -1
  6. data/CHANGELOG.md +118 -67
  7. data/CONTRIBUTING.md +96 -73
  8. data/Gemfile +35 -35
  9. data/Guardfile +1 -0
  10. data/LICENSE +1 -1
  11. data/README.md +98 -0
  12. data/Rakefile +12 -4
  13. data/activeadmin.gemspec +21 -24
  14. data/app/assets/javascripts/active_admin/application.js.coffee +32 -0
  15. data/app/assets/javascripts/active_admin/base.js.coffee +14 -0
  16. data/app/assets/javascripts/active_admin/ext/jquery-ui.js.coffee +6 -0
  17. data/app/assets/javascripts/active_admin/ext/jquery.js.coffee +7 -0
  18. data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +39 -0
  19. data/app/assets/javascripts/active_admin/{components/jquery.aa.checkbox-toggler.js.coffee → lib/checkbox-toggler.js.coffee} +3 -4
  20. data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +101 -0
  21. data/app/assets/javascripts/active_admin/lib/flash.js.coffee +19 -0
  22. data/app/assets/javascripts/active_admin/lib/has_many.js.coffee +79 -0
  23. data/app/assets/javascripts/active_admin/lib/modal_dialog.js.coffee +37 -0
  24. data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +27 -0
  25. data/app/assets/javascripts/active_admin/lib/popover.js.coffee +68 -0
  26. data/app/assets/javascripts/active_admin/{components/jquery.aa.table-checkbox-toggler.js.coffee → lib/table-checkbox-toggler.js.coffee} +2 -3
  27. data/app/assets/stylesheets/active_admin/{_base.css.scss → _base.scss} +3 -0
  28. data/app/assets/stylesheets/active_admin/{_forms.css.scss → _forms.scss} +61 -17
  29. data/app/assets/stylesheets/active_admin/{_header.css.scss → _header.scss} +9 -5
  30. data/app/assets/stylesheets/active_admin/{_mixins.css.scss → _mixins.scss} +0 -0
  31. data/app/assets/stylesheets/active_admin/{_typography.css.scss → _typography.scss} +0 -0
  32. data/app/assets/stylesheets/active_admin/components/_batch_actions.scss +11 -0
  33. data/app/assets/stylesheets/active_admin/components/_blank_slates.scss +0 -1
  34. data/app/assets/stylesheets/active_admin/components/_buttons.scss +1 -1
  35. data/app/assets/stylesheets/active_admin/components/{_comments.css.scss → _comments.scss} +0 -0
  36. data/app/assets/stylesheets/active_admin/components/{_date_picker.css.scss → _date_picker.scss} +40 -14
  37. data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +5 -4
  38. data/app/assets/stylesheets/active_admin/components/_flash_messages.scss +37 -0
  39. data/app/assets/stylesheets/active_admin/components/_modal_dialog.scss +34 -0
  40. data/app/assets/stylesheets/active_admin/components/_pagination.scss +10 -0
  41. data/app/assets/stylesheets/active_admin/components/{_popovers.css.scss → _popovers.scss} +2 -3
  42. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +4 -0
  43. data/app/assets/stylesheets/active_admin/components/_table_tools.scss +67 -0
  44. data/app/assets/stylesheets/active_admin/components/{_tables.css.scss → _tables.scss} +4 -2
  45. data/app/assets/stylesheets/active_admin/components/_tabs.scss +65 -0
  46. data/app/assets/stylesheets/active_admin/components/_unsupported_browser.scss +16 -0
  47. data/app/assets/stylesheets/active_admin/mixins/{_all.css.scss → _all.scss} +0 -0
  48. data/app/assets/stylesheets/active_admin/mixins/{_buttons.css.scss → _buttons.scss} +0 -1
  49. data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +28 -0
  50. data/app/assets/stylesheets/active_admin/mixins/{_icons.css.scss → _icons.scss} +1 -2
  51. data/app/assets/stylesheets/active_admin/mixins/{_reset.css.scss → _reset.scss} +0 -0
  52. data/app/assets/stylesheets/active_admin/mixins/_rounded.scss +22 -0
  53. data/app/assets/stylesheets/active_admin/mixins/{_sections.css.scss → _sections.scss} +8 -2
  54. data/app/assets/stylesheets/active_admin/mixins/{_shadows.css.scss → _shadows.scss} +0 -7
  55. data/app/assets/stylesheets/active_admin/mixins/_utilities.scss +0 -9
  56. data/app/assets/stylesheets/active_admin/mixins/{_variables.css.scss → _variables.scss} +10 -8
  57. data/app/assets/stylesheets/active_admin/{print.css.scss → print.scss} +4 -0
  58. data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +5 -2
  59. data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +11 -9
  60. data/app/views/active_admin/devise/confirmations/new.html.erb +15 -0
  61. data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +1 -1
  62. data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +1 -1
  63. data/app/views/active_admin/devise/passwords/edit.html.erb +9 -10
  64. data/app/views/active_admin/devise/passwords/new.html.erb +5 -4
  65. data/app/views/active_admin/devise/registrations/new.html.erb +22 -0
  66. data/app/views/active_admin/devise/sessions/new.html.erb +9 -7
  67. data/app/views/active_admin/devise/shared/_links.erb +1 -1
  68. data/app/views/active_admin/devise/unlocks/new.html.erb +5 -4
  69. data/app/views/layouts/active_admin_logged_out.html.erb +3 -5
  70. data/config/locales/ar.yml +120 -0
  71. data/config/locales/bg.yml +26 -6
  72. data/config/locales/bs.yml +122 -0
  73. data/config/locales/ca.yml +10 -1
  74. data/config/locales/cs.yml +7 -2
  75. data/config/locales/da.yml +7 -3
  76. data/config/locales/de-CH.yml +14 -31
  77. data/config/locales/de.yml +33 -33
  78. data/config/locales/el.yml +28 -2
  79. data/config/locales/en-GB.yml +12 -4
  80. data/config/locales/en.yml +29 -3
  81. data/config/locales/{es_MX.yml → es-MX.yml} +9 -24
  82. data/config/locales/es.yml +32 -25
  83. data/config/locales/fa.yml +120 -0
  84. data/config/locales/fi.yml +113 -0
  85. data/config/locales/fr.yml +21 -11
  86. data/config/locales/he.yml +7 -3
  87. data/config/locales/hr.yml +42 -11
  88. data/config/locales/hu.yml +10 -3
  89. data/config/locales/it.yml +31 -3
  90. data/config/locales/ja.yml +8 -3
  91. data/config/locales/ko.yml +7 -1
  92. data/config/locales/lt.yml +42 -11
  93. data/config/locales/lv.yml +7 -3
  94. data/config/locales/{no-NB.yml → nb.yml} +46 -15
  95. data/config/locales/nl.yml +36 -5
  96. data/config/locales/pl.yml +13 -8
  97. data/config/locales/pt-BR.yml +37 -5
  98. data/config/locales/pt-PT.yml +8 -4
  99. data/config/locales/ro.yml +7 -3
  100. data/config/locales/ru.yml +26 -5
  101. data/config/locales/sv-SE.yml +9 -5
  102. data/config/locales/tr.yml +10 -3
  103. data/config/locales/uk.yml +36 -12
  104. data/config/locales/vi.yml +7 -3
  105. data/config/locales/zh-CN.yml +26 -10
  106. data/config/locales/zh-TW.yml +19 -13
  107. data/docs/0-installation.md +65 -29
  108. data/docs/1-general-configuration.md +92 -81
  109. data/docs/10-custom-pages.md +68 -68
  110. data/docs/11-decorators.md +48 -59
  111. data/docs/12-arbre-components.md +80 -74
  112. data/docs/13-authorization-adapter.md +128 -107
  113. data/docs/14-gotchas.md +92 -0
  114. data/docs/2-resource-customization.md +293 -178
  115. data/docs/3-index-pages.md +160 -86
  116. data/docs/3-index-pages/custom-index.md +31 -0
  117. data/docs/3-index-pages/index-as-block.md +14 -9
  118. data/docs/3-index-pages/index-as-blog.md +41 -31
  119. data/docs/3-index-pages/index-as-grid.md +16 -8
  120. data/docs/3-index-pages/index-as-table.md +129 -52
  121. data/docs/4-csv-format.md +31 -24
  122. data/docs/5-forms.md +133 -56
  123. data/docs/6-show-pages.md +89 -27
  124. data/docs/7-sidebars.md +48 -27
  125. data/docs/8-custom-actions.md +98 -77
  126. data/docs/9-batch-actions.md +210 -146
  127. data/docs/README.md +24 -0
  128. data/features/action_item.feature +3 -3
  129. data/features/authorization_pundit.feature +37 -0
  130. data/features/breadcrumb.feature +48 -0
  131. data/features/comments/commenting.feature +56 -13
  132. data/features/development_reloading.feature +17 -30
  133. data/features/edit_page.feature +12 -1
  134. data/features/favicon.feature +3 -3
  135. data/features/i18n.feature +5 -4
  136. data/features/index/batch_actions.feature +41 -0
  137. data/features/index/filters.feature +67 -0
  138. data/features/index/format_as_csv.feature +90 -4
  139. data/features/index/formats.feature +27 -0
  140. data/features/index/index_as_blog.feature +4 -4
  141. data/features/index/index_as_table.feature +102 -6
  142. data/features/index/index_blank_slate.feature +22 -0
  143. data/features/index/index_scope_to.feature +16 -16
  144. data/features/index/page_title.feature +11 -0
  145. data/features/index/pagination.feature +1 -1
  146. data/features/index/switch_index_view.feature +14 -14
  147. data/features/new_page.feature +13 -2
  148. data/features/registering_pages.feature +1 -1
  149. data/features/renamed_resource.feature +32 -0
  150. data/features/show/page_title.feature +11 -0
  151. data/features/show/tabs.feature +27 -0
  152. data/features/sidebar_sections.feature +12 -0
  153. data/features/site_title.feature +2 -2
  154. data/features/specifying_actions.feature +3 -3
  155. data/features/step_definitions/action_item_steps.rb +2 -2
  156. data/features/step_definitions/action_link_steps.rb +14 -1
  157. data/features/step_definitions/additional_web_steps.rb +19 -20
  158. data/features/step_definitions/asset_steps.rb +3 -3
  159. data/features/step_definitions/attribute_steps.rb +8 -3
  160. data/features/step_definitions/batch_action_steps.rb +26 -9
  161. data/features/step_definitions/blog_steps.rb +3 -0
  162. data/features/step_definitions/breadcrumb_steps.rb +1 -1
  163. data/features/step_definitions/comment_steps.rb +1 -1
  164. data/features/step_definitions/configuration_steps.rb +9 -2
  165. data/features/step_definitions/dashboard_steps.rb +2 -2
  166. data/features/step_definitions/factory_steps.rb +9 -8
  167. data/features/step_definitions/filter_steps.rb +25 -3
  168. data/features/step_definitions/flash_steps.rb +3 -3
  169. data/features/step_definitions/format_steps.rb +18 -18
  170. data/features/step_definitions/index_scope_steps.rb +5 -5
  171. data/features/step_definitions/layout_steps.rb +1 -1
  172. data/features/step_definitions/member_link_steps.rb +2 -2
  173. data/features/step_definitions/menu_steps.rb +3 -3
  174. data/features/step_definitions/pagination_steps.rb +2 -3
  175. data/features/step_definitions/sidebar_steps.rb +8 -3
  176. data/features/step_definitions/site_title_steps.rb +6 -4
  177. data/features/step_definitions/symbol_leak_steps.rb +3 -0
  178. data/features/step_definitions/tab_steps.rb +5 -0
  179. data/features/step_definitions/table_steps.rb +4 -4
  180. data/features/step_definitions/user_steps.rb +10 -7
  181. data/features/step_definitions/web_steps.rb +14 -11
  182. data/features/sti_resource.feature +6 -2
  183. data/features/strong_parameters.feature +73 -0
  184. data/features/support/env.rb +34 -9
  185. data/features/support/paths.rb +14 -6
  186. data/features/support/selectors.rb +1 -1
  187. data/features/symbol_leak.feature +35 -0
  188. data/features/users/resetting_password.feature +5 -6
  189. data/lib/active_admin.rb +26 -25
  190. data/lib/active_admin/abstract_view_factory.rb +7 -17
  191. data/lib/active_admin/application.rb +72 -59
  192. data/lib/active_admin/asset_registration.rb +2 -2
  193. data/lib/active_admin/authorization_adapter.rb +2 -2
  194. data/lib/active_admin/base_controller.rb +2 -3
  195. data/lib/active_admin/base_controller/authorization.rb +13 -31
  196. data/lib/active_admin/batch_actions.rb +1 -1
  197. data/lib/active_admin/batch_actions/controller.rb +24 -8
  198. data/lib/active_admin/batch_actions/resource_extension.rb +47 -18
  199. data/lib/active_admin/batch_actions/views/batch_action_form.rb +7 -4
  200. data/lib/active_admin/batch_actions/views/batch_action_popover.rb +3 -3
  201. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +8 -17
  202. data/lib/active_admin/batch_actions/views/selection_cells.rb +4 -4
  203. data/lib/active_admin/callbacks.rb +25 -24
  204. data/lib/active_admin/cancan_adapter.rb +7 -11
  205. data/lib/active_admin/csv_builder.rb +92 -15
  206. data/lib/active_admin/dependency.rb +93 -0
  207. data/lib/active_admin/deprecation.rb +6 -7
  208. data/lib/active_admin/devise.rb +28 -18
  209. data/lib/active_admin/dsl.rb +18 -11
  210. data/lib/active_admin/engine.rb +10 -8
  211. data/lib/active_admin/error.rb +62 -0
  212. data/lib/active_admin/filters/dsl.rb +2 -2
  213. data/lib/active_admin/filters/forms.rb +17 -27
  214. data/lib/active_admin/filters/formtastic_addons.rb +49 -15
  215. data/lib/active_admin/filters/resource_extension.rb +43 -34
  216. data/lib/active_admin/form_builder.rb +93 -154
  217. data/lib/active_admin/helpers/collection.rb +7 -13
  218. data/lib/active_admin/helpers/i18n.rb +7 -0
  219. data/lib/active_admin/helpers/optional_display.rb +5 -5
  220. data/lib/active_admin/helpers/routes/url_helpers.rb +15 -0
  221. data/lib/active_admin/helpers/scope_chain.rb +1 -1
  222. data/lib/active_admin/helpers/settings.rb +16 -9
  223. data/lib/active_admin/iconic.rb +17 -15
  224. data/lib/active_admin/iconic/icons.rb +136 -136
  225. data/lib/active_admin/inputs.rb +11 -7
  226. data/lib/active_admin/inputs/datepicker_input.rb +12 -3
  227. data/lib/active_admin/inputs/filters/base.rb +42 -0
  228. data/lib/active_admin/inputs/filters/base/search_method_select.rb +75 -0
  229. data/lib/active_admin/inputs/filters/boolean_input.rb +24 -0
  230. data/lib/active_admin/inputs/filters/check_boxes_input.rb +50 -0
  231. data/lib/active_admin/inputs/filters/date_range_input.rb +36 -0
  232. data/lib/active_admin/inputs/filters/numeric_input.rb +12 -0
  233. data/lib/active_admin/inputs/filters/select_input.rb +54 -0
  234. data/lib/active_admin/inputs/filters/string_input.rb +26 -0
  235. data/lib/active_admin/menu.rb +6 -4
  236. data/lib/active_admin/menu_collection.rb +1 -4
  237. data/lib/active_admin/namespace.rb +55 -29
  238. data/lib/active_admin/order_clause.rb +26 -0
  239. data/lib/active_admin/orm/active_record.rb +5 -0
  240. data/lib/active_admin/orm/active_record/comments.rb +81 -0
  241. data/lib/active_admin/orm/active_record/comments/comment.rb +45 -0
  242. data/lib/active_admin/{comments → orm/active_record/comments}/namespace_helper.rb +2 -2
  243. data/lib/active_admin/{comments → orm/active_record/comments}/resource_helper.rb +1 -1
  244. data/lib/active_admin/{comments → orm/active_record/comments}/show_page_helper.rb +0 -0
  245. data/lib/active_admin/orm/active_record/comments/views.rb +2 -0
  246. data/lib/active_admin/{comments → orm/active_record/comments}/views/active_admin_comments.rb +16 -14
  247. data/lib/active_admin/orm/mongoid.rb +1 -0
  248. data/lib/active_admin/orm/mongoid/.gitkeep +0 -0
  249. data/lib/active_admin/page.rb +7 -3
  250. data/lib/active_admin/page_dsl.rb +1 -1
  251. data/lib/active_admin/page_presenter.rb +2 -2
  252. data/lib/active_admin/pundit_adapter.rb +68 -0
  253. data/lib/active_admin/resource.rb +16 -17
  254. data/lib/active_admin/resource/action_items.rb +23 -18
  255. data/lib/active_admin/resource/belongs_to.rb +7 -3
  256. data/lib/active_admin/resource/controllers.rb +1 -0
  257. data/lib/active_admin/resource/includes.rb +12 -0
  258. data/lib/active_admin/resource/menu.rb +5 -5
  259. data/lib/active_admin/resource/naming.rb +27 -43
  260. data/lib/active_admin/resource/page_presenters.rb +1 -1
  261. data/lib/active_admin/resource/routes.rb +27 -11
  262. data/lib/active_admin/resource/scope_to.rb +7 -7
  263. data/lib/active_admin/resource/sidebars.rb +1 -0
  264. data/lib/active_admin/resource_controller.rb +6 -7
  265. data/lib/active_admin/resource_controller/data_access.rb +101 -93
  266. data/lib/active_admin/resource_controller/decorators.rb +91 -9
  267. data/lib/active_admin/resource_controller/streaming.rb +37 -0
  268. data/lib/active_admin/resource_dsl.rb +53 -10
  269. data/lib/active_admin/router.rb +7 -7
  270. data/lib/active_admin/scope.rb +6 -6
  271. data/lib/active_admin/sidebar_section.rb +10 -2
  272. data/lib/active_admin/version.rb +1 -1
  273. data/lib/active_admin/view_factory.rb +17 -17
  274. data/lib/active_admin/view_helpers.rb +0 -1
  275. data/lib/active_admin/view_helpers/auto_link_helper.rb +23 -12
  276. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +4 -3
  277. data/lib/active_admin/view_helpers/display_helper.rb +30 -15
  278. data/lib/active_admin/view_helpers/download_format_links_helper.rb +21 -25
  279. data/lib/active_admin/view_helpers/fields_for.rb +4 -4
  280. data/lib/active_admin/view_helpers/flash_helper.rb +4 -3
  281. data/lib/active_admin/view_helpers/form_helper.rb +5 -9
  282. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +6 -6
  283. data/lib/active_admin/views/action_items.rb +2 -2
  284. data/lib/active_admin/views/components/action_list_popover.rb +1 -1
  285. data/lib/active_admin/views/components/active_admin_form.rb +123 -0
  286. data/lib/active_admin/views/components/attributes_table.rb +63 -21
  287. data/lib/active_admin/views/components/blank_slate.rb +1 -1
  288. data/lib/active_admin/views/components/columns.rb +13 -7
  289. data/lib/active_admin/views/components/dropdown_menu.rb +6 -6
  290. data/lib/active_admin/views/components/index_list.rb +7 -7
  291. data/lib/active_admin/views/components/paginated_collection.rb +38 -20
  292. data/lib/active_admin/views/components/panel.rb +8 -2
  293. data/lib/active_admin/views/components/popover.rb +1 -1
  294. data/lib/active_admin/views/components/scopes.rb +5 -4
  295. data/lib/active_admin/views/components/sidebar_section.rb +3 -2
  296. data/lib/active_admin/views/components/site_title.rb +2 -2
  297. data/lib/active_admin/views/components/status_tag.rb +34 -11
  298. data/lib/active_admin/views/components/table_for.rb +90 -45
  299. data/lib/active_admin/views/components/tabs.rb +28 -0
  300. data/lib/active_admin/views/components/unsupported_browser.rb +11 -0
  301. data/lib/active_admin/views/footer.rb +3 -3
  302. data/lib/active_admin/views/header.rb +3 -3
  303. data/lib/active_admin/views/index_as_block.rb +10 -10
  304. data/lib/active_admin/views/index_as_blog.rb +45 -39
  305. data/lib/active_admin/views/index_as_grid.rb +14 -10
  306. data/lib/active_admin/views/index_as_table.rb +242 -129
  307. data/lib/active_admin/views/pages/base.rb +22 -18
  308. data/lib/active_admin/views/pages/form.rb +21 -11
  309. data/lib/active_admin/views/pages/index.rb +40 -35
  310. data/lib/active_admin/views/pages/layout.rb +1 -1
  311. data/lib/active_admin/views/pages/show.rb +4 -4
  312. data/lib/active_admin/views/tabbed_navigation.rb +7 -3
  313. data/lib/active_admin/views/title_bar.rb +10 -8
  314. data/lib/generators/active_admin/assets/assets_generator.rb +3 -28
  315. data/lib/generators/active_admin/assets/templates/{3.1/active_admin.css.scss → active_admin.css.scss} +0 -0
  316. data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +1 -0
  317. data/lib/generators/active_admin/devise/devise_generator.rb +24 -26
  318. data/lib/generators/active_admin/install/install_generator.rb +8 -9
  319. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +28 -26
  320. data/lib/generators/active_admin/install/templates/admin_user.rb.erb +12 -2
  321. data/lib/generators/active_admin/install/templates/dashboard.rb +4 -4
  322. data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb +3 -3
  323. data/lib/generators/active_admin/page/USAGE +8 -0
  324. data/lib/generators/active_admin/page/page_generator.rb +12 -0
  325. data/lib/generators/active_admin/page/templates/page.rb +5 -0
  326. data/lib/generators/active_admin/resource/resource_generator.rb +3 -5
  327. data/lib/generators/active_admin/resource/templates/admin.rb +15 -0
  328. data/lib/ransack_ext.rb +12 -0
  329. data/script/local +2 -2
  330. data/script/travis_cache +107 -0
  331. data/spec/javascripts/coffeescripts/jquery.aa.flash.js.coffee +25 -0
  332. data/spec/javascripts/fixtures/flashes.html +2 -0
  333. data/spec/rails_helper.rb +154 -0
  334. data/spec/{integration → requests}/default_namespace_spec.rb +6 -6
  335. data/spec/{integration → requests}/javascript_spec.rb +5 -5
  336. data/spec/requests/memory_spec.rb +23 -0
  337. data/spec/requests/stylesheets_spec.rb +18 -0
  338. data/spec/spec_helper.rb +12 -173
  339. data/spec/support/detect_rails_version.rb +9 -17
  340. data/spec/support/rails_template.rb +64 -35
  341. data/spec/support/rails_template_with_data.rb +14 -14
  342. data/spec/support/templates/admin/stores.rb +5 -1
  343. data/spec/support/templates/policies/active_admin/comment_policy.rb +9 -0
  344. data/spec/support/templates/policies/active_admin/page_policy.rb +18 -0
  345. data/spec/support/templates/policies/admin_user_policy.rb +11 -0
  346. data/spec/support/templates/policies/application_policy.rb +45 -0
  347. data/spec/support/templates/policies/category_policy.rb +7 -0
  348. data/spec/support/templates/policies/post_policy.rb +15 -0
  349. data/spec/support/templates/policies/store_policy.rb +11 -0
  350. data/spec/support/templates/policies/user_policy.rb +11 -0
  351. data/spec/support/templates/post_decorator.rb +4 -46
  352. data/spec/unit/abstract_view_factory_spec.rb +16 -16
  353. data/spec/unit/action_builder_spec.rb +24 -18
  354. data/spec/unit/active_admin_spec.rb +2 -2
  355. data/spec/unit/application_spec.rb +33 -34
  356. data/spec/unit/asset_registration_spec.rb +25 -29
  357. data/spec/unit/authorization/authorization_adapter_spec.rb +10 -10
  358. data/spec/unit/authorization/controller_authorization_spec.rb +11 -11
  359. data/spec/unit/authorization/index_overriding_spec.rb +22 -0
  360. data/spec/unit/auto_link_spec.rb +43 -13
  361. data/spec/unit/batch_actions/resource_spec.rb +15 -14
  362. data/spec/unit/batch_actions/settings_spec.rb +18 -18
  363. data/spec/unit/belongs_to_spec.rb +28 -19
  364. data/spec/unit/cancan_adapter_spec.rb +8 -8
  365. data/spec/unit/comments_spec.rb +99 -39
  366. data/spec/unit/component_spec.rb +3 -3
  367. data/spec/unit/config_shared_examples.rb +10 -10
  368. data/spec/unit/controller_filters_spec.rb +23 -16
  369. data/spec/unit/csv_builder_spec.rb +165 -24
  370. data/spec/unit/dependency_spec.rb +135 -0
  371. data/spec/unit/devise_spec.rb +17 -37
  372. data/spec/unit/dsl_spec.rb +70 -9
  373. data/spec/unit/event_spec.rb +11 -11
  374. data/spec/unit/filters/filter_form_builder_spec.rb +207 -148
  375. data/spec/unit/filters/resource_spec.rb +60 -26
  376. data/spec/unit/form_builder_spec.rb +419 -145
  377. data/spec/unit/generators/install_spec.rb +23 -0
  378. data/spec/unit/helpers/collection_spec.rb +18 -18
  379. data/spec/unit/helpers/scope_chain_spec.rb +6 -6
  380. data/spec/unit/helpers/settings_spec.rb +4 -4
  381. data/spec/unit/i18n_spec.rb +12 -0
  382. data/spec/unit/menu_collection_spec.rb +14 -14
  383. data/spec/unit/menu_item_spec.rb +42 -42
  384. data/spec/unit/menu_spec.rb +20 -20
  385. data/spec/unit/namespace/authorization_spec.rb +8 -8
  386. data/spec/unit/namespace/register_page_spec.rb +11 -11
  387. data/spec/unit/namespace/register_resource_spec.rb +28 -30
  388. data/spec/unit/namespace_spec.rb +20 -20
  389. data/spec/unit/order_clause_spec.rb +81 -0
  390. data/spec/unit/page_controller_spec.rb +1 -1
  391. data/spec/unit/page_spec.rb +18 -12
  392. data/spec/unit/pretty_format_spec.rb +42 -14
  393. data/spec/unit/pundit_adapter_spec.rb +98 -0
  394. data/spec/unit/resource/action_items_spec.rb +15 -12
  395. data/spec/unit/resource/includes_spec.rb +21 -0
  396. data/spec/unit/resource/menu_spec.rb +1 -1
  397. data/spec/unit/resource/naming_spec.rb +35 -21
  398. data/spec/unit/resource/page_presenters_spec.rb +8 -8
  399. data/spec/unit/resource/pagination_spec.rb +6 -6
  400. data/spec/unit/resource/routes_spec.rb +10 -10
  401. data/spec/unit/resource/scopes_spec.rb +14 -7
  402. data/spec/unit/resource/sidebars_spec.rb +6 -6
  403. data/spec/unit/resource_collection_spec.rb +31 -38
  404. data/spec/unit/resource_controller/data_access_spec.rb +96 -30
  405. data/spec/unit/resource_controller/decorators_spec.rb +83 -0
  406. data/spec/unit/resource_controller/sidebars_spec.rb +7 -8
  407. data/spec/unit/resource_controller_spec.rb +73 -70
  408. data/spec/unit/resource_registration_spec.rb +12 -12
  409. data/spec/unit/resource_spec.rb +77 -42
  410. data/spec/unit/routing_spec.rb +39 -31
  411. data/spec/unit/scope_spec.rb +112 -30
  412. data/spec/unit/settings_spec.rb +51 -21
  413. data/spec/unit/view_factory_spec.rb +2 -3
  414. data/spec/unit/view_helpers/breadcrumbs_spec.rb +71 -60
  415. data/spec/unit/view_helpers/display_name_spec.rb +49 -21
  416. data/spec/unit/view_helpers/download_format_links_helper_spec.rb +5 -5
  417. data/spec/unit/view_helpers/fields_for_spec.rb +18 -18
  418. data/spec/unit/view_helpers/flash_helper_spec.rb +25 -0
  419. data/spec/unit/view_helpers/form_helper_spec.rb +10 -23
  420. data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +64 -22
  421. data/spec/unit/views/components/action_list_popover_spec.rb +16 -6
  422. data/spec/unit/views/components/attributes_table_spec.rb +171 -30
  423. data/spec/unit/views/components/batch_action_popover_spec.rb +20 -6
  424. data/spec/unit/views/components/blank_slate_spec.rb +14 -4
  425. data/spec/unit/views/components/columns_spec.rb +52 -22
  426. data/spec/unit/views/components/index_list_spec.rb +11 -8
  427. data/spec/unit/views/components/index_table_for_spec.rb +46 -0
  428. data/spec/unit/views/components/paginated_collection_spec.rb +79 -90
  429. data/spec/unit/views/components/panel_spec.rb +32 -21
  430. data/spec/unit/views/components/popover_spec.rb +7 -7
  431. data/spec/unit/views/components/sidebar_section_spec.rb +18 -8
  432. data/spec/unit/views/components/site_title_spec.rb +26 -26
  433. data/spec/unit/views/components/status_tag_spec.rb +178 -38
  434. data/spec/unit/views/components/table_for_spec.rb +237 -35
  435. data/spec/unit/views/components/tabs_spec.rb +39 -0
  436. data/spec/unit/views/components/unsupported_browser_spec.rb +47 -0
  437. data/spec/unit/views/pages/form_spec.rb +17 -10
  438. data/spec/unit/views/pages/index_spec.rb +60 -0
  439. data/spec/unit/views/pages/layout_spec.rb +17 -21
  440. data/spec/unit/views/pages/show_spec.rb +18 -6
  441. data/spec/unit/views/tabbed_navigation_spec.rb +61 -52
  442. data/tasks/docs.rake +9 -11
  443. data/tasks/parallel_tests.rake +8 -2
  444. data/tasks/test.rake +13 -9
  445. data/tasks/yard.rake +7 -4
  446. metadata +219 -163
  447. data/.document +0 -5
  448. data/README.rdoc +0 -88
  449. data/app/assets/images/active_admin/admin_notes_icon.png +0 -0
  450. data/app/assets/images/active_admin/datepicker/datepicker-header-bg.png +0 -0
  451. data/app/assets/images/active_admin/datepicker/datepicker-next-link-icon.png +0 -0
  452. data/app/assets/images/active_admin/datepicker/datepicker-nipple.png +0 -0
  453. data/app/assets/images/active_admin/datepicker/datepicker-prev-link-icon.png +0 -0
  454. data/app/assets/images/active_admin/index_list_icons/block_icon.svg +0 -10
  455. data/app/assets/images/active_admin/index_list_icons/blog_icon.svg +0 -4
  456. data/app/assets/images/active_admin/index_list_icons/grid_icon.svg +0 -13
  457. data/app/assets/images/active_admin/index_list_icons/table_icon.svg +0 -3
  458. data/app/assets/images/active_admin/loading.gif +0 -0
  459. data/app/assets/javascripts/active_admin/application.js +0 -3
  460. data/app/assets/javascripts/active_admin/base.js +0 -5
  461. data/app/assets/javascripts/active_admin/components/jquery.aa.dropdown-menu.js.coffee +0 -105
  462. data/app/assets/javascripts/active_admin/components/jquery.aa.popover.js.coffee +0 -97
  463. data/app/assets/javascripts/active_admin/lib/namespace.js.coffee +0 -4
  464. data/app/assets/javascripts/active_admin/pages/application.js.coffee +0 -21
  465. data/app/assets/javascripts/active_admin/pages/batch_actions.js.coffee +0 -26
  466. data/app/assets/stylesheets/active_admin/components/_batch_actions.css.scss +0 -11
  467. data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +0 -41
  468. data/app/assets/stylesheets/active_admin/components/_table_tools.css.scss +0 -95
  469. data/app/assets/stylesheets/active_admin/mixins/_gradients.css.scss +0 -38
  470. data/app/assets/stylesheets/active_admin/mixins/_rounded.css.scss +0 -43
  471. data/app/views/active_admin/dashboard/index.html.arb +0 -1
  472. data/app/views/active_admin/resource/index.csv.erb +0 -23
  473. data/docs/3-index-pages/create-an-index.md +0 -29
  474. data/lib/active_admin/comments.rb +0 -83
  475. data/lib/active_admin/comments/comment.rb +0 -42
  476. data/lib/active_admin/comments/views.rb +0 -2
  477. data/lib/active_admin/dependency_checker.rb +0 -46
  478. data/lib/active_admin/inputs/filter_base.rb +0 -33
  479. data/lib/active_admin/inputs/filter_base/search_method_select.rb +0 -73
  480. data/lib/active_admin/inputs/filter_boolean_input.rb +0 -36
  481. data/lib/active_admin/inputs/filter_check_boxes_input.rb +0 -40
  482. data/lib/active_admin/inputs/filter_date_range_input.rb +0 -34
  483. data/lib/active_admin/inputs/filter_numeric_input.rb +0 -10
  484. data/lib/active_admin/inputs/filter_select_input.rb +0 -49
  485. data/lib/active_admin/inputs/filter_string_input.rb +0 -24
  486. data/lib/active_admin/reloader.rb +0 -130
  487. data/lib/active_admin/resource_controller/actions.rb +0 -81
  488. data/lib/active_admin/sass/active_admin.scss +0 -3
  489. data/lib/active_admin/sass/css_loader.rb +0 -16
  490. data/lib/active_admin/sass/helpers.rb +0 -45
  491. data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +0 -7
  492. data/lib/active_admin/views/dashboard_section_renderer.rb +0 -19
  493. data/lib/active_admin/views/pages/dashboard.rb +0 -62
  494. data/lib/generators/active_admin/assets/templates/3.0/active_admin.js +0 -1
  495. data/lib/generators/active_admin/assets/templates/3.1/active_admin.js +0 -1
  496. data/lib/meta_search_ext.rb +0 -10
  497. data/spec/integration/memory_spec.rb +0 -29
  498. data/spec/integration/stylesheets_spec.rb +0 -41
  499. data/spec/javascripts/compiled/jquery.aa.checkbox-toggler-spec.js +0 -60
  500. data/spec/javascripts/compiled/jquery.aa.popover-spec.js +0 -106
  501. data/spec/javascripts/compiled/jquery.aa.table-checkbox-toggler-spec.js +0 -37
  502. data/spec/javascripts/helpers/vendor/jasmine-fixture-0.0.5.js +0 -108
  503. data/spec/javascripts/helpers/vendor/jasmine-jquery.js +0 -288
  504. data/spec/javascripts/helpers/vendor/sinon-1.2.0.js +0 -2915
  505. data/spec/javascripts/support/jquery-ui-1.8.16.custom.min.js +0 -34
  506. data/spec/javascripts/support/jquery.min.js +0 -4
  507. data/spec/spec_helper_without_rails.rb +0 -11
  508. data/spec/unit/generators/install_rails_3_1_spec.rb +0 -16
  509. data/spec/unit/rails_spec.rb +0 -43
  510. data/spec/unit/reloader_spec.rb +0 -124
  511. data/spec/unit/sass/helpers_spec.rb +0 -47
  512. data/tasks/js.rake +0 -32
@@ -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
 
@@ -38,10 +36,8 @@ module ActiveAdmin
38
36
  namespace = ActiveAdmin.application.default_namespace.presence
39
37
  root_path_method = [namespace, :root_path].compact.join('_')
40
38
 
41
- url_helpers = Rails.application.routes.url_helpers
42
-
43
- path = if url_helpers.respond_to? root_path_method
44
- url_helpers.send root_path_method
39
+ path = if Helpers::Routes.respond_to? root_path_method
40
+ Helpers::Routes.send root_path_method
45
41
  else
46
42
  # Guess a root_path when url_helpers not helpful
47
43
  "/#{namespace}"
@@ -66,5 +62,19 @@ module ActiveAdmin
66
62
  include ::ActiveAdmin::Devise::Controller
67
63
  end
68
64
 
65
+ class RegistrationsController < ::Devise::RegistrationsController
66
+ include ::ActiveAdmin::Devise::Controller
67
+ end
68
+
69
+ class ConfirmationsController < ::Devise::ConfirmationsController
70
+ include ::ActiveAdmin::Devise::Controller
71
+ end
72
+
73
+ def self.controllers_for_filters
74
+ [SessionsController, PasswordsController, UnlocksController,
75
+ RegistrationsController, ConfirmationsController
76
+ ]
77
+ end
78
+
69
79
  end
70
80
  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,14 +1,16 @@
1
1
  module ActiveAdmin
2
2
  class Engine < ::Rails::Engine
3
- if Rails.version > "3.1"
4
- initializer "ActiveAdmin precompile hook", :group => :all do |app|
5
- ActiveAdmin.application.stylesheets.each do |path, _|
6
- app.config.assets.precompile << path
7
- end
8
- ActiveAdmin.application.javascripts.each do |path|
9
- app.config.assets.precompile << path
10
- end
3
+ initializer "active_admin.precompile", group: :all do |app|
4
+ ActiveAdmin.application.stylesheets.each do |path, _|
5
+ app.config.assets.precompile << path
11
6
  end
7
+ ActiveAdmin.application.javascripts.each do |path|
8
+ app.config.assets.precompile << path
9
+ end
10
+ end
11
+
12
+ initializer 'active_admin.routes' do
13
+ require 'active_admin/helpers/routes/url_helpers'
12
14
  end
13
15
  end
14
16
  end
@@ -0,0 +1,62 @@
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
+ class GeneratorError < Error
60
+ end
61
+
62
+ 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,29 +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
- filters.group_by{ |o| o[:attribute] }.each do |attribute, array|
68
- opts = array.last # grab last-defined `filter` call from DSL
58
+ filters.each do |attribute, opts|
69
59
  next if opts.key?(:if) && !call_method_or_proc_on(self, opts[:if])
70
60
  next if opts.key?(:unless) && call_method_or_proc_on(self, opts[:unless])
71
61
 
72
62
  f.filter attribute, opts.except(:if, :unless)
73
63
  end
74
64
 
75
- buttons = content_tag :div, :class => "buttons" do
65
+ buttons = content_tag :div, class: "buttons" do
76
66
  f.submit(I18n.t('active_admin.filters.buttons.filter')) +
77
- link_to(I18n.t('active_admin.filters.buttons.clear'), '#', :class => 'clear_filters_btn') +
78
- 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])
79
69
  end
80
70
 
81
- f.form_buffers.last + buttons
71
+ f.template.concat buttons
82
72
  end
83
73
  end
84
74
 
@@ -3,41 +3,75 @@ module ActiveAdmin
3
3
  module FormtasticAddons
4
4
 
5
5
  #
6
- # The below are Formtastic overrides to use `base` instead of `class` for MetaSearch.
6
+ # The below are Formtastic method overrides that jump inside of the Ransack
7
+ # search object to get at the object being searched upon.
7
8
  #
8
9
 
9
- # Returns the default label for a given attribute. Uses ActiveModel I18n if available.
10
10
  def humanized_method_name
11
- if object.base.respond_to?(:human_attribute_name)
12
- object.base.human_attribute_name(method)
11
+ if klass.respond_to?(:human_attribute_name)
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
 
18
- # Returns the association reflection for the method if it exists
19
18
  def reflection_for(method)
20
- @object.base.reflect_on_association(method) if @object.base.respond_to?(:reflect_on_association)
19
+ klass.reflect_on_association(method) if klass.respond_to? :reflect_on_association
21
20
  end
22
21
 
23
- # Returns the column for an attribute on the object being searched if it exists.
24
22
  def column_for(method)
25
- @object.base.columns_hash[method.to_s] if @object.base.respond_to?(:columns_hash)
23
+ klass.columns_hash[method.to_s] if klass.respond_to? :columns_hash
24
+ end
25
+
26
+ def column
27
+ column_for method
26
28
  end
27
29
 
28
30
  #
29
31
  # The below are custom methods that Formtastic does not provide.
30
32
  #
31
33
 
32
- def foreign_key?(method)
33
- @object.base.reflections.select{ |_,r| r.macro == :belongs_to }.values
34
- .map(&:foreign_key).include? method.to_s
34
+ # The resource class, unwrapped from Ransack
35
+ def klass
36
+ @object.object.klass
35
37
  end
36
38
 
37
39
  def polymorphic_foreign_type?(method)
38
- type = Rails::VERSION::MAJOR == 3 && Rails::VERSION::MINOR == 0 ? proc{ |r| r.options[:foreign_type] } : :foreign_type
39
- @object.base.reflections.values.select{ |r| r.macro == :belongs_to && r.options[:polymorphic] }
40
- .map(&type).include? method.to_s
40
+ klass.reflect_on_all_associations.select{ |r| r.macro == :belongs_to && r.options[:polymorphic] }
41
+ .map(&:foreign_type).include? method.to_s
42
+ end
43
+
44
+ #
45
+ # These help figure out whether the given method or association will be recognized by Ransack.
46
+ #
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
+
56
+ def seems_searchable?
57
+ has_predicate? || ransacker? || scope?
58
+ end
59
+
60
+ # If the given method has a predicate (like _eq or _lteq), it's pretty
61
+ # likely we're dealing with a valid search method.
62
+ def has_predicate?
63
+ !!Ransack::Predicate.detect_from_string(method.to_s)
64
+ end
65
+
66
+ # Ransack lets you define custom search methods, called ransackers.
67
+ def ransacker?
68
+ klass._ransackers.key? method.to_s
69
+ end
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)
41
75
  end
42
76
 
43
77
  end