activeadmin-rb 1.4.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 (614) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +64 -0
  3. data/.github/ISSUE_TEMPLATE.md +20 -0
  4. data/.gitignore +21 -0
  5. data/.mdlrc +1 -0
  6. data/.rubocop.yml +84 -0
  7. data/.simplecov +13 -0
  8. data/.travis.yml +49 -0
  9. data/.yardopts +7 -0
  10. data/CHANGELOG.md +389 -0
  11. data/CODE_OF_CONDUCT.md +22 -0
  12. data/CONTRIBUTING.md +184 -0
  13. data/Gemfile +58 -0
  14. data/LICENSE +20 -0
  15. data/README.md +75 -0
  16. data/Rakefile +54 -0
  17. data/activeadmin-rb.gemspec +32 -0
  18. data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
  19. data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
  20. data/app/assets/images/active_admin/orderable.png +0 -0
  21. data/app/assets/javascripts/active_admin/base.js.coffee +13 -0
  22. data/app/assets/javascripts/active_admin/ext/jquery-ui.js.coffee +6 -0
  23. data/app/assets/javascripts/active_admin/ext/jquery.js.coffee +7 -0
  24. data/app/assets/javascripts/active_admin/initializers/batch_actions.js.coffee +11 -0
  25. data/app/assets/javascripts/active_admin/initializers/datepicker.js.coffee +14 -0
  26. data/app/assets/javascripts/active_admin/initializers/filters.js.coffee +26 -0
  27. data/app/assets/javascripts/active_admin/initializers/tabs.js.coffee +7 -0
  28. data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +42 -0
  29. data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +46 -0
  30. data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +104 -0
  31. data/app/assets/javascripts/active_admin/lib/flash.js.coffee +19 -0
  32. data/app/assets/javascripts/active_admin/lib/has_many.js.coffee +79 -0
  33. data/app/assets/javascripts/active_admin/lib/modal_dialog.js.coffee +45 -0
  34. data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +46 -0
  35. data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +22 -0
  36. data/app/assets/stylesheets/active_admin/_base.scss +41 -0
  37. data/app/assets/stylesheets/active_admin/_forms.scss +338 -0
  38. data/app/assets/stylesheets/active_admin/_header.scss +156 -0
  39. data/app/assets/stylesheets/active_admin/_mixins.scss +1 -0
  40. data/app/assets/stylesheets/active_admin/_typography.scss +100 -0
  41. data/app/assets/stylesheets/active_admin/components/_batch_actions.scss +6 -0
  42. data/app/assets/stylesheets/active_admin/components/_blank_slates.scss +30 -0
  43. data/app/assets/stylesheets/active_admin/components/_breadcrumbs.scss +20 -0
  44. data/app/assets/stylesheets/active_admin/components/_buttons.scss +6 -0
  45. data/app/assets/stylesheets/active_admin/components/_columns.scss +3 -0
  46. data/app/assets/stylesheets/active_admin/components/_comments.scss +41 -0
  47. data/app/assets/stylesheets/active_admin/components/_date_picker.scss +149 -0
  48. data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +152 -0
  49. data/app/assets/stylesheets/active_admin/components/_flash_messages.scss +37 -0
  50. data/app/assets/stylesheets/active_admin/components/_grid.scss +9 -0
  51. data/app/assets/stylesheets/active_admin/components/_index_list.scss +12 -0
  52. data/app/assets/stylesheets/active_admin/components/_links.scss +5 -0
  53. data/app/assets/stylesheets/active_admin/components/_modal_dialog.scss +34 -0
  54. data/app/assets/stylesheets/active_admin/components/_pagination.scss +55 -0
  55. data/app/assets/stylesheets/active_admin/components/_panels.scss +6 -0
  56. data/app/assets/stylesheets/active_admin/components/_scopes.scss +13 -0
  57. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +17 -0
  58. data/app/assets/stylesheets/active_admin/components/_table_tools.scss +67 -0
  59. data/app/assets/stylesheets/active_admin/components/_tables.scss +113 -0
  60. data/app/assets/stylesheets/active_admin/components/_tabs.scss +65 -0
  61. data/app/assets/stylesheets/active_admin/components/_unsupported_browser.scss +16 -0
  62. data/app/assets/stylesheets/active_admin/mixins/_all.scss +8 -0
  63. data/app/assets/stylesheets/active_admin/mixins/_buttons.scss +65 -0
  64. data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +28 -0
  65. data/app/assets/stylesheets/active_admin/mixins/_rounded.scss +22 -0
  66. data/app/assets/stylesheets/active_admin/mixins/_sections.scss +41 -0
  67. data/app/assets/stylesheets/active_admin/mixins/_shadows.scss +15 -0
  68. data/app/assets/stylesheets/active_admin/mixins/_typography.scss +3 -0
  69. data/app/assets/stylesheets/active_admin/mixins/_utilities.scss +17 -0
  70. data/app/assets/stylesheets/active_admin/mixins/_variables.scss +34 -0
  71. data/app/assets/stylesheets/active_admin/pages/_logged_out.scss +44 -0
  72. data/app/assets/stylesheets/active_admin/print.scss +287 -0
  73. data/app/assets/stylesheets/active_admin/structure/_footer.scss +14 -0
  74. data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +29 -0
  75. data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +41 -0
  76. data/app/views/active_admin/devise/confirmations/new.html.erb +15 -0
  77. data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +8 -0
  78. data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +7 -0
  79. data/app/views/active_admin/devise/passwords/edit.html.erb +18 -0
  80. data/app/views/active_admin/devise/passwords/new.html.erb +15 -0
  81. data/app/views/active_admin/devise/registrations/new.html.erb +22 -0
  82. data/app/views/active_admin/devise/sessions/new.html.erb +20 -0
  83. data/app/views/active_admin/devise/shared/_links.erb +33 -0
  84. data/app/views/active_admin/devise/unlocks/new.html.erb +15 -0
  85. data/app/views/active_admin/page/index.html.arb +1 -0
  86. data/app/views/active_admin/resource/edit.html.arb +1 -0
  87. data/app/views/active_admin/resource/index.html.arb +1 -0
  88. data/app/views/active_admin/resource/new.html.arb +1 -0
  89. data/app/views/active_admin/resource/show.html.arb +1 -0
  90. data/app/views/kaminari/active_admin/_first_page.html.erb +11 -0
  91. data/app/views/kaminari/active_admin/_gap.html.erb +8 -0
  92. data/app/views/kaminari/active_admin/_last_page.html.erb +11 -0
  93. data/app/views/kaminari/active_admin/_next_page.html.erb +11 -0
  94. data/app/views/kaminari/active_admin/_page.html.erb +12 -0
  95. data/app/views/kaminari/active_admin/_paginator.html.erb +25 -0
  96. data/app/views/kaminari/active_admin/_prev_page.html.erb +11 -0
  97. data/app/views/layouts/active_admin.html.arb +1 -0
  98. data/app/views/layouts/active_admin_logged_out.html.erb +39 -0
  99. data/codecov.yml +25 -0
  100. data/config/i18n-tasks.yml +26 -0
  101. data/config/locales/ar.yml +134 -0
  102. data/config/locales/bg.yml +119 -0
  103. data/config/locales/bs.yml +120 -0
  104. data/config/locales/ca.yml +105 -0
  105. data/config/locales/cs.yml +108 -0
  106. data/config/locales/da.yml +136 -0
  107. data/config/locales/de-CH.yml +100 -0
  108. data/config/locales/de.yml +143 -0
  109. data/config/locales/el.yml +125 -0
  110. data/config/locales/en-CA.yml +138 -0
  111. data/config/locales/en-GB.yml +138 -0
  112. data/config/locales/en.yml +161 -0
  113. data/config/locales/eo.yml +144 -0
  114. data/config/locales/es-MX.yml +95 -0
  115. data/config/locales/es.yml +161 -0
  116. data/config/locales/fa.yml +118 -0
  117. data/config/locales/fi.yml +111 -0
  118. data/config/locales/fr.yml +140 -0
  119. data/config/locales/he.yml +141 -0
  120. data/config/locales/hr.yml +122 -0
  121. data/config/locales/hu.yml +97 -0
  122. data/config/locales/id.yml +134 -0
  123. data/config/locales/it.yml +143 -0
  124. data/config/locales/ja.yml +140 -0
  125. data/config/locales/ko.yml +119 -0
  126. data/config/locales/lt.yml +141 -0
  127. data/config/locales/lv.yml +91 -0
  128. data/config/locales/nb.yml +129 -0
  129. data/config/locales/nl.yml +143 -0
  130. data/config/locales/pl.yml +167 -0
  131. data/config/locales/pt-BR.yml +142 -0
  132. data/config/locales/pt-PT.yml +91 -0
  133. data/config/locales/ro.yml +95 -0
  134. data/config/locales/ru.yml +140 -0
  135. data/config/locales/sk.yml +108 -0
  136. data/config/locales/sv-SE.yml +134 -0
  137. data/config/locales/tr.yml +143 -0
  138. data/config/locales/uk.yml +135 -0
  139. data/config/locales/vi.yml +133 -0
  140. data/config/locales/zh-CN.yml +142 -0
  141. data/config/locales/zh-TW.yml +134 -0
  142. data/config/mdl_style.rb +9 -0
  143. data/cucumber.yml +6 -0
  144. data/docs/0-installation.md +118 -0
  145. data/docs/1-general-configuration.md +204 -0
  146. data/docs/10-custom-pages.md +150 -0
  147. data/docs/11-decorators.md +59 -0
  148. data/docs/12-arbre-components.md +203 -0
  149. data/docs/13-authorization-adapter.md +285 -0
  150. data/docs/14-gotchas.md +138 -0
  151. data/docs/2-resource-customization.md +466 -0
  152. data/docs/3-index-pages.md +328 -0
  153. data/docs/3-index-pages/custom-index.md +35 -0
  154. data/docs/3-index-pages/index-as-block.md +19 -0
  155. data/docs/3-index-pages/index-as-blog.md +69 -0
  156. data/docs/3-index-pages/index-as-grid.md +27 -0
  157. data/docs/3-index-pages/index-as-table.md +225 -0
  158. data/docs/4-csv-format.md +74 -0
  159. data/docs/5-forms.md +231 -0
  160. data/docs/6-show-pages.md +81 -0
  161. data/docs/7-sidebars.md +75 -0
  162. data/docs/8-custom-actions.md +177 -0
  163. data/docs/9-batch-actions.md +237 -0
  164. data/docs/CNAME +1 -0
  165. data/docs/Gemfile +2 -0
  166. data/docs/README.md +24 -0
  167. data/docs/_config.yml +2 -0
  168. data/docs/_includes/footer.html +8 -0
  169. data/docs/_includes/google-analytics.html +16 -0
  170. data/docs/_includes/head.html +7 -0
  171. data/docs/_includes/toc.html +98 -0
  172. data/docs/_includes/top-menu.html +9 -0
  173. data/docs/_layouts/default.html +21 -0
  174. data/docs/documentation.md +60 -0
  175. data/docs/images/activeadmin.png +0 -0
  176. data/docs/images/code-header.png +0 -0
  177. data/docs/images/divider.png +0 -0
  178. data/docs/images/features.png +0 -0
  179. data/docs/index.html +125 -0
  180. data/docs/stylesheets/main.css +1152 -0
  181. data/features/action_item.feature +73 -0
  182. data/features/authorization.feature +64 -0
  183. data/features/authorization_cancan.feature +52 -0
  184. data/features/authorization_pundit.feature +37 -0
  185. data/features/belongs_to.feature +124 -0
  186. data/features/breadcrumb.feature +76 -0
  187. data/features/comments/commenting.feature +178 -0
  188. data/features/comments/viewing_index.feature +19 -0
  189. data/features/create_another.feature +55 -0
  190. data/features/dashboard.feature +16 -0
  191. data/features/decorators.feature +43 -0
  192. data/features/development_reloading.feature +28 -0
  193. data/features/edit_page.feature +116 -0
  194. data/features/favicon.feature +20 -0
  195. data/features/first_boot.feature +16 -0
  196. data/features/footer.feature +29 -0
  197. data/features/global_navigation.feature +29 -0
  198. data/features/i18n.feature +55 -0
  199. data/features/index/batch_actions.feature +218 -0
  200. data/features/index/filters.feature +251 -0
  201. data/features/index/format_as_csv.feature +227 -0
  202. data/features/index/formats.feature +88 -0
  203. data/features/index/index_as_block.feature +15 -0
  204. data/features/index/index_as_blog.feature +69 -0
  205. data/features/index/index_as_grid.feature +45 -0
  206. data/features/index/index_as_table.feature +291 -0
  207. data/features/index/index_blank_slate.feature +83 -0
  208. data/features/index/index_parameters.feature +75 -0
  209. data/features/index/index_scope_to.feature +56 -0
  210. data/features/index/index_scopes.feature +325 -0
  211. data/features/index/page_title.feature +41 -0
  212. data/features/index/pagination.feature +63 -0
  213. data/features/index/switch_index_view.feature +73 -0
  214. data/features/menu.feature +85 -0
  215. data/features/meta_tags.feature +21 -0
  216. data/features/new_page.feature +136 -0
  217. data/features/registering_assets.feature +38 -0
  218. data/features/registering_pages.feature +237 -0
  219. data/features/registering_resources.feature +33 -0
  220. data/features/renamed_resource.feature +30 -0
  221. data/features/root_to.feature +18 -0
  222. data/features/show/attributes_table_title.feature +54 -0
  223. data/features/show/columns.feature +40 -0
  224. data/features/show/default_content.feature +44 -0
  225. data/features/show/page_title.feature +58 -0
  226. data/features/show/tabs.feature +33 -0
  227. data/features/sidebar_sections.feature +210 -0
  228. data/features/site_title.feature +47 -0
  229. data/features/specifying_actions.feature +118 -0
  230. data/features/step_definitions/action_item_steps.rb +7 -0
  231. data/features/step_definitions/action_link_steps.rb +19 -0
  232. data/features/step_definitions/additional_web_steps.rb +81 -0
  233. data/features/step_definitions/asset_steps.rb +15 -0
  234. data/features/step_definitions/attribute_steps.rb +18 -0
  235. data/features/step_definitions/attributes_table_title_steps.rb +11 -0
  236. data/features/step_definitions/batch_action_steps.rb +81 -0
  237. data/features/step_definitions/blog_steps.rb +3 -0
  238. data/features/step_definitions/breadcrumb_steps.rb +13 -0
  239. data/features/step_definitions/column_steps.rb +8 -0
  240. data/features/step_definitions/comment_steps.rb +32 -0
  241. data/features/step_definitions/configuration_steps.rb +100 -0
  242. data/features/step_definitions/dashboard_steps.rb +15 -0
  243. data/features/step_definitions/factory_steps.rb +35 -0
  244. data/features/step_definitions/filter_steps.rb +57 -0
  245. data/features/step_definitions/flash_steps.rb +11 -0
  246. data/features/step_definitions/footer_steps.rb +21 -0
  247. data/features/step_definitions/format_steps.rb +58 -0
  248. data/features/step_definitions/i18n_steps.rb +11 -0
  249. data/features/step_definitions/index_scope_steps.rb +42 -0
  250. data/features/step_definitions/index_views_steps.rb +3 -0
  251. data/features/step_definitions/layout_steps.rb +3 -0
  252. data/features/step_definitions/member_link_steps.rb +7 -0
  253. data/features/step_definitions/menu_steps.rb +11 -0
  254. data/features/step_definitions/meta_tag_steps.rb +3 -0
  255. data/features/step_definitions/pagination_steps.rb +15 -0
  256. data/features/step_definitions/root_steps.rb +9 -0
  257. data/features/step_definitions/sidebar_steps.rb +11 -0
  258. data/features/step_definitions/site_title_steps.rb +31 -0
  259. data/features/step_definitions/tab_steps.rb +8 -0
  260. data/features/step_definitions/table_steps.rb +116 -0
  261. data/features/step_definitions/user_steps.rb +52 -0
  262. data/features/step_definitions/web_steps.rb +86 -0
  263. data/features/sti_resource.feature +65 -0
  264. data/features/strong_parameters.feature +69 -0
  265. data/features/support/env.rb +121 -0
  266. data/features/support/paths.rb +73 -0
  267. data/features/support/regular_env.rb +7 -0
  268. data/features/support/reload_env.rb +7 -0
  269. data/features/support/selectors.rb +45 -0
  270. data/features/users/logging_in.feature +32 -0
  271. data/features/users/logging_out.feature +29 -0
  272. data/features/users/resetting_password.feature +30 -0
  273. data/gemfiles/rails_42.gemfile +11 -0
  274. data/gemfiles/rails_50.gemfile +11 -0
  275. data/gemfiles/rails_51.gemfile +11 -0
  276. data/gemfiles/rails_52.gemfile +12 -0
  277. data/lib/active_admin.rb +128 -0
  278. data/lib/active_admin/abstract_view_factory.rb +47 -0
  279. data/lib/active_admin/application.rb +241 -0
  280. data/lib/active_admin/application_settings.rb +39 -0
  281. data/lib/active_admin/asset_registration.rb +37 -0
  282. data/lib/active_admin/authorization_adapter.rb +129 -0
  283. data/lib/active_admin/base_controller.rb +81 -0
  284. data/lib/active_admin/base_controller/authorization.rb +128 -0
  285. data/lib/active_admin/base_controller/menu.rb +34 -0
  286. data/lib/active_admin/batch_actions.rb +16 -0
  287. data/lib/active_admin/batch_actions/controller.rb +40 -0
  288. data/lib/active_admin/batch_actions/resource_extension.rb +151 -0
  289. data/lib/active_admin/batch_actions/views/batch_action_form.rb +38 -0
  290. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +58 -0
  291. data/lib/active_admin/batch_actions/views/selection_cells.rb +38 -0
  292. data/lib/active_admin/callbacks.rb +88 -0
  293. data/lib/active_admin/cancan_adapter.rb +36 -0
  294. data/lib/active_admin/component.rb +5 -0
  295. data/lib/active_admin/controller_action.rb +12 -0
  296. data/lib/active_admin/csv_builder.rb +131 -0
  297. data/lib/active_admin/dependency.rb +172 -0
  298. data/lib/active_admin/deprecation.rb +10 -0
  299. data/lib/active_admin/devise.rb +80 -0
  300. data/lib/active_admin/dsl.rb +167 -0
  301. data/lib/active_admin/dynamic_setting.rb +38 -0
  302. data/lib/active_admin/dynamic_settings_node.rb +28 -0
  303. data/lib/active_admin/engine.rb +21 -0
  304. data/lib/active_admin/error.rb +62 -0
  305. data/lib/active_admin/event.rb +24 -0
  306. data/lib/active_admin/filters.rb +11 -0
  307. data/lib/active_admin/filters/active.rb +29 -0
  308. data/lib/active_admin/filters/active_filter.rb +123 -0
  309. data/lib/active_admin/filters/active_sidebar.rb +50 -0
  310. data/lib/active_admin/filters/dsl.rb +21 -0
  311. data/lib/active_admin/filters/forms.rb +85 -0
  312. data/lib/active_admin/filters/formtastic_addons.rb +79 -0
  313. data/lib/active_admin/filters/resource_extension.rb +155 -0
  314. data/lib/active_admin/form_builder.rb +182 -0
  315. data/lib/active_admin/generators/boilerplate.rb +45 -0
  316. data/lib/active_admin/helpers/collection.rb +19 -0
  317. data/lib/active_admin/helpers/i18n.rb +7 -0
  318. data/lib/active_admin/helpers/optional_display.rb +38 -0
  319. data/lib/active_admin/helpers/output_safety_helper.rb +35 -0
  320. data/lib/active_admin/helpers/routes/url_helpers.rb +15 -0
  321. data/lib/active_admin/helpers/scope_chain.rb +23 -0
  322. data/lib/active_admin/inputs.rb +21 -0
  323. data/lib/active_admin/inputs/datepicker_input.rb +27 -0
  324. data/lib/active_admin/inputs/filters/base.rb +44 -0
  325. data/lib/active_admin/inputs/filters/base/search_method_select.rb +75 -0
  326. data/lib/active_admin/inputs/filters/boolean_input.rb +24 -0
  327. data/lib/active_admin/inputs/filters/check_boxes_input.rb +50 -0
  328. data/lib/active_admin/inputs/filters/date_picker_input.rb +13 -0
  329. data/lib/active_admin/inputs/filters/date_range_input.rb +49 -0
  330. data/lib/active_admin/inputs/filters/numeric_input.rb +12 -0
  331. data/lib/active_admin/inputs/filters/select_input.rb +58 -0
  332. data/lib/active_admin/inputs/filters/string_input.rb +26 -0
  333. data/lib/active_admin/inputs/filters/text_input.rb +25 -0
  334. data/lib/active_admin/localizers.rb +11 -0
  335. data/lib/active_admin/localizers/resource_localizer.rb +35 -0
  336. data/lib/active_admin/menu.rb +102 -0
  337. data/lib/active_admin/menu_collection.rb +91 -0
  338. data/lib/active_admin/menu_item.rb +69 -0
  339. data/lib/active_admin/namespace.rb +266 -0
  340. data/lib/active_admin/namespace_settings.rb +107 -0
  341. data/lib/active_admin/order_clause.rb +48 -0
  342. data/lib/active_admin/orm/active_record.rb +5 -0
  343. data/lib/active_admin/orm/active_record/comments.rb +101 -0
  344. data/lib/active_admin/orm/active_record/comments/comment.rb +31 -0
  345. data/lib/active_admin/orm/active_record/comments/namespace_helper.rb +14 -0
  346. data/lib/active_admin/orm/active_record/comments/resource_helper.rb +17 -0
  347. data/lib/active_admin/orm/active_record/comments/show_page_helper.rb +23 -0
  348. data/lib/active_admin/orm/active_record/comments/views.rb +2 -0
  349. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +95 -0
  350. data/lib/active_admin/orm/mongoid.rb +1 -0
  351. data/lib/active_admin/orm/mongoid/.gitkeep +0 -0
  352. data/lib/active_admin/page.rb +111 -0
  353. data/lib/active_admin/page_controller.rb +29 -0
  354. data/lib/active_admin/page_dsl.rb +32 -0
  355. data/lib/active_admin/page_presenter.rb +32 -0
  356. data/lib/active_admin/pundit_adapter.rb +68 -0
  357. data/lib/active_admin/reloader.rb +25 -0
  358. data/lib/active_admin/resource.rb +206 -0
  359. data/lib/active_admin/resource/action_items.rb +120 -0
  360. data/lib/active_admin/resource/attributes.rb +44 -0
  361. data/lib/active_admin/resource/belongs_to.rb +48 -0
  362. data/lib/active_admin/resource/controllers.rb +19 -0
  363. data/lib/active_admin/resource/includes.rb +12 -0
  364. data/lib/active_admin/resource/menu.rb +67 -0
  365. data/lib/active_admin/resource/naming.rb +62 -0
  366. data/lib/active_admin/resource/ordering.rb +11 -0
  367. data/lib/active_admin/resource/page_presenters.rb +82 -0
  368. data/lib/active_admin/resource/pagination.rb +23 -0
  369. data/lib/active_admin/resource/routes.rb +134 -0
  370. data/lib/active_admin/resource/scope_to.rb +74 -0
  371. data/lib/active_admin/resource/scopes.rb +52 -0
  372. data/lib/active_admin/resource/sidebars.rb +28 -0
  373. data/lib/active_admin/resource_collection.rb +72 -0
  374. data/lib/active_admin/resource_controller.rb +64 -0
  375. data/lib/active_admin/resource_controller/action_builder.rb +21 -0
  376. data/lib/active_admin/resource_controller/data_access.rb +322 -0
  377. data/lib/active_admin/resource_controller/decorators.rb +102 -0
  378. data/lib/active_admin/resource_controller/resource_class_methods.rb +24 -0
  379. data/lib/active_admin/resource_controller/scoping.rb +31 -0
  380. data/lib/active_admin/resource_controller/sidebars.rb +18 -0
  381. data/lib/active_admin/resource_controller/streaming.rb +43 -0
  382. data/lib/active_admin/resource_dsl.rb +222 -0
  383. data/lib/active_admin/router.rb +113 -0
  384. data/lib/active_admin/scope.rb +60 -0
  385. data/lib/active_admin/settings_node.rb +19 -0
  386. data/lib/active_admin/sidebar_section.rb +37 -0
  387. data/lib/active_admin/version.rb +3 -0
  388. data/lib/active_admin/view_factory.rb +27 -0
  389. data/lib/active_admin/view_helpers.rb +20 -0
  390. data/lib/active_admin/view_helpers/active_admin_application_helper.rb +12 -0
  391. data/lib/active_admin/view_helpers/auto_link_helper.rb +45 -0
  392. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +33 -0
  393. data/lib/active_admin/view_helpers/display_helper.rb +95 -0
  394. data/lib/active_admin/view_helpers/download_format_links_helper.rb +58 -0
  395. data/lib/active_admin/view_helpers/fields_for.rb +50 -0
  396. data/lib/active_admin/view_helpers/flash_helper.rb +14 -0
  397. data/lib/active_admin/view_helpers/form_helper.rb +20 -0
  398. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +97 -0
  399. data/lib/active_admin/view_helpers/scope_name_helper.rb +16 -0
  400. data/lib/active_admin/view_helpers/sidebar_helper.rb +15 -0
  401. data/lib/active_admin/view_helpers/title_helper.rb +11 -0
  402. data/lib/active_admin/view_helpers/view_factory_helper.rb +11 -0
  403. data/lib/active_admin/views.rb +8 -0
  404. data/lib/active_admin/views/action_items.rb +17 -0
  405. data/lib/active_admin/views/components/active_admin_form.rb +149 -0
  406. data/lib/active_admin/views/components/attributes_table.rb +94 -0
  407. data/lib/active_admin/views/components/blank_slate.rb +17 -0
  408. data/lib/active_admin/views/components/columns.rb +161 -0
  409. data/lib/active_admin/views/components/dropdown_menu.rb +71 -0
  410. data/lib/active_admin/views/components/index_list.rb +69 -0
  411. data/lib/active_admin/views/components/menu.rb +32 -0
  412. data/lib/active_admin/views/components/menu_item.rb +58 -0
  413. data/lib/active_admin/views/components/paginated_collection.rb +159 -0
  414. data/lib/active_admin/views/components/panel.rb +38 -0
  415. data/lib/active_admin/views/components/scopes.rb +72 -0
  416. data/lib/active_admin/views/components/sidebar.rb +13 -0
  417. data/lib/active_admin/views/components/sidebar_section.rb +37 -0
  418. data/lib/active_admin/views/components/site_title.rb +54 -0
  419. data/lib/active_admin/views/components/status_tag.rb +88 -0
  420. data/lib/active_admin/views/components/table_for.rb +209 -0
  421. data/lib/active_admin/views/components/tabs.rb +31 -0
  422. data/lib/active_admin/views/components/unsupported_browser.rb +11 -0
  423. data/lib/active_admin/views/footer.rb +30 -0
  424. data/lib/active_admin/views/header.rb +19 -0
  425. data/lib/active_admin/views/index_as_block.rb +36 -0
  426. data/lib/active_admin/views/index_as_blog.rb +155 -0
  427. data/lib/active_admin/views/index_as_grid.rb +80 -0
  428. data/lib/active_admin/views/index_as_table.rb +389 -0
  429. data/lib/active_admin/views/pages/base.rb +123 -0
  430. data/lib/active_admin/views/pages/form.rb +64 -0
  431. data/lib/active_admin/views/pages/index.rb +163 -0
  432. data/lib/active_admin/views/pages/layout.rb +26 -0
  433. data/lib/active_admin/views/pages/page.rb +30 -0
  434. data/lib/active_admin/views/pages/show.rb +65 -0
  435. data/lib/active_admin/views/tabbed_navigation.rb +11 -0
  436. data/lib/active_admin/views/title_bar.rb +55 -0
  437. data/lib/activeadmin-rb.rb +1 -0
  438. data/lib/bug_report_templates/active_admin_master.rb +112 -0
  439. data/lib/generators/active_admin/assets/assets_generator.rb +14 -0
  440. data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +1 -0
  441. data/lib/generators/active_admin/assets/templates/active_admin.scss +17 -0
  442. data/lib/generators/active_admin/devise/devise_generator.rb +68 -0
  443. data/lib/generators/active_admin/install/install_generator.rb +45 -0
  444. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +293 -0
  445. data/lib/generators/active_admin/install/templates/admin_users.rb.erb +28 -0
  446. data/lib/generators/active_admin/install/templates/dashboard.rb +33 -0
  447. data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb.erb +30 -0
  448. data/lib/generators/active_admin/page/USAGE +8 -0
  449. data/lib/generators/active_admin/page/page_generator.rb +12 -0
  450. data/lib/generators/active_admin/page/templates/page.rb +5 -0
  451. data/lib/generators/active_admin/resource/resource_generator.rb +20 -0
  452. data/lib/generators/active_admin/resource/templates/admin.rb.erb +43 -0
  453. data/lib/ransack_ext.rb +20 -0
  454. data/spec/bug_report_templates_spec.rb +26 -0
  455. data/spec/changelog_spec.rb +15 -0
  456. data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +50 -0
  457. data/spec/javascripts/coffeescripts/jquery.aa.flash.js.coffee +25 -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/flashes.html +2 -0
  461. data/spec/javascripts/fixtures/table_checkboxes.html +17 -0
  462. data/spec/javascripts/helpers/SpecHelper.js +3 -0
  463. data/spec/javascripts/support/jasmine.yml +74 -0
  464. data/spec/javascripts/support/jasmine_runner.rb +19 -0
  465. data/spec/rails_helper.rb +60 -0
  466. data/spec/requests/default_namespace_spec.rb +81 -0
  467. data/spec/requests/memory_spec.rb +25 -0
  468. data/spec/requests/stylesheets_spec.rb +18 -0
  469. data/spec/spec_helper.rb +1 -0
  470. data/spec/support/active_admin_integration_spec_helper.rb +73 -0
  471. data/spec/support/active_admin_request_helpers.rb +39 -0
  472. data/spec/support/rails_template.rb +156 -0
  473. data/spec/support/rails_template_with_data.rb +327 -0
  474. data/spec/support/templates/admin/stores.rb +7 -0
  475. data/spec/support/templates/en.yml +8 -0
  476. data/spec/support/templates/manifest.js +3 -0
  477. data/spec/support/templates/policies/active_admin/comment_policy.rb +9 -0
  478. data/spec/support/templates/policies/active_admin/page_policy.rb +18 -0
  479. data/spec/support/templates/policies/admin_user_policy.rb +11 -0
  480. data/spec/support/templates/policies/application_policy.rb +44 -0
  481. data/spec/support/templates/policies/category_policy.rb +7 -0
  482. data/spec/support/templates/policies/post_policy.rb +15 -0
  483. data/spec/support/templates/policies/store_policy.rb +11 -0
  484. data/spec/support/templates/policies/user_policy.rb +11 -0
  485. data/spec/support/templates/post_decorator.rb +24 -0
  486. data/spec/unit/abstract_view_factory_spec.rb +78 -0
  487. data/spec/unit/action_builder_spec.rb +158 -0
  488. data/spec/unit/active_admin_spec.rb +11 -0
  489. data/spec/unit/application_spec.rb +180 -0
  490. data/spec/unit/asset_registration_spec.rb +81 -0
  491. data/spec/unit/authorization/authorization_adapter_spec.rb +61 -0
  492. data/spec/unit/authorization/controller_authorization_spec.rb +43 -0
  493. data/spec/unit/authorization/index_overriding_spec.rb +23 -0
  494. data/spec/unit/auto_link_spec.rb +93 -0
  495. data/spec/unit/batch_actions/resource_spec.rb +84 -0
  496. data/spec/unit/batch_actions/settings_spec.rb +61 -0
  497. data/spec/unit/belongs_to_spec.rb +76 -0
  498. data/spec/unit/cancan_adapter_spec.rb +43 -0
  499. data/spec/unit/comments_spec.rb +189 -0
  500. data/spec/unit/component_spec.rb +18 -0
  501. data/spec/unit/config_shared_examples.rb +59 -0
  502. data/spec/unit/controller_filters_spec.rb +41 -0
  503. data/spec/unit/csv_builder_spec.rb +313 -0
  504. data/spec/unit/dependency_spec.rb +135 -0
  505. data/spec/unit/devise_spec.rb +110 -0
  506. data/spec/unit/dsl_spec.rb +120 -0
  507. data/spec/unit/dynamic_settings_spec.rb +28 -0
  508. data/spec/unit/filters/active_filter_spec.rb +218 -0
  509. data/spec/unit/filters/active_spec.rb +24 -0
  510. data/spec/unit/filters/filter_form_builder_spec.rb +524 -0
  511. data/spec/unit/filters/resource_spec.rb +128 -0
  512. data/spec/unit/form_builder_spec.rb +1012 -0
  513. data/spec/unit/generators/install_spec.rb +31 -0
  514. data/spec/unit/helpers/collection_spec.rb +68 -0
  515. data/spec/unit/helpers/output_safety_helper_spec.rb +79 -0
  516. data/spec/unit/helpers/scope_chain_spec.rb +35 -0
  517. data/spec/unit/i18n_spec.rb +29 -0
  518. data/spec/unit/localizers/resource_localizer_spec.rb +36 -0
  519. data/spec/unit/menu_collection_spec.rb +62 -0
  520. data/spec/unit/menu_item_spec.rb +82 -0
  521. data/spec/unit/menu_spec.rb +60 -0
  522. data/spec/unit/namespace/authorization_spec.rb +27 -0
  523. data/spec/unit/namespace/register_page_spec.rb +99 -0
  524. data/spec/unit/namespace/register_resource_spec.rb +162 -0
  525. data/spec/unit/namespace_spec.rb +126 -0
  526. data/spec/unit/order_clause_spec.rb +81 -0
  527. data/spec/unit/page_controller_spec.rb +5 -0
  528. data/spec/unit/page_spec.rb +128 -0
  529. data/spec/unit/pretty_format_spec.rb +82 -0
  530. data/spec/unit/pundit_adapter_spec.rb +98 -0
  531. data/spec/unit/resource/action_items_spec.rb +83 -0
  532. data/spec/unit/resource/attributes_spec.rb +49 -0
  533. data/spec/unit/resource/includes_spec.rb +21 -0
  534. data/spec/unit/resource/menu_spec.rb +18 -0
  535. data/spec/unit/resource/naming_spec.rb +120 -0
  536. data/spec/unit/resource/ordering_spec.rb +35 -0
  537. data/spec/unit/resource/page_presenters_spec.rb +44 -0
  538. data/spec/unit/resource/pagination_spec.rb +38 -0
  539. data/spec/unit/resource/routes_spec.rb +125 -0
  540. data/spec/unit/resource/scopes_spec.rb +50 -0
  541. data/spec/unit/resource/sidebars_spec.rb +43 -0
  542. data/spec/unit/resource_collection_spec.rb +175 -0
  543. data/spec/unit/resource_controller/data_access_spec.rb +234 -0
  544. data/spec/unit/resource_controller/decorators_spec.rb +94 -0
  545. data/spec/unit/resource_controller/sidebars_spec.rb +37 -0
  546. data/spec/unit/resource_controller_spec.rb +273 -0
  547. data/spec/unit/resource_registration_spec.rb +61 -0
  548. data/spec/unit/resource_spec.rb +320 -0
  549. data/spec/unit/routing_spec.rb +211 -0
  550. data/spec/unit/scope_spec.rb +225 -0
  551. data/spec/unit/settings_node_spec.rb +26 -0
  552. data/spec/unit/view_factory_spec.rb +19 -0
  553. data/spec/unit/view_helpers/breadcrumbs_spec.rb +253 -0
  554. data/spec/unit/view_helpers/display_helper_spec.rb +203 -0
  555. data/spec/unit/view_helpers/download_format_links_helper_spec.rb +39 -0
  556. data/spec/unit/view_helpers/fields_for_spec.rb +50 -0
  557. data/spec/unit/view_helpers/flash_helper_spec.rb +24 -0
  558. data/spec/unit/view_helpers/form_helper_spec.rb +42 -0
  559. data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +138 -0
  560. data/spec/unit/views/components/attributes_table_spec.rb +271 -0
  561. data/spec/unit/views/components/batch_action_selector_spec.rb +43 -0
  562. data/spec/unit/views/components/blank_slate_spec.rb +27 -0
  563. data/spec/unit/views/components/columns_spec.rb +187 -0
  564. data/spec/unit/views/components/index_list_spec.rb +49 -0
  565. data/spec/unit/views/components/index_table_for_spec.rb +127 -0
  566. data/spec/unit/views/components/menu_item_spec.rb +29 -0
  567. data/spec/unit/views/components/menu_spec.rb +168 -0
  568. data/spec/unit/views/components/paginated_collection_spec.rb +249 -0
  569. data/spec/unit/views/components/panel_spec.rb +58 -0
  570. data/spec/unit/views/components/sidebar_section_spec.rb +68 -0
  571. data/spec/unit/views/components/sidebar_spec.rb +24 -0
  572. data/spec/unit/views/components/site_title_spec.rb +82 -0
  573. data/spec/unit/views/components/status_tag_spec.rb +265 -0
  574. data/spec/unit/views/components/table_for_spec.rb +441 -0
  575. data/spec/unit/views/components/tabs_spec.rb +71 -0
  576. data/spec/unit/views/components/unsupported_browser_spec.rb +39 -0
  577. data/spec/unit/views/index_as_blog_spec.rb +76 -0
  578. data/spec/unit/views/pages/base_spec.rb +14 -0
  579. data/spec/unit/views/pages/form_spec.rb +54 -0
  580. data/spec/unit/views/pages/index_spec.rb +60 -0
  581. data/spec/unit/views/pages/layout_spec.rb +59 -0
  582. data/spec/unit/views/pages/show_spec.rb +32 -0
  583. data/tasks/docs.rake +64 -0
  584. data/tasks/lint.rake +21 -0
  585. data/tasks/local.rake +25 -0
  586. data/tasks/parallel_tests.rake +66 -0
  587. data/tasks/test.rake +24 -0
  588. data/vendor/assets/javascripts/jquery-ui/data.js +41 -0
  589. data/vendor/assets/javascripts/jquery-ui/disable-selection.js +48 -0
  590. data/vendor/assets/javascripts/jquery-ui/escape-selector.js +23 -0
  591. data/vendor/assets/javascripts/jquery-ui/focusable.js +86 -0
  592. data/vendor/assets/javascripts/jquery-ui/ie.js +17 -0
  593. data/vendor/assets/javascripts/jquery-ui/keycode.js +47 -0
  594. data/vendor/assets/javascripts/jquery-ui/plugin.js +46 -0
  595. data/vendor/assets/javascripts/jquery-ui/position.js +500 -0
  596. data/vendor/assets/javascripts/jquery-ui/safe-active-element.js +42 -0
  597. data/vendor/assets/javascripts/jquery-ui/safe-blur.js +23 -0
  598. data/vendor/assets/javascripts/jquery-ui/scroll-parent.js +47 -0
  599. data/vendor/assets/javascripts/jquery-ui/tabbable.js +38 -0
  600. data/vendor/assets/javascripts/jquery-ui/unique-id.js +51 -0
  601. data/vendor/assets/javascripts/jquery-ui/version.js +17 -0
  602. data/vendor/assets/javascripts/jquery-ui/widget.js +735 -0
  603. data/vendor/assets/javascripts/jquery-ui/widgets/button.js +391 -0
  604. data/vendor/assets/javascripts/jquery-ui/widgets/checkboxradio.js +300 -0
  605. data/vendor/assets/javascripts/jquery-ui/widgets/controlgroup.js +300 -0
  606. data/vendor/assets/javascripts/jquery-ui/widgets/datepicker.js +2123 -0
  607. data/vendor/assets/javascripts/jquery-ui/widgets/dialog.js +954 -0
  608. data/vendor/assets/javascripts/jquery-ui/widgets/draggable.js +1259 -0
  609. data/vendor/assets/javascripts/jquery-ui/widgets/mouse.js +230 -0
  610. data/vendor/assets/javascripts/jquery-ui/widgets/resizable.js +1207 -0
  611. data/vendor/assets/javascripts/jquery-ui/widgets/sortable.js +1561 -0
  612. data/vendor/assets/javascripts/jquery-ui/widgets/tabs.js +931 -0
  613. data/vendor/assets/stylesheets/active_admin/_normalize.scss +447 -0
  614. metadata +1037 -0
