activeadministration 0.0.1

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 (522) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +47 -0
  3. data/.travis.yml +19 -0
  4. data/.yardopts +9 -0
  5. data/CHANGELOG.md +1074 -0
  6. data/CONTRIBUTING.md +139 -0
  7. data/Gemfile +52 -0
  8. data/Guardfile +7 -0
  9. data/LICENSE +25 -0
  10. data/README.md +8 -0
  11. data/Rakefile +33 -0
  12. data/activeadministration.gemspec +34 -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 +30 -0
  28. data/app/assets/javascripts/active_admin/base.js.coffee +14 -0
  29. data/app/assets/javascripts/active_admin/ext/jquery-ui.js.coffee +6 -0
  30. data/app/assets/javascripts/active_admin/ext/jquery.js.coffee +7 -0
  31. data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +39 -0
  32. data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +36 -0
  33. data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +85 -0
  34. data/app/assets/javascripts/active_admin/lib/has_many.js.coffee +75 -0
  35. data/app/assets/javascripts/active_admin/lib/modal_dialog.js.coffee +36 -0
  36. data/app/assets/javascripts/active_admin/lib/popover.js.coffee +68 -0
  37. data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +24 -0
  38. data/app/assets/stylesheets/active_admin/_base.css.scss +42 -0
  39. data/app/assets/stylesheets/active_admin/_forms.css.scss +329 -0
  40. data/app/assets/stylesheets/active_admin/_header.css.scss +156 -0
  41. data/app/assets/stylesheets/active_admin/_mixins.css.scss +1 -0
  42. data/app/assets/stylesheets/active_admin/_typography.css.scss +100 -0
  43. data/app/assets/stylesheets/active_admin/components/_batch_actions.css.scss +11 -0
  44. data/app/assets/stylesheets/active_admin/components/_blank_slates.scss +31 -0
  45. data/app/assets/stylesheets/active_admin/components/_breadcrumbs.scss +20 -0
  46. data/app/assets/stylesheets/active_admin/components/_buttons.scss +11 -0
  47. data/app/assets/stylesheets/active_admin/components/_columns.scss +3 -0
  48. data/app/assets/stylesheets/active_admin/components/_comments.css.scss +41 -0
  49. data/app/assets/stylesheets/active_admin/components/_date_picker.css.scss +127 -0
  50. data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +151 -0
  51. data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +39 -0
  52. data/app/assets/stylesheets/active_admin/components/_grid.scss +9 -0
  53. data/app/assets/stylesheets/active_admin/components/_index_list.scss +12 -0
  54. data/app/assets/stylesheets/active_admin/components/_links.scss +5 -0
  55. data/app/assets/stylesheets/active_admin/components/_modal_dialog.scss +31 -0
  56. data/app/assets/stylesheets/active_admin/components/_pagination.scss +34 -0
  57. data/app/assets/stylesheets/active_admin/components/_panels.scss +6 -0
  58. data/app/assets/stylesheets/active_admin/components/_popovers.css.scss +123 -0
  59. data/app/assets/stylesheets/active_admin/components/_scopes.scss +10 -0
  60. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +16 -0
  61. data/app/assets/stylesheets/active_admin/components/_table_tools.css.scss +65 -0
  62. data/app/assets/stylesheets/active_admin/components/_tables.css.scss +111 -0
  63. data/app/assets/stylesheets/active_admin/mixins/_all.css.scss +11 -0
  64. data/app/assets/stylesheets/active_admin/mixins/_buttons.css.scss +66 -0
  65. data/app/assets/stylesheets/active_admin/mixins/_gradients.css.scss +38 -0
  66. data/app/assets/stylesheets/active_admin/mixins/_icons.css.scss +20 -0
  67. data/app/assets/stylesheets/active_admin/mixins/_reset.css.scss +165 -0
  68. data/app/assets/stylesheets/active_admin/mixins/_rounded.css.scss +43 -0
  69. data/app/assets/stylesheets/active_admin/mixins/_sections.css.scss +36 -0
  70. data/app/assets/stylesheets/active_admin/mixins/_shadows.css.scss +22 -0
  71. data/app/assets/stylesheets/active_admin/mixins/_typography.scss +3 -0
  72. data/app/assets/stylesheets/active_admin/mixins/_utilities.scss +26 -0
  73. data/app/assets/stylesheets/active_admin/mixins/_variables.css.scss +34 -0
  74. data/app/assets/stylesheets/active_admin/pages/_logged_out.scss +44 -0
  75. data/app/assets/stylesheets/active_admin/print.css.scss +284 -0
  76. data/app/assets/stylesheets/active_admin/structure/_footer.scss +14 -0
  77. data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +29 -0
  78. data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +46 -0
  79. data/app/views/active_admin/dashboard/index.html.arb +1 -0
  80. data/app/views/active_admin/devise/confirmations/new.html.erb +14 -0
  81. data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +8 -0
  82. data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +7 -0
  83. data/app/views/active_admin/devise/passwords/edit.html.erb +19 -0
  84. data/app/views/active_admin/devise/passwords/new.html.erb +14 -0
  85. data/app/views/active_admin/devise/registrations/new.html.erb +22 -0
  86. data/app/views/active_admin/devise/sessions/new.html.erb +20 -0
  87. data/app/views/active_admin/devise/shared/_links.erb +27 -0
  88. data/app/views/active_admin/devise/unlocks/new.html.erb +14 -0
  89. data/app/views/active_admin/page/index.html.arb +1 -0
  90. data/app/views/active_admin/resource/edit.html.arb +1 -0
  91. data/app/views/active_admin/resource/index.csv.erb +17 -0
  92. data/app/views/active_admin/resource/index.html.arb +1 -0
  93. data/app/views/active_admin/resource/new.html.arb +1 -0
  94. data/app/views/active_admin/resource/show.html.arb +1 -0
  95. data/app/views/kaminari/active_admin/_first_page.html.erb +11 -0
  96. data/app/views/kaminari/active_admin/_gap.html.erb +8 -0
  97. data/app/views/kaminari/active_admin/_last_page.html.erb +11 -0
  98. data/app/views/kaminari/active_admin/_next_page.html.erb +11 -0
  99. data/app/views/kaminari/active_admin/_page.html.erb +12 -0
  100. data/app/views/kaminari/active_admin/_paginator.html.erb +23 -0
  101. data/app/views/kaminari/active_admin/_prev_page.html.erb +11 -0
  102. data/app/views/layouts/active_admin.html.arb +1 -0
  103. data/app/views/layouts/active_admin_logged_out.html.erb +37 -0
  104. data/config/locales/bg.yml +102 -0
  105. data/config/locales/bs.yml +121 -0
  106. data/config/locales/ca.yml +102 -0
  107. data/config/locales/cs.yml +106 -0
  108. data/config/locales/da.yml +103 -0
  109. data/config/locales/de-CH.yml +118 -0
  110. data/config/locales/de.yml +143 -0
  111. data/config/locales/el.yml +111 -0
  112. data/config/locales/en-GB.yml +95 -0
  113. data/config/locales/en.yml +117 -0
  114. data/config/locales/es.yml +127 -0
  115. data/config/locales/es_MX.yml +110 -0
  116. data/config/locales/fi.yml +110 -0
  117. data/config/locales/fr.yml +109 -0
  118. data/config/locales/he.yml +92 -0
  119. data/config/locales/hr.yml +121 -0
  120. data/config/locales/hu.yml +96 -0
  121. data/config/locales/it.yml +114 -0
  122. data/config/locales/ja.yml +114 -0
  123. data/config/locales/ko.yml +85 -0
  124. data/config/locales/lt.yml +118 -0
  125. data/config/locales/lv.yml +90 -0
  126. data/config/locales/nl.yml +94 -0
  127. data/config/locales/no-NB.yml +111 -0
  128. data/config/locales/pl.yml +100 -0
  129. data/config/locales/pt-BR.yml +117 -0
  130. data/config/locales/pt-PT.yml +90 -0
  131. data/config/locales/ro.yml +94 -0
  132. data/config/locales/ru.yml +121 -0
  133. data/config/locales/sv-SE.yml +90 -0
  134. data/config/locales/tr.yml +94 -0
  135. data/config/locales/uk.yml +121 -0
  136. data/config/locales/vi.yml +91 -0
  137. data/config/locales/zh-CN.yml +112 -0
  138. data/config/locales/zh-TW.yml +94 -0
  139. data/cucumber.yml +3 -0
  140. data/docs/0-installation.md +84 -0
  141. data/docs/1-general-configuration.md +138 -0
  142. data/docs/10-custom-pages.md +84 -0
  143. data/docs/11-decorators.md +50 -0
  144. data/docs/12-arbre-components.md +150 -0
  145. data/docs/13-authorization-adapter.md +239 -0
  146. data/docs/2-resource-customization.md +359 -0
  147. data/docs/3-index-pages.md +245 -0
  148. data/docs/3-index-pages/create-an-index.md +31 -0
  149. data/docs/3-index-pages/index-as-block.md +21 -0
  150. data/docs/3-index-pages/index-as-blog.md +71 -0
  151. data/docs/3-index-pages/index-as-grid.md +29 -0
  152. data/docs/3-index-pages/index-as-table.md +163 -0
  153. data/docs/4-csv-format.md +39 -0
  154. data/docs/5-forms.md +118 -0
  155. data/docs/6-show-pages.md +77 -0
  156. data/docs/7-sidebars.md +63 -0
  157. data/docs/8-custom-actions.md +159 -0
  158. data/docs/9-batch-actions.md +233 -0
  159. data/features/action_item.feature +73 -0
  160. data/features/authorization.feature +64 -0
  161. data/features/authorization_cancan.feature +52 -0
  162. data/features/authorization_pundit.feature +37 -0
  163. data/features/belongs_to.feature +66 -0
  164. data/features/breadcrumb.feature +75 -0
  165. data/features/comments/commenting.feature +159 -0
  166. data/features/comments/viewing_index.feature +19 -0
  167. data/features/dashboard.feature +16 -0
  168. data/features/decorators.feature +41 -0
  169. data/features/development_reloading.feature +31 -0
  170. data/features/edit_page.feature +114 -0
  171. data/features/favicon.feature +20 -0
  172. data/features/first_boot.feature +16 -0
  173. data/features/global_navigation.feature +29 -0
  174. data/features/i18n.feature +43 -0
  175. data/features/index/batch_actions.feature +123 -0
  176. data/features/index/filters.feature +138 -0
  177. data/features/index/format_as_csv.feature +117 -0
  178. data/features/index/formats.feature +66 -0
  179. data/features/index/index_as_block.feature +15 -0
  180. data/features/index/index_as_blog.feature +69 -0
  181. data/features/index/index_as_grid.feature +45 -0
  182. data/features/index/index_as_table.feature +208 -0
  183. data/features/index/index_blank_slate.feature +83 -0
  184. data/features/index/index_parameters.feature +75 -0
  185. data/features/index/index_scope_to.feature +56 -0
  186. data/features/index/index_scopes.feature +251 -0
  187. data/features/index/page_title.feature +41 -0
  188. data/features/index/pagination.feature +59 -0
  189. data/features/index/switch_index_view.feature +73 -0
  190. data/features/menu.feature +53 -0
  191. data/features/new_page.feature +106 -0
  192. data/features/registering_assets.feature +35 -0
  193. data/features/registering_pages.feature +148 -0
  194. data/features/registering_resources.feature +33 -0
  195. data/features/root_to.feature +17 -0
  196. data/features/show/default_content.feature +43 -0
  197. data/features/show/page_title.feature +58 -0
  198. data/features/sidebar_sections.feature +210 -0
  199. data/features/site_title.feature +47 -0
  200. data/features/specifying_actions.feature +93 -0
  201. data/features/step_definitions/action_item_steps.rb +7 -0
  202. data/features/step_definitions/action_link_steps.rb +7 -0
  203. data/features/step_definitions/additional_web_steps.rb +82 -0
  204. data/features/step_definitions/asset_steps.rb +15 -0
  205. data/features/step_definitions/attribute_steps.rb +18 -0
  206. data/features/step_definitions/batch_action_steps.rb +55 -0
  207. data/features/step_definitions/breadcrumb_steps.rb +3 -0
  208. data/features/step_definitions/comment_steps.rb +12 -0
  209. data/features/step_definitions/configuration_steps.rb +100 -0
  210. data/features/step_definitions/dashboard_steps.rb +15 -0
  211. data/features/step_definitions/factory_steps.rb +34 -0
  212. data/features/step_definitions/filter_steps.rb +17 -0
  213. data/features/step_definitions/flash_steps.rb +11 -0
  214. data/features/step_definitions/format_steps.rb +45 -0
  215. data/features/step_definitions/i18n_steps.rb +3 -0
  216. data/features/step_definitions/index_scope_steps.rb +21 -0
  217. data/features/step_definitions/index_views_steps.rb +3 -0
  218. data/features/step_definitions/layout_steps.rb +3 -0
  219. data/features/step_definitions/member_link_steps.rb +7 -0
  220. data/features/step_definitions/menu_steps.rb +11 -0
  221. data/features/step_definitions/pagination_steps.rb +8 -0
  222. data/features/step_definitions/sidebar_steps.rb +12 -0
  223. data/features/step_definitions/site_title_steps.rb +15 -0
  224. data/features/step_definitions/symbol_leak_steps.rb +3 -0
  225. data/features/step_definitions/tab_steps.rb +3 -0
  226. data/features/step_definitions/table_steps.rb +119 -0
  227. data/features/step_definitions/user_steps.rb +41 -0
  228. data/features/step_definitions/web_steps.rb +86 -0
  229. data/features/sti_resource.feature +65 -0
  230. data/features/strong_parameters.feature +72 -0
  231. data/features/support/env.rb +119 -0
  232. data/features/support/paths.rb +71 -0
  233. data/features/support/selectors.rb +45 -0
  234. data/features/symbol_leak.feature +35 -0
  235. data/features/users/logging_in.feature +34 -0
  236. data/features/users/logging_out.feature +13 -0
  237. data/features/users/resetting_password.feature +34 -0
  238. data/lib/active_admin.rb +135 -0
  239. data/lib/active_admin/abstract_view_factory.rb +86 -0
  240. data/lib/active_admin/application.rb +250 -0
  241. data/lib/active_admin/asset_registration.rb +29 -0
  242. data/lib/active_admin/authorization_adapter.rb +132 -0
  243. data/lib/active_admin/base_controller.rb +78 -0
  244. data/lib/active_admin/base_controller/authorization.rb +151 -0
  245. data/lib/active_admin/base_controller/menu.rb +34 -0
  246. data/lib/active_admin/batch_actions.rb +17 -0
  247. data/lib/active_admin/batch_actions/controller.rb +29 -0
  248. data/lib/active_admin/batch_actions/resource_extension.rb +154 -0
  249. data/lib/active_admin/batch_actions/views/batch_action_form.rb +38 -0
  250. data/lib/active_admin/batch_actions/views/batch_action_popover.rb +28 -0
  251. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +57 -0
  252. data/lib/active_admin/batch_actions/views/selection_cells.rb +37 -0
  253. data/lib/active_admin/callbacks.rb +84 -0
  254. data/lib/active_admin/cancan_adapter.rb +40 -0
  255. data/lib/active_admin/component.rb +5 -0
  256. data/lib/active_admin/controller_action.rb +12 -0
  257. data/lib/active_admin/csv_builder.rb +70 -0
  258. data/lib/active_admin/dependencies.rb +38 -0
  259. data/lib/active_admin/deprecation.rb +35 -0
  260. data/lib/active_admin/devise.rb +80 -0
  261. data/lib/active_admin/dsl.rb +165 -0
  262. data/lib/active_admin/engine.rb +7 -0
  263. data/lib/active_admin/error.rb +22 -0
  264. data/lib/active_admin/event.rb +33 -0
  265. data/lib/active_admin/filters.rb +9 -0
  266. data/lib/active_admin/filters/dsl.rb +21 -0
  267. data/lib/active_admin/filters/forms.rb +87 -0
  268. data/lib/active_admin/filters/formtastic_addons.rb +73 -0
  269. data/lib/active_admin/filters/resource_extension.rb +135 -0
  270. data/lib/active_admin/form_builder.rb +185 -0
  271. data/lib/active_admin/helpers/collection.rb +23 -0
  272. data/lib/active_admin/helpers/i18n.rb +7 -0
  273. data/lib/active_admin/helpers/optional_display.rb +38 -0
  274. data/lib/active_admin/helpers/scope_chain.rb +23 -0
  275. data/lib/active_admin/helpers/settings.rb +106 -0
  276. data/lib/active_admin/iconic.rb +54 -0
  277. data/lib/active_admin/iconic/icons.rb +142 -0
  278. data/lib/active_admin/inputs.rb +15 -0
  279. data/lib/active_admin/inputs/datepicker_input.rb +20 -0
  280. data/lib/active_admin/inputs/filter_base.rb +40 -0
  281. data/lib/active_admin/inputs/filter_base/search_method_select.rb +73 -0
  282. data/lib/active_admin/inputs/filter_boolean_input.rb +32 -0
  283. data/lib/active_admin/inputs/filter_check_boxes_input.rb +48 -0
  284. data/lib/active_admin/inputs/filter_date_range_input.rb +34 -0
  285. data/lib/active_admin/inputs/filter_numeric_input.rb +10 -0
  286. data/lib/active_admin/inputs/filter_select_input.rb +53 -0
  287. data/lib/active_admin/inputs/filter_string_input.rb +24 -0
  288. data/lib/active_admin/menu.rb +107 -0
  289. data/lib/active_admin/menu_collection.rb +96 -0
  290. data/lib/active_admin/menu_item.rb +97 -0
  291. data/lib/active_admin/namespace.rb +231 -0
  292. data/lib/active_admin/order_clause.rb +26 -0
  293. data/lib/active_admin/orm/active_record.rb +3 -0
  294. data/lib/active_admin/orm/active_record/comments.rb +84 -0
  295. data/lib/active_admin/orm/active_record/comments/comment.rb +49 -0
  296. data/lib/active_admin/orm/active_record/comments/namespace_helper.rb +14 -0
  297. data/lib/active_admin/orm/active_record/comments/resource_helper.rb +17 -0
  298. data/lib/active_admin/orm/active_record/comments/show_page_helper.rb +23 -0
  299. data/lib/active_admin/orm/active_record/comments/views.rb +2 -0
  300. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +75 -0
  301. data/lib/active_admin/orm/mongoid.rb +1 -0
  302. data/lib/active_admin/orm/mongoid/.gitkeep +0 -0
  303. data/lib/active_admin/page.rb +88 -0
  304. data/lib/active_admin/page_controller.rb +29 -0
  305. data/lib/active_admin/page_dsl.rb +28 -0
  306. data/lib/active_admin/page_presenter.rb +32 -0
  307. data/lib/active_admin/pundit_adapter.rb +42 -0
  308. data/lib/active_admin/resource.rb +156 -0
  309. data/lib/active_admin/resource/action_items.rb +91 -0
  310. data/lib/active_admin/resource/belongs_to.rb +36 -0
  311. data/lib/active_admin/resource/controllers.rb +18 -0
  312. data/lib/active_admin/resource/menu.rb +64 -0
  313. data/lib/active_admin/resource/naming.rb +84 -0
  314. data/lib/active_admin/resource/page_presenters.rb +82 -0
  315. data/lib/active_admin/resource/pagination.rb +19 -0
  316. data/lib/active_admin/resource/routes.rb +99 -0
  317. data/lib/active_admin/resource/scope_to.rb +74 -0
  318. data/lib/active_admin/resource/scopes.rb +50 -0
  319. data/lib/active_admin/resource/sidebars.rb +28 -0
  320. data/lib/active_admin/resource_collection.rb +70 -0
  321. data/lib/active_admin/resource_controller.rb +50 -0
  322. data/lib/active_admin/resource_controller/action_builder.rb +21 -0
  323. data/lib/active_admin/resource_controller/data_access.rb +284 -0
  324. data/lib/active_admin/resource_controller/decorators.rb +100 -0
  325. data/lib/active_admin/resource_controller/resource_class_methods.rb +24 -0
  326. data/lib/active_admin/resource_controller/scoping.rb +31 -0
  327. data/lib/active_admin/resource_controller/sidebars.rb +18 -0
  328. data/lib/active_admin/resource_dsl.rb +171 -0
  329. data/lib/active_admin/router.rb +106 -0
  330. data/lib/active_admin/scope.rb +57 -0
  331. data/lib/active_admin/sidebar_section.rb +45 -0
  332. data/lib/active_admin/version.rb +3 -0
  333. data/lib/active_admin/view_factory.rb +27 -0
  334. data/lib/active_admin/view_helpers.rb +21 -0
  335. data/lib/active_admin/view_helpers/active_admin_application_helper.rb +12 -0
  336. data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +7 -0
  337. data/lib/active_admin/view_helpers/auto_link_helper.rb +37 -0
  338. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +27 -0
  339. data/lib/active_admin/view_helpers/display_helper.rb +64 -0
  340. data/lib/active_admin/view_helpers/download_format_links_helper.rb +49 -0
  341. data/lib/active_admin/view_helpers/fields_for.rb +50 -0
  342. data/lib/active_admin/view_helpers/flash_helper.rb +13 -0
  343. data/lib/active_admin/view_helpers/form_helper.rb +21 -0
  344. data/lib/active_admin/view_helpers/icon_helper.rb +12 -0
  345. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +93 -0
  346. data/lib/active_admin/view_helpers/sidebar_helper.rb +15 -0
  347. data/lib/active_admin/view_helpers/title_helper.rb +11 -0
  348. data/lib/active_admin/view_helpers/view_factory_helper.rb +11 -0
  349. data/lib/active_admin/views.rb +8 -0
  350. data/lib/active_admin/views/action_items.rb +17 -0
  351. data/lib/active_admin/views/components/action_list_popover.rb +29 -0
  352. data/lib/active_admin/views/components/attributes_table.rb +105 -0
  353. data/lib/active_admin/views/components/blank_slate.rb +17 -0
  354. data/lib/active_admin/views/components/columns.rb +157 -0
  355. data/lib/active_admin/views/components/dropdown_menu.rb +73 -0
  356. data/lib/active_admin/views/components/index_list.rb +68 -0
  357. data/lib/active_admin/views/components/paginated_collection.rb +126 -0
  358. data/lib/active_admin/views/components/panel.rb +34 -0
  359. data/lib/active_admin/views/components/popover.rb +27 -0
  360. data/lib/active_admin/views/components/scopes.rb +66 -0
  361. data/lib/active_admin/views/components/sidebar_section.rb +29 -0
  362. data/lib/active_admin/views/components/site_title.rb +55 -0
  363. data/lib/active_admin/views/components/status_tag.rb +67 -0
  364. data/lib/active_admin/views/components/table_for.rb +212 -0
  365. data/lib/active_admin/views/footer.rb +20 -0
  366. data/lib/active_admin/views/header.rb +32 -0
  367. data/lib/active_admin/views/index_as_block.rb +36 -0
  368. data/lib/active_admin/views/index_as_blog.rb +156 -0
  369. data/lib/active_admin/views/index_as_grid.rb +80 -0
  370. data/lib/active_admin/views/index_as_table.rb +277 -0
  371. data/lib/active_admin/views/pages/base.rb +139 -0
  372. data/lib/active_admin/views/pages/form.rb +51 -0
  373. data/lib/active_admin/views/pages/index.rb +163 -0
  374. data/lib/active_admin/views/pages/layout.rb +26 -0
  375. data/lib/active_admin/views/pages/page.rb +30 -0
  376. data/lib/active_admin/views/pages/show.rb +59 -0
  377. data/lib/active_admin/views/tabbed_navigation.rb +62 -0
  378. data/lib/active_admin/views/title_bar.rb +55 -0
  379. data/lib/activeadmin.rb +1 -0
  380. data/lib/generators/active_admin/assets/assets_generator.rb +16 -0
  381. data/lib/generators/active_admin/assets/templates/active_admin.css.scss +17 -0
  382. data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +1 -0
  383. data/lib/generators/active_admin/devise/devise_generator.rb +66 -0
  384. data/lib/generators/active_admin/install/install_generator.rb +46 -0
  385. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +243 -0
  386. data/lib/generators/active_admin/install/templates/admin_user.rb.erb +30 -0
  387. data/lib/generators/active_admin/install/templates/dashboard.rb +33 -0
  388. data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb +19 -0
  389. data/lib/generators/active_admin/resource/resource_generator.rb +16 -0
  390. data/lib/generators/active_admin/resource/templates/admin.rb +17 -0
  391. data/lib/ransack_ext.rb +12 -0
  392. data/script/local +44 -0
  393. data/script/use_rails +53 -0
  394. data/spec/integration/default_namespace_spec.rb +61 -0
  395. data/spec/integration/javascript_spec.rb +20 -0
  396. data/spec/integration/memory_spec.rb +29 -0
  397. data/spec/integration/stylesheets_spec.rb +18 -0
  398. data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +50 -0
  399. data/spec/javascripts/coffeescripts/jquery.aa.popover-spec.js.coffee +82 -0
  400. data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +34 -0
  401. data/spec/javascripts/compiled/jquery.aa.checkbox-toggler-spec.js +60 -0
  402. data/spec/javascripts/compiled/jquery.aa.popover-spec.js +106 -0
  403. data/spec/javascripts/compiled/jquery.aa.table-checkbox-toggler-spec.js +37 -0
  404. data/spec/javascripts/fixtures/checkboxes.html +9 -0
  405. data/spec/javascripts/fixtures/table_checkboxes.html +17 -0
  406. data/spec/javascripts/helpers/SpecHelper.js +3 -0
  407. data/spec/javascripts/helpers/vendor/jasmine-fixture-0.0.5.js +108 -0
  408. data/spec/javascripts/helpers/vendor/jasmine-jquery.js +288 -0
  409. data/spec/javascripts/helpers/vendor/sinon-1.2.0.js +2915 -0
  410. data/spec/javascripts/support/jasmine.yml +74 -0
  411. data/spec/javascripts/support/jasmine_config.rb +23 -0
  412. data/spec/javascripts/support/jasmine_runner.rb +32 -0
  413. data/spec/javascripts/support/jquery-ui-1.8.16.custom.min.js +34 -0
  414. data/spec/javascripts/support/jquery.min.js +4 -0
  415. data/spec/spec_helper.rb +182 -0
  416. data/spec/spec_helper_without_rails.rb +16 -0
  417. data/spec/support/deferred_garbage_collection.rb +19 -0
  418. data/spec/support/detect_rails_version.rb +42 -0
  419. data/spec/support/integration_example_group.rb +31 -0
  420. data/spec/support/jslint.yml +80 -0
  421. data/spec/support/rails_template.rb +117 -0
  422. data/spec/support/rails_template_with_data.rb +59 -0
  423. data/spec/support/templates/admin/stores.rb +11 -0
  424. data/spec/support/templates/cucumber.rb +24 -0
  425. data/spec/support/templates/cucumber_with_reloading.rb +5 -0
  426. data/spec/support/templates/en.yml +8 -0
  427. data/spec/support/templates/policies/active_admin/comment_policy.rb +9 -0
  428. data/spec/support/templates/policies/active_admin/page_policy.rb +18 -0
  429. data/spec/support/templates/policies/admin_user_policy.rb +11 -0
  430. data/spec/support/templates/policies/application_policy.rb +45 -0
  431. data/spec/support/templates/policies/category_policy.rb +7 -0
  432. data/spec/support/templates/policies/post_policy.rb +15 -0
  433. data/spec/support/templates/policies/store_policy.rb +11 -0
  434. data/spec/support/templates/policies/user_policy.rb +11 -0
  435. data/spec/support/templates/post_decorator.rb +11 -0
  436. data/spec/unit/abstract_view_factory_spec.rb +79 -0
  437. data/spec/unit/action_builder_spec.rb +126 -0
  438. data/spec/unit/active_admin_spec.rb +11 -0
  439. data/spec/unit/application_spec.rb +140 -0
  440. data/spec/unit/asset_registration_spec.rb +52 -0
  441. data/spec/unit/authorization/authorization_adapter_spec.rb +61 -0
  442. data/spec/unit/authorization/controller_authorization_spec.rb +39 -0
  443. data/spec/unit/auto_link_spec.rb +34 -0
  444. data/spec/unit/batch_actions/resource_spec.rb +92 -0
  445. data/spec/unit/batch_actions/settings_spec.rb +61 -0
  446. data/spec/unit/belongs_to_spec.rb +42 -0
  447. data/spec/unit/cancan_adapter_spec.rb +43 -0
  448. data/spec/unit/comments_spec.rb +144 -0
  449. data/spec/unit/component_spec.rb +18 -0
  450. data/spec/unit/config_shared_examples.rb +59 -0
  451. data/spec/unit/controller_filters_spec.rb +37 -0
  452. data/spec/unit/csv_builder_spec.rb +134 -0
  453. data/spec/unit/devise_spec.rb +116 -0
  454. data/spec/unit/dsl_spec.rb +61 -0
  455. data/spec/unit/event_spec.rb +47 -0
  456. data/spec/unit/filters/filter_form_builder_spec.rb +418 -0
  457. data/spec/unit/filters/resource_spec.rb +121 -0
  458. data/spec/unit/form_builder_spec.rb +576 -0
  459. data/spec/unit/generators/install_spec.rb +23 -0
  460. data/spec/unit/helpers/collection_spec.rb +65 -0
  461. data/spec/unit/helpers/scope_chain_spec.rb +36 -0
  462. data/spec/unit/helpers/settings_spec.rb +30 -0
  463. data/spec/unit/menu_collection_spec.rb +62 -0
  464. data/spec/unit/menu_item_spec.rb +143 -0
  465. data/spec/unit/menu_spec.rb +71 -0
  466. data/spec/unit/namespace/authorization_spec.rb +27 -0
  467. data/spec/unit/namespace/register_page_spec.rb +74 -0
  468. data/spec/unit/namespace/register_resource_spec.rb +163 -0
  469. data/spec/unit/namespace_spec.rb +103 -0
  470. data/spec/unit/order_clause_spec.rb +57 -0
  471. data/spec/unit/page_controller_spec.rb +5 -0
  472. data/spec/unit/page_spec.rb +72 -0
  473. data/spec/unit/pretty_format_spec.rb +63 -0
  474. data/spec/unit/pundit_adapter_spec.rb +36 -0
  475. data/spec/unit/resource/action_items_spec.rb +62 -0
  476. data/spec/unit/resource/menu_spec.rb +18 -0
  477. data/spec/unit/resource/naming_spec.rb +122 -0
  478. data/spec/unit/resource/page_presenters_spec.rb +44 -0
  479. data/spec/unit/resource/pagination_spec.rb +38 -0
  480. data/spec/unit/resource/routes_spec.rb +73 -0
  481. data/spec/unit/resource/scopes_spec.rb +50 -0
  482. data/spec/unit/resource/sidebars_spec.rb +43 -0
  483. data/spec/unit/resource_collection_spec.rb +158 -0
  484. data/spec/unit/resource_controller/data_access_spec.rb +73 -0
  485. data/spec/unit/resource_controller/decorators_spec.rb +86 -0
  486. data/spec/unit/resource_controller/sidebars_spec.rb +46 -0
  487. data/spec/unit/resource_controller_spec.rb +265 -0
  488. data/spec/unit/resource_registration_spec.rb +56 -0
  489. data/spec/unit/resource_spec.rb +263 -0
  490. data/spec/unit/routing_spec.rb +172 -0
  491. data/spec/unit/scope_spec.rb +114 -0
  492. data/spec/unit/settings_spec.rb +88 -0
  493. data/spec/unit/view_factory_spec.rb +21 -0
  494. data/spec/unit/view_helpers/breadcrumbs_spec.rb +180 -0
  495. data/spec/unit/view_helpers/display_name_spec.rb +68 -0
  496. data/spec/unit/view_helpers/download_format_links_helper_spec.rb +39 -0
  497. data/spec/unit/view_helpers/fields_for_spec.rb +50 -0
  498. data/spec/unit/view_helpers/form_helper_spec.rb +42 -0
  499. data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +97 -0
  500. data/spec/unit/views/components/action_list_popover_spec.rb +29 -0
  501. data/spec/unit/views/components/attributes_table_spec.rb +259 -0
  502. data/spec/unit/views/components/batch_action_popover_spec.rb +33 -0
  503. data/spec/unit/views/components/blank_slate_spec.rb +17 -0
  504. data/spec/unit/views/components/columns_spec.rb +172 -0
  505. data/spec/unit/views/components/index_list_spec.rb +32 -0
  506. data/spec/unit/views/components/paginated_collection_spec.rb +229 -0
  507. data/spec/unit/views/components/panel_spec.rb +51 -0
  508. data/spec/unit/views/components/popover_spec.rb +33 -0
  509. data/spec/unit/views/components/sidebar_section_spec.rb +47 -0
  510. data/spec/unit/views/components/site_title_spec.rb +78 -0
  511. data/spec/unit/views/components/status_tag_spec.rb +102 -0
  512. data/spec/unit/views/components/table_for_spec.rb +242 -0
  513. data/spec/unit/views/pages/form_spec.rb +35 -0
  514. data/spec/unit/views/pages/layout_spec.rb +63 -0
  515. data/spec/unit/views/pages/show_spec.rb +20 -0
  516. data/spec/unit/views/tabbed_navigation_spec.rb +149 -0
  517. data/tasks/docs.rake +37 -0
  518. data/tasks/js.rake +32 -0
  519. data/tasks/parallel_tests.rake +60 -0
  520. data/tasks/test.rake +79 -0
  521. data/tasks/yard.rake +7 -0
  522. metadata +741 -0
