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,141 @@
1
+ require 'spec_helper'
2
+ require 'fileutils'
3
+
4
+ describe ActiveAdmin::Application do
5
+
6
+ let(:application) do
7
+ ActiveAdmin::Application.new.tap do |app|
8
+ # Manually override the load paths becuase RSpec messes these up
9
+ app.load_paths = [File.expand_path('app/admin', Rails.root)]
10
+ end
11
+ end
12
+
13
+ it "should have a default load path of ['app/admin']" do
14
+ application.load_paths.should == [File.expand_path('app/admin', Rails.root)]
15
+ end
16
+
17
+ it "should remove app/admin from the autoload paths (Active Admin deals with loading)" do
18
+ ActiveSupport::Dependencies.autoload_paths.should_not include(File.join(Rails.root, "app/admin"))
19
+ end
20
+
21
+ it "should add app/admin to the Engine's watchable directories (loaded after the app itself)" do
22
+ ActiveAdmin::Engine.config.watchable_dirs.should have_key File.join(Rails.root, "app/admin")
23
+ end
24
+
25
+ it "should store the site's title" do
26
+ application.site_title.should == ""
27
+ end
28
+
29
+ it "should set the site title" do
30
+ application.site_title = "New Title"
31
+ application.site_title.should == "New Title"
32
+ end
33
+
34
+ it "should store the site's title link" do
35
+ application.site_title_link.should == ""
36
+ end
37
+
38
+ it "should set the site's title link" do
39
+ application.site_title_link = "http://www.mygreatsite.com"
40
+ application.site_title_link.should == "http://www.mygreatsite.com"
41
+ end
42
+
43
+ it "should store the site's title image" do
44
+ application.site_title_image.should == ""
45
+ end
46
+
47
+ it "should set the site's title image" do
48
+ application.site_title_image = "http://railscasts.com/assets/episodes/stills/284-active-admin.png?1316476106"
49
+ application.site_title_image.should == "http://railscasts.com/assets/episodes/stills/284-active-admin.png?1316476106"
50
+ end
51
+
52
+ it "should store the site's favicon" do
53
+ application.favicon.should == false
54
+ end
55
+
56
+ it "should set the site's favicon" do
57
+ application.favicon = "/a/favicon.ico"
58
+ application.favicon.should == "/a/favicon.ico"
59
+ end
60
+
61
+ it "should have a view factory" do
62
+ application.view_factory.should be_an_instance_of(ActiveAdmin::ViewFactory)
63
+ end
64
+
65
+ it "should allow comments by default" do
66
+ application.allow_comments.should == true
67
+ end
68
+
69
+ describe "authentication settings" do
70
+
71
+ it "should have no default current_user_method" do
72
+ application.current_user_method.should == false
73
+ end
74
+
75
+ it "should have no default authentication method" do
76
+ application.authentication_method.should == false
77
+ end
78
+
79
+ it "should have a logout link path (Devise's default)" do
80
+ application.logout_link_path.should == :destroy_admin_user_session_path
81
+ end
82
+
83
+ it "should have a logout link method (Devise's default)" do
84
+ application.logout_link_method.should == :get
85
+ end
86
+ end
87
+
88
+ describe "files in load path" do
89
+ it "should load files in the first level directory" do
90
+ application.files.should include(File.expand_path("app/admin/dashboard.rb", Rails.root))
91
+ end
92
+
93
+ it "should load files from subdirectories" do
94
+ FileUtils.mkdir_p(File.expand_path("app/admin/public", Rails.root))
95
+ test_file = File.expand_path("app/admin/public/posts.rb", Rails.root)
96
+ FileUtils.touch(test_file)
97
+ application.files.should include(test_file)
98
+ end
99
+ end
100
+
101
+ describe "#namespace" do
102
+
103
+ it "should yield a new namespace" do
104
+ application.namespace :new_namespace do |ns|
105
+ ns.name.should == :new_namespace
106
+ end
107
+ end
108
+
109
+ it "should return an instantiated namespace" do
110
+ admin = application.namespace :admin
111
+ admin.should == application.namespaces[:admin]
112
+ end
113
+
114
+ it "should yield an existing namespace" do
115
+ expect {
116
+ application.namespace :admin do |ns|
117
+ ns.should == application.namespaces[:admin]
118
+ raise "found"
119
+ end
120
+ }.to raise_error("found")
121
+ end
122
+
123
+ it "should not pollute the global app" do
124
+ application.namespaces.keys.should be_empty
125
+ application.namespace(:brand_new_ns)
126
+ application.namespaces.keys.should eq [:brand_new_ns]
127
+ ActiveAdmin.application.namespaces.keys.should eq [:admin]
128
+ end
129
+ end
130
+
131
+ describe "#register_page" do
132
+ it "finds or create the namespace and register the page to it" do
133
+ namespace = double
134
+ application.should_receive(:namespace).with("public").and_return namespace
135
+ namespace.should_receive(:register_page).with("My Page", {:namespace => "public"})
136
+
137
+ application.register_page("My Page", :namespace => "public")
138
+ end
139
+ end
140
+
141
+ end
@@ -0,0 +1,52 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveAdmin::AssetRegistration do
4
+ include ActiveAdmin::AssetRegistration
5
+
6
+ before do
7
+ clear_stylesheets!
8
+ clear_javascripts!
9
+ end
10
+
11
+ it "should register a stylesheet file" do
12
+ register_stylesheet "active_admin.css"
13
+ stylesheets.length.should == 1
14
+ stylesheets.keys.first.should == "active_admin.css"
15
+ end
16
+
17
+ it "should clear all existing stylesheets" do
18
+ register_stylesheet "active_admin.css"
19
+ stylesheets.length.should == 1
20
+ clear_stylesheets!
21
+ stylesheets.should be_empty
22
+ end
23
+
24
+ it "should allow media option when registering stylesheet" do
25
+ register_stylesheet "active_admin.css", media: :print
26
+ stylesheets.values.first[:media].should == :print
27
+ end
28
+
29
+ it "shouldn't register a stylesheet twice" do
30
+ register_stylesheet "active_admin.css"
31
+ register_stylesheet "active_admin.css"
32
+ stylesheets.length.should == 1
33
+ end
34
+
35
+ it "should register a javascript file" do
36
+ register_javascript "active_admin.js"
37
+ javascripts.should == ["active_admin.js"].to_set
38
+ end
39
+
40
+ it "should clear all existing javascripts" do
41
+ register_javascript "active_admin.js"
42
+ javascripts.should == ["active_admin.js"].to_set
43
+ clear_javascripts!
44
+ javascripts.should be_empty
45
+ end
46
+
47
+ it "shouldn't register a javascript twice" do
48
+ register_javascript "active_admin.js"
49
+ register_javascript "active_admin.js"
50
+ javascripts.length.should == 1
51
+ end
52
+ end
@@ -0,0 +1,61 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveAdmin::AuthorizationAdapter do
4
+
5
+ let(:adapter) { ActiveAdmin::AuthorizationAdapter.new(double, double) }
6
+
7
+ describe "#authorized?" do
8
+
9
+ it "should always return true" do
10
+ adapter.authorized?(:read, "Resource").should == true
11
+ end
12
+
13
+ end
14
+
15
+ describe "#scope_collection" do
16
+
17
+ it "should return the collection unscoped" do
18
+ collection = double
19
+ adapter.scope_collection(collection, ActiveAdmin::Auth::READ).should == collection
20
+ end
21
+
22
+ end
23
+
24
+ describe "using #normalized in a subclass" do
25
+
26
+ let(:auth_class) do
27
+ Class.new(ActiveAdmin::AuthorizationAdapter) do
28
+
29
+ def authorized?(action, subject = nil)
30
+ case subject
31
+ when normalized(String)
32
+ true
33
+ else
34
+ false
35
+ end
36
+ end
37
+
38
+ end
39
+ end
40
+
41
+ let(:adapter) { auth_class.new(double, double) }
42
+
43
+ it "should match against a class" do
44
+ adapter.authorized?(:read, String).should == true
45
+ end
46
+
47
+ it 'should match against an instance' do
48
+ adapter.authorized?(:read, "String").should == true
49
+ end
50
+
51
+ it 'should not match a different class' do
52
+ adapter.authorized?(:read, Hash).should == false
53
+ end
54
+
55
+ it 'should not match a different instance' do
56
+ adapter.authorized?(:read, {}).should == false
57
+ end
58
+
59
+ end
60
+
61
+ end
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+ Auth = ActiveAdmin::Authorization
3
+
4
+ describe Admin::PostsController, "Controller Authorization", :type => :controller do
5
+
6
+ let(:authorization){ controller.send(:active_admin_authorization) }
7
+
8
+ before do
9
+ load_defaults!
10
+ # HACK: the AA config is missing, so we throw it in here
11
+ controller.class.active_admin_config = ActiveAdmin.application.namespace(:admin).resources['Post'].controller.active_admin_config
12
+ end
13
+
14
+ it "should authorize the index action" do
15
+ authorization.should_receive(:authorized?).with(Auth::READ, Post).and_return true
16
+ get :index
17
+ response.should be_success
18
+ end
19
+
20
+ it "should authorize the new action" do
21
+ authorization.should_receive(:authorized?).with(Auth::CREATE, an_instance_of(Post)).and_return true
22
+ get :new
23
+ response.should be_success
24
+ end
25
+
26
+ it "should authorize the create action with the new resource" do
27
+ authorization.should_receive(:authorized?).with(Auth::CREATE, an_instance_of(Post)).and_return true
28
+ post :create
29
+ response.should redirect_to action: 'show', id: Post.last.id
30
+ end
31
+
32
+ it "should redirect when the user isn't authorized" do
33
+ authorization.should_receive(:authorized?).with(Auth::READ, Post).and_return false
34
+ get :index
35
+ response.body.should eq '<html><body>You are being <a href="http://test.host/admin">redirected</a>.</body></html>'
36
+ response.should redirect_to '/admin'
37
+ end
38
+
39
+ end
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+
3
+ describe "auto linking resources" do
4
+ include ActiveAdmin::ViewHelpers::ActiveAdminApplicationHelper
5
+ include ActiveAdmin::ViewHelpers::AutoLinkHelper
6
+ include ActiveAdmin::ViewHelpers::DisplayHelper
7
+
8
+ let(:active_admin_config) { double namespace: namespace }
9
+ let(:active_admin_namespace){ ActiveAdmin::Namespace.new(ActiveAdmin::Application.new, :admin) }
10
+ let(:post){ Post.create! :title => "Hello World" }
11
+
12
+ def admin_post_path(post)
13
+ "/admin/posts/#{post.id}"
14
+ end
15
+
16
+ context "when the resource is not registered" do
17
+ it "should return the display name of the object" do
18
+ auto_link(post).should == "Hello World"
19
+ end
20
+ end
21
+
22
+ context "when the resource is registered" do
23
+ before do
24
+ active_admin_namespace.register Post
25
+ end
26
+ it "should return a link with the display name of the object" do
27
+ self.should_receive(:link_to).with("Hello World", admin_post_path(post))
28
+ auto_link(post)
29
+ end
30
+ end
31
+
32
+ end
@@ -0,0 +1,91 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveAdmin::BatchActions::ResourceExtension do
4
+
5
+ let(:resource) do
6
+ namespace = ActiveAdmin::Namespace.new(ActiveAdmin::Application.new, :admin)
7
+ namespace.batch_actions = true
8
+ namespace.register(Post)
9
+ end
10
+
11
+ describe "default action" do
12
+
13
+ it "should have the default action by default" do
14
+ resource.batch_actions.size.should == 1 and resource.batch_actions.first.sym == :destroy
15
+ end
16
+
17
+ end
18
+
19
+ describe "adding a new batch action" do
20
+
21
+ before do
22
+ resource.clear_batch_actions!
23
+ resource.add_batch_action :flag, "Flag" do
24
+ # Empty
25
+ end
26
+ end
27
+
28
+ it "should add an batch action" do
29
+ resource.batch_actions.size.should == 1
30
+ end
31
+
32
+ it "should store an instance of BatchAction" do
33
+ resource.batch_actions.first.should be_an_instance_of(ActiveAdmin::BatchAction)
34
+ end
35
+
36
+ it "should store the block in the batch action" do
37
+ resource.batch_actions.first.block.should_not be_nil
38
+ end
39
+
40
+ end
41
+
42
+ describe "removing batch action" do
43
+
44
+ before do
45
+ resource.remove_batch_action :destroy
46
+ end
47
+
48
+ it "should allow for batch action removal" do
49
+ resource.batch_actions.size.should == 0
50
+ end
51
+
52
+ end
53
+
54
+ describe "#batch_action_path" do
55
+
56
+ it "returns the path as a symbol" do
57
+ resource.batch_action_path.should == "/admin/posts/batch_action"
58
+ end
59
+
60
+ end
61
+
62
+ describe "#display_if_block" do
63
+
64
+ it "should return true by default" do
65
+ action = ActiveAdmin::BatchAction.new :default, "Default"
66
+ action.display_if_block.call.should == true
67
+ end
68
+
69
+ it "should return the :if block if set" do
70
+ action = ActiveAdmin::BatchAction.new :with_block, "With Block", :if => proc { false }
71
+ action.display_if_block.call.should == false
72
+ end
73
+
74
+ end
75
+
76
+ describe "batch action priority" do
77
+
78
+ it "should have a default priority" do
79
+ action = ActiveAdmin::BatchAction.new :default, "Default"
80
+ action.priority.should == 10
81
+ end
82
+
83
+ it "should correctly order two actions" do
84
+ priority_one = ActiveAdmin::BatchAction.new :one, "One", :priority => 1
85
+ priority_ten = ActiveAdmin::BatchAction.new :ten, "Ten", :priority => 10
86
+ priority_one.should be < priority_ten
87
+ end
88
+
89
+ end
90
+
91
+ end
@@ -0,0 +1,61 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Batch Actions Settings" do
4
+ let(:app) { ActiveAdmin::Application.new }
5
+ let(:ns) { ActiveAdmin::Namespace.new(app, "Admin") }
6
+ let(:post_resource) { ns.register Post }
7
+
8
+ it "should be disabled globally by default" do
9
+ # Note: the default initializer would set it to true
10
+
11
+ app.batch_actions.should be_false
12
+ ns.batch_actions.should be_false
13
+ post_resource.batch_actions_enabled?.should be_false
14
+ end
15
+
16
+ it "should be settable to true" do
17
+ app.batch_actions = true
18
+ app.batch_actions.should == true
19
+ end
20
+
21
+ it "should be an inheritable_setting" do
22
+ app.batch_actions = true
23
+ ns.batch_actions.should == true
24
+ end
25
+
26
+ it "should be settable at the namespace level" do
27
+ app.batch_actions = true
28
+ ns.batch_actions = false
29
+
30
+ app.batch_actions.should == true
31
+ ns.batch_actions.should == false
32
+ end
33
+
34
+ it "should be settable at the resource level" do
35
+ post_resource.batch_actions_enabled?.should == false
36
+ post_resource.batch_actions = true
37
+ post_resource.batch_actions_enabled?.should == true
38
+ end
39
+
40
+ it "should inherit the setting on the resource from the namespace" do
41
+ ns.batch_actions = false
42
+ post_resource.batch_actions_enabled?.should == false
43
+ post_resource.batch_actions.should be_empty
44
+
45
+ post_resource.batch_actions = true
46
+ post_resource.batch_actions_enabled?.should == true
47
+ post_resource.batch_actions.should_not be_empty
48
+ end
49
+
50
+ it "should inherit the setting from the namespace when set to nil" do
51
+ ns.batch_actions = true
52
+
53
+ post_resource.batch_actions = true
54
+ post_resource.batch_actions_enabled?.should == true
55
+ post_resource.batch_actions.should_not be_empty
56
+
57
+ post_resource.batch_actions = nil
58
+ post_resource.batch_actions_enabled?.should == true # inherited from namespace
59
+ post_resource.batch_actions.should_not be_empty
60
+ end
61
+ end
@@ -0,0 +1,42 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveAdmin::Resource::BelongsTo do
4
+
5
+
6
+ let(:application){ ActiveAdmin::Application.new }
7
+ let(:namespace){ ActiveAdmin::Namespace.new(application, :admin) }
8
+ let(:post){ namespace.register(Post) }
9
+ let(:belongs_to){ ActiveAdmin::Resource::BelongsTo.new(post, :user) }
10
+
11
+ it "should have an owner" do
12
+ belongs_to.owner.should == post
13
+ end
14
+
15
+ it "should have a namespace" do
16
+ belongs_to.namespace.should == namespace
17
+ end
18
+
19
+ describe "finding the target" do
20
+ context "when the resource has been registered" do
21
+ let(:user){ namespace.register(User) }
22
+ before { user } # Ensure user is registered
23
+
24
+ it "should return the target resource" do
25
+ belongs_to.target.should == user
26
+ end
27
+ end
28
+
29
+ context "when the resource has not been registered" do
30
+ it "should raise a ActiveAdmin::BelongsTo::TargetNotFound" do
31
+ expect {
32
+ belongs_to.target
33
+ }.to raise_error(ActiveAdmin::Resource::BelongsTo::TargetNotFound)
34
+ end
35
+ end
36
+ end
37
+
38
+ it "should be optional" do
39
+ belongs_to = ActiveAdmin::Resource::BelongsTo.new post, :user, :optional => true
40
+ belongs_to.should be_optional
41
+ end
42
+ end
@@ -0,0 +1,43 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveAdmin::CanCanAdapter do
4
+
5
+ describe "full integration" do
6
+
7
+ let(:application){ ActiveAdmin::Application.new }
8
+ let(:namespace){ ActiveAdmin::Namespace.new(application, "Admin") }
9
+ let(:resource){ namespace.register(Post) }
10
+
11
+ let :ability_class do
12
+ Class.new do
13
+ include CanCan::Ability
14
+
15
+ def initialize(user)
16
+ can :read, Post
17
+ cannot :update, Post
18
+ end
19
+
20
+ end
21
+ end
22
+
23
+ let(:auth) { namespace.authorization_adapter.new(resource, double) }
24
+
25
+ before do
26
+ namespace.authorization_adapter = ActiveAdmin::CanCanAdapter
27
+ namespace.cancan_ability_class = ability_class
28
+ end
29
+
30
+ it "should initialize the ability stored in the namespace configuration" do
31
+ auth.authorized?(:read, Post).should == true
32
+ auth.authorized?(:update, Post).should == false
33
+ end
34
+
35
+ it "should scope the collection with accessible_by" do
36
+ collection = double
37
+ collection.should_receive(:accessible_by).with(auth.cancan_ability, :edit)
38
+ auth.scope_collection(collection, :edit)
39
+ end
40
+
41
+ end
42
+
43
+ end
@@ -0,0 +1,106 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Comments" do
4
+ let(:application){ ActiveAdmin::Application.new }
5
+
6
+ describe ActiveAdmin::Comment do
7
+ subject { ActiveAdmin::Comment.new }
8
+
9
+ describe "Associations and Validations" do
10
+ it { should belong_to :resource }
11
+ it { should belong_to :author }
12
+ it { should validate_presence_of :resource }
13
+ it { should validate_presence_of :body }
14
+ it { should validate_presence_of :namespace }
15
+ end
16
+
17
+ describe ".find_for_resource_in_namespace" do
18
+ let(:post){ Post.create!(:title => "Hello World") }
19
+ let(:namespace_name){ "admin" }
20
+
21
+ before do
22
+ @comment = ActiveAdmin::Comment.create! :resource => post,
23
+ :body => "A Comment",
24
+ :namespace => namespace_name
25
+ end
26
+
27
+ it "should return a comment for the resource in the same namespace" do
28
+ ActiveAdmin::Comment.find_for_resource_in_namespace(post, namespace_name).should == [@comment]
29
+ end
30
+
31
+ it "should not return a comment for the same resource in a different namespace" do
32
+ ActiveAdmin::Comment.find_for_resource_in_namespace(post, 'public').should == []
33
+ end
34
+
35
+ it "should not return a comment for a different resource" do
36
+ another_post = Post.create! :title => "Another Hello World"
37
+ ActiveAdmin::Comment.find_for_resource_in_namespace(another_post, namespace_name).should == []
38
+ end
39
+ end
40
+
41
+ describe ".resource_id_cast" do
42
+ let(:post) { Post.create!(:title => "Testing.") }
43
+ let(:namespace_name) { "admin" }
44
+
45
+ it "should cast resource_id as string" do
46
+ comment = ActiveAdmin::Comment.create! :resource => post,
47
+ :body => "Another Comment",
48
+ :namespace => namespace_name
49
+ ActiveAdmin::Comment.resource_id_cast(comment).class.should eql String
50
+ end
51
+ end
52
+
53
+ describe ".resource_id_type" do
54
+ it "should be :string" do
55
+ ActiveAdmin::Comment.resource_id_type.should eql :string
56
+ end
57
+ end
58
+
59
+ describe "Commenting on resource with string id" do
60
+ let(:tag){ Tag.create!(:name => "cooltags") }
61
+ let(:namespace_name){ "admin" }
62
+
63
+ it "should allow commenting" do
64
+ comment = ActiveAdmin::Comment.create! :resource => tag,
65
+ :body => "Another Comment",
66
+ :namespace => namespace_name
67
+
68
+ ActiveAdmin::Comment.find_for_resource_in_namespace(tag, namespace_name).should == [comment]
69
+ end
70
+ end
71
+ end
72
+
73
+ describe ActiveAdmin::Comments::NamespaceHelper do
74
+ describe "#comments?" do
75
+
76
+ it "should have comments when the namespace allows comments" do
77
+ ns = ActiveAdmin::Namespace.new(application, :admin)
78
+ ns.allow_comments = true
79
+ ns.comments?.should be_true
80
+ end
81
+
82
+ it "should not have comments when the namespace does not allow comments" do
83
+ ns = ActiveAdmin::Namespace.new(application, :admin)
84
+ ns.allow_comments = false
85
+ ns.comments?.should be_false
86
+ end
87
+
88
+ end
89
+ end
90
+
91
+ describe ActiveAdmin::Comments::ResourceHelper do
92
+ it "should add an attr_accessor :comments to ActiveAdmin::Resource" do
93
+ ns = ActiveAdmin::Namespace.new(application, :admin)
94
+ resource = ActiveAdmin::Resource.new(ns, Post)
95
+ resource.comments.should be_nil
96
+ resource.comments = true
97
+ resource.comments.should be_true
98
+ end
99
+ it "should disable comments if set to false" do
100
+ ns = ActiveAdmin::Namespace.new(application, :admin)
101
+ resource = ActiveAdmin::Resource.new(ns, Post)
102
+ resource.comments = false
103
+ resource.comments?.should be_false
104
+ end
105
+ end
106
+ end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ class MockComponentClass < ActiveAdmin::Component; end
4
+
5
+ describe ActiveAdmin::Component do
6
+
7
+ let(:component_class){ MockComponentClass }
8
+ let(:component){ component_class.new }
9
+
10
+ it "should be a subclass of an html div" do
11
+ ActiveAdmin::Component.ancestors.should include(Arbre::HTML::Div)
12
+ end
13
+
14
+ it "should render to a div, even as a subclass" do
15
+ component.tag_name.should == 'div'
16
+ end
17
+
18
+ end