activeadmin 0.6.6 → 1.0.0.pre1

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

Potentially problematic release.


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

Files changed (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,71 +1,132 @@
1
- require 'spec_helper'
1
+ require 'rails_helper'
2
2
 
3
3
  describe "Comments" do
4
- let(:application){ ActiveAdmin::Application.new }
4
+ let(:application) { ActiveAdmin::Application.new }
5
5
 
6
6
  describe ActiveAdmin::Comment do
7
- subject { ActiveAdmin::Comment.new }
8
-
9
- describe "Associations and Validations" do
10
- it { should belong_to :resource }
11
- it { should belong_to :author }
12
- it { should validate_presence_of :resource }
13
- it { should validate_presence_of :body }
14
- it { should validate_presence_of :namespace }
7
+ subject(:comment){ ActiveAdmin::Comment.new }
8
+
9
+ it "has valid Associations and Validations" do
10
+ expect(comment).to belong_to :resource
11
+ expect(comment).to belong_to :author
12
+ expect(comment).to validate_presence_of :resource
13
+ expect(comment).to validate_presence_of :body
14
+ expect(comment).to validate_presence_of :namespace
15
15
  end
16
16
 
17
17
  describe ".find_for_resource_in_namespace" do
18
- let(:post){ Post.create!(:title => "Hello World") }
19
- let(:namespace_name){ "admin" }
18
+ let(:post) { Post.create!(title: "Hello World") }
19
+ let(:namespace_name) { "admin" }
20
20
 
21
21
  before do
22
- @comment = ActiveAdmin::Comment.create! :resource => post,
23
- :body => "A Comment",
24
- :namespace => namespace_name
22
+ @comment = ActiveAdmin::Comment.create! resource: post,
23
+ body: "A Comment",
24
+ namespace: namespace_name
25
25
  end
26
26
 
27
27
  it "should return a comment for the resource in the same namespace" do
28
- ActiveAdmin::Comment.find_for_resource_in_namespace(post, namespace_name).should == [@comment]
28
+ expect(ActiveAdmin::Comment.find_for_resource_in_namespace(post, namespace_name)).to eq [@comment]
29
29
  end
30
30
 
31
31
  it "should not return a comment for the same resource in a different namespace" do
32
- ActiveAdmin::Comment.find_for_resource_in_namespace(post, 'public').should == []
32
+ expect(ActiveAdmin::Comment.find_for_resource_in_namespace(post, 'public')).to eq []
33
33
  end
34
34
 
35
35
  it "should not return a comment for a different resource" do
36
- another_post = Post.create! :title => "Another Hello World"
37
- ActiveAdmin::Comment.find_for_resource_in_namespace(another_post, namespace_name).should == []
36
+ another_post = Post.create! title: "Another Hello World"
37
+ expect(ActiveAdmin::Comment.find_for_resource_in_namespace(another_post, namespace_name)).to eq []
38
+ end
39
+
40
+ it "should return the most recent comment first" do
41
+ ActiveAdmin::Comment.class_eval { attr_accessible :created_at } if Rails::VERSION::MAJOR == 3
42
+ another_comment = ActiveAdmin::Comment.create! resource: post,
43
+ body: "Another Comment",
44
+ namespace: namespace_name,
45
+ created_at: @comment.created_at + 20.minutes
46
+
47
+ yet_another_comment = ActiveAdmin::Comment.create! resource: post,
48
+ body: "Yet Another Comment",
49
+ namespace: namespace_name,
50
+ created_at: @comment.created_at + 10.minutes
51
+
52
+ comments = ActiveAdmin::Comment.find_for_resource_in_namespace(post, namespace_name)
53
+ expect(comments.size).to eq 3
54
+ expect(comments.first).to eq(@comment)
55
+ expect(comments.second).to eq(yet_another_comment)
56
+ expect(comments.last).to eq(another_comment)
38
57
  end
39
58
  end
40
59
 
41
60
  describe ".resource_id_cast" do
42
- let(:post) { Post.create!(:title => "Testing.") }
61
+ let(:post) { Post.create!(title: "Testing.") }
43
62
  let(:namespace_name) { "admin" }
44
63
 
45
64
  it "should cast resource_id as string" do
46
- comment = ActiveAdmin::Comment.create! :resource => post,
47
- :body => "Another Comment",
48
- :namespace => namespace_name
49
- ActiveAdmin::Comment.resource_id_cast(comment).class.should eql String
65
+ comment = ActiveAdmin::Comment.create! resource: post,
66
+ body: "Another Comment",
67
+ namespace: namespace_name
68
+ expect(ActiveAdmin::Comment.resource_id_cast(comment).class).to eql String
69
+ end
70
+ end
71
+
72
+ describe ".resource_type" do
73
+ let(:post) { Post.create!(title: "Testing.") }
74
+ let(:post_decorator) { double 'PostDecorator' }
75
+
76
+ before do
77
+ allow(post_decorator).to receive(:model).and_return(post)
78
+ allow(post_decorator).to receive(:decorated?).and_return(true)
79
+ end
80
+
81
+ context "when a decorated object is passed" do
82
+ let(:resource) { post_decorator }
83
+
84
+ it "returns undeorated object class string" do
85
+ expect(ActiveAdmin::Comment.resource_type resource).to eql 'Post'
86
+ end
87
+ end
88
+
89
+ context "when an undecorated object is passed" do
90
+ let(:resource) { post }
91
+
92
+ it "returns object class string" do
93
+ expect(ActiveAdmin::Comment.resource_type resource).to eql 'Post'
94
+ end
50
95
  end
51
96
  end
52
97
 
53
98
  describe ".resource_id_type" do
54
99
  it "should be :string" do
55
- ActiveAdmin::Comment.resource_id_type.should eql :string
100
+ expect(ActiveAdmin::Comment.resource_id_type).to eql :string
56
101
  end
57
102
  end
58
103
 
59
104
  describe "Commenting on resource with string id" do
60
- let(:tag){ Tag.create!(:name => "cooltags") }
61
- let(:namespace_name){ "admin" }
105
+ let(:tag) { Tag.create!(name: "cooltags") }
106
+ let(:namespace_name) { "admin" }
62
107
 
63
108
  it "should allow commenting" do
64
- comment = ActiveAdmin::Comment.create! :resource => tag,
65
- :body => "Another Comment",
66
- :namespace => namespace_name
109
+ comment = ActiveAdmin::Comment.create!(
110
+ resource: tag,
111
+ body: "Another Comment",
112
+ namespace: namespace_name)
67
113
 
68
- ActiveAdmin::Comment.find_for_resource_in_namespace(tag, namespace_name).should == [comment]
114
+ expect(ActiveAdmin::Comment.find_for_resource_in_namespace(tag, namespace_name)).to eq [comment]
115
+ end
116
+ end
117
+
118
+ describe "commenting on child of STI resource" do
119
+ let(:publisher) { Publisher.create!(username: "tenderlove") }
120
+ let(:namespace_name) { "admin" }
121
+
122
+ it "should assign child class as commented resource" do
123
+ comment = ActiveAdmin::Comment.create!(
124
+ resource: publisher,
125
+ body: "Lorem Ipsum",
126
+ namespace: namespace_name)
127
+
128
+ expect(ActiveAdmin::Comment.find_for_resource_in_namespace(publisher, namespace_name).last.resource_type).
129
+ to eq("User")
69
130
  end
70
131
  end
71
132
  end
@@ -75,16 +136,15 @@ describe "Comments" do
75
136
 
76
137
  it "should have comments when the namespace allows comments" do
77
138
  ns = ActiveAdmin::Namespace.new(application, :admin)
78
- ns.allow_comments = true
79
- ns.comments?.should be_true
139
+ ns.comments = true
140
+ expect(ns.comments?).to be_truthy
80
141
  end
81
142
 
82
143
  it "should not have comments when the namespace does not allow comments" do
83
144
  ns = ActiveAdmin::Namespace.new(application, :admin)
84
- ns.allow_comments = false
85
- ns.comments?.should be_false
145
+ ns.comments = false
146
+ expect(ns.comments?).to be_falsey
86
147
  end
87
-
88
148
  end
89
149
  end
90
150
 
@@ -92,15 +152,15 @@ describe "Comments" do
92
152
  it "should add an attr_accessor :comments to ActiveAdmin::Resource" do
93
153
  ns = ActiveAdmin::Namespace.new(application, :admin)
94
154
  resource = ActiveAdmin::Resource.new(ns, Post)
95
- resource.comments.should be_nil
155
+ expect(resource.comments).to be_nil
96
156
  resource.comments = true
97
- resource.comments.should be_true
157
+ expect(resource.comments).to be_truthy
98
158
  end
99
159
  it "should disable comments if set to false" do
100
160
  ns = ActiveAdmin::Namespace.new(application, :admin)
101
161
  resource = ActiveAdmin::Resource.new(ns, Post)
102
162
  resource.comments = false
103
- resource.comments?.should be_false
163
+ expect(resource.comments?).to be_falsey
104
164
  end
105
165
  end
106
166
  end
@@ -1,4 +1,4 @@
1
- require 'spec_helper'
1
+ require 'rails_helper'
2
2
 
3
3
  class MockComponentClass < ActiveAdmin::Component; end
4
4
 
@@ -8,11 +8,11 @@ describe ActiveAdmin::Component do
8
8
  let(:component){ component_class.new }
9
9
 
10
10
  it "should be a subclass of an html div" do
11
- ActiveAdmin::Component.ancestors.should include(Arbre::HTML::Div)
11
+ expect(ActiveAdmin::Component.ancestors).to include(Arbre::HTML::Div)
12
12
  end
13
13
 
14
14
  it "should render to a div, even as a subclass" do
15
- component.tag_name.should == 'div'
15
+ expect(component.tag_name).to eq 'div'
16
16
  end
17
17
 
18
18
  end
@@ -1,13 +1,13 @@
1
- shared_examples_for "ActiveAdmin::Config" do
1
+ shared_examples_for "ActiveAdmin::Resource" do
2
2
  describe "namespace" do
3
3
  it "should return the namespace" do
4
- config.namespace.should == namespace
4
+ expect(config.namespace).to eq(namespace)
5
5
  end
6
6
  end
7
7
 
8
8
  describe "page_presenters" do
9
9
  it "should return an empty hash by default" do
10
- config.page_presenters.should == {}
10
+ expect(config.page_presenters).to eq({})
11
11
  end
12
12
  end
13
13
 
@@ -22,11 +22,11 @@ shared_examples_for "ActiveAdmin::Config" do
22
22
 
23
23
  describe "Naming" do
24
24
  it "implements #resource_label" do
25
- expect { config.resource_label }.should_not raise_error
25
+ expect { config.resource_label }.to_not raise_error
26
26
  end
27
27
 
28
28
  it "implements #plural_resource_label" do
29
- expect { config.plural_resource_label }.should_not raise_error
29
+ expect { config.plural_resource_label }.to_not raise_error
30
30
  end
31
31
  end
32
32
 
@@ -34,24 +34,24 @@ shared_examples_for "ActiveAdmin::Config" do
34
34
  describe "#menu_item_options" do
35
35
 
36
36
  it "initializes a new menu item with defaults" do
37
- config.menu_item_options[:label].call.should == config.plural_resource_label
37
+ expect(config.menu_item_options[:label].call).to eq(config.plural_resource_label)
38
38
  end
39
39
 
40
40
  it "initialize a new menu item with custom options" do
41
- config.menu_item_options = { :label => "Hello" }
42
- config.menu_item_options[:label].should == "Hello"
41
+ config.menu_item_options = { label: "Hello" }
42
+ expect(config.menu_item_options[:label]).to eq("Hello")
43
43
  end
44
44
 
45
45
  end
46
46
 
47
47
  describe "#include_in_menu?" do
48
48
  it "should be included in menu by default" do
49
- config.include_in_menu?.should == true
49
+ expect(config.include_in_menu?).to eq(true)
50
50
  end
51
51
 
52
52
  it "should not be included in menu when menu set to false" do
53
53
  config.menu_item_options = false
54
- config.include_in_menu?.should == false
54
+ expect(config.include_in_menu?).to eq(false)
55
55
  end
56
56
  end
57
57
 
@@ -1,37 +1,44 @@
1
- require 'spec_helper'
1
+ require 'rails_helper'
2
2
 
3
3
  describe ActiveAdmin::Application do
4
4
  let(:application){ ActiveAdmin::Application.new }
5
- let(:controllers){ [ActiveAdmin::BaseController, ActiveAdmin::Devise::SessionsController,
6
- ActiveAdmin::Devise::UnlocksController, ActiveAdmin::Devise::PasswordsController] }
5
+ let(:controllers){ application.controllers_for_filters }
6
+
7
+ it 'controllers_for_filters' do
8
+ expect(application.controllers_for_filters).to eq [
9
+ ActiveAdmin::BaseController, ActiveAdmin::Devise::SessionsController,
10
+ ActiveAdmin::Devise::PasswordsController, ActiveAdmin::Devise::UnlocksController,
11
+ ActiveAdmin::Devise::RegistrationsController, ActiveAdmin::Devise::ConfirmationsController
12
+ ]
13
+ end
7
14
 
8
15
  it 'before_filter' do
9
- controllers.each{ |c| c.should_receive(:before_filter).and_return(true) }
10
- application.before_filter :my_filter, :only => :show
16
+ controllers.each{ |c| expect(c).to receive(:before_filter).and_return(true) }
17
+ application.before_filter :my_filter, only: :show
11
18
  end
12
19
 
13
20
  it 'skip_before_filter' do
14
- controllers.each{ |c| c.should_receive(:skip_before_filter).and_return(true) }
15
- application.skip_before_filter :my_filter, :only => :show
21
+ controllers.each{ |c| expect(c).to receive(:skip_before_filter).and_return(true) }
22
+ application.skip_before_filter :my_filter, only: :show
16
23
  end
17
24
 
18
25
  it 'after_filter' do
19
- controllers.each{ |c| c.should_receive(:after_filter).and_return(true) }
20
- application.after_filter :my_filter, :only => :show
26
+ controllers.each{ |c| expect(c).to receive(:after_filter).and_return(true) }
27
+ application.after_filter :my_filter, only: :show
21
28
  end
22
29
 
23
30
  it 'skip after_filter' do
24
- controllers.each{ |c| c.should_receive(:skip_after_filter).and_return(true) }
25
- application.skip_after_filter :my_filter, :only => :show
31
+ controllers.each{ |c| expect(c).to receive(:skip_after_filter).and_return(true) }
32
+ application.skip_after_filter :my_filter, only: :show
26
33
  end
27
34
 
28
35
  it 'around_filter' do
29
- controllers.each{ |c| c.should_receive(:around_filter).and_return(true) }
30
- application.around_filter :my_filter, :only => :show
36
+ controllers.each{ |c| expect(c).to receive(:around_filter).and_return(true) }
37
+ application.around_filter :my_filter, only: :show
31
38
  end
32
-
39
+
33
40
  it 'skip_filter' do
34
- controllers.each{ |c| c.should_receive(:skip_filter).and_return(true) }
35
- application.skip_filter :my_filter, :only => :show
41
+ controllers.each{ |c| expect(c).to receive(:skip_filter).and_return(true) }
42
+ application.skip_filter :my_filter, only: :show
36
43
  end
37
44
  end
@@ -1,32 +1,46 @@
1
- require 'spec_helper'
1
+ require 'rails_helper'
2
2
 
3
3
  describe ActiveAdmin::CSVBuilder do
4
4
 
5
5
  describe '.default_for_resource using Post' do
6
- let(:csv_builder) { ActiveAdmin::CSVBuilder.default_for_resource(Post) }
6
+ let(:csv_builder) { ActiveAdmin::CSVBuilder.default_for_resource(Post).tap(&:exec_columns) }
7
7
 
8
- it "should return a default csv_builder for Post" do
9
- csv_builder.should be_a(ActiveAdmin::CSVBuilder)
8
+ it 'returns a default csv_builder for Post' do
9
+ expect(csv_builder).to be_a(ActiveAdmin::CSVBuilder)
10
10
  end
11
11
 
12
- specify "the first column should be Id" do
13
- csv_builder.columns.first.name.should == 'Id'
14
- csv_builder.columns.first.data.should == :id
12
+ it 'defines Id as the first column' do
13
+ expect(csv_builder.columns.first.name).to eq 'Id'
14
+ expect(csv_builder.columns.first.data).to eq :id
15
15
  end
16
16
 
17
- specify "the following columns should be content_column" do
17
+ it "has Post's content_columns" do
18
18
  csv_builder.columns[1..-1].each_with_index do |column, index|
19
- column.name.should == Post.content_columns[index].name.titleize
20
- column.data.should == Post.content_columns[index].name.to_sym
19
+ expect(column.name).to eq Post.content_columns[index].name.humanize
20
+ expect(column.data).to eq Post.content_columns[index].name.to_sym
21
+ end
22
+ end
23
+
24
+ context 'when column has a localized name' do
25
+ let(:localized_name) { 'Titulo' }
26
+
27
+ before do
28
+ allow(Post).to receive(:human_attribute_name).and_call_original
29
+ allow(Post).to receive(:human_attribute_name).with(:title){ localized_name }
30
+ end
31
+
32
+ it 'gets name from I18n' do
33
+ title_index = Post.content_columns.map(&:name).index('title') + 1 # First col is always id
34
+ expect(csv_builder.columns[title_index].name).to eq localized_name
21
35
  end
22
36
  end
23
37
  end
24
38
 
25
39
  context 'when empty' do
26
- let(:builder){ ActiveAdmin::CSVBuilder.new }
40
+ let(:builder){ ActiveAdmin::CSVBuilder.new.tap(&:exec_columns) }
27
41
 
28
42
  it "should have no columns" do
29
- builder.columns.should == []
43
+ expect(builder.columns).to eq []
30
44
  end
31
45
  end
32
46
 
@@ -34,22 +48,22 @@ describe ActiveAdmin::CSVBuilder do
34
48
  let(:builder) do
35
49
  ActiveAdmin::CSVBuilder.new do
36
50
  column :title
37
- end
51
+ end.tap(&:exec_columns)
38
52
  end
39
53
 
40
54
  it "should have one column" do
41
- builder.columns.size.should == 1
55
+ expect(builder.columns.size).to eq 1
42
56
  end
43
57
 
44
58
  describe "the column" do
45
59
  let(:column){ builder.columns.first }
46
60
 
47
61
  it "should have a name of 'Title'" do
48
- column.name.should == "Title"
62
+ expect(column.name).to eq "Title"
49
63
  end
50
64
 
51
65
  it "should have the data :title" do
52
- column.data.should == :title
66
+ expect(column.data).to eq :title
53
67
  end
54
68
  end
55
69
  end
@@ -60,44 +74,171 @@ describe ActiveAdmin::CSVBuilder do
60
74
  column "My title" do
61
75
  # nothing
62
76
  end
63
- end
77
+ end.tap(&:exec_columns)
64
78
  end
65
79
 
66
80
  it "should have one column" do
67
- builder.columns.size.should == 1
81
+ expect(builder.columns.size).to eq 1
68
82
  end
69
83
 
70
84
  describe "the column" do
71
85
  let(:column){ builder.columns.first }
72
86
 
73
87
  it "should have a name of 'My title'" do
74
- column.name.should == "My title"
88
+ expect(column.name).to eq "My title"
75
89
  end
76
90
 
77
91
  it "should have the data :title" do
78
- column.data.should be_an_instance_of(Proc)
92
+ expect(column.data).to be_an_instance_of(Proc)
93
+ end
94
+ end
95
+ end
96
+
97
+ context "with a humanize_name column option" do
98
+ context "with symbol column name" do
99
+ let(:builder) do
100
+ ActiveAdmin::CSVBuilder.new do
101
+ column :my_title, humanize_name: false
102
+ end.tap(&:exec_columns)
103
+ end
104
+
105
+ describe "the column" do
106
+ let(:column){ builder.columns.first }
107
+
108
+ it "should have a name of 'my_title'" do
109
+ expect(column.name).to eq "my_title"
110
+ end
111
+ end
112
+ end
113
+
114
+ context "with string column name" do
115
+ let(:builder) do
116
+ ActiveAdmin::CSVBuilder.new do
117
+ column "my_title", humanize_name: false
118
+ end.tap(&:exec_columns)
119
+ end
120
+
121
+ describe "the column" do
122
+ let(:column){ builder.columns.first }
123
+
124
+ it "should have a name of 'my_title'" do
125
+ expect(column.name).to eq "my_title"
126
+ end
79
127
  end
80
128
  end
81
129
  end
82
130
 
83
131
  context "with a separator" do
84
132
  let(:builder) do
85
- ActiveAdmin::CSVBuilder.new :col_sep => ";"
133
+ ActiveAdmin::CSVBuilder.new(col_sep: ";").tap(&:exec_columns)
86
134
  end
87
135
 
88
136
  it "should have proper separator" do
89
- builder.options.should == {:col_sep => ";"}
137
+ expect(builder.options).to eq({col_sep: ";"})
138
+ end
139
+ end
140
+
141
+ context "with humanize_name option" do
142
+ let(:builder) do
143
+ ActiveAdmin::CSVBuilder.new(humanize_name: false) do
144
+ column :my_title
145
+ end.tap(&:exec_columns)
146
+ end
147
+
148
+ describe "the column" do
149
+ let(:column){ builder.columns.first }
150
+
151
+ it "should have humanize_name option set" do
152
+ expect(column.options).to eq humanize_name: false
153
+ end
154
+
155
+ it "should have a name of 'my_title'" do
156
+ expect(column.name).to eq "my_title"
157
+ end
90
158
  end
91
159
  end
92
160
 
93
161
  context "with csv_options" do
94
162
  let(:builder) do
95
- ActiveAdmin::CSVBuilder.new :force_quotes => true
163
+ ActiveAdmin::CSVBuilder.new(force_quotes: true).tap(&:exec_columns)
96
164
  end
97
165
 
98
166
  it "should have proper separator" do
99
- builder.options.should == {:force_quotes => true}
167
+ expect(builder.options).to eq({force_quotes: true})
100
168
  end
101
169
  end
102
170
 
171
+ context "with access to the controller" do
172
+ let(:dummy_view_context) { double(controller: dummy_controller) }
173
+ let(:dummy_controller) { double(names: %w(title summary updated_at created_at))}
174
+ let(:builder) do
175
+ ActiveAdmin::CSVBuilder.new do
176
+ column "id"
177
+ controller.names.each do |name|
178
+ column(name)
179
+ end
180
+ end.tap{ |b| b.exec_columns(dummy_view_context) }
181
+ end
182
+
183
+ it "should build columns provided by the controller" do
184
+ expect(builder.columns.map(&:data)).to match_array([:id, :title, :summary, :updated_at, :created_at])
185
+ end
186
+ end
187
+
188
+ context "build csv using the supplied order" do
189
+ before do
190
+ @post1 = Post.create!(title: "Hello1", published_at: Date.today - 2.day )
191
+ @post2 = Post.create!(title: "Hello2", published_at: Date.today - 1.day )
192
+ end
193
+ let(:dummy_controller) {
194
+ class DummyController
195
+ def find_collection(*)
196
+ collection
197
+ end
198
+
199
+ def collection
200
+ Post.order('published_at DESC')
201
+ end
202
+
203
+ def apply_decorator(resource)
204
+ resource
205
+ end
206
+
207
+ def view_context
208
+ end
209
+ end
210
+ DummyController.new
211
+ }
212
+ let(:builder) do
213
+ ActiveAdmin::CSVBuilder.new do
214
+ column "id"
215
+ column "title"
216
+ column "published_at"
217
+ end
218
+ end
219
+
220
+ it "should generate data with the supplied order" do
221
+ expect(builder).to receive(:build_row).and_return([]).once.ordered { |post| expect(post.id).to eq @post2.id }
222
+ expect(builder).to receive(:build_row).and_return([]).once.ordered { |post| expect(post.id).to eq @post1.id }
223
+ builder.build dummy_controller, []
224
+ end
225
+
226
+ it "should generate data ignoring pagination" do
227
+ expect(dummy_controller).to receive(:find_collection).
228
+ with(except: :pagination).once.
229
+ and_call_original
230
+ expect(builder).to receive(:build_row).and_return([]).twice
231
+ builder.build dummy_controller, []
232
+ end
233
+
234
+ end
235
+
236
+ skip '#exec_columns'
237
+
238
+ skip '#build_row' do
239
+ it 'renders non-strings'
240
+ it 'encodes values correctly'
241
+ it 'passes custom encoding options to String#encode!'
242
+ end
243
+
103
244
  end