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
@@ -1,37 +1,47 @@
1
- require 'spec_helper'
1
+ require 'rails_helper'
2
2
 
3
3
  describe ActiveAdmin::Views::SidebarSection do
4
4
 
5
+ let(:options) { {} }
6
+
5
7
  let(:section) do
6
- ActiveAdmin::SidebarSection.new("Help Section") do
8
+ ActiveAdmin::SidebarSection.new("Help Section", options) do
7
9
  span "Help Me"
8
10
  end
9
11
  end
10
12
 
11
13
  let(:html) do
12
- render_arbre_component :section => section do
14
+ render_arbre_component section: section do
13
15
  sidebar_section(assigns[:section])
14
16
  end
15
17
  end
16
18
 
17
19
  it "should have a title h3" do
18
- html.find_by_tag("h3").first.content.should == "Help Section"
20
+ expect(html.find_by_tag("h3").first.content).to eq "Help Section"
19
21
  end
20
22
 
21
23
  it "should have the class of 'sidebar_section'" do
22
- html.class_list.should include("sidebar_section")
24
+ expect(html.class_list).to include("sidebar_section")
23
25
  end
24
26
 
25
27
  it "should have an id based on the title" do
26
- html.id.should == "help-section_sidebar_section"
28
+ expect(html.id).to eq "help-section_sidebar_section"
27
29
  end
28
30
 
29
31
  it "should have a contents div" do
30
- html.find_by_tag("div").first.class_list.should include("panel_contents")
32
+ expect(html.find_by_tag("div").first.class_list).to include("panel_contents")
31
33
  end
32
34
 
33
35
  it "should add children to the contents div" do
34
- html.find_by_tag("span").first.parent.should == html.find_by_tag("div").first
36
+ expect(html.find_by_tag("span").first.parent).to eq html.find_by_tag("div").first
37
+ end
38
+
39
+ context 'with a custom class attribute' do
40
+ let(:options) { { class: 'custom_class' } }
41
+
42
+ it "should have 'custom_class' class" do
43
+ expect(html.class_list).to include("custom_class")
44
+ end
35
45
  end
36
46
 
37
47
  end
@@ -1,4 +1,4 @@
1
- require 'spec_helper'
1
+ require 'rails_helper'
2
2
 
3
3
  describe ActiveAdmin::Views::SiteTitle do
4
4
 
@@ -18,18 +18,18 @@ describe ActiveAdmin::Views::SiteTitle do
18
18
  site_title_link: nil
19
19
 
20
20
  site_title = build_title(namespace)
21
- site_title.content.should eq "Hello World"
21
+ expect(site_title.content).to eq "Hello World"
22
22
  end
23
23
 
24
24
  it "renders the return value of a method when a symbol" do
25
- helpers.should_receive(:hello_world).and_return("Hello World")
25
+ expect(helpers).to receive(:hello_world).and_return("Hello World")
26
26
 
27
27
  namespace = double site_title: :hello_world,
28
28
  site_title_image: nil,
29
29
  site_title_link: nil
30
30
 
31
31
  site_title = build_title(namespace)
32
- site_title.content.should eq "Hello World"
32
+ expect(site_title.content).to eq "Hello World"
33
33
  end
34
34
 
35
35
  it "renders the return value of a proc" do
@@ -38,7 +38,7 @@ describe ActiveAdmin::Views::SiteTitle do
38
38
  site_title_link: nil
39
39
 
40
40
  site_title = build_title(namespace)
41
- site_title.content.should eq "Hello World"
41
+ expect(site_title.content).to eq "Hello World"
42
42
  end
43
43
 
44
44
  end
@@ -46,7 +46,7 @@ describe ActiveAdmin::Views::SiteTitle do
46
46
  context "when an image" do
47
47
 
48
48
  it "renders the string when a string is passed in" do
49
- helpers.should_receive(:image_tag).
49
+ expect(helpers).to receive(:image_tag).
50
50
  with("an/image.png", alt: nil, id: "site_title_image").
51
51
  and_return '<img src="/assets/an/image.png" />'.html_safe
52
52
 
@@ -55,7 +55,7 @@ describe ActiveAdmin::Views::SiteTitle do
55
55
  site_title_link: nil
56
56
 
57
57
  site_title = build_title(namespace)
58
- site_title.content.strip.should eq '<img src="/assets/an/image.png" />'
58
+ expect(site_title.content.strip).to eq '<img src="/assets/an/image.png" />'
59
59
  end