@@ -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
@@ -0,0 +1,120 @@
1
+ require 'rails_helper'
2
+
3
+ module MockModuleToInclude
4
+ def self.included(dsl)
5
+ end
6
+ end
7
+
8
+ RSpec.describe ActiveAdmin::DSL do
9
+
10
+ let(:application) { ActiveAdmin::Application.new }
11
+ let(:namespace) { ActiveAdmin::Namespace.new application, :admin }
12
+ let(:resource_config) { namespace.register Post }
13
+ let(:dsl){ ActiveAdmin::DSL.new(resource_config) }
14
+
15
+ describe "#include" do
16
+
17
+ it "should call the included class method on the module that is included" do
18
+ expect(MockModuleToInclude).to receive(:included).with(dsl)
19
+ dsl.run_registration_block do
20
+ include MockModuleToInclude
21
+ end
22
+ end
23
+
24
+ end
25
+
26
+ describe '#action_item' do
27
+ before do
28
+ @default_items_count = resource_config.action_items.size
29
+
30
+ dsl.run_registration_block do
31
+ action_item :awesome, only: :show do
32
+ "Awesome ActionItem"
33
+ end
34
+ end
35
+ end
36
+
37
+ it "adds action_item to the action_items of config" do
38
+ expect(resource_config.action_items.size).to eq(@default_items_count + 1)
39
+ end
40
+
41
+ context 'DEPRECATED: when used without a name' do
42
+ it "is configured for only the show action" do
43
+ expect(ActiveAdmin::Deprecation).to receive(:warn).with(instance_of(String))
44
+
45
+ dsl.run_registration_block do
46
+ action_item only: :edit do
47
+ "Awesome ActionItem"
48
+ end
49
+ end
50
+
51
+ item = resource_config.action_items.last
52
+ expect(item.display_on?(:edit)).to be true
53
+ expect(item.display_on?(:index)).to be false
54
+ end
55
+ end
56
+ end
57
+
58
+ describe "#menu" do
59
+
60
+ it "should set the menu_item_options on the configuration" do
61
+ expect(resource_config).to receive(:menu_item_options=).with({parent: "Admin"})
62
+ dsl.run_registration_block do
63
+ menu parent: "Admin"
64
+ end
65
+ end
66
+
67
+ end
68
+
69
+ describe "#navigation_menu" do
70
+
71
+ it "should set the navigation_menu_name on the configuration" do
72
+ expect(resource_config).to receive(:navigation_menu_name=).with(:admin)
73
+ dsl.run_registration_block do
74
+ navigation_menu :admin
75
+ end
76
+ end
77
+
78
+ it "should accept a block" do
79
+ dsl = ActiveAdmin::DSL.new(resource_config)
80
+ dsl.run_registration_block do
81
+ navigation_menu { :dynamic_menu }
82
+ end
83
+ expect(resource_config.navigation_menu_name).to eq :dynamic_menu
84
+ end
85
+
86
+ end
87
+
88
+ describe "#sidebar" do
89
+
90
+ before do
91
+ dsl.config.sidebar_sections << ActiveAdmin::SidebarSection.new(:email)
92
+ end
93
+
94
+ it "add sidebar_section to the sidebar_sections of config" do
95
+ dsl.run_registration_block do
96
+ sidebar :help
97
+ end
98
+ expect(dsl.config.sidebar_sections.map(&:name)).to match_array ['filters', 'Search status:', 'email', 'help']
99
+ end
100
+
101
+ end
102
+
103
+ describe "#batch_action" do
104
+ it "should add a batch action by symbol" do
105
+ dsl.run_registration_block do
106
+ config.batch_actions = true
107
+ batch_action :foo
108
+ end
109
+ expect(resource_config.batch_actions.map(&:sym)).to eq [:foo, :destroy]
110
+ end
111
+
112
+ it "should add a batch action by title" do
113
+ dsl.run_registration_block do
114
+ config.batch_actions = true
115
+ batch_action "foo bar"
116
+ end
117
+ expect(resource_config.batch_actions.map(&:sym)).to eq [:foo_bar, :destroy]
118
+ end
119
+ end
120
+ end
@@ -0,0 +1,28 @@
1
+ require 'rails_helper'
2
+
3
+ RSpec.describe ActiveAdmin::DynamicSettingsNode do
4
+ subject { ActiveAdmin::DynamicSettingsNode.build }
5
+
6
+ context "StringSymbolOrProcSetting" do
7
+ before { subject.register :foo, 'bar', :string_symbol_or_proc }
8
+
9
+ it "should pass through a string" do
10
+ subject.foo = "string"
11
+ expect(subject.foo(self)).to eq "string"
12
+ end
13
+
14
+ it "should instance_exec if context given" do
15
+ ctx = Hash[i: 42]
16
+ subject.foo = proc { self[:i] += 1 }
17
+ expect(subject.foo(ctx)).to eq 43
18
+ expect(subject.foo(ctx)).to eq 44
19
+ end
20
+
21
+ it "should send message if symbol given" do
22
+ ctx = double
23
+ expect(ctx).to receive(:quux).and_return 'qqq'
24
+ subject.foo = :quux
25
+ expect(subject.foo(ctx)).to eq 'qqq'
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,218 @@
1
+ require 'rails_helper'
2
+
3
+ RSpec.describe ActiveAdmin::Filters::ActiveFilter do
4
+
5
+ let(:namespace) do
6
+ ActiveAdmin::Namespace.new(ActiveAdmin::Application.new, :admin)
7
+ end
8
+
9
+ let(:resource) do
10
+ namespace.register(Post)
11
+ end
12
+
13
+ let(:user){ User.create! first_name: "John", last_name: "Doe" }
14
+ let(:category){ Category.create! name: "Category" }
15
+ let(:post){ Post.create! title: "Hello World", category: category, author: user }
16
+
17
+ let(:search) do
18
+ Post.ransack(title_equals: post.title)
19
+ end
20
+
21
+ let(:condition) do
22
+ search.conditions[0]
23
+ end
24
+
25
+ subject do
26
+ ActiveAdmin::Filters::ActiveFilter.new(resource, condition)
27
+ end
28
+
29
+ it 'should have valid values' do
30
+ expect(subject.values).to eq([post.title])
31
+ end
32
+
33
+ it 'should have valid label' do
34
+ expect(subject.label).to eq("Title equals")
35
+ end
36
+
37
+ it 'should pick predicate name translation' do
38
+ expect(subject.predicate_name).to eq(I18n.t("active_admin.filters.predicates.equals"))
39
+ end
40
+
41
+ context 'search by belongs_to association' do
42
+ let(:search) do
43
+ Post.ransack(custom_category_id_eq: category.id)
44
+ end
45
+
46
+ it 'should have valid values' do
47
+ expect(subject.values[0]).to be_a(Category)
48
+ end
49
+
50
+ it 'should have valid label' do
51
+ expect(subject.label).to eq("Category equals")
52
+ end
53
+
54
+ it 'should pick predicate name translation' do
55
+ expect(subject.predicate_name).to eq(Ransack::Translate.predicate('eq'))
56
+ end
57
+
58
+ end
59
+
60
+ context 'search by polymorphic association' do
61
+ let(:resource) do
62
+ namespace.register(ActiveAdmin::Comment)
63
+ end
64
+
65
+ let(:search) do
66
+ ActiveAdmin::Comment.ransack(resource_id_eq: post.id, resource_type_eq: post.class.to_s)
67
+ end
68
+
69
+ context 'id filter' do
70
+ let(:condition) do
71
+ search.conditions[0]
72
+ end
73
+ it 'should have valid values' do
74
+ expect(subject.values[0]).to eq(post.id)
75
+ end
76
+
77
+ it 'should have valid label' do
78
+ expect(subject.label).to eq("Resource equals")
79
+ end
80
+ end
81
+
82
+ context 'type filter' do
83
+ let(:condition) do
84
+ search.conditions[1]
85
+ end
86
+
87
+ it 'should have valid values' do
88
+ expect(subject.values[0]).to eq(post.class.to_s)
89
+ end
90
+
91
+ it 'should have valid label' do
92
+ expect(subject.label).to eq("Resource type equals")
93
+ end
94
+ end
95
+ end
96
+
97
+ context 'search by has many association' do
98
+ let(:resource) do
99
+ namespace.register(Category)
100
+ end
101
+
102
+ let(:search) do
103
+ Category.ransack(posts_id_eq: post.id)
104
+ end
105
+
106
+ it 'should have valid values' do
107
+ expect(subject.values[0]).to be_a(Post)
108
+ end
109
+
110
+ it 'should have valid label' do
111
+ expect(subject.label).to eq("Post equals")
112
+ end
113
+
114
+ context 'search by has many through association' do
115
+ let(:resource) do
116
+ namespace.register(User)
117
+ end
118
+
119
+ let(:search) do
120
+ User.ransack(posts_category_id_eq: category.id)
121
+ end
122
+
123
+ it 'should have valid values' do
124
+ expect(subject.values[0]).to be_a(Category)
125
+ end
126
+
127
+ it 'should have valid label' do
128
+ expect(subject.label).to eq("Category equals")
129
+ end
130
+
131
+ end
132
+
133
+ end
134
+
135
+ context 'search has no matching records' do
136
+ let(:search) { Post.ransack(author_id_eq: "foo") }
137
+
138
+ it 'should not produce and error' do
139
+ expect { subject.values }.not_to raise_error
140
+ end
141
+
142
+ it 'should return an enumerable' do
143
+ expect(subject.values).to respond_to(:map)
144
+ end
145
+ end
146
+
147
+ context 'a label is set on the filter' do
148
+ it 'should use the filter label as the label prefix' do
149
+ label = "#{user.first_name}'s Post Title"
150
+ resource.add_filter(:title, label: label)
151
+
152
+ expect(subject.label).to eq ("#{label} equals")
153
+ end
154
+ end
155
+
156
+ context "the association uses a different primary_key than the related class' primary_key" do
157
+ let (:resource_klass) {
158
+ Class.new(Post) do
159
+ belongs_to :kategory, class_name: "Category", primary_key: :name, foreign_key: :title
160
+
161
+ def self.name
162
+ "SuperPost"
163
+ end
164
+ end
165
+ }
166
+
167
+ let(:resource) do
168
+ namespace.register(resource_klass)
169
+ end
170
+
171
+ let(:user){ User.create! first_name: "John", last_name: "Doe" }
172
+ let!(:category){ Category.create! name: "Category" }
173
+
174
+ let(:post){ resource_klass.create! title: "Category", author: user }
175
+
176
+ let(:search) do
177
+ resource_klass.ransack(title_equals: post.title)
178
+ end
179
+
180
+ it "should use the association's primary key to find the associated record" do
181
+ allow(ActiveSupport::Dependencies).to receive(:constantize).with("::SuperPost").and_return(resource_klass)
182
+
183
+ resource.add_filter(:kategory)
184
+
185
+ expect(subject.values.first).to eq category
186
+ end
187
+ end
188
+
189
+ context 'when the resource has a custom primary key' do
190
+ let(:resource_klass) do
191
+ Class.new(Store) do
192
+ self.primary_key = 'name'
193
+ belongs_to :user
194
+
195
+ def self.name
196
+ 'SubStore'
197
+ end
198
+ end
199
+ end
200
+
201
+ let(:resource) do
202
+ namespace.register(resource_klass)
203
+ end
204
+
205
+ let(:user) { User.create! first_name: 'John', last_name: 'Doe' }
206
+ let(:store) { resource_klass.create! name: 'Store 1', user_id: user.id }
207
+
208
+ let(:search) do
209
+ resource_klass.ransack(user_id_eq: user.id)
210
+ end
211
+
212
+ it "should use the association's primary key to find the associated record" do
213
+ allow(ActiveSupport::Dependencies).to receive(:constantize).with("::#{resource_klass.name}").and_return(resource_klass)
214
+
215
+ expect(subject.values.first).to eq user
216
+ end
217
+ end
218
+ end