yousty-activeadmin 1.0.0.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 (490) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +43 -0
  3. data/.travis.yml +8 -0
  4. data/.yardopts +9 -0
  5. data/CHANGELOG.md +1056 -0
  6. data/CONTRIBUTING.md +110 -0
  7. data/Gemfile +41 -0
  8. data/Guardfile +7 -0
  9. data/LICENSE +25 -0
  10. data/README.md +67 -0
  11. data/Rakefile +25 -0
  12. data/activeadmin.gemspec +33 -0
  13. data/app/assets/images/active_admin/admin_notes_icon.png +0 -0
  14. data/app/assets/images/active_admin/datepicker/datepicker-header-bg.png +0 -0
  15. data/app/assets/images/active_admin/datepicker/datepicker-input-icon.png +0 -0
  16. data/app/assets/images/active_admin/datepicker/datepicker-next-link-icon.png +0 -0
  17. data/app/assets/images/active_admin/datepicker/datepicker-nipple.png +0 -0
  18. data/app/assets/images/active_admin/datepicker/datepicker-prev-link-icon.png +0 -0
  19. data/app/assets/images/active_admin/index_list_icons/block_icon.svg +10 -0
  20. data/app/assets/images/active_admin/index_list_icons/blog_icon.svg +4 -0
  21. data/app/assets/images/active_admin/index_list_icons/grid_icon.svg +13 -0
  22. data/app/assets/images/active_admin/index_list_icons/table_icon.svg +3 -0
  23. data/app/assets/images/active_admin/loading.gif +0 -0
  24. data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
  25. data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
  26. data/app/assets/images/active_admin/orderable.png +0 -0
  27. data/app/assets/javascripts/active_admin/application.js.coffee +6 -0
  28. data/app/assets/javascripts/active_admin/base.js.coffee +5 -0
  29. data/app/assets/javascripts/active_admin/components/application.js.coffee +23 -0
  30. data/app/assets/javascripts/active_admin/components/batch_actions.js.coffee +26 -0
  31. data/app/assets/javascripts/active_admin/components/has_many.js.coffee +41 -0
  32. data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +37 -0
  33. data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +105 -0
  34. data/app/assets/javascripts/active_admin/lib/popover.js.coffee +97 -0
  35. data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +25 -0
  36. data/app/assets/stylesheets/active_admin/_base.css.scss +41 -0
  37. data/app/assets/stylesheets/active_admin/_forms.css.scss +293 -0
  38. data/app/assets/stylesheets/active_admin/_header.css.scss +152 -0
  39. data/app/assets/stylesheets/active_admin/_mixins.css.scss +1 -0
  40. data/app/assets/stylesheets/active_admin/_typography.css.scss +100 -0
  41. data/app/assets/stylesheets/active_admin/components/_batch_actions.css.scss +11 -0
  42. data/app/assets/stylesheets/active_admin/components/_blank_slates.scss +31 -0
  43. data/app/assets/stylesheets/active_admin/components/_breadcrumbs.scss +20 -0
  44. data/app/assets/stylesheets/active_admin/components/_buttons.scss +11 -0
  45. data/app/assets/stylesheets/active_admin/components/_columns.scss +3 -0
  46. data/app/assets/stylesheets/active_admin/components/_comments.css.scss +41 -0
  47. data/app/assets/stylesheets/active_admin/components/_date_picker.css.scss +123 -0
  48. data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +151 -0
  49. data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +39 -0
  50. data/app/assets/stylesheets/active_admin/components/_grid.scss +9 -0
  51. data/app/assets/stylesheets/active_admin/components/_index_list.scss +12 -0
  52. data/app/assets/stylesheets/active_admin/components/_links.scss +5 -0
  53. data/app/assets/stylesheets/active_admin/components/_pagination.scss +34 -0
  54. data/app/assets/stylesheets/active_admin/components/_panels.scss +6 -0
  55. data/app/assets/stylesheets/active_admin/components/_popovers.css.scss +123 -0
  56. data/app/assets/stylesheets/active_admin/components/_scopes.scss +10 -0
  57. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +12 -0
  58. data/app/assets/stylesheets/active_admin/components/_table_tools.css.scss +95 -0
  59. data/app/assets/stylesheets/active_admin/components/_tables.css.scss +110 -0
  60. data/app/assets/stylesheets/active_admin/mixins/_all.css.scss +11 -0
  61. data/app/assets/stylesheets/active_admin/mixins/_buttons.css.scss +66 -0
  62. data/app/assets/stylesheets/active_admin/mixins/_gradients.css.scss +38 -0
  63. data/app/assets/stylesheets/active_admin/mixins/_icons.css.scss +21 -0
  64. data/app/assets/stylesheets/active_admin/mixins/_reset.css.scss +165 -0
  65. data/app/assets/stylesheets/active_admin/mixins/_rounded.css.scss +43 -0
  66. data/app/assets/stylesheets/active_admin/mixins/_sections.css.scss +36 -0
  67. data/app/assets/stylesheets/active_admin/mixins/_shadows.css.scss +22 -0
  68. data/app/assets/stylesheets/active_admin/mixins/_typography.scss +3 -0
  69. data/app/assets/stylesheets/active_admin/mixins/_utilities.scss +26 -0
  70. data/app/assets/stylesheets/active_admin/mixins/_variables.css.scss +32 -0
  71. data/app/assets/stylesheets/active_admin/pages/_logged_out.scss +44 -0
  72. data/app/assets/stylesheets/active_admin/print.css.scss +284 -0
  73. data/app/assets/stylesheets/active_admin/structure/_footer.scss +14 -0
  74. data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +29 -0
  75. data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +43 -0
  76. data/app/views/active_admin/dashboard/index.html.arb +1 -0
  77. data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +8 -0
  78. data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +7 -0
  79. data/app/views/active_admin/devise/passwords/edit.html.erb +19 -0
  80. data/app/views/active_admin/devise/passwords/new.html.erb +14 -0
  81. data/app/views/active_admin/devise/sessions/new.html.erb +20 -0
  82. data/app/views/active_admin/devise/shared/_links.erb +27 -0
  83. data/app/views/active_admin/devise/unlocks/new.html.erb +14 -0
  84. data/app/views/active_admin/page/index.html.arb +1 -0
  85. data/app/views/active_admin/resource/edit.html.arb +1 -0
  86. data/app/views/active_admin/resource/index.csv.erb +17 -0
  87. data/app/views/active_admin/resource/index.html.arb +1 -0
  88. data/app/views/active_admin/resource/new.html.arb +1 -0
  89. data/app/views/active_admin/resource/show.html.arb +1 -0
  90. data/app/views/layouts/active_admin.html.arb +1 -0
  91. data/app/views/layouts/active_admin_logged_out.html.erb +37 -0
  92. data/config/locales/bg.yml +101 -0
  93. data/config/locales/ca.yml +98 -0
  94. data/config/locales/cs.yml +105 -0
  95. data/config/locales/da.yml +102 -0
  96. data/config/locales/de-CH.yml +117 -0
  97. data/config/locales/de.yml +119 -0
  98. data/config/locales/en-GB.yml +91 -0
  99. data/config/locales/en.yml +110 -0
  100. data/config/locales/es.yml +106 -0
  101. data/config/locales/es_MX.yml +104 -0
  102. data/config/locales/fi.yml +109 -0
  103. data/config/locales/fr.yml +97 -0
  104. data/config/locales/he.yml +91 -0
  105. data/config/locales/hr.yml +93 -0
  106. data/config/locales/hu.yml +92 -0
  107. data/config/locales/it.yml +89 -0
  108. data/config/locales/ja.yml +104 -0
  109. data/config/locales/ko.yml +84 -0
  110. data/config/locales/lt.yml +90 -0
  111. data/config/locales/lv.yml +89 -0
  112. data/config/locales/nl.yml +90 -0
  113. data/config/locales/no-NB.yml +85 -0
  114. data/config/locales/pl.yml +93 -0
  115. data/config/locales/pt-BR.yml +90 -0
  116. data/config/locales/pt-PT.yml +89 -0
  117. data/config/locales/ro.yml +93 -0
  118. data/config/locales/ru.yml +103 -0
  119. data/config/locales/sv-SE.yml +89 -0
  120. data/config/locales/tr.yml +90 -0
  121. data/config/locales/uk.yml +100 -0
  122. data/config/locales/vi.yml +90 -0
  123. data/config/locales/zh-CN.yml +90 -0
  124. data/config/locales/zh-TW.yml +90 -0
  125. data/cucumber.yml +3 -0
  126. data/docs/0-installation.md +84 -0
  127. data/docs/1-general-configuration.md +137 -0
  128. data/docs/10-custom-pages.md +98 -0
  129. data/docs/11-decorators.md +66 -0
  130. data/docs/12-arbre-components.md +144 -0
  131. data/docs/13-authorization-adapter.md +227 -0
  132. data/docs/2-resource-customization.md +340 -0
  133. data/docs/3-index-pages/create-an-index.md +29 -0
  134. data/docs/3-index-pages/index-as-block.md +21 -0
  135. data/docs/3-index-pages/index-as-blog.md +71 -0
  136. data/docs/3-index-pages/index-as-grid.md +29 -0
  137. data/docs/3-index-pages/index-as-table.md +154 -0
  138. data/docs/3-index-pages.md +206 -0
  139. data/docs/4-csv-format.md +39 -0
  140. data/docs/5-forms.md +110 -0
  141. data/docs/6-show-pages.md +77 -0
  142. data/docs/7-sidebars.md +42 -0
  143. data/docs/8-custom-actions.md +139 -0
  144. data/docs/9-batch-actions.md +155 -0
  145. data/features/action_item.feature +73 -0
  146. data/features/authorization.feature +64 -0
  147. data/features/authorization_cancan.feature +52 -0
  148. data/features/belongs_to.feature +63 -0
  149. data/features/breadcrumb.feature +27 -0
  150. data/features/comments/commenting.feature +140 -0
  151. data/features/comments/viewing_index.feature +19 -0
  152. data/features/dashboard.feature +16 -0
  153. data/features/decorators.feature +41 -0
  154. data/features/development_reloading.feature +31 -0
  155. data/features/edit_page.feature +127 -0
  156. data/features/favicon.feature +20 -0
  157. data/features/first_boot.feature +16 -0
  158. data/features/global_navigation.feature +29 -0
  159. data/features/i18n.feature +38 -0
  160. data/features/index/batch_actions.feature +123 -0
  161. data/features/index/filters.feature +138 -0
  162. data/features/index/format_as_csv.feature +117 -0
  163. data/features/index/formats.feature +66 -0
  164. data/features/index/index_as_block.feature +15 -0
  165. data/features/index/index_as_blog.feature +69 -0
  166. data/features/index/index_as_grid.feature +45 -0
  167. data/features/index/index_as_table.feature +195 -0
  168. data/features/index/index_blank_slate.feature +61 -0
  169. data/features/index/index_parameters.feature +75 -0
  170. data/features/index/index_scope_to.feature +56 -0
  171. data/features/index/index_scopes.feature +251 -0
  172. data/features/index/page_title.feature +30 -0
  173. data/features/index/pagination.feature +59 -0
  174. data/features/index/switch_index_view.feature +73 -0
  175. data/features/menu.feature +53 -0
  176. data/features/new_page.feature +119 -0
  177. data/features/registering_assets.feature +35 -0
  178. data/features/registering_pages.feature +148 -0
  179. data/features/registering_resources.feature +33 -0
  180. data/features/root_to.feature +17 -0
  181. data/features/show/default_content.feature +43 -0
  182. data/features/show/page_title.feature +47 -0
  183. data/features/sidebar_sections.feature +198 -0
  184. data/features/site_title.feature +47 -0
  185. data/features/specifying_actions.feature +93 -0
  186. data/features/step_definitions/action_item_steps.rb +7 -0
  187. data/features/step_definitions/action_link_steps.rb +7 -0
  188. data/features/step_definitions/additional_web_steps.rb +82 -0
  189. data/features/step_definitions/asset_steps.rb +15 -0
  190. data/features/step_definitions/attribute_steps.rb +13 -0
  191. data/features/step_definitions/batch_action_steps.rb +55 -0
  192. data/features/step_definitions/breadcrumb_steps.rb +3 -0
  193. data/features/step_definitions/comment_steps.rb +12 -0
  194. data/features/step_definitions/configuration_steps.rb +100 -0
  195. data/features/step_definitions/dashboard_steps.rb +15 -0
  196. data/features/step_definitions/factory_steps.rb +34 -0
  197. data/features/step_definitions/filter_steps.rb +17 -0
  198. data/features/step_definitions/flash_steps.rb +11 -0
  199. data/features/step_definitions/format_steps.rb +45 -0
  200. data/features/step_definitions/i18n_steps.rb +3 -0
  201. data/features/step_definitions/index_scope_steps.rb +21 -0
  202. data/features/step_definitions/index_views_steps.rb +3 -0
  203. data/features/step_definitions/layout_steps.rb +3 -0
  204. data/features/step_definitions/member_link_steps.rb +7 -0
  205. data/features/step_definitions/menu_steps.rb +11 -0
  206. data/features/step_definitions/pagination_steps.rb +8 -0
  207. data/features/step_definitions/sidebar_steps.rb +8 -0
  208. data/features/step_definitions/site_title_steps.rb +15 -0
  209. data/features/step_definitions/symbol_leak_steps.rb +3 -0
  210. data/features/step_definitions/tab_steps.rb +3 -0
  211. data/features/step_definitions/table_steps.rb +119 -0
  212. data/features/step_definitions/user_steps.rb +39 -0
  213. data/features/step_definitions/web_steps.rb +86 -0
  214. data/features/sti_resource.feature +73 -0
  215. data/features/support/env.rb +112 -0
  216. data/features/support/paths.rb +71 -0
  217. data/features/support/selectors.rb +45 -0
  218. data/features/symbol_leak.feature +35 -0
  219. data/features/users/logging_in.feature +34 -0
  220. data/features/users/logging_out.feature +13 -0
  221. data/features/users/resetting_password.feature +34 -0
  222. data/lib/active_admin/abstract_view_factory.rb +95 -0
  223. data/lib/active_admin/application.rb +242 -0
  224. data/lib/active_admin/asset_registration.rb +29 -0
  225. data/lib/active_admin/authorization_adapter.rb +132 -0
  226. data/lib/active_admin/base_controller/authorization.rb +151 -0
  227. data/lib/active_admin/base_controller/menu.rb +34 -0
  228. data/lib/active_admin/base_controller.rb +78 -0
  229. data/lib/active_admin/batch_actions/controller.rb +24 -0
  230. data/lib/active_admin/batch_actions/resource_extension.rb +127 -0
  231. data/lib/active_admin/batch_actions/views/batch_action_form.rb +35 -0
  232. data/lib/active_admin/batch_actions/views/batch_action_popover.rb +28 -0
  233. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +66 -0
  234. data/lib/active_admin/batch_actions/views/selection_cells.rb +37 -0
  235. data/lib/active_admin/batch_actions.rb +17 -0
  236. data/lib/active_admin/callbacks.rb +87 -0
  237. data/lib/active_admin/cancan_adapter.rb +40 -0
  238. data/lib/active_admin/component.rb +5 -0
  239. data/lib/active_admin/controller_action.rb +12 -0
  240. data/lib/active_admin/csv_builder.rb +49 -0
  241. data/lib/active_admin/deprecation.rb +36 -0
  242. data/lib/active_admin/devise.rb +70 -0
  243. data/lib/active_admin/dsl.rb +166 -0
  244. data/lib/active_admin/engine.rb +7 -0
  245. data/lib/active_admin/event.rb +33 -0
  246. data/lib/active_admin/filters/dsl.rb +21 -0
  247. data/lib/active_admin/filters/forms.rb +89 -0
  248. data/lib/active_admin/filters/formtastic_addons.rb +70 -0
  249. data/lib/active_admin/filters/resource_extension.rb +136 -0
  250. data/lib/active_admin/filters.rb +9 -0
  251. data/lib/active_admin/form_builder.rb +152 -0
  252. data/lib/active_admin/helpers/collection.rb +23 -0
  253. data/lib/active_admin/helpers/optional_display.rb +38 -0
  254. data/lib/active_admin/helpers/scope_chain.rb +23 -0
  255. data/lib/active_admin/helpers/settings.rb +108 -0
  256. data/lib/active_admin/iconic/icons.rb +142 -0
  257. data/lib/active_admin/iconic.rb +51 -0
  258. data/lib/active_admin/inputs/datepicker_input.rb +20 -0
  259. data/lib/active_admin/inputs/filter_base/search_method_select.rb +73 -0
  260. data/lib/active_admin/inputs/filter_base.rb +33 -0
  261. data/lib/active_admin/inputs/filter_boolean_input.rb +32 -0
  262. data/lib/active_admin/inputs/filter_check_boxes_input.rb +51 -0
  263. data/lib/active_admin/inputs/filter_date_range_input.rb +34 -0
  264. data/lib/active_admin/inputs/filter_numeric_input.rb +10 -0
  265. data/lib/active_admin/inputs/filter_select_input.rb +61 -0
  266. data/lib/active_admin/inputs/filter_string_input.rb +24 -0
  267. data/lib/active_admin/inputs.rb +15 -0
  268. data/lib/active_admin/menu.rb +107 -0
  269. data/lib/active_admin/menu_collection.rb +96 -0
  270. data/lib/active_admin/menu_item.rb +97 -0
  271. data/lib/active_admin/namespace.rb +224 -0
  272. data/lib/active_admin/orm/active_record/comments/comment.rb +39 -0
  273. data/lib/active_admin/orm/active_record/comments/namespace_helper.rb +14 -0
  274. data/lib/active_admin/orm/active_record/comments/resource_helper.rb +17 -0
  275. data/lib/active_admin/orm/active_record/comments/show_page_helper.rb +23 -0
  276. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +75 -0
  277. data/lib/active_admin/orm/active_record/comments/views.rb +2 -0
  278. data/lib/active_admin/orm/active_record/comments.rb +84 -0
  279. data/lib/active_admin/orm/active_record.rb +3 -0
  280. data/lib/active_admin/orm/mongoid/.gitkeep +0 -0
  281. data/lib/active_admin/orm/mongoid.rb +1 -0
  282. data/lib/active_admin/page.rb +88 -0
  283. data/lib/active_admin/page_controller.rb +29 -0
  284. data/lib/active_admin/page_dsl.rb +28 -0
  285. data/lib/active_admin/page_presenter.rb +32 -0
  286. data/lib/active_admin/resource/action_items.rb +91 -0
  287. data/lib/active_admin/resource/belongs_to.rb +36 -0
  288. data/lib/active_admin/resource/controllers.rb +18 -0
  289. data/lib/active_admin/resource/menu.rb +64 -0
  290. data/lib/active_admin/resource/naming.rb +84 -0
  291. data/lib/active_admin/resource/page_presenters.rb +82 -0
  292. data/lib/active_admin/resource/pagination.rb +19 -0
  293. data/lib/active_admin/resource/routes.rb +99 -0
  294. data/lib/active_admin/resource/scope_to.rb +74 -0
  295. data/lib/active_admin/resource/scopes.rb +50 -0
  296. data/lib/active_admin/resource/sidebars.rb +27 -0
  297. data/lib/active_admin/resource.rb +153 -0
  298. data/lib/active_admin/resource_collection.rb +42 -0
  299. data/lib/active_admin/resource_controller/action_builder.rb +21 -0
  300. data/lib/active_admin/resource_controller/data_access.rb +298 -0
  301. data/lib/active_admin/resource_controller/decorators.rb +20 -0
  302. data/lib/active_admin/resource_controller/resource_class_methods.rb +24 -0
  303. data/lib/active_admin/resource_controller/scoping.rb +31 -0
  304. data/lib/active_admin/resource_controller/sidebars.rb +18 -0
  305. data/lib/active_admin/resource_controller.rb +50 -0
  306. data/lib/active_admin/resource_dsl.rb +134 -0
  307. data/lib/active_admin/router.rb +106 -0
  308. data/lib/active_admin/scope.rb +57 -0
  309. data/lib/active_admin/sidebar_section.rb +37 -0
  310. data/lib/active_admin/version.rb +3 -0
  311. data/lib/active_admin/view_factory.rb +27 -0
  312. data/lib/active_admin/view_helpers/active_admin_application_helper.rb +12 -0
  313. data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +7 -0
  314. data/lib/active_admin/view_helpers/auto_link_helper.rb +34 -0
  315. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +26 -0
  316. data/lib/active_admin/view_helpers/display_helper.rb +49 -0
  317. data/lib/active_admin/view_helpers/download_format_links_helper.rb +49 -0
  318. data/lib/active_admin/view_helpers/fields_for.rb +50 -0
  319. data/lib/active_admin/view_helpers/flash_helper.rb +13 -0
  320. data/lib/active_admin/view_helpers/form_helper.rb +24 -0
  321. data/lib/active_admin/view_helpers/icon_helper.rb +12 -0
  322. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +93 -0
  323. data/lib/active_admin/view_helpers/sidebar_helper.rb +15 -0
  324. data/lib/active_admin/view_helpers/title_helper.rb +11 -0
  325. data/lib/active_admin/view_helpers/view_factory_helper.rb +11 -0
  326. data/lib/active_admin/view_helpers.rb +21 -0
  327. data/lib/active_admin/views/action_items.rb +17 -0
  328. data/lib/active_admin/views/components/action_list_popover.rb +29 -0
  329. data/lib/active_admin/views/components/attributes_table.rb +103 -0
  330. data/lib/active_admin/views/components/blank_slate.rb +17 -0
  331. data/lib/active_admin/views/components/columns.rb +150 -0
  332. data/lib/active_admin/views/components/dropdown_menu.rb +73 -0
  333. data/lib/active_admin/views/components/index_list.rb +68 -0
  334. data/lib/active_admin/views/components/paginated_collection.rb +125 -0
  335. data/lib/active_admin/views/components/panel.rb +34 -0
  336. data/lib/active_admin/views/components/popover.rb +27 -0
  337. data/lib/active_admin/views/components/scopes.rb +66 -0
  338. data/lib/active_admin/views/components/sidebar_section.rb +28 -0
  339. data/lib/active_admin/views/components/site_title.rb +55 -0
  340. data/lib/active_admin/views/components/status_tag.rb +56 -0
  341. data/lib/active_admin/views/components/table_for.rb +191 -0
  342. data/lib/active_admin/views/footer.rb +20 -0
  343. data/lib/active_admin/views/header.rb +32 -0
  344. data/lib/active_admin/views/index_as_block.rb +36 -0
  345. data/lib/active_admin/views/index_as_blog.rb +156 -0
  346. data/lib/active_admin/views/index_as_grid.rb +80 -0
  347. data/lib/active_admin/views/index_as_table.rb +264 -0
  348. data/lib/active_admin/views/pages/base.rb +139 -0
  349. data/lib/active_admin/views/pages/form.rb +51 -0
  350. data/lib/active_admin/views/pages/index.rb +147 -0
  351. data/lib/active_admin/views/pages/layout.rb +26 -0
  352. data/lib/active_admin/views/pages/page.rb +30 -0
  353. data/lib/active_admin/views/pages/show.rb +59 -0
  354. data/lib/active_admin/views/tabbed_navigation.rb +62 -0
  355. data/lib/active_admin/views/title_bar.rb +53 -0
  356. data/lib/active_admin/views.rb +8 -0
  357. data/lib/active_admin.rb +125 -0
  358. data/lib/activeadmin.rb +1 -0
  359. data/lib/generators/active_admin/assets/assets_generator.rb +16 -0
  360. data/lib/generators/active_admin/assets/templates/active_admin.css.scss +17 -0
  361. data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +1 -0
  362. data/lib/generators/active_admin/devise/devise_generator.rb +86 -0
  363. data/lib/generators/active_admin/install/install_generator.rb +46 -0
  364. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +235 -0
  365. data/lib/generators/active_admin/install/templates/admin_user.rb.erb +27 -0
  366. data/lib/generators/active_admin/install/templates/dashboard.rb +33 -0
  367. data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb +19 -0
  368. data/lib/generators/active_admin/resource/resource_generator.rb +16 -0
  369. data/lib/generators/active_admin/resource/templates/admin.rb +3 -0
  370. data/lib/ransack_ext.rb +12 -0
  371. data/script/local +44 -0
  372. data/script/use_rails +53 -0
  373. data/spec/integration/default_namespace_spec.rb +61 -0
  374. data/spec/integration/javascript_spec.rb +20 -0
  375. data/spec/integration/memory_spec.rb +29 -0
  376. data/spec/integration/stylesheets_spec.rb +41 -0
  377. data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +50 -0
  378. data/spec/javascripts/coffeescripts/jquery.aa.popover-spec.js.coffee +82 -0
  379. data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +34 -0
  380. data/spec/javascripts/compiled/jquery.aa.checkbox-toggler-spec.js +60 -0
  381. data/spec/javascripts/compiled/jquery.aa.popover-spec.js +106 -0
  382. data/spec/javascripts/compiled/jquery.aa.table-checkbox-toggler-spec.js +37 -0
  383. data/spec/javascripts/fixtures/checkboxes.html +9 -0
  384. data/spec/javascripts/fixtures/table_checkboxes.html +17 -0
  385. data/spec/javascripts/helpers/SpecHelper.js +3 -0
  386. data/spec/javascripts/helpers/vendor/jasmine-fixture-0.0.5.js +108 -0
  387. data/spec/javascripts/helpers/vendor/jasmine-jquery.js +288 -0
  388. data/spec/javascripts/helpers/vendor/sinon-1.2.0.js +2915 -0
  389. data/spec/javascripts/support/jasmine.yml +74 -0
  390. data/spec/javascripts/support/jasmine_config.rb +23 -0
  391. data/spec/javascripts/support/jasmine_runner.rb +32 -0
  392. data/spec/javascripts/support/jquery-ui-1.8.16.custom.min.js +34 -0
  393. data/spec/javascripts/support/jquery.min.js +4 -0
  394. data/spec/spec_helper.rb +175 -0
  395. data/spec/spec_helper_without_rails.rb +16 -0
  396. data/spec/support/deferred_garbage_collection.rb +19 -0
  397. data/spec/support/detect_rails_version.rb +42 -0
  398. data/spec/support/integration_example_group.rb +31 -0
  399. data/spec/support/jslint.yml +80 -0
  400. data/spec/support/rails_template.rb +111 -0
  401. data/spec/support/rails_template_with_data.rb +59 -0
  402. data/spec/support/templates/admin/stores.rb +11 -0
  403. data/spec/support/templates/cucumber.rb +24 -0
  404. data/spec/support/templates/cucumber_with_reloading.rb +5 -0
  405. data/spec/support/templates/en.yml +8 -0
  406. data/spec/support/templates/post_decorator.rb +53 -0
  407. data/spec/unit/abstract_view_factory_spec.rb +79 -0
  408. data/spec/unit/action_builder_spec.rb +126 -0
  409. data/spec/unit/active_admin_spec.rb +11 -0
  410. data/spec/unit/application_spec.rb +141 -0
  411. data/spec/unit/asset_registration_spec.rb +52 -0
  412. data/spec/unit/authorization/authorization_adapter_spec.rb +61 -0
  413. data/spec/unit/authorization/controller_authorization_spec.rb +39 -0
  414. data/spec/unit/auto_link_spec.rb +32 -0
  415. data/spec/unit/batch_actions/resource_spec.rb +91 -0
  416. data/spec/unit/batch_actions/settings_spec.rb +61 -0
  417. data/spec/unit/belongs_to_spec.rb +42 -0
  418. data/spec/unit/cancan_adapter_spec.rb +43 -0
  419. data/spec/unit/comments_spec.rb +106 -0
  420. data/spec/unit/component_spec.rb +18 -0
  421. data/spec/unit/config_shared_examples.rb +59 -0
  422. data/spec/unit/controller_filters_spec.rb +32 -0
  423. data/spec/unit/csv_builder_spec.rb +103 -0
  424. data/spec/unit/devise_spec.rb +116 -0
  425. data/spec/unit/dsl_spec.rb +61 -0
  426. data/spec/unit/event_spec.rb +47 -0
  427. data/spec/unit/filters/filter_form_builder_spec.rb +423 -0
  428. data/spec/unit/filters/resource_spec.rb +119 -0
  429. data/spec/unit/form_builder_spec.rb +514 -0
  430. data/spec/unit/generators/install_spec.rb +23 -0
  431. data/spec/unit/helpers/collection_spec.rb +65 -0
  432. data/spec/unit/helpers/scope_chain_spec.rb +36 -0
  433. data/spec/unit/helpers/settings_spec.rb +30 -0
  434. data/spec/unit/menu_collection_spec.rb +62 -0
  435. data/spec/unit/menu_item_spec.rb +143 -0
  436. data/spec/unit/menu_spec.rb +71 -0
  437. data/spec/unit/namespace/authorization_spec.rb +27 -0
  438. data/spec/unit/namespace/register_page_spec.rb +74 -0
  439. data/spec/unit/namespace/register_resource_spec.rb +163 -0
  440. data/spec/unit/namespace_spec.rb +103 -0
  441. data/spec/unit/page_controller_spec.rb +5 -0
  442. data/spec/unit/page_spec.rb +72 -0
  443. data/spec/unit/pretty_format_spec.rb +35 -0
  444. data/spec/unit/resource/action_items_spec.rb +62 -0
  445. data/spec/unit/resource/menu_spec.rb +18 -0
  446. data/spec/unit/resource/naming_spec.rb +122 -0
  447. data/spec/unit/resource/page_presenters_spec.rb +44 -0
  448. data/spec/unit/resource/pagination_spec.rb +38 -0
  449. data/spec/unit/resource/routes_spec.rb +73 -0
  450. data/spec/unit/resource/scopes_spec.rb +43 -0
  451. data/spec/unit/resource/sidebars_spec.rb +43 -0
  452. data/spec/unit/resource_collection_spec.rb +160 -0
  453. data/spec/unit/resource_controller/data_access_spec.rb +73 -0
  454. data/spec/unit/resource_controller/sidebars_spec.rb +46 -0
  455. data/spec/unit/resource_controller_spec.rb +265 -0
  456. data/spec/unit/resource_registration_spec.rb +56 -0
  457. data/spec/unit/resource_spec.rb +243 -0
  458. data/spec/unit/routing_spec.rb +172 -0
  459. data/spec/unit/scope_spec.rb +108 -0
  460. data/spec/unit/settings_spec.rb +88 -0
  461. data/spec/unit/view_factory_spec.rb +21 -0
  462. data/spec/unit/view_helpers/breadcrumbs_spec.rb +149 -0
  463. data/spec/unit/view_helpers/display_name_spec.rb +41 -0
  464. data/spec/unit/view_helpers/download_format_links_helper_spec.rb +39 -0
  465. data/spec/unit/view_helpers/fields_for_spec.rb +50 -0
  466. data/spec/unit/view_helpers/form_helper_spec.rb +56 -0
  467. data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +101 -0
  468. data/spec/unit/views/components/action_list_popover_spec.rb +30 -0
  469. data/spec/unit/views/components/attributes_table_spec.rb +230 -0
  470. data/spec/unit/views/components/batch_action_popover_spec.rb +33 -0
  471. data/spec/unit/views/components/blank_slate_spec.rb +17 -0
  472. data/spec/unit/views/components/columns_spec.rb +142 -0
  473. data/spec/unit/views/components/index_list_spec.rb +32 -0
  474. data/spec/unit/views/components/paginated_collection_spec.rb +227 -0
  475. data/spec/unit/views/components/panel_spec.rb +51 -0
  476. data/spec/unit/views/components/popover_spec.rb +33 -0
  477. data/spec/unit/views/components/sidebar_section_spec.rb +37 -0
  478. data/spec/unit/views/components/site_title_spec.rb +78 -0
  479. data/spec/unit/views/components/status_tag_spec.rb +95 -0
  480. data/spec/unit/views/components/table_for_spec.rb +201 -0
  481. data/spec/unit/views/pages/form_spec.rb +35 -0
  482. data/spec/unit/views/pages/layout_spec.rb +63 -0
  483. data/spec/unit/views/pages/show_spec.rb +20 -0
  484. data/spec/unit/views/tabbed_navigation_spec.rb +149 -0
  485. data/tasks/docs.rake +37 -0
  486. data/tasks/js.rake +32 -0
  487. data/tasks/parallel_tests.rake +60 -0
  488. data/tasks/test.rake +79 -0
  489. data/tasks/yard.rake +7 -0
  490. metadata +896 -0
