yousty-activeadmin 1.0.4.pre → 1.0.5.pre

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 (467) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +261 -211
  3. data/CONTRIBUTING.md +73 -39
  4. data/Gemfile +38 -20
  5. data/Guardfile +1 -0
  6. data/LICENSE +1 -1
  7. data/README.md +48 -24
  8. data/Rakefile +12 -4
  9. data/activeadmin.gemspec +21 -26
  10. data/app/assets/javascripts/active_admin/application.js.coffee +34 -5
  11. data/app/assets/javascripts/active_admin/base.js.coffee +11 -2
  12. data/app/assets/javascripts/active_admin/ext/jquery-ui.js.coffee +6 -0
  13. data/app/assets/javascripts/active_admin/ext/jquery.js.coffee +7 -0
  14. data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +39 -0
  15. data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +3 -4
  16. data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +51 -55
  17. data/app/assets/javascripts/active_admin/lib/flash.js.coffee +19 -0
  18. data/app/assets/javascripts/active_admin/lib/has_many.js.coffee +79 -0
  19. data/app/assets/javascripts/active_admin/lib/modal_dialog.js.coffee +37 -0
  20. data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +27 -0
  21. data/app/assets/javascripts/active_admin/lib/popover.js.coffee +29 -58
  22. data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +2 -3
  23. data/app/assets/stylesheets/active_admin/{_base.css.scss → _base.scss} +3 -0
  24. data/app/assets/stylesheets/active_admin/{_forms.css.scss → _forms.scss} +51 -15
  25. data/app/assets/stylesheets/active_admin/{_header.css.scss → _header.scss} +9 -5
  26. data/app/assets/stylesheets/active_admin/{_mixins.css.scss → _mixins.scss} +0 -0
  27. data/app/assets/stylesheets/active_admin/{_typography.css.scss → _typography.scss} +0 -0
  28. data/app/assets/stylesheets/active_admin/components/_batch_actions.scss +11 -0
  29. data/app/assets/stylesheets/active_admin/components/_buttons.scss +1 -1
  30. data/app/assets/stylesheets/active_admin/components/{_comments.css.scss → _comments.scss} +0 -0
  31. data/app/assets/stylesheets/active_admin/components/{_date_picker.css.scss → _date_picker.scss} +40 -12
  32. data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +3 -1
  33. data/app/assets/stylesheets/active_admin/components/_flash_messages.scss +37 -0
  34. data/app/assets/stylesheets/active_admin/components/_modal_dialog.scss +34 -0
  35. data/app/assets/stylesheets/active_admin/components/_pagination.scss +10 -0
  36. data/app/assets/stylesheets/active_admin/components/{_popovers.css.scss → _popovers.scss} +0 -0
  37. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +4 -0
  38. data/app/assets/stylesheets/active_admin/components/_table_tools.scss +67 -0
  39. data/app/assets/stylesheets/active_admin/components/{_tables.css.scss → _tables.scss} +1 -0
  40. data/app/assets/stylesheets/active_admin/components/_tabs.scss +65 -0
  41. data/app/assets/stylesheets/active_admin/components/_unsupported_browser.scss +16 -0
  42. data/app/assets/stylesheets/active_admin/mixins/{_all.css.scss → _all.scss} +0 -0
  43. data/app/assets/stylesheets/active_admin/mixins/{_buttons.css.scss → _buttons.scss} +0 -0
  44. data/app/assets/stylesheets/active_admin/mixins/{_gradients.css.scss → _gradients.scss} +1 -1
  45. data/app/assets/stylesheets/active_admin/mixins/{_icons.css.scss → _icons.scss} +1 -2
  46. data/app/assets/stylesheets/active_admin/mixins/{_reset.css.scss → _reset.scss} +0 -0
  47. data/app/assets/stylesheets/active_admin/mixins/{_rounded.css.scss → _rounded.scss} +0 -0
  48. data/app/assets/stylesheets/active_admin/mixins/{_sections.css.scss → _sections.scss} +7 -1
  49. data/app/assets/stylesheets/active_admin/mixins/{_shadows.css.scss → _shadows.scss} +0 -0
  50. data/app/assets/stylesheets/active_admin/mixins/{_variables.css.scss → _variables.scss} +10 -8
  51. data/app/assets/stylesheets/active_admin/{print.css.scss → print.scss} +4 -0
  52. data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +10 -7
  53. data/app/views/active_admin/devise/confirmations/new.html.erb +15 -0
  54. data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +1 -1
  55. data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +1 -1
  56. data/app/views/active_admin/devise/passwords/edit.html.erb +9 -10
  57. data/app/views/active_admin/devise/passwords/new.html.erb +5 -4
  58. data/app/views/active_admin/devise/registrations/new.html.erb +22 -0
  59. data/app/views/active_admin/devise/sessions/new.html.erb +8 -8
  60. data/app/views/active_admin/devise/shared/_links.erb +1 -1
  61. data/app/views/active_admin/devise/unlocks/new.html.erb +5 -4
  62. data/app/views/layouts/active_admin_logged_out.html.erb +3 -5
  63. data/config/locales/ar.yml +120 -0
  64. data/config/locales/bg.yml +26 -6
  65. data/config/locales/bs.yml +122 -0
  66. data/config/locales/ca.yml +10 -1
  67. data/config/locales/cs.yml +7 -2
  68. data/config/locales/da.yml +7 -3
  69. data/config/locales/de-CH.yml +14 -31
  70. data/config/locales/de.yml +33 -33
  71. data/config/locales/el.yml +127 -0
  72. data/config/locales/en-GB.yml +11 -4
  73. data/config/locales/en.yml +21 -4
  74. data/config/locales/{es_MX.yml → es-MX.yml} +14 -24
  75. data/config/locales/es.yml +32 -25
  76. data/config/locales/fa.yml +120 -0
  77. data/config/locales/fi.yml +9 -5
  78. data/config/locales/fr.yml +28 -12
  79. data/config/locales/he.yml +7 -3
  80. data/config/locales/hr.yml +42 -11
  81. data/config/locales/hu.yml +10 -3
  82. data/config/locales/it.yml +31 -3
  83. data/config/locales/ja.yml +17 -4
  84. data/config/locales/ko.yml +7 -1
  85. data/config/locales/lt.yml +42 -11
  86. data/config/locales/lv.yml +7 -3
  87. data/config/locales/{no-NB.yml → nb.yml} +46 -15
  88. data/config/locales/nl.yml +36 -5
  89. data/config/locales/pl.yml +13 -8
  90. data/config/locales/pt-BR.yml +36 -5
  91. data/config/locales/pt-PT.yml +8 -4
  92. data/config/locales/ro.yml +7 -3
  93. data/config/locales/ru.yml +26 -5
  94. data/config/locales/sv-SE.yml +9 -5
  95. data/config/locales/tr.yml +10 -3
  96. data/config/locales/uk.yml +36 -12
  97. data/config/locales/vi.yml +7 -3
  98. data/config/locales/zh-CN.yml +26 -10
  99. data/config/locales/zh-TW.yml +19 -13
  100. data/docs/0-installation.md +14 -6
  101. data/docs/1-general-configuration.md +8 -5
  102. data/docs/10-custom-pages.md +68 -70
  103. data/docs/11-decorators.md +48 -59
  104. data/docs/12-arbre-components.md +79 -73
  105. data/docs/13-authorization-adapter.md +128 -107
  106. data/docs/14-gotchas.md +90 -0
  107. data/docs/2-resource-customization.md +82 -15
  108. data/docs/3-index-pages.md +71 -12
  109. data/docs/3-index-pages/custom-index.md +31 -0
  110. data/docs/3-index-pages/index-as-table.md +45 -2
  111. data/docs/4-csv-format.md +1 -1
  112. data/docs/5-forms.md +78 -29
  113. data/docs/6-show-pages.md +31 -3
  114. data/docs/7-sidebars.md +46 -25
  115. data/docs/8-custom-actions.md +98 -77
  116. data/docs/9-batch-actions.md +211 -133
  117. data/docs/README.md +24 -0
  118. data/features/action_item.feature +3 -3
  119. data/features/authorization_pundit.feature +37 -0
  120. data/features/belongs_to.feature +3 -0
  121. data/features/breadcrumb.feature +48 -0
  122. data/features/comments/commenting.feature +44 -13
  123. data/features/development_reloading.feature +3 -4
  124. data/features/edit_page.feature +9 -19
  125. data/features/favicon.feature +3 -3
  126. data/features/i18n.feature +5 -0
  127. data/features/index/batch_actions.feature +41 -0
  128. data/features/index/filters.feature +23 -0
  129. data/features/index/format_as_csv.feature +90 -4
  130. data/features/index/index_as_blog.feature +4 -4
  131. data/features/index/index_as_table.feature +102 -6
  132. data/features/index/index_blank_slate.feature +22 -0
  133. data/features/index/index_scope_to.feature +16 -16
  134. data/features/index/page_title.feature +11 -0
  135. data/features/index/pagination.feature +1 -1
  136. data/features/index/switch_index_view.feature +14 -14
  137. data/features/new_page.feature +10 -20
  138. data/features/registering_pages.feature +1 -1
  139. data/features/renamed_resource.feature +32 -0
  140. data/features/show/page_title.feature +11 -0
  141. data/features/show/tabs.feature +27 -0
  142. data/features/sidebar_sections.feature +12 -0
  143. data/features/specifying_actions.feature +3 -3
  144. data/features/step_definitions/action_item_steps.rb +2 -2
  145. data/features/step_definitions/action_link_steps.rb +14 -1
  146. data/features/step_definitions/additional_web_steps.rb +17 -18
  147. data/features/step_definitions/asset_steps.rb +3 -3
  148. data/features/step_definitions/attribute_steps.rb +8 -3
  149. data/features/step_definitions/batch_action_steps.rb +26 -9
  150. data/features/step_definitions/blog_steps.rb +3 -0
  151. data/features/step_definitions/breadcrumb_steps.rb +1 -1
  152. data/features/step_definitions/comment_steps.rb +1 -1
  153. data/features/step_definitions/configuration_steps.rb +1 -1
  154. data/features/step_definitions/dashboard_steps.rb +2 -2
  155. data/features/step_definitions/factory_steps.rb +6 -6
  156. data/features/step_definitions/filter_steps.rb +25 -3
  157. data/features/step_definitions/flash_steps.rb +3 -3
  158. data/features/step_definitions/format_steps.rb +17 -10
  159. data/features/step_definitions/index_scope_steps.rb +5 -5
  160. data/features/step_definitions/layout_steps.rb +1 -1
  161. data/features/step_definitions/member_link_steps.rb +2 -2
  162. data/features/step_definitions/menu_steps.rb +3 -3
  163. data/features/step_definitions/pagination_steps.rb +2 -3
  164. data/features/step_definitions/sidebar_steps.rb +8 -3
  165. data/features/step_definitions/site_title_steps.rb +6 -4
  166. data/features/step_definitions/symbol_leak_steps.rb +1 -1
  167. data/features/step_definitions/tab_steps.rb +5 -0
  168. data/features/step_definitions/table_steps.rb +4 -4
  169. data/features/step_definitions/user_steps.rb +15 -9
  170. data/features/step_definitions/web_steps.rb +10 -11
  171. data/features/sti_resource.feature +2 -10
  172. data/features/strong_parameters.feature +73 -0
  173. data/features/support/env.rb +35 -2
  174. data/features/support/paths.rb +2 -2
  175. data/features/support/selectors.rb +1 -1
  176. data/features/users/resetting_password.feature +7 -7
  177. data/lib/active_admin.rb +18 -13
  178. data/lib/active_admin/abstract_view_factory.rb +7 -17
  179. data/lib/active_admin/application.rb +50 -25
  180. data/lib/active_admin/asset_registration.rb +2 -2
  181. data/lib/active_admin/authorization_adapter.rb +2 -2
  182. data/lib/active_admin/base_controller.rb +2 -3
  183. data/lib/active_admin/base_controller/authorization.rb +13 -31
  184. data/lib/active_admin/batch_actions.rb +1 -1
  185. data/lib/active_admin/batch_actions/controller.rb +13 -7
  186. data/lib/active_admin/batch_actions/resource_extension.rb +43 -17
  187. data/lib/active_admin/batch_actions/views/batch_action_form.rb +7 -4
  188. data/lib/active_admin/batch_actions/views/batch_action_popover.rb +3 -3
  189. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +8 -17
  190. data/lib/active_admin/batch_actions/views/selection_cells.rb +4 -4
  191. data/lib/active_admin/callbacks.rb +25 -24
  192. data/lib/active_admin/cancan_adapter.rb +7 -11
  193. data/lib/active_admin/csv_builder.rb +92 -15
  194. data/lib/active_admin/dependency.rb +93 -0
  195. data/lib/active_admin/deprecation.rb +6 -7
  196. data/lib/active_admin/devise.rb +26 -14
  197. data/lib/active_admin/dsl.rb +18 -11
  198. data/lib/active_admin/engine.rb +7 -2
  199. data/lib/active_admin/error.rb +59 -0
  200. data/lib/active_admin/filters/dsl.rb +2 -2
  201. data/lib/active_admin/filters/forms.rb +19 -30
  202. data/lib/active_admin/filters/formtastic_addons.rb +20 -11
  203. data/lib/active_admin/filters/resource_extension.rb +16 -9
  204. data/lib/active_admin/form_builder.rb +94 -105
  205. data/lib/active_admin/helpers/collection.rb +7 -13
  206. data/lib/active_admin/helpers/i18n.rb +7 -0
  207. data/lib/active_admin/helpers/optional_display.rb +5 -5
  208. data/lib/active_admin/helpers/scope_chain.rb +1 -1
  209. data/lib/active_admin/helpers/settings.rb +16 -9
  210. data/lib/active_admin/iconic.rb +17 -15
  211. data/lib/active_admin/iconic/icons.rb +136 -136
  212. data/lib/active_admin/inputs.rb +11 -7
  213. data/lib/active_admin/inputs/datepicker_input.rb +1 -1
  214. data/lib/active_admin/inputs/filters/base.rb +42 -0
  215. data/lib/active_admin/inputs/filters/base/search_method_select.rb +75 -0
  216. data/lib/active_admin/inputs/filters/boolean_input.rb +24 -0
  217. data/lib/active_admin/inputs/filters/check_boxes_input.rb +50 -0
  218. data/lib/active_admin/inputs/filters/date_range_input.rb +36 -0
  219. data/lib/active_admin/inputs/filters/numeric_input.rb +12 -0
  220. data/lib/active_admin/inputs/filters/select_input.rb +54 -0
  221. data/lib/active_admin/inputs/filters/string_input.rb +26 -0
  222. data/lib/active_admin/menu.rb +3 -3
  223. data/lib/active_admin/menu_collection.rb +1 -4
  224. data/lib/active_admin/namespace.rb +52 -29
  225. data/lib/active_admin/order_clause.rb +26 -0
  226. data/lib/active_admin/orm/active_record.rb +2 -0
  227. data/lib/active_admin/orm/active_record/comments.rb +48 -51
  228. data/lib/active_admin/orm/active_record/comments/comment.rb +16 -10
  229. data/lib/active_admin/orm/active_record/comments/namespace_helper.rb +1 -1
  230. data/lib/active_admin/orm/active_record/comments/resource_helper.rb +1 -1
  231. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +15 -13
  232. data/lib/active_admin/page.rb +5 -1
  233. data/lib/active_admin/page_dsl.rb +1 -1
  234. data/lib/active_admin/page_presenter.rb +2 -2
  235. data/lib/active_admin/pundit_adapter.rb +68 -0
  236. data/lib/active_admin/resource.rb +12 -3
  237. data/lib/active_admin/resource/action_items.rb +15 -8
  238. data/lib/active_admin/resource/belongs_to.rb +7 -3
  239. data/lib/active_admin/resource/controllers.rb +1 -0
  240. data/lib/active_admin/resource/includes.rb +12 -0
  241. data/lib/active_admin/resource/menu.rb +5 -5
  242. data/lib/active_admin/resource/naming.rb +25 -47
  243. data/lib/active_admin/resource/page_presenters.rb +1 -1
  244. data/lib/active_admin/resource/routes.rb +26 -10
  245. data/lib/active_admin/resource/scope_to.rb +7 -7
  246. data/lib/active_admin/resource/sidebars.rb +1 -0
  247. data/lib/active_admin/resource_collection.rb +44 -16
  248. data/lib/active_admin/resource_controller.rb +6 -5
  249. data/lib/active_admin/resource_controller/data_access.rb +87 -82
  250. data/lib/active_admin/resource_controller/decorators.rb +91 -9
  251. data/lib/active_admin/resource_controller/streaming.rb +37 -0
  252. data/lib/active_admin/resource_dsl.rb +54 -10
  253. data/lib/active_admin/router.rb +7 -7
  254. data/lib/active_admin/scope.rb +6 -6
  255. data/lib/active_admin/sidebar_section.rb +10 -2
  256. data/lib/active_admin/version.rb +1 -1
  257. data/lib/active_admin/view_factory.rb +17 -16
  258. data/lib/active_admin/view_helpers.rb +0 -1
  259. data/lib/active_admin/view_helpers/auto_link_helper.rb +23 -12
  260. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +13 -6
  261. data/lib/active_admin/view_helpers/display_helper.rb +30 -17
  262. data/lib/active_admin/view_helpers/download_format_links_helper.rb +21 -24
  263. data/lib/active_admin/view_helpers/fields_for.rb +2 -2
  264. data/lib/active_admin/view_helpers/flash_helper.rb +4 -3
  265. data/lib/active_admin/view_helpers/form_helper.rb +5 -9
  266. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +6 -6
  267. data/lib/active_admin/views/action_items.rb +2 -2
  268. data/lib/active_admin/views/components/action_list_popover.rb +1 -1
  269. data/lib/active_admin/views/components/active_admin_form.rb +123 -0
  270. data/lib/active_admin/views/components/attributes_table.rb +22 -13
  271. data/lib/active_admin/views/components/blank_slate.rb +1 -1
  272. data/lib/active_admin/views/components/columns.rb +13 -7
  273. data/lib/active_admin/views/components/dropdown_menu.rb +6 -6
  274. data/lib/active_admin/views/components/index_list.rb +7 -7
  275. data/lib/active_admin/views/components/paginated_collection.rb +33 -17
  276. data/lib/active_admin/views/components/panel.rb +8 -2
  277. data/lib/active_admin/views/components/popover.rb +1 -1
  278. data/lib/active_admin/views/components/scopes.rb +1 -1
  279. data/lib/active_admin/views/components/sidebar_section.rb +3 -2
  280. data/lib/active_admin/views/components/site_title.rb +2 -2
  281. data/lib/active_admin/views/components/status_tag.rb +34 -11
  282. data/lib/active_admin/views/components/table_for.rb +67 -22
  283. data/lib/active_admin/views/components/tabs.rb +28 -0
  284. data/lib/active_admin/views/components/unsupported_browser.rb +11 -0
  285. data/lib/active_admin/views/footer.rb +3 -3
  286. data/lib/active_admin/views/header.rb +3 -3
  287. data/lib/active_admin/views/index_as_blog.rb +6 -6
  288. data/lib/active_admin/views/index_as_grid.rb +2 -2
  289. data/lib/active_admin/views/index_as_table.rb +127 -40
  290. data/lib/active_admin/views/pages/base.rb +22 -18
  291. data/lib/active_admin/views/pages/form.rb +16 -6
  292. data/lib/active_admin/views/pages/index.rb +36 -20
  293. data/lib/active_admin/views/pages/layout.rb +1 -1
  294. data/lib/active_admin/views/pages/show.rb +4 -4
  295. data/lib/active_admin/views/tabbed_navigation.rb +7 -3
  296. data/lib/active_admin/views/title_bar.rb +10 -8
  297. data/lib/generators/active_admin/assets/assets_generator.rb +1 -3
  298. data/lib/generators/active_admin/devise/devise_generator.rb +20 -28
  299. data/lib/generators/active_admin/install/install_generator.rb +8 -9
  300. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +20 -22
  301. data/lib/generators/active_admin/install/templates/admin_user.rb.erb +12 -9
  302. data/lib/generators/active_admin/install/templates/dashboard.rb +4 -4
  303. data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb +3 -3
  304. data/lib/generators/active_admin/page/USAGE +8 -0
  305. data/lib/generators/active_admin/page/page_generator.rb +12 -0
  306. data/lib/generators/active_admin/page/templates/page.rb +5 -0
  307. data/lib/generators/active_admin/resource/resource_generator.rb +2 -4
  308. data/lib/generators/active_admin/resource/templates/admin.rb +15 -0
  309. data/lib/ransack_ext.rb +4 -4
  310. data/script/local +2 -2
  311. data/script/travis_cache +107 -0
  312. data/spec/javascripts/coffeescripts/jquery.aa.flash.js.coffee +25 -0
  313. data/spec/javascripts/fixtures/flashes.html +2 -0
  314. data/spec/rails_helper.rb +154 -0
  315. data/spec/{integration → requests}/default_namespace_spec.rb +6 -6
  316. data/spec/{integration → requests}/javascript_spec.rb +5 -5
  317. data/spec/requests/memory_spec.rb +23 -0
  318. data/spec/requests/stylesheets_spec.rb +18 -0
  319. data/spec/spec_helper.rb +12 -170
  320. data/spec/support/detect_rails_version.rb +31 -39
  321. data/spec/support/rails_template.rb +61 -34
  322. data/spec/support/rails_template_with_data.rb +14 -14
  323. data/spec/support/templates/admin/stores.rb +3 -5
  324. data/spec/support/templates/policies/active_admin/comment_policy.rb +9 -0
  325. data/spec/support/templates/policies/active_admin/page_policy.rb +18 -0
  326. data/spec/support/templates/policies/admin_user_policy.rb +11 -0
  327. data/spec/support/templates/policies/application_policy.rb +45 -0
  328. data/spec/support/templates/policies/category_policy.rb +7 -0
  329. data/spec/support/templates/policies/post_policy.rb +15 -0
  330. data/spec/support/templates/policies/store_policy.rb +11 -0
  331. data/spec/support/templates/policies/user_policy.rb +11 -0
  332. data/spec/support/templates/post_decorator.rb +4 -46
  333. data/spec/unit/abstract_view_factory_spec.rb +11 -11
  334. data/spec/unit/action_builder_spec.rb +24 -18
  335. data/spec/unit/active_admin_spec.rb +2 -2
  336. data/spec/unit/application_spec.rb +30 -31
  337. data/spec/unit/asset_registration_spec.rb +11 -11
  338. data/spec/unit/authorization/authorization_adapter_spec.rb +7 -7
  339. data/spec/unit/authorization/controller_authorization_spec.rb +11 -11
  340. data/spec/unit/authorization/index_overriding_spec.rb +22 -0
  341. data/spec/unit/auto_link_spec.rb +42 -5
  342. data/spec/unit/batch_actions/resource_spec.rb +15 -14
  343. data/spec/unit/batch_actions/settings_spec.rb +18 -18
  344. data/spec/unit/belongs_to_spec.rb +26 -17
  345. data/spec/unit/cancan_adapter_spec.rb +4 -4
  346. data/spec/unit/comments_spec.rb +99 -39
  347. data/spec/unit/component_spec.rb +3 -3
  348. data/spec/unit/config_shared_examples.rb +8 -8
  349. data/spec/unit/controller_filters_spec.rb +26 -14
  350. data/spec/unit/csv_builder_spec.rb +152 -24
  351. data/spec/unit/dependency_spec.rb +135 -0
  352. data/spec/unit/devise_spec.rb +17 -37
  353. data/spec/unit/dsl_spec.rb +70 -9
  354. data/spec/unit/event_spec.rb +9 -9
  355. data/spec/unit/filters/filter_form_builder_spec.rb +167 -157
  356. data/spec/unit/filters/resource_spec.rb +35 -33
  357. data/spec/unit/form_builder_spec.rb +383 -145
  358. data/spec/unit/generators/install_spec.rb +5 -5
  359. data/spec/unit/helpers/collection_spec.rb +18 -18
  360. data/spec/unit/helpers/scope_chain_spec.rb +5 -5
  361. data/spec/unit/helpers/settings_spec.rb +4 -4
  362. data/spec/unit/i18n_spec.rb +12 -0
  363. data/spec/unit/menu_collection_spec.rb +14 -14
  364. data/spec/unit/menu_item_spec.rb +42 -42
  365. data/spec/unit/menu_spec.rb +20 -20
  366. data/spec/unit/namespace/authorization_spec.rb +5 -5
  367. data/spec/unit/namespace/register_page_spec.rb +9 -9
  368. data/spec/unit/namespace/register_resource_spec.rb +26 -28
  369. data/spec/unit/namespace_spec.rb +20 -20
  370. data/spec/unit/order_clause_spec.rb +81 -0
  371. data/spec/unit/page_controller_spec.rb +1 -1
  372. data/spec/unit/page_spec.rb +18 -12
  373. data/spec/unit/pretty_format_spec.rb +42 -14
  374. data/spec/unit/pundit_adapter_spec.rb +98 -0
  375. data/spec/unit/resource/action_items_spec.rb +13 -10
  376. data/spec/unit/resource/includes_spec.rb +21 -0
  377. data/spec/unit/resource/menu_spec.rb +1 -1
  378. data/spec/unit/resource/naming_spec.rb +23 -23
  379. data/spec/unit/resource/page_presenters_spec.rb +8 -8
  380. data/spec/unit/resource/pagination_spec.rb +6 -6
  381. data/spec/unit/resource/routes_spec.rb +10 -10
  382. data/spec/unit/resource/scopes_spec.rb +14 -7
  383. data/spec/unit/resource/sidebars_spec.rb +6 -6
  384. data/spec/unit/resource_collection_spec.rb +66 -68
  385. data/spec/unit/resource_controller/data_access_spec.rb +39 -21
  386. data/spec/unit/resource_controller/decorators_spec.rb +83 -0
  387. data/spec/unit/resource_controller/sidebars_spec.rb +7 -8
  388. data/spec/unit/resource_controller_spec.rb +66 -62
  389. data/spec/unit/resource_registration_spec.rb +12 -12
  390. data/spec/unit/resource_spec.rb +75 -40
  391. data/spec/unit/routing_spec.rb +39 -31
  392. data/spec/unit/scope_spec.rb +112 -30
  393. data/spec/unit/settings_spec.rb +51 -21
  394. data/spec/unit/view_factory_spec.rb +2 -2
  395. data/spec/unit/view_helpers/breadcrumbs_spec.rb +137 -69
  396. data/spec/unit/view_helpers/display_name_spec.rb +49 -21
  397. data/spec/unit/view_helpers/download_format_links_helper_spec.rb +5 -5
  398. data/spec/unit/view_helpers/fields_for_spec.rb +18 -18
  399. data/spec/unit/view_helpers/flash_helper_spec.rb +25 -0
  400. data/spec/unit/view_helpers/form_helper_spec.rb +9 -22
  401. data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +59 -21
  402. data/spec/unit/views/components/action_list_popover_spec.rb +16 -6
  403. data/spec/unit/views/components/attributes_table_spec.rb +94 -52
  404. data/spec/unit/views/components/batch_action_popover_spec.rb +20 -6
  405. data/spec/unit/views/components/blank_slate_spec.rb +14 -4
  406. data/spec/unit/views/components/columns_spec.rb +52 -22
  407. data/spec/unit/views/components/index_list_spec.rb +11 -8
  408. data/spec/unit/views/components/index_table_for_spec.rb +46 -0
  409. data/spec/unit/views/components/paginated_collection_spec.rb +68 -59
  410. data/spec/unit/views/components/panel_spec.rb +32 -21
  411. data/spec/unit/views/components/popover_spec.rb +7 -7
  412. data/spec/unit/views/components/sidebar_section_spec.rb +18 -8
  413. data/spec/unit/views/components/site_title_spec.rb +8 -8
  414. data/spec/unit/views/components/status_tag_spec.rb +178 -38
  415. data/spec/unit/views/components/table_for_spec.rb +227 -44
  416. data/spec/unit/views/components/tabs_spec.rb +39 -0
  417. data/spec/unit/views/components/unsupported_browser_spec.rb +47 -0
  418. data/spec/unit/views/pages/form_spec.rb +17 -10
  419. data/spec/unit/views/pages/index_spec.rb +60 -0
  420. data/spec/unit/views/pages/layout_spec.rb +17 -21
  421. data/spec/unit/views/pages/show_spec.rb +16 -3
  422. data/spec/unit/views/tabbed_navigation_spec.rb +61 -52
  423. data/tasks/docs.rake +1 -1
  424. data/tasks/parallel_tests.rake +8 -2
  425. data/tasks/test.rake +8 -4
  426. data/tasks/yard.rake +7 -5
  427. metadata +180 -101
  428. data/app/assets/images/active_admin/admin_notes_icon.png +0 -0
  429. data/app/assets/images/active_admin/datepicker/datepicker-header-bg.png +0 -0
  430. data/app/assets/images/active_admin/datepicker/datepicker-next-link-icon.png +0 -0
  431. data/app/assets/images/active_admin/datepicker/datepicker-nipple.png +0 -0
  432. data/app/assets/images/active_admin/datepicker/datepicker-prev-link-icon.png +0 -0
  433. data/app/assets/images/active_admin/index_list_icons/block_icon.svg +0 -10
  434. data/app/assets/images/active_admin/index_list_icons/blog_icon.svg +0 -4
  435. data/app/assets/images/active_admin/index_list_icons/grid_icon.svg +0 -13
  436. data/app/assets/images/active_admin/index_list_icons/table_icon.svg +0 -3
  437. data/app/assets/images/active_admin/loading.gif +0 -0
  438. data/app/assets/javascripts/active_admin/components/application.js.coffee +0 -23
  439. data/app/assets/javascripts/active_admin/components/batch_actions.js.coffee +0 -26
  440. data/app/assets/javascripts/active_admin/components/has_many.js.coffee +0 -41
  441. data/app/assets/stylesheets/active_admin/components/_batch_actions.css.scss +0 -11
  442. data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +0 -39
  443. data/app/assets/stylesheets/active_admin/components/_table_tools.css.scss +0 -95
  444. data/app/views/active_admin/dashboard/index.html.arb +0 -1
  445. data/app/views/active_admin/resource/index.csv.erb +0 -17
  446. data/docs/3-index-pages/create-an-index.md +0 -29
  447. data/lib/active_admin/inputs/filter_base.rb +0 -33
  448. data/lib/active_admin/inputs/filter_base/search_method_select.rb +0 -73
  449. data/lib/active_admin/inputs/filter_boolean_input.rb +0 -32
  450. data/lib/active_admin/inputs/filter_check_boxes_input.rb +0 -51
  451. data/lib/active_admin/inputs/filter_date_range_input.rb +0 -34
  452. data/lib/active_admin/inputs/filter_numeric_input.rb +0 -10
  453. data/lib/active_admin/inputs/filter_select_input.rb +0 -61
  454. data/lib/active_admin/inputs/filter_string_input.rb +0 -24
  455. data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +0 -7
  456. data/spec/integration/memory_spec.rb +0 -29
  457. data/spec/integration/stylesheets_spec.rb +0 -41
  458. data/spec/javascripts/compiled/jquery.aa.checkbox-toggler-spec.js +0 -60
  459. data/spec/javascripts/compiled/jquery.aa.popover-spec.js +0 -106
  460. data/spec/javascripts/compiled/jquery.aa.table-checkbox-toggler-spec.js +0 -37
  461. data/spec/javascripts/helpers/vendor/jasmine-fixture-0.0.5.js +0 -108
  462. data/spec/javascripts/helpers/vendor/jasmine-jquery.js +0 -288
  463. data/spec/javascripts/helpers/vendor/sinon-1.2.0.js +0 -2915
  464. data/spec/javascripts/support/jquery-ui-1.8.16.custom.min.js +0 -34
  465. data/spec/javascripts/support/jquery.min.js +0 -4
  466. data/spec/spec_helper_without_rails.rb +0 -16
  467. data/tasks/js.rake +0 -32
