activeadmin 1.1.0 → 2.4.0

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

Potentially problematic release.


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

Files changed (465) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +469 -100
  3. data/CODE_OF_CONDUCT.md +64 -12
  4. data/CONTRIBUTING.md +89 -47
  5. data/README.md +73 -19
  6. data/app/assets/javascripts/active_admin/base.es6 +23 -0
  7. data/app/assets/javascripts/active_admin/ext/jquery-ui.es6 +7 -0
  8. data/app/assets/javascripts/active_admin/ext/jquery.es6 +9 -0
  9. data/app/assets/javascripts/active_admin/initializers/datepicker.es6 +16 -0
  10. data/app/assets/javascripts/active_admin/initializers/filters.es6 +45 -0
  11. data/app/assets/javascripts/active_admin/initializers/tabs.es6 +6 -0
  12. data/app/assets/javascripts/active_admin/lib/active_admin.es6 +41 -0
  13. data/app/assets/javascripts/active_admin/lib/batch_actions.es6 +59 -0
  14. data/app/assets/javascripts/active_admin/lib/checkbox-toggler.es6 +49 -0
  15. data/app/assets/javascripts/active_admin/lib/dropdown-menu.es6 +123 -0
  16. data/app/assets/javascripts/active_admin/lib/has_many.es6 +95 -0
  17. data/app/assets/javascripts/active_admin/lib/modal_dialog.es6 +61 -0
  18. data/app/assets/javascripts/active_admin/lib/per_page.es6 +47 -0
  19. data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.es6 +36 -0
  20. data/app/assets/stylesheets/active_admin/_forms.scss +3 -15
  21. data/app/assets/stylesheets/active_admin/components/_scopes.scss +3 -0
  22. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +0 -5
  23. data/app/assets/stylesheets/active_admin/components/_tabs.scss +1 -1
  24. data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +1 -1
  25. data/app/views/active_admin/devise/confirmations/new.html.erb +2 -2
  26. data/app/views/active_admin/devise/passwords/edit.html.erb +2 -2
  27. data/app/views/active_admin/devise/passwords/new.html.erb +2 -2
  28. data/app/views/active_admin/devise/registrations/new.html.erb +2 -3
  29. data/app/views/active_admin/devise/sessions/new.html.erb +1 -1
  30. data/app/views/active_admin/devise/shared/_error_messages.html.erb +15 -0
  31. data/app/views/active_admin/devise/unlocks/new.html.erb +2 -2
  32. data/app/views/kaminari/active_admin_countless/_first_page.html.erb +11 -0
  33. data/app/views/kaminari/active_admin_countless/_gap.html.erb +8 -0
  34. data/app/views/kaminari/active_admin_countless/_next_page.html.erb +11 -0
  35. data/app/views/kaminari/active_admin_countless/_page.html.erb +12 -0
  36. data/app/views/kaminari/active_admin_countless/_paginator.html.erb +24 -0
  37. data/app/views/kaminari/active_admin_countless/_prev_page.html.erb +11 -0
  38. data/app/views/layouts/active_admin_logged_out.html.erb +2 -2
  39. data/config/locales/ar.yml +3 -2
  40. data/config/locales/bg.yml +1 -1
  41. data/config/locales/bs.yml +1 -0
  42. data/config/locales/ca.yml +1 -1
  43. data/config/locales/cs.yml +1 -0
  44. data/config/locales/da.yml +1 -0
  45. data/config/locales/de-CH.yml +1 -0
  46. data/config/locales/de.yml +29 -0
  47. data/config/locales/el.yml +1 -0
  48. data/config/locales/en-CA.yml +1 -0
  49. data/config/locales/en-GB.yml +1 -0
  50. data/config/locales/en.yml +21 -1
  51. data/config/locales/eo.yml +145 -0
  52. data/config/locales/es-MX.yml +1 -0
  53. data/config/locales/es.yml +21 -1
  54. data/config/locales/fa.yml +1 -0
  55. data/config/locales/fi.yml +2 -1
  56. data/config/locales/fr.yml +2 -1
  57. data/config/locales/he.yml +1 -1
  58. data/config/locales/hr.yml +1 -0
  59. data/config/locales/hu.yml +5 -0
  60. data/config/locales/id.yml +1 -0
  61. data/config/locales/it.yml +13 -3
  62. data/config/locales/ja.yml +6 -0
  63. data/config/locales/ko.yml +1 -0
  64. data/config/locales/lt.yml +3 -2
  65. data/config/locales/lv.yml +1 -0
  66. data/config/locales/mk.yml +134 -0
  67. data/config/locales/nb.yml +16 -5
  68. data/config/locales/nl.yml +12 -0
  69. data/config/locales/pl.yml +72 -3
  70. data/config/locales/pt-BR.yml +9 -0
  71. data/config/locales/pt-PT.yml +1 -0
  72. data/config/locales/ro.yml +1 -0
  73. data/config/locales/ru.yml +3 -0
  74. data/config/locales/sk.yml +60 -0
  75. data/config/locales/sv-SE.yml +3 -0
  76. data/config/locales/tr.yml +10 -0
  77. data/config/locales/uk.yml +3 -0
  78. data/config/locales/vi.yml +48 -6
  79. data/config/locales/zh-CN.yml +34 -5
  80. data/config/locales/zh-TW.yml +1 -0
  81. data/docs/.gitignore +1 -0
  82. data/docs/0-installation.md +2 -2
  83. data/docs/1-general-configuration.md +16 -1
  84. data/docs/10-custom-pages.md +14 -0
  85. data/docs/12-arbre-components.md +41 -1
  86. data/docs/13-authorization-adapter.md +41 -22
  87. data/docs/2-resource-customization.md +10 -5
  88. data/docs/3-index-pages/custom-index.md +1 -1
  89. data/docs/3-index-pages/index-as-blog.md +1 -1
  90. data/docs/3-index-pages/index-as-table.md +12 -5
  91. data/docs/3-index-pages.md +17 -0
  92. data/docs/5-forms.md +16 -2
  93. data/docs/8-custom-actions.md +11 -0
  94. data/docs/CNAME +1 -1
  95. data/docs/Gemfile +2 -1
  96. data/docs/Gemfile.lock +248 -0
  97. data/docs/_config.yml +3 -1
  98. data/docs/_includes/toc.html +1 -1
  99. data/docs/_includes/top-menu.html +9 -1
  100. data/docs/documentation.md +1 -1
  101. data/docs/images/tidelift.svg +14 -0
  102. data/docs/index.html +109 -8
  103. data/docs/stylesheets/main.css +55 -2
  104. data/lib/active_admin/abstract_view_factory.rb +13 -51
  105. data/lib/active_admin/application.rb +52 -159
  106. data/lib/active_admin/application_settings.rb +42 -0
  107. data/lib/active_admin/asset_registration.rb +0 -8
  108. data/lib/active_admin/base_controller/authorization.rb +4 -6
  109. data/lib/active_admin/base_controller.rb +6 -6
  110. data/lib/active_admin/batch_actions/controller.rb +2 -2
  111. data/lib/active_admin/batch_actions/resource_extension.rb +9 -5
  112. data/lib/active_admin/callbacks.rb +1 -1
  113. data/lib/active_admin/controller_action.rb +2 -1
  114. data/lib/active_admin/csv_builder.rb +10 -7
  115. data/lib/active_admin/dependency.rb +3 -67
  116. data/lib/active_admin/deprecation.rb +0 -25
  117. data/lib/active_admin/dsl.rb +1 -8
  118. data/lib/active_admin/dynamic_setting.rb +38 -0
  119. data/lib/active_admin/dynamic_settings_node.rb +28 -0
  120. data/lib/active_admin/engine.rb +5 -0
  121. data/lib/active_admin/error.rb +4 -2
  122. data/lib/active_admin/filters/active_filter.rb +49 -12
  123. data/lib/active_admin/filters/active_sidebar.rb +6 -2
  124. data/lib/active_admin/filters/forms.rb +7 -4
  125. data/lib/active_admin/filters/formtastic_addons.rb +1 -1
  126. data/lib/active_admin/filters/resource_extension.rb +28 -4
  127. data/lib/active_admin/form_builder.rb +98 -63
  128. data/lib/active_admin/generators/boilerplate.rb +12 -4
  129. data/lib/active_admin/helpers/scope_chain.rb +1 -0
  130. data/lib/active_admin/inputs/datepicker_input.rb +8 -1
  131. data/lib/active_admin/inputs/filters/base/search_method_select.rb +2 -2
  132. data/lib/active_admin/inputs/filters/select_input.rb +5 -1
  133. data/lib/active_admin/menu.rb +2 -8
  134. data/lib/active_admin/menu_item.rb +4 -32
  135. data/lib/active_admin/namespace.rb +20 -8
  136. data/lib/active_admin/namespace_settings.rb +123 -0
  137. data/lib/active_admin/order_clause.rb +2 -2
  138. data/lib/active_admin/orm/active_record/comments/comment.rb +2 -2
  139. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +17 -7
  140. data/lib/active_admin/orm/active_record/comments.rb +15 -4
  141. data/lib/active_admin/page_dsl.rb +1 -1
  142. data/lib/active_admin/page_presenter.rb +2 -1
  143. data/lib/active_admin/pundit_adapter.rb +18 -5
  144. data/lib/active_admin/resource/action_items.rb +7 -2
  145. data/lib/active_admin/resource/attributes.rb +7 -4
  146. data/lib/active_admin/resource/belongs_to.rb +6 -1
  147. data/lib/active_admin/resource/menu.rb +3 -3
  148. data/lib/active_admin/resource/model.rb +15 -0
  149. data/lib/active_admin/resource/naming.rb +3 -3
  150. data/lib/active_admin/resource/routes.rb +20 -7
  151. data/lib/active_admin/resource/scopes.rb +3 -3
  152. data/lib/active_admin/resource/sidebars.rb +1 -1
  153. data/lib/active_admin/resource.rb +17 -3
  154. data/lib/active_admin/resource_collection.rb +2 -2
  155. data/lib/active_admin/resource_controller/action_builder.rb +10 -0
  156. data/lib/active_admin/resource_controller/data_access.rb +5 -1
  157. data/lib/active_admin/resource_controller/decorators.rb +5 -5
  158. data/lib/active_admin/resource_controller/polymorphic_routes.rb +36 -0
  159. data/lib/active_admin/resource_controller/resource_class_methods.rb +2 -0
  160. data/lib/active_admin/resource_controller/scoping.rb +1 -1
  161. data/lib/active_admin/resource_controller.rb +2 -0
  162. data/lib/active_admin/resource_dsl.rb +7 -3
  163. data/lib/active_admin/router.rb +90 -84
  164. data/lib/active_admin/scope.rb +16 -8
  165. data/lib/active_admin/settings_node.rb +19 -0
  166. data/lib/active_admin/sidebar_section.rb +3 -1
  167. data/lib/active_admin/version.rb +1 -1
  168. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +2 -2
  169. data/lib/active_admin/view_helpers/display_helper.rb +13 -4
  170. data/lib/active_admin/view_helpers/download_format_links_helper.rb +1 -0
  171. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +3 -0
  172. data/lib/active_admin/view_helpers.rb +1 -1
  173. data/lib/active_admin/views/components/active_admin_form.rb +9 -4
  174. data/lib/active_admin/views/components/attributes_table.rb +3 -3
  175. data/lib/active_admin/views/components/menu.rb +32 -0
  176. data/lib/active_admin/views/components/menu_item.rb +58 -0
  177. data/lib/active_admin/views/components/paginated_collection.rb +3 -3
  178. data/lib/active_admin/views/components/scopes.rb +11 -4
  179. data/lib/active_admin/views/components/sidebar.rb +13 -0
  180. data/lib/active_admin/views/components/site_title.rb +5 -6
  181. data/lib/active_admin/views/components/status_tag.rb +6 -19
  182. data/lib/active_admin/views/components/table_for.rb +3 -12
  183. data/lib/active_admin/views/components/tabs.rb +15 -3
  184. data/lib/active_admin/views/footer.rb +3 -7
  185. data/lib/active_admin/views/header.rb +3 -15
  186. data/lib/active_admin/views/index_as_blog.rb +1 -1
  187. data/lib/active_admin/views/index_as_grid.rb +25 -25
  188. data/lib/active_admin/views/index_as_table.rb +18 -10
  189. data/lib/active_admin/views/pages/base.rb +30 -53
  190. data/lib/active_admin/views/tabbed_navigation.rb +4 -59
  191. data/lib/active_admin/views.rb +1 -1
  192. data/lib/active_admin.rb +10 -4
  193. data/lib/generators/active_admin/assets/assets_generator.rb +2 -2
  194. data/lib/generators/active_admin/assets/templates/active_admin.js +1 -0
  195. data/lib/generators/active_admin/install/install_generator.rb +7 -3
  196. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +38 -3
  197. data/lib/generators/active_admin/install/templates/dashboard.rb +2 -3
  198. data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb.erb +1 -15
  199. data/lib/generators/active_admin/page/page_generator.rb +1 -1
  200. data/lib/generators/active_admin/resource/resource_generator.rb +2 -2
  201. data/lib/generators/active_admin/resource/templates/admin.rb.erb +40 -37
  202. data/lib/ransack_ext.rb +3 -3
  203. data/vendor/assets/javascripts/jquery-ui/form-reset-mixin.js +80 -0
  204. data/vendor/assets/javascripts/jquery-ui/form.js +22 -0
  205. data/vendor/assets/javascripts/jquery-ui/labels.js +65 -0
  206. data/vendor/assets/javascripts/jquery-ui/widgets/checkboxradio.js +274 -283
  207. metadata +127 -523
  208. data/.github/ISSUE_TEMPLATE.md +0 -20
  209. data/.gitignore +0 -49
  210. data/.mdlrc +0 -1
  211. data/.rubocop.yml +0 -76
  212. data/.simplecov +0 -13
  213. data/.travis.yml +0 -51
  214. data/.yardopts +0 -7
  215. data/Gemfile +0 -58
  216. data/Rakefile +0 -54
  217. data/activeadmin.gemspec +0 -32
  218. data/app/assets/javascripts/active_admin/base.js.coffee +0 -13
  219. data/app/assets/javascripts/active_admin/ext/jquery-ui.js.coffee +0 -6
  220. data/app/assets/javascripts/active_admin/ext/jquery.js.coffee +0 -7
  221. data/app/assets/javascripts/active_admin/initializers/batch_actions.js.coffee +0 -11
  222. data/app/assets/javascripts/active_admin/initializers/datepicker.js.coffee +0 -14
  223. data/app/assets/javascripts/active_admin/initializers/filters.js.coffee +0 -26
  224. data/app/assets/javascripts/active_admin/initializers/tabs.js.coffee +0 -7
  225. data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +0 -42
  226. data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +0 -46
  227. data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +0 -104
  228. data/app/assets/javascripts/active_admin/lib/flash.js.coffee +0 -19
  229. data/app/assets/javascripts/active_admin/lib/has_many.js.coffee +0 -79
  230. data/app/assets/javascripts/active_admin/lib/modal_dialog.js.coffee +0 -45
  231. data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +0 -46
  232. data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +0 -22
  233. data/codecov.yml +0 -25
  234. data/config/i18n-tasks.yml +0 -26
  235. data/config/mdl_style.rb +0 -9
  236. data/cucumber.yml +0 -3
  237. data/features/action_item.feature +0 -73
  238. data/features/authorization.feature +0 -64
  239. data/features/authorization_cancan.feature +0 -52
  240. data/features/authorization_pundit.feature +0 -37
  241. data/features/belongs_to.feature +0 -124
  242. data/features/breadcrumb.feature +0 -75
  243. data/features/comments/commenting.feature +0 -178
  244. data/features/comments/viewing_index.feature +0 -19
  245. data/features/create_another.feature +0 -55
  246. data/features/dashboard.feature +0 -16
  247. data/features/decorators.feature +0 -43
  248. data/features/development_reloading.feature +0 -28
  249. data/features/edit_page.feature +0 -116
  250. data/features/favicon.feature +0 -20
  251. data/features/first_boot.feature +0 -16
  252. data/features/footer.feature +0 -28
  253. data/features/global_navigation.feature +0 -29
  254. data/features/i18n.feature +0 -55
  255. data/features/index/batch_actions.feature +0 -218
  256. data/features/index/filters.feature +0 -239
  257. data/features/index/format_as_csv.feature +0 -220
  258. data/features/index/formats.feature +0 -88
  259. data/features/index/index_as_block.feature +0 -15
  260. data/features/index/index_as_blog.feature +0 -69
  261. data/features/index/index_as_grid.feature +0 -45
  262. data/features/index/index_as_table.feature +0 -291
  263. data/features/index/index_blank_slate.feature +0 -83
  264. data/features/index/index_parameters.feature +0 -75
  265. data/features/index/index_scope_to.feature +0 -56
  266. data/features/index/index_scopes.feature +0 -285
  267. data/features/index/page_title.feature +0 -41
  268. data/features/index/pagination.feature +0 -63
  269. data/features/index/switch_index_view.feature +0 -73
  270. data/features/menu.feature +0 -72
  271. data/features/meta_tags.feature +0 -21
  272. data/features/new_page.feature +0 -107
  273. data/features/registering_assets.feature +0 -38
  274. data/features/registering_pages.feature +0 -237
  275. data/features/registering_resources.feature +0 -33
  276. data/features/renamed_resource.feature +0 -30
  277. data/features/root_to.feature +0 -17
  278. data/features/show/attributes_table_title.feature +0 -54
  279. data/features/show/columns.feature +0 -40
  280. data/features/show/default_content.feature +0 -44
  281. data/features/show/page_title.feature +0 -58
  282. data/features/show/tabs.feature +0 -33
  283. data/features/sidebar_sections.feature +0 -210
  284. data/features/site_title.feature +0 -47
  285. data/features/specifying_actions.feature +0 -118
  286. data/features/step_definitions/action_item_steps.rb +0 -7
  287. data/features/step_definitions/action_link_steps.rb +0 -19
  288. data/features/step_definitions/additional_web_steps.rb +0 -81
  289. data/features/step_definitions/asset_steps.rb +0 -15
  290. data/features/step_definitions/attribute_steps.rb +0 -18
  291. data/features/step_definitions/attributes_table_title_steps.rb +0 -11
  292. data/features/step_definitions/batch_action_steps.rb +0 -81
  293. data/features/step_definitions/blog_steps.rb +0 -3
  294. data/features/step_definitions/breadcrumb_steps.rb +0 -3
  295. data/features/step_definitions/column_steps.rb +0 -8
  296. data/features/step_definitions/comment_steps.rb +0 -32
  297. data/features/step_definitions/configuration_steps.rb +0 -100
  298. data/features/step_definitions/dashboard_steps.rb +0 -15
  299. data/features/step_definitions/factory_steps.rb +0 -35
  300. data/features/step_definitions/filter_steps.rb +0 -48
  301. data/features/step_definitions/flash_steps.rb +0 -11
  302. data/features/step_definitions/footer_steps.rb +0 -11
  303. data/features/step_definitions/format_steps.rb +0 -56
  304. data/features/step_definitions/i18n_steps.rb +0 -11
  305. data/features/step_definitions/index_scope_steps.rb +0 -29
  306. data/features/step_definitions/index_views_steps.rb +0 -3
  307. data/features/step_definitions/layout_steps.rb +0 -3
  308. data/features/step_definitions/member_link_steps.rb +0 -7
  309. data/features/step_definitions/menu_steps.rb +0 -11
  310. data/features/step_definitions/meta_tag_steps.rb +0 -3
  311. data/features/step_definitions/pagination_steps.rb +0 -15
  312. data/features/step_definitions/sidebar_steps.rb +0 -11
  313. data/features/step_definitions/site_title_steps.rb +0 -17
  314. data/features/step_definitions/tab_steps.rb +0 -8
  315. data/features/step_definitions/table_steps.rb +0 -116
  316. data/features/step_definitions/user_steps.rb +0 -52
  317. data/features/step_definitions/web_steps.rb +0 -86
  318. data/features/sti_resource.feature +0 -65
  319. data/features/strong_parameters.feature +0 -69
  320. data/features/support/env.rb +0 -122
  321. data/features/support/paths.rb +0 -73
  322. data/features/support/regular_env.rb +0 -7
  323. data/features/support/reload_env.rb +0 -7
  324. data/features/support/selectors.rb +0 -45
  325. data/features/users/logging_in.feature +0 -36
  326. data/features/users/logging_out.feature +0 -13
  327. data/features/users/resetting_password.feature +0 -34
  328. data/gemfiles/rails_42.gemfile +0 -10
  329. data/gemfiles/rails_50.gemfile +0 -10
  330. data/gemfiles/rails_51.gemfile +0 -10
  331. data/lib/active_admin/event.rb +0 -24
  332. data/lib/active_admin/helpers/settings.rb +0 -114
  333. data/lib/active_admin/reloader.rb +0 -25
  334. data/lib/bug_report_templates/active_admin_master.rb +0 -113
  335. data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +0 -1
  336. data/spec/bug_report_templates_spec.rb +0 -26
  337. data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +0 -50
  338. data/spec/javascripts/coffeescripts/jquery.aa.flash.js.coffee +0 -25
  339. data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +0 -34
  340. data/spec/javascripts/fixtures/checkboxes.html +0 -9
  341. data/spec/javascripts/fixtures/flashes.html +0 -2
  342. data/spec/javascripts/fixtures/table_checkboxes.html +0 -17
  343. data/spec/javascripts/helpers/SpecHelper.js +0 -3
  344. data/spec/javascripts/support/jasmine.yml +0 -74
  345. data/spec/javascripts/support/jasmine_runner.rb +0 -19
  346. data/spec/rails_helper.rb +0 -59
  347. data/spec/requests/default_namespace_spec.rb +0 -81
  348. data/spec/requests/memory_spec.rb +0 -25
  349. data/spec/requests/stylesheets_spec.rb +0 -18
  350. data/spec/spec_helper.rb +0 -1
  351. data/spec/support/active_admin_integration_spec_helper.rb +0 -73
  352. data/spec/support/active_admin_request_helpers.rb +0 -39
  353. data/spec/support/rails_template.rb +0 -150
  354. data/spec/support/rails_template_with_data.rb +0 -327
  355. data/spec/support/templates/admin/stores.rb +0 -7
  356. data/spec/support/templates/en.yml +0 -8
  357. data/spec/support/templates/manifest.js +0 -3
  358. data/spec/support/templates/policies/active_admin/comment_policy.rb +0 -9
  359. data/spec/support/templates/policies/active_admin/page_policy.rb +0 -18
  360. data/spec/support/templates/policies/admin_user_policy.rb +0 -11
  361. data/spec/support/templates/policies/application_policy.rb +0 -44
  362. data/spec/support/templates/policies/category_policy.rb +0 -7
  363. data/spec/support/templates/policies/post_policy.rb +0 -15
  364. data/spec/support/templates/policies/store_policy.rb +0 -11
  365. data/spec/support/templates/policies/user_policy.rb +0 -11
  366. data/spec/support/templates/post_decorator.rb +0 -10
  367. data/spec/unit/abstract_view_factory_spec.rb +0 -78
  368. data/spec/unit/action_builder_spec.rb +0 -125
  369. data/spec/unit/active_admin_spec.rb +0 -11
  370. data/spec/unit/application_spec.rb +0 -184
  371. data/spec/unit/asset_registration_spec.rb +0 -81
  372. data/spec/unit/authorization/authorization_adapter_spec.rb +0 -61
  373. data/spec/unit/authorization/controller_authorization_spec.rb +0 -43
  374. data/spec/unit/authorization/index_overriding_spec.rb +0 -23
  375. data/spec/unit/auto_link_spec.rb +0 -93
  376. data/spec/unit/batch_actions/resource_spec.rb +0 -84
  377. data/spec/unit/batch_actions/settings_spec.rb +0 -61
  378. data/spec/unit/belongs_to_spec.rb +0 -76
  379. data/spec/unit/cancan_adapter_spec.rb +0 -43
  380. data/spec/unit/comments_spec.rb +0 -176
  381. data/spec/unit/component_spec.rb +0 -18
  382. data/spec/unit/config_shared_examples.rb +0 -59
  383. data/spec/unit/controller_filters_spec.rb +0 -41
  384. data/spec/unit/csv_builder_spec.rb +0 -304
  385. data/spec/unit/dependency_spec.rb +0 -135
  386. data/spec/unit/devise_spec.rb +0 -110
  387. data/spec/unit/dsl_spec.rb +0 -120
  388. data/spec/unit/filters/active_filter_spec.rb +0 -135
  389. data/spec/unit/filters/active_spec.rb +0 -24
  390. data/spec/unit/filters/filter_form_builder_spec.rb +0 -502
  391. data/spec/unit/filters/resource_spec.rb +0 -128
  392. data/spec/unit/form_builder_spec.rb +0 -990
  393. data/spec/unit/generators/install_spec.rb +0 -31
  394. data/spec/unit/helpers/collection_spec.rb +0 -68
  395. data/spec/unit/helpers/scope_chain_spec.rb +0 -35
  396. data/spec/unit/helpers/settings_spec.rb +0 -30
  397. data/spec/unit/i18n_spec.rb +0 -29
  398. data/spec/unit/localizers/resource_localizer_spec.rb +0 -36
  399. data/spec/unit/menu_collection_spec.rb +0 -62
  400. data/spec/unit/menu_item_spec.rb +0 -141
  401. data/spec/unit/menu_spec.rb +0 -71
  402. data/spec/unit/namespace/authorization_spec.rb +0 -27
  403. data/spec/unit/namespace/register_page_spec.rb +0 -99
  404. data/spec/unit/namespace/register_resource_spec.rb +0 -162
  405. data/spec/unit/namespace_spec.rb +0 -124
  406. data/spec/unit/order_clause_spec.rb +0 -81
  407. data/spec/unit/page_controller_spec.rb +0 -5
  408. data/spec/unit/page_spec.rb +0 -128
  409. data/spec/unit/pretty_format_spec.rb +0 -82
  410. data/spec/unit/pundit_adapter_spec.rb +0 -98
  411. data/spec/unit/resource/action_items_spec.rb +0 -69
  412. data/spec/unit/resource/attributes_spec.rb +0 -49
  413. data/spec/unit/resource/includes_spec.rb +0 -21
  414. data/spec/unit/resource/menu_spec.rb +0 -18
  415. data/spec/unit/resource/naming_spec.rb +0 -122
  416. data/spec/unit/resource/ordering_spec.rb +0 -35
  417. data/spec/unit/resource/page_presenters_spec.rb +0 -44
  418. data/spec/unit/resource/pagination_spec.rb +0 -38
  419. data/spec/unit/resource/routes_spec.rb +0 -125
  420. data/spec/unit/resource/scopes_spec.rb +0 -50
  421. data/spec/unit/resource/sidebars_spec.rb +0 -43
  422. data/spec/unit/resource_collection_spec.rb +0 -175
  423. data/spec/unit/resource_controller/data_access_spec.rb +0 -230
  424. data/spec/unit/resource_controller/decorators_spec.rb +0 -94
  425. data/spec/unit/resource_controller/sidebars_spec.rb +0 -37
  426. data/spec/unit/resource_controller_spec.rb +0 -273
  427. data/spec/unit/resource_registration_spec.rb +0 -61
  428. data/spec/unit/resource_spec.rb +0 -320
  429. data/spec/unit/routing_spec.rb +0 -211
  430. data/spec/unit/scope_spec.rb +0 -209
  431. data/spec/unit/settings_spec.rb +0 -117
  432. data/spec/unit/view_factory_spec.rb +0 -19
  433. data/spec/unit/view_helpers/breadcrumbs_spec.rb +0 -252
  434. data/spec/unit/view_helpers/display_helper_spec.rb +0 -195
  435. data/spec/unit/view_helpers/download_format_links_helper_spec.rb +0 -39
  436. data/spec/unit/view_helpers/fields_for_spec.rb +0 -50
  437. data/spec/unit/view_helpers/flash_helper_spec.rb +0 -24
  438. data/spec/unit/view_helpers/form_helper_spec.rb +0 -42
  439. data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +0 -138
  440. data/spec/unit/views/components/attributes_table_spec.rb +0 -271
  441. data/spec/unit/views/components/batch_action_selector_spec.rb +0 -43
  442. data/spec/unit/views/components/blank_slate_spec.rb +0 -27
  443. data/spec/unit/views/components/columns_spec.rb +0 -187
  444. data/spec/unit/views/components/index_list_spec.rb +0 -49
  445. data/spec/unit/views/components/index_table_for_spec.rb +0 -127
  446. data/spec/unit/views/components/paginated_collection_spec.rb +0 -249
  447. data/spec/unit/views/components/panel_spec.rb +0 -58
  448. data/spec/unit/views/components/sidebar_section_spec.rb +0 -68
  449. data/spec/unit/views/components/site_title_spec.rb +0 -76
  450. data/spec/unit/views/components/status_tag_spec.rb +0 -265
  451. data/spec/unit/views/components/table_for_spec.rb +0 -436
  452. data/spec/unit/views/components/tabs_spec.rb +0 -67
  453. data/spec/unit/views/components/unsupported_browser_spec.rb +0 -41
  454. data/spec/unit/views/index_as_blog_spec.rb +0 -76
  455. data/spec/unit/views/pages/form_spec.rb +0 -54
  456. data/spec/unit/views/pages/index_spec.rb +0 -60
  457. data/spec/unit/views/pages/layout_spec.rb +0 -59
  458. data/spec/unit/views/pages/show_spec.rb +0 -32
  459. data/spec/unit/views/tabbed_navigation_spec.rb +0 -158
  460. data/tasks/docs.rake +0 -64
  461. data/tasks/lint.rake +0 -21
  462. data/tasks/local.rake +0 -25
  463. data/tasks/parallel_tests.rake +0 -66
  464. data/tasks/test.rake +0 -29
  465. /data/lib/generators/active_admin/install/templates/{admin_user.rb.erb → admin_users.rb.erb} +0 -0