60
60
 
61
61
  end
@@ -68,7 +68,7 @@ describe ActiveAdmin::Views::SiteTitle do
68
68
  site_title_link: "/"
69
69
 
70
70
  site_title = build_title(namespace)
71
- site_title.content.should eq '<a href="/">Hello World</a>'
71
+ expect(site_title.content).to eq '<a href="/">Hello World</a>'
72
72
  end
73
73
 
74
74
  end
@@ -1,4 +1,4 @@
1
- require 'spec_helper'
1
+ require 'rails_helper'
2
2
 
3
3
  describe ActiveAdmin::Views::StatusTag do
4
4
 
@@ -6,90 +6,230 @@ describe ActiveAdmin::Views::StatusTag do
6
6
 
7
7
  # Helper method to build StatusTag objects in an Arbre context
8
8
  def status_tag(*args)
9
- render_arbre_component(:status_tag_args => args) do
9
+ render_arbre_component(status_tag_args: args) do
10
10
  status_tag(*assigns[:status_tag_args])
11
11
  end
12
12
  end
13
13
 
14
14
  subject { status_tag(nil) }
15
15
 
16
+ describe '#tag_name' do
17
+ subject { super().tag_name }
18
+ it { is_expected.to eq 'span' }
19
+ end
16
20
 
17
- its(:tag_name) { should == 'span' }
18
- its(:class_list) { should include('status_tag') }
21
+ describe '#class_list' do
22
+ subject { super().class_list }
23
+ it { is_expected.to include('status_tag') }
24
+ end
19
25
 
20
26
  context "when status is 'completed'" do
21
27
  subject { status_tag('completed') }
22
28
 
23
- its(:tag_name) { should == 'span' }
24
- its(:class_list) { should include('status_tag') }
25
- its(:class_list) { should include('completed') }
26
- its(:content) { should == 'Completed' }
29
+ describe '#tag_name' do
30
+ subject { super().tag_name }
31
+ it { is_expected.to eq 'span' }
32
+ end
33
+
34
+ describe '#class_list' do
35
+ subject { super().class_list }
36
+ it { is_expected.to include('status_tag') }
37
+ end
38
+
39
+ describe '#class_list' do
40
+ subject { super().class_list }
41
+ it { is_expected.to include('completed') }
42
+ end
43
+
44
+ describe '#content' do
45
+ subject { super().content }
46
+ it { is_expected.to eq 'Completed' }
47
+ end
27
48
  end
28
49
 
29
50
  context "when status is 'in_progress'" do
30
51
  subject { status_tag('in_progress') }
31
52
 
32
- its(:class_list) { should include('in_progress') }
33
- its(:content) { should == 'In Progress' }
53
+ describe '#class_list' do
54
+ subject { super().class_list }
55
+ it { is_expected.to include('in_progress') }
56
+ end
57
+
58
+ describe '#content' do
59
+ subject { super().content }
60
+ it { is_expected.to eq 'In Progress' }
61
+ end
34
62
  end
35
63
 
36
64
  context "when status is 'In progress'" do
37
65
  subject { status_tag('In progress') }
38
66
 
39
- its(:class_list) { should include('in_progress') }
40
- its(:content) { should == 'In Progress' }
67
+ describe '#class_list' do
68
+ subject { super().class_list }
69
+ it { is_expected.to include('in_progress') }
70
+ end
71
+
72
+ describe '#content' do
73
+ subject { super().content }
74
+ it { is_expected.to eq 'In Progress' }
75
+ end
41
76
  end
42
77
 
43
78
  context "when status is an empty string" do
44
79
  subject { status_tag('') }
45
80
 
46
- its(:class_list) { should include('status_tag') }
47
- its(:content) { should == '' }
81
+ describe '#class_list' do
82
+ subject { super().class_list }
83
+ it { is_expected.to include('status_tag') }
84
+ end
85
+
86
+ describe '#content' do
87
+ subject { super().content }
88
+ it { is_expected.to eq '' }
89
+ end
90
+ end
91
+
92
+ context "when status is false" do
93
+ subject { status_tag('false') }
94
+
95
+ describe '#class_list' do
96
+ subject { super().class_list }
97
+ it { is_expected.to include('status_tag') }
98
+ end
99
+
100
+ describe '#content' do
101
+ subject { super().content }
102
+ it { is_expected.to eq('No') }
103
+ end
48
104
  end