@@ -196,3 +196,15 @@ Feature: Sidebar Sections
196
196
  When I am on the index page for posts
197
197
  Then I should see "Hello World from a custom partial" within the "Help" sidebar
198
198
 
199
+
200
+ Scenario: Position sidebar at the top using priority option
201
+ Given a configuration of:
202
+ """
203
+ ActiveAdmin.register Post do
204
+ sidebar :help, priority: 0 do
205
+ "Need help? Email us at help@example.com"
206
+ end
207
+ end
208
+ """
209
+ When I am on the index page for posts
210
+ Then I should see a sidebar titled "Help" above sidebar titled "Filters"
@@ -23,7 +23,7 @@ Feature: Specifying Actions
23
23
  Given a configuration of:
24
24
  """
25
25
  ActiveAdmin.register Post do
26
- action_item(:only => :index) do
26
+ action_item(:import, :only => :index) do
27
27
  link_to('Import Posts', import_admin_posts_path)
28
28
  end
29
29
 
@@ -43,7 +43,7 @@ Feature: Specifying Actions
43
43
  Given a configuration of:
44
44
  """
45
45
  ActiveAdmin.register Post do
46
- action_item(:only => :show) do
46
+ action_item(:review, :only => :show) do
47
47
  link_to('Review', review_admin_post_path)
