activeadmin-rails 1.7.0

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 (584) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +64 -0
  3. data/.github/ISSUE_TEMPLATE.md +20 -0
  4. data/.github/workflows/ci.yaml +64 -0
  5. data/.github/workflows/daily.yaml +64 -0
  6. data/.github/workflows/pages.yml +72 -0
  7. data/.gitignore +23 -0
  8. data/.mdlrc +1 -0
  9. data/.rubocop.yml +84 -0
  10. data/.simplecov +13 -0
  11. data/.yardopts +7 -0
  12. data/CHANGELOG.md +514 -0
  13. data/CODE_OF_CONDUCT.md +22 -0
  14. data/CONTRIBUTING.md +190 -0
  15. data/Gemfile +51 -0
  16. data/LICENSE +20 -0
  17. data/README.md +84 -0
  18. data/Rakefile +56 -0
  19. data/activeadmin-rails.gemspec +39 -0
  20. data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
  21. data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
  22. data/app/assets/images/active_admin/orderable.png +0 -0
  23. data/app/assets/javascripts/active_admin/base.es6 +23 -0
  24. data/app/assets/javascripts/active_admin/ext/jquery-ui.es6 +7 -0
  25. data/app/assets/javascripts/active_admin/ext/jquery.es6 +9 -0
  26. data/app/assets/javascripts/active_admin/initializers/datepicker.es6 +16 -0
  27. data/app/assets/javascripts/active_admin/initializers/filters.es6 +45 -0
  28. data/app/assets/javascripts/active_admin/initializers/tabs.es6 +6 -0
  29. data/app/assets/javascripts/active_admin/lib/active_admin.es6 +41 -0
  30. data/app/assets/javascripts/active_admin/lib/batch_actions.es6 +59 -0
  31. data/app/assets/javascripts/active_admin/lib/checkbox-toggler.es6 +49 -0
  32. data/app/assets/javascripts/active_admin/lib/dropdown-menu.es6 +123 -0
  33. data/app/assets/javascripts/active_admin/lib/has_many.es6 +89 -0
  34. data/app/assets/javascripts/active_admin/lib/modal_dialog.es6 +61 -0
  35. data/app/assets/javascripts/active_admin/lib/per_page.es6 +47 -0
  36. data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.es6 +36 -0
  37. data/app/assets/stylesheets/active_admin/_base.scss +41 -0
  38. data/app/assets/stylesheets/active_admin/_forms.scss +338 -0
  39. data/app/assets/stylesheets/active_admin/_header.scss +156 -0
  40. data/app/assets/stylesheets/active_admin/_mixins.scss +1 -0
  41. data/app/assets/stylesheets/active_admin/_typography.scss +100 -0
  42. data/app/assets/stylesheets/active_admin/components/_batch_actions.scss +6 -0
  43. data/app/assets/stylesheets/active_admin/components/_blank_slates.scss +30 -0
  44. data/app/assets/stylesheets/active_admin/components/_breadcrumbs.scss +20 -0
  45. data/app/assets/stylesheets/active_admin/components/_buttons.scss +6 -0
  46. data/app/assets/stylesheets/active_admin/components/_columns.scss +3 -0
  47. data/app/assets/stylesheets/active_admin/components/_comments.scss +41 -0
  48. data/app/assets/stylesheets/active_admin/components/_date_picker.scss +149 -0
  49. data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +152 -0
  50. data/app/assets/stylesheets/active_admin/components/_flash_messages.scss +37 -0
  51. data/app/assets/stylesheets/active_admin/components/_grid.scss +9 -0
  52. data/app/assets/stylesheets/active_admin/components/_index_list.scss +12 -0
  53. data/app/assets/stylesheets/active_admin/components/_links.scss +5 -0
  54. data/app/assets/stylesheets/active_admin/components/_modal_dialog.scss +34 -0
  55. data/app/assets/stylesheets/active_admin/components/_pagination.scss +55 -0
  56. data/app/assets/stylesheets/active_admin/components/_panels.scss +6 -0
  57. data/app/assets/stylesheets/active_admin/components/_scopes.scss +13 -0
  58. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +17 -0
  59. data/app/assets/stylesheets/active_admin/components/_table_tools.scss +67 -0
  60. data/app/assets/stylesheets/active_admin/components/_tables.scss +113 -0
  61. data/app/assets/stylesheets/active_admin/components/_tabs.scss +65 -0
  62. data/app/assets/stylesheets/active_admin/components/_unsupported_browser.scss +16 -0
  63. data/app/assets/stylesheets/active_admin/mixins/_all.scss +8 -0
  64. data/app/assets/stylesheets/active_admin/mixins/_buttons.scss +65 -0
  65. data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +28 -0
  66. data/app/assets/stylesheets/active_admin/mixins/_rounded.scss +22 -0
  67. data/app/assets/stylesheets/active_admin/mixins/_sections.scss +41 -0
  68. data/app/assets/stylesheets/active_admin/mixins/_shadows.scss +15 -0
  69. data/app/assets/stylesheets/active_admin/mixins/_typography.scss +3 -0
  70. data/app/assets/stylesheets/active_admin/mixins/_utilities.scss +17 -0
  71. data/app/assets/stylesheets/active_admin/mixins/_variables.scss +34 -0
  72. data/app/assets/stylesheets/active_admin/pages/_logged_out.scss +44 -0
  73. data/app/assets/stylesheets/active_admin/print.scss +287 -0
  74. data/app/assets/stylesheets/active_admin/structure/_footer.scss +14 -0
  75. data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +29 -0
  76. data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +41 -0
  77. data/app/views/active_admin/_head.html.erb +14 -0
  78. data/app/views/active_admin/base/_action_items.html.arb +7 -0
  79. data/app/views/active_admin/base/_breadcrumbs.html.arb +8 -0
  80. data/app/views/active_admin/base/_footer.html.arb +11 -0
  81. data/app/views/active_admin/base/_header.html.arb +5 -0
  82. data/app/views/active_admin/base/_sidebar.html.arb +3 -0
  83. data/app/views/active_admin/base/_title_bar.html.arb +9 -0
  84. data/app/views/active_admin/base/_unsupported_browser.html.erb +5 -0
  85. data/app/views/active_admin/devise/confirmations/new.html.erb +15 -0
  86. data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +8 -0
  87. data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +7 -0
  88. data/app/views/active_admin/devise/passwords/edit.html.erb +18 -0
  89. data/app/views/active_admin/devise/passwords/new.html.erb +15 -0
  90. data/app/views/active_admin/devise/registrations/new.html.erb +22 -0
  91. data/app/views/active_admin/devise/sessions/new.html.erb +20 -0
  92. data/app/views/active_admin/devise/shared/_error_messages.html.erb +15 -0
  93. data/app/views/active_admin/devise/shared/_links.erb +33 -0
  94. data/app/views/active_admin/devise/unlocks/new.html.erb +15 -0
  95. data/app/views/active_admin/page/_content.html.arb +1 -0
  96. data/app/views/active_admin/page/index.html.arb +8 -0
  97. data/app/views/active_admin/resource/_filters_form.html.erb +1 -0
  98. data/app/views/active_admin/resource/_form.html.arb +11 -0
  99. data/app/views/active_admin/resource/_index_as_table.html.arb +8 -0
  100. data/app/views/active_admin/resource/_show.html.arb +1 -0
  101. data/app/views/active_admin/resource/edit.html.arb +13 -0
  102. data/app/views/active_admin/resource/index.html.arb +101 -0
  103. data/app/views/active_admin/resource/new.html.arb +13 -0
  104. data/app/views/active_admin/resource/show.html.arb +22 -0
  105. data/app/views/kaminari/active_admin/_first_page.html.erb +11 -0
  106. data/app/views/kaminari/active_admin/_gap.html.erb +8 -0
  107. data/app/views/kaminari/active_admin/_last_page.html.erb +11 -0
  108. data/app/views/kaminari/active_admin/_next_page.html.erb +11 -0
  109. data/app/views/kaminari/active_admin/_page.html.erb +12 -0
  110. data/app/views/kaminari/active_admin/_paginator.html.erb +25 -0
  111. data/app/views/kaminari/active_admin/_prev_page.html.erb +11 -0
  112. data/app/views/layouts/active_admin.html.erb +33 -0
  113. data/app/views/layouts/active_admin_logged_out.html.erb +39 -0
  114. data/codecov.yml +25 -0
  115. data/config/i18n-tasks.yml +26 -0
  116. data/config/locales/ar.yml +133 -0
  117. data/config/locales/bg.yml +118 -0
  118. data/config/locales/bs.yml +119 -0
  119. data/config/locales/ca.yml +104 -0
  120. data/config/locales/cs.yml +107 -0
  121. data/config/locales/da.yml +135 -0
  122. data/config/locales/de-CH.yml +99 -0
  123. data/config/locales/de.yml +142 -0
  124. data/config/locales/el.yml +124 -0
  125. data/config/locales/en-CA.yml +137 -0
  126. data/config/locales/en-GB.yml +137 -0
  127. data/config/locales/en.yml +160 -0
  128. data/config/locales/eo.yml +143 -0
  129. data/config/locales/es-MX.yml +94 -0
  130. data/config/locales/es.yml +160 -0
  131. data/config/locales/fa.yml +117 -0
  132. data/config/locales/fi.yml +110 -0
  133. data/config/locales/fr.yml +139 -0
  134. data/config/locales/he.yml +140 -0
  135. data/config/locales/hr.yml +121 -0
  136. data/config/locales/hu.yml +96 -0
  137. data/config/locales/id.yml +133 -0
  138. data/config/locales/it.yml +142 -0
  139. data/config/locales/ja.yml +139 -0
  140. data/config/locales/ko.yml +118 -0
  141. data/config/locales/lt.yml +140 -0
  142. data/config/locales/lv.yml +90 -0
  143. data/config/locales/nb.yml +128 -0
  144. data/config/locales/nl.yml +142 -0
  145. data/config/locales/pl.yml +166 -0
  146. data/config/locales/pt-BR.yml +141 -0
  147. data/config/locales/pt-PT.yml +90 -0
  148. data/config/locales/ro.yml +94 -0
  149. data/config/locales/ru.yml +139 -0
  150. data/config/locales/sk.yml +107 -0
  151. data/config/locales/sv-SE.yml +133 -0
  152. data/config/locales/tr.yml +142 -0
  153. data/config/locales/uk.yml +134 -0
  154. data/config/locales/vi.yml +132 -0
  155. data/config/locales/zh-CN.yml +141 -0
  156. data/config/locales/zh-TW.yml +133 -0
  157. data/config/mdl_style.rb +9 -0
  158. data/cucumber.yml +6 -0
  159. data/docs/0-installation.md +121 -0
  160. data/docs/1-general-configuration.md +207 -0
  161. data/docs/10-custom-pages.md +148 -0
  162. data/docs/11-decorators.md +66 -0
  163. data/docs/12-arbo-components.md +200 -0
  164. data/docs/13-authorization-adapter.md +288 -0
  165. data/docs/14-gotchas.md +141 -0
  166. data/docs/2-resource-customization.md +480 -0
  167. data/docs/3-index-pages/custom-index.md +39 -0
  168. data/docs/3-index-pages/index-as-block.md +23 -0
  169. data/docs/3-index-pages/index-as-blog.md +73 -0
  170. data/docs/3-index-pages/index-as-grid.md +31 -0
  171. data/docs/3-index-pages/index-as-table.md +259 -0
  172. data/docs/3-index-pages.md +349 -0
  173. data/docs/4-csv-format.md +86 -0
  174. data/docs/5-forms.md +233 -0
  175. data/docs/6-show-pages.md +61 -0
  176. data/docs/7-sidebars.md +63 -0
  177. data/docs/8-custom-actions.md +160 -0
  178. data/docs/9-batch-actions.md +248 -0
  179. data/docs/CNAME +1 -0
  180. data/docs/Gemfile +7 -0
  181. data/docs/README.md +24 -0
  182. data/docs/_config.yml +15 -0
  183. data/docs/_includes/nav_footer_custom.html +3 -0
  184. data/docs/documentation.md +61 -0
  185. data/docs/images/activeadmin.png +0 -0
  186. data/docs/images/divider.png +0 -0
  187. data/docs/images/features.png +0 -0
  188. data/docs/index.css +835 -0
  189. data/docs/index.html +105 -0
  190. data/features/action_item.feature +73 -0
  191. data/features/authorization.feature +64 -0
  192. data/features/authorization_cancan.feature +52 -0
  193. data/features/authorization_pundit.feature +37 -0
  194. data/features/belongs_to.feature +124 -0
  195. data/features/breadcrumb.feature +76 -0
  196. data/features/comments/commenting.feature +178 -0
  197. data/features/comments/viewing_index.feature +18 -0
  198. data/features/create_another.feature +55 -0
  199. data/features/dashboard.feature +16 -0
  200. data/features/decorators.feature +43 -0
  201. data/features/development_reloading.feature +28 -0
  202. data/features/edit_page.feature +116 -0
  203. data/features/favicon.feature +20 -0
  204. data/features/filter_attributes.feature +46 -0
  205. data/features/first_boot.feature +16 -0
  206. data/features/footer.feature +29 -0
  207. data/features/global_navigation.feature +29 -0
  208. data/features/i18n.feature +55 -0
  209. data/features/index/batch_actions.feature +218 -0
  210. data/features/index/filters.feature +251 -0
  211. data/features/index/format_as_csv.feature +273 -0
  212. data/features/index/formats.feature +88 -0
  213. data/features/index/index_as_block.feature +15 -0
  214. data/features/index/index_as_blog.feature +69 -0
  215. data/features/index/index_as_grid.feature +45 -0
  216. data/features/index/index_as_table.feature +291 -0
  217. data/features/index/index_blank_slate.feature +83 -0
  218. data/features/index/index_parameters.feature +75 -0
  219. data/features/index/index_scope_to.feature +56 -0
  220. data/features/index/index_scopes.feature +325 -0
  221. data/features/index/page_title.feature +41 -0
  222. data/features/index/pagination.feature +63 -0
  223. data/features/index/switch_index_view.feature +73 -0
  224. data/features/menu.feature +85 -0
  225. data/features/meta_tags.feature +21 -0
  226. data/features/new_page.feature +136 -0
  227. data/features/registering_assets.feature +34 -0
  228. data/features/registering_pages.feature +237 -0
  229. data/features/registering_resources.feature +33 -0
  230. data/features/renamed_resource.feature +29 -0
  231. data/features/root_to.feature +18 -0
  232. data/features/show/attributes_table_title.feature +54 -0
  233. data/features/show/columns.feature +40 -0
  234. data/features/show/default_content.feature +44 -0
  235. data/features/show/page_title.feature +58 -0
  236. data/features/show/tabs.feature +47 -0
  237. data/features/sidebar_sections.feature +210 -0
  238. data/features/site_title.feature +47 -0
  239. data/features/specifying_actions.feature +118 -0
  240. data/features/step_definitions/action_item_steps.rb +7 -0
  241. data/features/step_definitions/action_link_steps.rb +19 -0
  242. data/features/step_definitions/additional_web_steps.rb +81 -0
  243. data/features/step_definitions/asset_steps.rb +15 -0
  244. data/features/step_definitions/attribute_steps.rb +18 -0
  245. data/features/step_definitions/attributes_table_title_steps.rb +11 -0
  246. data/features/step_definitions/batch_action_steps.rb +78 -0
  247. data/features/step_definitions/blog_steps.rb +3 -0
  248. data/features/step_definitions/breadcrumb_steps.rb +13 -0
  249. data/features/step_definitions/column_steps.rb +8 -0
  250. data/features/step_definitions/comment_steps.rb +32 -0
  251. data/features/step_definitions/configuration_steps.rb +102 -0
  252. data/features/step_definitions/dashboard_steps.rb +15 -0
  253. data/features/step_definitions/factory_steps.rb +35 -0
  254. data/features/step_definitions/filter_steps.rb +57 -0
  255. data/features/step_definitions/flash_steps.rb +11 -0
  256. data/features/step_definitions/footer_steps.rb +21 -0
  257. data/features/step_definitions/format_steps.rb +60 -0
  258. data/features/step_definitions/i18n_steps.rb +11 -0
  259. data/features/step_definitions/index_scope_steps.rb +42 -0
  260. data/features/step_definitions/index_views_steps.rb +3 -0
  261. data/features/step_definitions/layout_steps.rb +3 -0
  262. data/features/step_definitions/member_link_steps.rb +7 -0
  263. data/features/step_definitions/menu_steps.rb +11 -0
  264. data/features/step_definitions/meta_tag_steps.rb +3 -0
  265. data/features/step_definitions/pagination_steps.rb +15 -0
  266. data/features/step_definitions/root_steps.rb +9 -0
  267. data/features/step_definitions/sidebar_steps.rb +11 -0
  268. data/features/step_definitions/site_title_steps.rb +31 -0
  269. data/features/step_definitions/tab_steps.rb +17 -0
  270. data/features/step_definitions/table_steps.rb +116 -0
  271. data/features/step_definitions/user_steps.rb +52 -0
  272. data/features/step_definitions/web_steps.rb +86 -0
  273. data/features/sti_resource.feature +65 -0
  274. data/features/strong_parameters.feature +69 -0
  275. data/features/support/env.rb +129 -0
  276. data/features/support/paths.rb +75 -0
  277. data/features/support/regular_env.rb +7 -0
  278. data/features/support/reload_env.rb +7 -0
  279. data/features/support/selectors.rb +45 -0
  280. data/features/users/logging_in.feature +32 -0
  281. data/features/users/logging_out.feature +29 -0
  282. data/features/users/resetting_password.feature +30 -0
  283. data/gemfiles/rails_42.gemfile +12 -0
  284. data/gemfiles/rails_52.gemfile +15 -0
  285. data/gemfiles/rails_60.gemfile +16 -0
  286. data/gemfiles/rails_61.gemfile +15 -0
  287. data/gemfiles/rails_61_turbolinks.gemfile +15 -0
  288. data/gemfiles/rails_70.gemfile +15 -0
  289. data/gemfiles/rails_70_hotwire.gemfile +15 -0
  290. data/gemfiles/rails_71.gemfile +17 -0
  291. data/lib/active_admin/abstract_view_factory.rb +47 -0
  292. data/lib/active_admin/application.rb +255 -0
  293. data/lib/active_admin/application_settings.rb +42 -0
  294. data/lib/active_admin/asset_registration.rb +29 -0
  295. data/lib/active_admin/authorization_adapter.rb +129 -0
  296. data/lib/active_admin/base_controller/authorization.rb +126 -0
  297. data/lib/active_admin/base_controller/menu.rb +34 -0
  298. data/lib/active_admin/base_controller.rb +91 -0
  299. data/lib/active_admin/batch_actions/controller.rb +45 -0
  300. data/lib/active_admin/batch_actions/resource_extension.rb +151 -0
  301. data/lib/active_admin/batch_actions/views/batch_action_form.rb +45 -0
  302. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +58 -0
  303. data/lib/active_admin/batch_actions/views/selection_cells.rb +38 -0
  304. data/lib/active_admin/batch_actions.rb +16 -0
  305. data/lib/active_admin/callbacks.rb +88 -0
  306. data/lib/active_admin/cancan_adapter.rb +36 -0
  307. data/lib/active_admin/component.rb +5 -0
  308. data/lib/active_admin/controller_action.rb +12 -0
  309. data/lib/active_admin/csv_builder.rb +136 -0
  310. data/lib/active_admin/dependency.rb +96 -0
  311. data/lib/active_admin/deprecation.rb +10 -0
  312. data/lib/active_admin/devise.rb +80 -0
  313. data/lib/active_admin/dsl.rb +193 -0
  314. data/lib/active_admin/dynamic_setting.rb +38 -0
  315. data/lib/active_admin/dynamic_settings_node.rb +28 -0
  316. data/lib/active_admin/engine.rb +22 -0
  317. data/lib/active_admin/error.rb +62 -0
  318. data/lib/active_admin/event.rb +24 -0
  319. data/lib/active_admin/filters/active.rb +29 -0
  320. data/lib/active_admin/filters/active_filter.rb +123 -0
  321. data/lib/active_admin/filters/active_sidebar.rb +50 -0
  322. data/lib/active_admin/filters/dsl.rb +21 -0
  323. data/lib/active_admin/filters/forms.rb +85 -0
  324. data/lib/active_admin/filters/formtastic_addons.rb +79 -0
  325. data/lib/active_admin/filters/resource_extension.rb +153 -0
  326. data/lib/active_admin/filters.rb +11 -0
  327. data/lib/active_admin/form_builder.rb +182 -0
  328. data/lib/active_admin/generators/boilerplate.rb +45 -0
  329. data/lib/active_admin/helpers/collection.rb +19 -0
  330. data/lib/active_admin/helpers/i18n.rb +7 -0
  331. data/lib/active_admin/helpers/optional_display.rb +38 -0
  332. data/lib/active_admin/helpers/routes/url_helpers.rb +15 -0
  333. data/lib/active_admin/helpers/scope_chain.rb +23 -0
  334. data/lib/active_admin/inputs/datepicker_input.rb +27 -0
  335. data/lib/active_admin/inputs/filters/base/search_method_select.rb +75 -0
  336. data/lib/active_admin/inputs/filters/base.rb +44 -0
  337. data/lib/active_admin/inputs/filters/boolean_input.rb +24 -0
  338. data/lib/active_admin/inputs/filters/check_boxes_input.rb +50 -0
  339. data/lib/active_admin/inputs/filters/date_picker_input.rb +13 -0
  340. data/lib/active_admin/inputs/filters/date_range_input.rb +49 -0
  341. data/lib/active_admin/inputs/filters/numeric_input.rb +12 -0
  342. data/lib/active_admin/inputs/filters/select_input.rb +58 -0
  343. data/lib/active_admin/inputs/filters/string_input.rb +26 -0
  344. data/lib/active_admin/inputs/filters/text_input.rb +25 -0
  345. data/lib/active_admin/inputs.rb +21 -0
  346. data/lib/active_admin/localizers/resource_localizer.rb +35 -0
  347. data/lib/active_admin/localizers.rb +11 -0
  348. data/lib/active_admin/menu.rb +106 -0
  349. data/lib/active_admin/menu_collection.rb +55 -0
  350. data/lib/active_admin/menu_item.rb +79 -0
  351. data/lib/active_admin/namespace.rb +325 -0
  352. data/lib/active_admin/namespace_settings.rb +107 -0
  353. data/lib/active_admin/order_clause.rb +48 -0
  354. data/lib/active_admin/orm/active_record/comments/comment.rb +35 -0
  355. data/lib/active_admin/orm/active_record/comments/namespace_helper.rb +14 -0
  356. data/lib/active_admin/orm/active_record/comments/resource_helper.rb +17 -0
  357. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +95 -0
  358. data/lib/active_admin/orm/active_record/comments/views.rb +2 -0
  359. data/lib/active_admin/orm/active_record/comments.rb +99 -0
  360. data/lib/active_admin/orm/active_record.rb +5 -0
  361. data/lib/active_admin/orm/mongoid/.gitkeep +0 -0
  362. data/lib/active_admin/orm/mongoid.rb +1 -0
  363. data/lib/active_admin/page.rb +114 -0
  364. data/lib/active_admin/page_controller.rb +29 -0
  365. data/lib/active_admin/page_dsl.rb +35 -0
  366. data/lib/active_admin/page_presenter.rb +32 -0
  367. data/lib/active_admin/pundit_adapter.rb +68 -0
  368. data/lib/active_admin/resource/action_items.rb +120 -0
  369. data/lib/active_admin/resource/attributes.rb +47 -0
  370. data/lib/active_admin/resource/belongs_to.rb +48 -0
  371. data/lib/active_admin/resource/controllers.rb +19 -0
  372. data/lib/active_admin/resource/includes.rb +12 -0
  373. data/lib/active_admin/resource/menu.rb +65 -0
  374. data/lib/active_admin/resource/naming.rb +62 -0
  375. data/lib/active_admin/resource/ordering.rb +11 -0
  376. data/lib/active_admin/resource/page_presenters.rb +90 -0
  377. data/lib/active_admin/resource/pagination.rb +23 -0
  378. data/lib/active_admin/resource/routes.rb +134 -0
  379. data/lib/active_admin/resource/scope_to.rb +74 -0
  380. data/lib/active_admin/resource/scopes.rb +52 -0
  381. data/lib/active_admin/resource/sidebars.rb +32 -0
  382. data/lib/active_admin/resource.rb +215 -0
  383. data/lib/active_admin/resource_collection.rb +72 -0
  384. data/lib/active_admin/resource_controller/action_builder.rb +21 -0
  385. data/lib/active_admin/resource_controller/data_access.rb +341 -0
  386. data/lib/active_admin/resource_controller/decorators.rb +102 -0
  387. data/lib/active_admin/resource_controller/resource_class_methods.rb +24 -0
  388. data/lib/active_admin/resource_controller/scoping.rb +31 -0
  389. data/lib/active_admin/resource_controller/sidebars.rb +18 -0
  390. data/lib/active_admin/resource_controller/streaming.rb +47 -0
  391. data/lib/active_admin/resource_controller.rb +116 -0
  392. data/lib/active_admin/resource_dsl.rb +221 -0
  393. data/lib/active_admin/router.rb +113 -0
  394. data/lib/active_admin/scope.rb +60 -0
  395. data/lib/active_admin/settings_node.rb +19 -0
  396. data/lib/active_admin/sidebar_section.rb +37 -0
  397. data/lib/active_admin/version.rb +3 -0
  398. data/lib/active_admin/view_factory.rb +10 -0
  399. data/lib/active_admin/view_helpers/active_admin_application_helper.rb +12 -0
  400. data/lib/active_admin/view_helpers/auto_link_helper.rb +45 -0
  401. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +52 -0
  402. data/lib/active_admin/view_helpers/display_helper.rb +95 -0
  403. data/lib/active_admin/view_helpers/download_format_links_helper.rb +58 -0
  404. data/lib/active_admin/view_helpers/fields_for.rb +50 -0
  405. data/lib/active_admin/view_helpers/flash_helper.rb +14 -0
  406. data/lib/active_admin/view_helpers/form_helper.rb +20 -0
  407. data/lib/active_admin/view_helpers/layout_helper.rb +32 -0
  408. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +97 -0
  409. data/lib/active_admin/view_helpers/scope_name_helper.rb +16 -0
  410. data/lib/active_admin/view_helpers/sidebar_helper.rb +15 -0
  411. data/lib/active_admin/view_helpers/title_helper.rb +11 -0
  412. data/lib/active_admin/view_helpers/view_factory_helper.rb +11 -0
  413. data/lib/active_admin/view_helpers.rb +21 -0
  414. data/lib/active_admin/views/components/action_link.rb +13 -0
  415. data/lib/active_admin/views/components/active_admin_form.rb +163 -0
  416. data/lib/active_admin/views/components/attributes_panel.rb +23 -0
  417. data/lib/active_admin/views/components/attributes_table.rb +94 -0
  418. data/lib/active_admin/views/components/blank_slate.rb +17 -0
  419. data/lib/active_admin/views/components/columns.rb +161 -0
  420. data/lib/active_admin/views/components/dropdown_menu.rb +71 -0
  421. data/lib/active_admin/views/components/index_list.rb +69 -0
  422. data/lib/active_admin/views/components/menu.rb +32 -0
  423. data/lib/active_admin/views/components/menu_item.rb +58 -0
  424. data/lib/active_admin/views/components/paginated_collection.rb +159 -0
  425. data/lib/active_admin/views/components/panel.rb +38 -0
  426. data/lib/active_admin/views/components/scopes.rb +72 -0
  427. data/lib/active_admin/views/components/sidebar_section.rb +34 -0
  428. data/lib/active_admin/views/components/site_title.rb +28 -0
  429. data/lib/active_admin/views/components/status_tag.rb +88 -0
  430. data/lib/active_admin/views/components/table_for.rb +209 -0
  431. data/lib/active_admin/views/components/tabs.rb +40 -0
  432. data/lib/active_admin/views/index_as_block.rb +36 -0
  433. data/lib/active_admin/views/index_as_blog.rb +155 -0
  434. data/lib/active_admin/views/index_as_grid.rb +80 -0
  435. data/lib/active_admin/views/index_as_table.rb +377 -0
  436. data/lib/active_admin/views.rb +8 -0
  437. data/lib/active_admin.rb +132 -0
  438. data/lib/activeadmin-rails.rb +1 -0
  439. data/lib/bug_report_templates/active_admin_main.rb +110 -0
  440. data/lib/generators/active_admin/assets/assets_generator.rb +14 -0
  441. data/lib/generators/active_admin/assets/templates/active_admin.js +1 -0
  442. data/lib/generators/active_admin/assets/templates/active_admin.scss +17 -0
  443. data/lib/generators/active_admin/devise/devise_generator.rb +68 -0
  444. data/lib/generators/active_admin/install/install_generator.rb +45 -0
  445. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +300 -0
  446. data/lib/generators/active_admin/install/templates/admin_users.rb.erb +28 -0
  447. data/lib/generators/active_admin/install/templates/dashboard.rb +33 -0
  448. data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb.erb +16 -0
  449. data/lib/generators/active_admin/page/USAGE +8 -0
  450. data/lib/generators/active_admin/page/page_generator.rb +12 -0
  451. data/lib/generators/active_admin/page/templates/page.rb +5 -0
  452. data/lib/generators/active_admin/resource/resource_generator.rb +20 -0
  453. data/lib/generators/active_admin/resource/templates/admin.rb.erb +6 -0
  454. data/lib/ransack_ext.rb +20 -0
  455. data/spec/bug_report_templates_spec.rb +28 -0
  456. data/spec/changelog_spec.rb +15 -0
  457. data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +50 -0
  458. data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +34 -0
  459. data/spec/javascripts/fixtures/checkboxes.html +9 -0
  460. data/spec/javascripts/fixtures/table_checkboxes.html +17 -0
  461. data/spec/javascripts/helpers/SpecHelper.js +3 -0
  462. data/spec/javascripts/support/jasmine.yml +74 -0
  463. data/spec/javascripts/support/jasmine_runner.rb +19 -0
  464. data/spec/rails_helper.rb +67 -0
  465. data/spec/requests/default_namespace_spec.rb +81 -0
  466. data/spec/requests/memory_spec.rb +25 -0
  467. data/spec/requests/pages/form_spec.rb +73 -0
  468. data/spec/requests/pages/index_spec.rb +96 -0
  469. data/spec/requests/pages/layout_spec.rb +59 -0
  470. data/spec/requests/pages/show_spec.rb +38 -0
  471. data/spec/requests/stylesheets_spec.rb +18 -0
  472. data/spec/spec_helper.rb +1 -0
  473. data/spec/support/active_admin_integration_spec_helper.rb +79 -0
  474. data/spec/support/active_admin_request_helpers.rb +39 -0
  475. data/spec/support/rails_template.rb +224 -0
  476. data/spec/support/rails_template_with_data.rb +328 -0
  477. data/spec/support/templates/admin/stores.rb +7 -0
  478. data/spec/support/templates/en.yml +8 -0
  479. data/spec/support/templates/manifest.js +3 -0
  480. data/spec/support/templates/policies/active_admin/comment_policy.rb +9 -0
  481. data/spec/support/templates/policies/active_admin/page_policy.rb +18 -0
  482. data/spec/support/templates/policies/admin_user_policy.rb +11 -0
  483. data/spec/support/templates/policies/application_policy.rb +44 -0
  484. data/spec/support/templates/policies/category_policy.rb +7 -0
  485. data/spec/support/templates/policies/post_policy.rb +15 -0
  486. data/spec/support/templates/policies/store_policy.rb +11 -0
  487. data/spec/support/templates/policies/user_policy.rb +11 -0
  488. data/spec/support/templates/post_decorator.rb +24 -0
  489. data/spec/unit/abstract_view_factory_spec.rb +78 -0
  490. data/spec/unit/action_builder_spec.rb +160 -0
  491. data/spec/unit/active_admin_spec.rb +11 -0
  492. data/spec/unit/application_spec.rb +180 -0
  493. data/spec/unit/asset_registration_spec.rb +52 -0
  494. data/spec/unit/authorization/authorization_adapter_spec.rb +61 -0
  495. data/spec/unit/authorization/controller_authorization_spec.rb +43 -0
  496. data/spec/unit/authorization/index_overriding_spec.rb +23 -0
  497. data/spec/unit/auto_link_spec.rb +103 -0
  498. data/spec/unit/batch_actions/resource_spec.rb +84 -0
  499. data/spec/unit/batch_actions/settings_spec.rb +61 -0
  500. data/spec/unit/belongs_to_spec.rb +76 -0
  501. data/spec/unit/cancan_adapter_spec.rb +43 -0
  502. data/spec/unit/comments_spec.rb +204 -0
  503. data/spec/unit/component_spec.rb +18 -0
  504. data/spec/unit/config_shared_examples.rb +59 -0
  505. data/spec/unit/controller_filters_spec.rb +41 -0
  506. data/spec/unit/csv_builder_spec.rb +321 -0
  507. data/spec/unit/dependency_spec.rb +135 -0
  508. data/spec/unit/devise_spec.rb +110 -0
  509. data/spec/unit/dsl_spec.rb +120 -0
  510. data/spec/unit/dynamic_settings_spec.rb +28 -0
  511. data/spec/unit/filters/active_filter_spec.rb +222 -0
  512. data/spec/unit/filters/active_spec.rb +24 -0
  513. data/spec/unit/filters/filter_form_builder_spec.rb +524 -0
  514. data/spec/unit/filters/resource_spec.rb +128 -0
  515. data/spec/unit/form_builder_spec.rb +1013 -0
  516. data/spec/unit/generators/install_spec.rb +31 -0
  517. data/spec/unit/helpers/collection_spec.rb +68 -0
  518. data/spec/unit/helpers/scope_chain_spec.rb +35 -0
  519. data/spec/unit/i18n_spec.rb +29 -0
  520. data/spec/unit/localizers/resource_localizer_spec.rb +36 -0
  521. data/spec/unit/menu_collection_spec.rb +40 -0
  522. data/spec/unit/menu_item_spec.rb +82 -0
  523. data/spec/unit/menu_spec.rb +60 -0
  524. data/spec/unit/namespace/authorization_spec.rb +27 -0
  525. data/spec/unit/namespace/register_page_spec.rb +99 -0
  526. data/spec/unit/namespace/register_resource_spec.rb +162 -0
  527. data/spec/unit/namespace_spec.rb +132 -0
  528. data/spec/unit/order_clause_spec.rb +81 -0
  529. data/spec/unit/page_controller_spec.rb +5 -0
  530. data/spec/unit/page_spec.rb +128 -0
  531. data/spec/unit/pretty_format_spec.rb +133 -0
  532. data/spec/unit/pundit_adapter_spec.rb +98 -0
  533. data/spec/unit/resource/action_items_spec.rb +83 -0
  534. data/spec/unit/resource/attributes_spec.rb +56 -0
  535. data/spec/unit/resource/includes_spec.rb +21 -0
  536. data/spec/unit/resource/menu_spec.rb +18 -0
  537. data/spec/unit/resource/naming_spec.rb +120 -0
  538. data/spec/unit/resource/ordering_spec.rb +35 -0
  539. data/spec/unit/resource/page_presenters_spec.rb +44 -0
  540. data/spec/unit/resource/pagination_spec.rb +38 -0
  541. data/spec/unit/resource/routes_spec.rb +125 -0
  542. data/spec/unit/resource/scopes_spec.rb +50 -0
  543. data/spec/unit/resource/sidebars_spec.rb +43 -0
  544. data/spec/unit/resource_collection_spec.rb +175 -0
  545. data/spec/unit/resource_controller/data_access_spec.rb +234 -0
  546. data/spec/unit/resource_controller/decorators_spec.rb +94 -0
  547. data/spec/unit/resource_controller/sidebars_spec.rb +37 -0
  548. data/spec/unit/resource_controller_spec.rb +290 -0
  549. data/spec/unit/resource_registration_spec.rb +61 -0
  550. data/spec/unit/resource_spec.rb +320 -0
  551. data/spec/unit/routing_spec.rb +211 -0
  552. data/spec/unit/scope_spec.rb +225 -0
  553. data/spec/unit/settings_node_spec.rb +26 -0
  554. data/spec/unit/view_factory_spec.rb +13 -0
  555. data/spec/unit/view_helpers/breadcrumbs_spec.rb +255 -0
  556. data/spec/unit/view_helpers/display_helper_spec.rb +203 -0
  557. data/spec/unit/view_helpers/download_format_links_helper_spec.rb +39 -0
  558. data/spec/unit/view_helpers/fields_for_spec.rb +50 -0
  559. data/spec/unit/view_helpers/flash_helper_spec.rb +24 -0
  560. data/spec/unit/view_helpers/form_helper_spec.rb +42 -0
  561. data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +138 -0
  562. data/spec/unit/views/components/attributes_table_spec.rb +271 -0
  563. data/spec/unit/views/components/batch_action_selector_spec.rb +43 -0
  564. data/spec/unit/views/components/blank_slate_spec.rb +27 -0
  565. data/spec/unit/views/components/columns_spec.rb +187 -0
  566. data/spec/unit/views/components/index_list_spec.rb +49 -0
  567. data/spec/unit/views/components/index_table_for_spec.rb +127 -0
  568. data/spec/unit/views/components/menu_item_spec.rb +29 -0
  569. data/spec/unit/views/components/menu_spec.rb +168 -0
  570. data/spec/unit/views/components/paginated_collection_spec.rb +249 -0
  571. data/spec/unit/views/components/panel_spec.rb +58 -0
  572. data/spec/unit/views/components/sidebar_section_spec.rb +68 -0
  573. data/spec/unit/views/components/site_title_spec.rb +82 -0
  574. data/spec/unit/views/components/status_tag_spec.rb +265 -0
  575. data/spec/unit/views/components/table_for_spec.rb +441 -0
  576. data/spec/unit/views/components/tabs_spec.rb +99 -0
  577. data/spec/unit/views/index_as_blog_spec.rb +76 -0
  578. data/tasks/docs.rake +64 -0
  579. data/tasks/lint.rake +21 -0
  580. data/tasks/local.rake +25 -0
  581. data/tasks/parallel_tests.rake +66 -0
  582. data/tasks/test.rake +24 -0
  583. data/vendor/assets/stylesheets/active_admin/_normalize.scss +447 -0
  584. metadata +1012 -0
