activeadmin 1.1.0 → 2.4.0

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

Potentially problematic release.


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

Files changed (465) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +469 -100
  3. data/CODE_OF_CONDUCT.md +64 -12
  4. data/CONTRIBUTING.md +89 -47
  5. data/README.md +73 -19
  6. data/app/assets/javascripts/active_admin/base.es6 +23 -0
  7. data/app/assets/javascripts/active_admin/ext/jquery-ui.es6 +7 -0
  8. data/app/assets/javascripts/active_admin/ext/jquery.es6 +9 -0
  9. data/app/assets/javascripts/active_admin/initializers/datepicker.es6 +16 -0
  10. data/app/assets/javascripts/active_admin/initializers/filters.es6 +45 -0
  11. data/app/assets/javascripts/active_admin/initializers/tabs.es6 +6 -0
  12. data/app/assets/javascripts/active_admin/lib/active_admin.es6 +41 -0
  13. data/app/assets/javascripts/active_admin/lib/batch_actions.es6 +59 -0
  14. data/app/assets/javascripts/active_admin/lib/checkbox-toggler.es6 +49 -0
  15. data/app/assets/javascripts/active_admin/lib/dropdown-menu.es6 +123 -0
  16. data/app/assets/javascripts/active_admin/lib/has_many.es6 +95 -0
  17. data/app/assets/javascripts/active_admin/lib/modal_dialog.es6 +61 -0
  18. data/app/assets/javascripts/active_admin/lib/per_page.es6 +47 -0
  19. data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.es6 +36 -0
  20. data/app/assets/stylesheets/active_admin/_forms.scss +3 -15
  21. data/app/assets/stylesheets/active_admin/components/_scopes.scss +3 -0
  22. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +0 -5
  23. data/app/assets/stylesheets/active_admin/components/_tabs.scss +1 -1
  24. data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +1 -1
  25. data/app/views/active_admin/devise/confirmations/new.html.erb +2 -2
  26. data/app/views/active_admin/devise/passwords/edit.html.erb +2 -2
  27. data/app/views/active_admin/devise/passwords/new.html.erb +2 -2
  28. data/app/views/active_admin/devise/registrations/new.html.erb +2 -3
  29. data/app/views/active_admin/devise/sessions/new.html.erb +1 -1
  30. data/app/views/active_admin/devise/shared/_error_messages.html.erb +15 -0
  31. data/app/views/active_admin/devise/unlocks/new.html.erb +2 -2
  32. data/app/views/kaminari/active_admin_countless/_first_page.html.erb +11 -0
  33. data/app/views/kaminari/active_admin_countless/_gap.html.erb +8 -0
  34. data/app/views/kaminari/active_admin_countless/_next_page.html.erb +11 -0
  35. data/app/views/kaminari/active_admin_countless/_page.html.erb +12 -0
  36. data/app/views/kaminari/active_admin_countless/_paginator.html.erb +24 -0
  37. data/app/views/kaminari/active_admin_countless/_prev_page.html.erb +11 -0
  38. data/app/views/layouts/active_admin_logged_out.html.erb +2 -2
  39. data/config/locales/ar.yml +3 -2
  40. data/config/locales/bg.yml +1 -1
  41. data/config/locales/bs.yml +1 -0
  42. data/config/locales/ca.yml +1 -1
  43. data/config/locales/cs.yml +1 -0
  44. data/config/locales/da.yml +1 -0
  45. data/config/locales/de-CH.yml +1 -0
  46. data/config/locales/de.yml +29 -0
  47. data/config/locales/el.yml +1 -0
  48. data/config/locales/en-CA.yml +1 -0
  49. data/config/locales/en-GB.yml +1 -0
  50. data/config/locales/en.yml +21 -1
  51. data/config/locales/eo.yml +145 -0
  52. data/config/locales/es-MX.yml +1 -0
  53. data/config/locales/es.yml +21 -1
  54. data/config/locales/fa.yml +1 -0
  55. data/config/locales/fi.yml +2 -1
  56. data/config/locales/fr.yml +2 -1
  57. data/config/locales/he.yml +1 -1
  58. data/config/locales/hr.yml +1 -0
  59. data/config/locales/hu.yml +5 -0
  60. data/config/locales/id.yml +1 -0
  61. data/config/locales/it.yml +13 -3
  62. data/config/locales/ja.yml +6 -0
  63. data/config/locales/ko.yml +1 -0
  64. data/config/locales/lt.yml +3 -2
  65. data/config/locales/lv.yml +1 -0
  66. data/config/locales/mk.yml +134 -0
  67. data/config/locales/nb.yml +16 -5
  68. data/config/locales/nl.yml +12 -0
  69. data/config/locales/pl.yml +72 -3
  70. data/config/locales/pt-BR.yml +9 -0
  71. data/config/locales/pt-PT.yml +1 -0
  72. data/config/locales/ro.yml +1 -0
  73. data/config/locales/ru.yml +3 -0
  74. data/config/locales/sk.yml +60 -0
  75. data/config/locales/sv-SE.yml +3 -0
  76. data/config/locales/tr.yml +10 -0
  77. data/config/locales/uk.yml +3 -0
  78. data/config/locales/vi.yml +48 -6
  79. data/config/locales/zh-CN.yml +34 -5
  80. data/config/locales/zh-TW.yml +1 -0
  81. data/docs/.gitignore +1 -0
  82. data/docs/0-installation.md +2 -2
  83. data/docs/1-general-configuration.md +16 -1
  84. data/docs/10-custom-pages.md +14 -0
  85. data/docs/12-arbre-components.md +41 -1
  86. data/docs/13-authorization-adapter.md +41 -22
  87. data/docs/2-resource-customization.md +10 -5
  88. data/docs/3-index-pages/custom-index.md +1 -1
  89. data/docs/3-index-pages/index-as-blog.md +1 -1
  90. data/docs/3-index-pages/index-as-table.md +12 -5
  91. data/docs/3-index-pages.md +17 -0
  92. data/docs/5-forms.md +16 -2
  93. data/docs/8-custom-actions.md +11 -0
  94. data/docs/CNAME +1 -1
  95. data/docs/Gemfile +2 -1
  96. data/docs/Gemfile.lock +248 -0
  97. data/docs/_config.yml +3 -1
  98. data/docs/_includes/toc.html +1 -1
  99. data/docs/_includes/top-menu.html +9 -1
  100. data/docs/documentation.md +1 -1
  101. data/docs/images/tidelift.svg +14 -0
  102. data/docs/index.html +109 -8
  103. data/docs/stylesheets/main.css +55 -2
  104. data/lib/active_admin/abstract_view_factory.rb +13 -51
  105. data/lib/active_admin/application.rb +52 -159
  106. data/lib/active_admin/application_settings.rb +42 -0
  107. data/lib/active_admin/asset_registration.rb +0 -8
  108. data/lib/active_admin/base_controller/authorization.rb +4 -6
  109. data/lib/active_admin/base_controller.rb +6 -6
  110. data/lib/active_admin/batch_actions/controller.rb +2 -2
  111. data/lib/active_admin/batch_actions/resource_extension.rb +9 -5
  112. data/lib/active_admin/callbacks.rb +1 -1
  113. data/lib/active_admin/controller_action.rb +2 -1
  114. data/lib/active_admin/csv_builder.rb +10 -7
  115. data/lib/active_admin/dependency.rb +3 -67
  116. data/lib/active_admin/deprecation.rb +0 -25
  117. data/lib/active_admin/dsl.rb +1 -8
  118. data/lib/active_admin/dynamic_setting.rb +38 -0
  119. data/lib/active_admin/dynamic_settings_node.rb +28 -0
  120. data/lib/active_admin/engine.rb +5 -0
  121. data/lib/active_admin/error.rb +4 -2
  122. data/lib/active_admin/filters/active_filter.rb +49 -12
  123. data/lib/active_admin/filters/active_sidebar.rb +6 -2
  124. data/lib/active_admin/filters/forms.rb +7 -4
  125. data/lib/active_admin/filters/formtastic_addons.rb +1 -1
  126. data/lib/active_admin/filters/resource_extension.rb +28 -4
  127. data/lib/active_admin/form_builder.rb +98 -63
  128. data/lib/active_admin/generators/boilerplate.rb +12 -4
  129. data/lib/active_admin/helpers/scope_chain.rb +1 -0
  130. data/lib/active_admin/inputs/datepicker_input.rb +8 -1
  131. data/lib/active_admin/inputs/filters/base/search_method_select.rb +2 -2
  132. data/lib/active_admin/inputs/filters/select_input.rb +5 -1
  133. data/lib/active_admin/menu.rb +2 -8
  134. data/lib/active_admin/menu_item.rb +4 -32
  135. data/lib/active_admin/namespace.rb +20 -8
  136. data/lib/active_admin/namespace_settings.rb +123 -0
  137. data/lib/active_admin/order_clause.rb +2 -2
  138. data/lib/active_admin/orm/active_record/comments/comment.rb +2 -2
  139. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +17 -7
  140. data/lib/active_admin/orm/active_record/comments.rb +15 -4
  141. data/lib/active_admin/page_dsl.rb +1 -1
  142. data/lib/active_admin/page_presenter.rb +2 -1
  143. data/lib/active_admin/pundit_adapter.rb +18 -5
  144. data/lib/active_admin/resource/action_items.rb +7 -2
  145. data/lib/active_admin/resource/attributes.rb +7 -4
  146. data/lib/active_admin/resource/belongs_to.rb +6 -1
  147. data/lib/active_admin/resource/menu.rb +3 -3
  148. data/lib/active_admin/resource/model.rb +15 -0
  149. data/lib/active_admin/resource/naming.rb +3 -3
  150. data/lib/active_admin/resource/routes.rb +20 -7
  151. data/lib/active_admin/resource/scopes.rb +3 -3
  152. data/lib/active_admin/resource/sidebars.rb +1 -1
  153. data/lib/active_admin/resource.rb +17 -3
  154. data/lib/active_admin/resource_collection.rb +2 -2
  155. data/lib/active_admin/resource_controller/action_builder.rb +10 -0
  156. data/lib/active_admin/resource_controller/data_access.rb +5 -1
  157. data/lib/active_admin/resource_controller/decorators.rb +5 -5
  158. data/lib/active_admin/resource_controller/polymorphic_routes.rb +36 -0
  159. data/lib/active_admin/resource_controller/resource_class_methods.rb +2 -0
  160. data/lib/active_admin/resource_controller/scoping.rb +1 -1
  161. data/lib/active_admin/resource_controller.rb +2 -0
  162. data/lib/active_admin/resource_dsl.rb +7 -3
  163. data/lib/active_admin/router.rb +90 -84
  164. data/lib/active_admin/scope.rb +16 -8
  165. data/lib/active_admin/settings_node.rb +19 -0
  166. data/lib/active_admin/sidebar_section.rb +3 -1
  167. data/lib/active_admin/version.rb +1 -1
  168. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +2 -2
  169. data/lib/active_admin/view_helpers/display_helper.rb +13 -4
  170. data/lib/active_admin/view_helpers/download_format_links_helper.rb +1 -0
  171. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +3 -0
  172. data/lib/active_admin/view_helpers.rb +1 -1
  173. data/lib/active_admin/views/components/active_admin_form.rb +9 -4
  174. data/lib/active_admin/views/components/attributes_table.rb +3 -3
  175. data/lib/active_admin/views/components/menu.rb +32 -0
  176. data/lib/active_admin/views/components/menu_item.rb +58 -0
  177. data/lib/active_admin/views/components/paginated_collection.rb +3 -3
  178. data/lib/active_admin/views/components/scopes.rb +11 -4
  179. data/lib/active_admin/views/components/sidebar.rb +13 -0
  180. data/lib/active_admin/views/components/site_title.rb +5 -6
  181. data/lib/active_admin/views/components/status_tag.rb +6 -19
  182. data/lib/active_admin/views/components/table_for.rb +3 -12
  183. data/lib/active_admin/views/components/tabs.rb +15 -3
  184. data/lib/active_admin/views/footer.rb +3 -7
  185. data/lib/active_admin/views/header.rb +3 -15
  186. data/lib/active_admin/views/index_as_blog.rb +1 -1
  187. data/lib/active_admin/views/index_as_grid.rb +25 -25
  188. data/lib/active_admin/views/index_as_table.rb +18 -10
  189. data/lib/active_admin/views/pages/base.rb +30 -53
  190. data/lib/active_admin/views/tabbed_navigation.rb +4 -59
  191. data/lib/active_admin/views.rb +1 -1
  192. data/lib/active_admin.rb +10 -4
  193. data/lib/generators/active_admin/assets/assets_generator.rb +2 -2
  194. data/lib/generators/active_admin/assets/templates/active_admin.js +1 -0
  195. data/lib/generators/active_admin/install/install_generator.rb +7 -3
  196. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +38 -3
  197. data/lib/generators/active_admin/install/templates/dashboard.rb +2 -3
  198. data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb.erb +1 -15
  199. data/lib/generators/active_admin/page/page_generator.rb +1 -1
  200. data/lib/generators/active_admin/resource/resource_generator.rb +2 -2
  201. data/lib/generators/active_admin/resource/templates/admin.rb.erb +40 -37
  202. data/lib/ransack_ext.rb +3 -3
  203. data/vendor/assets/javascripts/jquery-ui/form-reset-mixin.js +80 -0
  204. data/vendor/assets/javascripts/jquery-ui/form.js +22 -0
  205. data/vendor/assets/javascripts/jquery-ui/labels.js +65 -0
  206. data/vendor/assets/javascripts/jquery-ui/widgets/checkboxradio.js +274 -283
  207. metadata +127 -523
  208. data/.github/ISSUE_TEMPLATE.md +0 -20
  209. data/.gitignore +0 -49
  210. data/.mdlrc +0 -1
  211. data/.rubocop.yml +0 -76
  212. data/.simplecov +0 -13
  213. data/.travis.yml +0 -51
  214. data/.yardopts +0 -7
  215. data/Gemfile +0 -58
  216. data/Rakefile +0 -54
  217. data/activeadmin.gemspec +0 -32
  218. data/app/assets/javascripts/active_admin/base.js.coffee +0 -13
  219. data/app/assets/javascripts/active_admin/ext/jquery-ui.js.coffee +0 -6
  220. data/app/assets/javascripts/active_admin/ext/jquery.js.coffee +0 -7
  221. data/app/assets/javascripts/active_admin/initializers/batch_actions.js.coffee +0 -11
  222. data/app/assets/javascripts/active_admin/initializers/datepicker.js.coffee +0 -14
  223. data/app/assets/javascripts/active_admin/initializers/filters.js.coffee +0 -26
  224. data/app/assets/javascripts/active_admin/initializers/tabs.js.coffee +0 -7
  225. data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +0 -42
  226. data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +0 -46
  227. data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +0 -104
  228. data/app/assets/javascripts/active_admin/lib/flash.js.coffee +0 -19
  229. data/app/assets/javascripts/active_admin/lib/has_many.js.coffee +0 -79
  230. data/app/assets/javascripts/active_admin/lib/modal_dialog.js.coffee +0 -45
  231. data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +0 -46
  232. data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +0 -22
  233. data/codecov.yml +0 -25
  234. data/config/i18n-tasks.yml +0 -26
  235. data/config/mdl_style.rb +0 -9
  236. data/cucumber.yml +0 -3
  237. data/features/action_item.feature +0 -73
  238. data/features/authorization.feature +0 -64
  239. data/features/authorization_cancan.feature +0 -52
  240. data/features/authorization_pundit.feature +0 -37
  241. data/features/belongs_to.feature +0 -124
  242. data/features/breadcrumb.feature +0 -75
  243. data/features/comments/commenting.feature +0 -178
  244. data/features/comments/viewing_index.feature +0 -19
  245. data/features/create_another.feature +0 -55
  246. data/features/dashboard.feature +0 -16
  247. data/features/decorators.feature +0 -43
  248. data/features/development_reloading.feature +0 -28
  249. data/features/edit_page.feature +0 -116
  250. data/features/favicon.feature +0 -20
  251. data/features/first_boot.feature +0 -16
  252. data/features/footer.feature +0 -28
  253. data/features/global_navigation.feature +0 -29
  254. data/features/i18n.feature +0 -55
  255. data/features/index/batch_actions.feature +0 -218
  256. data/features/index/filters.feature +0 -239
  257. data/features/index/format_as_csv.feature +0 -220
  258. data/features/index/formats.feature +0 -88
  259. data/features/index/index_as_block.feature +0 -15
  260. data/features/index/index_as_blog.feature +0 -69
  261. data/features/index/index_as_grid.feature +0 -45
  262. data/features/index/index_as_table.feature +0 -291
  263. data/features/index/index_blank_slate.feature +0 -83
  264. data/features/index/index_parameters.feature +0 -75
  265. data/features/index/index_scope_to.feature +0 -56
  266. data/features/index/index_scopes.feature +0 -285
  267. data/features/index/page_title.feature +0 -41
  268. data/features/index/pagination.feature +0 -63
  269. data/features/index/switch_index_view.feature +0 -73
  270. data/features/menu.feature +0 -72
  271. data/features/meta_tags.feature +0 -21
  272. data/features/new_page.feature +0 -107
  273. data/features/registering_assets.feature +0 -38
  274. data/features/registering_pages.feature +0 -237
  275. data/features/registering_resources.feature +0 -33
  276. data/features/renamed_resource.feature +0 -30
  277. data/features/root_to.feature +0 -17
  278. data/features/show/attributes_table_title.feature +0 -54
  279. data/features/show/columns.feature +0 -40
  280. data/features/show/default_content.feature +0 -44
  281. data/features/show/page_title.feature +0 -58
  282. data/features/show/tabs.feature +0 -33
  283. data/features/sidebar_sections.feature +0 -210
  284. data/features/site_title.feature +0 -47
  285. data/features/specifying_actions.feature +0 -118
  286. data/features/step_definitions/action_item_steps.rb +0 -7
  287. data/features/step_definitions/action_link_steps.rb +0 -19
  288. data/features/step_definitions/additional_web_steps.rb +0 -81
  289. data/features/step_definitions/asset_steps.rb +0 -15
  290. data/features/step_definitions/attribute_steps.rb +0 -18
  291. data/features/step_definitions/attributes_table_title_steps.rb +0 -11
  292. data/features/step_definitions/batch_action_steps.rb +0 -81
  293. data/features/step_definitions/blog_steps.rb +0 -3
  294. data/features/step_definitions/breadcrumb_steps.rb +0 -3
  295. data/features/step_definitions/column_steps.rb +0 -8
  296. data/features/step_definitions/comment_steps.rb +0 -32
  297. data/features/step_definitions/configuration_steps.rb +0 -100
  298. data/features/step_definitions/dashboard_steps.rb +0 -15
  299. data/features/step_definitions/factory_steps.rb +0 -35
  300. data/features/step_definitions/filter_steps.rb +0 -48
  301. data/features/step_definitions/flash_steps.rb +0 -11
  302. data/features/step_definitions/footer_steps.rb +0 -11
  303. data/features/step_definitions/format_steps.rb +0 -56
  304. data/features/step_definitions/i18n_steps.rb +0 -11
  305. data/features/step_definitions/index_scope_steps.rb +0 -29
  306. data/features/step_definitions/index_views_steps.rb +0 -3
  307. data/features/step_definitions/layout_steps.rb +0 -3
  308. data/features/step_definitions/member_link_steps.rb +0 -7
  309. data/features/step_definitions/menu_steps.rb +0 -11
  310. data/features/step_definitions/meta_tag_steps.rb +0 -3
  311. data/features/step_definitions/pagination_steps.rb +0 -15
  312. data/features/step_definitions/sidebar_steps.rb +0 -11
  313. data/features/step_definitions/site_title_steps.rb +0 -17
  314. data/features/step_definitions/tab_steps.rb +0 -8
  315. data/features/step_definitions/table_steps.rb +0 -116
  316. data/features/step_definitions/user_steps.rb +0 -52
  317. data/features/step_definitions/web_steps.rb +0 -86
  318. data/features/sti_resource.feature +0 -65
  319. data/features/strong_parameters.feature +0 -69
  320. data/features/support/env.rb +0 -122
  321. data/features/support/paths.rb +0 -73
  322. data/features/support/regular_env.rb +0 -7
  323. data/features/support/reload_env.rb +0 -7
  324. data/features/support/selectors.rb +0 -45
  325. data/features/users/logging_in.feature +0 -36
  326. data/features/users/logging_out.feature +0 -13
  327. data/features/users/resetting_password.feature +0 -34
  328. data/gemfiles/rails_42.gemfile +0 -10
  329. data/gemfiles/rails_50.gemfile +0 -10
  330. data/gemfiles/rails_51.gemfile +0 -10
  331. data/lib/active_admin/event.rb +0 -24
  332. data/lib/active_admin/helpers/settings.rb +0 -114
  333. data/lib/active_admin/reloader.rb +0 -25
  334. data/lib/bug_report_templates/active_admin_master.rb +0 -113
  335. data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +0 -1
  336. data/spec/bug_report_templates_spec.rb +0 -26
  337. data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +0 -50
  338. data/spec/javascripts/coffeescripts/jquery.aa.flash.js.coffee +0 -25
  339. data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +0 -34
  340. data/spec/javascripts/fixtures/checkboxes.html +0 -9
  341. data/spec/javascripts/fixtures/flashes.html +0 -2
  342. data/spec/javascripts/fixtures/table_checkboxes.html +0 -17
  343. data/spec/javascripts/helpers/SpecHelper.js +0 -3
  344. data/spec/javascripts/support/jasmine.yml +0 -74
  345. data/spec/javascripts/support/jasmine_runner.rb +0 -19
  346. data/spec/rails_helper.rb +0 -59
  347. data/spec/requests/default_namespace_spec.rb +0 -81
  348. data/spec/requests/memory_spec.rb +0 -25
  349. data/spec/requests/stylesheets_spec.rb +0 -18
  350. data/spec/spec_helper.rb +0 -1
  351. data/spec/support/active_admin_integration_spec_helper.rb +0 -73
  352. data/spec/support/active_admin_request_helpers.rb +0 -39
  353. data/spec/support/rails_template.rb +0 -150
  354. data/spec/support/rails_template_with_data.rb +0 -327
  355. data/spec/support/templates/admin/stores.rb +0 -7
  356. data/spec/support/templates/en.yml +0 -8
  357. data/spec/support/templates/manifest.js +0 -3
  358. data/spec/support/templates/policies/active_admin/comment_policy.rb +0 -9
  359. data/spec/support/templates/policies/active_admin/page_policy.rb +0 -18
  360. data/spec/support/templates/policies/admin_user_policy.rb +0 -11
  361. data/spec/support/templates/policies/application_policy.rb +0 -44
  362. data/spec/support/templates/policies/category_policy.rb +0 -7
  363. data/spec/support/templates/policies/post_policy.rb +0 -15
  364. data/spec/support/templates/policies/store_policy.rb +0 -11
  365. data/spec/support/templates/policies/user_policy.rb +0 -11
  366. data/spec/support/templates/post_decorator.rb +0 -10
  367. data/spec/unit/abstract_view_factory_spec.rb +0 -78
  368. data/spec/unit/action_builder_spec.rb +0 -125
  369. data/spec/unit/active_admin_spec.rb +0 -11
  370. data/spec/unit/application_spec.rb +0 -184
  371. data/spec/unit/asset_registration_spec.rb +0 -81
  372. data/spec/unit/authorization/authorization_adapter_spec.rb +0 -61
  373. data/spec/unit/authorization/controller_authorization_spec.rb +0 -43
  374. data/spec/unit/authorization/index_overriding_spec.rb +0 -23
  375. data/spec/unit/auto_link_spec.rb +0 -93
  376. data/spec/unit/batch_actions/resource_spec.rb +0 -84
  377. data/spec/unit/batch_actions/settings_spec.rb +0 -61
  378. data/spec/unit/belongs_to_spec.rb +0 -76
  379. data/spec/unit/cancan_adapter_spec.rb +0 -43
  380. data/spec/unit/comments_spec.rb +0 -176
  381. data/spec/unit/component_spec.rb +0 -18
  382. data/spec/unit/config_shared_examples.rb +0 -59
  383. data/spec/unit/controller_filters_spec.rb +0 -41
  384. data/spec/unit/csv_builder_spec.rb +0 -304
  385. data/spec/unit/dependency_spec.rb +0 -135
  386. data/spec/unit/devise_spec.rb +0 -110
  387. data/spec/unit/dsl_spec.rb +0 -120
  388. data/spec/unit/filters/active_filter_spec.rb +0 -135
  389. data/spec/unit/filters/active_spec.rb +0 -24
  390. data/spec/unit/filters/filter_form_builder_spec.rb +0 -502
  391. data/spec/unit/filters/resource_spec.rb +0 -128
  392. data/spec/unit/form_builder_spec.rb +0 -990
  393. data/spec/unit/generators/install_spec.rb +0 -31
  394. data/spec/unit/helpers/collection_spec.rb +0 -68
  395. data/spec/unit/helpers/scope_chain_spec.rb +0 -35
  396. data/spec/unit/helpers/settings_spec.rb +0 -30
  397. data/spec/unit/i18n_spec.rb +0 -29
  398. data/spec/unit/localizers/resource_localizer_spec.rb +0 -36
  399. data/spec/unit/menu_collection_spec.rb +0 -62
  400. data/spec/unit/menu_item_spec.rb +0 -141
  401. data/spec/unit/menu_spec.rb +0 -71
  402. data/spec/unit/namespace/authorization_spec.rb +0 -27
  403. data/spec/unit/namespace/register_page_spec.rb +0 -99
  404. data/spec/unit/namespace/register_resource_spec.rb +0 -162
  405. data/spec/unit/namespace_spec.rb +0 -124
  406. data/spec/unit/order_clause_spec.rb +0 -81
  407. data/spec/unit/page_controller_spec.rb +0 -5
  408. data/spec/unit/page_spec.rb +0 -128
  409. data/spec/unit/pretty_format_spec.rb +0 -82
  410. data/spec/unit/pundit_adapter_spec.rb +0 -98
  411. data/spec/unit/resource/action_items_spec.rb +0 -69
  412. data/spec/unit/resource/attributes_spec.rb +0 -49
  413. data/spec/unit/resource/includes_spec.rb +0 -21
  414. data/spec/unit/resource/menu_spec.rb +0 -18
  415. data/spec/unit/resource/naming_spec.rb +0 -122
  416. data/spec/unit/resource/ordering_spec.rb +0 -35
  417. data/spec/unit/resource/page_presenters_spec.rb +0 -44
  418. data/spec/unit/resource/pagination_spec.rb +0 -38
  419. data/spec/unit/resource/routes_spec.rb +0 -125
  420. data/spec/unit/resource/scopes_spec.rb +0 -50
  421. data/spec/unit/resource/sidebars_spec.rb +0 -43
  422. data/spec/unit/resource_collection_spec.rb +0 -175
  423. data/spec/unit/resource_controller/data_access_spec.rb +0 -230
  424. data/spec/unit/resource_controller/decorators_spec.rb +0 -94
  425. data/spec/unit/resource_controller/sidebars_spec.rb +0 -37
  426. data/spec/unit/resource_controller_spec.rb +0 -273
  427. data/spec/unit/resource_registration_spec.rb +0 -61
  428. data/spec/unit/resource_spec.rb +0 -320
  429. data/spec/unit/routing_spec.rb +0 -211
  430. data/spec/unit/scope_spec.rb +0 -209
  431. data/spec/unit/settings_spec.rb +0 -117
  432. data/spec/unit/view_factory_spec.rb +0 -19
  433. data/spec/unit/view_helpers/breadcrumbs_spec.rb +0 -252
  434. data/spec/unit/view_helpers/display_helper_spec.rb +0 -195
  435. data/spec/unit/view_helpers/download_format_links_helper_spec.rb +0 -39
  436. data/spec/unit/view_helpers/fields_for_spec.rb +0 -50
  437. data/spec/unit/view_helpers/flash_helper_spec.rb +0 -24
  438. data/spec/unit/view_helpers/form_helper_spec.rb +0 -42
  439. data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +0 -138
  440. data/spec/unit/views/components/attributes_table_spec.rb +0 -271
  441. data/spec/unit/views/components/batch_action_selector_spec.rb +0 -43
  442. data/spec/unit/views/components/blank_slate_spec.rb +0 -27
  443. data/spec/unit/views/components/columns_spec.rb +0 -187
  444. data/spec/unit/views/components/index_list_spec.rb +0 -49
  445. data/spec/unit/views/components/index_table_for_spec.rb +0 -127
  446. data/spec/unit/views/components/paginated_collection_spec.rb +0 -249
  447. data/spec/unit/views/components/panel_spec.rb +0 -58
  448. data/spec/unit/views/components/sidebar_section_spec.rb +0 -68
  449. data/spec/unit/views/components/site_title_spec.rb +0 -76
  450. data/spec/unit/views/components/status_tag_spec.rb +0 -265
  451. data/spec/unit/views/components/table_for_spec.rb +0 -436
  452. data/spec/unit/views/components/tabs_spec.rb +0 -67
  453. data/spec/unit/views/components/unsupported_browser_spec.rb +0 -41
  454. data/spec/unit/views/index_as_blog_spec.rb +0 -76
  455. data/spec/unit/views/pages/form_spec.rb +0 -54
  456. data/spec/unit/views/pages/index_spec.rb +0 -60
  457. data/spec/unit/views/pages/layout_spec.rb +0 -59
  458. data/spec/unit/views/pages/show_spec.rb +0 -32
  459. data/spec/unit/views/tabbed_navigation_spec.rb +0 -158
  460. data/tasks/docs.rake +0 -64
  461. data/tasks/lint.rake +0 -21
  462. data/tasks/local.rake +0 -25
  463. data/tasks/parallel_tests.rake +0 -66
  464. data/tasks/test.rake +0 -29
  465. /data/lib/generators/active_admin/install/templates/{admin_user.rb.erb → admin_users.rb.erb} +0 -0
