activeadmin 0.6.6 → 1.0.0.pre1

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 (512) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +11 -8
  3. data/.hound.yml +11 -0
  4. data/.travis.yml +36 -10
  5. data/.yardopts +2 -1
  6. data/CHANGELOG.md +118 -67
  7. data/CONTRIBUTING.md +96 -73
  8. data/Gemfile +35 -35
  9. data/Guardfile +1 -0
  10. data/LICENSE +1 -1
  11. data/README.md +98 -0
  12. data/Rakefile +12 -4
  13. data/activeadmin.gemspec +21 -24
  14. data/app/assets/javascripts/active_admin/application.js.coffee +32 -0
  15. data/app/assets/javascripts/active_admin/base.js.coffee +14 -0
  16. data/app/assets/javascripts/active_admin/ext/jquery-ui.js.coffee +6 -0
  17. data/app/assets/javascripts/active_admin/ext/jquery.js.coffee +7 -0
  18. data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +39 -0
  19. data/app/assets/javascripts/active_admin/{components/jquery.aa.checkbox-toggler.js.coffee → lib/checkbox-toggler.js.coffee} +3 -4
  20. data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +101 -0
  21. data/app/assets/javascripts/active_admin/lib/flash.js.coffee +19 -0
  22. data/app/assets/javascripts/active_admin/lib/has_many.js.coffee +79 -0
  23. data/app/assets/javascripts/active_admin/lib/modal_dialog.js.coffee +37 -0
  24. data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +27 -0
  25. data/app/assets/javascripts/active_admin/lib/popover.js.coffee +68 -0
  26. data/app/assets/javascripts/active_admin/{components/jquery.aa.table-checkbox-toggler.js.coffee → lib/table-checkbox-toggler.js.coffee} +2 -3
  27. data/app/assets/stylesheets/active_admin/{_base.css.scss → _base.scss} +3 -0
  28. data/app/assets/stylesheets/active_admin/{_forms.css.scss → _forms.scss} +61 -17
  29. data/app/assets/stylesheets/active_admin/{_header.css.scss → _header.scss} +9 -5
  30. data/app/assets/stylesheets/active_admin/{_mixins.css.scss → _mixins.scss} +0 -0
  31. data/app/assets/stylesheets/active_admin/{_typography.css.scss → _typography.scss} +0 -0
  32. data/app/assets/stylesheets/active_admin/components/_batch_actions.scss +11 -0
  33. data/app/assets/stylesheets/active_admin/components/_blank_slates.scss +0 -1
  34. data/app/assets/stylesheets/active_admin/components/_buttons.scss +1 -1
  35. data/app/assets/stylesheets/active_admin/components/{_comments.css.scss → _comments.scss} +0 -0
  36. data/app/assets/stylesheets/active_admin/components/{_date_picker.css.scss → _date_picker.scss} +40 -14
  37. data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +5 -4
  38. data/app/assets/stylesheets/active_admin/components/_flash_messages.scss +37 -0
  39. data/app/assets/stylesheets/active_admin/components/_modal_dialog.scss +34 -0
  40. data/app/assets/stylesheets/active_admin/components/_pagination.scss +10 -0
  41. data/app/assets/stylesheets/active_admin/components/{_popovers.css.scss → _popovers.scss} +2 -3
  42. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +4 -0
  43. data/app/assets/stylesheets/active_admin/components/_table_tools.scss +67 -0
  44. data/app/assets/stylesheets/active_admin/components/{_tables.css.scss → _tables.scss} +4 -2
  45. data/app/assets/stylesheets/active_admin/components/_tabs.scss +65 -0
  46. data/app/assets/stylesheets/active_admin/components/_unsupported_browser.scss +16 -0
  47. data/app/assets/stylesheets/active_admin/mixins/{_all.css.scss → _all.scss} +0 -0
  48. data/app/assets/stylesheets/active_admin/mixins/{_buttons.css.scss → _buttons.scss} +0 -1
  49. data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +28 -0
  50. data/app/assets/stylesheets/active_admin/mixins/{_icons.css.scss → _icons.scss} +1 -2
  51. data/app/assets/stylesheets/active_admin/mixins/{_reset.css.scss → _reset.scss} +0 -0
  52. data/app/assets/stylesheets/active_admin/mixins/_rounded.scss +22 -0
  53. data/app/assets/stylesheets/active_admin/mixins/{_sections.css.scss → _sections.scss} +8 -2
  54. data/app/assets/stylesheets/active_admin/mixins/{_shadows.css.scss → _shadows.scss} +0 -7
  55. data/app/assets/stylesheets/active_admin/mixins/_utilities.scss +0 -9
  56. data/app/assets/stylesheets/active_admin/mixins/{_variables.css.scss → _variables.scss} +10 -8
  57. data/app/assets/stylesheets/active_admin/{print.css.scss → print.scss} +4 -0
  58. data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +5 -2
  59. data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +11 -9
  60. data/app/views/active_admin/devise/confirmations/new.html.erb +15 -0
  61. data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +1 -1
  62. data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +1 -1
  63. data/app/views/active_admin/devise/passwords/edit.html.erb +9 -10
  64. data/app/views/active_admin/devise/passwords/new.html.erb +5 -4
  65. data/app/views/active_admin/devise/registrations/new.html.erb +22 -0
  66. data/app/views/active_admin/devise/sessions/new.html.erb +9 -7
  67. data/app/views/active_admin/devise/shared/_links.erb +1 -1
  68. data/app/views/active_admin/devise/unlocks/new.html.erb +5 -4
  69. data/app/views/layouts/active_admin_logged_out.html.erb +3 -5
  70. data/config/locales/ar.yml +120 -0
  71. data/config/locales/bg.yml +26 -6
  72. data/config/locales/bs.yml +122 -0
  73. data/config/locales/ca.yml +10 -1
  74. data/config/locales/cs.yml +7 -2
  75. data/config/locales/da.yml +7 -3
  76. data/config/locales/de-CH.yml +14 -31
  77. data/config/locales/de.yml +33 -33
  78. data/config/locales/el.yml +28 -2
  79. data/config/locales/en-GB.yml +12 -4
  80. data/config/locales/en.yml +29 -3
  81. data/config/locales/{es_MX.yml → es-MX.yml} +9 -24
  82. data/config/locales/es.yml +32 -25
  83. data/config/locales/fa.yml +120 -0
  84. data/config/locales/fi.yml +113 -0
  85. data/config/locales/fr.yml +21 -11
  86. data/config/locales/he.yml +7 -3
  87. data/config/locales/hr.yml +42 -11
  88. data/config/locales/hu.yml +10 -3
  89. data/config/locales/it.yml +31 -3
  90. data/config/locales/ja.yml +8 -3
  91. data/config/locales/ko.yml +7 -1
  92. data/config/locales/lt.yml +42 -11
  93. data/config/locales/lv.yml +7 -3
  94. data/config/locales/{no-NB.yml → nb.yml} +46 -15
  95. data/config/locales/nl.yml +36 -5
  96. data/config/locales/pl.yml +13 -8
  97. data/config/locales/pt-BR.yml +37 -5
  98. data/config/locales/pt-PT.yml +8 -4
  99. data/config/locales/ro.yml +7 -3
  100. data/config/locales/ru.yml +26 -5
  101. data/config/locales/sv-SE.yml +9 -5
  102. data/config/locales/tr.yml +10 -3
  103. data/config/locales/uk.yml +36 -12
  104. data/config/locales/vi.yml +7 -3
  105. data/config/locales/zh-CN.yml +26 -10
  106. data/config/locales/zh-TW.yml +19 -13
  107. data/docs/0-installation.md +65 -29
  108. data/docs/1-general-configuration.md +92 -81
  109. data/docs/10-custom-pages.md +68 -68
  110. data/docs/11-decorators.md +48 -59
  111. data/docs/12-arbre-components.md +80 -74
  112. data/docs/13-authorization-adapter.md +128 -107
  113. data/docs/14-gotchas.md +92 -0
  114. data/docs/2-resource-customization.md +293 -178
  115. data/docs/3-index-pages.md +160 -86
  116. data/docs/3-index-pages/custom-index.md +31 -0
  117. data/docs/3-index-pages/index-as-block.md +14 -9
  118. data/docs/3-index-pages/index-as-blog.md +41 -31
  119. data/docs/3-index-pages/index-as-grid.md +16 -8
  120. data/docs/3-index-pages/index-as-table.md +129 -52
  121. data/docs/4-csv-format.md +31 -24
  122. data/docs/5-forms.md +133 -56
  123. data/docs/6-show-pages.md +89 -27
  124. data/docs/7-sidebars.md +48 -27
  125. data/docs/8-custom-actions.md +98 -77
  126. data/docs/9-batch-actions.md +210 -146
  127. data/docs/README.md +24 -0
  128. data/features/action_item.feature +3 -3
  129. data/features/authorization_pundit.feature +37 -0
  130. data/features/breadcrumb.feature +48 -0
  131. data/features/comments/commenting.feature +56 -13
  132. data/features/development_reloading.feature +17 -30
  133. data/features/edit_page.feature +12 -1
  134. data/features/favicon.feature +3 -3
  135. data/features/i18n.feature +5 -4
  136. data/features/index/batch_actions.feature +41 -0
  137. data/features/index/filters.feature +67 -0
  138. data/features/index/format_as_csv.feature +90 -4
  139. data/features/index/formats.feature +27 -0
  140. data/features/index/index_as_blog.feature +4 -4
  141. data/features/index/index_as_table.feature +102 -6
  142. data/features/index/index_blank_slate.feature +22 -0
  143. data/features/index/index_scope_to.feature +16 -16
  144. data/features/index/page_title.feature +11 -0
  145. data/features/index/pagination.feature +1 -1
  146. data/features/index/switch_index_view.feature +14 -14
  147. data/features/new_page.feature +13 -2
  148. data/features/registering_pages.feature +1 -1
  149. data/features/renamed_resource.feature +32 -0
  150. data/features/show/page_title.feature +11 -0
  151. data/features/show/tabs.feature +27 -0
  152. data/features/sidebar_sections.feature +12 -0
  153. data/features/site_title.feature +2 -2
  154. data/features/specifying_actions.feature +3 -3
  155. data/features/step_definitions/action_item_steps.rb +2 -2
  156. data/features/step_definitions/action_link_steps.rb +14 -1
  157. data/features/step_definitions/additional_web_steps.rb +19 -20
  158. data/features/step_definitions/asset_steps.rb +3 -3
  159. data/features/step_definitions/attribute_steps.rb +8 -3
  160. data/features/step_definitions/batch_action_steps.rb +26 -9
  161. data/features/step_definitions/blog_steps.rb +3 -0
  162. data/features/step_definitions/breadcrumb_steps.rb +1 -1
  163. data/features/step_definitions/comment_steps.rb +1 -1
  164. data/features/step_definitions/configuration_steps.rb +9 -2
  165. data/features/step_definitions/dashboard_steps.rb +2 -2
  166. data/features/step_definitions/factory_steps.rb +9 -8
  167. data/features/step_definitions/filter_steps.rb +25 -3
  168. data/features/step_definitions/flash_steps.rb +3 -3
  169. data/features/step_definitions/format_steps.rb +18 -18
  170. data/features/step_definitions/index_scope_steps.rb +5 -5
  171. data/features/step_definitions/layout_steps.rb +1 -1
  172. data/features/step_definitions/member_link_steps.rb +2 -2
  173. data/features/step_definitions/menu_steps.rb +3 -3
  174. data/features/step_definitions/pagination_steps.rb +2 -3
  175. data/features/step_definitions/sidebar_steps.rb +8 -3
  176. data/features/step_definitions/site_title_steps.rb +6 -4
  177. data/features/step_definitions/symbol_leak_steps.rb +3 -0
  178. data/features/step_definitions/tab_steps.rb +5 -0
  179. data/features/step_definitions/table_steps.rb +4 -4
  180. data/features/step_definitions/user_steps.rb +10 -7
  181. data/features/step_definitions/web_steps.rb +14 -11
  182. data/features/sti_resource.feature +6 -2
  183. data/features/strong_parameters.feature +73 -0
  184. data/features/support/env.rb +34 -9
  185. data/features/support/paths.rb +14 -6
  186. data/features/support/selectors.rb +1 -1
  187. data/features/symbol_leak.feature +35 -0
  188. data/features/users/resetting_password.feature +5 -6
  189. data/lib/active_admin.rb +26 -25
  190. data/lib/active_admin/abstract_view_factory.rb +7 -17
  191. data/lib/active_admin/application.rb +72 -59
  192. data/lib/active_admin/asset_registration.rb +2 -2
  193. data/lib/active_admin/authorization_adapter.rb +2 -2
  194. data/lib/active_admin/base_controller.rb +2 -3
  195. data/lib/active_admin/base_controller/authorization.rb +13 -31
  196. data/lib/active_admin/batch_actions.rb +1 -1
  197. data/lib/active_admin/batch_actions/controller.rb +24 -8
  198. data/lib/active_admin/batch_actions/resource_extension.rb +47 -18
  199. data/lib/active_admin/batch_actions/views/batch_action_form.rb +7 -4
  200. data/lib/active_admin/batch_actions/views/batch_action_popover.rb +3 -3
  201. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +8 -17
  202. data/lib/active_admin/batch_actions/views/selection_cells.rb +4 -4
  203. data/lib/active_admin/callbacks.rb +25 -24
  204. data/lib/active_admin/cancan_adapter.rb +7 -11
  205. data/lib/active_admin/csv_builder.rb +92 -15
  206. data/lib/active_admin/dependency.rb +93 -0
  207. data/lib/active_admin/deprecation.rb +6 -7
  208. data/lib/active_admin/devise.rb +28 -18
  209. data/lib/active_admin/dsl.rb +18 -11
  210. data/lib/active_admin/engine.rb +10 -8
  211. data/lib/active_admin/error.rb +62 -0
  212. data/lib/active_admin/filters/dsl.rb +2 -2
  213. data/lib/active_admin/filters/forms.rb +17 -27
  214. data/lib/active_admin/filters/formtastic_addons.rb +49 -15
  215. data/lib/active_admin/filters/resource_extension.rb +43 -34
  216. data/lib/active_admin/form_builder.rb +93 -154
  217. data/lib/active_admin/helpers/collection.rb +7 -13
  218. data/lib/active_admin/helpers/i18n.rb +7 -0
  219. data/lib/active_admin/helpers/optional_display.rb +5 -5
  220. data/lib/active_admin/helpers/routes/url_helpers.rb +15 -0
  221. data/lib/active_admin/helpers/scope_chain.rb +1 -1
  222. data/lib/active_admin/helpers/settings.rb +16 -9
  223. data/lib/active_admin/iconic.rb +17 -15
  224. data/lib/active_admin/iconic/icons.rb +136 -136
  225. data/lib/active_admin/inputs.rb +11 -7
  226. data/lib/active_admin/inputs/datepicker_input.rb +12 -3
  227. data/lib/active_admin/inputs/filters/base.rb +42 -0
  228. data/lib/active_admin/inputs/filters/base/search_method_select.rb +75 -0
  229. data/lib/active_admin/inputs/filters/boolean_input.rb +24 -0
  230. data/lib/active_admin/inputs/filters/check_boxes_input.rb +50 -0
  231. data/lib/active_admin/inputs/filters/date_range_input.rb +36 -0
  232. data/lib/active_admin/inputs/filters/numeric_input.rb +12 -0
  233. data/lib/active_admin/inputs/filters/select_input.rb +54 -0
  234. data/lib/active_admin/inputs/filters/string_input.rb +26 -0
  235. data/lib/active_admin/menu.rb +6 -4
  236. data/lib/active_admin/menu_collection.rb +1 -4
  237. data/lib/active_admin/namespace.rb +55 -29
  238. data/lib/active_admin/order_clause.rb +26 -0
  239. data/lib/active_admin/orm/active_record.rb +5 -0
  240. data/lib/active_admin/orm/active_record/comments.rb +81 -0
  241. data/lib/active_admin/orm/active_record/comments/comment.rb +45 -0
  242. data/lib/active_admin/{comments → orm/active_record/comments}/namespace_helper.rb +2 -2
  243. data/lib/active_admin/{comments → orm/active_record/comments}/resource_helper.rb +1 -1
  244. data/lib/active_admin/{comments → orm/active_record/comments}/show_page_helper.rb +0 -0
  245. data/lib/active_admin/orm/active_record/comments/views.rb +2 -0
  246. data/lib/active_admin/{comments → orm/active_record/comments}/views/active_admin_comments.rb +16 -14
  247. data/lib/active_admin/orm/mongoid.rb +1 -0
  248. data/lib/active_admin/orm/mongoid/.gitkeep +0 -0
  249. data/lib/active_admin/page.rb +7 -3
  250. data/lib/active_admin/page_dsl.rb +1 -1
  251. data/lib/active_admin/page_presenter.rb +2 -2
  252. data/lib/active_admin/pundit_adapter.rb +68 -0
  253. data/lib/active_admin/resource.rb +16 -17
  254. data/lib/active_admin/resource/action_items.rb +23 -18
  255. data/lib/active_admin/resource/belongs_to.rb +7 -3
  256. data/lib/active_admin/resource/controllers.rb +1 -0
  257. data/lib/active_admin/resource/includes.rb +12 -0
  258. data/lib/active_admin/resource/menu.rb +5 -5
  259. data/lib/active_admin/resource/naming.rb +27 -43
  260. data/lib/active_admin/resource/page_presenters.rb +1 -1
  261. data/lib/active_admin/resource/routes.rb +27 -11
  262. data/lib/active_admin/resource/scope_to.rb +7 -7
  263. data/lib/active_admin/resource/sidebars.rb +1 -0
  264. data/lib/active_admin/resource_controller.rb +6 -7
  265. data/lib/active_admin/resource_controller/data_access.rb +101 -93
  266. data/lib/active_admin/resource_controller/decorators.rb +91 -9
  267. data/lib/active_admin/resource_controller/streaming.rb +37 -0
  268. data/lib/active_admin/resource_dsl.rb +53 -10
  269. data/lib/active_admin/router.rb +7 -7
  270. data/lib/active_admin/scope.rb +6 -6
  271. data/lib/active_admin/sidebar_section.rb +10 -2
  272. data/lib/active_admin/version.rb +1 -1
  273. data/lib/active_admin/view_factory.rb +17 -17
  274. data/lib/active_admin/view_helpers.rb +0 -1
  275. data/lib/active_admin/view_helpers/auto_link_helper.rb +23 -12
  276. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +4 -3
  277. data/lib/active_admin/view_helpers/display_helper.rb +30 -15
  278. data/lib/active_admin/view_helpers/download_format_links_helper.rb +21 -25
  279. data/lib/active_admin/view_helpers/fields_for.rb +4 -4
  280. data/lib/active_admin/view_helpers/flash_helper.rb +4 -3
  281. data/lib/active_admin/view_helpers/form_helper.rb +5 -9
  282. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +6 -6
  283. data/lib/active_admin/views/action_items.rb +2 -2
  284. data/lib/active_admin/views/components/action_list_popover.rb +1 -1
  285. data/lib/active_admin/views/components/active_admin_form.rb +123 -0
  286. data/lib/active_admin/views/components/attributes_table.rb +63 -21
  287. data/lib/active_admin/views/components/blank_slate.rb +1 -1
  288. data/lib/active_admin/views/components/columns.rb +13 -7
  289. data/lib/active_admin/views/components/dropdown_menu.rb +6 -6
  290. data/lib/active_admin/views/components/index_list.rb +7 -7
  291. data/lib/active_admin/views/components/paginated_collection.rb +38 -20
  292. data/lib/active_admin/views/components/panel.rb +8 -2
  293. data/lib/active_admin/views/components/popover.rb +1 -1
  294. data/lib/active_admin/views/components/scopes.rb +5 -4
  295. data/lib/active_admin/views/components/sidebar_section.rb +3 -2
  296. data/lib/active_admin/views/components/site_title.rb +2 -2
  297. data/lib/active_admin/views/components/status_tag.rb +34 -11
  298. data/lib/active_admin/views/components/table_for.rb +90 -45
  299. data/lib/active_admin/views/components/tabs.rb +28 -0
  300. data/lib/active_admin/views/components/unsupported_browser.rb +11 -0
  301. data/lib/active_admin/views/footer.rb +3 -3
  302. data/lib/active_admin/views/header.rb +3 -3
  303. data/lib/active_admin/views/index_as_block.rb +10 -10
  304. data/lib/active_admin/views/index_as_blog.rb +45 -39
  305. data/lib/active_admin/views/index_as_grid.rb +14 -10
  306. data/lib/active_admin/views/index_as_table.rb +242 -129
  307. data/lib/active_admin/views/pages/base.rb +22 -18
  308. data/lib/active_admin/views/pages/form.rb +21 -11
  309. data/lib/active_admin/views/pages/index.rb +40 -35
  310. data/lib/active_admin/views/pages/layout.rb +1 -1
  311. data/lib/active_admin/views/pages/show.rb +4 -4
  312. data/lib/active_admin/views/tabbed_navigation.rb +7 -3
  313. data/lib/active_admin/views/title_bar.rb +10 -8
  314. data/lib/generators/active_admin/assets/assets_generator.rb +3 -28
  315. data/lib/generators/active_admin/assets/templates/{3.1/active_admin.css.scss → active_admin.css.scss} +0 -0
  316. data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +1 -0
  317. data/lib/generators/active_admin/devise/devise_generator.rb +24 -26
  318. data/lib/generators/active_admin/install/install_generator.rb +8 -9
  319. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +28 -26
  320. data/lib/generators/active_admin/install/templates/admin_user.rb.erb +12 -2
  321. data/lib/generators/active_admin/install/templates/dashboard.rb +4 -4
  322. data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb +3 -3
  323. data/lib/generators/active_admin/page/USAGE +8 -0
  324. data/lib/generators/active_admin/page/page_generator.rb +12 -0
  325. data/lib/generators/active_admin/page/templates/page.rb +5 -0
  326. data/lib/generators/active_admin/resource/resource_generator.rb +3 -5
  327. data/lib/generators/active_admin/resource/templates/admin.rb +15 -0
  328. data/lib/ransack_ext.rb +12 -0
  329. data/script/local +2 -2
  330. data/script/travis_cache +107 -0
  331. data/spec/javascripts/coffeescripts/jquery.aa.flash.js.coffee +25 -0
  332. data/spec/javascripts/fixtures/flashes.html +2 -0
  333. data/spec/rails_helper.rb +154 -0
  334. data/spec/{integration → requests}/default_namespace_spec.rb +6 -6
  335. data/spec/{integration → requests}/javascript_spec.rb +5 -5
  336. data/spec/requests/memory_spec.rb +23 -0
  337. data/spec/requests/stylesheets_spec.rb +18 -0
  338. data/spec/spec_helper.rb +12 -173
  339. data/spec/support/detect_rails_version.rb +9 -17
  340. data/spec/support/rails_template.rb +64 -35
  341. data/spec/support/rails_template_with_data.rb +14 -14
  342. data/spec/support/templates/admin/stores.rb +5 -1
  343. data/spec/support/templates/policies/active_admin/comment_policy.rb +9 -0
  344. data/spec/support/templates/policies/active_admin/page_policy.rb +18 -0
  345. data/spec/support/templates/policies/admin_user_policy.rb +11 -0
  346. data/spec/support/templates/policies/application_policy.rb +45 -0
  347. data/spec/support/templates/policies/category_policy.rb +7 -0
  348. data/spec/support/templates/policies/post_policy.rb +15 -0
  349. data/spec/support/templates/policies/store_policy.rb +11 -0
  350. data/spec/support/templates/policies/user_policy.rb +11 -0
  351. data/spec/support/templates/post_decorator.rb +4 -46
  352. data/spec/unit/abstract_view_factory_spec.rb +16 -16
  353. data/spec/unit/action_builder_spec.rb +24 -18
  354. data/spec/unit/active_admin_spec.rb +2 -2
  355. data/spec/unit/application_spec.rb +33 -34
  356. data/spec/unit/asset_registration_spec.rb +25 -29
  357. data/spec/unit/authorization/authorization_adapter_spec.rb +10 -10
  358. data/spec/unit/authorization/controller_authorization_spec.rb +11 -11
  359. data/spec/unit/authorization/index_overriding_spec.rb +22 -0
  360. data/spec/unit/auto_link_spec.rb +43 -13
  361. data/spec/unit/batch_actions/resource_spec.rb +15 -14
  362. data/spec/unit/batch_actions/settings_spec.rb +18 -18
  363. data/spec/unit/belongs_to_spec.rb +28 -19
  364. data/spec/unit/cancan_adapter_spec.rb +8 -8
  365. data/spec/unit/comments_spec.rb +99 -39
  366. data/spec/unit/component_spec.rb +3 -3
  367. data/spec/unit/config_shared_examples.rb +10 -10
  368. data/spec/unit/controller_filters_spec.rb +23 -16
  369. data/spec/unit/csv_builder_spec.rb +165 -24
  370. data/spec/unit/dependency_spec.rb +135 -0
  371. data/spec/unit/devise_spec.rb +17 -37
  372. data/spec/unit/dsl_spec.rb +70 -9
  373. data/spec/unit/event_spec.rb +11 -11
  374. data/spec/unit/filters/filter_form_builder_spec.rb +207 -148
  375. data/spec/unit/filters/resource_spec.rb +60 -26
  376. data/spec/unit/form_builder_spec.rb +419 -145
  377. data/spec/unit/generators/install_spec.rb +23 -0
  378. data/spec/unit/helpers/collection_spec.rb +18 -18
  379. data/spec/unit/helpers/scope_chain_spec.rb +6 -6
  380. data/spec/unit/helpers/settings_spec.rb +4 -4
  381. data/spec/unit/i18n_spec.rb +12 -0
  382. data/spec/unit/menu_collection_spec.rb +14 -14
  383. data/spec/unit/menu_item_spec.rb +42 -42
  384. data/spec/unit/menu_spec.rb +20 -20
  385. data/spec/unit/namespace/authorization_spec.rb +8 -8
  386. data/spec/unit/namespace/register_page_spec.rb +11 -11
  387. data/spec/unit/namespace/register_resource_spec.rb +28 -30
  388. data/spec/unit/namespace_spec.rb +20 -20
  389. data/spec/unit/order_clause_spec.rb +81 -0
  390. data/spec/unit/page_controller_spec.rb +1 -1
  391. data/spec/unit/page_spec.rb +18 -12
  392. data/spec/unit/pretty_format_spec.rb +42 -14
  393. data/spec/unit/pundit_adapter_spec.rb +98 -0
  394. data/spec/unit/resource/action_items_spec.rb +15 -12
  395. data/spec/unit/resource/includes_spec.rb +21 -0
  396. data/spec/unit/resource/menu_spec.rb +1 -1
  397. data/spec/unit/resource/naming_spec.rb +35 -21
  398. data/spec/unit/resource/page_presenters_spec.rb +8 -8
  399. data/spec/unit/resource/pagination_spec.rb +6 -6
  400. data/spec/unit/resource/routes_spec.rb +10 -10
  401. data/spec/unit/resource/scopes_spec.rb +14 -7
  402. data/spec/unit/resource/sidebars_spec.rb +6 -6
  403. data/spec/unit/resource_collection_spec.rb +31 -38
  404. data/spec/unit/resource_controller/data_access_spec.rb +96 -30
  405. data/spec/unit/resource_controller/decorators_spec.rb +83 -0
  406. data/spec/unit/resource_controller/sidebars_spec.rb +7 -8
  407. data/spec/unit/resource_controller_spec.rb +73 -70
  408. data/spec/unit/resource_registration_spec.rb +12 -12
  409. data/spec/unit/resource_spec.rb +77 -42
  410. data/spec/unit/routing_spec.rb +39 -31
  411. data/spec/unit/scope_spec.rb +112 -30
  412. data/spec/unit/settings_spec.rb +51 -21
  413. data/spec/unit/view_factory_spec.rb +2 -3
  414. data/spec/unit/view_helpers/breadcrumbs_spec.rb +71 -60
  415. data/spec/unit/view_helpers/display_name_spec.rb +49 -21
  416. data/spec/unit/view_helpers/download_format_links_helper_spec.rb +5 -5
  417. data/spec/unit/view_helpers/fields_for_spec.rb +18 -18
  418. data/spec/unit/view_helpers/flash_helper_spec.rb +25 -0
  419. data/spec/unit/view_helpers/form_helper_spec.rb +10 -23
  420. data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +64 -22
  421. data/spec/unit/views/components/action_list_popover_spec.rb +16 -6
  422. data/spec/unit/views/components/attributes_table_spec.rb +171 -30
  423. data/spec/unit/views/components/batch_action_popover_spec.rb +20 -6
  424. data/spec/unit/views/components/blank_slate_spec.rb +14 -4
  425. data/spec/unit/views/components/columns_spec.rb +52 -22
  426. data/spec/unit/views/components/index_list_spec.rb +11 -8
  427. data/spec/unit/views/components/index_table_for_spec.rb +46 -0
  428. data/spec/unit/views/components/paginated_collection_spec.rb +79 -90
  429. data/spec/unit/views/components/panel_spec.rb +32 -21
  430. data/spec/unit/views/components/popover_spec.rb +7 -7
  431. data/spec/unit/views/components/sidebar_section_spec.rb +18 -8
  432. data/spec/unit/views/components/site_title_spec.rb +26 -26
  433. data/spec/unit/views/components/status_tag_spec.rb +178 -38
  434. data/spec/unit/views/components/table_for_spec.rb +237 -35
  435. data/spec/unit/views/components/tabs_spec.rb +39 -0
  436. data/spec/unit/views/components/unsupported_browser_spec.rb +47 -0
  437. data/spec/unit/views/pages/form_spec.rb +17 -10
  438. data/spec/unit/views/pages/index_spec.rb +60 -0
  439. data/spec/unit/views/pages/layout_spec.rb +17 -21
  440. data/spec/unit/views/pages/show_spec.rb +18 -6
  441. data/spec/unit/views/tabbed_navigation_spec.rb +61 -52
  442. data/tasks/docs.rake +9 -11
  443. data/tasks/parallel_tests.rake +8 -2
  444. data/tasks/test.rake +13 -9
  445. data/tasks/yard.rake +7 -4
  446. metadata +219 -163
  447. data/.document +0 -5
  448. data/README.rdoc +0 -88
  449. data/app/assets/images/active_admin/admin_notes_icon.png +0 -0
  450. data/app/assets/images/active_admin/datepicker/datepicker-header-bg.png +0 -0
  451. data/app/assets/images/active_admin/datepicker/datepicker-next-link-icon.png +0 -0
  452. data/app/assets/images/active_admin/datepicker/datepicker-nipple.png +0 -0
  453. data/app/assets/images/active_admin/datepicker/datepicker-prev-link-icon.png +0 -0
  454. data/app/assets/images/active_admin/index_list_icons/block_icon.svg +0 -10
  455. data/app/assets/images/active_admin/index_list_icons/blog_icon.svg +0 -4
  456. data/app/assets/images/active_admin/index_list_icons/grid_icon.svg +0 -13
  457. data/app/assets/images/active_admin/index_list_icons/table_icon.svg +0 -3
  458. data/app/assets/images/active_admin/loading.gif +0 -0
  459. data/app/assets/javascripts/active_admin/application.js +0 -3
  460. data/app/assets/javascripts/active_admin/base.js +0 -5
  461. data/app/assets/javascripts/active_admin/components/jquery.aa.dropdown-menu.js.coffee +0 -105
  462. data/app/assets/javascripts/active_admin/components/jquery.aa.popover.js.coffee +0 -97
  463. data/app/assets/javascripts/active_admin/lib/namespace.js.coffee +0 -4
  464. data/app/assets/javascripts/active_admin/pages/application.js.coffee +0 -21
  465. data/app/assets/javascripts/active_admin/pages/batch_actions.js.coffee +0 -26
  466. data/app/assets/stylesheets/active_admin/components/_batch_actions.css.scss +0 -11
  467. data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +0 -41
  468. data/app/assets/stylesheets/active_admin/components/_table_tools.css.scss +0 -95
  469. data/app/assets/stylesheets/active_admin/mixins/_gradients.css.scss +0 -38
  470. data/app/assets/stylesheets/active_admin/mixins/_rounded.css.scss +0 -43
  471. data/app/views/active_admin/dashboard/index.html.arb +0 -1
  472. data/app/views/active_admin/resource/index.csv.erb +0 -23
  473. data/docs/3-index-pages/create-an-index.md +0 -29
  474. data/lib/active_admin/comments.rb +0 -83
  475. data/lib/active_admin/comments/comment.rb +0 -42
  476. data/lib/active_admin/comments/views.rb +0 -2
  477. data/lib/active_admin/dependency_checker.rb +0 -46
  478. data/lib/active_admin/inputs/filter_base.rb +0 -33
  479. data/lib/active_admin/inputs/filter_base/search_method_select.rb +0 -73
  480. data/lib/active_admin/inputs/filter_boolean_input.rb +0 -36
  481. data/lib/active_admin/inputs/filter_check_boxes_input.rb +0 -40
  482. data/lib/active_admin/inputs/filter_date_range_input.rb +0 -34
  483. data/lib/active_admin/inputs/filter_numeric_input.rb +0 -10
  484. data/lib/active_admin/inputs/filter_select_input.rb +0 -49
  485. data/lib/active_admin/inputs/filter_string_input.rb +0 -24
  486. data/lib/active_admin/reloader.rb +0 -130
  487. data/lib/active_admin/resource_controller/actions.rb +0 -81
  488. data/lib/active_admin/sass/active_admin.scss +0 -3
  489. data/lib/active_admin/sass/css_loader.rb +0 -16
  490. data/lib/active_admin/sass/helpers.rb +0 -45
  491. data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +0 -7
  492. data/lib/active_admin/views/dashboard_section_renderer.rb +0 -19
  493. data/lib/active_admin/views/pages/dashboard.rb +0 -62
  494. data/lib/generators/active_admin/assets/templates/3.0/active_admin.js +0 -1
  495. data/lib/generators/active_admin/assets/templates/3.1/active_admin.js +0 -1
  496. data/lib/meta_search_ext.rb +0 -10
  497. data/spec/integration/memory_spec.rb +0 -29
  498. data/spec/integration/stylesheets_spec.rb +0 -41
  499. data/spec/javascripts/compiled/jquery.aa.checkbox-toggler-spec.js +0 -60
  500. data/spec/javascripts/compiled/jquery.aa.popover-spec.js +0 -106
  501. data/spec/javascripts/compiled/jquery.aa.table-checkbox-toggler-spec.js +0 -37
  502. data/spec/javascripts/helpers/vendor/jasmine-fixture-0.0.5.js +0 -108
  503. data/spec/javascripts/helpers/vendor/jasmine-jquery.js +0 -288
  504. data/spec/javascripts/helpers/vendor/sinon-1.2.0.js +0 -2915
  505. data/spec/javascripts/support/jquery-ui-1.8.16.custom.min.js +0 -34
  506. data/spec/javascripts/support/jquery.min.js +0 -4
  507. data/spec/spec_helper_without_rails.rb +0 -11
  508. data/spec/unit/generators/install_rails_3_1_spec.rb +0 -16
  509. data/spec/unit/rails_spec.rb +0 -43
  510. data/spec/unit/reloader_spec.rb +0 -124
  511. data/spec/unit/sass/helpers_spec.rb +0 -47
  512. data/tasks/js.rake +0 -32
