yousty-activeadmin 1.0.0.pre

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 (490) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +43 -0
  3. data/.travis.yml +8 -0
  4. data/.yardopts +9 -0
  5. data/CHANGELOG.md +1056 -0
  6. data/CONTRIBUTING.md +110 -0
  7. data/Gemfile +41 -0
  8. data/Guardfile +7 -0
  9. data/LICENSE +25 -0
  10. data/README.md +67 -0
  11. data/Rakefile +25 -0
  12. data/activeadmin.gemspec +33 -0
  13. data/app/assets/images/active_admin/admin_notes_icon.png +0 -0
  14. data/app/assets/images/active_admin/datepicker/datepicker-header-bg.png +0 -0
  15. data/app/assets/images/active_admin/datepicker/datepicker-input-icon.png +0 -0
  16. data/app/assets/images/active_admin/datepicker/datepicker-next-link-icon.png +0 -0
  17. data/app/assets/images/active_admin/datepicker/datepicker-nipple.png +0 -0
  18. data/app/assets/images/active_admin/datepicker/datepicker-prev-link-icon.png +0 -0
  19. data/app/assets/images/active_admin/index_list_icons/block_icon.svg +10 -0
  20. data/app/assets/images/active_admin/index_list_icons/blog_icon.svg +4 -0
  21. data/app/assets/images/active_admin/index_list_icons/grid_icon.svg +13 -0
  22. data/app/assets/images/active_admin/index_list_icons/table_icon.svg +3 -0
  23. data/app/assets/images/active_admin/loading.gif +0 -0
  24. data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
  25. data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
  26. data/app/assets/images/active_admin/orderable.png +0 -0
  27. data/app/assets/javascripts/active_admin/application.js.coffee +6 -0
  28. data/app/assets/javascripts/active_admin/base.js.coffee +5 -0
  29. data/app/assets/javascripts/active_admin/components/application.js.coffee +23 -0
  30. data/app/assets/javascripts/active_admin/components/batch_actions.js.coffee +26 -0
  31. data/app/assets/javascripts/active_admin/components/has_many.js.coffee +41 -0
  32. data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +37 -0
  33. data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +105 -0
  34. data/app/assets/javascripts/active_admin/lib/popover.js.coffee +97 -0
  35. data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +25 -0
  36. data/app/assets/stylesheets/active_admin/_base.css.scss +41 -0
  37. data/app/assets/stylesheets/active_admin/_forms.css.scss +293 -0
  38. data/app/assets/stylesheets/active_admin/_header.css.scss +152 -0
  39. data/app/assets/stylesheets/active_admin/_mixins.css.scss +1 -0
  40. data/app/assets/stylesheets/active_admin/_typography.css.scss +100 -0
  41. data/app/assets/stylesheets/active_admin/components/_batch_actions.css.scss +11 -0
  42. data/app/assets/stylesheets/active_admin/components/_blank_slates.scss +31 -0
  43. data/app/assets/stylesheets/active_admin/components/_breadcrumbs.scss +20 -0
  44. data/app/assets/stylesheets/active_admin/components/_buttons.scss +11 -0
  45. data/app/assets/stylesheets/active_admin/components/_columns.scss +3 -0
  46. data/app/assets/stylesheets/active_admin/components/_comments.css.scss +41 -0
  47. data/app/assets/stylesheets/active_admin/components/_date_picker.css.scss +123 -0
  48. data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +151 -0
  49. data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +39 -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/_pagination.scss +34 -0
  54. data/app/assets/stylesheets/active_admin/components/_panels.scss +6 -0
  55. data/app/assets/stylesheets/active_admin/components/_popovers.css.scss +123 -0
  56. data/app/assets/stylesheets/active_admin/components/_scopes.scss +10 -0
  57. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +12 -0
  58. data/app/assets/stylesheets/active_admin/components/_table_tools.css.scss +95 -0
  59. data/app/assets/stylesheets/active_admin/components/_tables.css.scss +110 -0
  60. data/app/assets/stylesheets/active_admin/mixins/_all.css.scss +11 -0
  61. data/app/assets/stylesheets/active_admin/mixins/_buttons.css.scss +66 -0
  62. data/app/assets/stylesheets/active_admin/mixins/_gradients.css.scss +38 -0
  63. data/app/assets/stylesheets/active_admin/mixins/_icons.css.scss +21 -0
  64. data/app/assets/stylesheets/active_admin/mixins/_reset.css.scss +165 -0
  65. data/app/assets/stylesheets/active_admin/mixins/_rounded.css.scss +43 -0
  66. data/app/assets/stylesheets/active_admin/mixins/_sections.css.scss +36 -0
  67. data/app/assets/stylesheets/active_admin/mixins/_shadows.css.scss +22 -0
  68. data/app/assets/stylesheets/active_admin/mixins/_typography.scss +3 -0
  69. data/app/assets/stylesheets/active_admin/mixins/_utilities.scss +26 -0
  70. data/app/assets/stylesheets/active_admin/mixins/_variables.css.scss +32 -0
  71. data/app/assets/stylesheets/active_admin/pages/_logged_out.scss +44 -0
  72. data/app/assets/stylesheets/active_admin/print.css.scss +284 -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 +43 -0
  76. data/app/views/active_admin/dashboard/index.html.arb +1 -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 +19 -0
  80. data/app/views/active_admin/devise/passwords/new.html.erb +14 -0
  81. data/app/views/active_admin/devise/sessions/new.html.erb +20 -0
  82. data/app/views/active_admin/devise/shared/_links.erb +27 -0
  83. data/app/views/active_admin/devise/unlocks/new.html.erb +14 -0
  84. data/app/views/active_admin/page/index.html.arb +1 -0
  85. data/app/views/active_admin/resource/edit.html.arb +1 -0
  86. data/app/views/active_admin/resource/index.csv.erb +17 -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/layouts/active_admin.html.arb +1 -0
  91. data/app/views/layouts/active_admin_logged_out.html.erb +37 -0
  92. data/config/locales/bg.yml +101 -0
  93. data/config/locales/ca.yml +98 -0
  94. data/config/locales/cs.yml +105 -0
  95. data/config/locales/da.yml +102 -0
  96. data/config/locales/de-CH.yml +117 -0
  97. data/config/locales/de.yml +119 -0
  98. data/config/locales/en-GB.yml +91 -0
  99. data/config/locales/en.yml +110 -0
  100. data/config/locales/es.yml +106 -0
  101. data/config/locales/es_MX.yml +104 -0
  102. data/config/locales/fi.yml +109 -0
  103. data/config/locales/fr.yml +97 -0
  104. data/config/locales/he.yml +91 -0
  105. data/config/locales/hr.yml +93 -0
  106. data/config/locales/hu.yml +92 -0
  107. data/config/locales/it.yml +89 -0
  108. data/config/locales/ja.yml +104 -0
  109. data/config/locales/ko.yml +84 -0
  110. data/config/locales/lt.yml +90 -0
  111. data/config/locales/lv.yml +89 -0
  112. data/config/locales/nl.yml +90 -0
  113. data/config/locales/no-NB.yml +85 -0
  114. data/config/locales/pl.yml +93 -0
  115. data/config/locales/pt-BR.yml +90 -0
  116. data/config/locales/pt-PT.yml +89 -0
  117. data/config/locales/ro.yml +93 -0
  118. data/config/locales/ru.yml +103 -0
  119. data/config/locales/sv-SE.yml +89 -0
  120. data/config/locales/tr.yml +90 -0
  121. data/config/locales/uk.yml +100 -0
  122. data/config/locales/vi.yml +90 -0
  123. data/config/locales/zh-CN.yml +90 -0
  124. data/config/locales/zh-TW.yml +90 -0
  125. data/cucumber.yml +3 -0
  126. data/docs/0-installation.md +84 -0
  127. data/docs/1-general-configuration.md +137 -0
  128. data/docs/10-custom-pages.md +98 -0
  129. data/docs/11-decorators.md +66 -0
  130. data/docs/12-arbre-components.md +144 -0
  131. data/docs/13-authorization-adapter.md +227 -0
  132. data/docs/2-resource-customization.md +340 -0
  133. data/docs/3-index-pages/create-an-index.md +29 -0
  134. data/docs/3-index-pages/index-as-block.md +21 -0
  135. data/docs/3-index-pages/index-as-blog.md +71 -0
  136. data/docs/3-index-pages/index-as-grid.md +29 -0
  137. data/docs/3-index-pages/index-as-table.md +154 -0
  138. data/docs/3-index-pages.md +206 -0
  139. data/docs/4-csv-format.md +39 -0
  140. data/docs/5-forms.md +110 -0
  141. data/docs/6-show-pages.md +77 -0
  142. data/docs/7-sidebars.md +42 -0
  143. data/docs/8-custom-actions.md +139 -0
  144. data/docs/9-batch-actions.md +155 -0
  145. data/features/action_item.feature +73 -0
  146. data/features/authorization.feature +64 -0
  147. data/features/authorization_cancan.feature +52 -0
  148. data/features/belongs_to.feature +63 -0
  149. data/features/breadcrumb.feature +27 -0
  150. data/features/comments/commenting.feature +140 -0
  151. data/features/comments/viewing_index.feature +19 -0
  152. data/features/dashboard.feature +16 -0
  153. data/features/decorators.feature +41 -0
  154. data/features/development_reloading.feature +31 -0
  155. data/features/edit_page.feature +127 -0
  156. data/features/favicon.feature +20 -0
  157. data/features/first_boot.feature +16 -0
  158. data/features/global_navigation.feature +29 -0
  159. data/features/i18n.feature +38 -0
  160. data/features/index/batch_actions.feature +123 -0
  161. data/features/index/filters.feature +138 -0
  162. data/features/index/format_as_csv.feature +117 -0
  163. data/features/index/formats.feature +66 -0
  164. data/features/index/index_as_block.feature +15 -0
  165. data/features/index/index_as_blog.feature +69 -0
  166. data/features/index/index_as_grid.feature +45 -0
  167. data/features/index/index_as_table.feature +195 -0
  168. data/features/index/index_blank_slate.feature +61 -0
  169. data/features/index/index_parameters.feature +75 -0
  170. data/features/index/index_scope_to.feature +56 -0
  171. data/features/index/index_scopes.feature +251 -0
  172. data/features/index/page_title.feature +30 -0
  173. data/features/index/pagination.feature +59 -0
  174. data/features/index/switch_index_view.feature +73 -0
  175. data/features/menu.feature +53 -0
  176. data/features/new_page.feature +119 -0
  177. data/features/registering_assets.feature +35 -0
  178. data/features/registering_pages.feature +148 -0
  179. data/features/registering_resources.feature +33 -0
  180. data/features/root_to.feature +17 -0
  181. data/features/show/default_content.feature +43 -0
  182. data/features/show/page_title.feature +47 -0
  183. data/features/sidebar_sections.feature +198 -0
  184. data/features/site_title.feature +47 -0
  185. data/features/specifying_actions.feature +93 -0
  186. data/features/step_definitions/action_item_steps.rb +7 -0
  187. data/features/step_definitions/action_link_steps.rb +7 -0
  188. data/features/step_definitions/additional_web_steps.rb +82 -0
  189. data/features/step_definitions/asset_steps.rb +15 -0
  190. data/features/step_definitions/attribute_steps.rb +13 -0
  191. data/features/step_definitions/batch_action_steps.rb +55 -0
  192. data/features/step_definitions/breadcrumb_steps.rb +3 -0
  193. data/features/step_definitions/comment_steps.rb +12 -0
  194. data/features/step_definitions/configuration_steps.rb +100 -0
  195. data/features/step_definitions/dashboard_steps.rb +15 -0
  196. data/features/step_definitions/factory_steps.rb +34 -0
  197. data/features/step_definitions/filter_steps.rb +17 -0
  198. data/features/step_definitions/flash_steps.rb +11 -0
  199. data/features/step_definitions/format_steps.rb +45 -0
  200. data/features/step_definitions/i18n_steps.rb +3 -0
  201. data/features/step_definitions/index_scope_steps.rb +21 -0
  202. data/features/step_definitions/index_views_steps.rb +3 -0
  203. data/features/step_definitions/layout_steps.rb +3 -0
  204. data/features/step_definitions/member_link_steps.rb +7 -0
  205. data/features/step_definitions/menu_steps.rb +11 -0
  206. data/features/step_definitions/pagination_steps.rb +8 -0
  207. data/features/step_definitions/sidebar_steps.rb +8 -0
  208. data/features/step_definitions/site_title_steps.rb +15 -0
  209. data/features/step_definitions/symbol_leak_steps.rb +3 -0
  210. data/features/step_definitions/tab_steps.rb +3 -0
  211. data/features/step_definitions/table_steps.rb +119 -0
  212. data/features/step_definitions/user_steps.rb +39 -0
  213. data/features/step_definitions/web_steps.rb +86 -0
  214. data/features/sti_resource.feature +73 -0
  215. data/features/support/env.rb +112 -0
  216. data/features/support/paths.rb +71 -0
  217. data/features/support/selectors.rb +45 -0
  218. data/features/symbol_leak.feature +35 -0
  219. data/features/users/logging_in.feature +34 -0
  220. data/features/users/logging_out.feature +13 -0
  221. data/features/users/resetting_password.feature +34 -0
  222. data/lib/active_admin/abstract_view_factory.rb +95 -0
  223. data/lib/active_admin/application.rb +242 -0
  224. data/lib/active_admin/asset_registration.rb +29 -0
  225. data/lib/active_admin/authorization_adapter.rb +132 -0
  226. data/lib/active_admin/base_controller/authorization.rb +151 -0
  227. data/lib/active_admin/base_controller/menu.rb +34 -0
  228. data/lib/active_admin/base_controller.rb +78 -0
  229. data/lib/active_admin/batch_actions/controller.rb +24 -0
  230. data/lib/active_admin/batch_actions/resource_extension.rb +127 -0
  231. data/lib/active_admin/batch_actions/views/batch_action_form.rb +35 -0
  232. data/lib/active_admin/batch_actions/views/batch_action_popover.rb +28 -0
  233. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +66 -0
  234. data/lib/active_admin/batch_actions/views/selection_cells.rb +37 -0
  235. data/lib/active_admin/batch_actions.rb +17 -0
  236. data/lib/active_admin/callbacks.rb +87 -0
  237. data/lib/active_admin/cancan_adapter.rb +40 -0
  238. data/lib/active_admin/component.rb +5 -0
  239. data/lib/active_admin/controller_action.rb +12 -0
  240. data/lib/active_admin/csv_builder.rb +49 -0
  241. data/lib/active_admin/deprecation.rb +36 -0
  242. data/lib/active_admin/devise.rb +70 -0
  243. data/lib/active_admin/dsl.rb +166 -0
  244. data/lib/active_admin/engine.rb +7 -0
  245. data/lib/active_admin/event.rb +33 -0
  246. data/lib/active_admin/filters/dsl.rb +21 -0
  247. data/lib/active_admin/filters/forms.rb +89 -0
  248. data/lib/active_admin/filters/formtastic_addons.rb +70 -0
  249. data/lib/active_admin/filters/resource_extension.rb +136 -0
  250. data/lib/active_admin/filters.rb +9 -0
  251. data/lib/active_admin/form_builder.rb +152 -0
  252. data/lib/active_admin/helpers/collection.rb +23 -0
  253. data/lib/active_admin/helpers/optional_display.rb +38 -0
  254. data/lib/active_admin/helpers/scope_chain.rb +23 -0
  255. data/lib/active_admin/helpers/settings.rb +108 -0
  256. data/lib/active_admin/iconic/icons.rb +142 -0
  257. data/lib/active_admin/iconic.rb +51 -0
  258. data/lib/active_admin/inputs/datepicker_input.rb +20 -0
  259. data/lib/active_admin/inputs/filter_base/search_method_select.rb +73 -0
  260. data/lib/active_admin/inputs/filter_base.rb +33 -0
  261. data/lib/active_admin/inputs/filter_boolean_input.rb +32 -0
  262. data/lib/active_admin/inputs/filter_check_boxes_input.rb +51 -0
  263. data/lib/active_admin/inputs/filter_date_range_input.rb +34 -0
  264. data/lib/active_admin/inputs/filter_numeric_input.rb +10 -0
  265. data/lib/active_admin/inputs/filter_select_input.rb +61 -0
  266. data/lib/active_admin/inputs/filter_string_input.rb +24 -0
  267. data/lib/active_admin/inputs.rb +15 -0
  268. data/lib/active_admin/menu.rb +107 -0
  269. data/lib/active_admin/menu_collection.rb +96 -0
  270. data/lib/active_admin/menu_item.rb +97 -0
  271. data/lib/active_admin/namespace.rb +224 -0
  272. data/lib/active_admin/orm/active_record/comments/comment.rb +39 -0
  273. data/lib/active_admin/orm/active_record/comments/namespace_helper.rb +14 -0
  274. data/lib/active_admin/orm/active_record/comments/resource_helper.rb +17 -0
  275. data/lib/active_admin/orm/active_record/comments/show_page_helper.rb +23 -0
  276. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +75 -0
  277. data/lib/active_admin/orm/active_record/comments/views.rb +2 -0
  278. data/lib/active_admin/orm/active_record/comments.rb +84 -0
  279. data/lib/active_admin/orm/active_record.rb +3 -0
  280. data/lib/active_admin/orm/mongoid/.gitkeep +0 -0
  281. data/lib/active_admin/orm/mongoid.rb +1 -0
  282. data/lib/active_admin/page.rb +88 -0
  283. data/lib/active_admin/page_controller.rb +29 -0
  284. data/lib/active_admin/page_dsl.rb +28 -0
  285. data/lib/active_admin/page_presenter.rb +32 -0
  286. data/lib/active_admin/resource/action_items.rb +91 -0
  287. data/lib/active_admin/resource/belongs_to.rb +36 -0
  288. data/lib/active_admin/resource/controllers.rb +18 -0
  289. data/lib/active_admin/resource/menu.rb +64 -0
  290. data/lib/active_admin/resource/naming.rb +84 -0
  291. data/lib/active_admin/resource/page_presenters.rb +82 -0
  292. data/lib/active_admin/resource/pagination.rb +19 -0
  293. data/lib/active_admin/resource/routes.rb +99 -0
  294. data/lib/active_admin/resource/scope_to.rb +74 -0
  295. data/lib/active_admin/resource/scopes.rb +50 -0
  296. data/lib/active_admin/resource/sidebars.rb +27 -0
  297. data/lib/active_admin/resource.rb +153 -0
  298. data/lib/active_admin/resource_collection.rb +42 -0
  299. data/lib/active_admin/resource_controller/action_builder.rb +21 -0
  300. data/lib/active_admin/resource_controller/data_access.rb +298 -0
  301. data/lib/active_admin/resource_controller/decorators.rb +20 -0
  302. data/lib/active_admin/resource_controller/resource_class_methods.rb +24 -0
  303. data/lib/active_admin/resource_controller/scoping.rb +31 -0
  304. data/lib/active_admin/resource_controller/sidebars.rb +18 -0
  305. data/lib/active_admin/resource_controller.rb +50 -0
  306. data/lib/active_admin/resource_dsl.rb +134 -0
  307. data/lib/active_admin/router.rb +106 -0
  308. data/lib/active_admin/scope.rb +57 -0
  309. data/lib/active_admin/sidebar_section.rb +37 -0
  310. data/lib/active_admin/version.rb +3 -0
  311. data/lib/active_admin/view_factory.rb +27 -0
  312. data/lib/active_admin/view_helpers/active_admin_application_helper.rb +12 -0
  313. data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +7 -0
  314. data/lib/active_admin/view_helpers/auto_link_helper.rb +34 -0
  315. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +26 -0
  316. data/lib/active_admin/view_helpers/display_helper.rb +49 -0
  317. data/lib/active_admin/view_helpers/download_format_links_helper.rb +49 -0
  318. data/lib/active_admin/view_helpers/fields_for.rb +50 -0
  319. data/lib/active_admin/view_helpers/flash_helper.rb +13 -0
  320. data/lib/active_admin/view_helpers/form_helper.rb +24 -0
  321. data/lib/active_admin/view_helpers/icon_helper.rb +12 -0
  322. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +93 -0
  323. data/lib/active_admin/view_helpers/sidebar_helper.rb +15 -0
  324. data/lib/active_admin/view_helpers/title_helper.rb +11 -0
  325. data/lib/active_admin/view_helpers/view_factory_helper.rb +11 -0
  326. data/lib/active_admin/view_helpers.rb +21 -0
  327. data/lib/active_admin/views/action_items.rb +17 -0
  328. data/lib/active_admin/views/components/action_list_popover.rb +29 -0
  329. data/lib/active_admin/views/components/attributes_table.rb +103 -0
  330. data/lib/active_admin/views/components/blank_slate.rb +17 -0
  331. data/lib/active_admin/views/components/columns.rb +150 -0
  332. data/lib/active_admin/views/components/dropdown_menu.rb +73 -0
  333. data/lib/active_admin/views/components/index_list.rb +68 -0
  334. data/lib/active_admin/views/components/paginated_collection.rb +125 -0
  335. data/lib/active_admin/views/components/panel.rb +34 -0
  336. data/lib/active_admin/views/components/popover.rb +27 -0
  337. data/lib/active_admin/views/components/scopes.rb +66 -0
  338. data/lib/active_admin/views/components/sidebar_section.rb +28 -0
  339. data/lib/active_admin/views/components/site_title.rb +55 -0
  340. data/lib/active_admin/views/components/status_tag.rb +56 -0
  341. data/lib/active_admin/views/components/table_for.rb +191 -0
  342. data/lib/active_admin/views/footer.rb +20 -0
  343. data/lib/active_admin/views/header.rb +32 -0
  344. data/lib/active_admin/views/index_as_block.rb +36 -0
  345. data/lib/active_admin/views/index_as_blog.rb +156 -0
  346. data/lib/active_admin/views/index_as_grid.rb +80 -0
  347. data/lib/active_admin/views/index_as_table.rb +264 -0
  348. data/lib/active_admin/views/pages/base.rb +139 -0
  349. data/lib/active_admin/views/pages/form.rb +51 -0
  350. data/lib/active_admin/views/pages/index.rb +147 -0
  351. data/lib/active_admin/views/pages/layout.rb +26 -0
  352. data/lib/active_admin/views/pages/page.rb +30 -0
  353. data/lib/active_admin/views/pages/show.rb +59 -0
  354. data/lib/active_admin/views/tabbed_navigation.rb +62 -0
  355. data/lib/active_admin/views/title_bar.rb +53 -0
  356. data/lib/active_admin/views.rb +8 -0
  357. data/lib/active_admin.rb +125 -0
  358. data/lib/activeadmin.rb +1 -0
  359. data/lib/generators/active_admin/assets/assets_generator.rb +16 -0
  360. data/lib/generators/active_admin/assets/templates/active_admin.css.scss +17 -0
  361. data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +1 -0
  362. data/lib/generators/active_admin/devise/devise_generator.rb +86 -0
  363. data/lib/generators/active_admin/install/install_generator.rb +46 -0
  364. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +235 -0
  365. data/lib/generators/active_admin/install/templates/admin_user.rb.erb +27 -0
  366. data/lib/generators/active_admin/install/templates/dashboard.rb +33 -0
  367. data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb +19 -0
  368. data/lib/generators/active_admin/resource/resource_generator.rb +16 -0
  369. data/lib/generators/active_admin/resource/templates/admin.rb +3 -0
  370. data/lib/ransack_ext.rb +12 -0
  371. data/script/local +44 -0
  372. data/script/use_rails +53 -0
  373. data/spec/integration/default_namespace_spec.rb +61 -0
  374. data/spec/integration/javascript_spec.rb +20 -0
  375. data/spec/integration/memory_spec.rb +29 -0
  376. data/spec/integration/stylesheets_spec.rb +41 -0
  377. data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +50 -0
  378. data/spec/javascripts/coffeescripts/jquery.aa.popover-spec.js.coffee +82 -0
  379. data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +34 -0
  380. data/spec/javascripts/compiled/jquery.aa.checkbox-toggler-spec.js +60 -0
  381. data/spec/javascripts/compiled/jquery.aa.popover-spec.js +106 -0
  382. data/spec/javascripts/compiled/jquery.aa.table-checkbox-toggler-spec.js +37 -0
  383. data/spec/javascripts/fixtures/checkboxes.html +9 -0
  384. data/spec/javascripts/fixtures/table_checkboxes.html +17 -0
  385. data/spec/javascripts/helpers/SpecHelper.js +3 -0
  386. data/spec/javascripts/helpers/vendor/jasmine-fixture-0.0.5.js +108 -0
  387. data/spec/javascripts/helpers/vendor/jasmine-jquery.js +288 -0
  388. data/spec/javascripts/helpers/vendor/sinon-1.2.0.js +2915 -0
  389. data/spec/javascripts/support/jasmine.yml +74 -0
  390. data/spec/javascripts/support/jasmine_config.rb +23 -0
  391. data/spec/javascripts/support/jasmine_runner.rb +32 -0
  392. data/spec/javascripts/support/jquery-ui-1.8.16.custom.min.js +34 -0
  393. data/spec/javascripts/support/jquery.min.js +4 -0
  394. data/spec/spec_helper.rb +175 -0
  395. data/spec/spec_helper_without_rails.rb +16 -0
  396. data/spec/support/deferred_garbage_collection.rb +19 -0
  397. data/spec/support/detect_rails_version.rb +42 -0
  398. data/spec/support/integration_example_group.rb +31 -0
  399. data/spec/support/jslint.yml +80 -0
  400. data/spec/support/rails_template.rb +111 -0
  401. data/spec/support/rails_template_with_data.rb +59 -0
  402. data/spec/support/templates/admin/stores.rb +11 -0
  403. data/spec/support/templates/cucumber.rb +24 -0
  404. data/spec/support/templates/cucumber_with_reloading.rb +5 -0
  405. data/spec/support/templates/en.yml +8 -0
  406. data/spec/support/templates/post_decorator.rb +53 -0
  407. data/spec/unit/abstract_view_factory_spec.rb +79 -0
  408. data/spec/unit/action_builder_spec.rb +126 -0
  409. data/spec/unit/active_admin_spec.rb +11 -0
  410. data/spec/unit/application_spec.rb +141 -0
  411. data/spec/unit/asset_registration_spec.rb +52 -0
  412. data/spec/unit/authorization/authorization_adapter_spec.rb +61 -0
  413. data/spec/unit/authorization/controller_authorization_spec.rb +39 -0
  414. data/spec/unit/auto_link_spec.rb +32 -0
  415. data/spec/unit/batch_actions/resource_spec.rb +91 -0
  416. data/spec/unit/batch_actions/settings_spec.rb +61 -0
  417. data/spec/unit/belongs_to_spec.rb +42 -0
  418. data/spec/unit/cancan_adapter_spec.rb +43 -0
  419. data/spec/unit/comments_spec.rb +106 -0
  420. data/spec/unit/component_spec.rb +18 -0
  421. data/spec/unit/config_shared_examples.rb +59 -0
  422. data/spec/unit/controller_filters_spec.rb +32 -0
  423. data/spec/unit/csv_builder_spec.rb +103 -0
  424. data/spec/unit/devise_spec.rb +116 -0
  425. data/spec/unit/dsl_spec.rb +61 -0
  426. data/spec/unit/event_spec.rb +47 -0
  427. data/spec/unit/filters/filter_form_builder_spec.rb +423 -0
  428. data/spec/unit/filters/resource_spec.rb +119 -0
  429. data/spec/unit/form_builder_spec.rb +514 -0
  430. data/spec/unit/generators/install_spec.rb +23 -0
  431. data/spec/unit/helpers/collection_spec.rb +65 -0
  432. data/spec/unit/helpers/scope_chain_spec.rb +36 -0
  433. data/spec/unit/helpers/settings_spec.rb +30 -0
  434. data/spec/unit/menu_collection_spec.rb +62 -0
  435. data/spec/unit/menu_item_spec.rb +143 -0
  436. data/spec/unit/menu_spec.rb +71 -0
  437. data/spec/unit/namespace/authorization_spec.rb +27 -0
  438. data/spec/unit/namespace/register_page_spec.rb +74 -0
  439. data/spec/unit/namespace/register_resource_spec.rb +163 -0
  440. data/spec/unit/namespace_spec.rb +103 -0
  441. data/spec/unit/page_controller_spec.rb +5 -0
  442. data/spec/unit/page_spec.rb +72 -0
  443. data/spec/unit/pretty_format_spec.rb +35 -0
  444. data/spec/unit/resource/action_items_spec.rb +62 -0
  445. data/spec/unit/resource/menu_spec.rb +18 -0
  446. data/spec/unit/resource/naming_spec.rb +122 -0
  447. data/spec/unit/resource/page_presenters_spec.rb +44 -0
  448. data/spec/unit/resource/pagination_spec.rb +38 -0
  449. data/spec/unit/resource/routes_spec.rb +73 -0
  450. data/spec/unit/resource/scopes_spec.rb +43 -0
  451. data/spec/unit/resource/sidebars_spec.rb +43 -0
  452. data/spec/unit/resource_collection_spec.rb +160 -0
  453. data/spec/unit/resource_controller/data_access_spec.rb +73 -0
  454. data/spec/unit/resource_controller/sidebars_spec.rb +46 -0
  455. data/spec/unit/resource_controller_spec.rb +265 -0
  456. data/spec/unit/resource_registration_spec.rb +56 -0
  457. data/spec/unit/resource_spec.rb +243 -0
  458. data/spec/unit/routing_spec.rb +172 -0
  459. data/spec/unit/scope_spec.rb +108 -0
  460. data/spec/unit/settings_spec.rb +88 -0
  461. data/spec/unit/view_factory_spec.rb +21 -0
  462. data/spec/unit/view_helpers/breadcrumbs_spec.rb +149 -0
  463. data/spec/unit/view_helpers/display_name_spec.rb +41 -0
  464. data/spec/unit/view_helpers/download_format_links_helper_spec.rb +39 -0
  465. data/spec/unit/view_helpers/fields_for_spec.rb +50 -0
  466. data/spec/unit/view_helpers/form_helper_spec.rb +56 -0
  467. data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +101 -0
  468. data/spec/unit/views/components/action_list_popover_spec.rb +30 -0
  469. data/spec/unit/views/components/attributes_table_spec.rb +230 -0
  470. data/spec/unit/views/components/batch_action_popover_spec.rb +33 -0
  471. data/spec/unit/views/components/blank_slate_spec.rb +17 -0
  472. data/spec/unit/views/components/columns_spec.rb +142 -0
  473. data/spec/unit/views/components/index_list_spec.rb +32 -0
  474. data/spec/unit/views/components/paginated_collection_spec.rb +227 -0
  475. data/spec/unit/views/components/panel_spec.rb +51 -0
  476. data/spec/unit/views/components/popover_spec.rb +33 -0
  477. data/spec/unit/views/components/sidebar_section_spec.rb +37 -0
  478. data/spec/unit/views/components/site_title_spec.rb +78 -0
  479. data/spec/unit/views/components/status_tag_spec.rb +95 -0
  480. data/spec/unit/views/components/table_for_spec.rb +201 -0
  481. data/spec/unit/views/pages/form_spec.rb +35 -0
  482. data/spec/unit/views/pages/layout_spec.rb +63 -0
  483. data/spec/unit/views/pages/show_spec.rb +20 -0
  484. data/spec/unit/views/tabbed_navigation_spec.rb +149 -0
  485. data/tasks/docs.rake +37 -0
  486. data/tasks/js.rake +32 -0
  487. data/tasks/parallel_tests.rake +60 -0
  488. data/tasks/test.rake +79 -0
  489. data/tasks/yard.rake +7 -0
  490. metadata +896 -0