@@ -1,100 +0,0 @@
1
- module ActiveAdminReloading
2
- def load_aa_config(config_content)
3
- ActiveSupport::Notifications.publish ActiveAdmin::Application::BeforeLoadEvent, ActiveAdmin.application
4
- eval(config_content)
5
- ActiveSupport::Notifications.publish ActiveAdmin::Application::AfterLoadEvent, ActiveAdmin.application
6
- Rails.application.reload_routes!
7
- ActiveAdmin.application.namespaces.each &:reset_menu!
8
- end
9
- end
10
-
11
- module ActiveAdminContentsRollback
12
- def files
13
- @files ||= {}
14
- end
15
-
16
- # Records the contents of a file the first time we are
17
- # about to change it
18
- def record(filename)
19
- contents = File.read(filename) rescue nil
20
- files[filename] = contents unless files.has_key? filename
21
- end
22
-
23
- # Rolls the recorded files back to their original states
24
- def rollback!
25
- files.each{ |file, contents| rollback_file(file, contents) }
26
- @files = {}
27
- end
28
-
29
- # If the file originally had content, override the stuff on disk.
30
- # Else, remove the file and its parent folder structure until Rails.root OR other files exist.
31
- def rollback_file(file, contents)
32
- if contents.present?
33
- File.open(file, 'w') { |f| f << contents }
34
- else
35
- File.delete(file)
36
- begin
37
- dir = File.dirname(file)
38
- until dir == Rails.root
39
- Dir.rmdir(dir) # delete current folder
40
- dir = dir.split('/')[0..-2].join('/') # select parent folder
41
- end
42
- rescue Errno::ENOTEMPTY # Directory not empty
43
- end
44
- end
45
- end
46
- end
47
-
48
- World(ActiveAdminReloading)
49
- World(ActiveAdminContentsRollback)
50
-
51
- After do
52
- rollback!
53
- end
54
-
55
- Given /^a(?:n? (index|show))? configuration of:$/ do |action, config_content|
56
- load_aa_config(config_content)
57
-
58
- case action
59
- when 'index'
60
- step 'I am logged in'
61
- case resource = config_content.match(/ActiveAdmin\.register (\w+)/)[1]
62
- when 'Post'
63
- step 'I am on the index page for posts'
64
- when 'Category'
65
- step 'I am on the index page for categories'
66
- else
67
- raise "#{resource} is not supported"
68
- end
69
- when 'show'
70
- case resource = config_content.match(/ActiveAdmin\.register (\w+)/)[1]
71
- when 'Post'
72
- step 'I am logged in'
73
- step 'I am on the index page for posts'
74
- step 'I follow "View"'
75
- when 'Tag'
76
- step 'I am logged in'
77
- Tag.create!
78
- visit admin_tag_path Tag.last
79
- else
80
- raise "#{resource} is not supported"
81
- end
82
- end
83
- end
84
-
85
- Given /^"([^"]*)" contains:$/ do |filename, contents|
86
- path = Rails.root + filename
87
- FileUtils.mkdir_p File.dirname path
88
- record path
89
-
90
- File.open(path, 'w+'){ |f| f << contents }
91
- end
92
-
93
- Given /^I add "([^"]*)" to the "([^"]*)" model$/ do |code, model_name|
94
- path = File.join Rails.root, "app", "models", "#{model_name}.rb"
95
- record path
96
-
97
- str = File.read(path).gsub /^(class .+)$/, "\\1\n #{code}\n"
98
- File.open(path, 'w+') { |f| f << str }
99
- ActiveSupport::Dependencies.clear
100
- end
@@ -1,15 +0,0 @@
1
- Then /^I should see the default welcome message$/ do
2
- step %{I should see "Welcome to Active Admin" within "#dashboard_default_message"}
3
- end
4
-
5
- Then /^I should not see the default welcome message$/ do
6
- step %{I should not see "Welcome to Active Admin"}
7
- end
8
-
9
- Then /^I should see a dashboard widget "([^"]*)"$/ do |name|
10
- expect(page).to have_css '.dashboard .panel h3', text: name
11
- end
12
-
13
- Then /^I should not see a dashboard widget "([^"]*)"$/ do |name|
14
- expect(page).to_not have_css '.dashboard .panel h3', text: name
15
- end
@@ -1,35 +0,0 @@
1
- def create_user(name, type = 'User')
2
- first_name, last_name = name.split(' ')
3
- user = type.camelize.constantize.where(first_name: first_name, last_name: last_name).first_or_create(username: name.tr(' ', '').underscore)
4
- end
5
-
6
- Given /^(a|\d+)( published)?( unstarred|starred)? posts?(?: with the title "([^"]*)")?(?: and body "([^"]*)")?(?: written by "([^"]*)")?(?: in category "([^"]*)")? exists?$/ do |count, published, starred, title, body, user, category_name|
7
- count = count == 'a' ? 1 : count.to_i
8
- published = Time.now if published
9
- starred = starred == " starred" if starred
10
- author = create_user(user) if user
11
- category = Category.where(name: category_name).first_or_create if category_name
12
- title ||= "Hello World %i"
13
- count.times do |i|
14
- Post.create! title: title % i, body: body, author: author, published_date: published, custom_category_id: category.try(:id), starred: starred
15
- end
16
- end
17
-
18
- Given /^a category named "([^"]*)" exists$/ do |name|
19
- Category.create! name: name
20
- end
21
-
22
- Given /^a (user|publisher) named "([^"]*)" exists$/ do |type, name|
23
- create_user name, type
24
- end
25
-
26
- Given /^a store named "([^"]*)" exists$/ do |name|
27
- Store.create! name: name
28
- end
29
-
30
- Given /^I create a new post with the title "([^"]*)"$/ do |title|
31
- first(:link, 'Posts').click
32
- click_link "New Post"
33
- fill_in 'post_title', with: title
34
- click_button "Create Post"
35
- end
@@ -1,48 +0,0 @@
1
- Then /^I should see a select filter for "([^"]*)"$/ do |label|
2
- expect(page).to have_css '.filter_select label', text: label
3
- end
4
-
5
- Then /^I should see a string filter for "([^"]*)"$/ do |label|
6
- expect(page).to have_css '.filter_string label', text: label
7
- end
8
-
9
- Then /^I should see a date range filter for "([^"]*)"$/ do |label|
10
- expect(page).to have_css '.filter_date_range label', text: label
11
- end
12
-
13
- Then /^I should see the following filters:$/ do |table|
14
- table.rows_hash.each do |label, type|
15
- step %{I should see a #{type} filter for "#{label}"}
16
- end
17
- end
18
-
19
- Given(/^I add parameter "([^"]*)" with value "([^"]*)" to the URL$/) do |key, value|
20
- url = page.current_url
21
- separator = url.include?('?') ? '&' : '?'
22
- visit url + separator + key.to_s + '=' + value.to_s
23
- end
24
-
25
- Then(/^I should( not)? have parameter "([^"]*)"( with value "([^"]*)")?$/) do |negative, key, compare_val, value|
26
- query = URI(page.current_url).query
27
- if query.nil?
28
- expect(negative).to eq true
29
- else
30
- params = Rack::Utils.parse_query query
31
- if compare_val
32
- expect(params[key]).to_not eq value if negative
33
- expect(params[key]).to eq value unless negative
34
- else
35
- expect(params[key]).to eq nil if negative
36
- expect(params[key]).to be_present unless negative
37
- end
38
- end
39
- end
40
-
41
- Then /^I should see current filter "([^"]*)" equal to "([^"]*)"( with label "([^"]*)")?$/ do |name, value, label_block, label|
42
- expect(page).to have_css "li.current_filter_#{name} span", text: label if label_block
43
- expect(page).to have_css "li.current_filter_#{name} b", text: value
44
- end
45
-
46
- Then /^I should see link "([^"]*)" in current filters/ do |label|
47
- expect(page).to have_css "li.current_filter b a", text: label
48
- end
@@ -1,11 +0,0 @@
1
- Then /^I should see a flash with "([^"]*)"$/ do |text|
2
- expect(page).to have_content text
3
- end
4
-
5
- Then /^I should see a successful create flash$/ do
6
- expect(page).to have_css 'div.flash_notice', text: /was successfully created/
7
- end
8
-
9
- Then /^I should not see a successful create flash$/ do
10
- expect(page).to_not have_css 'div.flash_notice', text: /was successfully created/
11
- end
@@ -1,11 +0,0 @@
1
- Then /^I should see the default footer$/ do
2
- expect(page).to have_css '#footer', text: "Powered by Active Admin #{ActiveAdmin::VERSION}"
3
- end
4
-
5
- Then /^I should see the footer "([^"]*)"$/ do |footer|
6
- expect(page).to have_css '#footer', text: footer
7
- end
8
-
9
- Then /^I should not see the footer "([^"]*)"$/ do |footer|
10
- expect(page).to_not have_css '#footer', text: footer
11
- end
@@ -1,56 +0,0 @@
1
- require 'csv'
2
-
3
- Then "I should see nicely formatted datetimes" do
4
- expect(page.body).to match /\w+ \d{1,2}, \d{4} \d{2}:\d{2}/
5
- end
6
-
7
- Then /^I should( not)? see a link to download "([^"]*)"$/ do |negate, format|
8
- method = negate ? :to_not : :to
9
- expect(page).send method, have_css("#index_footer a", text: format)
10
- end
11
-
12
- # Check first rows of the displayed CSV.
13
- Then /^I should download a CSV file with "([^"]*)" separator for "([^"]*)" containing:$/ do |sep, resource_name, table|
14
- body = page.driver.response.body
15
- content_type_header, content_disposition_header = %w[Content-Type Content-Disposition].map do |header_name|
16
- page.response_headers[header_name]
17
- end
18
- expect(content_type_header).to eq 'text/csv; charset=utf-8'
19
- expect(content_disposition_header).to match /\Aattachment; filename=".+?\.csv"\z/
20
-
21
- begin
22
- csv = CSV.parse(body, col_sep: sep)
23
- table.raw.each_with_index do |expected_row, row_index|
24
- expected_row.each_with_index do |expected_cell, col_index|
25
- cell = csv.try(:[], row_index).try(:[], col_index)
26
- if expected_cell.blank?
27
- expect(cell).to eq nil
28
- else
29
- expect(cell || '').to match /#{expected_cell}/
30
- end
31
- end
32
- end
33
- rescue
34
- puts "Expecting:"
35
- p table.raw
36
- puts "to match:"
37
- p csv
38
- raise $!
39
- end
40
- end
41
-
42
- Then /^I should download a CSV file for "([^"]*)" containing:$/ do |resource_name, table|
43
- step %{I should download a CSV file with "," separator for "#{resource_name}" containing:}, table
44
- end
45
-
46
- Then /^the CSV file should contain "([^"]*)" in quotes$/ do |text|
47
- expect(page.driver.response.body).to match /"#{text}"/
48
- end
49
-
50
- Then /^the encoding of the CSV file should be "([^"]*)"$/ do |text|
51
- expect(page.driver.response.body.encoding).to be Encoding.find(Encoding.aliases[text] || text)
52
- end
53
-
54
- Then /^access denied$/ do
55
- expect(page).to have_content(I18n.t("active_admin.access_denied.message"))
56
- end
@@ -1,11 +0,0 @@
1
- Given /^String "([^"]*)" corresponds to "([^"]*)"$/ do |translation, key|
2
- *seq, last_key = key.split('.')
3
- result = seq.reverse.inject({last_key.to_sym => translation}) do |temp_result, nested_key|
4
- {nested_key.to_sym => temp_result}
5
- end
6
- I18n.backend.store_translations :en, active_admin: result
7
- end
8
-
9
- When /^I set my locale to "([^"]*)"$/ do |lang|
10
- I18n.locale = lang
11
- end
@@ -1,29 +0,0 @@
1
- Then /^I should( not)? see the scope "([^"]*)"( selected)?$/ do |negate, name, selected|
2
- should = "I should#{' not' if negate}"
3
- scope = ".scopes#{' .selected' if selected}"
4
- step %{#{should} see "#{name}" within "#{scope}"}
5
- end
6
-
7
- Then /^I should see the scope "([^"]*)" not selected$/ do |name|
8
- step %{I should see the scope "#{name}"}
9
- expect(page).to_not have_css '.scopes .selected', text: name
10
- end
11
-
12
- Then /^I should see the scope "([^"]*)" with the count (\d+)$/ do |name, count|
13
- name = name.tr(' ', '').underscore.downcase
14
- step %{I should see "#{count}" within ".scopes .#{name} .count"}
15
- end
16
-
17
- Then /^I should see the scope with label "([^"]*)"$/ do |label|
18
- expect(page).to have_link(label)
19
- end
20
-
21
- Then /^I should see the current scope with label "([^"]*)"$/ do |label|
22
- expect(page).to have_css '.current_scope_name', text: label
23
- end
24
-
25
- Then /^I should see the scope "([^"]*)" with no count$/ do |name|
26
- name = name.tr(" ", "").underscore.downcase
27
- expect(page).to have_css ".scopes .#{name}"
28
- expect(page).to_not have_css ".scopes .#{name} .count"
29
- end
@@ -1,3 +0,0 @@
1
- When /^I click "(.*?)"$/ do |link|
2
- click_link(link)
3
- end
@@ -1,3 +0,0 @@
1
- Then /^I should see the Active Admin layout$/ do
2
- expect(page).to have_css '#active_admin_content #main_content_wrapper'
3
- end
@@ -1,7 +0,0 @@
1
- Then /^I should see an action item button "([^"]*)"$/ do |content|
2
- expect(page).to have_css '.action_items a', text: content
3
- end
4
-
5
- Then /^I should not see an action item button "([^"]*)"$/ do |content|
6
- expect(page).to_not have_css '.action_items', text: content
7
- end
@@ -1,11 +0,0 @@
1
- Then /^I should see a menu item for "([^"]*)"$/ do |name|
2
- expect(page).to have_css '#tabs > li > a', text: name
3
- end
4
-
5
- Then /^I should not see a menu item for "([^"]*)"$/ do |name|
6
- expect(page).to_not have_css '#tabs > li > a', text: name
7
- end
8
-
9
- Then /^I should see a nested menu item for "([^"]*)"$/ do |name|
10
- expect(page).to have_css '#tabs > li > ul > li > a', text: name
11
- end
@@ -1,3 +0,0 @@
1
- Then /^the site should contain a meta tag with name "([^"]*)" and content "([^"]*)"$/ do |name, content|
2
- expect(page).to have_xpath("//meta[@name='#{name}' and @content='#{content}']", visible: false)
3
- end
@@ -1,15 +0,0 @@
1
- Then /^I should not see pagination$/ do
2
- expect(page).to_not have_css '.pagination'
3
- end
4
-
5
- Then /^I should see pagination with (\d+) pages$/ do |count|
6
- expect(page).to have_css '.pagination span.page', count: count
7
- end
8
-
9
- Then /^I should see the pagination "Next" link/ do
10
- expect(page).to have_css "a", text: "Next"
11
- end
12
-
13
- Then /^I should not see the pagination "Next" link/ do
14
- expect(page).to_not have_css "a", text: "Next"
15
- end
@@ -1,11 +0,0 @@
1
- Then /^I should see a sidebar titled "([^"]*)"$/ do |title|
2
- expect(page).to have_css '.sidebar_section h3', text: title
3
- end
4
-
5
- Then /^I should not see a sidebar titled "([^"]*)"$/ do |title|
6
- expect(page).not_to have_css '.sidebar_section h3', text: title
7
- end
8
-
9
- Then(/^I should see a sidebar titled "(.*?)" above sidebar titled "(.*?)"$/) do |top_title, bottom_title|
10
- expect(page).to have_css %Q(.sidebar_section:contains('#{top_title}') + .sidebar_section:contains('#{bottom_title}'))
11
- end
@@ -1,17 +0,0 @@
1
- Then /^I should see the site title "([^"]*)"$/ do |title|
2
- expect(page).to have_css 'h1#site_title', text: title
3
- end
4
-
5
- Then /^I should not see the site title "([^"]*)"$/ do |title|
6
- expect(page).to_not have_css 'h1#site_title', text: title
7
- end
8
-
9
- Then /^I should see the site title image "([^"]*)"$/ do |image|
10
- img = page.find('h1#site_title img')
11
- expect(img[:src]).to eq(image)
12
- end
13
-
14
- Then /^I should see the site title image linked to "([^"]*)"$/ do |url|
15
- link = page.find('h1#site_title a')
16
- expect(link[:href]).to eq(url)
17
- end
@@ -1,8 +0,0 @@
1
- Then /^the "([^"]*)" tab should be selected$/ do |name|
2
- step %{I should see "#{name}" within "ul#tabs li.current"}
3
- end
4
-
5
- Then(/^I should see two tabs "(.*?)" and "(.*?)"$/) do |tab_1, tab_2|
6
- expect(page).to have_link(tab_1)
7
- expect(page).to have_link(tab_2)
8
- end
@@ -1,116 +0,0 @@
1
- Then /^I should see (\d+) ([\w]*) in the table$/ do |count, resource_type|
2
- expect(page).to \
3
- have_css("table.index_table tr > td:first-child", count: count.to_i)
4
- end
5
-
6
- # TODO: simplify this, if possible?
7
- class HtmlTableToTextHelper
8
- def initialize(html, table_css_selector = "table")
9
- @html = html
10
- @selector = table_css_selector
11
- end
12
-
13
- def to_array
14
- rows = Nokogiri::HTML(@html).css("#{@selector} tr")
15
- rows.map do |row|
16
- row.css('th, td').map do |td|
17
- cell_to_string(td)
18
- end
19
- end
20
- end
21
-
22
- private
23
-
24
- def cell_to_string(td)
25
- str = ""
26
- input = td.css('input').last
27
-
28
- if input
29
- str << input_to_string(input)
30
- end
31
-
32
- str << td.content.strip.gsub("\n", ' ')
33
- end
34
-
35
- def input_to_string(input)
36
- case input.attribute("type").value
37
- when "checkbox"
38
- if input.attribute("disabled")
39
- "_"
40
- else
41
- if input.attribute("checked")
42
- "[X]"
43
- else
44
- "[ ]"
45
- end
46
- end
47
- when "text"
48
- if input.attribute("value").present?
49
- "[#{input.attribute("value")}]"
50
- else
51
- "[ ]"
52
- end
53
- when "submit"
54
- input.attribute("value")
55
- else
56
- raise "I don't know what to do with #{input}"
57
- end
58
- end
59
- end
60
-
61
- module TableMatchHelper
62
- # @param table [Array[Array]]
63
- # @param expected_table [Array[Array[String]]]
64
- # The expected_table values are String. They are converted to
65
- # Regexp when they start and end with a '/'
66
- # Example:
67
- #
68
- # assert_table_match(
69
- # [["Name", "Date"], ["Philippe", "Feb 08"]],
70
- # [["Name", "Date"], ["Philippe", "/\w{3} \d{2}/"]]
71
- # )
72
- def assert_tables_match(table, expected_table)
73
- expected_table.each_index do |row_index|
74
- expected_table[row_index].each_index do |column_index|
75
- expected_cell = expected_table[row_index][column_index]
76
- cell = table.try(:[], row_index).try(:[], column_index)
77
- begin
78
- assert_cells_match(cell, expected_cell)
79
- rescue
80
- puts "Cell at line #{row_index} and column #{column_index}: #{cell.inspect} does not match #{expected_cell.inspect}"
81
- puts "Expecting:"
82
- table.each { |row| puts row.inspect }
83
- puts "to match:"
84
- expected_table.each { |row| puts row.inspect }
85
- raise $!
86
- end
87
- end
88
- end
89
- end
90
-
91
- def assert_cells_match(cell, expected_cell)
92
- if expected_cell =~ /^\/.*\/$/
93
- expect(cell).to match /#{expected_cell[1..-2]}/
94
- else
95
- expect((cell || "").strip).to eq expected_cell
96
- end
97
- end
98
- end
99
-
100
- World(TableMatchHelper)
101
-
102
- # Usage:
103
- #
104
- # I should see the "invoices" table:
105
- # | Invoice # | Date | Total Amount |
106
- # | /\d+/ | 27/01/12 | $30.00 |
107
- # | /\d+/ | 12/02/12 | $25.00 |
108
- #
109
- Then /^I should see the "([^"]*)" table:$/ do |table_id, expected_table|
110
- expect(page).to have_css "table##{table_id}"
111
-
112
- assert_tables_match(
113
- HtmlTableToTextHelper.new(page.body, "table##{table_id}").to_array,
114
- expected_table.raw
115
- )
116
- end
@@ -1,52 +0,0 @@
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
@@ -1,86 +0,0 @@
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|choose) "([^"]*)"$/ 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