@@ -1,4 +1,4 @@
1
- require 'spec_helper'
1
+ require 'rails_helper'
2
2
 
3
3
  describe ActiveAdmin::Views::IndexList do
4
4
 
@@ -9,24 +9,27 @@ describe ActiveAdmin::Views::IndexList do
9
9
 
10
10
  let(:helpers) do
11
11
  helpers = mock_action_view
12
- helpers.stub! :url_for => "/"
13
- helpers.stub!(:params).and_return({:as => "table"})
12
+ allow(helpers).to receive(:url_for).and_return("/")
13
+ allow(helpers).to receive(:params).and_return as: "table"
14
14
  helpers
15
15
  end
16
16
 
17
17
  subject do
18
- render_arbre_component({:index_classes => index_classes}, helpers) do
18
+ render_arbre_component({index_classes: index_classes}, helpers) do
19
19
  index_list_renderer(index_classes)
20
20
  end
21
21
  end
22
22
 
23
- its(:tag_name) { should == 'ul' }
23
+ describe '#tag_name' do
24
+ subject { super().tag_name }
25
+ it { is_expected.to eq 'ul'}
26
+ end
24
27
 
25
28
  it "should contain the names of available indexes in links" do
26
29
  a_tags = subject.find_by_tag("a")
27
- a_tags.size.should == 2
28
- a_tags.first.to_s.should include("Table")
29
- a_tags.last.to_s.should include("List")
30
+ expect(a_tags.size).to eq 2
31
+ expect(a_tags.first.to_s).to include("Table")
32
+ expect(a_tags.last.to_s).to include("List")
30
33
  end
