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,107 @@
1
+ require 'active_admin/dynamic_settings_node'
2
+
3
+ module ActiveAdmin
4
+ class NamespaceSettings < DynamicSettingsNode
5
+ # The default number of resources to display on index pages
6
+ register :default_per_page, 30
7
+
8
+ # The max number of resources to display on index pages and batch exports
9
+ register :max_per_page, 10_000
10
+
11
+ # The title which gets displayed in the main layout
12
+ register :site_title, "", :string_symbol_or_proc
13
+
14
+ # Set the site title link href (defaults to AA dashboard)
15
+ register :site_title_link, ""
16
+
17
+ # Set the site title image displayed in the main layout (has precendence over :site_title)
18
+ register :site_title_image, "", :string_symbol_or_proc
19
+
20
+ # Set the site footer text (defaults to Powered by ActiveAdmin text with version)
21
+ register :footer, "", :string_symbol_or_proc
22
+
23
+ # Set a favicon
24
+ register :favicon, false
25
+
26
+ # Additional meta tags to place in head of logged in pages.
27
+ register :meta_tags, {}
28
+
29
+ # Additional meta tags to place in head of logged out pages.
30
+ register :meta_tags_for_logged_out_pages, { robots: "noindex, nofollow" }
31
+
32
+ # The view factory to use to generate all the view classes. Take
33
+ # a look at ActiveAdmin::ViewFactory
34
+ register :view_factory, ActiveAdmin::ViewFactory.new
35
+
36
+ # The method to call in controllers to get the current user
37
+ register :current_user_method, false
38
+
39
+ # The method to call in the controllers to ensure that there
40
+ # is a currently authenticated admin user
41
+ register :authentication_method, false
42
+
43
+ # The path to log user's out with. If set to a symbol, we assume
44
+ # that it's a method to call which returns the path
45
+ register :logout_link_path, :destroy_admin_user_session_path
46
+
47
+ # The method to use when generating the link for user logout
48
+ register :logout_link_method, :get
49
+
50
+ # Whether the batch actions are enabled or not
51
+ register :batch_actions, false
52
+
53
+ # Whether filters are enabled
54
+ register :filters, true
55
+
56
+ # The namespace root.
57
+ register :root_to, 'dashboard#index'
58
+
59
+ # Options that a passed to root_to.
60
+ register :root_to_options, {}
61
+
62
+ # Options passed to the routes, i.e. { path: '/custom' }
63
+ register :route_options, {}
64
+
65
+ # Display breadcrumbs
66
+ register :breadcrumb, true
67
+
68
+ # Display create another checkbox on a new page
69
+ # @return [Boolean] (true)
70
+ register :create_another, false
71
+
72
+ # Default CSV options
73
+ register :csv_options, { col_sep: ',', byte_order_mark: "\xEF\xBB\xBF" }
74
+
75
+ # Default Download Links options
76
+ register :download_links, true
77
+
78
+ # The authorization adapter to use
79
+ register :authorization_adapter, ActiveAdmin::AuthorizationAdapter
80
+
81
+ # A proc to be used when a user is not authorized to view the current resource
82
+ register :on_unauthorized_access, :rescue_active_admin_access_denied
83
+
84
+ # A regex to detect unsupported browser, set to false to disable
85
+ register :unsupported_browser_matcher, /MSIE [1-8]\.0/
86
+
87
+ # Whether to display 'Current Filters' on search screen
88
+ register :current_filters, true
89
+
90
+ # class to handle ordering
91
+ register :order_clause, ActiveAdmin::OrderClause
92
+
93
+ # default show_count for scopes
94
+ register :scopes_show_count, true
95
+
96
+ # Request parameters that are permitted by default
97
+ register :permitted_params, [
98
+ :utf8, :_method, :authenticity_token, :commit, :id
99
+ ]
100
+
101
+ # Set flash message keys that shouldn't show in ActiveAdmin
102
+ register :flash_keys_to_except, ['timedout']
103
+
104
+ # Include association filters by default
105
+ register :include_default_association_filters, true
106
+ end
107
+ end
@@ -0,0 +1,48 @@
1
+ module ActiveAdmin
2
+ class OrderClause
3
+ attr_reader :field, :order, :active_admin_config
4
+
5
+ def initialize(active_admin_config, clause)
6
+ clause =~ /^([\w\_\.]+)(->'\w+')?_(desc|asc)$/
7
+ @column = $1
8
+ @op = $2
9
+ @order = $3
10
+ @active_admin_config = active_admin_config
11
+ @field = [@column, @op].compact.join
12
+ end
13
+
14
+ def valid?
15
+ @field.present? && @order.present?
16
+ end
17
+
18
+ def apply(chain)
19
+ chain.reorder(Arel.sql sql)
20
+ end
21
+
22
+ def to_sql
23
+ [table_column, @op, ' ', @order].compact.join
24
+ end
25
+
26
+ def table
27
+ active_admin_config.resource_column_names.include?(@column) ? active_admin_config.resource_table_name : nil
28
+ end
29
+
30
+ def table_column
31
+ (@column =~ /\./) ? @column :
32
+ [table, active_admin_config.resource_quoted_column_name(@column)].compact.join(".")
33
+ end
34
+
35
+ def sql
36
+ custom_sql || to_sql
37
+ end
38
+
39
+ protected
40
+
41
+ def custom_sql
42
+ if active_admin_config.ordering[@column].present?
43
+ active_admin_config.ordering[@column].call(self)
44
+ end
45
+ end
46
+
47
+ end
48
+ end
@@ -0,0 +1,35 @@
1
+ module ActiveAdmin
2
+ class Comment < ActiveRecord::Base
3
+
4
+ self.table_name = "#{table_name_prefix}active_admin_comments#{table_name_suffix}"
5
+
6
+ belongs_to :resource, polymorphic: true, optional: true
7
+ belongs_to :author, polymorphic: true
8
+
9
+ validates_presence_of :body, :namespace, :resource
10
+
11
+ before_create :set_resource_type
12
+
13
+ # @return [String] The name of the record to use for the polymorphic relationship
14
+ def self.resource_type(resource)
15
+ ResourceController::Decorators.undecorate(resource).class.base_class.name.to_s
16
+ end
17
+
18
+ def self.find_for_resource_in_namespace(resource, namespace)
19
+ where(
20
+ resource_type: resource_type(resource),
21
+ resource_id: resource,
22
+ namespace: namespace.to_s
23
+ ).order(ActiveAdmin.application.namespaces[namespace.to_sym].comments_order)
24
+ end
25
+
26
+ def self.ransackable_attributes(auth_object = nil)
27
+ ["author_id", "author_type", "body", "created_at", "id", "namespace", "resource_id", "resource_type", "updated_at"]
28
+ end
29
+
30
+ def set_resource_type
31
+ self.resource_type = self.class.resource_type(resource)
32
+ end
33
+
34
+ end
35
+ end
@@ -0,0 +1,14 @@
1
+ module ActiveAdmin
2
+ module Comments
3
+
4
+ module NamespaceHelper
5
+
6
+ # Returns true if the namespace allows comments
7
+ def comments?
8
+ comments == true
9
+ end
10
+
11
+ end
12
+
13
+ end
14
+ end
@@ -0,0 +1,17 @@
1
+ module ActiveAdmin
2
+ module Comments
3
+
4
+ module ResourceHelper
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ attr_accessor :comments
9
+ end
10
+
11
+ def comments?
12
+ (namespace.comments? && comments != false) || comments == true
13
+ end
14
+ end
15
+
16
+ end
17
+ end
@@ -0,0 +1,95 @@
1
+ require 'active_admin/views'
2
+ require 'active_admin/views/components/panel'
3
+
4
+ module ActiveAdmin
5
+ module Comments
6
+ module Views
7
+
8
+ class Comments < ActiveAdmin::Views::Panel
9
+ builder_method :active_admin_comments_for
10
+
11
+ attr_accessor :resource
12
+
13
+ def build(resource)
14
+ @resource = resource
15
+ @comments = ActiveAdmin::Comment.find_for_resource_in_namespace(resource, active_admin_namespace.name).includes(:author).page(params[:page])
16
+ super(title, for: resource)
17
+ build_comments
18
+ end
19
+
20
+ protected
21
+
22
+ def title
23
+ I18n.t 'active_admin.comments.title_content', count: @comments.total_count
24
+ end
25
+
26
+ def build_comments
27
+ if @comments.any?
28
+ @comments.each(&method(:build_comment))
29
+ div page_entries_info(@comments).html_safe, class: 'pagination_information'
30
+ else
31
+ build_empty_message
32
+ end
33
+
34
+ text_node paginate @comments
35
+ build_comment_form
36
+ end
37
+
38
+ def build_comment(comment)
39
+ div for: comment do
40
+ div class: 'active_admin_comment_meta' do
41
+ h4 class: 'active_admin_comment_author' do
42
+ comment.author ? auto_link(comment.author) : I18n.t('active_admin.comments.author_missing')
43
+ end
44
+ span pretty_format comment.created_at
45
+ if authorized?(ActiveAdmin::Auth::DESTROY, comment)
46
+ text_node link_to I18n.t('active_admin.comments.delete'), comments_url(comment.id), method: :delete, data: { confirm: I18n.t('active_admin.comments.delete_confirmation') }
47
+ end
48
+ end
49
+ div class: 'active_admin_comment_body' do
50
+ simple_format comment.body
51
+ end
52
+ end
53
+ end
54
+
55
+ def build_empty_message
56
+ span I18n.t('active_admin.comments.no_comments_yet'), class: 'empty'
57
+ end
58
+
59
+ def comments_url(*args)
60
+ parts = []
61
+ parts << active_admin_namespace.name unless active_admin_namespace.root?
62
+ parts << active_admin_namespace.comments_registration_name.underscore
63
+ parts << 'path'
64
+ send parts.join('_'), *args
65
+ end
66
+
67
+ def comment_form_url
68
+ parts = []
69
+ parts << active_admin_namespace.name unless active_admin_namespace.root?
70
+ parts << active_admin_namespace.comments_registration_name.underscore.pluralize
71
+ parts << 'path'
72
+ send parts.join '_'
73
+ end
74
+
75
+ def build_comment_form
76
+ active_admin_form_for(ActiveAdmin::Comment.new, url: comment_form_url) do |f|
77
+ f.inputs do
78
+ f.input :resource_type, as: :hidden, input_html: { value: ActiveAdmin::Comment.resource_type(parent.resource) }
79
+ f.input :resource_id, as: :hidden, input_html: { value: parent.resource.id }
80
+ f.input :body, label: false, input_html: { size: '80x8' }
81
+ end
82
+ f.actions do
83
+ f.action :submit, label: I18n.t('active_admin.comments.add')
84
+ end
85
+ end
86
+ end
87
+
88
+ def default_id_for_prefix
89
+ 'active_admin_comments_for'
90
+ end
91
+ end
92
+
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,2 @@
1
+ require 'active_admin/views'
2
+ require 'active_admin/orm/active_record/comments/views/active_admin_comments'
@@ -0,0 +1,99 @@
1
+ require 'active_admin/orm/active_record/comments/views'
2
+ require 'active_admin/orm/active_record/comments/namespace_helper'
3
+ require 'active_admin/orm/active_record/comments/resource_helper'
4
+
5
+ # Add the comments configuration
6
+ ActiveAdmin::Application.inheritable_setting :comments, true
7
+ ActiveAdmin::Application.inheritable_setting :comments_registration_name, 'Comment'
8
+ ActiveAdmin::Application.inheritable_setting :comments_order, "created_at ASC"
9
+ ActiveAdmin::Application.inheritable_setting :comments_menu, {}
10
+
11
+ # Insert helper modules
12
+ ActiveAdmin::Namespace.send :include, ActiveAdmin::Comments::NamespaceHelper
13
+ ActiveAdmin::Resource.send :include, ActiveAdmin::Comments::ResourceHelper
14
+
15
+ # Load the model as soon as it's referenced. By that point, Rails & Kaminari will be ready
16
+ ActiveAdmin.autoload :Comment, 'active_admin/orm/active_record/comments/comment'
17
+
18
+ # Hint i18n-tasks about model and attribute translations used by default install
19
+ # i18n-tasks-use t('activerecord.models.comment')
20
+ # i18n-tasks-use t('activerecord.models.active_admin/comment')
21
+ # i18n-tasks-use t('activerecord.attributes.active_admin/comment.author_type')
22
+ # i18n-tasks-use t('activerecord.attributes.active_admin/comment.body')
23
+ # i18n-tasks-use t('activerecord.attributes.active_admin/comment.created_at')
24
+ # i18n-tasks-use t('activerecord.attributes.active_admin/comment.namespace')
25
+ # i18n-tasks-use t('activerecord.attributes.active_admin/comment.resource_type')
26
+ # i18n-tasks-use t('activerecord.attributes.active_admin/comment.updated_at')
27
+ # i18n-tasks-use t('active_admin.scopes.all')
28
+
29
+ # Walk through all the loaded namespaces after they're loaded
30
+ ActiveAdmin.after_load do |app|
31
+ app.namespaces.each do |namespace|
32
+ namespace.register ActiveAdmin::Comment, as: namespace.comments_registration_name do
33
+ actions :index, :show, :create, :destroy
34
+
35
+ menu namespace.comments ? namespace.comments_menu : false
36
+
37
+ config.comments = false # Don't allow comments on comments
38
+ config.batch_actions = false # The default destroy batch action isn't showing up anyway...
39
+
40
+ scope :all, show_count: false
41
+ # Register a scope for every namespace that exists.
42
+ # The current namespace will be the default scope.
43
+ app.namespaces.map(&:name).each do |name|
44
+ scope name, default: namespace.name == name do |scope|
45
+ scope.where namespace: name.to_s
46
+ end
47
+ end
48
+
49
+ # Store the author and namespace
50
+ before_save do |comment|
51
+ comment.namespace = active_admin_config.namespace.name
52
+ comment.author = current_active_admin_user
53
+ end
54
+
55
+ controller do
56
+ # Prevent N+1 queries
57
+ def scoped_collection
58
+ super.includes(:author, :resource)
59
+ end
60
+
61
+ # Redirect to the resource show page after comment creation
62
+ def create
63
+ create! do |success, failure|
64
+ success.html do
65
+ redirect_back fallback_location: active_admin_root
66
+ end
67
+ failure.html do
68
+ flash[:error] = I18n.t 'active_admin.comments.errors.empty_text'
69
+ redirect_back fallback_location: active_admin_root
70
+ end
71
+ end
72
+
73
+ def destroy
74
+ destroy! do |success, failure|
75
+ success.html do
76
+ redirect_back fallback_location: active_admin_root
77
+ end
78
+ failure.html do
79
+ redirect_back fallback_location: active_admin_root
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end
85
+
86
+ permit_params :body, :namespace, :resource_id, :resource_type
87
+
88
+ index do
89
+ column I18n.t('active_admin.comments.resource_type'), :resource_type
90
+ column I18n.t('active_admin.comments.author_type'), :author_type
91
+ column I18n.t('active_admin.comments.resource'), :resource
92
+ column I18n.t('active_admin.comments.author'), :author
93
+ column I18n.t('active_admin.comments.body'), :body
94
+ column I18n.t('active_admin.comments.created_at'), :created_at
95
+ actions
96
+ end
97
+ end
98
+ end
99
+ end
@@ -0,0 +1,5 @@
1
+ # ActiveRecord-specific plugins should be required here
2
+
3
+ ActiveAdmin::DatabaseHitDuringLoad.database_error_classes << ActiveRecord::StatementInvalid
4
+
5
+ require 'active_admin/orm/active_record/comments'
File without changes
@@ -0,0 +1 @@
1
+ # Mongoid-specific plugins should be required here
@@ -0,0 +1,114 @@
1
+ module ActiveAdmin
2
+ # Page is the primary data storage for page configuration in Active Admin
3
+ #
4
+ # When you register a page (ActiveAdmin.register_page "Status") you are actually creating
5
+ # a new Page instance within the given Namespace.
6
+ #
7
+ # The instance of the current page is available in PageController and views
8
+ # by calling the #active_admin_config method.
9
+ #
10
+ class Page
11
+
12
+ # The namespace this config belongs to
13
+ attr_reader :namespace
14
+
15
+ # The name of the page
16
+ attr_reader :name
17
+
18
+ # An array of custom actions defined for this page
19
+ attr_reader :page_actions
20
+ def add_page_route(name, options)
21
+ page_actions << ControllerAction.new(name, options)
22
+ end
23
+
24
+ # Set breadcrumb builder
25
+ attr_accessor :breadcrumb
26
+
27
+ module Base
28
+ def initialize(namespace, name, options)
29
+ @namespace = namespace
30
+ @name = name
31
+ @options = options
32
+ @page_actions = []
33
+ end
34
+ end
35
+
36
+ include Base
37
+ include Resource::Controllers
38
+ include Resource::PagePresenters
39
+ include Resource::Sidebars
40
+ include Resource::ActionItems
41
+ include Resource::Menu
42
+ include Resource::Naming
43
+ include Resource::Routes
44
+
45
+ # label is singular
46
+ def plural_resource_label
47
+ name
48
+ end
49
+
50
+ def resource_name
51
+ @resource_name ||= Resource::Name.new(nil, name)
52
+ end
53
+
54
+ def underscored_resource_name
55
+ resource_name.to_s.parameterize.underscore
56
+ end
57
+
58
+ def camelized_resource_name
59
+ underscored_resource_name.camelize
60
+ end
61
+
62
+ def namespace_name
63
+ namespace.name.to_s
64
+ end
65
+
66
+ def default_menu_options
67
+ super.merge(id: resource_name)
68
+ end
69
+
70
+ def controller_name
71
+ [namespace.module_name, camelized_resource_name + "Controller"].compact.join('::')
72
+ end
73
+
74
+ # Override from `ActiveAdmin::Resource::Controllers`
75
+ def route_uncountable?
76
+ false
77
+ end
78
+
79
+ def add_default_action_items
80
+ end
81
+
82
+ def add_default_sidebar_sections
83
+ end
84
+
85
+ # Clears all the custom actions this page knows about
86
+ def clear_page_actions!
87
+ @page_actions = []
88
+ end
89
+
90
+ def belongs_to(target, options = {})
91
+ @belongs_to = Resource::BelongsTo.new(self, target, options)
92
+ self.navigation_menu_name = target unless @belongs_to.optional?
93
+ controller.send :belongs_to, target, options.dup
94
+ end
95
+
96
+ def belongs_to_config
97
+ @belongs_to
98
+ end
99
+
100
+ # Do we belong to another resource?
101
+ def belongs_to?
102
+ !!belongs_to_config
103
+ end
104
+
105
+ def breadcrumb
106
+ instance_variable_defined?(:@breadcrumb) ? @breadcrumb : namespace.breadcrumb
107
+ end
108
+
109
+ def order_clause
110
+ @order_clause || namespace.order_clause
111
+ end
112
+
113
+ end
114
+ end
@@ -0,0 +1,29 @@
1
+ module ActiveAdmin
2
+
3
+ # All Pages controllers inherit from this controller.
4
+ class PageController < BaseController
5
+
6
+ # Active admin actions don't require layout. All custom actions do.
7
+ ACTIVE_ADMIN_ACTIONS = [:index]
8
+
9
+ actions :index
10
+
11
+ before_action :authorize_access!
12
+
13
+ def index(options = {}, &block)
14
+ render "active_admin/page/index"
15
+ end
16
+
17
+ def clear_page_actions!
18
+ active_admin_config.clear_page_actions!
19
+ end
20
+
21
+ private
22
+
23
+ def authorize_access!
24
+ permission = action_to_permission(params[:action])
25
+ authorize! permission, active_admin_config
26
+ end
27
+
28
+ end
29
+ end
@@ -0,0 +1,35 @@
1
+ module ActiveAdmin
2
+ # This is the class where all the register_page blocks are evaluated.
3
+ class PageDSL < DSL
4
+
5
+ # Page content.
6
+ #
7
+ # The block should define the view using Arbre.
8
+ #
9
+ # Example:
10
+ #
11
+ # ActiveAdmin.register "My Page" do
12
+ # content do
13
+ # para "Sweet!"
14
+ # end
15
+ # end
16
+ #
17
+ def content(options = {}, &block)
18
+ if block_given?
19
+ config.set_page_presenter :index, ActiveAdmin::PagePresenter.new(options, &block)
20
+ else
21
+ config.set_page_options :index, options
22
+ end
23
+ end
24
+
25
+ def page_action(name, options = {}, &block)
26
+ define_controller_method(name, &block)
27
+
28
+ config.add_page_route(name, options)
29
+ end
30
+
31
+ def belongs_to(target, options = {})
32
+ config.belongs_to(target, options)
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,32 @@
1
+ module ActiveAdmin
2
+
3
+ # A simple object that gets used to present different aspects of views
4
+ #
5
+ # Initialize with a set of options and a block. The options become
6
+ # available using hash style syntax.
7
+ #
8
+ # Usage:
9
+ #
10
+ # presenter = PagePresenter.new as: :table do
11
+ # # some awesome stuff
12
+ # end
13
+ #
14
+ # presenter[:as] #=> :table
15
+ # presenter.block #=> The block passed in to new
16
+ #
17
+ class PagePresenter
18
+
19
+ attr_reader :block, :options
20
+
21
+ delegate :has_key?, :fetch, to: :options
22
+
23
+ def initialize(options = {}, &block)
24
+ @options, @block = options, block
25
+ end
26
+
27
+ def [](key)
28
+ @options[key]
29
+ end
30
+
31
+ end
32
+ end