49
105
 
50
106
  context "when status is nil" do
51
107
  subject { status_tag(nil) }
52
108
 
53
- its(:class_list) { should include('status_tag') }
54
- its(:content) { should == '' }
109
+ describe '#class_list' do
110
+ subject { super().class_list }
111
+ it { is_expected.to include('status_tag') }
112
+ end
113
+
114
+ describe '#content' do
115
+ subject { super().content }
116
+ it { is_expected.to eq('No') }
117
+ end
55
118
  end
56
119
 
57
120
  context "when status is 'Active' and type is :ok" do
58
121
  subject { status_tag('Active', :ok) }
59
122
 
60
- its(:class_list) { should include('status_tag') }
61
- its(:class_list) { should include('active') }
62
- its(:class_list) { should include('ok') }
123
+ describe '#class_list' do
124
+ subject { super().class_list }
125
+ it { is_expected.to include('status_tag') }
126
+ end
127
+
128
+ describe '#class_list' do
129
+ subject { super().class_list }
130
+ it { is_expected.to include('active') }
131
+ end
132
+
133
+ describe '#class_list' do
134
+ subject { super().class_list }
135
+ it { is_expected.to include('ok') }
136
+ end
63
137
  end
64
138
 
65
139
  context "when status is 'Active' and class is 'ok'" do
66
- subject { status_tag('Active', :class => 'ok') }
140
+ subject { status_tag('Active', class: 'ok') }
67
141
 
68
- its(:class_list) { should include('status_tag') }
69
- its(:class_list) { should include('active') }
70
- its(:class_list) { should include('ok') }
142
+ describe '#class_list' do
143
+ subject { super().class_list }
144
+ it { is_expected.to include('status_tag') }
145
+ end
146
+
147
+ describe '#class_list' do
148
+ subject { super().class_list }
149
+ it { is_expected.to include('active') }
150
+ end
151
+
152
+ describe '#class_list' do
153
+ subject { super().class_list }
154
+ it { is_expected.to include('ok') }
155
+ end
71
156
  end
72
157
 
73
158
  context "when status is 'Active' and label is 'on'" do
74
- subject { status_tag('Active', :label => 'on') }
159
+ subject { status_tag('Active', label: 'on') }
160
+
161
+ describe '#content' do
162
+ subject { super().content }
163
+ it { is_expected.to eq 'on' }
164
+ end
165
+
166
+ describe '#class_list' do
167
+ subject { super().class_list }
168
+ it { is_expected.to include('status_tag') }
169
+ end
170
+
171
+ describe '#class_list' do
172
+ subject { super().class_list }
173
+ it { is_expected.to include('active') }
174
+ end
75
175
 
76
- its(:content) { should == 'on' }
77
- its(:class_list) { should include('status_tag') }
78
- its(:class_list) { should include('active') }
79
- its(:class_list) { should_not include('on') }
176
+ describe '#class_list' do
177
+ subject { super().class_list }
178
+ it { is_expected.not_to include('on') }
179
+ end
80
180
  end
81
181
 
82
182
  context "when status is 'So useless', type is :ok, class is 'woot awesome' and id is 'useless'" do
83
- subject { status_tag('So useless', :ok, :class => 'woot awesome', :id => 'useless') }
84
-
85
- its(:content) { should == 'So Useless' }
86
- its(:class_list) { should include('status_tag') }
87
- its(:class_list) { should include('ok') }
88
- its(:class_list) { should include('so_useless') }
89
- its(:class_list) { should include('woot') }
90
- its(:class_list) { should include('awesome') }
91
- its(:id) { should == 'useless' }
183
+ subject { status_tag('So useless', :ok, class: 'woot awesome', id: 'useless') }
184
+
185
+ describe '#content' do
186
+ subject { super().content }
187
+ it { is_expected.to eq 'So Useless' }
188
+ end
189
+
190
+ describe '#class_list' do
191
+ subject { super().class_list }
192
+ it { is_expected.to include('status_tag') }
193
+ end
194
+
195
+ describe '#class_list' do
196
+ subject { super().class_list }
197
+ it { is_expected.to include('ok') }
198
+ end
199
+
200
+ describe '#class_list' do
201
+ subject { super().class_list }
202
+ it { is_expected.to include('so_useless') }
203
+ end
204
+
205
+ describe '#class_list' do
206
+ subject { super().class_list }
207
+ it { is_expected.to include('woot') }
208
+ end
209
+
210
+ describe '#class_list' do
211
+ subject { super().class_list }
212
+ it { is_expected.to include('awesome') }
213
+ end
214
+
215
+ describe '#id' do
216
+ subject { super().id }
217
+ it { is_expected.to eq 'useless' }
218
+ end
92
219
  end