@@ -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
+ expect(namespace).to 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
+ expect(namespace).to receive(:authentication_method).twice.
23
+ and_return(:authenticate_admin_user!)
24
+
25
+ expect(controller).to 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
+ expect(namespace).to receive(:current_user_method).once.and_return(nil)
38
+
39
+ expect(controller.send(:current_active_admin_user)).to eq 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
+ expect(namespace).to receive(:current_user_method).twice.
47
+ and_return(:current_admin_user)
48
+
49
+ expect(controller).to receive(:current_admin_user).and_return(user)
50
+
51
+ expect(controller.send(:current_active_admin_user)).to eq 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
+ expect(resource).to receive(:save)
91
+ end
92
+
93
+ it "should call the before create callback" do
94
+ expect(controller).to receive(:call_before_create).with(resource)
95
+ controller.send :create_resource, resource
96
+ end
97
+ it "should call the before save callback" do
98
+ expect(controller).to receive(:call_before_save).with(resource)
99
+ controller.send :create_resource, resource
100
+ end
101
+ it "should call the after save callback" do
102
+ expect(controller).to receive(:call_after_save).with(resource)
103
+ controller.send :create_resource, resource
104
+ end
105
+ it "should call the after create callback" do
106
+ expect(controller).to 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
+ expect(resource).to receive(:attributes=).with(attributes[0])
118
+ expect(resource).to receive(:save)
119
+ end
120
+
121
+ it "should call the before update callback" do
122
+ expect(controller).to 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
+ expect(controller).to 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
+ expect(controller).to 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
+ expect(controller).to 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
+ expect(resource).to receive(:destroy)
145
+ end
146
+
147
+ it "should call the before destroy callback" do
148
+ expect(controller).to 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
+ expect(controller).to 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
+ expect(subject.title).to eq 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
+ expect(subject.first).to 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
+ expect(subject).to 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
+ expect(subject.first.title).to eq 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
+ expect(namespace).to receive(:register)
11
+
12
+ application.register Category
13
+ end
14
+
15
+ it "should dispatch a Resource::RegisterEvent" do
16
+ expect(ActiveAdmin::Event).to 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
+ expect(namespace).to 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
+ expect(ActiveAdmin::Event).to receive(:dispatch).with(ActiveAdmin::Namespace::RegisterEvent, an_instance_of(ActiveAdmin::Namespace))
32
+ expect(ActiveAdmin::Event).to 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
+ expect(namespace).to 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
+ expect(config_1).to eq config_2
52
+ expect(config_1.filters.size).to eq 2
53
+ end
54
+ end
55
+
56
+ end
@@ -0,0 +1,263 @@
1
+ require 'spec_helper'
2
+ require File.expand_path('config_shared_examples', File.dirname(__FILE__))
3
+
4
+ module ActiveAdmin
5
+ describe Resource do
6
+
7
+ it_should_behave_like "ActiveAdmin::Config"
8
+
9
+ before { load_defaults! }
10
+
11
+ let(:application){ ActiveAdmin::Application.new }
12
+ let(:namespace){ Namespace.new(application, :admin) }
13
+
14
+ def config(options = {})
15
+ @config ||= Resource.new(namespace, Category, options)
16
+ end
17
+
18
+ it { respond_to :resource_class }
19
+
20
+ describe "#resource_table_name" do
21
+ it "should return the resource's table name" do
22
+ expect(config.resource_table_name).to eq '"categories"'
23
+ end
24
+ context "when the :as option is given" do
25
+ it "should return the resource's table name" do
26
+ expect(config(as: "My Category").resource_table_name).to eq '"categories"'
27
+ end
28
+ end
29
+ end
30
+
31
+ describe "#resource_column_names" do
32
+ it "should return the resource's column names" do
33
+ expect(config.resource_column_names).to eq Category.column_names
34
+ end
35
+ end
36
+
37
+ describe '#decorator_class' do
38
+ it 'returns nil by default' do
39
+ expect(config.decorator_class).to be_nil
40
+ end
41
+ context 'when a decorator is defined' do
42
+ let(:resource) { namespace.register(Post) { decorate_with PostDecorator } }
43
+ specify '#decorator_class_name should return PostDecorator' do
44
+ expect(resource.decorator_class_name).to eq '::PostDecorator'
45
+ end
46
+
47
+ it 'returns the decorator class' do
48
+ expect(resource.decorator_class).to eq PostDecorator
49
+ end
50
+ end
51
+ end
52
+
53
+
54
+ describe "controller name" do
55
+ it "should return a namespaced controller name" do
56
+ expect(config.controller_name).to eq "Admin::CategoriesController"
57
+ end
58
+ context "when non namespaced controller" do
59
+ let(:namespace){ ActiveAdmin::Namespace.new(application, :root) }
60
+ it "should return a non namespaced controller name" do
61
+ expect(config.controller_name).to eq "CategoriesController"
62
+ end
63
+ end
64
+ end
65
+
66
+ describe "#include_in_menu?" do
67
+ let(:namespace){ ActiveAdmin::Namespace.new(application, :admin) }
68
+ subject{ resource }
69
+
70
+ context "when regular resource" do
71
+ let(:resource){ namespace.register(Post) }
72
+ it { should be_include_in_menu }
73
+ end
74
+
75
+ context "when menu set to false" do
76
+ let(:resource){ namespace.register(Post){ menu false } }
77
+ it { should_not be_include_in_menu }
78
+ end
79
+ end
80
+
81
+ describe "#belongs_to" do
82
+
83
+ it "should build a belongs to configuration" do
84
+ expect(config.belongs_to_config).to be_nil
85
+ config.belongs_to :posts
86
+ expect(config.belongs_to_config).to_not be_nil
87
+ end
88
+
89
+ it "should set the target menu to the belongs to target" do
90
+ expect(config.navigation_menu_name).to eq ActiveAdmin::DEFAULT_MENU
91
+ config.belongs_to :posts
92
+ expect(config.navigation_menu_name).to eq :posts
93
+ end
94
+
95
+ end
96
+
97
+ describe "scoping" do
98
+ context "when using a block" do
99
+ before do
100
+ @resource = application.register Category do
101
+ scope_to do
102
+ "scoped"
103
+ end
104
+ end
105
+ end
106
+ it "should call the proc for the begin of association chain" do
107
+ begin_of_association_chain = @resource.controller.new.send(:begin_of_association_chain)
108
+ expect(begin_of_association_chain).to eq "scoped"
109
+ end
110
+ end
111
+
112
+ context "when using a symbol" do
113
+ before do
114
+ @resource = application.register Category do
115
+ scope_to :current_user
116
+ end
117
+ end
118
+ it "should call the method for the begin of association chain" do
119
+ controller = @resource.controller.new
120
+ expect(controller).to receive(:current_user).and_return(true)
121
+ begin_of_association_chain = controller.send(:begin_of_association_chain)
122
+ expect(begin_of_association_chain).to eq true
123
+ end
124
+ end
125
+
126
+ describe "getting the method for the association chain" do
127
+ context "when a simple registration" do
128
+ before do
129
+ @resource = application.register Category do
130
+ scope_to :current_user
131
+ end
132
+ end
133
+ it "should return the pluralized collection name" do
134
+ expect(@resource.controller.new.send(:method_for_association_chain)).to eq :categories
135
+ end
136
+ end
137
+ context "when passing in the method as an option" do
138
+ before do
139
+ @resource = application.register Category do
140
+ scope_to :current_user, association_method: :blog_categories
141
+ end
142
+ end
143
+ it "should return the method from the option" do
144
+ expect(@resource.controller.new.send(:method_for_association_chain)).to eq :blog_categories
145
+ end
146
+ end
147
+ end
148
+ end
149
+
150
+
151
+ describe "sort order" do
152
+
153
+ context "when resource class responds to primary_key" do
154
+ it "should sort by primary key desc by default" do
155
+ expect(MockResource).to receive(:primary_key).and_return("pk")
156
+ config = Resource.new(namespace, MockResource)
157
+ expect(config.sort_order).to eq "pk_desc"
158
+ end
159
+ end
160
+
161
+ context "when resource class does not respond to primary_key" do
162
+ it "should default to id" do
163
+ config = Resource.new(namespace, MockResource)
164
+ expect(config.sort_order).to eq "id_desc"
165
+ end
166
+ end
167
+
168
+ it "should be set-able" do
169
+ config.sort_order = "task_id_desc"
170
+ expect(config.sort_order).to eq "task_id_desc"
171
+ end
172
+
173
+ end
174
+
175
+ describe "adding a scope" do
176
+
177
+ it "should add a scope" do
178
+ config.scope :published
179
+ expect(config.scopes.first).to be_a(ActiveAdmin::Scope)
180
+ expect(config.scopes.first.name).to eq "Published"
181
+ end
182
+
183
+ it "should retrive a scope by its id" do
184
+ config.scope :published
185
+ expect(config.get_scope_by_id(:published).name).to eq "Published"
186
+ end
187
+
188
+ it "should retrieve the default scope by proc" do
189
+ config.scope :published, default: proc{ true }
190
+ config.scope :all
191
+ expect(config.default_scope.name).to eq "Published"
192
+ end
193
+
194
+ end
195
+
196
+ describe "#csv_builder" do
197
+ context "when no csv builder set" do
198
+ it "should return a default column builder with id and content columns" do
199
+ expect(config.csv_builder.render_columns.size).to eq Category.content_columns.size + 1
200
+ end
201
+ end
202
+
203
+ context "when csv builder set" do
204
+ it "shuld return the csv_builder we set" do
205
+ csv_builder = CSVBuilder.new
206
+ config.csv_builder = csv_builder
207
+ expect(config.csv_builder).to eq csv_builder
208
+ end
209
+ end
210
+ end
211
+
212
+ describe "#breadcrumb" do
213
+ subject { config.breadcrumb }
214
+
215
+ context "when no breadcrumb is set" do
216
+ it { should == namespace.breadcrumb }
217
+ end
218
+
219
+ context "when breadcrumb is set" do
220
+ context "when set to true" do
221
+ before { config.breadcrumb = true }
222
+ it { should be_true }
223
+ end
224
+
225
+ context "when set to false" do
226
+ before { config.breadcrumb = false }
227
+ it { should be_false }
228
+ end
229
+ end
230
+ end
231
+
232
+ describe '#find_resource' do
233
+ let(:resource) { namespace.register(Post) }
234
+ let(:post) { double }
235
+ before do
236
+ Post.stub(:where).with('id' => '12345').and_return { [post] }
237
+ end
238
+
239
+ it 'can find the resource' do
240
+ expect(resource.find_resource('12345')).to eq post
241
+ end
242
+
243
+ context 'with a decorator' do
244
+ let(:resource) { namespace.register(Post) { decorate_with PostDecorator } }
245
+ it 'decorates the resource' do
246
+ expect(resource.find_resource('12345')).to eq PostDecorator.new(post)
247
+ end
248
+ end
249
+
250
+ context 'when using a nonstandard primary key' do
251
+ let(:different_post) { double }
252
+ before do
253
+ Post.stub(:primary_key).and_return 'something_else'
254
+ Post.stub(:where).with('something_else' => '55555').and_return { [different_post] }
255
+ end
256
+
257
+ it 'can find the post by the custom primary key' do
258
+ expect(resource.find_resource('55555')).to eq different_post
259
+ end
260
+ end
261
+ end
262
+ end
263
+ end