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,172 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe ActiveAdmin, "Routing", type: :routing do
6
+
7
+ before do
8
+ load_defaults!
9
+ reload_routes!
10
+ end
11
+
12
+ it "should only have the namespaces necessary for route testing" do
13
+ ActiveAdmin.application.namespaces.keys.should eq [:admin, :root]
14
+ end
15
+
16
+ it "should route to the admin dashboard" do
17
+ expect(get('/admin')).to route_to 'admin/dashboard#index'
18
+ end
19
+
20
+ describe "standard resources" do
21
+ context "when in admin namespace" do
22
+ it "should route the index path" do
23
+ expect(admin_posts_path).to eq "/admin/posts"
24
+ end
25
+
26
+ it "should route the show path" do
27
+ expect(admin_post_path(1)).to eq "/admin/posts/1"
28
+ end
29
+
30
+ it "should route the new path" do
31
+ expect(new_admin_post_path).to eq "/admin/posts/new"
32
+ end
33
+
34
+ it "should route the edit path" do
35
+ expect(edit_admin_post_path(1)).to eq "/admin/posts/1/edit"
36
+ end
37
+ end
38
+
39
+ context "when in root namespace" do
40
+ before(:each) do
41
+ load_resources { ActiveAdmin.register(Post, namespace: false) }
42
+ end
43
+
44
+ it "should route the index path" do
45
+ expect(posts_path).to eq "/posts"
46
+ end
47
+
48
+ it "should route the show path" do
49
+ expect(post_path(1)).to eq "/posts/1"
50
+ end
51
+
52
+ it "should route the new path" do
53
+ expect(new_post_path).to eq "/posts/new"
54
+ end
55
+
56
+ it "should route the edit path" do
57
+ expect(edit_post_path(1)).to eq "/posts/1/edit"
58
+ end
59
+ end
60
+
61
+ context "with member action" do
62
+ context "without an http verb" do
63
+ before do
64
+ load_resources do
65
+ ActiveAdmin.register(Post){ member_action "do_something" }
66
+ end
67
+ end
68
+
69
+ it "should default to GET" do
70
+ expect({get: "/admin/posts/1/do_something"}).to be_routable
71
+ expect({post: "/admin/posts/1/do_something"}).to_not be_routable
72
+ end
73
+ end
74
+
75
+ context "with one http verb" do
76
+ before do
77
+ load_resources do
78
+ ActiveAdmin.register(Post){ member_action "do_something", method: :post }
79
+ end
80
+ end
81
+
82
+ it "should properly route" do
83
+ expect({post: "/admin/posts/1/do_something"}).to be_routable
84
+ end
85
+ end
86
+
87
+ context "with two http verbs" do
88
+ before do
89
+ load_resources do
90
+ ActiveAdmin.register(Post){ member_action "do_something", method: [:put, :delete] }
91
+ end
92
+ end
93
+
94
+ it "should properly route the first verb" do
95
+ expect({put: "/admin/posts/1/do_something"}).to be_routable
96
+ end
97
+
98
+ it "should properly route the second verb" do
99
+ expect({delete: "/admin/posts/1/do_something"}).to be_routable
100
+ end
101
+ end
102
+ end
103
+ end
104
+
105
+ describe "belongs to resource" do
106
+ it "should route the nested index path" do
107
+ expect(admin_user_posts_path(1)).to eq "/admin/users/1/posts"
108
+ end
109
+
110
+ it "should route the nested show path" do
111
+ expect(admin_user_post_path(1,2)).to eq "/admin/users/1/posts/2"
112
+ end
113
+
114
+ it "should route the nested new path" do
115
+ expect(new_admin_user_post_path(1)).to eq "/admin/users/1/posts/new"
116
+ end
117
+
118
+ it "should route the nested edit path" do
119
+ expect(edit_admin_user_post_path(1,2)).to eq "/admin/users/1/posts/2/edit"
120
+ end
121
+
122
+ context "with collection action" do
123
+ before do
124
+ load_resources do
125
+ ActiveAdmin.register(Post) do
126
+ belongs_to :user, optional: true
127
+ end
128
+ ActiveAdmin.register(User) do
129
+ collection_action "do_something"
130
+ end
131
+ end
132
+ end
133
+
134
+ it "should properly route the collection action" do
135
+ expect({ get: "/admin/users/do_something" }).to \
136
+ route_to({ controller: 'admin/users', action: 'do_something'})
137
+ end
138
+ end
139
+ end
140
+
141
+ describe "page" do
142
+ context "when default namespace" do
143
+ before(:each) do
144
+ load_resources { ActiveAdmin.register_page("Chocolate I lØve You!") }
145
+ end
146
+
147
+ it "should route to the page under /admin" do
148
+ expect(admin_chocolate_i_love_you_path).to eq "/admin/chocolate_i_love_you"
149
+ end
150
+
151
+ context "when in the root namespace" do
152
+ before(:each) do
153
+ load_resources { ActiveAdmin.register_page("Chocolate I lØve You!", namespace: false) }
154
+ end
155
+
156
+ it "should route to page under /" do
157
+ expect(chocolate_i_love_you_path).to eq "/chocolate_i_love_you"
158
+ end
159
+ end
160
+
161
+ context "when singular page name" do
162
+ before(:each) do
163
+ load_resources { ActiveAdmin.register_page("Log") }
164
+ end
165
+
166
+ it "should not inject _index_ into the route name" do
167
+ expect(admin_log_path).to eq "/admin/log"
168
+ end
169
+ end
170
+ end
171
+ end
172
+ end
@@ -0,0 +1,114 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveAdmin::Scope do
4
+
5
+ describe "creating a scope" do
6
+ subject{ scope }
7
+
8
+ context "when just a scope method" do
9
+ let(:scope) { ActiveAdmin::Scope.new :published }
10
+ its(:name) { should == "Published"}
11
+ its(:id) { should == "published"}
12
+ its(:scope_method) { should == :published }
13
+ end
14
+
15
+ context "when scope method is :all" do
16
+ let(:scope) { ActiveAdmin::Scope.new :all }
17
+ its(:name) { should == "All"}
18
+ its(:id) { should == "all"}
19
+ # :all does not return a chain but an array of active record
20
+ # instances. We set the scope_method to nil then.
21
+ its(:scope_method) { should == nil }
22
+ its(:scope_block) { should == nil }
23
+ end
24
+
25
+ context 'when a name and scope method is :all' do
26
+ let(:scope) { ActiveAdmin::Scope.new 'Tous', :all }
27
+ its(:name) { should eq 'Tous' }
28
+ its(:scope_method) { should be_nil }
29
+ its(:scope_block) { should be_nil }
30
+ end
31
+
32
+ context "when a name and scope method" do
33
+ let(:scope) { ActiveAdmin::Scope.new "With API Access", :with_api_access }
34
+ its(:name) { should == "With API Access"}
35
+ its(:id) { should == "with_api_access"}
36
+ its(:scope_method) { should == :with_api_access }
37
+ end
38
+
39
+ context "when a name and scope block" do
40
+ let(:scope) { ActiveAdmin::Scope.new("My Scope"){|s| s } }
41
+ its(:name) { should == "My Scope"}
42
+ its(:id) { should == "my_scope"}
43
+ its(:scope_method) { should == nil }
44
+ its(:scope_block) { should be_a(Proc)}
45
+ end
46
+
47
+ context "when a name has a space and lowercase" do
48
+ let(:scope) { ActiveAdmin::Scope.new("my scope") }
49
+ its(:name) { should == "my scope"}
50
+ its(:id) { should == "my_scope"}
51
+ end
52
+
53
+ context "with a proc as the label" do
54
+ it "should raise an exception if a second argument isn't provided" do
55
+ expect{ ActiveAdmin::Scope.new proc{ Date.today.strftime '%A' }
56
+ }.to raise_error
57
+ end
58
+
59
+ it "should properly render the proc" do
60
+ scope = ActiveAdmin::Scope.new proc{ Date.today.strftime '%A' }, :foobar
61
+ expect(scope.name).to eq Date.today.strftime '%A'
62
+ end
63
+ end
64
+
65
+ end # describe "creating a scope"
66
+
67
+ describe "#display_if_block" do
68
+
69
+ it "should return true by default" do
70
+ scope = ActiveAdmin::Scope.new(:default)
71
+ expect(scope.display_if_block.call).to eq true
72
+ end
73
+
74
+ it "should return the :if block if set" do
75
+ scope = ActiveAdmin::Scope.new(:with_block, nil, if: proc{ false })
76
+ expect(scope.display_if_block.call).to eq false
77
+ end
78
+
79
+ end
80
+
81
+ describe "#default" do
82
+
83
+ it "should accept a boolean" do
84
+ scope = ActiveAdmin::Scope.new(:method, nil, default: true)
85
+ expect(scope.default_block).to eq true
86
+ end
87
+
88
+ it "should default to a false #default_block" do
89
+ scope = ActiveAdmin::Scope.new(:method, nil)
90
+ expect(scope.default_block.call).to eq false
91
+ end
92
+
93
+ it "should store the :default proc" do
94
+ scope = ActiveAdmin::Scope.new(:with_block, nil, default: proc{ true })
95
+ expect(scope.default_block.call).to eq true
96
+ end
97
+
98
+ end
99
+
100
+ describe "show_count" do
101
+
102
+ it "should allow setting of show_count to prevent showing counts" do
103
+ scope = ActiveAdmin::Scope.new(:default, nil, show_count: false)
104
+ expect(scope.show_count).to eq false
105
+ end
106
+
107
+ it "should set show_count to true if not passed in" do
108
+ scope = ActiveAdmin::Scope.new(:default)
109
+ expect(scope.show_count).to eq true
110
+ end
111
+
112
+ end
113
+
114
+ end
@@ -0,0 +1,88 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveAdmin::Settings do
4
+
5
+ subject{ Class.new{ include ActiveAdmin::Settings } }
6
+
7
+ it{ should respond_to :setting }
8
+ it{ should respond_to :deprecated_setting }
9
+ it{ should respond_to :default_settings }
10
+
11
+ describe "class API" do
12
+ it "should create settings" do
13
+ subject.setting :foo, 'bar'
14
+ expect(subject.default_settings[:foo]).to eq 'bar'
15
+ end
16
+
17
+ it "should create deprecated settings" do
18
+ expect(ActiveAdmin::Deprecation).to receive(:deprecate).twice
19
+ subject.deprecated_setting :baz, 32
20
+ expect(subject.default_settings[:baz]).to eq 32
21
+ end
22
+ end
23
+
24
+ describe "instance API" do
25
+
26
+ before do
27
+ subject.setting :foo, 'bar'
28
+ subject.deprecated_setting :baz, 32
29
+ end
30
+ let(:instance) { subject.new }
31
+
32
+ it "should have access to a default value" do
33
+ expect(instance.foo).to eq 'bar'
34
+ instance.foo = 'qqq'
35
+ expect(instance.foo).to eq 'qqq'
36
+ end
37
+
38
+ it "should have access to a deprecated value" do
39
+ expect(ActiveAdmin::Deprecation).to receive(:warn).exactly(3).times
40
+ expect(instance.baz).to eq 32
41
+ instance.baz = [45]
42
+ expect(instance.baz).to eq [45]
43
+ end
44
+ end
45
+
46
+ end
47
+
48
+
49
+ describe ActiveAdmin::Settings::Inheritance do
50
+
51
+ subject do
52
+ Class.new do
53
+ include ActiveAdmin::Settings
54
+ include ActiveAdmin::Settings::Inheritance
55
+ end
56
+ end
57
+
58
+ it{ should respond_to :settings_inherited_by }
59
+ it{ should respond_to :inheritable_setting }
60
+ it{ should respond_to :deprecated_inheritable_setting }
61
+
62
+ let(:heir) { Class.new }
63
+
64
+ before do
65
+ subject.settings_inherited_by heir
66
+ end
67
+
68
+ describe "class API" do
69
+ it "should add setting to an heir" do
70
+ subject.inheritable_setting :one, 2
71
+ expect(heir.default_settings[:one]).to eq 2
72
+ end
73
+
74
+ it "should add deprecated setting to an heir" do
75
+ expect(ActiveAdmin::Deprecation).to receive(:deprecate).exactly(4).times
76
+ subject.deprecated_inheritable_setting :three, 4
77
+ expect(heir.default_settings[:three]).to eq 4
78
+ end
79
+ end
80
+
81
+ describe "instance API" do
82
+ before{ subject.inheritable_setting :left, :right }
83
+ it "should work" do
84
+ expect(heir.new.left).to eq :right
85
+ end
86
+ end
87
+
88
+ end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ def it_should_have_view(key, value)
4
+ it "should have #{value} for view key '#{key}'" do
5
+ expect(subject.send(key)).to eq value
6
+ end
7
+ end
8
+
9
+ describe ActiveAdmin::ViewFactory do
10
+
11
+ it_should_have_view :global_navigation, ActiveAdmin::Views::TabbedNavigation
12
+ it_should_have_view :utility_navigation, ActiveAdmin::Views::TabbedNavigation
13
+ it_should_have_view :site_title, ActiveAdmin::Views::SiteTitle
14
+ it_should_have_view :action_items, ActiveAdmin::Views::ActionItems
15
+ it_should_have_view :header, ActiveAdmin::Views::Header
16
+ it_should_have_view :blank_slate, ActiveAdmin::Views::BlankSlate
17
+ it_should_have_view :action_list_popover, ActiveAdmin::Views::ActionListPopover
18
+
19
+ it_should_have_view :layout, ActiveAdmin::Views::Pages::Layout
20
+
21
+ end
@@ -0,0 +1,180 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Breadcrumbs" do
4
+
5
+ include ActiveAdmin::ViewHelpers
6
+
7
+ describe "generating a trail from paths" do
8
+
9
+ def params; {}; end
10
+ def link_to(name, url); {name: name, path: url}; end
11
+
12
+ let(:user) { double display_name: 'Jane Doe' }
13
+ let(:user_config) { double find_resource: user,
14
+ resource_name: double(route_key: 'users') }
15
+ let(:post) { double display_name: 'Hello World' }
16
+ let(:post_config) { double find_resource: post,
17
+ belongs_to_config: double(target: user_config),
18
+ resource_name: double(route_key: 'posts') }
19
+
20
+ let :active_admin_config do
21
+ post_config
22
+ end
23
+
24
+ let(:trail) { breadcrumb_links(path) }
25
+
26
+ context "when request '/admin'" do
27
+ let(:path) { "/admin" }
28
+
29
+ it "should not have any items" do
30
+ expect(trail.size).to eq 0
31
+ end
32
+ end
33
+
34
+ context "when path '/admin/users'" do
35
+ let(:path) { "/admin/users" }
36
+
37
+ it "should have one item" do
38
+ expect(trail.size).to eq 1
39
+ end
40
+ it "should have a link to /admin" do
41
+ expect(trail[0][:name]).to eq "Admin"
42
+ expect(trail[0][:path]).to eq "/admin"
43
+ end
44
+ end
45
+
46
+ context "when path '/admin/users/1'" do
47
+ let(:path) { "/admin/users/1" }
48
+
49
+ it "should have 2 items" do
50
+ expect(trail.size).to eq 2
51
+ end
52
+ it "should have a link to /admin" do
53
+ expect(trail[0][:name]).to eq "Admin"
54
+ expect(trail[0][:path]).to eq "/admin"
55
+ end
56
+ it "should have a link to /admin/users" do
57
+ expect(trail[1][:name]).to eq "Users"
58
+ expect(trail[1][:path]).to eq "/admin/users"
59
+ end
60
+ end
61
+
62
+ context "when path '/admin/users/1/posts'" do
63
+ let(:path) { "/admin/users/1/posts" }
64
+
65
+ it "should have 3 items" do
66
+ expect(trail.size).to eq 3
67
+ end
68
+ it "should have a link to /admin" do
69
+ expect(trail[0][:name]).to eq "Admin"
70
+ expect(trail[0][:path]).to eq "/admin"
71
+ end
72
+ it "should have a link to /admin/users" do
73
+ expect(trail[1][:name]).to eq "Users"
74
+ expect(trail[1][:path]).to eq "/admin/users"
75
+ end
76
+
77
+ context "when User.find(1) doesn't exist" do
78
+ before { user_config.stub(find_resource: nil) }
79
+ it "should have a link to /admin/users/1" do
80
+ expect(trail[2][:name]).to eq "1"
81
+ expect(trail[2][:path]).to eq "/admin/users/1"
82
+ end
83
+ end
84
+
85
+ context "when User.find(1) does exist" do
86
+ it "should have a link to /admin/users/1 using display name" do
87
+ expect(trail[2][:name]).to eq "Jane Doe"
88
+ expect(trail[2][:path]).to eq "/admin/users/1"
89
+ end
90
+ end
91
+ end
92
+
93
+ context "when path '/admin/users/4e24d6249ccf967313000000/posts'" do
94
+ let(:path) { "/admin/users/4e24d6249ccf967313000000/posts" }
95
+
96
+ it "should have 3 items" do
97
+ expect(trail.size).to eq 3
98
+ end
99
+ it "should have a link to /admin" do
100
+ expect(trail[0][:name]).to eq "Admin"
101
+ expect(trail[0][:path]).to eq "/admin"
102
+ end
103
+ it "should have a link to /admin/users" do
104
+ expect(trail[1][:name]).to eq "Users"
105
+ expect(trail[1][:path]).to eq "/admin/users"
106
+ end
107
+
108
+ context "when User.find(4e24d6249ccf967313000000) doesn't exist" do
109
+ before { user_config.stub(find_resource: nil) }
110
+ it "should have a link to /admin/users/4e24d6249ccf967313000000" do
111
+ expect(trail[2][:name]).to eq "4e24d6249ccf967313000000"
112
+ expect(trail[2][:path]).to eq "/admin/users/4e24d6249ccf967313000000"
113
+ end
114
+ end
115
+
116
+ context "when User.find(4e24d6249ccf967313000000) does exist" do
117
+ before do
118
+ user_config.stub find_resource: double(display_name: 'Hello :)')
119
+ end
120
+ it "should have a link to /admin/users/4e24d6249ccf967313000000 using display name" do
121
+ expect(trail[2][:name]).to eq "Hello :)"
122
+ expect(trail[2][:path]).to eq "/admin/users/4e24d6249ccf967313000000"
123
+ end
124
+ end
125
+ end
126
+
127
+ context "when path '/admin/users/1/coments/1'" do
128
+ let(:path) { "/admin/users/1/posts/1" }
129
+
130
+ it "should have 4 items" do
131
+ expect(trail.size).to eq 4
132
+ end
133
+ it "should have a link to /admin" do
134
+ expect(trail[0][:name]).to eq "Admin"
135
+ expect(trail[0][:path]).to eq "/admin"
136
+ end
137
+ it "should have a link to /admin/users" do
138
+ expect(trail[1][:name]).to eq "Users"
139
+ expect(trail[1][:path]).to eq "/admin/users"
140
+ end
141
+ it "should have a link to /admin/users/1" do
142
+ expect(trail[2][:name]).to eq "Jane Doe"
143
+ expect(trail[2][:path]).to eq "/admin/users/1"
144
+ end
145
+ it "should have a link to /admin/users/1/posts" do
146
+ expect(trail[3][:name]).to eq "Posts"
147
+ expect(trail[3][:path]).to eq "/admin/users/1/posts"
148
+ end
149
+ end
150
+
151
+ context "when path '/admin/users/1/coments/1/edit'" do
152
+ let(:path) { "/admin/users/1/posts/1/edit" }
153
+
154
+ it "should have 5 items" do
155
+ expect(trail.size).to eq 5
156
+ end
157
+ it "should have a link to /admin" do
158
+ expect(trail[0][:name]).to eq "Admin"
159
+ expect(trail[0][:path]).to eq "/admin"
160
+ end
161
+ it "should have a link to /admin/users" do
162
+ expect(trail[1][:name]).to eq "Users"
163
+ expect(trail[1][:path]).to eq "/admin/users"
164
+ end
165
+ it "should have a link to /admin/users/1" do
166
+ expect(trail[2][:name]).to eq "Jane Doe"
167
+ expect(trail[2][:path]).to eq "/admin/users/1"
168
+ end
169
+ it "should have a link to /admin/users/1/posts" do
170
+ expect(trail[3][:name]).to eq "Posts"
171
+ expect(trail[3][:path]).to eq "/admin/users/1/posts"
172
+ end
173
+ it "should have a link to /admin/users/1/posts/1" do
174
+ expect(trail[4][:name]).to eq "Hello World"
175
+ expect(trail[4][:path]).to eq "/admin/users/1/posts/1"
176
+ end
177
+ end
178
+
179
+ end
180
+ end