31
34
  end
32
35
  end
@@ -0,0 +1,46 @@
1
+ require 'rails_helper'
2
+
3
+ describe ActiveAdmin::Views::IndexAsTable::IndexTableFor do
4
+ describe 'creating with the dsl' do
5
+ let(:collection) do
6
+ [Post.new(title: 'First Post', starred: true)]
7
+ end
8
+ let(:active_admin_config) do
9
+ namespace = ActiveAdmin::Namespace.new(ActiveAdmin::Application.new, :admin)
10
+ namespace.batch_actions = [ActiveAdmin::BatchAction.new(:flag, 'Flag') {}]
11
+ namespace
12
+ end
13
+
14
+ let(:assigns) do
15
+ {
16
+ collection: collection,
17
+ active_admin_config: active_admin_config
18
+ }
19
+ end
20
+ let(:helpers) { mock_action_view }
21
+
22
+ context 'when creating a selectable column' do
23
+ let(:table) do
24
+ render_arbre_component assigns, helpers do
25
+ insert_tag(ActiveAdmin::Views::IndexAsTable::IndexTableFor, collection, {sortable: true}) do
26
+ selectable_column
27
+ end
28
+ end
29
+ end
30
+
31
+ context 'creates a table header based on the selectable column' do
32
+ let(:header) do
33
+ table.find_by_tag('th').first
34
+ end
35
+
36
+ it 'with selectable column class name' do
37
+ expect(header.attributes[:class]).to include 'col-selectable'
38
+ end
39
+
40
+ it 'not sortable' do
41
+ expect(header.attributes[:class]).not_to include 'sortable'
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -1,4 +1,4 @@
1
- require 'spec_helper'
1
+ require 'rails_helper'
2
2
 
