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,52 @@
1
+ def ensure_user_created(email)
2
+ user = AdminUser.where(email: email).first_or_create(password: 'password', password_confirmation: 'password')
3
+
4
+ unless user.persisted?
5
+ raise "Could not create user #{email}: #{user.errors.full_messages}"
6
+ end
7
+ user
8
+ end
9
+
10
+ Given /^(?:I am logged|log) out$/ do
11
+ click_link 'Logout' if page.all(:css, "a", text: 'Logout').any?
12
+ end
13
+
14
+ Given /^I am logged in$/ do
15
+ step 'log out'
16
+ login_as ensure_user_created 'admin@example.com'
17
+ end
18
+
19
+ # only for @requires-reloading scenario
20
+ Given /^I am logged in with capybara$/ do
21
+ ensure_user_created 'admin@example.com'
22
+ step 'log out'
23
+
24
+ visit new_admin_user_session_path
25
+ fill_in 'Email', with: 'admin@example.com'
26
+ fill_in 'Password', with: 'password'
27
+ click_button 'Login'
28
+ end
29
+
30
+ Given /^an admin user "([^"]*)" exists$/ do |email|
31
+ ensure_user_created(email)
32
+ end
33
+
34
+ Given /^"([^"]*)" requests a password reset with token "([^"]*)"( but it expires)?$/ do |email, token, expired|
35
+ visit new_admin_user_password_path
36
+ fill_in 'Email', with: email
37
+ allow(Devise).to receive(:friendly_token).and_return(token)
38
+ click_button "Reset My Password"
39
+
40
+ AdminUser.where(email: email).first.update_attribute :reset_password_sent_at, 1.month.ago if expired
41
+ end
42
+
43
+ Given /^override locale "([^"]*)" with "([^"]*)"$/ do |path, value|
44
+ keys_value = path.split('.') + [value]
45
+ locale_hash = keys_value.reverse.inject{|a, n| {n=>a}}
46
+ I18n.available_locales
47
+ I18n.backend.store_translations(I18n.locale, locale_hash)
48
+ end
49
+
50
+ When /^I fill in the password field with "([^"]*)"$/ do |password|
51
+ fill_in 'admin_user_password', with: password
52
+ end
@@ -0,0 +1,86 @@
1
+ require 'uri'
2
+ require File.expand_path(File.join(File.dirname(__FILE__), "..", "support", "paths"))
3
+ require File.expand_path(File.join(File.dirname(__FILE__), "..", "support", "selectors"))
4
+
5
+ module WithinHelpers
6
+ def with_scope(locator)
7
+ locator ? within(*selector_for(locator)) { yield } : yield
8
+ end
9
+ end
10
+ World(WithinHelpers)
11
+
12
+ # Single-line step scoper
13
+ When /^(.*) within (.*[^:])$/ do |step_name, parent|
14
+ with_scope(parent) { step step_name }
15
+ end
16
+
17
+ # Multi-line step scoper
18
+ When /^(.*) within (.*[^:]):$/ do |step_name, parent, table_or_string|
19
+ with_scope(parent) { step "#{step_name}:", table_or_string }
20
+ end
21
+
22
+ Given /^I am on (.+)$/ do |page_name|
23
+ visit path_to(page_name)
24
+ end
25
+
26
+ When /^I go to (.+)$/ do |page_name|
27
+ visit path_to(page_name)
28
+ end
29
+
30
+ When /^I press "([^"]*)"$/ do |button|
31
+ click_button(button)
32
+ end
33
+
34
+ When /^I follow "([^"]*)"$/ do |link|
35
+ first(:link, link).click
36
+ end
37
+
38
+ When /^I fill in "([^"]*)" with "([^"]*)"$/ do |field, value|
39
+ fill_in(field, with: value)
40
+ end
41
+
42
+ When /^I select "([^"]*)" from "([^"]*)"$/ do |value, field|
43
+ select(value, from: field)
44
+ end
45
+
46
+ When /^I (check|uncheck) "([^"]*)"$/ do |action, field|
47
+ send action, field
48
+ end
49
+
50
+ When /^I attach the file "([^"]*)" to "([^"]*)"$/ do |path, field|
51
+ attach_file(field, File.expand_path(path))
52
+ end
53
+
54
+ Then /^I should( not)? see( the element)? "([^"]*)"$/ do |negate, is_css, text|
55
+ should = negate ? :not_to : :to
56
+ have = is_css ? have_css(text) : have_content(text)
57
+ expect(page).send should, have
58
+ end
59
+
60
+ Then /^the "([^"]*)" field(?: within (.*))? should( not)? contain "([^"]*)"$/ do |field, parent, negate, value|
61
+ with_scope(parent) do
62
+ field = find_field(field)
63
+ value = field.tag_name == 'textarea' ? field.text : field.value
64
+
65
+ expect(value).send negate ? :not_to : :to, match(/#{value}/)
66
+ end
67
+ end
68
+
69
+ Then /^the "([^"]*)" checkbox(?: within (.*))? should( not)? be checked$/ do |label, parent, negate|
70
+ with_scope(parent) do
71
+ checkbox = find_field(label)
72
+ if negate
73
+ expect(checkbox).not_to be_checked
74
+ else
75
+ expect(checkbox).to be_checked
76
+ end
77
+ end
78
+ end
79
+
80
+ Then /^I should be on (.+)$/ do |page_name|
81
+ expect(URI.parse(current_url).path).to eq path_to page_name
82
+ end
83
+
84
+ Then /^show me the page$/ do
85
+ save_and_open_page
86
+ end
@@ -0,0 +1,65 @@
1
+ Feature: STI Resource
2
+
3
+ Ensure that standard CRUD works with STI models
4
+
5
+ Background:
6
+ Given I am logged in
7
+ And a configuration of:
8
+ """
9
+ ActiveAdmin.register Publisher do
10
+ permit_params :first_name, :last_name, :username, :age
11
+ end
12
+ ActiveAdmin.register User do
13
+ permit_params :first_name, :last_name, :username, :age
14
+ end
15
+ """
16
+
17
+ Scenario: Create, update and delete a child STI resource
18
+ Given I am on the index page for publishers
19
+ When I follow "New Publisher"
20
+ And I fill in "First name" with "Terry"
21
+ And I fill in "Last name" with "Fox"
22
+ And I fill in "Username" with "terry_fox"
23
+ And I press "Create Publisher"
24
+ Then I should see "Publisher was successfully created"
25
+ And I should see "Terry"
26
+
27
+ When I follow "Edit Publisher"
28
+ And I fill in "First name" with "Joe"
29
+ And I press "Update Publisher"
30
+ Then I should see "Publisher was successfully updated"
31
+ And I should see "Joe"
32
+
33
+ When I follow "Delete Publisher"
34
+ Then I should see "Publisher was successfully destroyed"
35
+
36
+ Scenario: Create, update and delete a parent STI resource
37
+ Given I am on the index page for users
38
+ When I follow "New User"
39
+ And I fill in "First name" with "Terry"
40
+ And I fill in "Last name" with "Fox"
41
+ And I fill in "Username" with "terry_fox"
42
+ And I press "Create User"
43
+ Then I should see "User was successfully created"
44
+ And I should see "Terry"
45
+
46
+ When I follow "Edit User"
47
+ And I fill in "First name" with "Joe"
48
+ And I press "Update User"
49
+ Then I should see "User was successfully updated"
50
+ And I should see "Joe"
51
+
52
+ When I follow "Delete User"
53
+ Then I should see "User was successfully destroyed"
54
+
55
+ Scenario: Update and delete a child STI when the parent is registered
56
+ Given a publisher named "Terry Fox" exists
57
+ And I am on the index page for users
58
+ When I follow "Edit"
59
+ And I fill in "First name" with "Joe"
60
+ And I press "Update Publisher"
61
+ Then I should see "Publisher was successfully updated"
62
+ And I should see "Joe"
63
+
64
+ When I follow "Delete User"
65
+ Then I should see "Publisher was successfully destroyed"
@@ -0,0 +1,69 @@
1
+ @silent_unpermitted_params_failure
2
+ Feature: Strong Params
3
+
4
+ Background:
5
+ Given a category named "Music" exists
6
+ And a user named "John Doe" exists
7
+ And a post with the title "Hello World" written by "John Doe" exists
8
+ And I am logged in
9
+ And a configuration of:
10
+ """
11
+ ActiveAdmin.register Post do
12
+ end
13
+ """
14
+ And I am on the index page for posts
15
+
16
+ Scenario: Static permitted parameters
17
+ Given a configuration of:
18
+ """
19
+ ActiveAdmin.register Post do
20
+ permit_params :author, :title, :starred
21
+ end
22
+ """
23
+ When I follow "Edit"
24
+
25
+ And I fill in "Title" with "Hello World from update"
26
+ And I check "Starred"
27
+ And I press "Update Post"
28
+ Then I should see "Post was successfully updated."
29
+ And I should see the attribute "Title" with "Hello World from update"
30
+ And I should see the attribute "Author" with "John Doe"
31
+ And I should see the attribute "Starred" with "Yes"
32
+
33
+ Scenario: Dynamic permitted parameters
34
+ Given a configuration of:
35
+ """
36
+ ActiveAdmin.register Post do
37
+ permit_params do
38
+ allow = [:author, :title]
39
+ allow << :starred
40
+ allow
41
+ end
42
+ end
43
+ """
44
+ When I follow "Edit"
45
+
46
+ And I fill in "Title" with "Hello World from update"
47
+ And I check "Starred"
48
+ And I press "Update Post"
49
+ Then I should see "Post was successfully updated."
50
+ And I should see the attribute "Title" with "Hello World from update"
51
+ And I should see the attribute "Author" with "John Doe"
52
+ And I should see the attribute "Starred" with "Yes"
53
+
54
+ Scenario: Should not update parameters that are not declared as permitted
55
+ Given a configuration of:
56
+ """
57
+ ActiveAdmin.register Post do
58
+ permit_params :author, :title
59
+ end
60
+ """
61
+ When I follow "Edit"
62
+
63
+ And I fill in "Title" with "Hello World from update"
64
+ And I check "Starred"
65
+ And I press "Update Post"
66
+ Then I should see "Post was successfully updated."
67
+ And I should see the attribute "Title" with "Hello World from update"
68
+ And I should see the attribute "Author" with "John Doe"
69
+ And I should see the attribute "Starred" with "No"
@@ -0,0 +1,129 @@
1
+ # IMPORTANT: This file is generated by cucumber-rails - edit at your own peril.
2
+ # It is recommended to regenerate this file in the future when you upgrade to a
3
+ # newer version of cucumber-rails. Consider adding your own code to a new file
4
+ # instead of editing this one. Cucumber will automatically load all features/**/*.rb
5
+ # files.
6
+
7
+ ENV['RAILS_ENV'] = 'test'
8
+
9
+ require 'simplecov' if ENV["COVERAGE"] == "true"
10
+
11
+ Dir["#{File.expand_path('../../step_definitions', __FILE__)}/*.rb"].each do |f|
12
+ require f
13
+ end
14
+
15
+ require 'rails'
16
+ ENV['RAILS_ROOT'] = File.expand_path("../../../spec/rails/rails-#{Rails.version}", __FILE__)
17
+
18
+ # Create the test app if it doesn't exists
19
+ unless File.exist?(ENV['RAILS_ROOT'])
20
+ system 'rake setup'
21
+ end
22
+
23
+ require 'active_record'
24
+ require 'active_admin'
25
+ require 'devise'
26
+ ActiveAdmin.application.load_paths = [ENV['RAILS_ROOT'] + "/app/admin"]
27
+
28
+ require ENV['RAILS_ROOT'] + '/config/environment'
29
+
30
+ # Setup autoloading of ActiveAdmin
31
+ autoload :ActiveAdmin, 'active_admin'
32
+
33
+ require 'cucumber/rails'
34
+
35
+ require 'rspec/mocks'
36
+ World(RSpec::Mocks::ExampleMethods)
37
+
38
+ Before do
39
+ RSpec::Mocks.setup
40
+ end
41
+
42
+ After do
43
+ begin
44
+ RSpec::Mocks.verify
45
+ ensure
46
+ RSpec::Mocks.teardown
47
+ end
48
+ end
49
+
50
+ require "capybara/cuprite"
51
+
52
+ Capybara.register_driver(:cuprite) do |app|
53
+ Capybara::Cuprite::Driver.new(app, process_timeout: 30, timeout: 30)
54
+ end
55
+
56
+ Capybara.javascript_driver = :cuprite
57
+
58
+ Capybara.server = :webrick
59
+
60
+ Capybara.asset_host = 'http://localhost:3000'
61
+
62
+ # Capybara defaults to XPath selectors rather than Webrat's default of CSS3. In
63
+ # order to ease the transition to Capybara we set the default here. If you'd
64
+ # prefer to use XPath just remove this line and adjust any selectors in your
65
+ # steps to use the XPath syntax.
66
+ Capybara.default_selector = :css
67
+
68
+ # If you set this to false, any error raised from within your app will bubble
69
+ # up to your step definition and out to cucumber unless you catch it somewhere
70
+ # on the way. You can make Rails rescue errors and render error pages on a
71
+ # per-scenario basis by tagging a scenario or feature with the @allow-rescue tag.
72
+ #
73
+ # If you set this to true, Rails will rescue all errors and render error
74
+ # pages, more or less in the same way your application would behave in the
75
+ # default production environment. It's not recommended to do this for all
76
+ # of your scenarios, as this makes it hard to discover errors in your application.
77
+ ActionController::Base.allow_rescue = false
78
+
79
+ # Database resetting strategy
80
+ DatabaseCleaner.strategy = :truncation
81
+ Cucumber::Rails::Database.javascript_strategy = :truncation
82
+
83
+ # Warden helpers to speed up login
84
+ # See https://github.com/plataformatec/devise/wiki/How-To:-Test-with-Capybara
85
+ include Warden::Test::Helpers
86
+
87
+ After do
88
+ Warden.test_reset!
89
+
90
+ # Reset back to the default auth adapter
91
+ ActiveAdmin.application.namespace(:admin).
92
+ authorization_adapter = ActiveAdmin::AuthorizationAdapter
93
+ end
94
+
95
+ Before do
96
+ # We are caching classes, but need to manually clear references to
97
+ # the controllers. If they aren't clear, the router stores references
98
+ ActiveSupport::Dependencies.clear if Rails::VERSION::MAJOR < 7
99
+
100
+ # Reload Active Admin
101
+ ActiveAdmin.unload!
102
+ ActiveAdmin.load!
103
+ end
104
+
105
+ # Force deprecations to raise an exception.
106
+ if Rails.gem_version >= Gem::Version.new("7.1.0")
107
+ Rails.application.deprecators.behavior = :raise
108
+ else
109
+ ActiveSupport::Deprecation.behavior = :raise
110
+ end
111
+
112
+ # improve the performance of the specs suite by not logging anything
113
+ # see http://blog.plataformatec.com.br/2011/12/three-tips-to-improve-the-performance-of-your-test-suite/
114
+ Rails.logger.level = 4
115
+
116
+ Around '@silent_unpermitted_params_failure' do |scenario, block|
117
+ original = ActionController::Parameters.action_on_unpermitted_parameters
118
+
119
+ begin
120
+ ActionController::Parameters.action_on_unpermitted_parameters = false
121
+ block.call
122
+ ensure
123
+ ActionController::Parameters.action_on_unpermitted_parameters = original
124
+ end
125
+ end
126
+
127
+ Around '@locale_manipulation' do |scenario, block|
128
+ I18n.with_locale(:en) { block.call }
129
+ end
@@ -0,0 +1,75 @@
1
+ module NavigationHelpers
2
+ # Maps a name to a path. Used by the
3
+ #
4
+ # When /^I go to (.+)$/ do |page_name|
5
+ #
6
+ # step definition in web_steps.rb
7
+ #
8
+ def path_to(page_name)
9
+ case page_name
10
+
11
+ when /the home\s?page/
12
+ '/'
13
+ when /the dashboard/
14
+ "/admin"
15
+ when /the new post page/
16
+ "/admin/posts/new"
17
+ when /the new user page/
18
+ "/admin/users/new"
19
+ when /the login page/
20
+ "/admin/login"
21
+ when /the first post custom status page/
22
+ "/admin/posts/1/status"
23
+ when /the last posts page/
24
+ "/admin/last_posts"
25
+ when /the admin password reset form with token "([^"]*)"/
26
+ "/admin/password/edit?reset_password_token=#{$1}"
27
+
28
+ # the index page for posts in the root namespace
29
+ # the index page for posts in the user_admin namespace
30
+ when /^the index page for (.*) in the (.*) namespace$/
31
+ if $2 != 'root'
32
+ send "#{$2}_#{$1}_path"
33
+ else
34
+ send "#{$1}_path"
35
+ end
36
+
37
+ # same as above, except defaults to admin namespace
38
+ when /^the index page for (.*)$/
39
+ send "admin_#{$1}_path"
40
+
41
+ when /^the (.*) index page for (.*)$/
42
+ send "admin_#{$2}_path", format: $1
43
+
44
+ when /^the last author's posts$/
45
+ admin_user_posts_path(User.last)
46
+
47
+ when /^the last author's last post page$/
48
+ admin_user_post_path(User.last, Post.where(author_id: User.last.id).last)
49
+
50
+ when /^the last post's show page$/
51
+ admin_post_path(Post.last)
52
+
53
+ when /^the last post's edit page$/
54
+ edit_admin_post_path(Post.last)
55
+
56
+ # Add more mappings here.
57
+ # Here is an example that pulls values out of the Regexp:
58
+ #
59
+ # when /^(.*)'s profile page$/i
60
+ # user_profile_path(User.find_by_login($1))
61
+
62
+ else
63
+ begin
64
+ page_name =~ /the (.*) page/
65
+ path_components = $1.split(/\s+/)
66
+ self.send path_components.push('path').join('_')
67
+ rescue Object => e
68
+ raise "Can't find mapping from \"#{page_name}\" to a path.\n" +
69
+ "Now, go and add a mapping in #{__FILE__}"
70
+ end
71
+ end
72
+ end
73
+ end
74
+
75
+ World(NavigationHelpers)
@@ -0,0 +1,7 @@
1
+ if ENV["COVERAGE"] == "true"
2
+ require 'simplecov'
3
+
4
+ SimpleCov.command_name "regular features"
5
+ end
6
+
7
+ require_relative 'env'
@@ -0,0 +1,7 @@
1
+ if ENV["COVERAGE"] == "true"
2
+ require 'simplecov'
3
+
4
+ SimpleCov.command_name "reload features"
5
+ end
6
+
7
+ require_relative 'env'
@@ -0,0 +1,45 @@
1
+ module HtmlSelectorsHelpers
2
+ # Maps a name to a selector. Used primarily by the
3
+ #
4
+ # When /^(.+) within (.+)$/ do |step, scope|
5
+ #
6
+ # step definitions in web_steps.rb
7
+ #
8
+ def selector_for(locator)
9
+ case locator
10
+
11
+ when "the page"
12
+ "html > body"
13
+
14
+ # Add more mappings here.
15
+ # Here is an example that pulls values out of the Regexp:
16
+ #
17
+ # when /^the (notice|error|info) flash$/
18
+ # ".flash.#{$1}"
19
+
20
+ # You can also return an array to use a different selector
21
+ # type, like:
22
+ #
23
+ # when /the header/
24
+ # [:xpath, "//header"]
25
+
26
+ when "index grid"
27
+ [:css, "table.index_grid"]
28
+
29
+ when /^the "([^"]*)" sidebar$/
30
+ [:css, "##{$1.tr(" ", '').underscore}_sidebar_section"]
31
+
32
+ # This allows you to provide a quoted selector as the scope
33
+ # for "within" steps as was previously the default for the
34
+ # web steps:
35
+ when /^"(.+)"$/
36
+ $1
37
+
38
+ else
39
+ raise "Can't find mapping from \"#{locator}\" to a selector.\n" +
40
+ "Now, go and add a mapping in #{__FILE__}"
41
+ end
42
+ end
43
+ end
44
+
45
+ World(HtmlSelectorsHelpers)
@@ -0,0 +1,32 @@
1
+ Feature: User Logging In
2
+
3
+ Logging in to the system as an admin user
4
+
5
+ Background:
6
+ Given I am logged out
7
+ And an admin user "admin@example.com" exists
8
+ When I go to the dashboard
9
+
10
+ Scenario: Logging in Successfully
11
+ When I fill in "Email" with "admin@example.com"
12
+ And I fill in "Password" with "password"
13
+ And I press "Login"
14
+ Then I should be on the the dashboard
15
+ And I should see the element "a[href='/admin/logout' ]:contains('Logout')"
16
+ And I should see the element "a[href='/admin/admin_users/1']:contains('admin@example.com')"
17
+
18
+ Scenario: Attempting to log in with an incorrect email address
19
+ Given override locale "devise.failure.not_found_in_database" with "Invalid email or password."
20
+ When I fill in "Email" with "not-an-admin@example.com"
21
+ And I fill in "Password" with "not-my-password"
22
+ And I press "Login"
23
+ Then I should see "Login"
24
+ And I should see "Invalid email or password."
25
+
26
+ Scenario: Attempting to log in with an incorrect password
27
+ Given override locale "devise.failure.invalid" with "Invalid email or password."
28
+ When I fill in "Email" with "admin@example.com"
29
+ And I fill in "Password" with "not-my-password"
30
+ And I press "Login"
31
+ Then I should see "Login"
32
+ And I should see "Invalid email or password."
@@ -0,0 +1,29 @@
1
+ Feature: User Logging out
2
+
3
+ Logging out of the system as an admin user
4
+
5
+ Scenario: Logging out successfully
6
+ Given a configuration of:
7
+ """
8
+ ActiveAdmin.setup do |config|
9
+ config.logout_link_method = :get
10
+ end
11
+ """
12
+ And I am logged in
13
+ When I go to the dashboard
14
+ Then I should see the element "a[data-method='get']:contains('Logout')"
15
+ And I follow "Logout"
16
+ And I should see "Login"
17
+
18
+ Scenario: Logging out sucessfully with delete method
19
+ Given a configuration of:
20
+ """
21
+ ActiveAdmin.setup do |config|
22
+ config.logout_link_method = :delete
23
+ end
24
+ """
25
+ And I am logged in
26
+ When I am on the dashboard
27
+ Then I should see the element "a[data-method='delete']:contains('Logout')"
28
+ And I follow "Logout"
29
+ And I should see "Login"
@@ -0,0 +1,30 @@
1
+ Feature: User Resetting Password
2
+
3
+ Resetting my password as an admin user
4
+
5
+ Background:
6
+ Given I am logged out
7
+ And an admin user "admin@example.com" exists
8
+
9
+ Scenario: Resetting password successfully
10
+ When I go to the dashboard
11
+ And I follow "Forgot your password?"
12
+ And I fill in "Email" with "admin@example.com"
13
+ And I press "Reset My Password"
14
+ Then I should see "You will receive an email with instructions on how to reset your password in a few minutes."
15
+
16
+ Scenario: Changing password after resetting
17
+ When "admin@example.com" requests a password reset with token "foobarbaz"
18
+ And I go to the admin password reset form with token "foobarbaz"
19
+ And I fill in the password field with "password"
20
+ And I fill in "Password confirmation" with "password"
21
+ And I press "Change my password"
22
+ Then I should see "success"
23
+
24
+ Scenario: Changing password after resetting with errors
25
+ When "admin@example.com" requests a password reset with token "foobarbaz" but it expires
26
+ And I go to the admin password reset form with token "foobarbaz"
27
+ And I fill in the password field with "password"
28
+ And I fill in "Password confirmation" with "wrong"
29
+ And I press "Change my password"
30
+ Then I should see "expired"
@@ -0,0 +1,12 @@
1
+ source "https://rubygems.org"
2
+
3
+ eval_gemfile(File.expand_path(File.join("..", "Gemfile"), __dir__))
4
+
5
+ gem "rails", "4.2.10"
6
+ gem "devise", "~> 4.4" # required for Ruby 2.5, see devise/issues/4736
7
+ gem "draper", "~> 2.1"
8
+ gem "ransack", "~> 1.8.7" # 2.x for Rails 5.2+ only.
9
+ gem "rails-i18n"
10
+ gem "activerecord-jdbcsqlite3-adapter", "~> 1.3", platforms: :jruby
11
+
12
+ gemspec path: "../"
@@ -0,0 +1,15 @@
1
+ source "https://rubygems.org"
2
+
3
+ eval_gemfile(File.expand_path(File.join("..", "Gemfile"), __dir__))
4
+
5
+ gem "rails", "5.2.1"
6
+ gem "sprockets", "< 4"
7
+ gem "bootsnap"
8
+ gem "devise", "~> 4.4"
9
+ gem "draper"
10
+ gem "ransack", "2.0" # 2.x for Rails 5.2+ only.
11
+ gem "rails-i18n"
12
+ gem 'sqlite3', '< 1.4', platforms: :mri
13
+ gem "activerecord-jdbcsqlite3-adapter", ">= 52.0", platforms: :jruby
14
+
15
+ gemspec path: "../"
@@ -0,0 +1,16 @@
1
+ source "https://rubygems.org"
2
+
3
+ eval_gemfile(File.expand_path(File.join("..", "Gemfile"), __dir__))
4
+
5
+ gem "rails", "~> 6.0.0"
6
+ gem "rails-i18n", "~> 6.0"
7
+ gem "sass-rails", ">= 6.0.x"
8
+ gem "sprockets", ">= 4.0.x"
9
+ gem "bootsnap"
10
+ gem "devise", "~> 4.4"
11
+ gem "draper"
12
+ gem "ransack", ">= 2.0" # 2.x for Rails 5.2+ only.
13
+ gem 'sqlite3', platforms: :mri
14
+ gem "activerecord-jdbcsqlite3-adapter", ">= 60.0.x", platform: :jruby
15
+
16
+ gemspec path: "../"