@@ -0,0 +1,423 @@
1
+ require 'spec_helper'
2
+
3
+ class Post
4
+ ransacker :custom_searcher do
5
+ # nothing to see here
6
+ end
7
+ end
8
+
9
+ describe ActiveAdmin::Filters::ViewHelper do
10
+
11
+ # Setup an ActionView::Base object which can be used for
12
+ # generating the form for.
13
+ let(:helpers) do
14
+ view = action_view
15
+ def view.collection_path
16
+ "/posts"
17
+ end
18
+
19
+ def view.protect_against_forgery?
20
+ false
21
+ end
22
+
23
+ def view.a_helper_method
24
+ "A Helper Method"
25
+ end
26
+
27
+ view
28
+ end
29
+
30
+ def render_filter(search, filters)
31
+ render_arbre_component({filter_args: [search, filters]}, helpers) do
32
+ text_node active_admin_filters_form_for *assigns[:filter_args]
33
+ end
34
+ end
35
+
36
+ def filter(name, options = {})
37
+ render_filter scope, name => options
38
+ end
39
+
40
+ let(:scope) { Post.search }
41
+
42
+ describe "the form in general" do
43
+ let(:body) { filter :title }
44
+
45
+ it "should generate a form which submits via get" do
46
+ body.should have_tag("form", :attributes => { :method => 'get', :class => 'filter_form' })
47
+ end
48
+
49
+ it "should generate a filter button" do
50
+ body.should have_tag("input", :attributes => { :type => "submit",
51
+ :value => "Filter" })
52
+ end
53
+
54
+ it "should only generate the form once" do
55
+ body.to_s.scan(/q\[title_contains\]/).size.should == 1
56
+ end
57
+
58
+ it "should generate a clear filters link" do
59
+ body.should have_tag("a", "Clear Filters", :attributes => { :class => "clear_filters_btn" })
60
+ end
61
+ end
62
+
63
+ describe "string attribute" do
64
+ let(:body) { filter :title }
65
+
66
+ it "should generate a select option for starts with" do
67
+ body.should have_tag("option", "Starts with", :attributes => { :value => 'title_starts_with' })
68
+ end
69
+
70
+ it "should generate a select option for ends with" do
71
+ body.should have_tag("option", "Ends with", :attributes => { :value => 'title_ends_with' })
72
+ end
73
+
74
+ it "should generate a select option for contains" do
75
+ body.should have_tag("option", "Contains", :attributes => { :value => 'title_contains' })
76
+ end
77
+
78
+ it "should generate a text field for input" do
79
+ body.should have_tag("input", :attributes => { :name => 'q[title_contains]' })
80
+ end
81
+
82
+ it "should have a proper label" do
83
+ body.should have_tag('label', 'Title')
84
+ end
85
+
86
+ it "should translate the label for text field" do
87
+ begin
88
+ I18n.backend.store_translations(:en, :activerecord => { :attributes => { :post => { :title => "Name" } } })
89
+ body.should have_tag('label', 'Name')
90
+ ensure
91
+ I18n.backend.reload!
92
+ end
93
+ end
94
+
95
+ it "should select the option which is currently being filtered"
96
+
97
+ end
98
+
99
+ describe "string attribute with sub filters" do
100
+ let(:body) { filter :title_contains }
101
+
102
+ it "should generate a search field for a string attribute with query contains" do
103
+ body.should have_tag("input", :attributes => { :name => "q[title_contains]"})
104
+ body.should have_tag('label', 'Title contains')
105
+ end
106
+
107
+ it "should NOT generate a select option for contains" do
108
+ body.should_not have_tag("option", "Contains", :attributes => { :value => 'title_contains' })
109
+ end
110
+
111
+ context "using starts_with and as" do
112
+ let(:body) { filter :title_starts_with }
113
+
114
+ it "should generate a search field for a string attribute with query starts_with" do
115
+ body.should have_tag("input", :attributes => { :name => "q[title_starts_with]" })
116
+ end
117
+ end
118
+
119
+ context "using ends_with and as" do
120
+ let(:body) { filter :title_ends_with }
121
+
122
+ it "should generate a search field for a string attribute with query ends_with" do
123
+ body.should have_tag("input", :attributes => { :name => "q[title_ends_with]" })
124
+ end
125
+ end
126
+
127
+ context "using contains and NO AS defined" do
128
+ let(:body) { filter :title_contains }
129
+
130
+ it "should generate a search field for a string attribute with query contains" do
131
+ body.should have_tag("input", :attributes => { :name => "q[title_contains]" })
132
+ end
133
+ end
134
+ end
135
+
136
+ describe "text attribute" do
137
+ let(:body) { filter :body }
138
+
139
+ it "should generate a search field for a text attribute" do
140
+ body.should have_tag("input", :attributes => { :name => "q[body_contains]"})
141
+ end
142
+
143
+ it "should have a proper label" do
144
+ body.should have_tag('label', 'Body')
145
+ end
146
+ end
147
+
148
+ describe "string attribute, as a select" do
149
+ let(:body) { filter :title, as: :select }
150
+ let(:builder) { ActiveAdmin::Inputs::FilterSelectInput }
151
+
152
+ context "when loading collection from DB" do
153
+ it "should use pluck for efficiency" do
154
+ builder.any_instance.should_receive(:pluck_column) { [] }
155
+ body
156
+ end
157
+
158
+ it "should remove original ordering to prevent PostgreSQL error" do
159
+ scope.object.klass.should_receive(:reorder).with('title asc') {
160
+ m = double uniq: double(pluck: ['A Title'])
161
+ m.uniq.should_receive(:pluck).with :title
162
+ m
163
+ }
164
+ body
165
+ end
166
+ end
167
+ end
168
+
169
+ describe "datetime attribute" do
170
+ let(:body) { filter :created_at }
171
+
172
+ it "should generate a date greater than" do
173
+ body.should have_tag("input", :attributes => { :name => "q[created_at_gteq]", :class => "datepicker"})
174
+ end
175
+ it "should generate a seperator" do
176
+ body.should have_tag("span", :attributes => { :class => "seperator"})
177
+ end
178
+ it "should generate a date less than" do
179
+ body.should have_tag("input", :attributes => { :name => "q[created_at_lteq]", :class => "datepicker"})
180
+ end
181
+ end
182
+
183
+ describe "integer attribute" do
184
+ let(:body) { filter :id }
185
+
186
+ it "should generate a select option for equal to" do
187
+ body.should have_tag("option", "Equals", :attributes => { :value => 'id_equals' })
188
+ end
189
+ it "should generate a select option for greater than" do
190
+ body.should have_tag("option", "Greater than")
191
+ end
192
+ it "should generate a select option for less than" do
193
+ body.should have_tag("option", "Less than")
194
+ end
195
+ it "should generate a text field for input" do
196
+ body.should have_tag("input", :attributes => { :name => 'q[id_equals]' })
197
+ end
198
+ it "should select the option which is currently being filtered"
199
+ end
200
+
201
+ describe "boolean attribute" do
202
+ context "boolean datatypes" do
203
+ let(:body) { filter :starred }
204
+
205
+ it "should create a check box for equals to" do
206
+ body.should have_tag("input", :attributes => {
207
+ :name => "q[starred_eq]",
208
+ :type => "checkbox" })
209
+ end
210
+
211
+ it "should translate the label for boolean field" do
212
+ begin
213
+ I18n.backend.store_translations(:en, :activerecord => { :attributes => { :post => { :starred => "Faved" } } })
214
+ body.should have_tag('label', 'Faved')
215
+ ensure
216
+ I18n.backend.reload!
217
+ end
218
+ end
219
+ end
220
+
221
+ context "non-boolean data types" do
222
+ let(:body) { filter :title_present, :as => :boolean }
223
+
224
+ it "should create a check box for equals to" do
225
+ body.should have_tag("input", :attributes => {
226
+ :name => "q[title_present]",
227
+ :type => "checkbox" })
228
+ end
229
+ end
230
+ end
231
+
232
+ describe "belongs_to" do
233
+ before do
234
+ @john = User.create :first_name => "John", :last_name => "Doe", :username => "john_doe"
235
+ @jane = User.create :first_name => "Jane", :last_name => "Doe", :username => "jane_doe"
236
+ end
237
+
238
+ context "when given as the _id attribute name" do
239
+ let(:body) { filter :author_id }
240
+
241
+ it "should generate a numeric filter" do
242
+ body.should have_tag 'label', 'Author' # really this should be Author ID :/
243
+ body.should have_tag 'option', :attributes => { :value => 'author_id_less_than' }
244
+ body.should have_tag 'input', :attributes => { :id => 'q_author_id', :name => 'q[author_id_equals]'}
245
+ end
246
+ end
247
+
248
+ context "when given as the name of the relationship" do
249
+ let(:body) { filter :author }
250
+
251
+ it "should generate a select" do
252
+ body.should have_tag "select", :attributes => { :name => "q[author_id_eq]" }
253
+ end
254
+ it "should set the default text to 'Any'" do
255
+ body.should have_tag "option", "Any", :attributes => { :value => "" }
256
+ end
257
+ it "should create an option for each related object" do
258
+ body.should have_tag "option", "John Doe", :attributes => { :value => @john.id }
259
+ body.should have_tag "option", "Jane Doe", :attributes => { :value => @jane.id }
260
+ end
261
+
262
+ context "with a proc" do
263
+ let :body do
264
+ filter :title, :as => :select, :collection => proc{ ['Title One', 'Title Two'] }
265
+ end
266
+
267
+ it "should use call the proc as the collection" do
268
+ body.should have_tag("option", "Title One")
269
+ body.should have_tag("option", "Title Two")
270
+ end
271
+
272
+ it "should render the collection in the context of the view" do
273
+ body = filter(:title, :as => :select, :collection => proc{[a_helper_method]})
274
+ body.should have_tag("option", "A Helper Method")
275
+ end
276
+ end
277
+ end
278
+
279
+ context "as check boxes" do
280
+ let(:body) { filter :author, :as => :check_boxes }
281
+
282
+ it "should create a check box for each related object" do
283
+ body.should have_tag("input", :attributes => {
284
+ :name => "q[author_id_in][]",
285
+ :type => "checkbox",
286
+ :value => @john.id })
287
+ body.should have_tag("input", :attributes => {
288
+ :name => "q[author_id_in][]",
289
+ :type => "checkbox",
290
+ :value => @jane.id })
291
+ end
292
+ end
293
+
294
+ context "when polymorphic relationship" do
295
+ let(:scope) { ActiveAdmin::Comment.search }
296
+ it "should raise an error if a collection isn't provided" do
297
+ expect { filter :resource }.to raise_error \
298
+ Formtastic::PolymorphicInputWithoutCollectionError
299
+ end
300
+ end
301
+ end # belongs to
302
+
303
+ describe "has_and_belongs_to_many" do
304
+ pending "add HABTM models so this can be tested"
305
+ end
306
+
307
+ describe "has_many :through" do
308
+ # Setup an ActionView::Base object which can be used for
309
+ # generating the form for.
310
+ let(:helpers) do
311
+ view = action_view
312
+ def view.collection_path
313
+ "/categories"
314
+ end
315
+
316
+ def view.protect_against_forgery?
317
+ false
318
+ end
319
+
320
+ def view.a_helper_method
321
+ "A Helper Method"
322
+ end
323
+
324
+ view
325
+ end
326
+ let(:scope) { Category.search }
327
+
328
+ let!(:john) { User.create :first_name => "John", :last_name => "Doe", :username => "john_doe" }
329
+ let!(:jane) { User.create :first_name => "Jane", :last_name => "Doe", :username => "jane_doe" }
330
+
331
+ context "when given as the name of the relationship" do
332
+ let(:body) { filter :authors }
333
+
334
+ it "should generate a select" do
335
+ body.should have_tag 'select', :attributes => { :name => "q[posts_author_id_eq]" }
336
+ end
337
+
338
+ it "should set the default text to 'Any'" do
339
+ body.should have_tag "option", "Any", :attributes => { :value => "" }
340
+ end
341
+
342
+ it "should create an option for each related object" do
343
+ body.should have_tag "option", "John Doe", :attributes => { :value => john.id }
344
+ body.should have_tag "option", "Jane Doe", :attributes => { :value => jane.id }
345
+ end
346
+ end
347
+
348
+ context "as check boxes" do
349
+ let(:body) { filter :authors, :as => :check_boxes }
350
+
351
+ it "should create a check box for each related object" do
352
+ body.should have_tag("input", :attributes => {
353
+ :name => "q[posts_author_id_in][]",
354
+ :type => "checkbox",
355
+ :value => john.id })
356
+ body.should have_tag("input", :attributes => {
357
+ :name => "q[posts_author_id_in][]",
358
+ :type => "checkbox",
359
+ :value => jane.id })
360
+ end
361
+ end
362
+ end
363
+
364
+ describe "conditional display" do
365
+ context "with :if block" do
366
+ it "should be displayed if true" do
367
+ body = filter :body, if: proc{true}
368
+ body.should have_tag "input", attributes: {name: "q[body_contains]"}
369
+ end
370
+
371
+ it "should NOT be displayed if false" do
372
+ body = filter :author, if: proc{false}
373
+ body.should_not have_tag "input", attributes: {name: "q[author_id_eq]"}
374
+ end
375
+ end
376
+
377
+ context "with :unless block" do
378
+ it "should be displayed if false" do
379
+ body = filter :created_at, unless: proc{false}
380
+ body.should have_tag "input", attributes: {name: "q[created_at_gteq]"}
381
+ end
382
+
383
+ it "should NOT be displayed if true" do
384
+ body = filter :updated_at, unless: proc{true}
385
+ body.should_not have_tag "input", attributes: {name: "q[updated_at_gteq]"}
386
+ end
387
+ end
388
+ end
389
+
390
+ describe "custom search methods" do
391
+
392
+ it "should work as select" do
393
+ body = filter :custom_searcher, as: :select, collection: ['foo']
394
+ body.should have_tag "select", attributes: { name: "q[custom_searcher]" }
395
+ end
396
+
397
+ it "should work as string" do
398
+ body = filter :custom_searcher, as: :string
399
+ body.should have_tag "input", attributes: { name: "q[custom_searcher]" }
400
+ end
401
+ end
402
+
403
+ describe "blank option" do
404
+ context "for a select filter" do
405
+ it "should be there by default" do
406
+ filter(:author).should have_tag "option", "Any"
407
+ end
408
+ it "should be able to be disabled" do
409
+ filter(:author, include_blank: false).should_not have_tag "option", "Any"
410
+ end
411
+ end
412
+
413
+ context "for a multi-select filter" do
414
+ it "should not be there by default" do
415
+ filter(:author, multiple: true).should_not have_tag "option", "Any"
416
+ end
417
+ it "should be able to be enabled" do
418
+ filter(:author, multiple: true, include_blank: true).should have_tag "option", "Any"
419
+ end
420
+ end
421
+ end
422
+
423
+ end
@@ -0,0 +1,119 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveAdmin::Filters::ResourceExtension do
4
+
5
+ let(:resource) do
6
+ namespace = ActiveAdmin::Namespace.new(ActiveAdmin::Application.new, :admin)
7
+ namespace.register(Post)
8
+ end
9
+
10
+ it "should return the defaults if no filters are set" do
11
+ resource.filters.keys.sort.should == [
12
+ :author, :body, :category, :created_at, :published_at, :starred, :title, :updated_at
13
+ ]
14
+ end
15
+
16
+ it "should not have defaults when filters are disabled on the resource" do
17
+ resource.filters = false
18
+ resource.filters.should be_empty
19
+ end
20
+
21
+ it "should not have defaults when the filters are disabled on the namespace" do
22
+ resource.namespace.filters = false
23
+ resource.filters.should be_empty
24
+ end
25
+
26
+ it "should not have defaults when the filters are disabled on the application" do
27
+ resource.namespace.application.filters = false
28
+ resource.filters.should be_empty
29
+ end
30
+
31
+ describe "removing a filter" do
32
+ it "should work" do
33
+ resource.filters.keys.should include :author
34
+ resource.remove_filter :author
35
+ resource.filters.keys.should_not include :author
36
+ end
37
+
38
+ it "should work as a string" do
39
+ resource.filters.keys.should include :author
40
+ resource.remove_filter 'author'
41
+ resource.filters.keys.should_not include :author
42
+ end
43
+
44
+ it "should be lazy" do
45
+ resource.should_not_receive :default_filters # this hits the DB
46
+ resource.remove_filter :author
47
+ end
48
+
49
+ it "should not prevent the default filters from being added" do
50
+ resource.remove_filter :author
51
+ resource.filters.should_not be_empty
52
+ end
53
+
54
+ it "should raise an exception when filters are disabled" do
55
+ resource.filters = false
56
+ expect{ resource.remove_filter :author }.to raise_error ActiveAdmin::Filters::Disabled
57
+ end
58
+ end
59
+
60
+ describe "adding a filter" do
61
+ it "should work" do
62
+ resource.add_filter :title
63
+ resource.filters.should eq title: {}
64
+ end
65
+
66
+ it "should work as a string" do
67
+ resource.add_filter 'title'
68
+ resource.filters.should eq title: {}
69
+ end
70
+
71
+ it "should work with specified options" do
72
+ resource.add_filter :title, as: :string
73
+ resource.filters.should eq title: {as: :string}
74
+ end
75
+
76
+ it "should override an existing filter" do
77
+ resource.add_filter :title, one: :two
78
+ resource.add_filter :title, three: :four
79
+
80
+ resource.filters.should eq title: {three: :four}
81
+ end
82
+
83
+ it "should keep specified options" do
84
+ resource.add_filter :title, one: :two
85
+
86
+ resource.filters.each do |attribute, opts|
87
+ opts.delete(:one)
88
+ end
89
+
90
+ resource.filters.should eq title: {one: :two}
91
+ end
92
+
93
+ it "should preserve default filters" do
94
+ resource.preserve_default_filters!
95
+ resource.add_filter :count, as: :string
96
+
97
+ resource.filters.keys.sort.should == [
98
+ :author, :body, :category, :count, :created_at, :published_at, :starred, :title, :updated_at
99
+ ]
100
+ end
101
+
102
+ it "should raise an exception when filters are disabled" do
103
+ resource.filters = false
104
+ expect{ resource.add_filter :title }.to raise_error ActiveAdmin::Filters::Disabled
105
+ end
106
+ end
107
+
108
+ it "should reset filters" do
109
+ resource.add_filter :title
110
+ resource.filters.size.should == 1
111
+ resource.reset_filters!
112
+ resource.filters.size.should > 1
113
+ end
114
+
115
+ it "should add a sidebar section for the filters" do
116
+ resource.sidebar_sections.first.name.should == :filters
117
+ end
118
+
119
+ end