3
3
  describe ActiveAdmin::Views::PaginatedCollection do
4
4
  describe "creating with the dsl" do
@@ -10,66 +10,71 @@ describe ActiveAdmin::Views::PaginatedCollection do
10
10
 
11
11
  let(:view) do
12
12
  view = mock_action_view
13
- view.request.stub!(:query_parameters).and_return({:controller => 'admin/posts', :action => 'index', :page => '1'})
14
- view.controller.params = {:controller => 'admin/posts', :action => 'index'}
13
+ allow(view.request).to receive(:query_parameters).and_return page: '1'
14
+ allow(view.request).to receive(:path_parameters).and_return controller: 'admin/posts', action: 'index'
15
15
  view
16
16
  end
17
17
 
18
18
  # Helper to render paginated collections within an arbre context
19
19
  def paginated_collection(*args)
20
- render_arbre_component({:paginated_collection_args => args}, view) do
20
+ render_arbre_component({paginated_collection_args: args}, view) do
21
21
  paginated_collection(*paginated_collection_args)
22
22
  end
23
23
  end
24
24
 
25
25
  let(:collection) do
26
- posts = [Post.new(:title => "First Post"), Post.new(:title => "Second Post"), Post.new(:title => "Third Post")]
26
+ posts = [Post.new(title: "First Post"), Post.new(title: "Second Post"), Post.new(title: "Third Post")]
27
27
  Kaminari.paginate_array(posts).page(1).per(5)
