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,51 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveAdmin::Views::Panel do
4
+
5
+ let(:the_panel) do
6
+ render_arbre_component do
7
+ panel "My Title" do
8
+ span("Hello World")
9
+ end
10
+ end
11
+ end
12
+
13
+ it "should have a title h3" do
14
+ expect(the_panel.find_by_tag("h3").first.content).to eq "My Title"
15
+ end
16
+
17
+ it "should have a contents div" do
18
+ expect(the_panel.find_by_tag("div").first.class_list).to include("panel_contents")
19
+ end
20
+
21
+ it "should add children to the contents div" do
22
+ expect(the_panel.find_by_tag("span").first.parent).to eq the_panel.find_by_tag("div").first
23
+ end
24
+
25
+ it "should set the icon" do
26
+ the_panel = render_arbre_component do
27
+ panel("Title", icon: :arrow_down)
28
+ end
29
+ expect(the_panel.find_by_tag("h3").first.content).to include("span class=\"icon")
30
+ end
31
+
32
+ it "should allow a html_safe title (without icon)" do
33
+ title_with_html = %q[Title with <abbr>HTML</abbr>].html_safe
34
+ the_panel = render_arbre_component do
35
+ panel(title_with_html)
36
+ end
37
+ expect(the_panel.find_by_tag("h3").first.content).to eq(title_with_html)
38
+ end
39
+
40
+ describe "#children?" do
41
+
42
+ it "returns false if no children have been added to the panel" do
43
+ the_panel = render_arbre_component do
44
+ panel("A Panel")
45
+ end
46
+ expect(the_panel.children?).to eq false
47
+ end
48
+
49
+ end
50
+
51
+ end
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveAdmin::Views::Popover do
4
+
5
+ let(:the_popover) do
6
+ render_arbre_component do
7
+ popover id: "my_awesome_popover" do
8
+ para "Hello World, this is popover content baby."
9
+ end
10
+ end
11
+ end
12
+
13
+ it "should have the class of 'sidebar_section'" do
14
+ expect(the_popover.class_list).to include("popover")
15
+ end
16
+
17
+ it "should have an inner content element class of 'popover_contents'" do
18
+ expect(the_popover.find_by_tag("div").first.class_list).to include("popover_contents")
19
+ end
20
+
21
+ it "should have the popover content in the inner content element" do
22
+ expect(the_popover.find_by_class("popover_contents").first.content).to include("Hello World, this is popover content baby.")
23
+ end
24
+
25
+ it "should have an id" do
26
+ expect(the_popover.id).to eq "my_awesome_popover"
27
+ end
28
+
29
+ it "should be hidden" do
30
+ expect(the_popover.attributes).to include(style: "display: none");
31
+ end
32
+
33
+ end
@@ -0,0 +1,47 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveAdmin::Views::SidebarSection do
4
+
5
+ let(:options) { {} }
6
+
7
+ let(:section) do
8
+ ActiveAdmin::SidebarSection.new("Help Section", options) do
9
+ span "Help Me"
10
+ end
11
+ end
12
+
13
+ let(:html) do
14
+ render_arbre_component section: section do
15
+ sidebar_section(assigns[:section])
16
+ end
17
+ end
18
+
19
+ it "should have a title h3" do
20
+ expect(html.find_by_tag("h3").first.content).to eq "Help Section"
21
+ end
22
+
23
+ it "should have the class of 'sidebar_section'" do
24
+ expect(html.class_list).to include("sidebar_section")
25
+ end
26
+
27
+ it "should have an id based on the title" do
28
+ expect(html.id).to eq "help-section_sidebar_section"
29
+ end
30
+
31
+ it "should have a contents div" do
32
+ expect(html.find_by_tag("div").first.class_list).to include("panel_contents")
33
+ end
34
+
35
+ it "should add children to the contents div" do
36
+ expect(html.find_by_tag("span").first.parent).to eq html.find_by_tag("div").first
37
+ end
38
+
39
+ context 'with a custom class attribute' do
40
+ let(:options) { { class: 'custom_class' } }
41
+
42
+ it "should have 'custom_class' class" do
43
+ expect(html.class_list).to include("custom_class")
44
+ end
45
+ end
46
+
47
+ end
@@ -0,0 +1,78 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveAdmin::Views::SiteTitle do
4
+
5
+ let(:helpers){ mock_action_view }
6
+
7
+ def build_title(namespace)
8
+ render_arbre_component({namespace: namespace}, helpers) do
9
+ insert_tag ActiveAdmin::Views::SiteTitle, assigns[:namespace]
10
+ end
11
+ end
12
+
13
+ context "when a value" do
14
+
15
+ it "renders the string when a string is passed in" do
16
+ namespace = double site_title: "Hello World",
17
+ site_title_image: nil,
18
+ site_title_link: nil
19
+
20
+ site_title = build_title(namespace)
21
+ expect(site_title.content).to eq "Hello World"
22
+ end
23
+
24
+ it "renders the return value of a method when a symbol" do
25
+ expect(helpers).to receive(:hello_world).and_return("Hello World")
26
+
27
+ namespace = double site_title: :hello_world,
28
+ site_title_image: nil,
29
+ site_title_link: nil
30
+
31
+ site_title = build_title(namespace)
32
+ expect(site_title.content).to eq "Hello World"
33
+ end
34
+
35
+ it "renders the return value of a proc" do
36
+ namespace = double site_title: proc{ "Hello World" },
37
+ site_title_image: nil,
38
+ site_title_link: nil
39
+
40
+ site_title = build_title(namespace)
41
+ expect(site_title.content).to eq "Hello World"
42
+ end
43
+
44
+ end
45
+
46
+ context "when an image" do
47
+
48
+ it "renders the string when a string is passed in" do
49
+ expect(helpers).to receive(:image_tag).
50
+ with("an/image.png", alt: nil, id: "site_title_image").
51
+ and_return '<img src="/assets/an/image.png" />'.html_safe
52
+
53
+ namespace = double site_title: nil,
54
+ site_title_image: "an/image.png",
55
+ site_title_link: nil
56
+
57
+ site_title = build_title(namespace)
58
+ expect(site_title.content.strip).to eq '<img src="/assets/an/image.png" />'
59
+ end
60
+
61
+ end
62
+
63
+ context "when a link is present" do
64
+
65
+ it "renders the string when a string is passed in" do
66
+ namespace = double site_title: "Hello World",
67
+ site_title_image: nil,
68
+ site_title_link: "/"
69
+
70
+ site_title = build_title(namespace)
71
+ expect(site_title.content).to eq '<a href="/">Hello World</a>'
72
+ end
73
+
74
+ end
75
+
76
+
77
+
78
+ end
@@ -0,0 +1,102 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveAdmin::Views::StatusTag do
4
+
5
+ describe "#status_tag" do
6
+
7
+ # Helper method to build StatusTag objects in an Arbre context
8
+ def status_tag(*args)
9
+ render_arbre_component(status_tag_args: args) do
10
+ status_tag(*assigns[:status_tag_args])
11
+ end
12
+ end
13
+
14
+ subject { status_tag(nil) }
15
+
16
+
17
+ its(:tag_name) { should eq 'span' }
18
+ its(:class_list) { should include('status_tag') }
19
+
20
+ context "when status is 'completed'" do
21
+ subject { status_tag('completed') }
22
+
23
+ its(:tag_name) { should eq 'span' }
24
+ its(:class_list) { should include('status_tag') }
25
+ its(:class_list) { should include('completed') }
26
+ its(:content) { should eq 'Completed' }
27
+ end
28
+
29
+ context "when status is 'in_progress'" do
30
+ subject { status_tag('in_progress') }
31
+
32
+ its(:class_list) { should include('in_progress') }
33
+ its(:content) { should eq 'In Progress' }
34
+ end
35
+
36
+ context "when status is 'In progress'" do
37
+ subject { status_tag('In progress') }
38
+
39
+ its(:class_list) { should include('in_progress') }
40
+ its(:content) { should eq 'In Progress' }
41
+ end
42
+
43
+ context "when status is an empty string" do
44
+ subject { status_tag('') }
45
+
46
+ its(:class_list) { should include('status_tag') }
47
+ its(:content) { should eq '' }
48
+ end
49
+
50
+ context "when status is false" do
51
+ subject { status_tag('false') }
52
+
53
+ its(:class_list) { should include('status_tag') }
54
+ its(:content) { should == 'No' }
55
+ end
56
+
57
+ context "when status is nil" do
58
+ subject { status_tag(nil) }
59
+
60
+ its(:class_list) { should include('status_tag') }
61
+ its(:content) { should == 'No' }
62
+ end
63
+
64
+ context "when status is 'Active' and type is :ok" do
65
+ subject { status_tag('Active', :ok) }
66
+
67
+ its(:class_list) { should include('status_tag') }
68
+ its(:class_list) { should include('active') }
69
+ its(:class_list) { should include('ok') }
70
+ end
71
+
72
+ context "when status is 'Active' and class is 'ok'" do
73
+ subject { status_tag('Active', class: 'ok') }
74
+
75
+ its(:class_list) { should include('status_tag') }
76
+ its(:class_list) { should include('active') }
77
+ its(:class_list) { should include('ok') }
78
+ end
79
+
80
+ context "when status is 'Active' and label is 'on'" do
81
+ subject { status_tag('Active', label: 'on') }
82
+
83
+ its(:content) { should eq 'on' }
84
+ its(:class_list) { should include('status_tag') }
85
+ its(:class_list) { should include('active') }
86
+ its(:class_list) { should_not include('on') }
87
+ end
88
+
89
+ context "when status is 'So useless', type is :ok, class is 'woot awesome' and id is 'useless'" do
90
+ subject { status_tag('So useless', :ok, class: 'woot awesome', id: 'useless') }
91
+
92
+ its(:content) { should eq 'So Useless' }
93
+ its(:class_list) { should include('status_tag') }
94
+ its(:class_list) { should include('ok') }
95
+ its(:class_list) { should include('so_useless') }
96
+ its(:class_list) { should include('woot') }
97
+ its(:class_list) { should include('awesome') }
98
+ its(:id) { should eq 'useless' }
99
+ end
100
+
101
+ end # describe "#status_tag"
102
+ end
@@ -0,0 +1,242 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveAdmin::Views::TableFor do
4
+ describe "creating with the dsl" do
5
+
6
+ let(:collection) do
7
+ [Post.new(title: "First Post", starred: true), Post.new(title: "Second Post"), Post.new(title: "Third Post", starred: false)]
8
+ end
9
+
10
+ let(:assigns){ { collection: collection } }
11
+ let(:helpers){ mock_action_view }
12
+
13
+ context "when creating a column with a symbol" do
14
+ let(:table) do
15
+ render_arbre_component assigns, helpers do
16
+ table_for(collection) do
17
+ column :title
18
+ end
19
+ end
20
+ end
21
+
22
+ it "should create a table header based on the symbol" do
23
+ expect(table.find_by_tag("th").first.content).to eq "Title"
24
+ end
25
+
26
+ it "should create a table row for each element in the collection" do
27
+ expect(table.find_by_tag("tr").size).to eq 4 # 1 for head, 3 for rows
28
+ end
29
+
30
+ ["First Post", "Second Post", "Third Post"].each_with_index do |content, index|
31
+ it "should create a cell with #{content}" do
32
+ expect(table.find_by_tag("td")[index].content).to eq content
33
+ end
34
+ end
35
+ end
36
+
37
+ context "when creating many columns with symbols" do
38
+ let(:table) do
39
+ render_arbre_component assigns, helpers do
40
+ table_for(collection) do
41
+ column :title
42
+ column :created_at
43
+ end
44
+ end
45
+ end
46
+
47
+ it "should create a table header based on the symbol" do
48
+ expect(table.find_by_tag("th").first.content).to eq "Title"
49
+ expect(table.find_by_tag("th").last.content).to eq "Created At"
50
+ end
51
+
52
+ it "should add a class to each table header based on the col name" do
53
+ expect(table.find_by_tag("th").first.class_list.to_a.join(' ')).to eq "col col-title"
54
+ expect(table.find_by_tag("th").last.class_list.to_a.join(' ')).to eq "col col-created_at"
55
+ end
56
+
57
+ it "should create a table row for each element in the collection" do
58
+ expect(table.find_by_tag("tr").size).to eq 4 # 1 for head, 3 for rows
59
+ end
60
+
61
+ it "should create a cell for each column" do
62
+ expect(table.find_by_tag("td").size).to eq 6
63
+ end
64
+
65
+ it "should add a class for each cell based on the col name" do
66
+ expect(table.find_by_tag("td").first.class_list.to_a.join(' ')).to eq "col col-title"
67
+ expect(table.find_by_tag("td").last.class_list.to_a.join(' ')).to eq "col col-created_at"
68
+ end
69
+ end
70
+
71
+ context "when creating a column with block content" do
72
+ let(:table) do
73
+ render_arbre_component assigns, helpers do
74
+ table_for(collection) do
75
+ column :title do |post|
76
+ span(post.title)
77
+ end
78
+ end
79
+ end
80
+ end
81
+
82
+ it "should add a class to each table header based on the col name" do
83
+ expect(table.find_by_tag("th").first.class_list).to include("col-title")
84
+ end
85
+
86
+ [ "<span>First Post</span>",
87
+ "<span>Second Post</span>",
88
+ "<span>Third Post</span>" ].each_with_index do |content, index|
89
+ it "should create a cell with #{content}" do
90
+ expect(table.find_by_tag("td")[index].content.strip).to eq content
91
+ end
92
+ end
93
+ end
94
+
95
+ context "when creating a column with multiple block content" do
96
+ let(:table) do
97
+ render_arbre_component assigns, helpers do
98
+ table_for(collection) do
99
+ column :title do |post|
100
+ span(post.title)
101
+ span(post.title)
102
+ end
103
+ end
104
+ end
105
+ end
106
+
107
+ 3.times do |index|
108
+ it "should create a cell with multiple elements in row #{index}" do
109
+ expect(table.find_by_tag("td")[index].find_by_tag("span").size).to eq 2
110
+ end
111
+ end
112
+ end
113
+
114
+
115
+ context "when creating many columns with symbols, blocks and strings" do
116
+ let(:table) do
117
+ render_arbre_component assigns, helpers do
118
+ table_for(collection) do
119
+ column "My Custom Title", :title
120
+ column :created_at , class:"datetime"
121
+ end
122
+ end
123
+ end
124
+
125
+
126
+ it "should add a class to each table header based on class option or the col name" do
127
+ expect(table.find_by_tag("th").first.class_list.to_a.join(' ')).to eq "col col-my_custom_title"
128
+ expect(table.find_by_tag("th").last.class_list.to_a.join(' ')).to eq "col datetime"
129
+ end
130
+
131
+ it "should add a class to each cell based on class option or the col name" do
132
+ expect(table.find_by_tag("td").first.class_list.to_a.join(' ')).to eq "col col-my_custom_title"
133
+ expect(table.find_by_tag("td").last.class_list.to_a.join(' ')).to eq "col datetime"
134
+ end
135
+ end
136
+
137
+ context "when using a single record instead of a collection" do
138
+ let(:table) do
139
+ render_arbre_component nil, helpers do
140
+ table_for Post.new do
141
+ column :title
142
+ end
143
+ end
144
+ end
145
+ it "should render" do
146
+ expect(table.find_by_tag("th").first.content).to eq "Title"
147
+ end
148
+ end
149
+
150
+ context "when using a single Hash" do
151
+ let(:table) do
152
+ render_arbre_component nil, helpers do
153
+ table_for foo: 1, bar: 2 do
154
+ column :foo
155
+ column :bar
156
+ end
157
+ end
158
+ end
159
+ it "should render" do
160
+ expect(table.find_by_tag("th")[0].content).to eq "Foo"
161
+ expect(table.find_by_tag("th")[1].content).to eq "Bar"
162
+ expect(table.find_by_tag("td")[0].content).to eq "1"
163
+ expect(table.find_by_tag("td")[1].content).to eq "2"
164
+ end
165
+ end
166
+
167
+ context "when using an Array of Hashes" do
168
+ let(:table) do
169
+ render_arbre_component nil, helpers do
170
+ table_for [{foo: 1},{foo: 2}] do
171
+ column :foo
172
+ end
173
+ end
174
+ end
175
+ it "should render" do
176
+ expect(table.find_by_tag("th")[0].content).to eq "Foo"
177
+ expect(table.find_by_tag("td")[0].content).to eq "1"
178
+ expect(table.find_by_tag("td")[1].content).to eq "2"
179
+ end
180
+ end
181
+
182
+ context "when record attribute is boolean" do
183
+ let(:table) do
184
+ render_arbre_component assigns, helpers do
185
+ table_for(collection) do
186
+ column :starred
187
+ end
188
+ end
189
+ end
190
+
191
+ it "should render boolean attribute within status tag" do
192
+ expect(table.find_by_tag("span").first.class_list.to_a.join(' ')).to eq "status_tag yes"
193
+ expect(table.find_by_tag("span").first.content).to eq "Yes"
194
+ expect(table.find_by_tag("span").last.class_list.to_a.join(' ')).to eq "status_tag no"
195
+ expect(table.find_by_tag("span").last.content).to eq "No"
196
+ end
197
+ end
198
+
199
+ end
200
+
201
+ describe "column sorting" do
202
+
203
+ def build_column(*args, &block)
204
+ ActiveAdmin::Views::TableFor::Column.new(*args, &block)
205
+ end
206
+
207
+ subject { table_column }
208
+
209
+ context "when default" do
210
+ let(:table_column){ build_column(:username) }
211
+ it { should be_sortable }
212
+ its(:sort_key){ should == "username" }
213
+ end
214
+
215
+ context "when a block given with no sort key" do
216
+ let(:table_column){ build_column("Username"){ } }
217
+ it { should_not be_sortable }
218
+ end
219
+
220
+ context "when a block given with a sort key" do
221
+ let(:table_column){ build_column("Username", sortable: :username){ } }
222
+ it { should be_sortable }
223
+ its(:sort_key){ should == "username" }
224
+ end
225
+
226
+ context "when sortable: false with a symbol" do
227
+ let(:table_column){ build_column(:username, sortable: false) }
228
+ it { should_not be_sortable }
229
+ end
230
+
231
+ context "when sortable: false with a symbol and string" do
232
+ let(:table_column){ build_column("Username", :username, sortable: false) }
233
+ it { should_not be_sortable }
234
+ end
235
+
236
+ context "when :sortable column is an association" do
237
+ let(:table_column){ build_column("Category", :category, Post) }
238
+ it { should_not be_sortable }
239
+ end
240
+
241
+ end
242
+ end