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,160 @@
1
+ require 'spec_helper'
2
+ require 'active_admin/resource_collection'
3
+
4
+ include ActiveAdmin
5
+
6
+ describe ActiveAdmin::ResourceCollection do
7
+ let(:application) { ActiveAdmin::Application.new }
8
+ let(:namespace) { ActiveAdmin::Namespace.new(application, :admin) }
9
+
10
+ let(:collection){ ResourceCollection.new }
11
+
12
+ let(:resource){ double resource_name: "MyResource" }
13
+
14
+ it "should have no resources when new" do
15
+ collection.should be_empty
16
+ end
17
+
18
+ it "should be enumerable" do
19
+ collection.add(resource)
20
+ collection.each{ |r| r.should == resource }
21
+ end
22
+
23
+ it "should return the available keys" do
24
+ collection.add resource
25
+ collection.keys.should == [resource.resource_name]
26
+ end
27
+
28
+ describe "adding a new resource" do
29
+ it "should return the resource" do
30
+ collection.add(resource).should == resource
31
+ end
32
+
33
+ it "should add a new resource" do
34
+ collection.add(resource)
35
+ collection.values.should == [resource]
36
+ end
37
+
38
+ it "should be available by name" do
39
+ collection.add(resource)
40
+ collection[resource.resource_name].should == resource
41
+ end
42
+
43
+ it "shouldn't happen twice" do
44
+ collection.add(resource); collection.add(resource)
45
+ collection.values.should == [resource]
46
+ end
47
+ end
48
+
49
+ describe "#[]" do
50
+ let(:resource) { Resource.new(namespace, resource_class) }
51
+ let(:inherited_resource) { Resource.new(namespace, inherited_resource_class) }
52
+
53
+ let(:resource_class) { User }
54
+ let(:inherited_resource_class) { Publisher }
55
+ let(:unregistered_class) { Category }
56
+
57
+ context "with resources" do
58
+ before do
59
+ collection.add resource
60
+ collection.add inherited_resource
61
+ end
62
+
63
+ it "should find resource by class" do
64
+ collection[resource_class].should == resource
65
+ end
66
+
67
+ it "should find resource by class string" do
68
+ collection[resource_class.to_s].should == resource
69
+ end
70
+
71
+ it "should find inherited resource by class" do
72
+ collection[inherited_resource_class].should == inherited_resource
73
+ end
74
+
75
+ it "should find inherited resource by class string" do
76
+ collection[inherited_resource_class.to_s].should == inherited_resource
77
+ end
78
+
79
+ it "should return nil when the resource_class does not respond to base_class and it is not in the collection" do
80
+ collection[double].should == nil
81
+ end
82
+
83
+ it "should return nil when a resource class is NOT in the collection" do
84
+ collection[unregistered_class].should == nil
85
+ end
86
+ end
87
+
88
+ context "without inherited resources" do
89
+ before do
90
+ collection.add resource
91
+ end
92
+
93
+ it "should find resource by inherited class" do
94
+ collection[inherited_resource_class].should == resource
95
+ end
96
+ end
97
+
98
+ context "with a renamed resource" do
99
+ let(:renamed_resource) { Resource.new(namespace, resource_class, :as => name) }
100
+ let(:name) { "Administrators" }
101
+
102
+ before do
103
+ collection.add renamed_resource
104
+ end
105
+
106
+ it "should find resource by class" do
107
+ collection[resource_class].should == renamed_resource
108
+ end
109
+
110
+ it "should find resource by class string" do
111
+ collection[resource_class.to_s].should == renamed_resource
112
+ end
113
+
114
+ it "should find resource by name" do
115
+ collection[name].should == renamed_resource
116
+ end
117
+ end
118
+ end
119
+
120
+ describe ".add" do
121
+ let(:resource) { Resource.new(namespace, Category) }
122
+ let(:resource_renamed) { Resource.new(namespace, Category, as: "Subcategory") }
123
+
124
+ context "when renamed resource is added first" do
125
+ before do
126
+ collection.add(resource_renamed)
127
+ collection.add(resource)
128
+ end
129
+
130
+ it "contains both resources" do
131
+ collection.values.should include(resource, resource_renamed)
132
+ end
133
+ end
134
+
135
+ context "when resource is added first" do
136
+ before do
137
+ collection.add(resource)
138
+ collection.add(resource_renamed)
139
+ end
140
+
141
+ it "contains both resources" do
142
+ collection.values.should include(resource, resource_renamed)
143
+ end
144
+ end
145
+
146
+ context "when a duplicate resource is added" do
147
+ let(:resource_duplicate) { Resource.new(namespace, Category) }
148
+
149
+ before do
150
+ collection.add(resource)
151
+ collection.add(resource_duplicate)
152
+ end
153
+
154
+ it "the collection contains one instance of that resource" do
155
+ collection.values.should eq([resource])
156
+ end
157
+ end
158
+ end
159
+
160
+ end
@@ -0,0 +1,73 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveAdmin::ResourceController::DataAccess do
4
+ let(:params) do
5
+ {}
6
+ end
7
+
8
+ let(:controller) do
9
+ rc = Admin::PostsController.new
10
+ rc.stub(:params) do
11
+ params
12
+ end
13
+ rc
14
+ end
15
+
16
+ describe "searching" do
17
+ let(:params){ {:q => {} }}
18
+ it "should call the search method" do
19
+ chain = double "ChainObj"
20
+ chain.should_receive(:ransack).with(params[:q]).once.and_return(Post.ransack)
21
+ controller.send :apply_filtering, chain
22
+ end
23
+
24
+ end
25
+
26
+ describe "sorting" do
27
+
28
+ context "for table columns" do
29
+ let(:params){ {:order => "id_asc" }}
30
+ it "should prepend the table name" do
31
+ chain = double "ChainObj"
32
+ chain.should_receive(:reorder).with('"posts"."id" asc').once.and_return(Post.search)
33
+ controller.send :apply_sorting, chain
34
+ end
35
+ end
36
+
37
+ context "for virtual columns" do
38
+ let(:params){ {:order => "virtual_id_asc" }}
39
+ it "should not prepend the table name" do
40
+ chain = double "ChainObj"
41
+ chain.should_receive(:reorder).with('"virtual_id" asc').once.and_return(Post.search)
42
+ controller.send :apply_sorting, chain
43
+ end
44
+ end
45
+
46
+ end
47
+
48
+ describe "scoping" do
49
+
50
+ context "when no current scope" do
51
+ it "should set collection_before_scope to the chain and return the chain" do
52
+ chain = double "ChainObj"
53
+ controller.send(:apply_scoping, chain).should == chain
54
+ controller.send(:collection_before_scope).should == chain
55
+ end
56
+ end
57
+
58
+ context "when current scope" do
59
+ it "should set collection_before_scope to the chain and return the scoped chain" do
60
+ chain = double "ChainObj"
61
+ scoped_chain = double "ScopedChain"
62
+ current_scope = double "CurrentScope"
63
+ controller.stub(:current_scope) { current_scope }
64
+
65
+ controller.should_receive(:scope_chain).with(current_scope, chain) { scoped_chain }
66
+ controller.send(:apply_scoping, chain).should == scoped_chain
67
+ controller.send(:collection_before_scope).should == chain
68
+ end
69
+ end
70
+
71
+ end
72
+
73
+ end
@@ -0,0 +1,46 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveAdmin::ResourceController::Sidebars do
4
+ let(:controller){ Admin::PostsController }
5
+
6
+ context 'without before_filter' do
7
+ before do
8
+ ActiveAdmin.register Post
9
+ end
10
+
11
+ subject { find_before_filter controller, :skip_sidebar! }
12
+
13
+ it { should set_skip_sidebar_to nil }
14
+ end
15
+
16
+ describe '#skip_sidebar!' do
17
+ before do
18
+ ActiveAdmin.register Post do
19
+ before_filter :skip_sidebar!
20
+ end
21
+ end
22
+
23
+ subject { find_before_filter controller, :skip_sidebar! }
24
+
25
+ it { should set_skip_sidebar_to true }
26
+ end
27
+
28
+ def find_before_filter(controller, filter)
29
+ #raise controller._process_action_callbacks.map(&:filter).inspect
30
+ controller._process_action_callbacks.detect { |f| f.raw_filter == filter.to_sym }
31
+ end
32
+
33
+ RSpec::Matchers.define :set_skip_sidebar_to do |expected|
34
+ match do |filter|
35
+ klass = filter && filter.klass || controller
36
+ object = klass.new
37
+ object.send filter.raw_filter if filter
38
+ @actual = object.instance_variable_get(:@skip_sidebar)
39
+ @actual == expected
40
+ end
41
+
42
+ failure_message_for_should do |filter|
43
+ message = "expected before_filter to set @skip_sidebar to '#{expected}', but was '#{@actual}'"
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,265 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveAdmin::ResourceController do
4
+
5
+ before(:all) { load_defaults! }
6
+
7
+ let(:controller) { ActiveAdmin::ResourceController.new }
8
+
9
+ describe "authenticating the user" do
10
+ let(:controller){ Admin::PostsController.new }
11
+
12
+ it "should do nothing when no authentication_method set" do
13
+ namespace = controller.class.active_admin_config.namespace
14
+ namespace.should_receive(:authentication_method).once.and_return(nil)
15
+
16
+ controller.send(:authenticate_active_admin_user)
17
+ end
18
+
19
+ it "should call the authentication_method when set" do
20
+ namespace = controller.class.active_admin_config.namespace
21
+
22
+ namespace.should_receive(:authentication_method).twice.
23
+ and_return(:authenticate_admin_user!)
24
+
25
+ controller.should_receive(:authenticate_admin_user!).and_return(true)
26
+
27
+ controller.send(:authenticate_active_admin_user)
28
+ end
29
+
30
+ end
31
+
32
+ describe "retrieving the current user" do
33
+ let(:controller){ Admin::PostsController.new }
34
+
35
+ it "should return nil when no current_user_method set" do
36
+ namespace = controller.class.active_admin_config.namespace
37
+ namespace.should_receive(:current_user_method).once.and_return(nil)
38
+
39
+ controller.send(:current_active_admin_user).should == nil
40
+ end
41
+
42
+ it "should call the current_user_method when set" do
43
+ user = double
44
+ namespace = controller.class.active_admin_config.namespace
45
+
46
+ namespace.should_receive(:current_user_method).twice.
47
+ and_return(:current_admin_user)
48
+
49
+ controller.should_receive(:current_admin_user).and_return(user)
50
+
51
+ controller.send(:current_active_admin_user).should == user
52
+ end
53
+ end
54
+
55
+
56
+ describe "callbacks" do
57
+ before :all do
58
+ application = ::ActiveAdmin::Application.new
59
+ namespace = ActiveAdmin::Namespace.new(application, :admin)
60
+ namespace.register Post do
61
+ after_build :call_after_build
62
+ before_save :call_before_save
63
+ after_save :call_after_save
64
+ before_create :call_before_create
65
+ after_create :call_after_create
66
+ before_update :call_before_update
67
+ after_update :call_after_update
68
+ before_destroy :call_before_destroy
69
+ after_destroy :call_after_destroy
70
+
71
+ controller do
72
+ def call_after_build(obj); end
73
+ def call_before_save(obj); end
74
+ def call_after_save(obj); end
75
+ def call_before_create(obj); end
76
+ def call_after_create(obj); end
77
+ def call_before_update(obj); end
78
+ def call_after_update(obj); end
79
+ def call_before_destroy(obj); end
80
+ def call_after_destroy(obj); end
81
+ end
82
+ end
83
+ end
84
+
85
+ describe "performing create" do
86
+ let(:controller){ Admin::PostsController.new }
87
+ let(:resource){ double("Resource", :save => true) }
88
+
89
+ before do
90
+ resource.should_receive(:save)
91
+ end
92
+
93
+ it "should call the before create callback" do
94
+ controller.should_receive(:call_before_create).with(resource)
95
+ controller.send :create_resource, resource
96
+ end
97
+ it "should call the before save callback" do
98
+ controller.should_receive(:call_before_save).with(resource)
99
+ controller.send :create_resource, resource
100
+ end
101
+ it "should call the after save callback" do
102
+ controller.should_receive(:call_after_save).with(resource)
103
+ controller.send :create_resource, resource
104
+ end
105
+ it "should call the after create callback" do
106
+ controller.should_receive(:call_after_create).with(resource)
107
+ controller.send :create_resource, resource
108
+ end
109
+ end
110
+
111
+ describe "performing update" do
112
+ let(:controller){ Admin::PostsController.new }
113
+ let(:resource){ double("Resource", :attributes= => true, :save => true) }
114
+ let(:attributes){ [{}] }
115
+
116
+ before do
117
+ resource.should_receive(:attributes=).with(attributes[0])
118
+ resource.should_receive(:save)
119
+ end
120
+
121
+ it "should call the before update callback" do
122
+ controller.should_receive(:call_before_update).with(resource)
123
+ controller.send :update_resource, resource, attributes
124
+ end
125
+ it "should call the before save callback" do
126
+ controller.should_receive(:call_before_save).with(resource)
127
+ controller.send :update_resource, resource, attributes
128
+ end
129
+ it "should call the after save callback" do
130
+ controller.should_receive(:call_after_save).with(resource)
131
+ controller.send :update_resource, resource, attributes
132
+ end
133
+ it "should call the after create callback" do
134
+ controller.should_receive(:call_after_update).with(resource)
135
+ controller.send :update_resource, resource, attributes
136
+ end
137
+ end
138
+
139
+ describe "performing destroy" do
140
+ let(:controller){ Admin::PostsController.new }
141
+ let(:resource){ double("Resource", :destroy => true) }
142
+
143
+ before do
144
+ resource.should_receive(:destroy)
145
+ end
146
+
147
+ it "should call the before destroy callback" do
148
+ controller.should_receive(:call_before_destroy).with(resource)
149
+ controller.send :destroy_resource, resource
150
+ end
151
+
152
+ it "should call the after destroy callback" do
153
+ controller.should_receive(:call_after_destroy).with(resource)
154
+ controller.send :destroy_resource, resource
155
+ end
156
+ end
157
+ end
158
+ end
159
+
160
+ describe Admin::PostsController, :type => "controller" do
161
+
162
+ describe 'retreiving the resource' do
163
+ let(:controller){ Admin::PostsController.new }
164
+ let(:post) { Post.new :title => "An incledibly unique Post Title" }
165
+
166
+ before do
167
+ Post.stub(:find).and_return(post)
168
+ controller.class_eval { public :resource }
169
+ controller.stub(:params).and_return({ :id => '1' })
170
+ end
171
+
172
+ subject { controller.resource }
173
+
174
+ it "returns a Post" do
175
+ subject.should be_kind_of(Post)
176
+ end
177
+
178
+ context 'with a decorator' do
179
+ let(:config) { controller.class.active_admin_config }
180
+ before { config.decorator_class_name = '::PostDecorator' }
181
+ it 'returns a PostDecorator' do
182
+ subject.should be_kind_of(PostDecorator)
183
+ end
184
+
185
+ it 'returns a PostDecorator that wraps the post' do
186
+ subject.title.should == post.title
187
+ end
188
+ end
189
+ end
190
+
191
+ describe 'retreiving the resource collection' do
192
+ let(:controller){ Admin::PostsController.new }
193
+ before do
194
+ Post.create!(:title => "An incledibly unique Post Title") if Post.count == 0
195
+ controller.class_eval { public :collection }
196
+ end
197
+
198
+ subject { controller.collection }
199
+
200
+ it {
201
+ pending # doesn't pass when running whole spec suite (WTF)
202
+ should be_kind_of(ActiveRecord::Relation)
203
+ }
204
+
205
+ it "returns a collection of posts" do
206
+ pending # doesn't pass when running whole spec suite (WTF)
207
+ subject.first.should be_kind_of(Post)
208
+ end
209
+
210
+ context 'with a decorator' do
211
+ let(:config) { controller.class.active_admin_config }
212
+ before { config.decorator_class_name = '::PostDecorator' }
213
+
214
+ it 'returns a PostDecorator' do
215
+ pending # doesn't pass when running whole spec suite (WTF)
216
+ subject.should be_kind_of(PostDecorator::DecoratedEnumerableProxy)
217
+ end
218
+
219
+ it 'returns a PostDecorator that wraps the post' do
220
+ pending # doesn't pass when running whole spec suite (WTF)
221
+ subject.first.title.should == Post.first.title
222
+ end
223
+ end
224
+ end
225
+
226
+
227
+ describe "performing batch_action" do
228
+ let(:controller){ Admin::PostsController.new }
229
+ before do
230
+ batch_action = ActiveAdmin::BatchAction.new :flag, "Flag" do
231
+ redirect_to collection_path
232
+ end
233
+
234
+ controller.class.active_admin_config.stub(:batch_actions).and_return([batch_action])
235
+ end
236
+
237
+ describe "when params batch_action matches existing BatchAction" do
238
+ it "should call the block with args" do
239
+ pending # dont know how to check if the block was called
240
+ end
241
+ end
242
+
243
+ describe "when params batch_action doesn't match a BatchAction" do
244
+ it "should raise an error" do
245
+ pending # doesn't pass when running whole spec suite (WTF)
246
+
247
+ expect {
248
+ post(:batch_action, :batch_action => "derp", :collection_selection => ["1"])
249
+ }.to raise_error("Couldn't find batch action \"derp\"")
250
+ end
251
+ end
252
+
253
+ describe "when params batch_action is blank" do
254
+ it "should raise an error" do
255
+ pending # doesn't pass when running whole spec suite (WTF)
256
+
257
+ expect {
258
+ post(:batch_action, :collection_selection => ["1"])
259
+ }.to raise_error("Couldn't find batch action \"\"")
260
+ end
261
+ end
262
+
263
+ end
264
+
265
+ end
@@ -0,0 +1,56 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Registering an object to administer" do
4
+ application = ActiveAdmin::Application.new
5
+
6
+ context "with no configuration" do
7
+ namespace = ActiveAdmin::Namespace.new(application, :admin)
8
+ it "should call register on the namespace" do
9
+ application.namespaces[namespace.name] = namespace
10
+ namespace.should_receive(:register)
11
+
12
+ application.register Category
13
+ end
14
+
15
+ it "should dispatch a Resource::RegisterEvent" do
16
+ ActiveAdmin::Event.should_receive(:dispatch).with(ActiveAdmin::Resource::RegisterEvent, an_instance_of(ActiveAdmin::Resource))
17
+ application.register Category
18
+ end
19
+ end
20
+
21
+ context "with a different namespace" do
22
+ it "should call register on the namespace" do
23
+ namespace = ActiveAdmin::Namespace.new(application, :hello_world)
24
+ application.namespaces[namespace.name] = namespace
25
+ namespace.should_receive(:register)
26
+
27
+ application.register Category, :namespace => :hello_world
28
+ end
29
+
30
+ it "should generate a Namespace::RegisterEvent and a Resource::RegisterEvent" do
31
+ ActiveAdmin::Event.should_receive(:dispatch).with(ActiveAdmin::Namespace::RegisterEvent, an_instance_of(ActiveAdmin::Namespace))
32
+ ActiveAdmin::Event.should_receive(:dispatch).with(ActiveAdmin::Resource::RegisterEvent, an_instance_of(ActiveAdmin::Resource))
33
+ application.register Category, :namespace => :not_yet_created
34
+ end
35
+ end
36
+
37
+ context "with no namespace" do
38
+ it "should call register on the root namespace" do
39
+ namespace = ActiveAdmin::Namespace.new(application, :root)
40
+ application.namespaces[namespace.name] = namespace
41
+ namespace.should_receive(:register)
42
+
43
+ application.register Category, :namespace => false
44
+ end
45
+ end
46
+
47
+ context "when being registered multiple times" do
48
+ it "should run the dsl in the same config object" do
49
+ config_1 = ActiveAdmin.register(Category) { filter :name }
50
+ config_2 = ActiveAdmin.register(Category) { filter :id }
51
+ config_1.should == config_2
52
+ config_1.filters.size.should == 2
53
+ end
54
+ end
55
+
56
+ end