28
28
  end
29
29
 
30
30
  before do
31
- collection.stub!(:reorder) { collection }
31
+ allow(collection).to receive(:except) { collection } unless collection.respond_to? :except
32
+ allow(collection).to receive(:group_values) { [] } unless collection.respond_to? :group_values
32
33
  end
33
34
 
34
- context "when specifying collection" do
35
- let(:pagination) do
36
- paginated_collection(collection)
37
- end
35
+ let(:pagination){ paginated_collection collection }
38
36
 
39
- it "should set :collection as the passed in collection" do
40
- pagination.find_by_class('pagination_information').first.content.should == "Displaying <b>all 3</b> posts"
41
- end
37
+ it "should set :collection as the passed in collection" do
38
+ expect(pagination.find_by_class('pagination_information').first.content).to eq "Displaying <b>all 3</b> posts"
39
+ end
42
40
 
43
- it "should raise error if collection has no pagination scope" do
44
- lambda {
45
- paginated_collection([Post.new, Post.new])
46
- }.should raise_error(StandardError, "Collection is not a paginated scope. Set collection.page(params[:page]).per(10) before calling :paginated_collection.")
47
- end
41
+ it "should raise error if collection has no pagination scope" do
42
+ expect {
43
+ paginated_collection([Post.new, Post.new])
44
+ }.to raise_error(StandardError, "Collection is not a paginated scope. Set collection.page(params[:page]).per(10) before calling :paginated_collection.")
45
+ end
46
+
47
+ it 'should preserve custom query params' do
48
+ allow(view.request).to receive(:query_parameters).and_return page: '1', something: 'else'
49
+ pagination_content = pagination.content
50
+ expect(pagination_content).to include '/admin/posts.csv?page=1&amp;something=else'
51
+ expect(pagination_content).to include '/admin/posts.xml?page=1&amp;something=else'
52
+ expect(pagination_content).to include '/admin/posts.json?page=1&amp;something=else'
48
53
  end
