activeadmin-rails 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (584) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +64 -0
  3. data/.github/ISSUE_TEMPLATE.md +20 -0
  4. data/.github/workflows/ci.yaml +64 -0
  5. data/.github/workflows/daily.yaml +64 -0
  6. data/.github/workflows/pages.yml +72 -0
  7. data/.gitignore +23 -0
  8. data/.mdlrc +1 -0
  9. data/.rubocop.yml +84 -0
  10. data/.simplecov +13 -0
  11. data/.yardopts +7 -0
  12. data/CHANGELOG.md +514 -0
  13. data/CODE_OF_CONDUCT.md +22 -0
  14. data/CONTRIBUTING.md +190 -0
  15. data/Gemfile +51 -0
  16. data/LICENSE +20 -0
  17. data/README.md +84 -0
  18. data/Rakefile +56 -0
  19. data/activeadmin-rails.gemspec +39 -0
  20. data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
  21. data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
  22. data/app/assets/images/active_admin/orderable.png +0 -0
  23. data/app/assets/javascripts/active_admin/base.es6 +23 -0
  24. data/app/assets/javascripts/active_admin/ext/jquery-ui.es6 +7 -0
  25. data/app/assets/javascripts/active_admin/ext/jquery.es6 +9 -0
  26. data/app/assets/javascripts/active_admin/initializers/datepicker.es6 +16 -0
  27. data/app/assets/javascripts/active_admin/initializers/filters.es6 +45 -0
  28. data/app/assets/javascripts/active_admin/initializers/tabs.es6 +6 -0
  29. data/app/assets/javascripts/active_admin/lib/active_admin.es6 +41 -0
  30. data/app/assets/javascripts/active_admin/lib/batch_actions.es6 +59 -0
  31. data/app/assets/javascripts/active_admin/lib/checkbox-toggler.es6 +49 -0
  32. data/app/assets/javascripts/active_admin/lib/dropdown-menu.es6 +123 -0
  33. data/app/assets/javascripts/active_admin/lib/has_many.es6 +89 -0
  34. data/app/assets/javascripts/active_admin/lib/modal_dialog.es6 +61 -0
  35. data/app/assets/javascripts/active_admin/lib/per_page.es6 +47 -0
  36. data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.es6 +36 -0
  37. data/app/assets/stylesheets/active_admin/_base.scss +41 -0
  38. data/app/assets/stylesheets/active_admin/_forms.scss +338 -0
  39. data/app/assets/stylesheets/active_admin/_header.scss +156 -0
  40. data/app/assets/stylesheets/active_admin/_mixins.scss +1 -0
  41. data/app/assets/stylesheets/active_admin/_typography.scss +100 -0
  42. data/app/assets/stylesheets/active_admin/components/_batch_actions.scss +6 -0
  43. data/app/assets/stylesheets/active_admin/components/_blank_slates.scss +30 -0
  44. data/app/assets/stylesheets/active_admin/components/_breadcrumbs.scss +20 -0
  45. data/app/assets/stylesheets/active_admin/components/_buttons.scss +6 -0
  46. data/app/assets/stylesheets/active_admin/components/_columns.scss +3 -0
  47. data/app/assets/stylesheets/active_admin/components/_comments.scss +41 -0
  48. data/app/assets/stylesheets/active_admin/components/_date_picker.scss +149 -0
  49. data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +152 -0
  50. data/app/assets/stylesheets/active_admin/components/_flash_messages.scss +37 -0
  51. data/app/assets/stylesheets/active_admin/components/_grid.scss +9 -0
  52. data/app/assets/stylesheets/active_admin/components/_index_list.scss +12 -0
  53. data/app/assets/stylesheets/active_admin/components/_links.scss +5 -0
  54. data/app/assets/stylesheets/active_admin/components/_modal_dialog.scss +34 -0
  55. data/app/assets/stylesheets/active_admin/components/_pagination.scss +55 -0
  56. data/app/assets/stylesheets/active_admin/components/_panels.scss +6 -0
  57. data/app/assets/stylesheets/active_admin/components/_scopes.scss +13 -0
  58. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +17 -0
  59. data/app/assets/stylesheets/active_admin/components/_table_tools.scss +67 -0
  60. data/app/assets/stylesheets/active_admin/components/_tables.scss +113 -0
  61. data/app/assets/stylesheets/active_admin/components/_tabs.scss +65 -0
  62. data/app/assets/stylesheets/active_admin/components/_unsupported_browser.scss +16 -0
  63. data/app/assets/stylesheets/active_admin/mixins/_all.scss +8 -0
  64. data/app/assets/stylesheets/active_admin/mixins/_buttons.scss +65 -0
  65. data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +28 -0
  66. data/app/assets/stylesheets/active_admin/mixins/_rounded.scss +22 -0
  67. data/app/assets/stylesheets/active_admin/mixins/_sections.scss +41 -0
  68. data/app/assets/stylesheets/active_admin/mixins/_shadows.scss +15 -0
  69. data/app/assets/stylesheets/active_admin/mixins/_typography.scss +3 -0
  70. data/app/assets/stylesheets/active_admin/mixins/_utilities.scss +17 -0
  71. data/app/assets/stylesheets/active_admin/mixins/_variables.scss +34 -0
  72. data/app/assets/stylesheets/active_admin/pages/_logged_out.scss +44 -0
  73. data/app/assets/stylesheets/active_admin/print.scss +287 -0
  74. data/app/assets/stylesheets/active_admin/structure/_footer.scss +14 -0
  75. data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +29 -0
  76. data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +41 -0
  77. data/app/views/active_admin/_head.html.erb +14 -0
  78. data/app/views/active_admin/base/_action_items.html.arb +7 -0
  79. data/app/views/active_admin/base/_breadcrumbs.html.arb +8 -0
  80. data/app/views/active_admin/base/_footer.html.arb +11 -0
  81. data/app/views/active_admin/base/_header.html.arb +5 -0
  82. data/app/views/active_admin/base/_sidebar.html.arb +3 -0
  83. data/app/views/active_admin/base/_title_bar.html.arb +9 -0
  84. data/app/views/active_admin/base/_unsupported_browser.html.erb +5 -0
  85. data/app/views/active_admin/devise/confirmations/new.html.erb +15 -0
  86. data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +8 -0
  87. data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +7 -0
  88. data/app/views/active_admin/devise/passwords/edit.html.erb +18 -0
  89. data/app/views/active_admin/devise/passwords/new.html.erb +15 -0
  90. data/app/views/active_admin/devise/registrations/new.html.erb +22 -0
  91. data/app/views/active_admin/devise/sessions/new.html.erb +20 -0
  92. data/app/views/active_admin/devise/shared/_error_messages.html.erb +15 -0
  93. data/app/views/active_admin/devise/shared/_links.erb +33 -0
  94. data/app/views/active_admin/devise/unlocks/new.html.erb +15 -0
  95. data/app/views/active_admin/page/_content.html.arb +1 -0
  96. data/app/views/active_admin/page/index.html.arb +8 -0
  97. data/app/views/active_admin/resource/_filters_form.html.erb +1 -0
  98. data/app/views/active_admin/resource/_form.html.arb +11 -0
  99. data/app/views/active_admin/resource/_index_as_table.html.arb +8 -0
  100. data/app/views/active_admin/resource/_show.html.arb +1 -0
  101. data/app/views/active_admin/resource/edit.html.arb +13 -0
  102. data/app/views/active_admin/resource/index.html.arb +101 -0
  103. data/app/views/active_admin/resource/new.html.arb +13 -0
  104. data/app/views/active_admin/resource/show.html.arb +22 -0
  105. data/app/views/kaminari/active_admin/_first_page.html.erb +11 -0
  106. data/app/views/kaminari/active_admin/_gap.html.erb +8 -0
  107. data/app/views/kaminari/active_admin/_last_page.html.erb +11 -0
  108. data/app/views/kaminari/active_admin/_next_page.html.erb +11 -0
  109. data/app/views/kaminari/active_admin/_page.html.erb +12 -0
  110. data/app/views/kaminari/active_admin/_paginator.html.erb +25 -0
  111. data/app/views/kaminari/active_admin/_prev_page.html.erb +11 -0
  112. data/app/views/layouts/active_admin.html.erb +33 -0
  113. data/app/views/layouts/active_admin_logged_out.html.erb +39 -0
  114. data/codecov.yml +25 -0
  115. data/config/i18n-tasks.yml +26 -0
  116. data/config/locales/ar.yml +133 -0
  117. data/config/locales/bg.yml +118 -0
  118. data/config/locales/bs.yml +119 -0
  119. data/config/locales/ca.yml +104 -0
  120. data/config/locales/cs.yml +107 -0
  121. data/config/locales/da.yml +135 -0
  122. data/config/locales/de-CH.yml +99 -0
  123. data/config/locales/de.yml +142 -0
  124. data/config/locales/el.yml +124 -0
  125. data/config/locales/en-CA.yml +137 -0
  126. data/config/locales/en-GB.yml +137 -0
  127. data/config/locales/en.yml +160 -0
  128. data/config/locales/eo.yml +143 -0
  129. data/config/locales/es-MX.yml +94 -0
  130. data/config/locales/es.yml +160 -0
  131. data/config/locales/fa.yml +117 -0
  132. data/config/locales/fi.yml +110 -0
  133. data/config/locales/fr.yml +139 -0
  134. data/config/locales/he.yml +140 -0
  135. data/config/locales/hr.yml +121 -0
  136. data/config/locales/hu.yml +96 -0
  137. data/config/locales/id.yml +133 -0
  138. data/config/locales/it.yml +142 -0
  139. data/config/locales/ja.yml +139 -0
  140. data/config/locales/ko.yml +118 -0
  141. data/config/locales/lt.yml +140 -0
  142. data/config/locales/lv.yml +90 -0
  143. data/config/locales/nb.yml +128 -0
  144. data/config/locales/nl.yml +142 -0
  145. data/config/locales/pl.yml +166 -0
  146. data/config/locales/pt-BR.yml +141 -0
  147. data/config/locales/pt-PT.yml +90 -0
  148. data/config/locales/ro.yml +94 -0
  149. data/config/locales/ru.yml +139 -0
  150. data/config/locales/sk.yml +107 -0
  151. data/config/locales/sv-SE.yml +133 -0
  152. data/config/locales/tr.yml +142 -0
  153. data/config/locales/uk.yml +134 -0
  154. data/config/locales/vi.yml +132 -0
  155. data/config/locales/zh-CN.yml +141 -0
  156. data/config/locales/zh-TW.yml +133 -0
  157. data/config/mdl_style.rb +9 -0
  158. data/cucumber.yml +6 -0
  159. data/docs/0-installation.md +121 -0
  160. data/docs/1-general-configuration.md +207 -0
  161. data/docs/10-custom-pages.md +148 -0
  162. data/docs/11-decorators.md +66 -0
  163. data/docs/12-arbo-components.md +200 -0
  164. data/docs/13-authorization-adapter.md +288 -0
  165. data/docs/14-gotchas.md +141 -0
  166. data/docs/2-resource-customization.md +480 -0
  167. data/docs/3-index-pages/custom-index.md +39 -0
  168. data/docs/3-index-pages/index-as-block.md +23 -0
  169. data/docs/3-index-pages/index-as-blog.md +73 -0
  170. data/docs/3-index-pages/index-as-grid.md +31 -0
  171. data/docs/3-index-pages/index-as-table.md +259 -0
  172. data/docs/3-index-pages.md +349 -0
  173. data/docs/4-csv-format.md +86 -0
  174. data/docs/5-forms.md +233 -0
  175. data/docs/6-show-pages.md +61 -0
  176. data/docs/7-sidebars.md +63 -0
  177. data/docs/8-custom-actions.md +160 -0
  178. data/docs/9-batch-actions.md +248 -0
  179. data/docs/CNAME +1 -0
  180. data/docs/Gemfile +7 -0
  181. data/docs/README.md +24 -0
  182. data/docs/_config.yml +15 -0
  183. data/docs/_includes/nav_footer_custom.html +3 -0
  184. data/docs/documentation.md +61 -0
  185. data/docs/images/activeadmin.png +0 -0
  186. data/docs/images/divider.png +0 -0
  187. data/docs/images/features.png +0 -0
  188. data/docs/index.css +835 -0
  189. data/docs/index.html +105 -0
  190. data/features/action_item.feature +73 -0
  191. data/features/authorization.feature +64 -0
  192. data/features/authorization_cancan.feature +52 -0
  193. data/features/authorization_pundit.feature +37 -0
  194. data/features/belongs_to.feature +124 -0
  195. data/features/breadcrumb.feature +76 -0
  196. data/features/comments/commenting.feature +178 -0
  197. data/features/comments/viewing_index.feature +18 -0
  198. data/features/create_another.feature +55 -0
  199. data/features/dashboard.feature +16 -0
  200. data/features/decorators.feature +43 -0
  201. data/features/development_reloading.feature +28 -0
  202. data/features/edit_page.feature +116 -0
  203. data/features/favicon.feature +20 -0
  204. data/features/filter_attributes.feature +46 -0
  205. data/features/first_boot.feature +16 -0
  206. data/features/footer.feature +29 -0
  207. data/features/global_navigation.feature +29 -0
  208. data/features/i18n.feature +55 -0
  209. data/features/index/batch_actions.feature +218 -0
  210. data/features/index/filters.feature +251 -0
  211. data/features/index/format_as_csv.feature +273 -0
  212. data/features/index/formats.feature +88 -0
  213. data/features/index/index_as_block.feature +15 -0
  214. data/features/index/index_as_blog.feature +69 -0
  215. data/features/index/index_as_grid.feature +45 -0
  216. data/features/index/index_as_table.feature +291 -0
  217. data/features/index/index_blank_slate.feature +83 -0
  218. data/features/index/index_parameters.feature +75 -0
  219. data/features/index/index_scope_to.feature +56 -0
  220. data/features/index/index_scopes.feature +325 -0
  221. data/features/index/page_title.feature +41 -0
  222. data/features/index/pagination.feature +63 -0
  223. data/features/index/switch_index_view.feature +73 -0
  224. data/features/menu.feature +85 -0
  225. data/features/meta_tags.feature +21 -0
  226. data/features/new_page.feature +136 -0
  227. data/features/registering_assets.feature +34 -0
  228. data/features/registering_pages.feature +237 -0
  229. data/features/registering_resources.feature +33 -0
  230. data/features/renamed_resource.feature +29 -0
  231. data/features/root_to.feature +18 -0
  232. data/features/show/attributes_table_title.feature +54 -0
  233. data/features/show/columns.feature +40 -0
  234. data/features/show/default_content.feature +44 -0
  235. data/features/show/page_title.feature +58 -0
  236. data/features/show/tabs.feature +47 -0
  237. data/features/sidebar_sections.feature +210 -0
  238. data/features/site_title.feature +47 -0
  239. data/features/specifying_actions.feature +118 -0
  240. data/features/step_definitions/action_item_steps.rb +7 -0
  241. data/features/step_definitions/action_link_steps.rb +19 -0
  242. data/features/step_definitions/additional_web_steps.rb +81 -0
  243. data/features/step_definitions/asset_steps.rb +15 -0
  244. data/features/step_definitions/attribute_steps.rb +18 -0
  245. data/features/step_definitions/attributes_table_title_steps.rb +11 -0
  246. data/features/step_definitions/batch_action_steps.rb +78 -0
  247. data/features/step_definitions/blog_steps.rb +3 -0
  248. data/features/step_definitions/breadcrumb_steps.rb +13 -0
  249. data/features/step_definitions/column_steps.rb +8 -0
  250. data/features/step_definitions/comment_steps.rb +32 -0
  251. data/features/step_definitions/configuration_steps.rb +102 -0
  252. data/features/step_definitions/dashboard_steps.rb +15 -0
  253. data/features/step_definitions/factory_steps.rb +35 -0
  254. data/features/step_definitions/filter_steps.rb +57 -0
  255. data/features/step_definitions/flash_steps.rb +11 -0
  256. data/features/step_definitions/footer_steps.rb +21 -0
  257. data/features/step_definitions/format_steps.rb +60 -0
  258. data/features/step_definitions/i18n_steps.rb +11 -0
  259. data/features/step_definitions/index_scope_steps.rb +42 -0
  260. data/features/step_definitions/index_views_steps.rb +3 -0
  261. data/features/step_definitions/layout_steps.rb +3 -0
  262. data/features/step_definitions/member_link_steps.rb +7 -0
  263. data/features/step_definitions/menu_steps.rb +11 -0
  264. data/features/step_definitions/meta_tag_steps.rb +3 -0
  265. data/features/step_definitions/pagination_steps.rb +15 -0
  266. data/features/step_definitions/root_steps.rb +9 -0
  267. data/features/step_definitions/sidebar_steps.rb +11 -0
  268. data/features/step_definitions/site_title_steps.rb +31 -0
  269. data/features/step_definitions/tab_steps.rb +17 -0
  270. data/features/step_definitions/table_steps.rb +116 -0
  271. data/features/step_definitions/user_steps.rb +52 -0
  272. data/features/step_definitions/web_steps.rb +86 -0
  273. data/features/sti_resource.feature +65 -0
  274. data/features/strong_parameters.feature +69 -0
  275. data/features/support/env.rb +129 -0
  276. data/features/support/paths.rb +75 -0
  277. data/features/support/regular_env.rb +7 -0
  278. data/features/support/reload_env.rb +7 -0
  279. data/features/support/selectors.rb +45 -0
  280. data/features/users/logging_in.feature +32 -0
  281. data/features/users/logging_out.feature +29 -0
  282. data/features/users/resetting_password.feature +30 -0
  283. data/gemfiles/rails_42.gemfile +12 -0
  284. data/gemfiles/rails_52.gemfile +15 -0
  285. data/gemfiles/rails_60.gemfile +16 -0
  286. data/gemfiles/rails_61.gemfile +15 -0
  287. data/gemfiles/rails_61_turbolinks.gemfile +15 -0
  288. data/gemfiles/rails_70.gemfile +15 -0
  289. data/gemfiles/rails_70_hotwire.gemfile +15 -0
  290. data/gemfiles/rails_71.gemfile +17 -0
  291. data/lib/active_admin/abstract_view_factory.rb +47 -0
  292. data/lib/active_admin/application.rb +255 -0
  293. data/lib/active_admin/application_settings.rb +42 -0
  294. data/lib/active_admin/asset_registration.rb +29 -0
  295. data/lib/active_admin/authorization_adapter.rb +129 -0
  296. data/lib/active_admin/base_controller/authorization.rb +126 -0
  297. data/lib/active_admin/base_controller/menu.rb +34 -0
  298. data/lib/active_admin/base_controller.rb +91 -0
  299. data/lib/active_admin/batch_actions/controller.rb +45 -0
  300. data/lib/active_admin/batch_actions/resource_extension.rb +151 -0
  301. data/lib/active_admin/batch_actions/views/batch_action_form.rb +45 -0
  302. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +58 -0
  303. data/lib/active_admin/batch_actions/views/selection_cells.rb +38 -0
  304. data/lib/active_admin/batch_actions.rb +16 -0
  305. data/lib/active_admin/callbacks.rb +88 -0
  306. data/lib/active_admin/cancan_adapter.rb +36 -0
  307. data/lib/active_admin/component.rb +5 -0
  308. data/lib/active_admin/controller_action.rb +12 -0
  309. data/lib/active_admin/csv_builder.rb +136 -0
  310. data/lib/active_admin/dependency.rb +96 -0
  311. data/lib/active_admin/deprecation.rb +10 -0
  312. data/lib/active_admin/devise.rb +80 -0
  313. data/lib/active_admin/dsl.rb +193 -0
  314. data/lib/active_admin/dynamic_setting.rb +38 -0
  315. data/lib/active_admin/dynamic_settings_node.rb +28 -0
  316. data/lib/active_admin/engine.rb +22 -0
  317. data/lib/active_admin/error.rb +62 -0
  318. data/lib/active_admin/event.rb +24 -0
  319. data/lib/active_admin/filters/active.rb +29 -0
  320. data/lib/active_admin/filters/active_filter.rb +123 -0
  321. data/lib/active_admin/filters/active_sidebar.rb +50 -0
  322. data/lib/active_admin/filters/dsl.rb +21 -0
  323. data/lib/active_admin/filters/forms.rb +85 -0
  324. data/lib/active_admin/filters/formtastic_addons.rb +79 -0
  325. data/lib/active_admin/filters/resource_extension.rb +153 -0
  326. data/lib/active_admin/filters.rb +11 -0
  327. data/lib/active_admin/form_builder.rb +182 -0
  328. data/lib/active_admin/generators/boilerplate.rb +45 -0
  329. data/lib/active_admin/helpers/collection.rb +19 -0
  330. data/lib/active_admin/helpers/i18n.rb +7 -0
  331. data/lib/active_admin/helpers/optional_display.rb +38 -0
  332. data/lib/active_admin/helpers/routes/url_helpers.rb +15 -0
  333. data/lib/active_admin/helpers/scope_chain.rb +23 -0
  334. data/lib/active_admin/inputs/datepicker_input.rb +27 -0
  335. data/lib/active_admin/inputs/filters/base/search_method_select.rb +75 -0
  336. data/lib/active_admin/inputs/filters/base.rb +44 -0
  337. data/lib/active_admin/inputs/filters/boolean_input.rb +24 -0
  338. data/lib/active_admin/inputs/filters/check_boxes_input.rb +50 -0
  339. data/lib/active_admin/inputs/filters/date_picker_input.rb +13 -0
  340. data/lib/active_admin/inputs/filters/date_range_input.rb +49 -0
  341. data/lib/active_admin/inputs/filters/numeric_input.rb +12 -0
  342. data/lib/active_admin/inputs/filters/select_input.rb +58 -0
  343. data/lib/active_admin/inputs/filters/string_input.rb +26 -0
  344. data/lib/active_admin/inputs/filters/text_input.rb +25 -0
  345. data/lib/active_admin/inputs.rb +21 -0
  346. data/lib/active_admin/localizers/resource_localizer.rb +35 -0
  347. data/lib/active_admin/localizers.rb +11 -0
  348. data/lib/active_admin/menu.rb +106 -0
  349. data/lib/active_admin/menu_collection.rb +55 -0
  350. data/lib/active_admin/menu_item.rb +79 -0
  351. data/lib/active_admin/namespace.rb +325 -0
  352. data/lib/active_admin/namespace_settings.rb +107 -0
  353. data/lib/active_admin/order_clause.rb +48 -0
  354. data/lib/active_admin/orm/active_record/comments/comment.rb +35 -0
  355. data/lib/active_admin/orm/active_record/comments/namespace_helper.rb +14 -0
  356. data/lib/active_admin/orm/active_record/comments/resource_helper.rb +17 -0
  357. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +95 -0
  358. data/lib/active_admin/orm/active_record/comments/views.rb +2 -0
  359. data/lib/active_admin/orm/active_record/comments.rb +99 -0
  360. data/lib/active_admin/orm/active_record.rb +5 -0
  361. data/lib/active_admin/orm/mongoid/.gitkeep +0 -0
  362. data/lib/active_admin/orm/mongoid.rb +1 -0
  363. data/lib/active_admin/page.rb +114 -0
  364. data/lib/active_admin/page_controller.rb +29 -0
  365. data/lib/active_admin/page_dsl.rb +35 -0
  366. data/lib/active_admin/page_presenter.rb +32 -0
  367. data/lib/active_admin/pundit_adapter.rb +68 -0
  368. data/lib/active_admin/resource/action_items.rb +120 -0
  369. data/lib/active_admin/resource/attributes.rb +47 -0
  370. data/lib/active_admin/resource/belongs_to.rb +48 -0
  371. data/lib/active_admin/resource/controllers.rb +19 -0
  372. data/lib/active_admin/resource/includes.rb +12 -0
  373. data/lib/active_admin/resource/menu.rb +65 -0
  374. data/lib/active_admin/resource/naming.rb +62 -0
  375. data/lib/active_admin/resource/ordering.rb +11 -0
  376. data/lib/active_admin/resource/page_presenters.rb +90 -0
  377. data/lib/active_admin/resource/pagination.rb +23 -0
  378. data/lib/active_admin/resource/routes.rb +134 -0
  379. data/lib/active_admin/resource/scope_to.rb +74 -0
  380. data/lib/active_admin/resource/scopes.rb +52 -0
  381. data/lib/active_admin/resource/sidebars.rb +32 -0
  382. data/lib/active_admin/resource.rb +215 -0
  383. data/lib/active_admin/resource_collection.rb +72 -0
  384. data/lib/active_admin/resource_controller/action_builder.rb +21 -0
  385. data/lib/active_admin/resource_controller/data_access.rb +341 -0
  386. data/lib/active_admin/resource_controller/decorators.rb +102 -0
  387. data/lib/active_admin/resource_controller/resource_class_methods.rb +24 -0
  388. data/lib/active_admin/resource_controller/scoping.rb +31 -0
  389. data/lib/active_admin/resource_controller/sidebars.rb +18 -0
  390. data/lib/active_admin/resource_controller/streaming.rb +47 -0
  391. data/lib/active_admin/resource_controller.rb +116 -0
  392. data/lib/active_admin/resource_dsl.rb +221 -0
  393. data/lib/active_admin/router.rb +113 -0
  394. data/lib/active_admin/scope.rb +60 -0
  395. data/lib/active_admin/settings_node.rb +19 -0
  396. data/lib/active_admin/sidebar_section.rb +37 -0
  397. data/lib/active_admin/version.rb +3 -0
  398. data/lib/active_admin/view_factory.rb +10 -0
  399. data/lib/active_admin/view_helpers/active_admin_application_helper.rb +12 -0
  400. data/lib/active_admin/view_helpers/auto_link_helper.rb +45 -0
  401. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +52 -0
  402. data/lib/active_admin/view_helpers/display_helper.rb +95 -0
  403. data/lib/active_admin/view_helpers/download_format_links_helper.rb +58 -0
  404. data/lib/active_admin/view_helpers/fields_for.rb +50 -0
  405. data/lib/active_admin/view_helpers/flash_helper.rb +14 -0
  406. data/lib/active_admin/view_helpers/form_helper.rb +20 -0
  407. data/lib/active_admin/view_helpers/layout_helper.rb +32 -0
  408. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +97 -0
  409. data/lib/active_admin/view_helpers/scope_name_helper.rb +16 -0
  410. data/lib/active_admin/view_helpers/sidebar_helper.rb +15 -0
  411. data/lib/active_admin/view_helpers/title_helper.rb +11 -0
  412. data/lib/active_admin/view_helpers/view_factory_helper.rb +11 -0
  413. data/lib/active_admin/view_helpers.rb +21 -0
  414. data/lib/active_admin/views/components/action_link.rb +13 -0
  415. data/lib/active_admin/views/components/active_admin_form.rb +163 -0
  416. data/lib/active_admin/views/components/attributes_panel.rb +23 -0
  417. data/lib/active_admin/views/components/attributes_table.rb +94 -0
  418. data/lib/active_admin/views/components/blank_slate.rb +17 -0
  419. data/lib/active_admin/views/components/columns.rb +161 -0
  420. data/lib/active_admin/views/components/dropdown_menu.rb +71 -0
  421. data/lib/active_admin/views/components/index_list.rb +69 -0
  422. data/lib/active_admin/views/components/menu.rb +32 -0
  423. data/lib/active_admin/views/components/menu_item.rb +58 -0
  424. data/lib/active_admin/views/components/paginated_collection.rb +159 -0
  425. data/lib/active_admin/views/components/panel.rb +38 -0
  426. data/lib/active_admin/views/components/scopes.rb +72 -0
  427. data/lib/active_admin/views/components/sidebar_section.rb +34 -0
  428. data/lib/active_admin/views/components/site_title.rb +28 -0
  429. data/lib/active_admin/views/components/status_tag.rb +88 -0
  430. data/lib/active_admin/views/components/table_for.rb +209 -0
  431. data/lib/active_admin/views/components/tabs.rb +40 -0
  432. data/lib/active_admin/views/index_as_block.rb +36 -0
  433. data/lib/active_admin/views/index_as_blog.rb +155 -0
  434. data/lib/active_admin/views/index_as_grid.rb +80 -0
  435. data/lib/active_admin/views/index_as_table.rb +377 -0
  436. data/lib/active_admin/views.rb +8 -0
  437. data/lib/active_admin.rb +132 -0
  438. data/lib/activeadmin-rails.rb +1 -0
  439. data/lib/bug_report_templates/active_admin_main.rb +110 -0
  440. data/lib/generators/active_admin/assets/assets_generator.rb +14 -0
  441. data/lib/generators/active_admin/assets/templates/active_admin.js +1 -0
  442. data/lib/generators/active_admin/assets/templates/active_admin.scss +17 -0
  443. data/lib/generators/active_admin/devise/devise_generator.rb +68 -0
  444. data/lib/generators/active_admin/install/install_generator.rb +45 -0
  445. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +300 -0
  446. data/lib/generators/active_admin/install/templates/admin_users.rb.erb +28 -0
  447. data/lib/generators/active_admin/install/templates/dashboard.rb +33 -0
  448. data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb.erb +16 -0
  449. data/lib/generators/active_admin/page/USAGE +8 -0
  450. data/lib/generators/active_admin/page/page_generator.rb +12 -0
  451. data/lib/generators/active_admin/page/templates/page.rb +5 -0
  452. data/lib/generators/active_admin/resource/resource_generator.rb +20 -0
  453. data/lib/generators/active_admin/resource/templates/admin.rb.erb +6 -0
  454. data/lib/ransack_ext.rb +20 -0
  455. data/spec/bug_report_templates_spec.rb +28 -0
  456. data/spec/changelog_spec.rb +15 -0
  457. data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +50 -0
  458. data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +34 -0
  459. data/spec/javascripts/fixtures/checkboxes.html +9 -0
  460. data/spec/javascripts/fixtures/table_checkboxes.html +17 -0
  461. data/spec/javascripts/helpers/SpecHelper.js +3 -0
  462. data/spec/javascripts/support/jasmine.yml +74 -0
  463. data/spec/javascripts/support/jasmine_runner.rb +19 -0
  464. data/spec/rails_helper.rb +67 -0
  465. data/spec/requests/default_namespace_spec.rb +81 -0
  466. data/spec/requests/memory_spec.rb +25 -0
  467. data/spec/requests/pages/form_spec.rb +73 -0
  468. data/spec/requests/pages/index_spec.rb +96 -0
  469. data/spec/requests/pages/layout_spec.rb +59 -0
  470. data/spec/requests/pages/show_spec.rb +38 -0
  471. data/spec/requests/stylesheets_spec.rb +18 -0
  472. data/spec/spec_helper.rb +1 -0
  473. data/spec/support/active_admin_integration_spec_helper.rb +79 -0
  474. data/spec/support/active_admin_request_helpers.rb +39 -0
  475. data/spec/support/rails_template.rb +224 -0
  476. data/spec/support/rails_template_with_data.rb +328 -0
  477. data/spec/support/templates/admin/stores.rb +7 -0
  478. data/spec/support/templates/en.yml +8 -0
  479. data/spec/support/templates/manifest.js +3 -0
  480. data/spec/support/templates/policies/active_admin/comment_policy.rb +9 -0
  481. data/spec/support/templates/policies/active_admin/page_policy.rb +18 -0
  482. data/spec/support/templates/policies/admin_user_policy.rb +11 -0
  483. data/spec/support/templates/policies/application_policy.rb +44 -0
  484. data/spec/support/templates/policies/category_policy.rb +7 -0
  485. data/spec/support/templates/policies/post_policy.rb +15 -0
  486. data/spec/support/templates/policies/store_policy.rb +11 -0
  487. data/spec/support/templates/policies/user_policy.rb +11 -0
  488. data/spec/support/templates/post_decorator.rb +24 -0
  489. data/spec/unit/abstract_view_factory_spec.rb +78 -0
  490. data/spec/unit/action_builder_spec.rb +160 -0
  491. data/spec/unit/active_admin_spec.rb +11 -0
  492. data/spec/unit/application_spec.rb +180 -0
  493. data/spec/unit/asset_registration_spec.rb +52 -0
  494. data/spec/unit/authorization/authorization_adapter_spec.rb +61 -0
  495. data/spec/unit/authorization/controller_authorization_spec.rb +43 -0
  496. data/spec/unit/authorization/index_overriding_spec.rb +23 -0
  497. data/spec/unit/auto_link_spec.rb +103 -0
  498. data/spec/unit/batch_actions/resource_spec.rb +84 -0
  499. data/spec/unit/batch_actions/settings_spec.rb +61 -0
  500. data/spec/unit/belongs_to_spec.rb +76 -0
  501. data/spec/unit/cancan_adapter_spec.rb +43 -0
  502. data/spec/unit/comments_spec.rb +204 -0
  503. data/spec/unit/component_spec.rb +18 -0
  504. data/spec/unit/config_shared_examples.rb +59 -0
  505. data/spec/unit/controller_filters_spec.rb +41 -0
  506. data/spec/unit/csv_builder_spec.rb +321 -0
  507. data/spec/unit/dependency_spec.rb +135 -0
  508. data/spec/unit/devise_spec.rb +110 -0
  509. data/spec/unit/dsl_spec.rb +120 -0
  510. data/spec/unit/dynamic_settings_spec.rb +28 -0
  511. data/spec/unit/filters/active_filter_spec.rb +222 -0
  512. data/spec/unit/filters/active_spec.rb +24 -0
  513. data/spec/unit/filters/filter_form_builder_spec.rb +524 -0
  514. data/spec/unit/filters/resource_spec.rb +128 -0
  515. data/spec/unit/form_builder_spec.rb +1013 -0
  516. data/spec/unit/generators/install_spec.rb +31 -0
  517. data/spec/unit/helpers/collection_spec.rb +68 -0
  518. data/spec/unit/helpers/scope_chain_spec.rb +35 -0
  519. data/spec/unit/i18n_spec.rb +29 -0
  520. data/spec/unit/localizers/resource_localizer_spec.rb +36 -0
  521. data/spec/unit/menu_collection_spec.rb +40 -0
  522. data/spec/unit/menu_item_spec.rb +82 -0
  523. data/spec/unit/menu_spec.rb +60 -0
  524. data/spec/unit/namespace/authorization_spec.rb +27 -0
  525. data/spec/unit/namespace/register_page_spec.rb +99 -0
  526. data/spec/unit/namespace/register_resource_spec.rb +162 -0
  527. data/spec/unit/namespace_spec.rb +132 -0
  528. data/spec/unit/order_clause_spec.rb +81 -0
  529. data/spec/unit/page_controller_spec.rb +5 -0
  530. data/spec/unit/page_spec.rb +128 -0
  531. data/spec/unit/pretty_format_spec.rb +133 -0
  532. data/spec/unit/pundit_adapter_spec.rb +98 -0
  533. data/spec/unit/resource/action_items_spec.rb +83 -0
  534. data/spec/unit/resource/attributes_spec.rb +56 -0
  535. data/spec/unit/resource/includes_spec.rb +21 -0
  536. data/spec/unit/resource/menu_spec.rb +18 -0
  537. data/spec/unit/resource/naming_spec.rb +120 -0
  538. data/spec/unit/resource/ordering_spec.rb +35 -0
  539. data/spec/unit/resource/page_presenters_spec.rb +44 -0
  540. data/spec/unit/resource/pagination_spec.rb +38 -0
  541. data/spec/unit/resource/routes_spec.rb +125 -0
  542. data/spec/unit/resource/scopes_spec.rb +50 -0
  543. data/spec/unit/resource/sidebars_spec.rb +43 -0
  544. data/spec/unit/resource_collection_spec.rb +175 -0
  545. data/spec/unit/resource_controller/data_access_spec.rb +234 -0
  546. data/spec/unit/resource_controller/decorators_spec.rb +94 -0
  547. data/spec/unit/resource_controller/sidebars_spec.rb +37 -0
  548. data/spec/unit/resource_controller_spec.rb +290 -0
  549. data/spec/unit/resource_registration_spec.rb +61 -0
  550. data/spec/unit/resource_spec.rb +320 -0
  551. data/spec/unit/routing_spec.rb +211 -0
  552. data/spec/unit/scope_spec.rb +225 -0
  553. data/spec/unit/settings_node_spec.rb +26 -0
  554. data/spec/unit/view_factory_spec.rb +13 -0
  555. data/spec/unit/view_helpers/breadcrumbs_spec.rb +255 -0
  556. data/spec/unit/view_helpers/display_helper_spec.rb +203 -0
  557. data/spec/unit/view_helpers/download_format_links_helper_spec.rb +39 -0
  558. data/spec/unit/view_helpers/fields_for_spec.rb +50 -0
  559. data/spec/unit/view_helpers/flash_helper_spec.rb +24 -0
  560. data/spec/unit/view_helpers/form_helper_spec.rb +42 -0
  561. data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +138 -0
  562. data/spec/unit/views/components/attributes_table_spec.rb +271 -0
  563. data/spec/unit/views/components/batch_action_selector_spec.rb +43 -0
  564. data/spec/unit/views/components/blank_slate_spec.rb +27 -0
  565. data/spec/unit/views/components/columns_spec.rb +187 -0
  566. data/spec/unit/views/components/index_list_spec.rb +49 -0
  567. data/spec/unit/views/components/index_table_for_spec.rb +127 -0
  568. data/spec/unit/views/components/menu_item_spec.rb +29 -0
  569. data/spec/unit/views/components/menu_spec.rb +168 -0
  570. data/spec/unit/views/components/paginated_collection_spec.rb +249 -0
  571. data/spec/unit/views/components/panel_spec.rb +58 -0
  572. data/spec/unit/views/components/sidebar_section_spec.rb +68 -0
  573. data/spec/unit/views/components/site_title_spec.rb +82 -0
  574. data/spec/unit/views/components/status_tag_spec.rb +265 -0
  575. data/spec/unit/views/components/table_for_spec.rb +441 -0
  576. data/spec/unit/views/components/tabs_spec.rb +99 -0
  577. data/spec/unit/views/index_as_blog_spec.rb +76 -0
  578. data/tasks/docs.rake +64 -0
  579. data/tasks/lint.rake +21 -0
  580. data/tasks/local.rake +25 -0
  581. data/tasks/parallel_tests.rake +66 -0
  582. data/tasks/test.rake +24 -0
  583. data/vendor/assets/stylesheets/active_admin/_normalize.scss +447 -0
  584. metadata +1012 -0