93
220
 
94
- end # describe "#status_tag"
221
+ context "when status is set to a Fixnum" do
222
+ subject { status_tag(42) }
223
+
224
+ describe '#content' do
225
+ subject { super().content }
226
+ it { is_expected.to eq '42' }
227
+ end
228
+
229
+ describe '#class_list' do
230
+ subject { super().class_list }
231
+ it { is_expected.not_to include('42') }
232
+ end
233
+ end
234
+ end
95
235
  end
@@ -1,15 +1,101 @@
1
- require 'spec_helper'
1
+ require 'rails_helper'
2
2
 
3
3
  describe ActiveAdmin::Views::TableFor do
4
4
  describe "creating with the dsl" do
5
5
 
6
6
  let(:collection) do
7
- [Post.new(:title => "First Post"), Post.new(:title => "Second Post"), Post.new(:title => "Third Post")]
7
+ [Post.new(title: "First Post", starred: true), Post.new(title: "Second Post"), Post.new(title: "Third Post", starred: false)]
8
8
  end
9
9
 
10
- let(:assigns){ { :collection => collection } }
10
+ let(:assigns){ { collection: collection } }
11
11
  let(:helpers){ mock_action_view }
12
12
 
13
+ context "when creating a column using symbol argument" do
14
+ let(:table) do
15
+ render_arbre_component assigns, helpers do
16
+ table_for(collection, :title)
17
+ end
18
+ end
19
+
20
+ it "should create a table header based on the symbol" do
21
+ expect(table.find_by_tag("th").first.content).to eq "Title"
22
+ end
23
+
24
+ it "should create a table row for each element in the collection" do
25
+ expect(table.find_by_tag("tr").size).to eq 4 # 1 for head, 3 for rows
26
+ end
27
+
28
+ ["First Post", "Second Post", "Third Post"].each_with_index do |content, index|
29
+ it "should create a cell with #{content}" do
30
+ expect(table.find_by_tag("td")[index].content).to eq content
31
+ end
32
+ end
33
+ end
34
+
35
+ context "when creating many columns using symbol arguments" do
36
+ let(:table) do
37
+ render_arbre_component assigns, helpers do
38
+ table_for(collection, :title, :created_at)
39
+ end
40
+ end
41
+
42
+ it "should create a table header based on the symbol" do
43
+ expect(table.find_by_tag("th").first.content).to eq "Title"
44
+ expect(table.find_by_tag("th").last.content).to eq "Created At"
45
+ end
46
+
47
+ it "should add a class to each table header based on the col name" do
48
+ expect(table.find_by_tag("th").first.class_list.to_a.join(' ')).to eq "col col-title"
49
+ expect(table.find_by_tag("th").last.class_list.to_a.join(' ')).to eq "col col-created_at"
50
+ end
51
+
52
+ it "should create a table row for each element in the collection" do
53
+ expect(table.find_by_tag("tr").size).to eq 4 # 1 for head, 3 for rows
54
+ end
55
+
56
+ it "should create a cell for each column" do
57
+ expect(table.find_by_tag("td").size).to eq 6
58
+ end
59
+
60
+ it "should add a class for each cell based on the col name" do
61
+ expect(table.find_by_tag("td").first.class_list.to_a.join(' ')).to eq "col col-title"
62
+ expect(table.find_by_tag("td").last.class_list.to_a.join(' ')).to eq "col col-created_at"
63
+ end
64
+ end
65
+
66
+ context "when creating a column using symbol arguments and another using block" do
67
+ let(:table) do
68
+ render_arbre_component assigns, helpers do
69
+ table_for(collection, :title) do
70
+ column :created_at
71
+ end
72
+ end
73
+ end
74
+
75
+ it "should create a table header based on the symbol" do
76
+ expect(table.find_by_tag("th").first.content).to eq "Title"
77
+ expect(table.find_by_tag("th").last.content).to eq "Created At"
78
+ end
79
+
80
+ it "should add a class to each table header based on the col name" do
81
+ expect(table.find_by_tag("th").first.class_list.to_a.join(' ')).to eq "col col-title"
82
+ expect(table.find_by_tag("th").last.class_list.to_a.join(' ')).to eq "col col-created_at"
83
+ end
84
+
85
+ it "should create a table row for each element in the collection" do
86
+ expect(table.find_by_tag("tr").size).to eq 4 # 1 for head, 3 for rows
87
+ end
88
+
89
+ it "should create a cell for each column" do
90
+ expect(table.find_by_tag("td").size).to eq 6
91
+ end
92
+
93
+ it "should add a class for each cell based on the col name" do
94
+ expect(table.find_by_tag("td").first.class_list.to_a.join(' ')).to eq "col col-title"
95
+ expect(table.find_by_tag("td").last.class_list.to_a.join(' ')).to eq "col col-created_at"
96
+ end
97
+ end
98
+
13
99
  context "when creating a column with a symbol" do
