activeadmin 1.1.0 → 2.14.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 (592) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +871 -111
  3. data/CODE_OF_CONDUCT.md +64 -12
  4. data/CONTRIBUTING.md +84 -63
  5. data/README.md +73 -19
  6. data/app/assets/javascripts/active_admin/base.js +521 -0
  7. data/app/assets/stylesheets/active_admin/_base.scss +53 -37
  8. data/app/assets/stylesheets/active_admin/_forms.scss +4 -26
  9. data/app/assets/stylesheets/active_admin/_header.scss +40 -8
  10. data/app/assets/stylesheets/active_admin/_mixins.scss +1 -1
  11. data/{vendor → app}/assets/stylesheets/active_admin/_normalize.scss +25 -123
  12. data/app/assets/stylesheets/active_admin/{print.scss → _print.scss} +2 -2
  13. data/app/assets/stylesheets/active_admin/components/_comments.scss +2 -2
  14. data/app/assets/stylesheets/active_admin/components/_date_picker.scss +1 -2
  15. data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +0 -1
  16. data/app/assets/stylesheets/active_admin/components/_scopes.scss +3 -0
  17. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +0 -5
  18. data/app/assets/stylesheets/active_admin/components/_tables.scss +1 -2
  19. data/app/assets/stylesheets/active_admin/components/_tabs.scss +1 -1
  20. data/app/assets/stylesheets/active_admin/mixins/_all.scss +8 -8
  21. data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +1 -1
  22. data/app/assets/stylesheets/active_admin/mixins/_variables.scss +17 -0
  23. data/app/assets/stylesheets/active_admin/structure/_footer.scss +6 -1
  24. data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +1 -1
  25. data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +0 -1
  26. data/app/javascript/active_admin/base.js +28 -0
  27. data/app/javascript/active_admin/ext/jquery-ui.js +7 -0
  28. data/app/javascript/active_admin/ext/jquery.js +9 -0
  29. data/app/javascript/active_admin/initializers/batch-actions.js +61 -0
  30. data/app/javascript/active_admin/initializers/checkbox-toggler.js +3 -0
  31. data/app/javascript/active_admin/initializers/datepicker.js +16 -0
  32. data/app/javascript/active_admin/initializers/dropdown-menu.js +9 -0
  33. data/app/javascript/active_admin/initializers/filters.js +10 -0
  34. data/app/javascript/active_admin/initializers/has-many.js +98 -0
  35. data/app/javascript/active_admin/initializers/per-page.js +13 -0
  36. data/app/javascript/active_admin/initializers/table-checkbox-toggler.js +3 -0
  37. data/app/javascript/active_admin/initializers/tabs.js +6 -0
  38. data/app/javascript/active_admin/lib/checkbox-toggler.js +49 -0
  39. data/app/javascript/active_admin/lib/dropdown-menu.js +116 -0
  40. data/app/javascript/active_admin/lib/filters.js +39 -0
  41. data/app/javascript/active_admin/lib/modal-dialog.js +63 -0
  42. data/app/javascript/active_admin/lib/per-page.js +38 -0
  43. data/app/javascript/active_admin/lib/table-checkbox-toggler.js +38 -0
  44. data/app/javascript/active_admin/lib/utils.js +40 -0
  45. data/app/views/active_admin/devise/confirmations/new.html.erb +2 -2
  46. data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +1 -1
  47. data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +2 -2
  48. data/app/views/active_admin/devise/passwords/edit.html.erb +2 -2
  49. data/app/views/active_admin/devise/passwords/new.html.erb +2 -2
  50. data/app/views/active_admin/devise/registrations/new.html.erb +2 -3
  51. data/app/views/active_admin/devise/sessions/new.html.erb +1 -1
  52. data/app/views/active_admin/devise/shared/_error_messages.html.erb +15 -0
  53. data/app/views/active_admin/devise/shared/_links.erb +1 -1
  54. data/app/views/active_admin/devise/unlocks/new.html.erb +2 -2
  55. data/app/views/active_admin/page/index.html.arb +1 -0
  56. data/app/views/active_admin/resource/edit.html.arb +1 -0
  57. data/app/views/active_admin/resource/index.html.arb +1 -0
  58. data/app/views/active_admin/resource/new.html.arb +1 -0
  59. data/app/views/active_admin/resource/show.html.arb +1 -0
  60. data/app/views/kaminari/active_admin_countless/_first_page.html.erb +11 -0
  61. data/app/views/kaminari/active_admin_countless/_gap.html.erb +8 -0
  62. data/app/views/kaminari/active_admin_countless/_next_page.html.erb +11 -0
  63. data/app/views/kaminari/active_admin_countless/_page.html.erb +12 -0
  64. data/app/views/kaminari/active_admin_countless/_paginator.html.erb +24 -0
  65. data/app/views/kaminari/active_admin_countless/_prev_page.html.erb +11 -0
  66. data/app/views/layouts/active_admin.html.arb +1 -0
  67. data/app/views/layouts/active_admin_logged_out.html.erb +20 -9
  68. data/config/locales/ar.yml +9 -8
  69. data/config/locales/az.yml +138 -0
  70. data/config/locales/bg.yml +1 -1
  71. data/config/locales/bs.yml +1 -0
  72. data/config/locales/ca.yml +1 -1
  73. data/config/locales/cs.yml +1 -0
  74. data/config/locales/da.yml +1 -0
  75. data/config/locales/de-CH.yml +1 -0
  76. data/config/locales/de.yml +29 -0
  77. data/config/locales/el.yml +1 -0
  78. data/config/locales/en-CA.yml +4 -3
  79. data/config/locales/en-GB.yml +4 -3
  80. data/config/locales/en.yml +24 -4
  81. data/config/locales/eo.yml +145 -0
  82. data/config/locales/es-MX.yml +3 -1
  83. data/config/locales/es.yml +26 -6
  84. data/config/locales/fa.yml +1 -0
  85. data/config/locales/fi.yml +2 -1
  86. data/config/locales/fr.yml +9 -8
  87. data/config/locales/he.yml +1 -1
  88. data/config/locales/hr.yml +1 -0
  89. data/config/locales/hu.yml +5 -0
  90. data/config/locales/id.yml +1 -0
  91. data/config/locales/it.yml +31 -3
  92. data/config/locales/ja.yml +8 -2
  93. data/config/locales/ko.yml +2 -1
  94. data/config/locales/lt.yml +3 -2
  95. data/config/locales/lv.yml +3 -2
  96. data/config/locales/mk.yml +134 -0
  97. data/config/locales/nb.yml +16 -5
  98. data/config/locales/nl.yml +13 -1
  99. data/config/locales/pl.yml +72 -3
  100. data/config/locales/pt-BR.yml +9 -0
  101. data/config/locales/pt-PT.yml +1 -0
  102. data/config/locales/ro.yml +4 -2
  103. data/config/locales/ru.yml +3 -0
  104. data/config/locales/sk.yml +60 -0
  105. data/config/locales/sv-SE.yml +3 -0
  106. data/config/locales/tr.yml +10 -0
  107. data/config/locales/uk.yml +3 -0
  108. data/config/locales/vi.yml +82 -12
  109. data/config/locales/zh-CN.yml +68 -20
  110. data/config/locales/zh-TW.yml +1 -0
  111. data/lib/active_admin/abstract_view_factory.rb +14 -51
  112. data/lib/active_admin/application.rb +65 -172
  113. data/lib/active_admin/application_settings.rb +43 -0
  114. data/lib/active_admin/asset_registration.rb +4 -11
  115. data/lib/active_admin/authorization_adapter.rb +6 -3
  116. data/lib/active_admin/base_controller/authorization.rb +18 -18
  117. data/lib/active_admin/base_controller/menu.rb +1 -0
  118. data/lib/active_admin/base_controller.rb +12 -11
  119. data/lib/active_admin/batch_actions/controller.rb +6 -5
  120. data/lib/active_admin/batch_actions/resource_extension.rb +16 -10
  121. data/lib/active_admin/batch_actions/views/batch_action_form.rb +4 -3
  122. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +7 -6
  123. data/lib/active_admin/batch_actions/views/selection_cells.rb +4 -3
  124. data/lib/active_admin/batch_actions.rb +1 -0
  125. data/lib/active_admin/callbacks.rb +2 -1
  126. data/lib/active_admin/cancan_adapter.rb +2 -1
  127. data/lib/active_admin/collection_decorator.rb +32 -0
  128. data/lib/active_admin/component.rb +1 -0
  129. data/lib/active_admin/controller_action.rb +3 -1
  130. data/lib/active_admin/csv_builder.rb +15 -21
  131. data/lib/active_admin/dependency.rb +12 -79
  132. data/lib/active_admin/deprecation.rb +1 -25
  133. data/lib/active_admin/devise.rb +16 -5
  134. data/lib/active_admin/dsl.rb +3 -9
  135. data/lib/active_admin/dynamic_setting.rb +39 -0
  136. data/lib/active_admin/dynamic_settings_node.rb +29 -0
  137. data/lib/active_admin/engine.rb +16 -7
  138. data/lib/active_admin/error.rb +5 -4
  139. data/lib/active_admin/filters/active.rb +2 -1
  140. data/lib/active_admin/filters/active_filter.rb +52 -15
  141. data/lib/active_admin/filters/active_sidebar.rb +8 -30
  142. data/lib/active_admin/filters/dsl.rb +1 -0
  143. data/lib/active_admin/filters/forms.rb +13 -9
  144. data/lib/active_admin/filters/formtastic_addons.rb +3 -7
  145. data/lib/active_admin/filters/resource_extension.rb +34 -9
  146. data/lib/active_admin/filters.rb +8 -7
  147. data/lib/active_admin/form_builder.rb +110 -70
  148. data/lib/active_admin/generators/boilerplate.rb +13 -4
  149. data/lib/active_admin/helpers/collection.rb +2 -0
  150. data/lib/active_admin/helpers/i18n.rb +1 -0
  151. data/lib/active_admin/helpers/optional_display.rb +3 -2
  152. data/lib/active_admin/helpers/routes/url_helpers.rb +1 -0
  153. data/lib/active_admin/helpers/scope_chain.rb +2 -0
  154. data/lib/active_admin/inputs/datepicker_input.rb +10 -2
  155. data/lib/active_admin/inputs/filters/base/search_method_select.rb +7 -6
  156. data/lib/active_admin/inputs/filters/base.rb +2 -1
  157. data/lib/active_admin/inputs/filters/boolean_input.rb +2 -1
  158. data/lib/active_admin/inputs/filters/check_boxes_input.rb +2 -1
  159. data/lib/active_admin/inputs/filters/date_picker_input.rb +1 -0
  160. data/lib/active_admin/inputs/filters/date_range_input.rb +16 -12
  161. data/lib/active_admin/inputs/filters/numeric_input.rb +1 -0
  162. data/lib/active_admin/inputs/filters/select_input.rb +8 -3
  163. data/lib/active_admin/inputs/filters/string_input.rb +1 -0
  164. data/lib/active_admin/inputs/filters/text_input.rb +1 -0
  165. data/lib/active_admin/inputs.rb +1 -0
  166. data/lib/active_admin/localizers/resource_localizer.rb +4 -3
  167. data/lib/active_admin/localizers.rb +2 -1
  168. data/lib/active_admin/menu.rb +9 -11
  169. data/lib/active_admin/menu_collection.rb +1 -0
  170. data/lib/active_admin/menu_item.rb +11 -38
  171. data/lib/active_admin/namespace.rb +33 -20
  172. data/lib/active_admin/namespace_settings.rb +127 -0
  173. data/lib/active_admin/order_clause.rb +4 -3
  174. data/lib/active_admin/orm/active_record/comments/comment.rb +5 -4
  175. data/lib/active_admin/orm/active_record/comments/namespace_helper.rb +1 -0
  176. data/lib/active_admin/orm/active_record/comments/resource_helper.rb +1 -0
  177. data/lib/active_admin/orm/active_record/comments/show_page_helper.rb +1 -0
  178. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +36 -25
  179. data/lib/active_admin/orm/active_record/comments/views.rb +3 -2
  180. data/lib/active_admin/orm/active_record/comments.rb +41 -29
  181. data/lib/active_admin/orm/active_record.rb +2 -1
  182. data/lib/active_admin/orm/mongoid.rb +1 -0
  183. data/lib/active_admin/page.rb +2 -1
  184. data/lib/active_admin/page_controller.rb +1 -0
  185. data/lib/active_admin/page_dsl.rb +2 -1
  186. data/lib/active_admin/page_presenter.rb +3 -1
  187. data/lib/active_admin/pundit_adapter.rb +71 -16
  188. data/lib/active_admin/resource/action_items.rb +12 -6
  189. data/lib/active_admin/resource/attributes.rb +9 -5
  190. data/lib/active_admin/resource/belongs_to.rb +9 -3
  191. data/lib/active_admin/resource/controllers.rb +2 -1
  192. data/lib/active_admin/resource/includes.rb +1 -0
  193. data/lib/active_admin/resource/menu.rb +6 -5
  194. data/lib/active_admin/resource/model.rb +16 -0
  195. data/lib/active_admin/resource/naming.rb +6 -5
  196. data/lib/active_admin/resource/ordering.rb +1 -0
  197. data/lib/active_admin/resource/page_presenters.rb +1 -0
  198. data/lib/active_admin/resource/pagination.rb +1 -0
  199. data/lib/active_admin/resource/routes.rb +26 -14
  200. data/lib/active_admin/resource/scope_to.rb +8 -7
  201. data/lib/active_admin/resource/scopes.rb +4 -3
  202. data/lib/active_admin/resource/sidebars.rb +3 -2
  203. data/lib/active_admin/resource.rb +37 -22
  204. data/lib/active_admin/resource_collection.rb +3 -2
  205. data/lib/active_admin/resource_controller/action_builder.rb +11 -0
  206. data/lib/active_admin/resource_controller/data_access.rb +35 -5
  207. data/lib/active_admin/resource_controller/decorators.rb +10 -31
  208. data/lib/active_admin/resource_controller/polymorphic_routes.rb +38 -0
  209. data/lib/active_admin/resource_controller/resource_class_methods.rb +3 -0
  210. data/lib/active_admin/resource_controller/scoping.rb +2 -1
  211. data/lib/active_admin/resource_controller/sidebars.rb +1 -0
  212. data/lib/active_admin/resource_controller/streaming.rb +9 -7
  213. data/lib/active_admin/resource_controller.rb +14 -10
  214. data/lib/active_admin/resource_dsl.rb +17 -27
  215. data/lib/active_admin/router.rb +91 -84
  216. data/lib/active_admin/scope.rb +20 -11
  217. data/lib/active_admin/settings_node.rb +20 -0
  218. data/lib/active_admin/sidebar_section.rb +4 -1
  219. data/lib/active_admin/version.rb +2 -1
  220. data/lib/active_admin/view_factory.rb +18 -17
  221. data/lib/active_admin/view_helpers/active_admin_application_helper.rb +1 -0
  222. data/lib/active_admin/view_helpers/auto_link_helper.rb +2 -1
  223. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +6 -5
  224. data/lib/active_admin/view_helpers/display_helper.rb +25 -8
  225. data/lib/active_admin/view_helpers/download_format_links_helper.rb +3 -1
  226. data/lib/active_admin/view_helpers/fields_for.rb +3 -2
  227. data/lib/active_admin/view_helpers/flash_helper.rb +1 -0
  228. data/lib/active_admin/view_helpers/form_helper.rb +1 -0
  229. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +4 -0
  230. data/lib/active_admin/view_helpers/scope_name_helper.rb +1 -0
  231. data/lib/active_admin/view_helpers/sidebar_helper.rb +1 -0
  232. data/lib/active_admin/view_helpers/title_helper.rb +1 -0
  233. data/lib/active_admin/view_helpers/view_factory_helper.rb +1 -0
  234. data/lib/active_admin/view_helpers.rb +2 -1
  235. data/lib/active_admin/views/action_items.rb +1 -0
  236. data/lib/active_admin/views/components/active_admin_form.rb +14 -8
  237. data/lib/active_admin/views/components/active_filters_sidebar_content.rb +59 -0
  238. data/lib/active_admin/views/components/attributes_table.rb +9 -8
  239. data/lib/active_admin/views/components/blank_slate.rb +2 -1
  240. data/lib/active_admin/views/components/columns.rb +1 -0
  241. data/lib/active_admin/views/components/dropdown_menu.rb +7 -9
  242. data/lib/active_admin/views/components/index_list.rb +4 -3
  243. data/lib/active_admin/views/components/menu.rb +33 -0
  244. data/lib/active_admin/views/components/menu_item.rb +59 -0
  245. data/lib/active_admin/views/components/paginated_collection.rb +22 -20
  246. data/lib/active_admin/views/components/panel.rb +2 -1
  247. data/lib/active_admin/views/components/scopes.rb +18 -8
  248. data/lib/active_admin/views/components/sidebar.rb +14 -0
  249. data/lib/active_admin/views/components/sidebar_section.rb +1 -0
  250. data/lib/active_admin/views/components/site_title.rb +7 -7
  251. data/lib/active_admin/views/components/status_tag.rb +14 -26
  252. data/lib/active_admin/views/components/table_for.rb +22 -29
  253. data/lib/active_admin/views/components/tabs.rb +18 -5
  254. data/lib/active_admin/views/components/unsupported_browser.rb +1 -0
  255. data/lib/active_admin/views/footer.rb +6 -8
  256. data/lib/active_admin/views/header.rb +4 -15
  257. data/lib/active_admin/views/index_as_block.rb +1 -0
  258. data/lib/active_admin/views/index_as_blog.rb +3 -2
  259. data/lib/active_admin/views/index_as_grid.rb +27 -26
  260. data/lib/active_admin/views/index_as_table.rb +34 -25
  261. data/lib/active_admin/views/pages/base.rb +47 -62
  262. data/lib/active_admin/views/pages/form.rb +1 -0
  263. data/lib/active_admin/views/pages/index.rb +16 -13
  264. data/lib/active_admin/views/pages/layout.rb +1 -0
  265. data/lib/active_admin/views/pages/page.rb +1 -0
  266. data/lib/active_admin/views/pages/show.rb +1 -0
  267. data/lib/active_admin/views/tabbed_navigation.rb +5 -59
  268. data/lib/active_admin/views/title_bar.rb +2 -1
  269. data/lib/active_admin/views.rb +2 -1
  270. data/lib/active_admin.rb +68 -63
  271. data/lib/activeadmin.rb +2 -1
  272. data/lib/generators/active_admin/assets/assets_generator.rb +3 -2
  273. data/lib/generators/active_admin/assets/templates/active_admin.js +1 -0
  274. data/lib/generators/active_admin/assets/templates/active_admin.scss +2 -2
  275. data/lib/generators/active_admin/devise/devise_generator.rb +6 -5
  276. data/lib/generators/active_admin/install/install_generator.rb +19 -8
  277. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +62 -3
  278. data/lib/generators/active_admin/install/templates/dashboard.rb +3 -3
  279. data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb.erb +1 -15
  280. data/lib/generators/active_admin/page/page_generator.rb +2 -1
  281. data/lib/generators/active_admin/page/templates/page.rb +1 -0
  282. data/lib/generators/active_admin/resource/resource_generator.rb +5 -4
  283. data/lib/generators/active_admin/resource/templates/admin.rb.erb +40 -37
  284. data/lib/generators/active_admin/webpacker/plugins/jquery.js +7 -0
  285. data/lib/generators/active_admin/webpacker/templates/active_admin.js +5 -0
  286. data/lib/generators/active_admin/webpacker/templates/active_admin.scss +17 -0
  287. data/lib/generators/active_admin/webpacker/templates/print.scss +2 -0
  288. data/lib/generators/active_admin/webpacker/webpacker_generator.rb +27 -0
  289. data/lib/ransack_ext.rb +10 -9
  290. data/vendor/assets/javascripts/jquery-ui/form-reset-mixin.js +80 -0
  291. data/vendor/assets/javascripts/jquery-ui/form.js +22 -0
  292. data/vendor/assets/javascripts/jquery-ui/labels.js +65 -0
  293. data/vendor/assets/javascripts/jquery-ui/widgets/checkboxradio.js +274 -283
  294. metadata +123 -595
  295. data/.github/ISSUE_TEMPLATE.md +0 -20
  296. data/.gitignore +0 -49
  297. data/.mdlrc +0 -1
  298. data/.rubocop.yml +0 -76
  299. data/.simplecov +0 -13
  300. data/.travis.yml +0 -51
  301. data/.yardopts +0 -7
  302. data/Gemfile +0 -58
  303. data/Rakefile +0 -54
  304. data/activeadmin.gemspec +0 -32
  305. data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
  306. data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
  307. data/app/assets/images/active_admin/orderable.png +0 -0
  308. data/app/assets/javascripts/active_admin/base.js.coffee +0 -13
  309. data/app/assets/javascripts/active_admin/ext/jquery-ui.js.coffee +0 -6
  310. data/app/assets/javascripts/active_admin/ext/jquery.js.coffee +0 -7
  311. data/app/assets/javascripts/active_admin/initializers/batch_actions.js.coffee +0 -11
  312. data/app/assets/javascripts/active_admin/initializers/datepicker.js.coffee +0 -14
  313. data/app/assets/javascripts/active_admin/initializers/filters.js.coffee +0 -26
  314. data/app/assets/javascripts/active_admin/initializers/tabs.js.coffee +0 -7
  315. data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +0 -42
  316. data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +0 -46
  317. data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +0 -104
  318. data/app/assets/javascripts/active_admin/lib/flash.js.coffee +0 -19
  319. data/app/assets/javascripts/active_admin/lib/has_many.js.coffee +0 -79
  320. data/app/assets/javascripts/active_admin/lib/modal_dialog.js.coffee +0 -45
  321. data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +0 -46
  322. data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +0 -22
  323. data/codecov.yml +0 -25
  324. data/config/i18n-tasks.yml +0 -26
  325. data/config/mdl_style.rb +0 -9
  326. data/cucumber.yml +0 -3
  327. data/docs/0-installation.md +0 -118
  328. data/docs/1-general-configuration.md +0 -189
  329. data/docs/10-custom-pages.md +0 -136
  330. data/docs/11-decorators.md +0 -59
  331. data/docs/12-arbre-components.md +0 -174
  332. data/docs/13-authorization-adapter.md +0 -266
  333. data/docs/14-gotchas.md +0 -138
  334. data/docs/2-resource-customization.md +0 -461
  335. data/docs/3-index-pages/custom-index.md +0 -35
  336. data/docs/3-index-pages/index-as-block.md +0 -19
  337. data/docs/3-index-pages/index-as-blog.md +0 -69
  338. data/docs/3-index-pages/index-as-grid.md +0 -27
  339. data/docs/3-index-pages/index-as-table.md +0 -227
  340. data/docs/3-index-pages.md +0 -311
  341. data/docs/4-csv-format.md +0 -74
  342. data/docs/5-forms.md +0 -218
  343. data/docs/6-show-pages.md +0 -81
  344. data/docs/7-sidebars.md +0 -75
  345. data/docs/8-custom-actions.md +0 -166
  346. data/docs/9-batch-actions.md +0 -237
  347. data/docs/CNAME +0 -1
  348. data/docs/Gemfile +0 -2
  349. data/docs/README.md +0 -24
  350. data/docs/_config.yml +0 -2
  351. data/docs/_includes/footer.html +0 -8
  352. data/docs/_includes/google-analytics.html +0 -16
  353. data/docs/_includes/head.html +0 -7
  354. data/docs/_includes/toc.html +0 -98
  355. data/docs/_includes/top-menu.html +0 -9
  356. data/docs/_layouts/default.html +0 -21
  357. data/docs/documentation.md +0 -60
  358. data/docs/images/activeadmin.png +0 -0
  359. data/docs/images/code-header.png +0 -0
  360. data/docs/images/divider.png +0 -0
  361. data/docs/images/features.png +0 -0
  362. data/docs/index.html +0 -125
  363. data/docs/stylesheets/main.css +0 -1152
  364. data/features/action_item.feature +0 -73
  365. data/features/authorization.feature +0 -64
  366. data/features/authorization_cancan.feature +0 -52
  367. data/features/authorization_pundit.feature +0 -37
  368. data/features/belongs_to.feature +0 -124
  369. data/features/breadcrumb.feature +0 -75
  370. data/features/comments/commenting.feature +0 -178
  371. data/features/comments/viewing_index.feature +0 -19
  372. data/features/create_another.feature +0 -55
  373. data/features/dashboard.feature +0 -16
  374. data/features/decorators.feature +0 -43
  375. data/features/development_reloading.feature +0 -28
  376. data/features/edit_page.feature +0 -116
  377. data/features/favicon.feature +0 -20
  378. data/features/first_boot.feature +0 -16
  379. data/features/footer.feature +0 -28
  380. data/features/global_navigation.feature +0 -29
  381. data/features/i18n.feature +0 -55
  382. data/features/index/batch_actions.feature +0 -218
  383. data/features/index/filters.feature +0 -239
  384. data/features/index/format_as_csv.feature +0 -220
  385. data/features/index/formats.feature +0 -88
  386. data/features/index/index_as_block.feature +0 -15
  387. data/features/index/index_as_blog.feature +0 -69
  388. data/features/index/index_as_grid.feature +0 -45
  389. data/features/index/index_as_table.feature +0 -291
  390. data/features/index/index_blank_slate.feature +0 -83
  391. data/features/index/index_parameters.feature +0 -75
  392. data/features/index/index_scope_to.feature +0 -56
  393. data/features/index/index_scopes.feature +0 -285
  394. data/features/index/page_title.feature +0 -41
  395. data/features/index/pagination.feature +0 -63
  396. data/features/index/switch_index_view.feature +0 -73
  397. data/features/menu.feature +0 -72
  398. data/features/meta_tags.feature +0 -21
  399. data/features/new_page.feature +0 -107
  400. data/features/registering_assets.feature +0 -38
  401. data/features/registering_pages.feature +0 -237
  402. data/features/registering_resources.feature +0 -33
  403. data/features/renamed_resource.feature +0 -30
  404. data/features/root_to.feature +0 -17
  405. data/features/show/attributes_table_title.feature +0 -54
  406. data/features/show/columns.feature +0 -40
  407. data/features/show/default_content.feature +0 -44
  408. data/features/show/page_title.feature +0 -58
  409. data/features/show/tabs.feature +0 -33
  410. data/features/sidebar_sections.feature +0 -210
  411. data/features/site_title.feature +0 -47
  412. data/features/specifying_actions.feature +0 -118
  413. data/features/step_definitions/action_item_steps.rb +0 -7
  414. data/features/step_definitions/action_link_steps.rb +0 -19
  415. data/features/step_definitions/additional_web_steps.rb +0 -81
  416. data/features/step_definitions/asset_steps.rb +0 -15
  417. data/features/step_definitions/attribute_steps.rb +0 -18
  418. data/features/step_definitions/attributes_table_title_steps.rb +0 -11
  419. data/features/step_definitions/batch_action_steps.rb +0 -81
  420. data/features/step_definitions/blog_steps.rb +0 -3
  421. data/features/step_definitions/breadcrumb_steps.rb +0 -3
  422. data/features/step_definitions/column_steps.rb +0 -8
  423. data/features/step_definitions/comment_steps.rb +0 -32
  424. data/features/step_definitions/configuration_steps.rb +0 -100
  425. data/features/step_definitions/dashboard_steps.rb +0 -15
  426. data/features/step_definitions/factory_steps.rb +0 -35
  427. data/features/step_definitions/filter_steps.rb +0 -48
  428. data/features/step_definitions/flash_steps.rb +0 -11
  429. data/features/step_definitions/footer_steps.rb +0 -11
  430. data/features/step_definitions/format_steps.rb +0 -56
  431. data/features/step_definitions/i18n_steps.rb +0 -11
  432. data/features/step_definitions/index_scope_steps.rb +0 -29
  433. data/features/step_definitions/index_views_steps.rb +0 -3
  434. data/features/step_definitions/layout_steps.rb +0 -3
  435. data/features/step_definitions/member_link_steps.rb +0 -7
  436. data/features/step_definitions/menu_steps.rb +0 -11
  437. data/features/step_definitions/meta_tag_steps.rb +0 -3
  438. data/features/step_definitions/pagination_steps.rb +0 -15
  439. data/features/step_definitions/sidebar_steps.rb +0 -11
  440. data/features/step_definitions/site_title_steps.rb +0 -17
  441. data/features/step_definitions/tab_steps.rb +0 -8
  442. data/features/step_definitions/table_steps.rb +0 -116
  443. data/features/step_definitions/user_steps.rb +0 -52
  444. data/features/step_definitions/web_steps.rb +0 -86
  445. data/features/sti_resource.feature +0 -65
  446. data/features/strong_parameters.feature +0 -69
  447. data/features/support/env.rb +0 -122
  448. data/features/support/paths.rb +0 -73
  449. data/features/support/regular_env.rb +0 -7
  450. data/features/support/reload_env.rb +0 -7
  451. data/features/support/selectors.rb +0 -45
  452. data/features/users/logging_in.feature +0 -36
  453. data/features/users/logging_out.feature +0 -13
  454. data/features/users/resetting_password.feature +0 -34
  455. data/gemfiles/rails_42.gemfile +0 -10
  456. data/gemfiles/rails_50.gemfile +0 -10
  457. data/gemfiles/rails_51.gemfile +0 -10
  458. data/lib/active_admin/event.rb +0 -24
  459. data/lib/active_admin/helpers/settings.rb +0 -114
  460. data/lib/active_admin/reloader.rb +0 -25
  461. data/lib/bug_report_templates/active_admin_master.rb +0 -113
  462. data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +0 -1
  463. data/spec/bug_report_templates_spec.rb +0 -26
  464. data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +0 -50
  465. data/spec/javascripts/coffeescripts/jquery.aa.flash.js.coffee +0 -25
  466. data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +0 -34
  467. data/spec/javascripts/fixtures/checkboxes.html +0 -9
  468. data/spec/javascripts/fixtures/flashes.html +0 -2
  469. data/spec/javascripts/fixtures/table_checkboxes.html +0 -17
  470. data/spec/javascripts/helpers/SpecHelper.js +0 -3
  471. data/spec/javascripts/support/jasmine.yml +0 -74
  472. data/spec/javascripts/support/jasmine_runner.rb +0 -19
  473. data/spec/rails_helper.rb +0 -59
  474. data/spec/requests/default_namespace_spec.rb +0 -81
  475. data/spec/requests/memory_spec.rb +0 -25
  476. data/spec/requests/stylesheets_spec.rb +0 -18
  477. data/spec/spec_helper.rb +0 -1
  478. data/spec/support/active_admin_integration_spec_helper.rb +0 -73
  479. data/spec/support/active_admin_request_helpers.rb +0 -39
  480. data/spec/support/rails_template.rb +0 -150
  481. data/spec/support/rails_template_with_data.rb +0 -327
  482. data/spec/support/templates/admin/stores.rb +0 -7
  483. data/spec/support/templates/en.yml +0 -8
  484. data/spec/support/templates/manifest.js +0 -3
  485. data/spec/support/templates/policies/active_admin/comment_policy.rb +0 -9
  486. data/spec/support/templates/policies/active_admin/page_policy.rb +0 -18
  487. data/spec/support/templates/policies/admin_user_policy.rb +0 -11
  488. data/spec/support/templates/policies/application_policy.rb +0 -44
  489. data/spec/support/templates/policies/category_policy.rb +0 -7
  490. data/spec/support/templates/policies/post_policy.rb +0 -15
  491. data/spec/support/templates/policies/store_policy.rb +0 -11
  492. data/spec/support/templates/policies/user_policy.rb +0 -11
  493. data/spec/support/templates/post_decorator.rb +0 -10
  494. data/spec/unit/abstract_view_factory_spec.rb +0 -78
  495. data/spec/unit/action_builder_spec.rb +0 -125
  496. data/spec/unit/active_admin_spec.rb +0 -11
  497. data/spec/unit/application_spec.rb +0 -184
  498. data/spec/unit/asset_registration_spec.rb +0 -81
  499. data/spec/unit/authorization/authorization_adapter_spec.rb +0 -61
  500. data/spec/unit/authorization/controller_authorization_spec.rb +0 -43
  501. data/spec/unit/authorization/index_overriding_spec.rb +0 -23
  502. data/spec/unit/auto_link_spec.rb +0 -93
  503. data/spec/unit/batch_actions/resource_spec.rb +0 -84
  504. data/spec/unit/batch_actions/settings_spec.rb +0 -61
  505. data/spec/unit/belongs_to_spec.rb +0 -76
  506. data/spec/unit/cancan_adapter_spec.rb +0 -43
  507. data/spec/unit/comments_spec.rb +0 -176
  508. data/spec/unit/component_spec.rb +0 -18
  509. data/spec/unit/config_shared_examples.rb +0 -59
  510. data/spec/unit/controller_filters_spec.rb +0 -41
  511. data/spec/unit/csv_builder_spec.rb +0 -304
  512. data/spec/unit/dependency_spec.rb +0 -135
  513. data/spec/unit/devise_spec.rb +0 -110
  514. data/spec/unit/dsl_spec.rb +0 -120
  515. data/spec/unit/filters/active_filter_spec.rb +0 -135
  516. data/spec/unit/filters/active_spec.rb +0 -24
  517. data/spec/unit/filters/filter_form_builder_spec.rb +0 -502
  518. data/spec/unit/filters/resource_spec.rb +0 -128
  519. data/spec/unit/form_builder_spec.rb +0 -990
  520. data/spec/unit/generators/install_spec.rb +0 -31
  521. data/spec/unit/helpers/collection_spec.rb +0 -68
  522. data/spec/unit/helpers/scope_chain_spec.rb +0 -35
  523. data/spec/unit/helpers/settings_spec.rb +0 -30
  524. data/spec/unit/i18n_spec.rb +0 -29
  525. data/spec/unit/localizers/resource_localizer_spec.rb +0 -36
  526. data/spec/unit/menu_collection_spec.rb +0 -62
  527. data/spec/unit/menu_item_spec.rb +0 -141
  528. data/spec/unit/menu_spec.rb +0 -71
  529. data/spec/unit/namespace/authorization_spec.rb +0 -27
  530. data/spec/unit/namespace/register_page_spec.rb +0 -99
  531. data/spec/unit/namespace/register_resource_spec.rb +0 -162
  532. data/spec/unit/namespace_spec.rb +0 -124
  533. data/spec/unit/order_clause_spec.rb +0 -81
  534. data/spec/unit/page_controller_spec.rb +0 -5
  535. data/spec/unit/page_spec.rb +0 -128
  536. data/spec/unit/pretty_format_spec.rb +0 -82
  537. data/spec/unit/pundit_adapter_spec.rb +0 -98
  538. data/spec/unit/resource/action_items_spec.rb +0 -69
  539. data/spec/unit/resource/attributes_spec.rb +0 -49
  540. data/spec/unit/resource/includes_spec.rb +0 -21
  541. data/spec/unit/resource/menu_spec.rb +0 -18
  542. data/spec/unit/resource/naming_spec.rb +0 -122
  543. data/spec/unit/resource/ordering_spec.rb +0 -35
  544. data/spec/unit/resource/page_presenters_spec.rb +0 -44
  545. data/spec/unit/resource/pagination_spec.rb +0 -38
  546. data/spec/unit/resource/routes_spec.rb +0 -125
  547. data/spec/unit/resource/scopes_spec.rb +0 -50
  548. data/spec/unit/resource/sidebars_spec.rb +0 -43
  549. data/spec/unit/resource_collection_spec.rb +0 -175
  550. data/spec/unit/resource_controller/data_access_spec.rb +0 -230
  551. data/spec/unit/resource_controller/decorators_spec.rb +0 -94
  552. data/spec/unit/resource_controller/sidebars_spec.rb +0 -37
  553. data/spec/unit/resource_controller_spec.rb +0 -273
  554. data/spec/unit/resource_registration_spec.rb +0 -61
  555. data/spec/unit/resource_spec.rb +0 -320
  556. data/spec/unit/routing_spec.rb +0 -211
  557. data/spec/unit/scope_spec.rb +0 -209
  558. data/spec/unit/settings_spec.rb +0 -117
  559. data/spec/unit/view_factory_spec.rb +0 -19
  560. data/spec/unit/view_helpers/breadcrumbs_spec.rb +0 -252
  561. data/spec/unit/view_helpers/display_helper_spec.rb +0 -195
  562. data/spec/unit/view_helpers/download_format_links_helper_spec.rb +0 -39
  563. data/spec/unit/view_helpers/fields_for_spec.rb +0 -50
  564. data/spec/unit/view_helpers/flash_helper_spec.rb +0 -24
  565. data/spec/unit/view_helpers/form_helper_spec.rb +0 -42
  566. data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +0 -138
  567. data/spec/unit/views/components/attributes_table_spec.rb +0 -271
  568. data/spec/unit/views/components/batch_action_selector_spec.rb +0 -43
  569. data/spec/unit/views/components/blank_slate_spec.rb +0 -27
  570. data/spec/unit/views/components/columns_spec.rb +0 -187
  571. data/spec/unit/views/components/index_list_spec.rb +0 -49
  572. data/spec/unit/views/components/index_table_for_spec.rb +0 -127
  573. data/spec/unit/views/components/paginated_collection_spec.rb +0 -249
  574. data/spec/unit/views/components/panel_spec.rb +0 -58
  575. data/spec/unit/views/components/sidebar_section_spec.rb +0 -68
  576. data/spec/unit/views/components/site_title_spec.rb +0 -76
  577. data/spec/unit/views/components/status_tag_spec.rb +0 -265
  578. data/spec/unit/views/components/table_for_spec.rb +0 -436
  579. data/spec/unit/views/components/tabs_spec.rb +0 -67
  580. data/spec/unit/views/components/unsupported_browser_spec.rb +0 -41
  581. data/spec/unit/views/index_as_blog_spec.rb +0 -76
  582. data/spec/unit/views/pages/form_spec.rb +0 -54
  583. data/spec/unit/views/pages/index_spec.rb +0 -60
  584. data/spec/unit/views/pages/layout_spec.rb +0 -59
  585. data/spec/unit/views/pages/show_spec.rb +0 -32
  586. data/spec/unit/views/tabbed_navigation_spec.rb +0 -158
  587. data/tasks/docs.rake +0 -64
  588. data/tasks/lint.rake +0 -21
  589. data/tasks/local.rake +0 -25
  590. data/tasks/parallel_tests.rake +0 -66
  591. data/tasks/test.rake +0 -29
  592. /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