@@ -0,0 +1,325 @@
1
+ Feature: Index Scoping
2
+
3
+ Viewing resources and scoping them
4
+
5
+ Scenario: Viewing resources with one scope and no default
6
+ Given 3 posts exist
7
+ And an index configuration of:
8
+ """
9
+ ActiveAdmin.register Post do
10
+ scope :all
11
+ end
12
+ """
13
+ Then I should see the scope "All" not selected
14
+ And I should see the scope "All" with the count 3
15
+ And I should see 3 posts in the table
16
+
17
+ Scenario: Viewing resources with one scope with dynamic name
18
+ Given 3 posts exist
19
+ And an index configuration of:
20
+ """
21
+ ActiveAdmin.register Post do
22
+ scope -> { scope_title }, :all
23
+
24
+ controller do
25
+ def scope_title
26
+ 'Neat scope'
27
+ end
28
+
29
+ helper_method :scope_title
30
+ end
31
+ end
32
+ """
33
+ Then I should see the scope with label "Neat scope"
34
+ And I should see 3 posts in the table
35
+ When I follow "Neat scope"
36
+ And I should see 3 posts in the table
37
+ And I should see the current scope with label "Neat scope"
38
+
39
+ Scenario: Viewing resources with one scope as the default
40
+ Given 3 posts exist
41
+ And an index configuration of:
42
+ """
43
+ ActiveAdmin.register Post do
44
+ scope :all, default: true
45
+ end
46
+ """
47
+ Then I should see the scope "All" selected
48
+ And I should see the scope "All" with the count 3
49
+ And I should see 3 posts in the table
50
+
51
+ Scenario: Viewing resources with one scope that is set as not default
52
+ Given 3 posts exist
53
+ And an index configuration of:
54
+ """
55
+ ActiveAdmin.register Post do
56
+ scope :all, default: proc{ false }
57
+ end
58
+ """
59
+ Then I should see the scope "All" not selected
60
+ And I should see the scope "All" with the count 3
61
+ And I should see 3 posts in the table
62
+
63
+ Scenario: Viewing resources with a scope and no results
64
+ Given 3 posts exist
65
+ And an index configuration of:
66
+ """
67
+ ActiveAdmin.register Post do
68
+ scope :all, default: true
69
+ filter :title
70
+ end
71
+ """
72
+ When I fill in "Title" with "Non Existing Post"
73
+ And I press "Filter"
74
+ Then I should see the scope "All" selected
75
+
76
+
77
+ Scenario: Viewing resources with a scope but scope_count turned off
78
+ Given 3 posts exist
79
+ And an index configuration of:
80
+ """
81
+ ActiveAdmin.register Post do
82
+ scope :all, default: true
83
+ index as: :table, scope_count: false
84
+ end
85
+ """
86
+ Then I should see the scope "All" selected
87
+ And I should see the scope "All" with no count
88
+ And I should see 3 posts in the table
89
+
90
+ @scope
91
+ Scenario: Viewing resources with a scope and scope count turned off for a single scope
92
+ Given 3 posts exist
93
+ And an index configuration of:
94
+ """
95
+ ActiveAdmin.register Post do
96
+ scope :all, default: true, show_count: false
97
+ end
98
+ """
99
+ Then I should see the scope "All" selected
100
+ And I should see the scope "All" with no count
101
+ And I should see 3 posts in the table
102
+
103
+ Scenario: Viewing resources when scoping
104
+ Given 2 posts exist
105
+ And 3 published posts exist
106
+ And an index configuration of:
107
+ """
108
+ ActiveAdmin.register Post do
109
+ scope :all, default: true
110
+ scope :published do |posts|
111
+ posts.where("published_date IS NOT NULL")
112
+ end
113
+ end
114
+ """
115
+ Then I should see the scope "All" with the count 5
116
+ And I should see 5 posts in the table
117
+ And I should see the scope "Published" with the count 3
118
+ When I follow "Published"
119
+ Then I should see the scope "Published" selected
120
+ And I should see the current scope with label "Published"
121
+ And I should see 3 posts in the table
122
+
123
+ Scenario: Viewing resources when scoping and filtering
124
+ Given 2 posts written by "Daft Punk" exist
125
+ And 1 published posts written by "Daft Punk" exist
126
+
127
+ And 1 posts written by "Alfred" exist
128
+ And 2 published posts written by "Alfred" exist
129
+
130
+ And an index configuration of:
131
+ """
132
+ ActiveAdmin.register Post do
133
+ scope :all, default: true
134
+ scope :published do |posts|
135
+ posts.where("published_date IS NOT NULL")
136
+ end
137
+ end
138
+ """
139
+ Then I should see the scope "All" with the count 6
140
+ And I should see the scope "Published" with the count 3
141
+ And I should see 6 posts in the table
142
+
143
+ When I follow "Published"
144
+ Then I should see the scope "Published" selected
145
+ And I should see the current scope with label "Published"
146
+ And I should see the scope "All" with the count 6
147
+ And I should see the scope "Published" with the count 3
148
+ And I should see 3 posts in the table
149
+
150
+ When I select "Daft Punk" from "Author"
151
+ And I press "Filter"
152
+
153
+ Then I should see the scope "Published" selected
154
+ And I should see the scope "All" with the count 3
155
+ And I should see the scope "Published" with the count 1
156
+ And I should see 1 posts in the table
157
+
158
+ Scenario: Viewing resources with optional scopes
159
+ Given 3 posts exist
160
+ And an index configuration of:
161
+ """
162
+ ActiveAdmin.register Post do
163
+ scope :all, if: proc { false }
164
+ scope "Shown", if: proc { true } do |posts|
165
+ posts
166
+ end
167
+ scope "Shown with lambda", if: -> { true } do |posts|
168
+ posts
169
+ end
170
+ scope "Shown with method name", if: :neat_scope? do |posts|
171
+ posts
172
+ end
173
+ scope "Default", default: true do |posts|
174
+ posts
175
+ end
176
+ scope 'Today', if: proc { false } do |posts|
177
+ posts.where(["created_at > ? AND created_at < ?", ::Time.zone.now.beginning_of_day, ::Time.zone.now.end_of_day])
178
+ end
179
+
180
+ controller do
181
+ def neat_scope?
182
+ true
183
+ end
184
+
185
+ helper_method :neat_scope?
186
+ end
187
+ end
188
+ """
189
+ Then I should see the scope "Default" selected
190
+ And I should not see the scope "All"
191
+ And I should not see the scope "Today"
192
+ And I should see the scope "Shown"
193
+ And I should see the scope "Shown with lambda"
194
+ And I should see the scope "Shown with method name"
195
+ And I should see the scope "Default" with the count 3
196
+
197
+ Scenario: Viewing resources with multiple scopes as blocks
198
+ Given 3 posts exist
199
+ And an index configuration of:
200
+ """
201
+ ActiveAdmin.register Post do
202
+ scope 'Today', default: true do |posts|
203
+ posts.where(["created_at > ? AND created_at < ?", ::Time.zone.now.beginning_of_day, ::Time.zone.now.end_of_day])
204
+ end
205
+ scope 'Tomorrow' do |posts|
206
+ posts.where(["created_at > ? AND created_at < ?", ::Time.zone.now.beginning_of_day + 1.day, ::Time.zone.now.end_of_day + 1.day])
207
+ end
208
+ end
209
+ """
210
+ Then I should see the scope "Today" selected
211
+ And I should see the scope "Tomorrow" not selected
212
+ And I should see the scope "Today" with the count 3
213
+ And I should see the scope "Tomorrow" with the count 0
214
+ And I should see 3 posts in the table
215
+ And I should see a link to "Tomorrow"
216
+
217
+ When I follow "Tomorrow"
218
+ Then I should see the scope "Tomorrow" selected
219
+ And I should see the scope "Today" not selected
220
+ And I should see a link to "Today"
221
+ And I should see the current scope with label "Tomorrow"
222
+
223
+ Scenario: Viewing resources with scopes when scoping to user
224
+ Given 2 posts written by "Daft Punk" exist
225
+ And a post with the title "Monkey Wrench" written by "Foo Fighters" exists
226
+ And a post with the title "Everlong" written by "Foo Fighters" exists
227
+ And an index configuration of:
228
+ """
229
+ ActiveAdmin.register Post do
230
+ scope_to :current_user
231
+ scope :all, default: true
232
+
233
+ filter :title
234
+
235
+ controller do
236
+ def current_user
237
+ User.find_by_username('foo_fighters')
238
+ end
239
+ end
240
+ end
241
+ """
242
+ Then I should see the scope "All" selected
243
+ And I should see the scope "All" with the count 2
244
+ When I fill in "Title" with "Monkey"
245
+ And I press "Filter"
246
+ Then I should see the scope "All" selected
247
+ And I should see the scope "All" with the count 1
248
+
249
+ Scenario: Viewing resources when scoping and filtering and group bys and stuff
250
+ Given 2 posts written by "Daft Punk" exist
251
+ And 1 published posts written by "Daft Punk" exist
252
+
253
+ And 1 posts written by "Alfred" exist
254
+
255
+ And an index configuration of:
256
+ """
257
+ ActiveAdmin.register Post do
258
+ scope :all, default: true
259
+ scope :published do |posts|
260
+ posts.where("published_date IS NOT NULL")
261
+ end
262
+ scope :single do |posts|
263
+ posts.page(1).per(1)
264
+ end
265
+
266
+ index do
267
+ column :author_id
268
+ column :count
269
+ end
270
+
271
+ config.sort_order = "author_id_asc"
272
+
273
+ controller do
274
+ def scoped_collection
275
+ Post.select("author_id, count(*) as count").group("author_id")
276
+ end
277
+ end
278
+ end
279
+ """
280
+ Then I should see the scope "All" with the count 2
281
+ And I should see the scope "Published" with the count 1
282
+ And I should see the scope "Single" with the count 1
283
+ And I should see 2 posts in the table
284
+
285
+ When I follow "Single"
286
+ Then I should see 1 posts in the table
287
+
288
+ When I follow "Published"
289
+ Then I should see the scope "Published" selected
290
+ And I should see the scope "All" with the count 2
291
+ And I should see the scope "Published" with the count 1
292
+ And I should see 1 posts in the table
293
+
294
+ When I select "Daft Punk" from "Author"
295
+ And I press "Filter"
296
+
297
+ Then I should see the scope "Published" selected
298
+ And I should see the scope "All" with the count 1
299
+ And I should see the scope "Published" with the count 1
300
+ And I should see 1 posts in the table
301
+ And I should see the current scope with label "Published"
302
+
303
+ Scenario: Viewing resources with grouped scopes
304
+ Given 3 posts exist
305
+ And an index configuration of:
306
+ """
307
+ ActiveAdmin.register Post do
308
+ scope :all
309
+ scope "Published", group: :status do |posts|
310
+ posts.where("published_date IS NOT NULL")
311
+ end
312
+ scope "Unpublished", group: :status do |posts|
313
+ posts.where("published_date IS NULL")
314
+ end
315
+ scope "Today", group: :date do |posts|
316
+ posts.where(["created_at > ? AND created_at < ?", ::Time.zone.now.beginning_of_day, ::Time.zone.now.end_of_day])
317
+ end
318
+ scope "Tomorrow", group: :date do |posts|
319
+ posts.where(["created_at > ? AND created_at < ?", ::Time.zone.now.beginning_of_day + 1.day, ::Time.zone.now.end_of_day + 1.day])
320
+ end
321
+ end
322
+ """
323
+ Then I should see an empty group with the scope "All"
324
+ And I should see a group "status" with the scopes "Published" and "Unpublished"
325
+ And I should see a group "date" with the scopes "Today" and "Tomorrow"
@@ -0,0 +1,41 @@
1
+ Feature: Index - Page Title
2
+
3
+ Modifying the page title on the index screen
4
+
5
+ Scenario: Set a string as the title
6
+ Given an index configuration of:
7
+ """
8
+ ActiveAdmin.register Post do
9
+ index title: "Awesome Title"
10
+ end
11
+ """
12
+ Then I should see the page title "Awesome Title"
13
+
14
+ Scenario: Set the title using a proc
15
+ Given an index configuration of:
16
+ """
17
+ ActiveAdmin.register Post do
18
+ index title: proc{ 'Custom title from proc' }
19
+ end
20
+ """
21
+ Then I should see the page title "Custom title from proc"
22
+
23
+ Scenario: Set the title using a proc that uses the available resource class
24
+ Given an index configuration of:
25
+ """
26
+ ActiveAdmin.register Post do
27
+ index title: proc{ "List of #{resource_class.model_name.plural}" }
28
+ end
29
+ """
30
+ Then I should see the page title "List of posts"
31
+
32
+ Scenario: Set the title in controller
33
+ Given an index configuration of:
34
+ """
35
+ ActiveAdmin.register Post do
36
+ controller do
37
+ before_action { @page_title = "List of #{resource_class.model_name.plural}" }
38
+ end
39
+ end
40
+ """
41
+ Then I should see the page title "List of posts"
@@ -0,0 +1,63 @@
1
+ Feature: Index Pagination
2
+
3
+ Background:
4
+ Scenario: Viewing index when one page of resources exist
5
+ Given an index configuration of:
6
+ """
7
+ ActiveAdmin.register Post
8
+ """
9
+ And 20 posts exist
10
+ When I am on the index page for posts
11
+ Then I should see "Displaying all 20 Posts"
12
+ And I should not see pagination
13
+
14
+ Scenario: Viewing index when multiple pages of resources exist
15
+ Given an index configuration of:
16
+ """
17
+ ActiveAdmin.register Post
18
+ """
19
+ And 31 posts exist
20
+ When I am on the index page for posts
21
+ Then I should see pagination with 2 pages
22
+
23
+ Scenario: Viewing index with a custom per page set
24
+ Given an index configuration of:
25
+ """
26
+ ActiveAdmin.register Post do
27
+ config.per_page = 2
28
+ end
29
+ """
30
+ And 3 posts exist
31
+ When I am on the index page for posts
32
+ Then I should see pagination with 2 pages
33
+ And I should see "Displaying Posts 1 - 2 of 3 in total"
34
+
35
+ Scenario: Viewing index with pagination disabled
36
+ Given an index configuration of:
37
+ """
38
+ ActiveAdmin.register Post do
39
+ config.paginate = false
40
+ end
41
+ """
42
+ And 31 posts exist
43
+ When I am on the index page for posts
44
+ Then I should not see pagination
45
+
46
+ Scenario: Viewing index with pagination_total set to false
47
+ Given an index configuration of:
48
+ """
49
+ ActiveAdmin.register Post do
50
+ config.per_page = 10
51
+ index pagination_total: false do
52
+ end
53
+ end
54
+ """
55
+ And 11 posts exist
56
+ When I am on the index page for posts
57
+ Then I should see "Displaying Posts 1 - 10"
58
+ And I should not see "11 in total"
59
+ And I should see the pagination "Next" link
60
+
61
+ When I follow "Next"
62
+ Then I should see "Displaying Posts 11 - 11"
63
+ And I should not see the pagination "Next" link
@@ -0,0 +1,73 @@
1
+ Feature: Switch Index View
2
+
3
+ In order to switch index views
4
+ As a user
5
+ I want to view links to views
6
+
7
+ Scenario: Show default Page Presenter
8
+ Given a post with the title "Hello World from Table" exists
9
+ And an index configuration of:
10
+ """
11
+ ActiveAdmin.register Post do
12
+ index as: :table do
13
+ column :title
14
+ end
15
+ index as: :block do |post|
16
+ span(link_to(post.title, admin_post_path(post)))
17
+ end
18
+ end
19
+ """
20
+ Then I should see "Hello World from Table" within ".index_as_table"
21
+
22
+ Scenario: Show default Page Presenter when default is specified
23
+ Given a post with the title "Hello World from Table" exists
24
+ And an index configuration of:
25
+ """
26
+ ActiveAdmin.register Post do
27
+ index as: :block do |post|
28
+ span(link_to(post.title, admin_post_path(post)))
29
+ end
30
+ index as: :table, default: true do
31
+ column :title
32
+ end
33
+ end
34
+ """
35
+ Then I should see "Hello World from Table" within ".index_as_table"
36
+
37
+ Scenario: Show links to different page views
38
+ Given a post with the title "Hello World from Table" exists
39
+ And an index configuration of:
40
+ """
41
+ ActiveAdmin.register Post do
42
+ index as: :block do |post|
43
+ span(link_to(post.title, admin_post_path(post)))
44
+ end
45
+ index as: :table, default: true do
46
+ column :title
47
+ end
48
+ end
49
+ """
50
+ Then I should see "Hello World from Table" within ".index_as_table"
51
+ And I should see a link to "Table"
52
+ And I should see a link to "List"
53
+
54
+ Scenario: Show change between page views
55
+ Given a post with the title "Hey from Table" and body "My body is awesome" exists
56
+ And an index configuration of:
57
+ """
58
+ ActiveAdmin.register Post do
59
+ index as: :block do |post|
60
+ span(link_to(post.title, admin_post_path(post)))
61
+ end
62
+ index as: :table, default: true do
63
+ column :title
64
+ column :body
65
+ end
66
+ end
67
+ """
68
+ Then I should see "My body is awesome" within ".index_as_table"
69
+ When I click "List"
70
+ Then I should not see "My body is awesome" within ".index_as_block"
71
+
72
+
73
+
@@ -0,0 +1,85 @@
1
+ Feature: Menu
2
+
3
+ Background:
4
+ Given I am logged in
5
+
6
+ Scenario: Hide the menu item
7
+ Given a configuration of:
8
+ """
9
+ ActiveAdmin.register Post do
10
+ menu false
11
+ end
12
+ """
13
+ When I am on the dashboard
14
+ Then I should not see a menu item for "Posts"
15
+
16
+ Scenario: Set the menu item label
17
+ Given a configuration of:
18
+ """
19
+ ActiveAdmin.register Post do
20
+ menu label: "Articles"
21
+ end
22
+ """
23
+ When I am on the dashboard
24
+ Then I should see a menu item for "Articles"
25
+ And I should not see a menu item for "Posts"
26
+
27
+ Scenario: Add a non-resource menu item
28
+ Given a configuration of:
29
+ """
30
+ ActiveAdmin.application.namespace :admin do |admin|
31
+ admin.build_menu do |menu|
32
+ menu.add label: "Custom Menu", url: :admin_dashboard_path
33
+ end
34
+ end
35
+ """
36
+ When I am on the dashboard
37
+ Then I should see a menu item for "Custom Menu"
38
+ When I follow "Custom Menu"
39
+ Then I should be on the admin dashboard page
40
+
41
+ Scenario: Add a non-resource menu item with method delete
42
+ Given a configuration of:
43
+ """
44
+ ActiveAdmin.application.namespace :admin do |admin|
45
+ admin.build_menu do |menu|
46
+ menu.add label: "Delete Menu", url: :admin_dashboard_path, html_options: { method: :delete }
47
+ end
48
+ end
49
+ """
50
+ When I am on the dashboard
51
+ Then I should see a menu item for "Delete Menu"
52
+ And I should see the element "a[data-method='delete']:contains('Delete Menu')"
53
+
54
+ Scenario: Adding a resource as a sub menu item
55
+ Given a configuration of:
56
+ """
57
+ ActiveAdmin.register User
58
+ ActiveAdmin.register Post do
59
+ menu parent: 'Users'
60
+ end
61
+ """
62
+ When I am on the dashboard
63
+ Then I should see a menu item for "Users"
64
+ And I should not see a menu item for "Posts"
65
+ When I follow "Users"
66
+ Then the "Users" tab should be selected
67
+ And I should see a nested menu item for "Posts"
68
+
69
+ Scenario: Adding a resources as a sub menu items
70
+ Given a configuration of:
71
+ """
72
+ ActiveAdmin.register Category do
73
+ menu parent: 'Anything'
74
+ end
75
+ ActiveAdmin.register Post do
76
+ menu parent: 'Anything'
77
+ end
78
+ """
79
+ When I am on the dashboard
80
+ Then I should see a menu item for "Anything"
81
+ And I should not see a menu item for "Categories"
82
+ And I should not see a menu item for "Posts"
83
+ And I should see a nested menu item for "Categories"
84
+ And I should see a nested menu item for "Posts"
85
+
@@ -0,0 +1,21 @@
1
+ Feature: Meta Tag
2
+
3
+ Add custom meta tags to head of pages.
4
+
5
+ Background:
6
+ Given a configuration of:
7
+ """
8
+ ActiveAdmin.register Post
9
+ ActiveAdmin.application.meta_tags = { author: 'My Company' }
10
+ ActiveAdmin.application.meta_tags_for_logged_out_pages = { robots: 'noindex' }
11
+ """
12
+
13
+ Scenario: Logged out views include custom meta tags
14
+ Given I am logged out
15
+ When I am on the login page
16
+ Then the site should contain a meta tag with name "robots" and content "noindex"
17
+
18
+ Scenario: Logged in views include custom meta tags
19
+ Given I am logged in
20
+ When I am on the dashboard
21
+ Then the site should contain a meta tag with name "author" and content "My Company"