49
54
 
50
55
  context "when specifying :param_name option" do
51
56
  let(:collection) do
52
- posts = 10.times.inject([]) {|m, _| m << Post.new }
57
+ posts = 10.times.map{ Post.new }
53
58
  Kaminari.paginate_array(posts).page(1).per(5)
54
59
  end
55
60
 
56
- let(:pagination) { paginated_collection(collection, :param_name => :post_page) }
61
+ let(:pagination) { paginated_collection(collection, param_name: :post_page) }
57
62
 
58
63
  it "should customize the page number parameter in pagination links" do
59
- pagination.children.last.content.should match(/\/admin\/posts\?post_page=2/)
64
+ expect(pagination.children.last.content).to match(/\/admin\/posts\?post_page=2/)
60
65
  end
61
66
  end
62
67
 
63
- context "when specifying :download_links => false option" do
68
+ context "when specifying download_links: false option" do
64
69
  let(:collection) do
65
- posts = 10.times.inject([]) {|m, _| m << Post.new }
70
+ posts = 10.times.map{ Post.new }
66
71
  Kaminari.paginate_array(posts).page(1).per(5)
67
72
  end
68
73
 
69
- let(:pagination) { paginated_collection(collection, :download_links => false) }
74
+ let(:pagination) { paginated_collection(collection, download_links: false) }
70
75
 