48
48
  end
49
49
 
@@ -69,7 +69,7 @@ Feature: Specifying Actions
69
69
  Given a configuration of:
70
70
  """
71
71
  ActiveAdmin.register Post do
72
- action_item(:only => :show) do
72
+ action_item(:review, :only => :show) do
73
73
  link_to('Review', review_admin_post_path)
74
74
  end
75
75
 
@@ -1,7 +1,7 @@
1
1
  Then /^I should see an action item link to "([^"]*)"$/ do |link|
2
- page.should have_css('.action_item a', :text => link)
2
+ expect(page).to have_css('.action_item a', text: link)
3
3
  end
4
4
 
5
5
  Then /^I should not see an action item link to "([^"]*)"$/ do |link|
6
- page.should_not have_css('.action_item a', :text => link)
6
+ expect(page).to_not have_css('.action_item a', text: link)
7
7
  end
@@ -1,7 +1,20 @@
1
1
  Then /^I should see a member link to "([^"]*)"$/ do |name|
2
- page.should have_css("a.member_link", :text => name)
2
+ expect(page).to have_css('a.member_link', text: name)
3
3
  end
4
4
 
5
5
  Then /^I should not see a member link to "([^"]*)"$/ do |name|
6
6
  %{Then I should not see "#{name}" within "a.member_link"}
7
7
  end
8
+
9
+ Then /^I should see the actions column with the class "([^"]*)" and the title "([^"]*)"$/ do |klass, title|
10
+ expect(page).to have_css "th#{'.'+klass}", text: title
11
+ end
12
+
13
+ Then /^I should see a dropdown menu item to "([^"]*)"$/ do |name|
14
+ expect(page).to have_css('ul.dropdown_menu_list li a', text: name)
15
+ end
16
+
17
+ Then /^I should not see a dropdown menu item to "([^"]*)"$/ do |name|
18
+ %{Then I should not see "#{name}" within "ul.dropdown_menu_list li a"}
19
+ end
20
+
@@ -1,17 +1,17 @@
1
1
  Then /^I should see a table header with "([^"]*)"$/ do |content|
2
- page.should have_xpath('//th', :text => content)
2
+ expect(page).to have_xpath '//th', text: content
3
3
  end
4
4
 
5
5
  Then /^I should not see a table header with "([^"]*)"$/ do |content|
6
- page.should_not have_xpath('//th', :text => content)
6
+ expect(page).to_not have_xpath '//th', text: content
7
7
  end
8
8
 
9
9
  Then /^I should see a sortable table header with "([^"]*)"$/ do |content|
10
- page.should have_css('th.sortable', :text => content)
10
+ expect(page).to have_css 'th.sortable', text: content
11
11
  end
12
12
 
13
13
  Then /^I should not see a sortable table header with "([^"]*)"$/ do |content|
14
- page.should_not have_css('th.sortable', :text => content)
14
+ expect(page).to_not have_css 'th.sortable', text: content
15
15
  end
16
16
 
17
17
  Then /^I should not see a sortable table header$/ do
@@ -19,22 +19,21 @@ Then /^I should not see a sortable table header$/ do
19
19
  end
20
20
 
21
21
  Then /^the table "([^"]*)" should have (\d+) rows/ do |selector, count|
22
- table = page.find(selector)
23
- table.all(:css, 'tr').size.should == count.to_i
22
+ trs = page.find(selector).all :css, 'tr'
23
+ expect(trs.size).to eq count.to_i
24
24
  end
25
25
 
26
26
  Then /^the table "([^"]*)" should have (\d+) columns/ do |selector, count|
27
- table = page.find(selector)
28
- row = table.find('tr:first')
29
- row.all(:css, "td").size.should == count.to_i
27
+ tds = page.find(selector).find('tr:first').all :css, 'td'
28
+ expect(tds.size).to eq count.to_i
30
29
  end
31
30
 
32
31
  Then /^there should be (\d+) "([^"]*)" tags$/ do |count, tag|
33
- page.all(:css, tag).size.should == count.to_i
32
+ expect(page.all(:css, tag).size).to eq count.to_i
34
33
  end
35
34
 
36
35
  Then /^I should see a link to "([^"]*)"$/ do |link|
37
- page.should have_xpath('//a', :text => link)
36
+ expect(page).to have_xpath '//a', text: link
38
37
  end
39
38
 
40
39
  Then /^an "([^"]*)" exception should be raised when I follow "([^"]*)"$/ do |error, link|
@@ -44,7 +43,7 @@ Then /^an "([^"]*)" exception should be raised when I follow "([^"]*)"$/ do |err
44
43
  end
45
44
 
46
45
  Then /^I should be in the resource section for (.+)$/ do |resource_name|
47
- current_url.should include resource_name.gsub(' ', '').underscore.pluralize
46
+ expect(current_url).to include resource_name.tr(' ', '').underscore.pluralize
48
47
  end
49
48
 
50
49
  Then /^I should wait and see "([^"]*)"(?: within "([^"]*)")?$/ do |text, selector|
@@ -56,27 +55,27 @@ end
56
55
 
57
56
  Then /^I should see the page title "([^"]*)"$/ do |title|
58
57
  within('h2#page_title') do
59
- page.should have_content(title)
58
+ expect(page).to have_content title
60
59
  end
61
60
  end
62
61
 
63
62
  Then /^I should see a fieldset titled "([^"]*)"$/ do |title|
64
- page.should have_css('fieldset legend', :text => title)
63
+ expect(page).to have_css 'fieldset legend', text: title
65
64
  end
66
65
 
67
66
  Then /^the "([^"]*)" field should contain the option "([^"]*)"$/ do |field, option|
68
67
  field = find_field(field)
69
- field.should have_css("option", :text => option)
68
+ expect(field).to have_css 'option', text: option
70
69
  end
71
70
 
72
71
  Then /^I should see the content "([^"]*)"$/ do |content|
73
- page.should have_css("#active_admin_content", :text => content)
72
+ expect(page).to have_css '#active_admin_content', text: content
74
73
  end
75
74
 
76
75
  Then /^I should see a validation error "([^"]*)"$/ do |error_message|
77
- page.should have_css(".inline-errors", :text => error_message)
76
+ expect(page).to have_css '.inline-errors', text: error_message
78
77
  end
79
78
 
80
79
  Then /^I should see a table with id "([^"]*)"$/ do |dom_id|
81
- page.should have_css('table', :id => dom_id)
80
+ page.find("table##{dom_id}")
82
81
  end
@@ -3,13 +3,13 @@ Then /^I should see the css file "([^"]*)"$/ do |path|
3
3
  end
4
4
 
5
5
  Then /^I should see the css file "([^"]*)" of media "([^"]*)"$/ do |path, media|
6
- page.should have_xpath("//link[contains(@href, /stylesheets/#{path}) and contains(@media, #{media})]")
6
+ expect(page).to have_xpath("//link[contains(@href, /stylesheets/#{path}) and contains(@media, #{media})]", visible: false)
7
7
  end
8
8
 
9
9
  Then /^I should see the js file "([^"]*)"$/ do |path|
10
- page.should have_xpath("//script[contains(@src, /javascripts/#{path})]")
10
+ expect(page).to have_xpath("//script[contains(@src, /javascripts/#{path})]", visible: false)
11
11
  end
12
12
 
13
13
  Then /^I should see the favicon "([^"]*)"$/ do |path|
14
- page.should have_xpath("//link[contains(@href, \"#{path}\")]")
14
+ expect(page).to have_xpath("//link[contains(@href, path)]", visible: false)
15
15
  end
@@ -1,13 +1,18 @@
1
1
  Then /^I should see the attribute "([^"]*)" with "([^"]*)"$/ do |title, value|
2
2
  elems = all ".attributes_table th:contains('#{title}') ~ td:contains('#{value}')"
3
- elems.first.should_not be_nil, 'attribute missing'
3
+ expect(elems.first).to_not be_nil, 'attribute missing'
4
4
  end
5
5
 
6
6
  Then /^I should see the attribute "([^"]*)" with a nicely formatted datetime$/ do |title|
7
7
  text = all(".attributes_table th:contains('#{title}') ~ td").first.text
8
- text.should match /\w+ \d{1,2}, \d{4} \d{2}:\d{2}/
8
+ expect(text).to match /\w+ \d{1,2}, \d{4} \d{2}:\d{2}/
9
+ end
10
+
11
+ Then /^the attribute "([^"]*)" should be empty$/ do |title|
12
+ elems = all ".attributes_table th:contains('#{title}') ~ td > span.empty"
13
+ expect(elems.first).to_not be_nil, 'attribute not empty'
9
14
  end
10
15
 
11
16
  Then /^I should not see the attribute "([^"]*)"$/ do |title|
12
- page.should_not have_css('.attributes_table th', :text => title)
17
+ expect(page).to_not have_css '.attributes_table th', text: title
13
18
  end
@@ -1,17 +1,22 @@
1
1
  Then /^I (should|should not) be asked to confirm "([^"]*)" for "([^"]*)"$/ do |maybe, confirmation, title|
2
2
  selector = "#batch_actions_popover a.batch_action:contains('#{title}')"
3
3
  selector << "[data-confirm='#{confirmation}']" if maybe == 'should'
4
- page.send maybe.sub(' ', '_'), have_css(selector)
4
+
5
+ verb = maybe == 'should' ? :to : :to_not
6
+ expect(page).send verb, have_css(selector)
5
7
  end
6
8
 
7
9
  Then /^I (should|should not) see the batch action :([^\s]*) "([^"]*)"$/ do |maybe, sym, title|
8
- selector = "#batch_actions_selector a.batch_action:contains('#{title}')"
10
+ selector = ".batch_actions_selector a.batch_action:contains('#{title}')"
9
11
  selector << "[href='#'][data-action='#{sym}']" if maybe == 'should'
10
- page.send maybe.sub(' ', '_'), have_css(selector)
12
+
13
+ verb = maybe == 'should' ? :to : :to_not
14
+ expect(page).send verb, have_css(selector)
11
15
  end
12
16
 
13
17
  Then /^the (\d+)(?:st|nd|rd|th) batch action should be "([^"]*)"$/ do |index, title|
14
- page.all("#batch_actions_selector a.batch_action")[index.to_i - 1].text.should match title
18
+ batch_action = page.all('.batch_actions_selector a.batch_action')[index.to_i - 1]
19
+ expect(batch_action.text).to match title
15
20
  end
16
21
 
17
22
  When /^I check the (\d+)(?:st|nd|rd|th) record$/ do |index|
@@ -23,17 +28,19 @@ When /^I toggle the collection selection$/ do
23
28
  end
24
29
 
25
30
  Then /^I should see that the batch action button is disabled$/ do
26
- page.should have_css "#batch_actions_selector .dropdown_menu_button.disabled"
31
+ expect(page).to have_css ".batch_actions_selector .dropdown_menu_button.disabled"
27
32
  end
28
33
 
29
34
  Then /^I (should|should not) see the batch action (button|selector)$/ do |maybe, type|
30
- selector = "div.table_tools #batch_actions_selector"
35
+ selector = "div.table_tools .batch_actions_selector"
31
36
  selector << ' .dropdown_menu_button' if maybe == 'should' && type == 'button'
32
- page.send maybe.sub(' ', '_'), have_css(selector)
37
+
38
+ verb = maybe == 'should' ? :to : :to_not
39
+ expect(page).send verb, have_css(selector)
33
40
  end
34
41
 
35
42
  Then /^I should see the batch action popover exists$/ do
36
- page.should have_css "#batch_actions_selector"
43
+ expect(page).to have_css '.batch_actions_selector'
37
44
  end
38
45
 
39
46
  Given /^I submit the batch action form with "([^"]*)"$/ do |action|
@@ -51,5 +58,15 @@ Given /^I submit the batch action form with "([^"]*)"$/ do |action|
51
58
  end
52
59
 
53
60
  Then /^I should not see checkboxes in the table$/ do
54
- page.should_not have_css ".paginated_collection table input[type=checkbox]"
61
+ expect(page).to_not have_css '.paginated_collection table input[type=checkbox]'
62
+ end
63
+
64
+ Then /^I should be show a input with name "([^"]*)" and type "([^"]*)"$/ do |name, type|
65
+ selector = ".batch_actions_selector a.batch_action:first"
66
+ expect(page.find(selector)["data-inputs"]).to eq "{\"#{name}\":\"#{type}\"}"
67
+ end
68
+
69
+ Then /^I should be show a select with name "([^"]*)" with the values "([^"]*)"$/ do |name, values|
70
+ selector = ".batch_actions_selector a.batch_action:first"
71
+ expect(JSON[page.find(selector)["data-inputs"]]).to eq Hash[name, values.split(', ')]
55
72
  end
@@ -0,0 +1,3 @@
1
+ Then /^I should see a blog header "([^"]*)"$/ do |header_text|
2
+ expect(page).to have_css 'h3', text: header_text
3
+ end
@@ -1,3 +1,3 @@
1
1
  Then /^I should see a link to "([^"]*)" in the breadcrumb$/ do |text|
2
- page.should have_css('.breadcrumb > a', :text => text)
2
+ expect(page).to have_css '.breadcrumb > a', text: text
3
3
  end
@@ -8,5 +8,5 @@ When /^I add a comment "([^"]*)"$/ do |comment|
8
8
  end
9
9
 
10
10
  Given /^a tag with the name "([^"]*)" exists$/ do |tag_name|
11
- Tag.create(:name => tag_name)
11
+ Tag.create(name: tag_name)
12
12
  end
@@ -4,7 +4,7 @@ module ActiveAdminReloading
4
4
  eval(config_content)
5
5
  ActiveAdmin::Event.dispatch ActiveAdmin::Application::AfterLoadEvent, ActiveAdmin.application
6
6
  Rails.application.reload_routes!
7
- ActiveAdmin.application.namespaces.values.each &:reset_menu!
7
+ ActiveAdmin.application.namespaces.each &:reset_menu!
8
8
  end
9
9
  end
10
10
 
@@ -7,9 +7,9 @@ Then /^I should not see the default welcome message$/ do
7
7
  end
8
8
 
9
9
  Then /^I should see a dashboard widget "([^"]*)"$/ do |name|
10
- page.should have_css('.dashboard .panel h3', :text => name)
10
+ expect(page).to have_css '.dashboard .panel h3', text: name
11
11
  end
12
12
 
13
13
  Then /^I should not see a dashboard widget "([^"]*)"$/ do |name|
14
- page.should_not have_css('.dashboard .panel h3', :text => name)
14
+ expect(page).to_not have_css '.dashboard .panel h3', text: name
15
15
  end
@@ -1,6 +1,6 @@
1
1
  def create_user(name, type = 'User')
2
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.gsub(' ', '').underscore)
3
+ user = type.camelize.constantize.where(first_name: first_name, last_name: last_name).first_or_create(username: name.tr(' ', '').underscore)
4
4
  end
5
5
 
6
6
  Given /^(a|\d+)( published)? posts?(?: with the title "([^"]*)")?(?: and body "([^"]*)")?(?: written by "([^"]*)")?(?: in category "([^"]*)")? exists?$/ do |count, published, title, body, user, category_name|
@@ -10,12 +10,12 @@ Given /^(a|\d+)( published)? posts?(?: with the title "([^"]*)")?(?: and body "(
10
10
  category = Category.where(name: category_name).first_or_create if category_name
11
11
  title ||= "Hello World %i"
12
12
  count.times do |i|
13
- Post.create! :title => title % i, :body => body, :author => author, :published_at => published, category_id: category.try(:id)
13
+ Post.create! title: title % i, body: body, author: author, published_at: published, custom_category_id: category.try(:id)
14
14
  end
15
15
  end
16
16
 
17
17
  Given /^a category named "([^"]*)" exists$/ do |name|
18
- Category.create! :name => name
18
+ Category.create! name: name
19
19
  end
20
20
 
21
21
  Given /^a (user|publisher) named "([^"]*)" exists$/ do |type, name|
@@ -23,12 +23,12 @@ Given /^a (user|publisher) named "([^"]*)" exists$/ do |type, name|
23
23
  end
24
24
 
25
25
  Given /^a store named "([^"]*)" exists$/ do |name|
26
- Store.create! :name => name
26
+ Store.create! name: name
27
27
  end
28
28
 
29
29
  Given /^I create a new post with the title "([^"]*)"$/ do |title|
30
- click_link "Posts"
30
+ first(:link, 'Posts').click
31
31
  click_link "New Post"
32
- fill_in :title, :with => title
32
+ fill_in 'post_title', with: title
33
33
  click_button "Create Post"
34
34
  end
@@ -1,13 +1,13 @@
1
1
  Then /^I should see a select filter for "([^"]*)"$/ do |label|
2
- page.should have_css(".filter_select label", :text => label)
2
+ expect(page).to have_css '.filter_select label', text: label
3
3
  end
4
4
 
5
5
  Then /^I should see a string filter for "([^"]*)"$/ do |label|
6
- page.should have_css(".filter_string label", :text => label)
6
+ expect(page).to have_css '.filter_string label', text: label
7
7
  end
8
8
 
9
9
  Then /^I should see a date range filter for "([^"]*)"$/ do |label|
10
- page.should have_css(".filter_date_range label", :text => label)
10
+ expect(page).to have_css '.filter_date_range label', text: label
11
11
  end
12
12
 
13
13
  Then /^I should see the following filters:$/ do |table|
@@ -15,3 +15,25 @@ Then /^I should see the following filters:$/ do |table|
15
15
  step %{I should see a #{type} filter for "#{label}"}
16
16
  end
17
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 be_truthy
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 be_nil if negative
36
+ expect(params[key]).to be_present unless negative
37
+ end
38
+ end
39
+ end
@@ -1,11 +1,11 @@
1
1
  Then /^I should see a flash with "([^"]*)"$/ do |text|
2
- page.should have_content(text)
2
+ expect(page).to have_content text
3
3
  end
4
4
 
5
5
  Then /^I should see a successful create flash$/ do
6
- page.should have_css('div.flash_notice', :text => /was successfully created/)
6
+ expect(page).to have_css 'div.flash_notice', text: /was successfully created/
7
7
  end
8
8
 
9
9
  Then /^I should not see a successful create flash$/ do
10
- page.should_not have_css('div.flash_notice', :text => /was successfully created/)
10
+ expect(page).to_not have_css 'div.flash_notice', text: /was successfully created/
11
11
  end
@@ -1,29 +1,32 @@
1
1
  require 'csv'
2
2
 
3
3
  Then "I should see nicely formatted datetimes" do
4
- page.body.should =~ /\w+ \d{1,2}, \d{4} \d{2}:\d{2}/
4
+ expect(page.body).to match /\w+ \d{1,2}, \d{4} \d{2}:\d{2}/
5
5
  end
6
6
 
7
7
  Then /^I should( not)? see a link to download "([^"]*)"$/ do |negate, format|
8
- method = negate ? :should_not : :should
9
- page.send method, have_css("#index_footer a", :text => format)
8
+ method = negate ? :to_not : :to
9
+ expect(page).send method, have_css("#index_footer a", text: format)
10
10
  end
11
11
 
12
12
  # Check first rows of the displayed CSV.
13
13
  Then /^I should download a CSV file with "([^"]*)" separator for "([^"]*)" containing:$/ do |sep, resource_name, table|
14
- body = page.driver.response.body
15
- headers = page.response_headers
16
- headers['Content-Type'].should eq 'text/csv; charset=utf-8'
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/
17
20
 
18
21
  begin
19
- csv = CSV.parse(body, :col_sep => sep)
22
+ csv = CSV.parse(body, col_sep: sep)
20
23
  table.raw.each_with_index do |expected_row, row_index|
21
24
  expected_row.each_with_index do |expected_cell, col_index|
22
25
  cell = csv.try(:[], row_index).try(:[], col_index)
23
26
  if expected_cell.blank?
24
- cell.should be_nil
27
+ expect(cell).to be_nil
25
28
  else
26
- (cell || '').should match /#{expected_cell}/
29
+ expect(cell || '').to match /#{expected_cell}/
27
30
  end
28
31
  end
29
32
  end
@@ -41,5 +44,9 @@ Then /^I should download a CSV file for "([^"]*)" containing:$/ do |resource_nam
41
44
  end
42
45
 
43
46
  Then /^the CSV file should contain "([^"]*)" in quotes$/ do |text|
44
- page.driver.response.body.should match /"#{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)
45
52
  end