@@ -0,0 +1,227 @@
1
+ # Authorization Adapter
2
+
3
+ Active Admin offers the ability to define and use your own authorization
4
+ adapter. If implemented, the '#authorized?' will be called when an action is
5
+ taken. By default, '#authorized?' returns true.
6
+
7
+
8
+ ## Setting up your own AuthorizationAdapter
9
+
10
+ Setting up your own `AuthorizationAdapter` is easy! The following example shows
11
+ how to set up and tie your authorization adapter class to Active Admin:
12
+
13
+ # app/models/only_authors_authorization.rb
14
+ class OnlyAuthorsAuthorization < ActiveAdmin::AuthorizationAdapter
15
+
16
+ def authorized?(action, subject = nil)
17
+ case subject
18
+ when normalized(Post)
19
+
20
+ # Only let the author update and delete posts
21
+ if action == :update || action == :destroy
22
+ subject.author == user
23
+
24
+ # If it's not an update or destroy, anyone can view it
25
+ else
26
+ true
27
+ end
28
+
29
+ else
30
+ true
31
+ end
32
+ end
33
+
34
+ end
35
+
36
+ In order to hook up `OnlyAuthorsAuthorization` to Active Admin, go to your
37
+ application's `config/initializers/active_admin.rb` and add/modify the line:
38
+
39
+ config.authorization_adapter = "OnlyAuthorsAuthorization"
40
+
41
+ Authorization adapters can be configured per ActiveAdmin namespace as well, for example:
42
+
43
+ ActiveAdmin.setup do |config|
44
+ config.namespace :admin do |ns|
45
+ ns.authorization_adapter = "AdminAuthorization"
46
+ end
47
+ config.namespace :my do |ns|
48
+ ns.authorization_adapter = "DashboardAuthorization"
49
+ end
50
+ end
51
+
52
+ Now, whenever a controller action is performed, the `OnlyAuthorsAuthorization`'s
53
+ `#authorized?` method will be called.
54
+
55
+
56
+ ## Getting Access to the Current User
57
+
58
+ From within your authorization adapter, you can call the `#user` method to
59
+ retrieve the current user.
60
+
61
+ class OnlyAdmins < ActiveAdmin::AuthorizationAdapter
62
+
63
+ def authorized?(action, subject = nil)
64
+ user.admin?
65
+ end
66
+
67
+ end
68
+
69
+
70
+ ## Scoping Collections in Authorization Adapters
71
+
72
+ `ActiveAdmin::AuthorizationAdapter` also provides a hook method (`#scope_collection`)
73
+ for the adapter to scope the resource's collection. For example, you may want to
74
+ centralize the scoping:
75
+
76
+ class OnlyMyAccount < ActiveAdmin::AuthorizationAdapter
77
+
78
+ def authorized?(action, subject = nil)
79
+ subject.account == user.account
80
+ end
81
+
82
+ def scope_collection(collection)
83
+ collection.where(:account_id => user.account_id)
84
+ end
85
+
86
+ end
87
+
88
+ All collections presented on Index Screens will be passed through this method
89
+ and will be scoped accordingly.
90
+
91
+
92
+ ## Managing Access to Pages
93
+
94
+ Pages, just like resources, get authorized also. When authorization a page, the
95
+ subject will be an instance of `ActiveAdmin::Page`.
96
+
97
+ class OnlyDashboard < ActiveAdmin::AuthorizationAdapter
98
+ def authorized?(action, subject = nil)
99
+ case subject
100
+ when ActiveAdmin::Page
101
+ if action == :read && subject.name == "Dashboard"
102
+ true
103
+ else
104
+ false
105
+ end
106
+ else
107
+ false
108
+ end
109
+ end
110
+ end
111
+
112
+
113
+ ## Action Types
114
+
115
+ By default Active Admin simplifies the controller actions into 4 actions:
116
+
117
+ * `:read` - This controls if the user can view the menu item as well as the
118
+ index and show screens.
119
+ * `:create` - This controls if the user can view the new screen and submit
120
+ the form to the create action.
121
+ * `:update` - This controls if the user can view the edit screen and submit
122
+ the form to the update action.
123
+ * `:destroy` - This controls if the user can delete a resource.
124
+
125
+ Each of these actions is available as a constant. Eg: `:read` is available as
126
+ `ActiveAdmin::Authorization::READ`.
127
+
128
+
129
+ ## Checking for Authorization in Controllers and Views
130
+
131
+ Active Admin provides a helper method to check if the current user is
132
+ authorized to perform an action on a subject.
133
+
134
+ Simply use the `#authorized?(action, subject) method to check.
135
+
136
+ ActiveAdmin.register Post do
137
+
138
+ index do
139
+ column :title
140
+ column "" do |post|
141
+ if authorized?(:update, post)
142
+ link_to("Edit", admin_post_path(post))
143
+ end
144
+ end
145
+
146
+ end
147
+
148
+ end
149
+
150
+ If you are implementing a custom controller action, you can use the
151
+ `#authorize!` method to raise an `ActiveAdmin::AccessDenied` exception.
152
+
153
+ ActiveAdmin.register Post do
154
+
155
+ member_action :publish, :method => :post do
156
+ post = Post.find(params[:id])
157
+
158
+ authorize! :publish, post
159
+ post.publish!
160
+
161
+ flash[:notice] = "Post has been published"
162
+ redirect_to [:admin, post]
163
+ end
164
+
165
+ action_item :only => :show do
166
+ if !post.published? && authorized?(:publish, post)
167
+ link_to("Publish", publish_admin_post_path(post), :method => :post)
168
+ end
169
+ end
170
+
171
+ end
172
+
173
+
174
+ ## Using the CanCan Adapter
175
+
176
+ Sub-classing `ActiveAdmin::AuthorizationAdapter` is fairly low level. Many times
177
+ it's nicer to have a simpler DSL for managing authorization. Active Admin
178
+ provides an adapter out of the box for [CanCan](https://github.com/ryanb/cancan).
179
+
180
+ To use the CanCan adapter, simply update the configuration in the Active Admin
181
+ initializer:
182
+
183
+ config.authorization_adapter = ActiveAdmin::CanCanAdapter
184
+
185
+ You can also specify a method to be called on unauthorized access. This is necessary
186
+ in order to prevent a redirect loop that can happen if a user tries to access a page
187
+ they don't have permissions for (see [#2081](https://github.com/gregbell/active_admin/issues/2081)).
188
+ ```ruby
189
+ config.on_unauthorized_access = :access_denied
190
+ ```
191
+ The method `access_denied` would be defined in `application_controller.rb`. Here is one
192
+ example that redirects the user from the page they don't have permission to
193
+ access to a resource they have permission to access (organizations in this case), and
194
+ also displays the error message in the browser:
195
+
196
+ ```ruby
197
+ class ApplicationController < ActionController::Base
198
+ protect_from_forgery
199
+
200
+ def access_denied(exception)
201
+ redirect_to admin_organizations_path, :alert => exception.message
202
+ end
203
+ end
204
+ ```
205
+
206
+ By default this will use the ability class named "Ability". This can also be
207
+ changed from the initializer:
208
+
209
+ config.cancan_ability_class = "MyCustomAbility"
210
+
211
+ Now you can simply use CanCan the way that you would expect and Active Admin
212
+ will use it for authorization:
213
+
214
+ # app/models/ability.rb
215
+ class Ability
216
+ include CanCan::Ability
217
+
218
+ def initialize(user)
219
+ can :manage, Post
220
+ can :read, User
221
+ can :manage, User, :id => user.id
222
+ can :read, ActiveAdmin::Page, :name => "Dashboard"
223
+ end
224
+
225
+ end
226
+
227
+ To view more details about the CanCan API, visit [https://github.com/ryanb/cancan](https://github.com/ryanb/cancan).
@@ -0,0 +1,340 @@
1
+ # Working with Resources
2
+
3
+ Every Active Admin resource corresponds to a Rails model. So before creating a
4
+ resource you must first create a Rails model for it.
5
+
6
+ ## Create a Resource
7
+
8
+ The basic command for creating a resource is `rails g active_admin:resource Post`.
9
+ The generator will produce an empty `app/admin/post.rb` file like so:
10
+
11
+ ```ruby
12
+ ActiveAdmin.register Post do
13
+ # everything happens here :D
14
+ end
15
+ ```
16
+
17
+ ## Setting up Strong Parameters
18
+
19
+ Rails 4 replaces `attr_accessible` with [Strong Parameters](https://github.com/rails/strong_parameters),
20
+ which moves attribute whitelisting from the model to the controller. There are
21
+ talks ([#2594](https://github.com/gregbell/active_admin/issues/2594)) on providing a
22
+ cleaner DSL, but for now you do so like this:
23
+
24
+ ```ruby
25
+ ActiveAdmin.register Post do
26
+ controller do
27
+ def permitted_params
28
+ params.permit post: [:title, :content, :author]
29
+ end
30
+ end
31
+ end
32
+ ```
33
+
34
+ ## Disabling Actions on a Resource
35
+
36
+ All CRUD actions are enabled by default. These can be disabled for a given resource:
37
+
38
+ ```ruby
39
+ ActiveAdmin.register Post do
40
+ actions :all, except: [:update, :destroy]
41
+ end
42
+ ```
43
+
44
+ ## Rename the Resource
45
+
46
+ By default, any references to the resource (menu, routes, buttons, etc) in the
47
+ interface will use the name of the class. You can rename the resource by using
48
+ the `:as` option.
49
+
50
+ ```ruby
51
+ ActiveAdmin.register Post, as: "Article"
52
+ ```
53
+
54
+ The resource will then be available at `/admin/articles`.
55
+
56
+ This will also change the key of the resource params passed to the controller.
57
+ In Rails 4, the `permitted_params` key will need to be changed from `:post` to `:article`.
58
+
59
+ ## Customize the Namespace
60
+
61
+ We use the `admin` namespace by default, but you can use anything:
62
+
63
+ ```ruby
64
+ # Available at /today/posts
65
+ ActiveAdmin.register Post, namespace: :today
66
+
67
+ # Available at /posts
68
+ ActiveAdmin.register Post, namespace: false
69
+ ```
70
+
71
+ ## Customize the Menu
72
+
73
+ The resource will be displayed in the global navigation by default. To disable
74
+ the resource from being displayed in the global navigation:
75
+
76
+ ```ruby
77
+ ActiveAdmin.register Post do
78
+ menu false
79
+ end
80
+ ```
81
+
82
+ The menu method accepts a hash with the following options:
83
+
84
+ * `:label` - The string or proc label to display in the menu. If it's a proc, it
85
+ will be called each time the menu is rendered.
86
+ * `:parent` - The string id (or label) of the parent used for this menu
87
+ * `:if` - A block or a symbol of a method to call to decide if the menu item
88
+ should be displayed
89
+ * `:priority` - The integer value of the priority, which defaults to `10`
90
+
91
+ ### Labels
92
+
93
+ To change the name of the label in the menu:
94
+
95
+ ```ruby
96
+ ActiveAdmin.register Post do
97
+ menu label: "My Posts"
98
+ end
99
+ ```
100
+
101
+ If you want something more dynamic, pass a proc instead:
102
+
103
+ ```ruby
104
+ ActiveAdmin.register Post do
105
+ menu label: proc{ I18n.t "mypost" }
106
+ end
107
+ ```
108
+
109
+ ### Menu Priority
110
+
111
+ Menu items are sorted first by their numeric priority, then alphabetically. Since
112
+ every menu by default has a priority of `10`, the menu is normally alphabetical.
113
+
114
+ You can easily customize this:
115
+
116
+ ```ruby
117
+ ActiveAdmin.register Post do
118
+ menu priority: 1 # so it's on the very left
119
+ end
120
+ ```
121
+
122
+ ### Conditionally Showing / Hiding Menu Items
123
+
124
+ Menu items can be shown or hidden at runtime using the `:if` option.
125
+ ```ruby
126
+ ActiveAdmin.register Post do
127
+ menu if: proc{ current_user.can_edit_posts? }
128
+ end
129
+ ```
130
+
131
+ The proc will be called in the context of the view, so you have access to all
132
+ your helpers and current user session information.
133
+
134
+ ### Drop Down Menus
135
+
136
+ In many cases, a single level navigation will not be enough to manage a large
137
+ application. In that case, you can group your menu items under a parent menu item.
138
+
139
+ ```ruby
140
+ ActiveAdmin.register Post do
141
+ menu parent: "Blog"
142
+ end
143
+ ```
144
+
145
+ Note that the "Blog" parent menu item doesn't even have to exist yet; it can be
146
+ dynamically generated for you.
147
+
148
+ ### Customizing Parent Menu Items
149
+
150
+ All of the options given to a standard menu item are also available to
151
+ parent menu items. In the case of complex parent menu items, you should
152
+ configure them in the Active Admin initializer.
153
+
154
+ ```ruby
155
+ # config/initializers/active_admin.rb
156
+ config.namespace :admin do |admin|
157
+ admin.build_menu do |menu|
158
+ menu.add label: 'Blog', priority: 0
159
+ end
160
+ end
161
+
162
+ # app/admin/post.rb
163
+ ActiveAdmin.register Post do
164
+ menu parent: 'Blog'
165
+ end
166
+ ```
167
+
168
+ ### Dynamic Parent Menu Items
169
+
170
+ While the above works fine, what if you want a parent menu item with a dynamic
171
+ name? Well, you have to refer to it by its `:id`.
172
+
173
+ ```ruby
174
+ # config/initializers/active_admin.rb
175
+ config.namespace :admin do |admin
176
+ admin.build_menu do |menu|
177
+ menu.add id: 'blog', label: proc{"Something dynamic"}, priority: 0
178
+ end
179
+ end
180
+
181
+ # app/admin/post.rb
182
+ ActiveAdmin.register Post do
183
+ menu parent: 'blog'
184
+ end
185
+ ```
186
+
187
+ ### Adding Custom Menu Items
188
+
189
+ Sometimes it's not enough to just customize the menu label. In this case, you
190
+ can customize the menu for the namespace within the Active Admin initializer.
191
+
192
+ ```ruby
193
+ # config/initializers/active_admin.rb
194
+ config.namespace :admin do |admin|
195
+ admin.build_menu do |menu|
196
+ menu.add label: "The Application", url: "/", priority: 0
197
+
198
+ menu.add label: "Sites" do |sites|
199
+ sites.add label: "Google", url: "http://google.com", html_options: { target: :blank }
200
+ sites.add label: "Facebook", url: "http://facebook.com"
201
+ sites.add label: "Github", url: "http://github.com"
202
+ end
203
+ end
204
+ end
205
+ ```
206
+
207
+ This will be registered on application start before your resources are loaded.
208
+
209
+ ## Scoping the queries
210
+
211
+ If your administrators have different access levels, you may sometimes want to
212
+ scope what they have access to. Assuming your User model has the proper
213
+ has_many relationships, you can simply scope the listings and finders like so:
214
+
215
+ ```ruby
216
+ ActiveAdmin.register Post do
217
+ scope_to :current_user # limits the accessible posts to `current_user.posts`
218
+
219
+ # Or if the association doesn't have the default name:
220
+ scope_to :current_user, association_method: :blog_posts
221
+
222
+ # Finally, you can pass a block to be called:
223
+ scope_to do
224
+ User.most_popular_posts
225
+ end
226
+ end
227
+ ```
228
+
229
+ You can also conditionally apply the scope:
230
+
231
+ ```ruby
232
+ ActiveAdmin.register Post do
233
+ scope_to :current_user, if: proc{ current_user.limited_access? }
234
+ scope_to :current_user, unless: proc{ current_user.admin? }
235
+ end
236
+ ```
237
+
238
+ ## Customizing resource retrieval
239
+
240
+ A common way to increase page performance is to elimate N+1 queries by eager loading associations:
241
+
242
+ ```ruby
243
+ ActiveAdmin.register Post do
244
+ controller do
245
+ def scoped_collection
246
+ super.includes :author, :categories
247
+ end
248
+ end
249
+ end
250
+ ```
251
+
252
+ If you need to completely replace the record retrieving code (e.g., you have a custom
253
+ `to_param` implementation in your models), override the `resource` method on the controller:
254
+
255
+ ```ruby
256
+ ActiveAdmin.register Post do
257
+ controller do
258
+ def resource
259
+ Post.where(id: params[:id]).first!
260
+ end
261
+ end
262
+ end
263
+ ```
264
+
265
+ Our controllers are built on [Inherited Resources](https://github.com/josevalim/inherited_resources),
266
+ so you can use [all of its features](https://github.com/josevalim/inherited_resources#overwriting-defaults).
267
+
268
+ ## Belongs To
269
+
270
+ It's common to want to scope a series of resources to a relationship. For
271
+ example a Project may have many Milestones and Tickets. To nest the resource
272
+ within another, you can use the `belongs_to` method:
273
+
274
+ ```ruby
275
+ ActiveAdmin.register Project
276
+ ActiveAdmin.register Ticket do
277
+ belongs_to :project
278
+ end
279
+ ```
280
+
281
+ Projects will be available as usual and tickets will be availble by visiting
282
+ `/admin/projects/1/tickets` assuming that a Project with the id of 1 exists.
283
+ Active Admin does not add "Tickets" to the global navigation because the routes
284
+ can only be generated when there is a project id.
285
+
286
+ To create links to the resource, you can add them to a sidebar (one of the many
287
+ possibilities for how you may with to handle your user interface):
288
+
289
+ ```ruby
290
+ ActiveAdmin.register Project do
291
+
292
+ sidebar "Project Details", only: [:show, :edit] do
293
+ ul do
294
+ li link_to "Tickets", admin_project_tickets_path(project)
295
+ li link_to "Milestones", admin_project_milestones_path(project)
296
+ end
297
+ end
298
+ end
299
+
300
+ ActiveAdmin.register Ticket do
301
+ belongs_to :project
302
+ end
303
+
304
+ ActiveAdmin.register Milestone do
305
+ belongs_to :project
306
+ end
307
+ ```
308
+
309
+ In some cases (like Projects), there are many sub resources and you would
310
+ actually like the global navigation to switch when the user navigates "into" a
311
+ project. To accomplish this, Active Admin stores the `belongs_to` resources in a
312
+ seperate menu which you can use if you so wish. To use:
313
+
314
+ ```ruby
315
+ ActiveAdmin.register Ticket do
316
+ belongs_to :project
317
+ navigation_menu :project
318
+ end
319
+
320
+ ActiveAdmin.register Milestone do
321
+ belongs_to :project
322
+ navigation_menu :project
323
+ end
324
+ ```
325
+
326
+ Now, when you navigate to the tickets section, the global navigation will
327
+ only display "Tickets" and "Milestones". When you navigate back to a
328
+ non-belongs_to resource, it will switch back to the default menu.
329
+
330
+ You can also defer the menu lookup until runtime so that you can dynamically show
331
+ different menus, say perhaps based on user permissions. For example:
332
+
333
+ ```ruby
334
+ ActiveAdmin.register Ticket do
335
+ belongs_to: :project
336
+ navigation_menu do
337
+ authorized?(:manage, SomeResource) ? :project : :restricted_menu
338
+ end
339
+ end
340
+ ```
@@ -0,0 +1,29 @@
1
+ # Create an Index
2
+
3
+ If the supplied Active Admin index components are insufficient for your project
4
+ feel free to define your own. Index classes extend ActiveAdmin::Component and
5
+ require a build method and an index_name class method.
6
+
7
+ module ActiveAdmin
8
+ module Views
9
+ class IndexAsMyIdea < ActiveAdmin::Component
10
+
11
+ def build(page_presenter, collection)
12
+ ...
13
+ end
14
+
15
+ def self.index_name
16
+ "my_idea"
17
+ end
18
+
19
+ end
20
+ end
21
+ end
22
+
23
+ The build method takes a PagePresenter object and collection of whatever you
24
+ choose.
25
+
26
+ The index_name class method takes no arguments and returns a string that should
27
+ be representative of the the class name. If this method is not defined, your
28
+ index component will not be able take advantage of Active Admin's
29
+ *multiple index pages* feature.
@@ -0,0 +1,21 @@
1
+ <!--
2
+ WARNING: Please DO NOT edit this file! Update
3
+ source documentation in lib/active_admin/views
4
+ and execute rake yard to regenerate it.
5
+ -->
6
+
7
+ # Index as a Block
8
+
9
+ If you want to fully customize the display of your resources on the index
10
+ screen, Index as a Block allows you to render a block of content for each
11
+ resource.
12
+
13
+ ```ruby
14
+ index as: :block do |product|
15
+ div for: product do
16
+ resource_selection_cell product
17
+ h2 auto_link product.title
18
+ div simple_format product.description
19
+ end
20
+ end
21
+ ```
@@ -0,0 +1,71 @@
1
+ <!--
2
+ WARNING: Please DO NOT edit this file! Update
3
+ source documentation in lib/active_admin/views
4
+ and execute rake yard to regenerate it.
5
+ -->
6
+
7
+ # Index as Blog
8
+
9
+ Render your index page as a set of posts. The post has two main options:
10
+ title and body.
11
+
12
+ ```ruby
13
+ index as: :blog do
14
+ title :my_title # Calls #my_title on each resource
15
+ body :my_body # Calls #my_body on each resource
16
+ end
17
+ ```
18
+
19
+ ## Post Title
20
+
21
+ The title is the content that will be rendered within a link to the
22
+ resource. There are two main ways to set the content for the title
23
+
24
+ First, you can pass in a method to be called on your resource. For example:
25
+
26
+ ```ruby
27
+ index as: :blog do
28
+ title :a_method_to_call
29
+ end
30
+ ```
31
+
32
+ Second, you can pass a block to the tile option which will then be
33
+ used as the contents fo the title. The resource being rendered
34
+ is passed in to the block. For Example:
35
+
36
+ ```ruby
37
+ index as: :blog do
38
+ title do |post|
39
+ span post.title, class: 'title'
40
+ span post.created_at, class: 'created_at'
41
+ end
42
+ end
43
+ ```
44
+
45
+ ## Post Body
46
+
47
+ The body is rendered underneath the title of each post. The same two
48
+ style of options work as the Post Title above.
49
+
50
+ Call a method on the resource as the body:
51
+
52
+ ```ruby
53
+ index as: :blog do
54
+ title :my_title
55
+ body :my_body
56
+ end
57
+ ```
58
+
59
+ Or, render a block as the body:
60
+
61
+ ```ruby
62
+ index as: :blog do
63
+ title :my_title
64
+ body do |post|
65
+ div truncate post.title
66
+ div class: 'meta' do
67
+ span "Post in #{post.categories.join(', ')}"
68
+ end
69
+ end
70
+ end
71
+ ```