71
76
  it "should not render download links" do
72
- pagination.find_by_tag('div').last.content.should_not match(/Download:/)
77
+ expect(pagination.find_by_tag('div').last.content).to_not match(/Download:/)
73
78
  end
74
79
  end
75
80
 
@@ -79,18 +84,18 @@ describe ActiveAdmin::Views::PaginatedCollection do
79
84
  Kaminari.paginate_array(posts).page(1).per(5)
80
85
  end
81
86
 
82
- let(:pagination) { paginated_collection(collection, :entry_name => "message") }
87
+ let(:pagination) { paginated_collection(collection, entry_name: "message") }
83
88
 
84
89
  it "should use :entry_name as the collection name" do
85
- pagination.find_by_class('pagination_information').first.content.should == "Displaying <b>1</b> message"
90
+ expect(pagination.find_by_class('pagination_information').first.content).to eq "Displaying <b>1</b> message"
86
91
  end
87
92
  end
88
93
 
89
94
  context "when specifying :entry_name option with multiple items" do
90
- let(:pagination) { paginated_collection(collection, :entry_name => "message") }
95
+ let(:pagination) { paginated_collection(collection, entry_name: "message") }
91
96
 
92
97
  it "should use :entry_name as the collection name" do
93
- pagination.find_by_class('pagination_information').first.content.should == "Displaying <b>all 3</b> messages"
98
+ expect(pagination.find_by_class('pagination_information').first.content).to eq "Displaying <b>all 3</b> messages"
94
99
  end
95
100
  end
96
101
 
@@ -100,18 +105,18 @@ describe ActiveAdmin::Views::PaginatedCollection do
100
105
  Kaminari.paginate_array(posts).page(1).per(5)
101
106
  end
102
107
 
103
- let(:pagination) { paginated_collection(collection, :entry_name => "singular", :entries_name => "plural") }
108
+ let(:pagination) { paginated_collection(collection, entry_name: "singular", entries_name: "plural") }
104
109
 
105
110
  it "should use :entry_name as the collection name" do
106
- pagination.find_by_class('pagination_information').first.content.should == "Displaying <b>1</b> singular"
111
+ expect(pagination.find_by_class('pagination_information').first.content).to eq "Displaying <b>1</b> singular"
107
112
  end
108
113
  end
109
114
 
110
115
  context "when specifying :entry_name and :entries_name option with a multiple items" do
111
- let(:pagination) { paginated_collection(collection, :entry_name => "singular", :entries_name => "plural") }
116
+ let(:pagination) { paginated_collection(collection, entry_name: "singular", entries_name: "plural") }
112
117
 
113
118
  it "should use :entries_name as the collection name" do
114
- pagination.find_by_class('pagination_information').first.content.should == "Displaying <b>all 3</b> plural"
119
+ expect(pagination.find_by_class('pagination_information').first.content).to eq "Displaying <b>all 3</b> plural"
115
120
  end
116
121
  end
117
122
 
@@ -121,28 +126,24 @@ describe ActiveAdmin::Views::PaginatedCollection do
121
126
  Kaminari.paginate_array(posts).page(1).per(5)
122
127
  end
123
128
 
124
- let(:pagination) { paginated_collection(collection) }
125
-
126
129
  it "should use 'post' as the collection name when there is no I18n translation" do
127
- pagination.find_by_class('pagination_information').first.content.should == "Displaying <b>1</b> post"
130
+ expect(pagination.find_by_class('pagination_information').first.content).to eq "Displaying <b>1</b> post"
128
131
  end
129
132
 
130
133
  it "should use 'Singular' as the collection name when there is an I18n translation" do
131
- I18n.stub(:translate) { "Singular" }
132
- pagination.find_by_class('pagination_information').first.content.should == "Displaying <b>1</b> Singular"
134
+ allow(I18n).to receive(:translate) { "Singular" }
135
+ expect(pagination.find_by_class('pagination_information').first.content).to eq "Displaying <b>1</b> Singular"
133
136
  end
134
137
  end
135
138
 
136
139
  context "when omitting :entry_name with multiple items" do
137
- let(:pagination) { paginated_collection(collection) }
138
-
139
140
  it "should use 'posts' as the collection name when there is no I18n translation" do
140
- pagination.find_by_class('pagination_information').first.content.should == "Displaying <b>all 3</b> posts"
141
+ expect(pagination.find_by_class('pagination_information').first.content).to eq "Displaying <b>all 3</b> posts"
141
142
  end
142
143
 
143
144
  it "should use 'Plural' as the collection name when there is an I18n translation" do
144
- I18n.stub(:translate) { "Plural" }
145
- pagination.find_by_class('pagination_information').first.content.should == "Displaying <b>all 3</b> Plural"
145
+ allow(I18n).to receive(:translate) { "Plural" }
146
+ expect(pagination.find_by_class('pagination_information').first.content).to eq "Displaying <b>all 3</b> Plural"
146
147
  end
147
148
  end
148
149
 
@@ -152,96 +153,84 @@ describe ActiveAdmin::Views::PaginatedCollection do
152
153
  Kaminari.paginate_array(posts).page(1).per(5)
153
154
  end
154
155
 
155
- let(:pagination) { paginated_collection(collection) }
156
-
157
156
  it "should display 'No entries found'" do
158
- pagination.find_by_class('pagination_information').first.content.should == "No entries found"
157
+ expect(pagination.find_by_class('pagination_information').first.content).to eq "No entries found"
159
158
  end
160
159
  end
161
160
 
162
161
  context "when collection comes from find with GROUP BY" do
163
162
  let(:collection) do
164
- %w{Foo Foo Bar}.each {|title| Post.create(:title => title) }
163
+ %w{Foo Foo Bar}.each {|title| Post.create(title: title) }
165
164
  Post.select(:title).group(:title).page(1).per(5)
166
165
  end
167
166
 
168
- let(:pagination) { paginated_collection(collection) }
169
-
170
167
  it "should display proper message (including number and not hash)" do
171
- pagination.find_by_class('pagination_information').first.content.should == "Displaying <b>all 2</b> posts"
168
+ expect(pagination.find_by_class('pagination_information').first.content).to eq "Displaying <b>all 2</b> posts"
172
169
  end
173
170
  end
174
171
 
175
172
  context "when collection with many pages comes from find with GROUP BY" do
176
173
  let(:collection) do
177
- %w{Foo Foo Bar Baz}.each {|title| Post.create(:title => title) }
174
+ %w{Foo Foo Bar Baz}.each {|title| Post.create(title: title) }
178
175
  Post.select(:title).group(:title).page(1).per(2)
179
176
  end
180
177
 
181
- let(:pagination) { paginated_collection(collection) }
182
-
183
178
  it "should display proper message (including number and not hash)" do
184
- pagination.find_by_class('pagination_information').first.content.
185
- gsub('&nbsp;',' ').should == "Displaying posts <b>1 - 2</b> of <b>3</b> in total"
179
+ expect(pagination.find_by_class('pagination_information').first.content.gsub('&nbsp;',' ')).
180
+ to eq "Displaying posts <b>1 - 2</b> of <b>3</b> in total"
186
181
  end
187
182
  end
188
183
 
189
184
  context "when viewing the last page of a collection that has multiple pages" do
190
185
  let(:collection) do