14
100
  let(:table) do
15
101
  render_arbre_component assigns, helpers do
@@ -20,16 +106,16 @@ describe ActiveAdmin::Views::TableFor do
20
106
  end
21
107
 
22
108
  it "should create a table header based on the symbol" do
23
- table.find_by_tag("th").first.content.should == "Title"
109
+ expect(table.find_by_tag("th").first.content).to eq "Title"
24
110
  end
25
111
 
26
112
  it "should create a table row for each element in the collection" do
27
- table.find_by_tag("tr").size.should == 4 # 1 for head, 3 for rows
113
+ expect(table.find_by_tag("tr").size).to eq 4 # 1 for head, 3 for rows
28
114
  end
29
115
 
30
116
  ["First Post", "Second Post", "Third Post"].each_with_index do |content, index|
31
117
  it "should create a cell with #{content}" do
32
- table.find_by_tag("td")[index].content.should == content
118
+ expect(table.find_by_tag("td")[index].content).to eq content
33
119
  end
34
120
  end
35
121
  end
@@ -45,30 +131,26 @@ describe ActiveAdmin::Views::TableFor do
45
131
  end
46
132
 
47
133
  it "should create a table header based on the symbol" do
48
- table.find_by_tag("th").first.content.should == "Title"
49
- table.find_by_tag("th").last.content.should == "Created At"
134
+ expect(table.find_by_tag("th").first.content).to eq "Title"
135
+ expect(table.find_by_tag("th").last.content).to eq "Created At"
50
136
  end
51
137
 
52
138
  it "should add a class to each table header based on the col name" do
53
- table.find_by_tag("th").first
54
- .class_list.to_a.join(' ').should == "col col-title"
55
- table.find_by_tag("th").last
56
- .class_list.to_a.join(' ').should == "col col-created_at"
139
+ expect(table.find_by_tag("th").first.class_list.to_a.join(' ')).to eq "col col-title"
140
+ expect(table.find_by_tag("th").last.class_list.to_a.join(' ')).to eq "col col-created_at"
57
141
  end
58
142
 
59
143
  it "should create a table row for each element in the collection" do
60
- table.find_by_tag("tr").size.should == 4 # 1 for head, 3 for rows
144
+ expect(table.find_by_tag("tr").size).to eq 4 # 1 for head, 3 for rows
61
145
  end
62
146
 
63
147
  it "should create a cell for each column" do
64
- table.find_by_tag("td").size.should == 6
148
+ expect(table.find_by_tag("td").size).to eq 6
65
149
  end
66
150
 
67
151
  it "should add a class for each cell based on the col name" do
68
- table.find_by_tag("td").first
69
- .class_list.to_a.join(' ').should == "col col-title"
70
- table.find_by_tag("td").last
71
- .class_list.to_a.join(' ').should == "col col-created_at"
152
+ expect(table.find_by_tag("td").first.class_list.to_a.join(' ')).to eq "col col-title"
153
+ expect(table.find_by_tag("td").last.class_list.to_a.join(' ')).to eq "col col-created_at"
72
154
  end
73
155
  end
74
156
 
@@ -84,14 +166,14 @@ describe ActiveAdmin::Views::TableFor do
84
166
  end
85
167
 
86
168
  it "should add a class to each table header based on the col name" do
87
- table.find_by_tag("th").first.class_list.should include("col-title")
169
+ expect(table.find_by_tag("th").first.class_list).to include("col-title")
88
170
  end
89
171
 