@@ -1,135 +0,0 @@
1
- require 'rails_helper'
2
-
3
- RSpec.describe ActiveAdmin::Filters::ActiveFilter do
4
-
5
- let(:namespace) do
6
- ActiveAdmin::Namespace.new(ActiveAdmin::Application.new, :admin)
7
- end
8
-
9
- let(:resource) do
10
- namespace.register(Post)
11
- end
12
-
13
- let(:user){ User.create! first_name: "John", last_name: "Doe" }
14
- let(:category){ Category.create! name: "Category" }
15
- let(:post){ Post.create! title: "Hello World", category: category, author: user }
16
-
17
- let(:search) do
18
- Post.ransack(title_equals: post.title)
19
- end
20
-
21
- let(:condition) do
22
- search.conditions[0]
23
- end
24
-
25
- subject do
26
- ActiveAdmin::Filters::ActiveFilter.new(resource, condition)
27
- end
28
-
29
- it 'should have valid values' do
30
- expect(subject.values).to eq([post.title])
31
- end
32
-
33
- it 'should have valid label' do
34
- expect(subject.label).to eq("Title equals")
35
- end
36
-
37
- it 'should pick predicate name translation' do
38
- expect(subject.predicate_name).to eq(I18n.t("active_admin.filters.predicates.equals"))
39
- end
40
-
41
- context 'search by belongs_to association' do
42
- let(:search) do
43
- Post.ransack(custom_category_id_eq: category.id)
44
- end
45
-
46
- it 'should have valid values' do
47
- expect(subject.values[0]).to be_a(Category)
48
- end
49
-
50
- it 'should have valid label' do
51
- expect(subject.label).to eq("Category equals")
52
- end
53
-
54
- it 'should pick predicate name translation' do
55
- expect(subject.predicate_name).to eq(Ransack::Translate.predicate('eq'))
56
- end
57
-
58
- end
59
-
60
- context 'search by polymorphic association' do
61
- let(:resource) do
62
- namespace.register(ActiveAdmin::Comment)
63
- end
64
-
65
- let(:search) do
66
- ActiveAdmin::Comment.ransack(resource_id_eq: post.id, resource_type_eq: post.class.to_s)
67
- end
68
-
69
- context 'id filter' do
70
- let(:condition) do
71
- search.conditions[0]
72
- end
73
- it 'should have valid values' do
74
- expect(subject.values[0]).to eq(post.id)
75
- end
76
-
77
- it 'should have valid label' do
78
- expect(subject.label).to eq("Resource equals")
79
- end
80
- end
81
-
82
- context 'type filter' do
83
- let(:condition) do
84
- search.conditions[1]
85
- end
86
-
87
- it 'should have valid values' do
88
- expect(subject.values[0]).to eq(post.class.to_s)
89
- end
90
-
91
- it 'should have valid label' do
92
- expect(subject.label).to eq("Resource type equals")
93
- end
94
- end
95
- end
96
-
97
- context 'search by has many association' do
98
- let(:resource) do
99
- namespace.register(Category)
100
- end
101
-
102
- let(:search) do
103
- Category.ransack(posts_id_eq: post.id)
104
- end
105
-
106
- it 'should have valid values' do
107
- expect(subject.values[0]).to be_a(Post)
108
- end
109
-
110
- it 'should have valid label' do
111
- expect(subject.label).to eq("Post equals")
112
- end
113
-
114
- context 'search by has many through association' do
115
- let(:resource) do
116
- namespace.register(User)
117
- end
118
-
119
- let(:search) do
120
- User.ransack(posts_category_id_eq: category.id)
121
- end
122
-
123
- it 'should have valid values' do
124
- expect(subject.values[0]).to be_a(Category)
125
- end
126
-
127
- it 'should have valid label' do
128
- expect(subject.label).to eq("Category equals")
129
- end
130
-
131
- end
132
-
133
- end
134
-
135
- end
@@ -1,24 +0,0 @@
1
- require 'rails_helper'
2
-
3
- RSpec.describe ActiveAdmin::Filters::Active do
4
-
5
- let(:resource) do
6
- namespace = ActiveAdmin::Namespace.new(ActiveAdmin::Application.new, :admin)
7
- namespace.register(Post)
8
- end
9
-
10
- subject { described_class.new(resource, search) }
11
-
12
- let(:params) do
13
- ::ActionController::Parameters.new(q: {author_id_eq: 1})
14
- end
15
-
16
- let(:search) do
17
- Post.ransack(params[:q])
18
- end
19
-
20
- it 'should have filters' do
21
- expect(subject.filters.size).to eq(1)
22
- end
23
-
24
- end
@@ -1,502 +0,0 @@
1
- require 'rails_helper'
2
-
3
- RSpec.describe ActiveAdmin::Filters::ViewHelper do
4
-
5
- # Setup an ActionView::Base object which can be used for
6
- # generating the form for.
7
- let(:helpers) do
8
- view = action_view
9
- def view.collection_path
10
- "/posts"
11
- end
12
-
13
- def view.protect_against_forgery?
14
- false
15
- end
16
-
17
- def view.a_helper_method
18
- "A Helper Method"
19
- end
20
-
21
- view
22
- end
23
-
24
- def render_filter(search, filters)
25
- render_arbre_component({filter_args: [search, filters]}, helpers) do
26
- text_node active_admin_filters_form_for *assigns[:filter_args]
27
- end.to_s
28
- end
29
-
30
- def filter(name, options = {})
31
- render_filter scope, name => options
32
- end
33
-
34
- let(:scope) { Post.search }
35
-
36
- describe "the form in general" do
37
- let(:body) { Capybara.string(filter :title) }
38
-
39
- it "should generate a form which submits via get" do
40
- expect(body).to have_selector("form.filter_form[method=get]")
41
- end
42
-
43
- it "should generate a filter button" do
44
- expect(body).to have_selector("input[type=submit][value=Filter]")
45
- end
46
-
47
- it "should only generate the form once" do
48
- expect(body).to have_selector("form", count: 1)
49
- end
50
-
51
- it "should generate a clear filters link" do
52
- expect(body).to have_selector("a.clear_filters_btn", text: "Clear Filters")
53
- end
54
-
55
- describe "label as proc" do
56
- let(:body) { Capybara.string(filter :title, label: proc { 'Title from proc' }) }
57
-
58
- it "should render proper label" do
59
- expect(body).to have_selector("label", text: "Title from proc")
60
- end
61
- end
62
-
63
- describe "input html as proc" do
64
- let(:body) { Capybara.string(filter :title, as: :select, input_html: proc{ {'data-ajax-url': '/'} }) }
65
-
66
- it "should render proper label" do
67
- expect(body).to have_selector('select[data-ajax-url="/"]')
68
- end
69
- end
70
- end
71
-
72
- describe "string attribute" do
73
- let(:body) { Capybara.string(filter :title) }
74
-
75
- it "should generate a select option for starts with" do
76
- expect(body).to have_selector("option[value=title_starts_with]", text: "Starts with")
77
- end
78
-
79
- it "should generate a select option for ends with" do
80
- expect(body).to have_selector("option[value=title_ends_with]", text: "Ends with")
81
- end
82
-
83
- it "should generate a select option for contains" do
84
- expect(body).to have_selector("option[value=title_contains]", text: "Contains")
85
- end
86
-
87
- it "should generate a text field for input" do
88
- expect(body).to have_selector("input[name='q[title_contains]']")
89
- end
90
-
91
- it "should have a proper label" do
92
- expect(body).to have_selector("label", text: "Title")
93
- end
94
-
95
- it "should translate the label for text field" do
96
- with_translation activerecord: {attributes: {post: {title: 'Name'}}} do
97
- expect(body).to have_selector("label", text: "Name")
98
- end
99
- end
100
-
101
- it "should select the option which is currently being filtered" do
102
- scope = Post.search title_starts_with: "foo"
103
- body = Capybara.string(render_filter scope, title: {})
104
- expect(body).to have_selector("option[value=title_starts_with][selected=selected]", text: "Starts with")
105
- end
106
-
107
- context "with filters options" do
108
- let(:body) { Capybara.string(filter :title, filters: [:contains, :starts_with]) }
109
-
110
- it "should generate provided options for filter select" do
111
- expect(body).to have_selector("option[value=title_contains]", text: "Contains")
112
- expect(body).to have_selector("option[value=title_starts_with]", text: "Starts with")
113
- end
114
-
115
- it "should not generate a select option for ends with" do
116
- expect(body).not_to have_selector("option[value=title_ends_with]")
117
- end
118
- end
119
-
120
- context "with predicate" do
121
- %w[eq equals cont contains start starts_with end ends_with].each do |predicate|
122
- describe "'#{predicate}'" do
123
- let(:body) { Capybara.string(filter :"title_#{predicate}") }
124
-
125
- it "shouldn't include a select field" do
126
- expect(body).not_to have_selector("select")
127
- end
128
-
129
- it "should build correctly" do
130
- expect(body).to have_selector("input[name='q[title_#{predicate}]']")
131
- end
132
- end
133
- end
134
- end
135
- end
136
-
137
- describe "text attribute" do
138
- let(:body) { Capybara.string(filter :body) }
139
-
140
- it "should generate a search field for a text attribute" do
141
- expect(body).to have_selector("input[name='q[body_contains]']")
142
- end
143
-
144
- it "should have a proper label" do
145
- expect(body).to have_selector("label", text: "Body")
146
- end
147
- end
148
-
149
- describe "string attribute, as a select" do
150
- let(:body) { filter :title, as: :select }
151
- let(:builder) { ActiveAdmin::Inputs::Filters::SelectInput }
152
-
153
- context "when loading collection from DB" do
154
- it "should use pluck for efficiency" do
155
- expect_any_instance_of(builder).to receive(:pluck_column) { [] }
156
- body
157
- end
158
-
159
- it "should remove original ordering to prevent PostgreSQL error" do
160
- expect(scope.object.klass).to receive(:reorder).with('title asc') {
161
- m = double distinct: double(pluck: ['A Title'])
162
- expect(m.distinct).to receive(:pluck).with :title
163
- m
164
- }
165
- body
166
- end
167
- end
168
- end
169
-
170
- describe "date attribute" do
171
- let(:body) { Capybara.string(filter :published_date) }
172
-
173
- it "should generate a date greater than" do
174
- expect(body).to have_selector("input.datepicker[name='q[published_date_gteq]']")
175
- end
176
- it "should generate a date less than" do
177
- expect(body).to have_selector("input.datepicker[name='q[published_date_lteq]']")
178
- end
179
- end
180
-
181
- describe "datetime attribute" do
182
- let(:body) { Capybara.string(filter :created_at) }
183
-
184
- it "should generate a date greater than" do
185
- expect(body).to have_selector("input.datepicker[name='q[created_at_gteq_datetime]']")
186
- end
187
- it "should generate a date less than" do
188
- expect(body).to have_selector("input.datepicker[name='q[created_at_lteq_datetime]']")
189
- end
190
- end
191
-
192
- describe "integer attribute" do
193
- context "without options" do
194
- let(:body) { Capybara.string(filter :id) }
195
-
196
- it "should generate a select option for equal to" do
197
- expect(body).to have_selector("option[value=id_equals]", text: "Equals")
198
- end
199
- it "should generate a select option for greater than" do
200
- expect(body).to have_selector("option[value=id_greater_than]", text: "Greater than")
201
- end
202
- it "should generate a select option for less than" do
203
- expect(body).to have_selector("option[value=id_less_than]", text: "Less than")
204
- end
205
- it "should generate a text field for input" do
206
- expect(body).to have_selector("input[name='q[id_equals]']")
207
- end
208
- it "should select the option which is currently being filtered" do
209
- scope = Post.search id_greater_than: 1
210
- body = Capybara.string(render_filter scope, id: {})
211
- expect(body).to have_selector("option[value=id_greater_than][selected=selected]", text: "Greater than")
212
- end
213
- end
214
-
215
- context "with filters options" do
216
- let(:body) { Capybara.string(filter :id, filters: [:equals, :greater_than]) }
217
-
218
- it "should generate provided options for filter select" do
219
- expect(body).to have_selector("option[value=id_equals]", text: "Equals")
220
- expect(body).to have_selector("option[value=id_greater_than]", text: "Greater than")
221
- end
222
-
223
- it "should not generate a select option for less than" do
224
- expect(body).not_to have_selector("option[value=id_less_than]")
225
- end
226
- end
227
- end
228
-
229
- describe "boolean attribute" do
230
- context "boolean datatypes" do
231
- let(:body) { Capybara.string(filter :starred) }
232
-
233
- it "should generate a select" do
234
- expect(body).to have_selector("select[name='q[starred_eq]']")
235
- end
236
- it "should set the default text to 'Any'" do
237
- expect(body).to have_selector("option[value='']", text: "Any")
238
- end
239
- it "should create an option for true and false" do
240
- expect(body).to have_selector("option[value=true]", text: "Yes")
241
- expect(body).to have_selector("option[value=false]", text: "No")
242
- end
243
-
244
- it "should translate the label for boolean field" do
245
- with_translation activerecord: {attributes: {post: {starred: 'Faved'}}} do
246
- expect(body).to have_selector("label", text: "Faved")
247
- end
248
- end
249
- end
250
-
251
- context "non-boolean data types" do
252
- let(:body) { Capybara.string(filter :title_present, as: :boolean) }
253
-
254
- it "should generate a select" do
255
- expect(body).to have_selector("select[name='q[title_present]']")
256
- end
257
- it "should set the default text to 'Any'" do
258
- expect(body).to have_selector("option[value='']", text: "Any")
259
- end
260
- it "should create an option for true and false" do
261
- expect(body).to have_selector("option[value=true]", text: "Yes")
262
- expect(body).to have_selector("option[value=false]", text: "No")
263
- end
264
- end
265
- end
266
-
267
- describe "belongs_to" do
268
- before do
269
- @john = User.create first_name: "John", last_name: "Doe", username: "john_doe"
270
- @jane = User.create first_name: "Jane", last_name: "Doe", username: "jane_doe"
271
- end
272
-
273
- context "when given as the _id attribute name" do
274
- let(:body) { Capybara.string(filter :author_id) }
275
-
276
- it "should generate a numeric filter" do
277
- expect(body).to have_selector("label", text: "Author") # really this should be Author ID :/)
278
- expect(body).to have_selector("option[value=author_id_less_than]")
279
- expect(body).to have_selector("input#q_author_id[name='q[author_id_equals]']")
280
- end
281
- end
282
-
283
- context "when given as the name of the relationship" do
284
- let(:body) { Capybara.string(filter :author) }
285
-
286
- it "should generate a select" do
287
- expect(body).to have_selector("select[name='q[author_id_eq]']")
288
- end
289
- it "should set the default text to 'Any'" do
290
- expect(body).to have_selector("option[value='']", text: "Any")
291
- end
292
- it "should create an option for each related object" do
293
- expect(body).to have_selector("option[value='#{@john.id}']", text: "John Doe")
294
- expect(body).to have_selector("option[value='#{@jane.id}']", text: "Jane Doe")
295
- end
296
-
297
- context "with a proc" do
298
- let :body do
299
- Capybara.string(filter :title, as: :select, collection: proc{ ['Title One', 'Title Two'] })
300
- end
301
-
302
- it "should use call the proc as the collection" do
303
- expect(body).to have_selector("option", text: "Title One")
304
- expect(body).to have_selector("option", text: "Title Two")
305
- end
306
-
307
- it "should render the collection in the context of the view" do
308
- body = Capybara.string(filter(:title, as: :select, collection: proc{[a_helper_method]}))
309
- expect(body).to have_selector("option", text: "A Helper Method")
310
- end
311
- end
312
- end
313
-
314
- context "as check boxes" do
315
- let(:body) { Capybara.string(filter :author, as: :check_boxes) }
316
-
317
- it "should create a check box for each related object" do
318
- expect(body).to have_selector("input[type=checkbox][name='q[author_id_in][]'][value='#{@jane.id}']")
319
- expect(body).to have_selector("input[type=checkbox][name='q[author_id_in][]'][value='#{@jane.id}']")
320
- end
321
- end
322
-
323
- context "when polymorphic relationship" do
324
- let(:scope) { ActiveAdmin::Comment.search }
325
- it "should raise an error if a collection isn't provided" do
326
- expect { filter :resource }.to raise_error \
327
- Formtastic::PolymorphicInputWithoutCollectionError
328
- end
329
- end
330
-
331
- context "when using a custom foreign key" do
332
- let(:scope) { Post.search }
333
- let(:body) { Capybara.string(filter :category) }
334
- it "should ignore that foreign key and let Ransack handle it" do
335
- expect(Post.reflect_on_association(:category).foreign_key).to eq :custom_category_id
336
- expect(body).to have_selector("select[name='q[category_id_eq]']")
337
- end
338
- end
339
- end # belongs to
340
-
341
- describe "has_and_belongs_to_many" do
342
- skip "add HABTM models so this can be tested"
343
- end
344
-
345
- describe "has_many :through" do
346
- # Setup an ActionView::Base object which can be used for
347
- # generating the form for.
348
- let(:helpers) do
349
- view = action_view
350
- def view.collection_path
351
- "/categories"
352
- end
353
-
354
- def view.protect_against_forgery?
355
- false
356
- end
357
-
358
- def view.a_helper_method
359
- "A Helper Method"
360
- end
361
-
362
- view
363
- end
364
- let(:scope) { Category.search }
365
-
366
- let!(:john) { User.create first_name: "John", last_name: "Doe", username: "john_doe" }
367
- let!(:jane) { User.create first_name: "Jane", last_name: "Doe", username: "jane_doe" }
368
-
369
- context "when given as the name of the relationship" do
370
- let(:body) { Capybara.string(filter :authors) }
371
-
372
- it "should generate a select" do
373
- expect(body).to have_selector("select[name='q[posts_author_id_eq]']")
374
- end
375
-
376
- it "should set the default text to 'Any'" do
377
- expect(body).to have_selector("option[value='']", text: "Any")
378
- end
379
-
380
- it "should create an option for each related object" do
381
- expect(body).to have_selector("option[value='#{john.id}']", text: "John Doe")
382
- expect(body).to have_selector("option[value='#{jane.id}']", text: "Jane Doe")
383
- end
384
- end
385
-
386
- context "as check boxes" do
387
- let(:body) { Capybara.string(filter :authors, as: :check_boxes) }
388
-
389
- it "should create a check box for each related object" do
390
- expect(body).to have_selector("input[name='q[posts_author_id_in][]'][type=checkbox][value='#{john.id}']")
391
- expect(body).to have_selector("input[name='q[posts_author_id_in][]'][type=checkbox][value='#{jane.id}']")
392
- end
393
- end
394
- end
395
-
396
- describe "conditional display" do
397
- [:if, :unless].each do |verb|
398
- should = verb == :if ? "should" : "shouldn't"
399
- if_true = verb == :if ? :to : :to_not
400
- if_false = verb == :if ? :to_not : :to
401
- context "with #{verb.inspect} proc" do
402
- it "#{should} be displayed if true" do
403
- body = Capybara.string(filter :body, verb => proc{ true })
404
- expect(body).send if_true, have_selector("input[name='q[body_contains]']")
405
- end
406
- it "#{should} be displayed if false" do
407
- body = Capybara.string(filter :body, verb => proc{ false })
408
- expect(body).send if_false, have_selector("input[name='q[body_contains]']")
409
- end
410
- it "should still be hidden on the second render" do
411
- filters = {body: { verb => proc{ verb == :unless }}}
412
- 2.times do
413
- body = Capybara.string(render_filter scope, filters)
414
- expect(body).not_to have_selector("input[name='q[body_contains]']")
415
- end
416
- end
417
- it "should successfully keep rendering other filters after one is hidden" do
418
- filters = {body: { verb => proc{ verb == :unless }}, author: {}}
419
- body = Capybara.string(render_filter scope, filters)
420
- expect(body).not_to have_selector("input[name='q[body_contains]']")
421
- expect(body).to have_selector("select[name='q[author_id_eq]']")
422
- end
423
- end
424
- end
425
- end
426
-
427
- describe "custom search methods" do
428
-
429
- it "should use the default type of the ransacker" do
430
- body = Capybara.string(filter :custom_searcher_numeric)
431
- expect(body).to have_selector("option[value=custom_searcher_numeric_equals]")
432
- expect(body).to have_selector("option[value=custom_searcher_numeric_greater_than]")
433
- expect(body).to have_selector("option[value=custom_searcher_numeric_less_than]")
434
- end
435
-
436
- it "should work as select" do
437
- body = Capybara.string(filter :custom_title_searcher, as: :select, collection: ['foo'])
438
- expect(body).to have_selector("select[name='q[custom_title_searcher_eq]']")
439
- end
440
-
441
- it "should work as string" do
442
- body = Capybara.string(filter :custom_title_searcher, as: :string)
443
- expect(body).to have_selector("option[value=custom_title_searcher_contains]")
444
- expect(body).to have_selector("option[value=custom_title_searcher_starts_with]")
445
- end
446
-
447
- describe "custom date range search" do
448
- let(:qteq) { "2010-10-01" }
449
- let(:lteq) { "2010-10-02" }
450
- let(:scope){ Post.search custom_created_at_searcher_gteq_datetime: qteq, custom_created_at_searcher_lteq_datetime: lteq }
451
- let(:body) { Capybara.string(render_filter scope, custom_created_at_searcher: {as: :date_range}) }
452
-
453
- it "should work as date_range" do
454
- expect(body).to have_selector("input[name='q[custom_created_at_searcher_gteq_datetime]'][value='2010-10-01']")
455
- expect(body).to have_selector("input[name='q[custom_created_at_searcher_lteq_datetime]'][value='2010-10-02']")
456
- end
457
-
458
- context "filter value can't be casted to date" do
459
- let(:qteq) { "Ooops" }
460
- let(:lteq) { "Ooops" }
461
-
462
- it "should work display empty filter values" do
463
- expect(body).to have_selector("input[name='q[custom_created_at_searcher_gteq_datetime]'][value='']")
464
- expect(body).to have_selector("input[name='q[custom_created_at_searcher_lteq_datetime]'][value='']")
465
- end
466
- end
467
-
468
- end
469
- end
470
-
471
- describe "does not support some filter inputs" do
472
- it "should fallback to use formtastic inputs" do
473
- body = Capybara.string(filter :custom_title_searcher, as: :text)
474
- expect(body).to have_selector("textarea[name='q[custom_title_searcher]']")
475
- end
476
- end
477
-
478
- describe "blank option" do
479
- context "for a select filter" do
480
- it "should be there by default" do
481
- body = Capybara.string(filter(:author))
482
- expect(body).to have_selector("option", text: "Any")
483
- end
484
- it "should be able to be disabled" do
485
- body = Capybara.string(filter(:author, include_blank: false))
486
- expect(body).to_not have_selector("option", text: "Any")
487
- end
488
- end
489
-
490
- context "for a multi-select filter" do
491
- it "should not be there by default" do
492
- body = Capybara.string(filter(:author, multiple: true))
493
- expect(body).to_not have_selector("option", text: "Any")
494
- end
495
- it "should be able to be enabled" do
496
- body = Capybara.string(filter(:author, multiple: true, include_blank: true))
497
- expect(body).to have_selector("option", text: "Any")
498
- end
499
- end
500
- end
501
-
502
- end