191
- posts = [Post.new] * 81
192
- Kaminari.paginate_array(posts).page(3).per(30)
186
+ Kaminari.paginate_array([Post.new] * 81).page(3).per(30)
193
187
  end
194
188
 
195
- let(:pagination) { paginated_collection(collection) }
196
-
197
189
  it "should show the proper item counts" do
198
- pagination.find_by_class('pagination_information').first.content.
199
- gsub('&nbsp;',' ').should == "Displaying posts <b>61 - 81</b> of <b>81</b> in total"
190
+ expect(pagination.find_by_class('pagination_information').first.content.gsub('&nbsp;',' ')).
191
+ to eq "Displaying posts <b>61 - 81</b> of <b>81</b> in total"
200
192
  end
201
193
  end
202
194
 
203
- context "when having the param :pagination_total set to true " do
204
- let(:view) do
205
- view = mock_action_view
206
- view.request.stub!(:query_parameters).and_return({:controller => 'admin/stores', :action => 'index', :page => '1'})
207
- view.controller.params = {:controller => 'admin/stores', :action => 'index'}
208
- view
209
- end
210
-
195
+ context "with :pagination_total" do
211
196
  let(:collection) do
212
- stores = [Store.new] * 1000
213
- Kaminari.paginate_array(stores).page(1).per(30)
197
+ Kaminari.paginate_array([Post.new] * 256).page(1).per(30)
214
198
  end
215
199
 
216
- let(:pagination) { paginated_collection(collection, :pagination_total => true) }
200
+ describe "set to false" do
201
+ let(:pagination) { paginated_collection(collection, pagination_total: false) }
217
202
 
218
- it "should show the total item counts" do
219
- info = pagination.find_by_class('pagination_information').first.content.gsub('&nbsp;',' ')
220
- info.should eq "Displaying Bookstores <b>1 - 30</b> of <b>1000</b> in total"
203
+ it "should not show the total item counts" do
204
+ info = pagination.find_by_class('pagination_information').first.content.gsub('&nbsp;',' ')
205
+ expect(info).to eq "Displaying posts <b>1 - 30</b>"
206
+ end
221
207
  end
222
208
 
223
- end
224
-
225
- context "when having the param :pagination_total set to false " do
226
- let(:view) do
227
- view = mock_action_view
228
- view.request.stub!(:query_parameters).and_return({:controller => 'admin/stores', :action => 'index', :page => '1'})
229
- view.controller.params = {:controller => 'admin/stores', :action => 'index'}
230
- view
209
+ describe "set to true" do
210
+ let(:pagination) { paginated_collection(collection, pagination_total: true) }
211
+
212
+ it "should show the total item counts" do
213
+ info = pagination.find_by_class('pagination_information').first.content.gsub('&nbsp;',' ')
214
+ expect(info).to eq "Displaying posts <b>1 - 30</b> of <b>256</b> in total"
215
+ end
231
216
  end
217
+ end
232
218
 
219
+ context "when specifying per_page: array option" do
233
220
  let(:collection) do
234
- stores = [Store.new] * 1000
235
- Kaminari.paginate_array(stores).page(1).per(30)
221
+ posts = 10.times.map { Post.new }
222
+ Kaminari.paginate_array(posts).page(1).per(5)
236
223
  end
237
224
 
238
- let(:pagination) { paginated_collection(collection, :pagination_total => false) }
225
+ let(:pagination) { paginated_collection(collection, per_page: [1, 2, 3]) }
226
+ let(:pagination_html) { pagination.find_by_class("pagination_per_page").first }
227
+ let(:pagination_node) { Capybara.string(pagination_html.to_s) }
239
228
 
240
- it "should not show the total item counts" do
241
- info = pagination.find_by_class('pagination_information').first.content.gsub('&nbsp;',' ')
242
- info.should eq "Displaying Bookstores <b>1 - 30</b>"
229
+ it "should render per_page select tag" do
230
+ expect(pagination_html.content).to match(/Per page:/)
231
+ expect(pagination_node).to have_css("select option", count: 3)
243
232
  end
244
-
245
233
  end
234
+
246
235
  end
247
236
  end
@@ -1,51 +1,62 @@
1
- require 'spec_helper'
1
+ require 'rails_helper'
2
2
 
3
3
  describe ActiveAdmin::Views::Panel do
4
-
5
- let(:the_panel) do
4
+ let(:arbre_panel) do
6
5
  render_arbre_component do
7
- panel "My Title" do
6
+ panel "My Title", icon: :arrow_down do
7
+ header_action link_to("My Link", "https://www.github.com/activeadmin/activeadmin")
8
8
  span("Hello World")
9
9
  end
10
10
  end
11
11
  end
12
12
 
13
+ let(:panel_html) { Capybara.string(arbre_panel.to_s) }
14
+
13
15
  it "should have a title h3" do
14
- the_panel.find_by_tag("h3").first.content.should == "My Title"
16
+ expect(panel_html).to have_css 'h3', text: "My Title"
17
+ end
18
+
19
+ it "should add panel actions to the panel header" do
20
+ link = panel_html.find('h3 > div.header_action a')
21
+ expect(link.text).to eq('My Link')
22
+ expect(link[:href]).to eq("https://www.github.com/activeadmin/activeadmin")
15
23
  end
16
24
 
17
25
  it "should have a contents div" do
18
- the_panel.find_by_tag("div").first.class_list.should include("panel_contents")
26
+ expect(panel_html).to have_css 'div.panel_contents'
19
27
  end
20
28
 
21
29
  it "should add children to the contents div" do
22
- the_panel.find_by_tag("span").first.parent.should == the_panel.find_by_tag("div").first
30
+ expect(panel_html).to have_css 'div.panel_contents > span', text: "Hello World"
23
31
  end
24
32
 
25
33
  it "should set the icon" do
26
- the_panel = render_arbre_component do
27
- panel("Title", :icon => :arrow_down)
28
- end
29
- the_panel.find_by_tag("h3").first.content.should include("span class=\"icon")
34
+ expect(panel_html).to have_css "h3 > span.icon"
30
35
  end
31
36
 
32
- it "should allow a html_safe title (without icon)" do
33
- title_with_html = %q[Title with <abbr>HTML</abbr>].html_safe
34
- the_panel = render_arbre_component do
35
- panel(title_with_html)
37
+ context "with html-safe title" do
38
+ let(:arbre_panel) do
39
+ title_with_html = %q[Title with <abbr>HTML</abbr>].html_safe
40
+ render_arbre_component do
41
+ panel(title_with_html)
42
+ end
43
+ end
44
+
45
+ it "should allow a html_safe title" do
46
+ expect(panel_html).to have_css "h3", text: "Title with HTML"
47
+ expect(panel_html).to have_css "h3 > abbr", text: "HTML"
36
48
  end
37
- the_panel.find_by_tag("h3").first.content.should eq(title_with_html)
38
49
  end
39
50
 
40
51
  describe "#children?" do
41
-
42
- it "returns false if no children have been added to the panel" do
43
- the_panel = render_arbre_component do
52
+ let(:arbre_panel) do
53
+ render_arbre_component do
44
54
  panel("A Panel")
45
55
  end
46
- the_panel.children?.should == false
47
56
  end
48
57
 
58
+ it "returns false if no children have been added to the panel" do
59
+ expect(arbre_panel.children?).to eq false
60
+ end
49
61
  end
50
-
51
62
  end