90
172
  [ "<span>First Post</span>",
91
173
  "<span>Second Post</span>",
92
174
  "<span>Third Post</span>" ].each_with_index do |content, index|
93
175
  it "should create a cell with #{content}" do
94
- table.find_by_tag("td")[index].content.strip.should == content
176
+ expect(table.find_by_tag("td")[index].content.strip).to eq content
95
177
  end
96
178
  end
97
179
  end
@@ -110,7 +192,7 @@ describe ActiveAdmin::Views::TableFor do
110
192
 
111
193
  3.times do |index|
112
194
  it "should create a cell with multiple elements in row #{index}" do
113
- table.find_by_tag("td")[index].find_by_tag("span").size.should == 2
195
+ expect(table.find_by_tag("td")[index].find_by_tag("span").size).to eq 2
114
196
  end
115
197
  end
116
198
  end
@@ -121,24 +203,20 @@ describe ActiveAdmin::Views::TableFor do
121
203
  render_arbre_component assigns, helpers do
122
204
  table_for(collection) do
123
205
  column "My Custom Title", :title
124
- column :created_at , :class=>"datetime"
206
+ column :created_at , class:"datetime"
125
207
  end
126
208
  end
127
209
  end
128
210
 
129
211
 
130
212
  it "should add a class to each table header based on class option or the col name" do
131
- table.find_by_tag("th").first
132
- .class_list.to_a.join(' ').should == "col col-my_custom_title"
133
- table.find_by_tag("th").last
134
- .class_list.to_a.join(' ').should == "col datetime"
213
+ expect(table.find_by_tag("th").first.class_list.to_a.join(' ')).to eq "col col-my_custom_title"
214
+ expect(table.find_by_tag("th").last.class_list.to_a.join(' ')).to eq "col datetime"
135
215
  end
136
216
 
137
217
  it "should add a class to each cell based on class option or the col name" do
138
- table.find_by_tag("td").first
139
- .class_list.to_a.join(' ').should == "col col-my_custom_title"
140
- table.find_by_tag("td").last
141
- .class_list.to_a.join(' ').should == "col datetime"
218
+ expect(table.find_by_tag("td").first.class_list.to_a.join(' ')).to eq "col col-my_custom_title"
219
+ expect(table.find_by_tag("td").last.class_list.to_a.join(' ')).to eq "col datetime"
142
220
  end
143
221
  end
144
222
 
@@ -151,10 +229,77 @@ describe ActiveAdmin::Views::TableFor do
151
229
  end
152
230
  end
153
231
  it "should render" do
154
- table.find_by_tag("th").first.content.should == "Title"
232
+ expect(table.find_by_tag("th").first.content).to eq "Title"
233
+ end
234
+ end
235
+
236
+ context "when using a single Hash" do
237
+ let(:table) do
238
+ render_arbre_component nil, helpers do
239
+ table_for foo: 1, bar: 2 do
240
+ column :foo
241
+ column :bar
242
+ end
243
+ end
244
+ end
245
+ it "should render" do
246
+ expect(table.find_by_tag("th")[0].content).to eq "Foo"
247
+ expect(table.find_by_tag("th")[1].content).to eq "Bar"
248
+ expect(table.find_by_tag("td")[0].content).to eq "1"
249
+ expect(table.find_by_tag("td")[1].content).to eq "2"
250
+ end
251
+ end
252
+
253
+ context "when using an Array of Hashes" do
254
+ let(:table) do
255
+ render_arbre_component nil, helpers do
256
+ table_for [{foo: 1},{foo: 2}] do
257
+ column :foo
258
+ end
259
+ end
260
+ end
261
+ it "should render" do
262
+ expect(table.find_by_tag("th")[0].content).to eq "Foo"
263
+ expect(table.find_by_tag("td")[0].content).to eq "1"
264
+ expect(table.find_by_tag("td")[1].content).to eq "2"
265
+ end
266
+ end
267
+
268
+ context "when record attribute is boolean" do
269
+ let(:table) do
270
+ render_arbre_component assigns, helpers do
271
+ table_for(collection) do
272
+ column :starred
273
+ end
274
+ end
275
+ end
276
+
277
+ it "should render boolean attribute within status tag" do
278
+ expect(table.find_by_tag("span").first.class_list.to_a.join(' ')).to eq "status_tag yes"
279
+ expect(table.find_by_tag("span").first.content).to eq "Yes"
280
+ expect(table.find_by_tag("span").last.class_list.to_a.join(' ')).to eq "status_tag no"
281
+ expect(table.find_by_tag("span").last.content).to eq "No"
155
282
  end