@@ -0,0 +1,59 @@
1
+ RSpec.shared_examples_for "ActiveAdmin::Resource" do
2
+ describe "namespace" do
3
+ it "should return the namespace" do
4
+ expect(config.namespace).to eq(namespace)
5
+ end
6
+ end
7
+
8
+ describe "page_presenters" do
9
+ it "should return an empty hash by default" do
10
+ expect(config.page_presenters).to eq({})
11
+ end
12
+ end
13
+
14
+ it { respond_to :controller_name }
15
+ it { respond_to :controller }
16
+ it { respond_to :route_prefix }
17
+ it { respond_to :route_collection_path }
18
+ it { respond_to :comments? }
19
+ it { respond_to :belongs_to? }
20
+ it { respond_to :action_items? }
21
+ it { respond_to :sidebar_sections? }
22
+
23
+ describe "Naming" do
24
+ it "implements #resource_label" do
25
+ expect { config.resource_label }.to_not raise_error
26
+ end
27
+
28
+ it "implements #plural_resource_label" do
29
+ expect { config.plural_resource_label }.to_not raise_error
30
+ end
31
+ end
32
+
33
+ describe "Menu" do
34
+ describe "#menu_item_options" do
35
+
36
+ it "initializes a new menu item with defaults" do
37
+ expect(config.menu_item_options[:label].call).to eq(config.plural_resource_label)
38
+ end
39
+
40
+ it "initialize a new menu item with custom options" do
41
+ config.menu_item_options = { label: "Hello" }
42
+ expect(config.menu_item_options[:label]).to eq("Hello")
43
+ end
44
+
45
+ end
46
+
47
+ describe "#include_in_menu?" do
48
+ it "should be included in menu by default" do
49
+ expect(config.include_in_menu?).to eq(true)
50
+ end
51
+
52
+ it "should not be included in menu when menu set to false" do
53
+ config.menu_item_options = false
54
+ expect(config.include_in_menu?).to eq(false)
55
+ end
56
+ end
57
+
58
+ end
59
+ end
@@ -0,0 +1,41 @@
1
+ require 'rails_helper'
2
+
3
+ RSpec.describe ActiveAdmin::Application do
4
+ let(:application){ ActiveAdmin::Application.new }
5
+ let(:controllers){ application.controllers_for_filters }
6
+
7
+ it 'controllers_for_filters' do
8
+ expect(application.controllers_for_filters).to eq [
9
+ ActiveAdmin::BaseController, ActiveAdmin::Devise::SessionsController,
10
+ ActiveAdmin::Devise::PasswordsController, ActiveAdmin::Devise::UnlocksController,
11
+ ActiveAdmin::Devise::RegistrationsController, ActiveAdmin::Devise::ConfirmationsController
12
+ ]
13
+ end
14
+
15
+ expected_actions = (
16
+ prefixes = %w(skip append prepend) << nil
17
+ positions = %w(before around after)
18
+ suffixes = %w(action)
19
+ base = %w()
20
+ if ActiveAdmin::Dependency.rails? '< 5.1.x'
21
+ suffixes += %w(filter)
22
+ base += %w(skip_filter skip_action_callback)
23
+ end
24
+
25
+ prefixes.each_with_object(base) do |prefix, stack|
26
+ positions.each do |position|
27
+ suffixes.each do |suffix|
28
+ stack << [prefix, position, suffix].compact.join("_").to_sym
29
+ end
30
+ end
31
+ end
32
+ )
33
+
34
+ expected_actions.each do |action|
35
+ it action do
36
+ args = [:my_filter, { only: :show }]
37
+ controllers.each { |c| expect(c).to receive(action).with(args) }
38
+ application.public_send action, args
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,321 @@
1
+ require 'rails_helper'
2
+
3
+ RSpec.describe ActiveAdmin::CSVBuilder do
4
+
5
+ describe '.default_for_resource using Post' do
6
+ let(:application){ ActiveAdmin::Application.new }
7
+ let(:namespace){ ActiveAdmin::Namespace.new(application, :admin) }
8
+ let(:resource){ ActiveAdmin::Resource.new(namespace, Post, {}) }
9
+ let(:csv_builder) { ActiveAdmin::CSVBuilder.default_for_resource(resource).tap(&:exec_columns) }
10
+
11
+ it 'returns a default csv_builder for Post' do
12
+ expect(csv_builder).to be_a(ActiveAdmin::CSVBuilder)
13
+ end
14
+
15
+ it 'defines Id as the first column' do
16
+ expect(csv_builder.columns.first.name).to eq 'Id'
17
+ expect(csv_builder.columns.first.data).to eq :id
18
+ end
19
+
20
+ it "has Post's content_columns" do
21
+ csv_builder.columns[1..-1].each_with_index do |column, index|
22
+ expect(column.name).to eq resource.content_columns[index].to_s.humanize
23
+ expect(column.data).to eq resource.content_columns[index]
24
+ end
25
+ end
26
+
27
+ context 'when column has a localized name' do
28
+ let(:localized_name) { 'Titulo' }
29
+
30
+ before do
31
+ allow(Post).to receive(:human_attribute_name).and_call_original
32
+ allow(Post).to receive(:human_attribute_name).with(:title){ localized_name }
33
+ end
34
+
35
+ it 'gets name from I18n' do
36
+ title_index = resource.content_columns.index(:title) + 1 # First col is always id
37
+ expect(csv_builder.columns[title_index].name).to eq localized_name
38
+ end
39
+ end
40
+
41
+ context 'for models having sensitive attributes' do
42
+ let(:resource){ ActiveAdmin::Resource.new(namespace, User, {}) }
43
+
44
+ it 'omits sensitive fields' do
45
+ expect(csv_builder.columns.map(&:data)).to_not include :encrypted_password
46
+ end
47
+ end
48
+ end
49
+
50
+ context 'when empty' do
51
+ let(:builder){ ActiveAdmin::CSVBuilder.new.tap(&:exec_columns) }
52
+
53
+ it "should have no columns" do
54
+ expect(builder.columns).to eq []
55
+ end
56
+ end
57
+
58
+ context "with a symbol column (:title)" do
59
+ let(:builder) do
60
+ ActiveAdmin::CSVBuilder.new do
61
+ column :title
62
+ end.tap(&:exec_columns)
63
+ end
64
+
65
+ it "should have one column" do
66
+ expect(builder.columns.size).to eq 1
67
+ end
68
+
69
+ describe "the column" do
70
+ let(:column){ builder.columns.first }
71
+
72
+ it "should have a name of 'Title'" do
73
+ expect(column.name).to eq "Title"
74
+ end
75
+
76
+ it "should have the data :title" do
77
+ expect(column.data).to eq :title
78
+ end
79
+ end
80
+ end
81
+
82
+ context "with a block and title" do
83
+ let(:builder) do
84
+ ActiveAdmin::CSVBuilder.new do
85
+ column "My title" do
86
+ # nothing
87
+ end
88
+ end.tap(&:exec_columns)
89
+ end
90
+
91
+ it "should have one column" do
92
+ expect(builder.columns.size).to eq 1
93
+ end
94
+
95
+ describe "the column" do
96
+ let(:column){ builder.columns.first }
97
+
98
+ it "should have a name of 'My title'" do
99
+ expect(column.name).to eq "My title"
100
+ end
101
+
102
+ it "should have the data :title" do
103
+ expect(column.data).to be_an_instance_of(Proc)
104
+ end
105
+ end
106
+ end
107
+
108
+ context "with a humanize_name column option" do
109
+ context "with symbol column name" do
110
+ let(:builder) do
111
+ ActiveAdmin::CSVBuilder.new do
112
+ column :my_title, humanize_name: false
113
+ end.tap(&:exec_columns)
114
+ end
115
+
116
+ describe "the column" do
117
+ let(:column){ builder.columns.first }
118
+
119
+ it "should have a name of 'my_title'" do
120
+ expect(column.name).to eq "my_title"
121
+ end
122
+ end
123
+ end
124
+
125
+ context "with string column name" do
126
+ let(:builder) do
127
+ ActiveAdmin::CSVBuilder.new do
128
+ column "my_title", humanize_name: false
129
+ end.tap(&:exec_columns)
130
+ end
131
+
132
+ describe "the column" do
133
+ let(:column){ builder.columns.first }
134
+
135
+ it "should have a name of 'my_title'" do
136
+ expect(column.name).to eq "my_title"
137
+ end
138
+ end
139
+ end
140
+ end
141
+
142
+ context "with a separator" do
143
+ let(:builder) do
144
+ ActiveAdmin::CSVBuilder.new(col_sep: ";").tap(&:exec_columns)
145
+ end
146
+
147
+ it "should have proper separator" do
148
+ expect(builder.options).to include(col_sep: ";")
149
+ end
150
+ end
151
+
152
+ context "with humanize_name option" do
153
+ let(:builder) do
154
+ ActiveAdmin::CSVBuilder.new(humanize_name: false) do
155
+ column :my_title
156
+ end.tap(&:exec_columns)
157
+ end
158
+
159
+ describe "the column" do
160
+ let(:column){ builder.columns.first }
161
+
162
+ it "should have humanize_name option set" do
163
+ expect(column.options).to eq humanize_name: false
164
+ end
165
+
166
+ it "should have a name of 'my_title'" do
167
+ expect(column.name).to eq "my_title"
168
+ end
169
+ end
170
+ end
171
+
172
+ context "with csv_options" do
173
+ let(:builder) do
174
+ ActiveAdmin::CSVBuilder.new(force_quotes: true).tap(&:exec_columns)
175
+ end
176
+
177
+ it "should have proper separator" do
178
+ expect(builder.options).to include(force_quotes: true)
179
+ end
180
+ end
181
+
182
+ context "with access to the controller" do
183
+ let(:dummy_view_context) { double(controller: dummy_controller) }
184
+ let(:dummy_controller) { double(names: %w(title summary updated_at created_at))}
185
+ let(:builder) do
186
+ ActiveAdmin::CSVBuilder.new do
187
+ column "id"
188
+ controller.names.each do |name|
189
+ column(name)
190
+ end
191
+ end.tap{ |b| b.exec_columns(dummy_view_context) }
192
+ end
193
+
194
+ it "should build columns provided by the controller" do
195
+ expect(builder.columns.map(&:data)).to match_array([:id, :title, :summary, :updated_at, :created_at])
196
+ end
197
+ end
198
+
199
+ context "build csv using the supplied order" do
200
+ before do
201
+ @post1 = Post.create!(title: "Hello1", published_date: Date.today - 2.day)
202
+ @post2 = Post.create!(title: "Hello2", published_date: Date.today - 1.day)
203
+ end
204
+ let(:dummy_controller) {
205
+ class DummyController
206
+ def find_collection(*)
207
+ collection
208
+ end
209
+
210
+ def collection
211
+ Post.order('published_date DESC')
212
+ end
213
+
214
+ def apply_decorator(resource)
215
+ resource
216
+ end
217
+
218
+ def view_context
219
+ end
220
+ end
221
+ DummyController.new
222
+ }
223
+ let(:builder) do
224
+ ActiveAdmin::CSVBuilder.new do
225
+ column "id"
226
+ column "title"
227
+ column "published_date"
228
+ end
229
+ end
230
+
231
+ it "should generate data with the supplied order" do
232
+ expect(builder).to receive(:build_row).and_return([]).once.ordered { |post| expect(post.id).to eq @post2.id }
233
+ expect(builder).to receive(:build_row).and_return([]).once.ordered { |post| expect(post.id).to eq @post1.id }
234
+ builder.build dummy_controller, []
235
+ end
236
+
237
+ it "should generate data ignoring pagination" do
238
+ expect(dummy_controller).to receive(:find_collection).
239
+ with(except: :pagination).once.
240
+ and_call_original
241
+ expect(builder).to receive(:build_row).and_return([]).twice
242
+ builder.build dummy_controller, []
243
+ end
244
+
245
+ it "should disable the ActiveRecord query cache" do
246
+ expect(builder).to receive(:build_row).twice do
247
+ expect(ActiveRecord::Base.connection.query_cache_enabled).to be_falsy
248
+ []
249
+ end
250
+ ActiveRecord::Base.cache do
251
+ builder.build dummy_controller, []
252
+ end
253
+ end
254
+ end
255
+
256
+ context "build csv using specified encoding and encoding_options" do
257
+ let(:dummy_controller) do
258
+ class DummyController
259
+ def find_collection(*)
260
+ collection
261
+ end
262
+
263
+ def collection
264
+ Post
265
+ end
266
+
267
+ def apply_decorator(resource)
268
+ resource
269
+ end
270
+
271
+ def view_context
272
+ end
273
+ end
274
+ DummyController.new
275
+ end
276
+ let(:encoding) { Encoding::ASCII }
277
+ let(:opts) { {} }
278
+ let(:builder) do
279
+ ActiveAdmin::CSVBuilder.new(encoding: encoding, encoding_options: opts) do
280
+ column "おはようございます"
281
+ column "title"
282
+ end
283
+ end
284
+
285
+ context "Shift-JIS with options" do
286
+ let(:encoding) { Encoding::Shift_JIS }
287
+ let(:opts) { { invalid: :replace, undef: :replace, replace: "?" } }
288
+
289
+ it "encodes the CSV" do
290
+ receiver = []
291
+ builder.build dummy_controller, receiver
292
+ line = receiver.last
293
+ expect(line.encoding).to eq(encoding)
294
+ end
295
+ end
296
+
297
+ context "ASCII with options" do
298
+ let(:encoding) { Encoding::ASCII }
299
+ let(:opts) do
300
+ { invalid: :replace, undef: :replace, replace: "__REPLACED__" }
301
+ end
302
+
303
+ it "encodes the CSV without errors" do
304
+ receiver = []
305
+ builder.build dummy_controller, receiver
306
+ line = receiver.last
307
+ expect(line.encoding).to eq(encoding)
308
+ expect(line).to include("__REPLACED__")
309
+ end
310
+ end
311
+ end
312
+
313
+ skip '#exec_columns'
314
+
315
+ skip '#build_row' do
316
+ it 'renders non-strings'
317
+ it 'encodes values correctly'
318
+ it 'passes custom encoding options to String#encode!'
319
+ end
320
+
321
+ end
@@ -0,0 +1,135 @@
1
+ require 'rails_helper'
2
+
3
+ RSpec.describe ActiveAdmin::Dependency do
4
+
5
+ k = ActiveAdmin::Dependency
6
+
7
+ describe 'method_missing' do
8
+ before do
9
+ allow(Gem).to receive(:loaded_specs)
10
+ .and_return 'foo' => Gem::Specification.new('foo', '1.2.3')
11
+ end
12
+
13
+ it 'returns a Matcher' do
14
+ expect(k.foo).to be_a ActiveAdmin::Dependency::Matcher
15
+ expect(k.foo.inspect).to eq '<ActiveAdmin::Dependency::Matcher for foo 1.2.3>'
16
+ expect(k.bar.inspect).to eq '<ActiveAdmin::Dependency::Matcher for (missing)>'
17
+ end
18
+
19
+ describe '`?`' do
20
+ it 'base' do
21
+ expect(k.foo?).to eq true
22
+ expect(k.bar?).to eq false
23
+ end
24
+ it '=' do
25
+ expect(k.foo? '= 1.2.3').to eq true
26
+ expect(k.foo? '= 1').to eq false
27
+ end
28
+ it '>' do
29
+ expect(k.foo? '> 1').to eq true
30
+ expect(k.foo? '> 2').to eq false
31
+ end
32
+ it '<' do
33
+ expect(k.foo? '< 2').to eq true
34
+ expect(k.foo? '< 1').to eq false
35
+ end
36
+ it '>=' do
37
+ expect(k.foo? '>= 1.2.3').to eq true
38
+ expect(k.foo? '>= 1.2.2').to eq true
39
+ expect(k.foo? '>= 1.2.4').to eq false
40
+ end
41
+ it '<=' do
42
+ expect(k.foo? '<= 1.2.3').to eq true
43
+ expect(k.foo? '<= 1.2.4').to eq true
44
+ expect(k.foo? '<= 1.2.2').to eq false
45
+ end
46
+ it '~>' do
47
+ expect(k.foo? '~> 1.2.0').to eq true
48
+ expect(k.foo? '~> 1.1').to eq true
49
+ expect(k.foo? '~> 1.2.4').to eq false
50
+ end
51
+ end
52
+
53
+ describe '`!`' do
54
+ it 'raises an error if requirement not met' do
55
+ expect{ k.foo! '5' }.to raise_error ActiveAdmin::DependencyError,
56
+ 'You provided foo 1.2.3 but we need: 5.'
57
+ end
58
+ it 'accepts multiple arguments' do
59
+ expect{ k.foo! '> 1', '< 1.2' }.to raise_error ActiveAdmin::DependencyError,
60
+ 'You provided foo 1.2.3 but we need: > 1, < 1.2.'
61
+ end
62
+ it 'raises an error if not provided' do
63
+ expect{ k.bar! }.to raise_error ActiveAdmin::DependencyError,
64
+ 'To use bar you need to specify it in your Gemfile.'
65
+ end
66
+ end
67
+ end
68
+
69
+ describe '[]' do
70
+ before do
71
+ allow(Gem).to receive(:loaded_specs)
72
+ .and_return 'a-b' => Gem::Specification.new('a-b', '1.2.3')
73
+ end
74
+
75
+ it 'allows access to gems with an arbitrary name' do
76
+ expect(k['a-b']).to be_a ActiveAdmin::Dependency::Matcher
77
+ expect(k['a-b'].inspect).to eq '<ActiveAdmin::Dependency::Matcher for a-b 1.2.3>'
78
+ expect(k['c-d'].inspect).to eq '<ActiveAdmin::Dependency::Matcher for (missing)>'
79
+ end
80
+
81
+ # Note: more extensive tests for match? and match! are above.
82
+
83
+ it 'match?' do
84
+ expect(k['a-b'].match?).to eq true
85
+ expect(k['a-b'].match? '1.2.3').to eq true
86
+ expect(k['b-c'].match?).to eq false
87
+ end
88
+
89
+ it 'match!' do
90
+ expect(k['a-b'].match!).to eq nil
91
+ expect(k['a-b'].match! '1.2.3').to eq nil
92
+
93
+ expect{ k['a-b'].match! '2.5' }.to raise_error ActiveAdmin::DependencyError,
94
+ 'You provided a-b 1.2.3 but we need: 2.5.'
95
+
96
+ expect{ k['b-c'].match! }.to raise_error ActiveAdmin::DependencyError,
97
+ 'To use b-c you need to specify it in your Gemfile.'
98
+ end
99
+
100
+ # Note: Ruby comparison operators are separate from the `foo? '> 1'` syntax
101
+
102
+ describe 'Ruby comparison syntax' do
103
+
104
+ it '==' do
105
+ expect(k['a-b'] == '1.2.3').to eq true
106
+ expect(k['a-b'] == '1.2').to eq false
107
+ expect(k['a-b'] == 1).to eq false
108
+ end
109
+ it '>' do
110
+ expect(k['a-b'] > 1).to eq true
111
+ expect(k['a-b'] > 2).to eq false
112
+ end
113
+ it '<' do
114
+ expect(k['a-b'] < 2).to eq true
115
+ expect(k['a-b'] < 1).to eq false
116
+ end
117
+ it '>=' do
118
+ expect(k['a-b'] >= '1.2.3').to eq true
119
+ expect(k['a-b'] >= '1.2.2').to eq true
120
+ expect(k['a-b'] >= '1.2.4').to eq false
121
+ end
122
+ it '<=' do
123
+ expect(k['a-b'] <= '1.2.3').to eq true
124
+ expect(k['a-b'] <= '1.2.4').to eq true
125
+ expect(k['a-b'] <= '1.2.2').to eq false
126
+ end
127
+
128
+ it 'throws a custom error if the gem is missing' do
129
+ expect{ k['b-c'] < 23 }.to raise_error ActiveAdmin::DependencyError,
130
+ 'To use b-c you need to specify it in your Gemfile.'
131
+ end
132
+ end
133
+ end
134
+
135
+ end
@@ -0,0 +1,110 @@
1
+ require 'rails_helper'
2
+
3
+ RSpec.describe ActiveAdmin::Devise::Controller do
4
+
5
+ let(:controller_class) do
6
+ klass = Class.new do
7
+ def self.layout(*); end
8
+ def self.helper(*); end
9
+ end
10
+ klass.send(:include, ActiveAdmin::Devise::Controller)
11
+ klass
12
+ end
13
+
14
+ let(:controller) { controller_class.new }
15
+ let(:action_controller_config) { Rails.configuration.action_controller }
16
+
17
+ def with_temp_relative_url_root(relative_url_root)
18
+ previous_relative_url_root = action_controller_config[:relative_url_root]
19
+ action_controller_config[:relative_url_root] = relative_url_root
20
+
21
+ yield
22
+ ensure
23
+ action_controller_config[:relative_url_root] = previous_relative_url_root
24
+ end
25
+
26
+ context 'with a RAILS_RELATIVE_URL_ROOT set' do
27
+
28
+ around do |example|
29
+ with_temp_relative_url_root('/foo') { example.call }
30
+ end
31
+
32
+ it "should set the root path to the default namespace" do
33
+ expect(controller.root_path).to eq "/foo/admin"
34
+ end
35
+
36
+ it "should set the root path to '/' when no default namespace" do
37
+ allow(ActiveAdmin.application).to receive(:default_namespace).and_return(false)
38
+ expect(controller.root_path).to eq "/foo/"
39
+ end
40
+
41
+ end
42
+
43
+ context 'without a RAILS_RELATIVE_URL_ROOT set' do
44
+
45
+ around do |example|
46
+ with_temp_relative_url_root(nil) { example.call }
47
+ end
48
+
49
+ it "should set the root path to the default namespace" do
50
+ expect(controller.root_path).to eq "/admin"
51
+ end
52
+
53
+ it "should set the root path to '/' when no default namespace" do
54
+ allow(ActiveAdmin.application).to receive(:default_namespace).and_return(false)
55
+ expect(controller.root_path).to eq "/"
56
+ end
57
+
58
+ end
59
+
60
+ context "within a scoped route" do
61
+
62
+ SCOPE = '/aa_scoped'
63
+
64
+ before do
65
+ # Remove existing routes
66
+ routes = Rails.application.routes
67
+ routes.clear!
68
+
69
+ # Add scoped routes
70
+ routes.draw do
71
+ scope path: SCOPE do
72
+ ActiveAdmin.routes(self)
73
+ devise_for :admin_users, ActiveAdmin::Devise.config
74
+ end
75
+ end
76
+ end
77
+
78
+ after do
79
+ # Resume default routes
80
+ reload_routes!
81
+ end
82
+
83
+ it "should include scope path in root_path" do
84
+ expect(controller.root_path).to eq "#{SCOPE}/admin"
85
+ end
86
+
87
+ end
88
+
89
+ describe "#config" do
90
+ let(:config) { ActiveAdmin::Devise.config }
91
+
92
+ describe ":sign_out_via option" do
93
+ it "should contain the application.logout_link_method" do
94
+ expect(::Devise).to receive(:sign_out_via).and_return(:delete)
95
+ expect(ActiveAdmin.application).to receive(:logout_link_method).and_return(:get)
96
+
97
+ expect(config[:sign_out_via]).to include(:get)
98
+ end
99
+
100
+ it "should contain Devise's logout_via_method(s)" do
101
+ expect(::Devise).to receive(:sign_out_via).and_return([:delete, :post])
102
+ expect(ActiveAdmin.application).to receive(:logout_link_method).and_return(:get)
103
+
104
+ expect(config[:sign_out_via]).to eq [:delete, :post, :get]
105
+ end
106
+
107
+ end # describe ":sign_out_via option"
108
+ end # describe "#config"
109
+
110
+ end