156
283
  end
157
284
 
285
+ context 'when row_class' do
286
+ let(:table) do
287
+ render_arbre_component assigns, helpers do
288
+ table_for(collection, row_class: -> e { 'starred' if e.starred }) do
289
+ column :starred
290
+ end
291
+ end
292
+ end
293
+
294
+ it 'should render boolean attribute within status tag' do
295
+ trs = table.find_by_tag('tr')
296
+ expect(trs.size).to eq 4
297
+ expect(trs.first.class_list.to_a.join(' ')).to eq ''
298
+ expect(trs.second.class_list.to_a.join(' ')).to eq 'odd starred'
299
+ expect(trs.third.class_list.to_a.join(' ')).to eq 'even'
300
+ expect(trs.fourth.class_list.to_a.join(' ')).to eq 'odd'
301
+ end
302
+ end
158
303
 
159
304
  end
160
305
 
@@ -168,34 +313,72 @@ describe ActiveAdmin::Views::TableFor do
168
313
 
169
314
  context "when default" do
170
315
  let(:table_column){ build_column(:username) }
171
- it { should be_sortable }
172
- its(:sort_key){ should == "username" }
316
+ it { is_expected.to be_sortable }
317
+
318
+ describe '#sort_key' do
319
+ subject { super().sort_key }
320
+ it{ is_expected.to eq("username") }
321
+ end
173
322
  end
174
323
 
175
324
  context "when a block given with no sort key" do
176
325
  let(:table_column){ build_column("Username"){ } }
177
- it { should_not be_sortable }
326
+ it { is_expected.to be_sortable }
178
327
  end
179
328
 
180
329
  context "when a block given with a sort key" do
181
- let(:table_column){ build_column("Username", :sortable => :username){ } }
182
- it { should be_sortable }
183
- its(:sort_key){ should == "username" }
330
+ let(:table_column){ build_column("Username", sortable: :username){ } }
331
+ it { is_expected.to be_sortable }
332
+
333
+ describe '#sort_key' do
334
+ subject { super().sort_key }
335
+ it{ is_expected.to eq("username") }
336
+ end
337
+ end
338
+
339
+ context 'when a block given with virtual attribute and no sort key' do
340
+ let(:table_column) { build_column(:virtual, nil, Post) { } }
341
+ it { is_expected.not_to be_sortable }
342
+ end
343
+
344
+ context 'when symbol given as a data column should be sortable' do
345
+ let(:table_column){ build_column('Username column', :username) }
346
+ it { is_expected.to be_sortable }
347
+
348
+ describe '#sort_key' do
349
+ subject { super().sort_key }
350
+ it { is_expected.to eq 'username' }
351
+ end
184
352
  end
185
353
 
186
- context "when :sortable => false with a symbol" do
187
- let(:table_column){ build_column(:username, :sortable => false) }
188
- it { should_not be_sortable }
354
+ context 'when sortable: true with a symbol and string' do
355
+ let(:table_column){ build_column('Username column', :username, sortable: true) }
356
+ it { is_expected.to be_sortable }
357
+
358
+ describe '#sort_key' do
359
+ subject { super().sort_key }
360
+ it { is_expected.to eq 'username' }
361
+ end
189
362
  end
190
363
 
191
- context "when :sortable => false with a symbol and string" do
192
- let(:table_column){ build_column("Username", :username, :sortable => false) }
193
- it { should_not be_sortable }
364
+ context "when sortable: false with a symbol" do
365
+ let(:table_column){ build_column(:username, sortable: false) }
366
+ it { is_expected.not_to be_sortable }
367
+ end
368
+
369
+ context "when sortable: false with a symbol and string" do
370
+ let(:table_column){ build_column("Username", :username, sortable: false) }
371
+ it { is_expected.not_to be_sortable }
194
372
  end
195
373
 
196
374
  context "when :sortable column is an association" do
197
375
  let(:table_column){ build_column("Category", :category, Post) }
198
- it { should_not be_sortable }
376
+ it { is_expected.not_to be_sortable }
377
+ end
378
+
379
+ context 'when :sortable column is an association and block given' do
380
+ let(:table_column){ build_column('Category', :category, Post) { } }
381
+ it { is_expected.not_to be_sortable }
199
382
  end
200
383
  end
201
384
  end