aa-rails4 0.6.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 (487) hide show
  1. checksums.yaml +7 -0
  2. data/.document +5 -0
  3. data/.gitignore +43 -0
  4. data/.travis.yml +8 -0
  5. data/.yardopts +7 -0
  6. data/CHANGELOG.md +894 -0
  7. data/CONTRIBUTING.md +121 -0
  8. data/Gemfile +40 -0
  9. data/Guardfile +7 -0
  10. data/LICENSE +25 -0
  11. data/README.rdoc +118 -0
  12. data/Rakefile +26 -0
  13. data/activeadmin.gemspec +33 -0
  14. data/app/assets/images/active_admin/admin_notes_icon.png +0 -0
  15. data/app/assets/images/active_admin/datepicker/datepicker-header-bg.png +0 -0
  16. data/app/assets/images/active_admin/datepicker/datepicker-input-icon.png +0 -0
  17. data/app/assets/images/active_admin/datepicker/datepicker-next-link-icon.png +0 -0
  18. data/app/assets/images/active_admin/datepicker/datepicker-nipple.png +0 -0
  19. data/app/assets/images/active_admin/datepicker/datepicker-prev-link-icon.png +0 -0
  20. data/app/assets/images/active_admin/index_list_icons/block_icon.svg +10 -0
  21. data/app/assets/images/active_admin/index_list_icons/blog_icon.svg +4 -0
  22. data/app/assets/images/active_admin/index_list_icons/grid_icon.svg +13 -0
  23. data/app/assets/images/active_admin/index_list_icons/table_icon.svg +3 -0
  24. data/app/assets/images/active_admin/loading.gif +0 -0
  25. data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
  26. data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
  27. data/app/assets/images/active_admin/orderable.png +0 -0
  28. data/app/assets/javascripts/active_admin/application.js +3 -0
  29. data/app/assets/javascripts/active_admin/base.js +5 -0
  30. data/app/assets/javascripts/active_admin/components/jquery.aa.checkbox-toggler.js.coffee +37 -0
  31. data/app/assets/javascripts/active_admin/components/jquery.aa.dropdown-menu.js.coffee +105 -0
  32. data/app/assets/javascripts/active_admin/components/jquery.aa.popover.js.coffee +97 -0
  33. data/app/assets/javascripts/active_admin/components/jquery.aa.table-checkbox-toggler.js.coffee +25 -0
  34. data/app/assets/javascripts/active_admin/lib/namespace.js.coffee +3 -0
  35. data/app/assets/javascripts/active_admin/pages/application.js.coffee +21 -0
  36. data/app/assets/javascripts/active_admin/pages/batch_actions.js.coffee +26 -0
  37. data/app/assets/stylesheets/active_admin/_base.css.scss +41 -0
  38. data/app/assets/stylesheets/active_admin/_forms.css.scss +281 -0
  39. data/app/assets/stylesheets/active_admin/_header.css.scss +152 -0
  40. data/app/assets/stylesheets/active_admin/_mixins.css.scss +1 -0
  41. data/app/assets/stylesheets/active_admin/_typography.css.scss +100 -0
  42. data/app/assets/stylesheets/active_admin/components/_batch_actions.css.scss +11 -0
  43. data/app/assets/stylesheets/active_admin/components/_blank_slates.scss +31 -0
  44. data/app/assets/stylesheets/active_admin/components/_breadcrumbs.scss +20 -0
  45. data/app/assets/stylesheets/active_admin/components/_buttons.scss +11 -0
  46. data/app/assets/stylesheets/active_admin/components/_columns.scss +3 -0
  47. data/app/assets/stylesheets/active_admin/components/_comments.css.scss +41 -0
  48. data/app/assets/stylesheets/active_admin/components/_date_picker.css.scss +123 -0
  49. data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +151 -0
  50. data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +39 -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/_pagination.scss +34 -0
  55. data/app/assets/stylesheets/active_admin/components/_panels.scss +6 -0
  56. data/app/assets/stylesheets/active_admin/components/_popovers.css.scss +123 -0
  57. data/app/assets/stylesheets/active_admin/components/_scopes.scss +10 -0
  58. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +12 -0
  59. data/app/assets/stylesheets/active_admin/components/_table_tools.css.scss +95 -0
  60. data/app/assets/stylesheets/active_admin/components/_tables.css.scss +108 -0
  61. data/app/assets/stylesheets/active_admin/mixins/_all.css.scss +11 -0
  62. data/app/assets/stylesheets/active_admin/mixins/_buttons.css.scss +66 -0
  63. data/app/assets/stylesheets/active_admin/mixins/_gradients.css.scss +38 -0
  64. data/app/assets/stylesheets/active_admin/mixins/_icons.css.scss +21 -0
  65. data/app/assets/stylesheets/active_admin/mixins/_reset.css.scss +165 -0
  66. data/app/assets/stylesheets/active_admin/mixins/_rounded.css.scss +43 -0
  67. data/app/assets/stylesheets/active_admin/mixins/_sections.css.scss +36 -0
  68. data/app/assets/stylesheets/active_admin/mixins/_shadows.css.scss +22 -0
  69. data/app/assets/stylesheets/active_admin/mixins/_typography.scss +3 -0
  70. data/app/assets/stylesheets/active_admin/mixins/_utilities.scss +26 -0
  71. data/app/assets/stylesheets/active_admin/mixins/_variables.css.scss +24 -0
  72. data/app/assets/stylesheets/active_admin/pages/_logged_out.scss +44 -0
  73. data/app/assets/stylesheets/active_admin/print.css.scss +284 -0
  74. data/app/assets/stylesheets/active_admin/structure/_footer.scss +14 -0
  75. data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +26 -0
  76. data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +44 -0
  77. data/app/views/active_admin/dashboard/index.html.arb +1 -0
  78. data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +8 -0
  79. data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +7 -0
  80. data/app/views/active_admin/devise/passwords/edit.html.erb +19 -0
  81. data/app/views/active_admin/devise/passwords/new.html.erb +14 -0
  82. data/app/views/active_admin/devise/sessions/new.html.erb +18 -0
  83. data/app/views/active_admin/devise/shared/_links.erb +27 -0
  84. data/app/views/active_admin/devise/unlocks/new.html.erb +14 -0
  85. data/app/views/active_admin/page/index.html.arb +1 -0
  86. data/app/views/active_admin/resource/edit.html.arb +1 -0
  87. data/app/views/active_admin/resource/index.csv.erb +17 -0
  88. data/app/views/active_admin/resource/index.html.arb +1 -0
  89. data/app/views/active_admin/resource/new.html.arb +1 -0
  90. data/app/views/active_admin/resource/show.html.arb +1 -0
  91. data/app/views/layouts/active_admin.html.arb +1 -0
  92. data/app/views/layouts/active_admin_logged_out.html.erb +37 -0
  93. data/config/locales/bg.yml +101 -0
  94. data/config/locales/ca.yml +98 -0
  95. data/config/locales/cs.yml +92 -0
  96. data/config/locales/da.yml +102 -0
  97. data/config/locales/de-CH.yml +117 -0
  98. data/config/locales/de.yml +119 -0
  99. data/config/locales/en-GB.yml +90 -0
  100. data/config/locales/en.yml +101 -0
  101. data/config/locales/es.yml +106 -0
  102. data/config/locales/es_MX.yml +104 -0
  103. data/config/locales/fr.yml +89 -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 +87 -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 +89 -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 +56 -0
  127. data/docs/1-general-configuration.md +129 -0
  128. data/docs/10-custom-pages.md +96 -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 +206 -0
  132. data/docs/2-resource-customization.md +292 -0
  133. data/docs/3-index-pages.md +191 -0
  134. data/docs/3-index-pages/create-an-index.md +29 -0
  135. data/docs/3-index-pages/index-as-block.md +16 -0
  136. data/docs/3-index-pages/index-as-blog.md +61 -0
  137. data/docs/3-index-pages/index-as-grid.md +21 -0
  138. data/docs/3-index-pages/index-as-table.md +120 -0
  139. data/docs/4-csv-format.md +32 -0
  140. data/docs/5-forms.md +72 -0
  141. data/docs/6-show-pages.md +43 -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 +161 -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 +128 -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 +94 -0
  162. data/features/index/format_as_csv.feature +117 -0
  163. data/features/index/formats.feature +39 -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 +93 -0
  195. data/features/step_definitions/dashboard_steps.rb +15 -0
  196. data/features/step_definitions/factory_steps.rb +33 -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 +46 -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/tab_steps.rb +3 -0
  210. data/features/step_definitions/table_steps.rb +119 -0
  211. data/features/step_definitions/user_steps.rb +39 -0
  212. data/features/step_definitions/web_steps.rb +82 -0
  213. data/features/sti_resource.feature +73 -0
  214. data/features/support/env.rb +118 -0
  215. data/features/support/paths.rb +63 -0
  216. data/features/support/selectors.rb +45 -0
  217. data/features/users/logging_in.feature +34 -0
  218. data/features/users/logging_out.feature +13 -0
  219. data/features/users/resetting_password.feature +34 -0
  220. data/lib/active_admin.rb +120 -0
  221. data/lib/active_admin/abstract_view_factory.rb +95 -0
  222. data/lib/active_admin/application.rb +245 -0
  223. data/lib/active_admin/asset_registration.rb +29 -0
  224. data/lib/active_admin/authorization_adapter.rb +132 -0
  225. data/lib/active_admin/base_controller.rb +78 -0
  226. data/lib/active_admin/base_controller/authorization.rb +153 -0
  227. data/lib/active_admin/base_controller/menu.rb +34 -0
  228. data/lib/active_admin/batch_actions.rb +17 -0
  229. data/lib/active_admin/batch_actions/controller.rb +25 -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/callbacks.rb +87 -0
  236. data/lib/active_admin/cancan_adapter.rb +40 -0
  237. data/lib/active_admin/comments.rb +83 -0
  238. data/lib/active_admin/comments/comment.rb +49 -0
  239. data/lib/active_admin/comments/namespace_helper.rb +14 -0
  240. data/lib/active_admin/comments/resource_helper.rb +17 -0
  241. data/lib/active_admin/comments/show_page_helper.rb +23 -0
  242. data/lib/active_admin/comments/views.rb +2 -0
  243. data/lib/active_admin/comments/views/active_admin_comments.rb +75 -0
  244. data/lib/active_admin/component.rb +5 -0
  245. data/lib/active_admin/controller_action.rb +12 -0
  246. data/lib/active_admin/csv_builder.rb +49 -0
  247. data/lib/active_admin/deprecation.rb +36 -0
  248. data/lib/active_admin/devise.rb +70 -0
  249. data/lib/active_admin/dsl.rb +166 -0
  250. data/lib/active_admin/engine.rb +7 -0
  251. data/lib/active_admin/event.rb +33 -0
  252. data/lib/active_admin/filters.rb +9 -0
  253. data/lib/active_admin/filters/dsl.rb +21 -0
  254. data/lib/active_admin/filters/forms.rb +89 -0
  255. data/lib/active_admin/filters/formtastic_addons.rb +50 -0
  256. data/lib/active_admin/filters/resource_extension.rb +129 -0
  257. data/lib/active_admin/form_builder.rb +189 -0
  258. data/lib/active_admin/helpers/collection.rb +23 -0
  259. data/lib/active_admin/helpers/optional_display.rb +38 -0
  260. data/lib/active_admin/helpers/scope_chain.rb +23 -0
  261. data/lib/active_admin/helpers/settings.rb +108 -0
  262. data/lib/active_admin/iconic.rb +51 -0
  263. data/lib/active_admin/iconic/icons.rb +142 -0
  264. data/lib/active_admin/inputs.rb +15 -0
  265. data/lib/active_admin/inputs/datepicker_input.rb +11 -0
  266. data/lib/active_admin/inputs/filter_base.rb +33 -0
  267. data/lib/active_admin/inputs/filter_base/search_method_select.rb +73 -0
  268. data/lib/active_admin/inputs/filter_boolean_input.rb +32 -0
  269. data/lib/active_admin/inputs/filter_check_boxes_input.rb +40 -0
  270. data/lib/active_admin/inputs/filter_date_range_input.rb +34 -0
  271. data/lib/active_admin/inputs/filter_numeric_input.rb +10 -0
  272. data/lib/active_admin/inputs/filter_select_input.rb +45 -0
  273. data/lib/active_admin/inputs/filter_string_input.rb +24 -0
  274. data/lib/active_admin/menu.rb +107 -0
  275. data/lib/active_admin/menu_collection.rb +96 -0
  276. data/lib/active_admin/menu_item.rb +97 -0
  277. data/lib/active_admin/namespace.rb +221 -0
  278. data/lib/active_admin/page.rb +88 -0
  279. data/lib/active_admin/page_controller.rb +29 -0
  280. data/lib/active_admin/page_dsl.rb +28 -0
  281. data/lib/active_admin/page_presenter.rb +32 -0
  282. data/lib/active_admin/resource.rb +160 -0
  283. data/lib/active_admin/resource/action_items.rb +93 -0
  284. data/lib/active_admin/resource/belongs_to.rb +36 -0
  285. data/lib/active_admin/resource/controllers.rb +18 -0
  286. data/lib/active_admin/resource/menu.rb +64 -0
  287. data/lib/active_admin/resource/naming.rb +78 -0
  288. data/lib/active_admin/resource/page_presenters.rb +82 -0
  289. data/lib/active_admin/resource/pagination.rb +19 -0
  290. data/lib/active_admin/resource/routes.rb +99 -0
  291. data/lib/active_admin/resource/scope_to.rb +74 -0
  292. data/lib/active_admin/resource/scopes.rb +50 -0
  293. data/lib/active_admin/resource/sidebars.rb +27 -0
  294. data/lib/active_admin/resource_collection.rb +42 -0
  295. data/lib/active_admin/resource_controller.rb +51 -0
  296. data/lib/active_admin/resource_controller/action_builder.rb +21 -0
  297. data/lib/active_admin/resource_controller/actions.rb +81 -0
  298. data/lib/active_admin/resource_controller/data_access.rb +303 -0
  299. data/lib/active_admin/resource_controller/decorators.rb +20 -0
  300. data/lib/active_admin/resource_controller/resource_class_methods.rb +24 -0
  301. data/lib/active_admin/resource_controller/scoping.rb +31 -0
  302. data/lib/active_admin/resource_controller/sidebars.rb +18 -0
  303. data/lib/active_admin/resource_dsl.rb +134 -0
  304. data/lib/active_admin/router.rb +106 -0
  305. data/lib/active_admin/scope.rb +57 -0
  306. data/lib/active_admin/sidebar_section.rb +37 -0
  307. data/lib/active_admin/version.rb +3 -0
  308. data/lib/active_admin/view_factory.rb +28 -0
  309. data/lib/active_admin/view_helpers.rb +21 -0
  310. data/lib/active_admin/view_helpers/active_admin_application_helper.rb +12 -0
  311. data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +7 -0
  312. data/lib/active_admin/view_helpers/auto_link_helper.rb +34 -0
  313. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +26 -0
  314. data/lib/active_admin/view_helpers/display_helper.rb +47 -0
  315. data/lib/active_admin/view_helpers/download_format_links_helper.rb +50 -0
  316. data/lib/active_admin/view_helpers/fields_for.rb +50 -0
  317. data/lib/active_admin/view_helpers/flash_helper.rb +13 -0
  318. data/lib/active_admin/view_helpers/form_helper.rb +24 -0
  319. data/lib/active_admin/view_helpers/icon_helper.rb +12 -0
  320. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +93 -0
  321. data/lib/active_admin/view_helpers/sidebar_helper.rb +15 -0
  322. data/lib/active_admin/view_helpers/title_helper.rb +11 -0
  323. data/lib/active_admin/view_helpers/view_factory_helper.rb +11 -0
  324. data/lib/active_admin/views.rb +8 -0
  325. data/lib/active_admin/views/action_items.rb +17 -0
  326. data/lib/active_admin/views/components/action_list_popover.rb +29 -0
  327. data/lib/active_admin/views/components/attributes_table.rb +70 -0
  328. data/lib/active_admin/views/components/blank_slate.rb +17 -0
  329. data/lib/active_admin/views/components/columns.rb +150 -0
  330. data/lib/active_admin/views/components/dropdown_menu.rb +73 -0
  331. data/lib/active_admin/views/components/index_list.rb +68 -0
  332. data/lib/active_admin/views/components/paginated_collection.rb +123 -0
  333. data/lib/active_admin/views/components/panel.rb +34 -0
  334. data/lib/active_admin/views/components/popover.rb +27 -0
  335. data/lib/active_admin/views/components/scopes.rb +65 -0
  336. data/lib/active_admin/views/components/sidebar_section.rb +28 -0
  337. data/lib/active_admin/views/components/site_title.rb +55 -0
  338. data/lib/active_admin/views/components/status_tag.rb +56 -0
  339. data/lib/active_admin/views/components/table_for.rb +191 -0
  340. data/lib/active_admin/views/dashboard_section_renderer.rb +19 -0
  341. data/lib/active_admin/views/footer.rb +20 -0
  342. data/lib/active_admin/views/header.rb +32 -0
  343. data/lib/active_admin/views/index_as_block.rb +36 -0
  344. data/lib/active_admin/views/index_as_blog.rb +150 -0
  345. data/lib/active_admin/views/index_as_grid.rb +76 -0
  346. data/lib/active_admin/views/index_as_table.rb +238 -0
  347. data/lib/active_admin/views/pages/base.rb +139 -0
  348. data/lib/active_admin/views/pages/dashboard.rb +62 -0
  349. data/lib/active_admin/views/pages/form.rb +51 -0
  350. data/lib/active_admin/views/pages/index.rb +158 -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/activeadmin.rb +1 -0
  357. data/lib/generators/active_admin/assets/assets_generator.rb +16 -0
  358. data/lib/generators/active_admin/assets/templates/active_admin.css.scss +17 -0
  359. data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +1 -0
  360. data/lib/generators/active_admin/devise/devise_generator.rb +78 -0
  361. data/lib/generators/active_admin/install/install_generator.rb +46 -0
  362. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +214 -0
  363. data/lib/generators/active_admin/install/templates/admin_user.rb.erb +27 -0
  364. data/lib/generators/active_admin/install/templates/dashboard.rb +33 -0
  365. data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb +19 -0
  366. data/lib/generators/active_admin/resource/resource_generator.rb +16 -0
  367. data/lib/generators/active_admin/resource/templates/admin.rb +3 -0
  368. data/lib/ransack_ext.rb +12 -0
  369. data/script/local +44 -0
  370. data/script/use_rails +53 -0
  371. data/spec/integration/default_namespace_spec.rb +61 -0
  372. data/spec/integration/javascript_spec.rb +20 -0
  373. data/spec/integration/memory_spec.rb +29 -0
  374. data/spec/integration/stylesheets_spec.rb +41 -0
  375. data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +50 -0
  376. data/spec/javascripts/coffeescripts/jquery.aa.popover-spec.js.coffee +82 -0
  377. data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +34 -0
  378. data/spec/javascripts/compiled/jquery.aa.checkbox-toggler-spec.js +60 -0
  379. data/spec/javascripts/compiled/jquery.aa.popover-spec.js +106 -0
  380. data/spec/javascripts/compiled/jquery.aa.table-checkbox-toggler-spec.js +37 -0
  381. data/spec/javascripts/fixtures/checkboxes.html +9 -0
  382. data/spec/javascripts/fixtures/table_checkboxes.html +17 -0
  383. data/spec/javascripts/helpers/SpecHelper.js +3 -0
  384. data/spec/javascripts/helpers/vendor/jasmine-fixture-0.0.5.js +108 -0
  385. data/spec/javascripts/helpers/vendor/jasmine-jquery.js +288 -0
  386. data/spec/javascripts/helpers/vendor/sinon-1.2.0.js +2915 -0
  387. data/spec/javascripts/support/jasmine.yml +74 -0
  388. data/spec/javascripts/support/jasmine_config.rb +23 -0
  389. data/spec/javascripts/support/jasmine_runner.rb +32 -0
  390. data/spec/javascripts/support/jquery-ui-1.8.16.custom.min.js +34 -0
  391. data/spec/javascripts/support/jquery.min.js +4 -0
  392. data/spec/spec_helper.rb +175 -0
  393. data/spec/spec_helper_without_rails.rb +11 -0
  394. data/spec/support/deferred_garbage_collection.rb +19 -0
  395. data/spec/support/detect_rails_version.rb +42 -0
  396. data/spec/support/integration_example_group.rb +31 -0
  397. data/spec/support/jslint.yml +80 -0
  398. data/spec/support/rails_template.rb +104 -0
  399. data/spec/support/rails_template_with_data.rb +59 -0
  400. data/spec/support/templates/admin/stores.rb +11 -0
  401. data/spec/support/templates/cucumber.rb +24 -0
  402. data/spec/support/templates/cucumber_with_reloading.rb +5 -0
  403. data/spec/support/templates/en.yml +8 -0
  404. data/spec/support/templates/post_decorator.rb +53 -0
  405. data/spec/unit/abstract_view_factory_spec.rb +79 -0
  406. data/spec/unit/action_builder_spec.rb +126 -0
  407. data/spec/unit/active_admin_spec.rb +11 -0
  408. data/spec/unit/application_spec.rb +141 -0
  409. data/spec/unit/asset_registration_spec.rb +56 -0
  410. data/spec/unit/authorization/authorization_adapter_spec.rb +61 -0
  411. data/spec/unit/authorization/controller_authorization_spec.rb +39 -0
  412. data/spec/unit/auto_link_spec.rb +39 -0
  413. data/spec/unit/batch_actions/resource_spec.rb +91 -0
  414. data/spec/unit/batch_actions/settings_spec.rb +61 -0
  415. data/spec/unit/belongs_to_spec.rb +42 -0
  416. data/spec/unit/cancan_adapter_spec.rb +43 -0
  417. data/spec/unit/comments_spec.rb +106 -0
  418. data/spec/unit/component_spec.rb +18 -0
  419. data/spec/unit/config_shared_examples.rb +59 -0
  420. data/spec/unit/controller_filters_spec.rb +27 -0
  421. data/spec/unit/csv_builder_spec.rb +103 -0
  422. data/spec/unit/devise_spec.rb +116 -0
  423. data/spec/unit/dsl_spec.rb +61 -0
  424. data/spec/unit/event_spec.rb +47 -0
  425. data/spec/unit/filters/filter_form_builder_spec.rb +338 -0
  426. data/spec/unit/filters/resource_spec.rb +87 -0
  427. data/spec/unit/form_builder_spec.rb +478 -0
  428. data/spec/unit/generators/install_spec.rb +23 -0
  429. data/spec/unit/helpers/collection_spec.rb +65 -0
  430. data/spec/unit/helpers/scope_chain_spec.rb +36 -0
  431. data/spec/unit/helpers/settings_spec.rb +30 -0
  432. data/spec/unit/menu_collection_spec.rb +62 -0
  433. data/spec/unit/menu_item_spec.rb +143 -0
  434. data/spec/unit/menu_spec.rb +71 -0
  435. data/spec/unit/namespace/authorization_spec.rb +27 -0
  436. data/spec/unit/namespace/register_page_spec.rb +74 -0
  437. data/spec/unit/namespace/register_resource_spec.rb +163 -0
  438. data/spec/unit/namespace_spec.rb +103 -0
  439. data/spec/unit/page_controller_spec.rb +5 -0
  440. data/spec/unit/page_spec.rb +72 -0
  441. data/spec/unit/pretty_format_spec.rb +35 -0
  442. data/spec/unit/resource/action_items_spec.rb +62 -0
  443. data/spec/unit/resource/menu_spec.rb +18 -0
  444. data/spec/unit/resource/naming_spec.rb +108 -0
  445. data/spec/unit/resource/page_presenters_spec.rb +44 -0
  446. data/spec/unit/resource/pagination_spec.rb +38 -0
  447. data/spec/unit/resource/routes_spec.rb +73 -0
  448. data/spec/unit/resource/scopes_spec.rb +43 -0
  449. data/spec/unit/resource/sidebars_spec.rb +43 -0
  450. data/spec/unit/resource_collection_spec.rb +79 -0
  451. data/spec/unit/resource_controller/data_access_spec.rb +73 -0
  452. data/spec/unit/resource_controller/sidebars_spec.rb +46 -0
  453. data/spec/unit/resource_controller_spec.rb +265 -0
  454. data/spec/unit/resource_registration_spec.rb +56 -0
  455. data/spec/unit/resource_spec.rb +243 -0
  456. data/spec/unit/routing_spec.rb +172 -0
  457. data/spec/unit/scope_spec.rb +108 -0
  458. data/spec/unit/settings_spec.rb +88 -0
  459. data/spec/unit/view_factory_spec.rb +22 -0
  460. data/spec/unit/view_helpers/breadcrumbs_spec.rb +152 -0
  461. data/spec/unit/view_helpers/display_name_spec.rb +41 -0
  462. data/spec/unit/view_helpers/download_format_links_helper_spec.rb +39 -0
  463. data/spec/unit/view_helpers/fields_for_spec.rb +50 -0
  464. data/spec/unit/view_helpers/form_helper_spec.rb +56 -0
  465. data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +97 -0
  466. data/spec/unit/views/components/action_list_popover_spec.rb +30 -0
  467. data/spec/unit/views/components/attributes_table_spec.rb +131 -0
  468. data/spec/unit/views/components/batch_action_popover_spec.rb +33 -0
  469. data/spec/unit/views/components/blank_slate_spec.rb +17 -0
  470. data/spec/unit/views/components/columns_spec.rb +142 -0
  471. data/spec/unit/views/components/index_list_spec.rb +32 -0
  472. data/spec/unit/views/components/paginated_collection_spec.rb +247 -0
  473. data/spec/unit/views/components/panel_spec.rb +51 -0
  474. data/spec/unit/views/components/popover_spec.rb +33 -0
  475. data/spec/unit/views/components/sidebar_section_spec.rb +37 -0
  476. data/spec/unit/views/components/site_title_spec.rb +78 -0
  477. data/spec/unit/views/components/status_tag_spec.rb +95 -0
  478. data/spec/unit/views/components/table_for_spec.rb +182 -0
  479. data/spec/unit/views/pages/layout_spec.rb +63 -0
  480. data/spec/unit/views/pages/show_spec.rb +20 -0
  481. data/spec/unit/views/tabbed_navigation_spec.rb +149 -0
  482. data/tasks/docs.rake +39 -0
  483. data/tasks/js.rake +32 -0
  484. data/tasks/parallel_tests.rake +60 -0
  485. data/tasks/test.rake +79 -0
  486. data/tasks/yard.rake +6 -0
  487. metadata +883 -0
@@ -0,0 +1,63 @@
1
+ module NavigationHelpers
2
+ # Maps a name to a path. Used by the
3
+ #
4
+ # When /^I go to (.+)$/ do |page_name|
5
+ #
6
+ # step definition in web_steps.rb
7
+ #
8
+ def path_to(page_name)
9
+ case page_name
10
+
11
+ when /the home\s?page/
12
+ '/'
13
+ when /the dashboard/
14
+ "/admin"
15
+ when /the new post page/
16
+ "/admin/posts/new"
17
+ when /the login page/
18
+ "/admin/login"
19
+ when /the admin password reset form with reset password token "([^"]*)"/
20
+ "/admin/password/edit?reset_password_token=#{$1}"
21
+
22
+ # the index page for posts in the root namespace
23
+ # the index page for posts in the user_admin namespace
24
+ when /^the index page for (.*) in the (.*) namespace$/
25
+ if $2 != 'root'
26
+ send(:"#{$2}_#{$1}_path")
27
+ else
28
+ send(:"#{$1}_path")
29
+ end
30
+
31
+ # same as above, except defaults to admin namespace
32
+ when /^the index page for (.*)$/
33
+ send(:"admin_#{$1}_path")
34
+
35
+ when /^the last author's posts$/
36
+ admin_user_posts_path(User.last)
37
+
38
+ when /^the last author's last post page$/
39
+ admin_user_post_path(User.last, Post.where(:author_id => User.last.id).last)
40
+
41
+ when /^the last post's edit page$/
42
+ edit_admin_post_path(Post.last)
43
+
44
+ # Add more mappings here.
45
+ # Here is an example that pulls values out of the Regexp:
46
+ #
47
+ # when /^(.*)'s profile page$/i
48
+ # user_profile_path(User.find_by_login($1))
49
+
50
+ else
51
+ begin
52
+ page_name =~ /the (.*) page/
53
+ path_components = $1.split(/\s+/)
54
+ self.send(path_components.push('path').join('_').to_sym)
55
+ rescue Object => e
56
+ raise "Can't find mapping from \"#{page_name}\" to a path.\n" +
57
+ "Now, go and add a mapping in #{__FILE__}"
58
+ end
59
+ end
60
+ end
61
+ end
62
+
63
+ World(NavigationHelpers)
@@ -0,0 +1,45 @@
1
+ module HtmlSelectorsHelpers
2
+ # Maps a name to a selector. Used primarily by the
3
+ #
4
+ # When /^(.+) within (.+)$/ do |step, scope|
5
+ #
6
+ # step definitions in web_steps.rb
7
+ #
8
+ def selector_for(locator)
9
+ case locator
10
+
11
+ when "the page"
12
+ "html > body"
13
+
14
+ # Add more mappings here.
15
+ # Here is an example that pulls values out of the Regexp:
16
+ #
17
+ # when /^the (notice|error|info) flash$/
18
+ # ".flash.#{$1}"
19
+
20
+ # You can also return an array to use a different selector
21
+ # type, like:
22
+ #
23
+ # when /the header/
24
+ # [:xpath, "//header"]
25
+
26
+ when "index grid"
27
+ [:css, "table.index_grid"]
28
+
29
+ when /^the "([^"]*)" sidebar$/
30
+ [:css, "##{$1.gsub(" ", '').underscore}_sidebar_section"]
31
+
32
+ # This allows you to provide a quoted selector as the scope
33
+ # for "within" steps as was previously the default for the
34
+ # web steps:
35
+ when /^"(.+)"$/
36
+ $1
37
+
38
+ else
39
+ raise "Can't find mapping from \"#{locator}\" to a selector.\n" +
40
+ "Now, go and add a mapping in #{__FILE__}"
41
+ end
42
+ end
43
+ end
44
+
45
+ World(HtmlSelectorsHelpers)
@@ -0,0 +1,34 @@
1
+ Feature: User Logging In
2
+
3
+ Logging in to the system as an admin user
4
+
5
+ Background:
6
+ Given a configuration of:
7
+ """
8
+ ActiveAdmin.register Post
9
+ """
10
+ And I am logged out
11
+ And an admin user "admin@example.com" exists
12
+ When I go to the dashboard
13
+
14
+ Scenario: Logging in Successfully
15
+ When I fill in "Email" with "admin@example.com"
16
+ And I fill in "Password" with "password"
17
+ And I press "Login"
18
+ Then I should be on the the dashboard
19
+ And I should see the element "a[href='/admin/logout' ]:contains('Logout')"
20
+ And I should see the element "a[href='/admin/admin_users/1']:contains('admin@example.com')"
21
+
22
+ Scenario: Attempting to log in with an incorrect email address
23
+ When I fill in "Email" with "not-an-admin@example.com"
24
+ And I fill in "Password" with "not-my-password"
25
+ And I press "Login"
26
+ Then I should see "Login"
27
+ And I should see "Invalid email or password."
28
+
29
+ Scenario: Attempting to log in with an incorrect password
30
+ When I fill in "Email" with "admin@example.com"
31
+ And I fill in "Password" with "not-my-password"
32
+ And I press "Login"
33
+ Then I should see "Login"
34
+ And I should see "Invalid email or password."
@@ -0,0 +1,13 @@
1
+ Feature: User Logging out
2
+
3
+ Logging out of the system as an admin user
4
+
5
+ Scenario: Logging out successfully
6
+ Given a configuration of:
7
+ """
8
+ ActiveAdmin.register Post
9
+ """
10
+ And I am logged in
11
+ When I go to the dashboard
12
+ And I follow "Logout"
13
+ Then I should see "Login"
@@ -0,0 +1,34 @@
1
+ Feature: User Resetting Password
2
+
3
+ Resetting my password as an admin user
4
+
5
+ Background:
6
+ Given a configuration of:
7
+ """
8
+ ActiveAdmin.register Post
9
+ """
10
+ And I am logged out
11
+ And an admin user "admin@example.com" exists
12
+
13
+ Scenario: Resetting password successfully
14
+ When I go to the dashboard
15
+ And I follow "Forgot your password?"
16
+ When I fill in "Email" with "admin@example.com"
17
+ And I press "Reset My Password"
18
+ Then I should see "You will receive an email with instructions about how to reset your password in a few minutes."
19
+
20
+ Scenario: Changing password after resetting
21
+ Given an admin user "admin@example.com" exists with reset password token "123reset"
22
+ When I go to the admin password reset form with reset password token "123reset"
23
+ And I fill in "Password" with "password"
24
+ And I fill in "Password confirmation" with "password"
25
+ And I press "Change my password"
26
+ Then I should see "success"
27
+
28
+ Scenario: Changing password after resetting with errors
29
+ Given an admin user "admin@example.com" exists with expired reset password token "123reset"
30
+ When I go to the admin password reset form with reset password token "123reset"
31
+ And I fill in "Password" with "password"
32
+ And I fill in "Password confirmation" with "wrong"
33
+ And I press "Change my password"
34
+ Then I should see "expired"
@@ -0,0 +1,120 @@
1
+ require 'active_support/core_ext/class/attribute' # needed for Ransack
2
+ require 'ransack'
3
+ require 'ransack_ext'
4
+ require 'bourbon'
5
+ require 'devise'
6
+ require 'kaminari'
7
+ require 'formtastic'
8
+ require 'sass-rails'
9
+ require 'inherited_resources'
10
+ require 'jquery-rails'
11
+ require 'jquery-ui-rails'
12
+ require 'coffee-rails'
13
+ require 'arbre'
14
+ require 'active_admin/engine'
15
+
16
+ module ActiveAdmin
17
+
18
+ autoload :VERSION, 'active_admin/version'
19
+ autoload :Application, 'active_admin/application'
20
+ autoload :AssetRegistration, 'active_admin/asset_registration'
21
+ autoload :Authorization, 'active_admin/authorization_adapter'
22
+ autoload :AuthorizationAdapter, 'active_admin/authorization_adapter'
23
+ autoload :Breadcrumbs, 'active_admin/breadcrumbs'
24
+ autoload :CanCanAdapter, 'active_admin/cancan_adapter'
25
+ autoload :Callbacks, 'active_admin/callbacks'
26
+ autoload :Component, 'active_admin/component'
27
+ autoload :BaseController, 'active_admin/base_controller'
28
+ autoload :ControllerAction, 'active_admin/controller_action'
29
+ autoload :CSVBuilder, 'active_admin/csv_builder'
30
+ autoload :Deprecation, 'active_admin/deprecation'
31
+ autoload :Devise, 'active_admin/devise'
32
+ autoload :DSL, 'active_admin/dsl'
33
+ autoload :Event, 'active_admin/event'
34
+ autoload :FormBuilder, 'active_admin/form_builder'
35
+ autoload :Inputs, 'active_admin/inputs'
36
+ autoload :Iconic, 'active_admin/iconic'
37
+ autoload :Menu, 'active_admin/menu'
38
+ autoload :MenuCollection, 'active_admin/menu_collection'
39
+ autoload :MenuItem, 'active_admin/menu_item'
40
+ autoload :Namespace, 'active_admin/namespace'
41
+ autoload :Page, 'active_admin/page'
42
+ autoload :PagePresenter, 'active_admin/page_presenter'
43
+ autoload :PageController, 'active_admin/page_controller'
44
+ autoload :PageDSL, 'active_admin/page_dsl'
45
+ autoload :Reloader, 'active_admin/reloader'
46
+ autoload :Resource, 'active_admin/resource'
47
+ autoload :ResourceController, 'active_admin/resource_controller'
48
+ autoload :ResourceDSL, 'active_admin/resource_dsl'
49
+ autoload :Scope, 'active_admin/scope'
50
+ autoload :ScopeChain, 'active_admin/helpers/scope_chain'
51
+ autoload :SidebarSection, 'active_admin/sidebar_section'
52
+ autoload :TableBuilder, 'active_admin/table_builder'
53
+ autoload :ViewFactory, 'active_admin/view_factory'
54
+ autoload :ViewHelpers, 'active_admin/view_helpers'
55
+ autoload :Views, 'active_admin/views'
56
+
57
+ class << self
58
+
59
+ attr_accessor :application
60
+
61
+ def application
62
+ @application ||= ::ActiveAdmin::Application.new
63
+ end
64
+
65
+ # Gets called within the initializer
66
+ def setup
67
+ application.setup!
68
+ yield(application)
69
+ application.prepare!
70
+ end
71
+
72
+ delegate :register, :to => :application
73
+ delegate :register_page, :to => :application
74
+ delegate :unload!, :to => :application
75
+ delegate :load!, :to => :application
76
+ delegate :routes, :to => :application
77
+
78
+ # A callback is triggered each time (before) Active Admin loads the configuration files.
79
+ # In development mode, this will happen whenever the user changes files. In production
80
+ # it only happens on boot.
81
+ #
82
+ # The block takes the current instance of [ActiveAdmin::Application]
83
+ #
84
+ # Example:
85
+ #
86
+ # ActiveAdmin.before_load do |app|
87
+ # # Do some stuff before AA loads
88
+ # end
89
+ #
90
+ # @param [Block] block A block to call each time (before) AA loads resources
91
+ def before_load(&block)
92
+ ActiveAdmin::Event.subscribe ActiveAdmin::Application::BeforeLoadEvent, &block
93
+ end
94
+
95
+ # A callback is triggered each time (after) Active Admin loads the configuration files. This
96
+ # is an opportunity to hook into Resources after they've been loaded.
97
+ #
98
+ # The block takes the current instance of [ActiveAdmin::Application]
99
+ #
100
+ # Example:
101
+ #
102
+ # ActiveAdmin.after_load do |app|
103
+ # app.namespaces.each do |name, namespace|
104
+ # puts "Namespace: #{name} loaded!"
105
+ # end
106
+ # end
107
+ #
108
+ # @param [Block] block A block to call each time (after) AA loads resources
109
+ def after_load(&block)
110
+ ActiveAdmin::Event.subscribe ActiveAdmin::Application::AfterLoadEvent, &block
111
+ end
112
+
113
+ end
114
+
115
+ end
116
+
117
+ # Require internal Plugins
118
+ require 'active_admin/comments'
119
+ require 'active_admin/batch_actions'
120
+ require 'active_admin/filters'
@@ -0,0 +1,95 @@
1
+ module ActiveAdmin
2
+ class AbstractViewFactory
3
+ @@default_views = {}
4
+
5
+ def self.register(view_hash)
6
+ view_hash.each do |view_key, view_class|
7
+ @@default_views[view_key] = view_class
8
+ end
9
+ end
10
+
11
+ def initialize
12
+ @views = {}
13
+ end
14
+
15
+ # Register a new view key with the view factory
16
+ #
17
+ # eg:
18
+ #
19
+ # factory = AbstractViewFactory.new
20
+ # factory.register :my_view => SomeViewClass
21
+ #
22
+ # You can setup many at the same time:
23
+ #
24
+ # factory.register :my_view => SomeClass,
25
+ # :another_view => OtherViewClass
26
+ #
27
+ def register(view_hash)
28
+ view_hash.each do |view_key, view_class|
29
+ @views[view_key] = view_class
30
+ end
31
+ end
32
+
33
+ def default_for(key)
34
+ @@default_views[key.to_sym]
35
+ end
36
+
37
+ def has_key?(key)
38
+ @views.has_key?(key.to_sym) || @@default_views.has_key?(key.to_sym)
39
+ end
40
+
41
+ def [](key)
42
+ get_view_for_key(key)
43
+ end
44
+
45
+ def []=(key, value)
46
+ set_view_for_key(key, value)
47
+ end
48
+
49
+ # Override respond to to include keys
50
+ def respond_to?(method)
51
+ key = key_from_method_name(method)
52
+ if has_key?(key)
53
+ true
54
+ else
55
+ super
56
+ end
57
+ end
58
+
59
+ private
60
+
61
+ def method_missing(method, *args)
62
+ key = key_from_method_name(method)
63
+ if has_key?(key)
64
+ if method.to_s.include?('=')
65
+ self.class_eval <<-EOS
66
+ def #{key}=(value)
67
+ set_view_for_key(:#{key}, value)
68
+ end
69
+ EOS
70
+ else
71
+ self.class_eval <<-EOS
72
+ def #{key}
73
+ get_view_for_key(:#{key})
74
+ end
75
+ EOS
76
+ end
77
+ self.send(method, *args)
78
+ else
79
+ super
80
+ end
81
+ end
82
+
83
+ def key_from_method_name(method)
84
+ method.to_s.gsub('=', '').to_sym
85
+ end
86
+
87
+ def get_view_for_key(key)
88
+ @views[key.to_sym] || @@default_views[key.to_sym]
89
+ end
90
+
91
+ def set_view_for_key(key, view)
92
+ @views[key.to_sym] = view
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,245 @@
1
+ require 'active_admin/router'
2
+ require 'active_admin/helpers/settings'
3
+
4
+ module ActiveAdmin
5
+ class Application
6
+ include Settings
7
+ include Settings::Inheritance
8
+
9
+ settings_inherited_by Namespace
10
+
11
+ # The default namespace to put controllers and routes inside. Set this
12
+ # in config/initializers/active_admin.rb using:
13
+ #
14
+ # config.default_namespace = :super_admin
15
+ #
16
+ setting :default_namespace, :admin
17
+
18
+ attr_reader :namespaces
19
+ def initialize
20
+ @namespaces = {}
21
+ end
22
+
23
+ # Load paths for admin configurations. Add folders to this load path
24
+ # to load up other resources for administration. External gems can
25
+ # include their paths in this load path to provide active_admin UIs
26
+ setting :load_paths, [File.expand_path('app/admin', Rails.root)]
27
+
28
+ # The default number of resources to display on index pages
29
+ inheritable_setting :default_per_page, 30
30
+
31
+ # The title which gets displayed in the main layout
32
+ inheritable_setting :site_title, ""
33
+
34
+ # Set the site title link href (defaults to AA dashboard)
35
+ inheritable_setting :site_title_link, ""
36
+
37
+ # Set the site title image displayed in the main layout (has precendence over :site_title)
38
+ inheritable_setting :site_title_image, ""
39
+
40
+ # Set a favicon
41
+ inheritable_setting :favicon, false
42
+
43
+ # The view factory to use to generate all the view classes. Take
44
+ # a look at ActiveAdmin::ViewFactory
45
+ inheritable_setting :view_factory, ActiveAdmin::ViewFactory.new
46
+
47
+ # The method to call in controllers to get the current user
48
+ inheritable_setting :current_user_method, false
49
+
50
+ # The method to call in the controllers to ensure that there
51
+ # is a currently authenticated admin user
52
+ inheritable_setting :authentication_method, false
53
+
54
+ # The path to log user's out with. If set to a symbol, we assume
55
+ # that it's a method to call which returns the path
56
+ inheritable_setting :logout_link_path, :destroy_admin_user_session_path
57
+
58
+ # The method to use when generating the link for user logout
59
+ inheritable_setting :logout_link_method, :get
60
+
61
+ # Whether the batch actions are enabled or not
62
+ inheritable_setting :batch_actions, false
63
+
64
+ # Whether filters are enabled
65
+ inheritable_setting :filters, true
66
+
67
+ # The namespace root.
68
+ inheritable_setting :root_to, 'dashboard#index'
69
+
70
+ # Default CSV options
71
+ inheritable_setting :csv_options, {:col_sep => ','}
72
+
73
+ # Default Download Links options
74
+ inheritable_setting :download_links, true
75
+
76
+ # The authorization adapter to use
77
+ inheritable_setting :authorization_adapter, ActiveAdmin::AuthorizationAdapter
78
+
79
+ # A proc to be used when a user is not authorized to view the current resource
80
+ inheritable_setting :on_unauthorized_access, :rescue_active_admin_access_denied
81
+
82
+ # Active Admin makes educated guesses when displaying objects, this is
83
+ # the list of methods it tries calling in order
84
+ setting :display_name_methods, [ :display_name,
85
+ :full_name,
86
+ :name,
87
+ :username,
88
+ :login,
89
+ :title,
90
+ :email,
91
+ :to_s ]
92
+
93
+ # == Deprecated Settings
94
+
95
+ # (none currently)
96
+
97
+ include AssetRegistration
98
+
99
+ # Event that gets triggered on load of Active Admin
100
+ BeforeLoadEvent = 'active_admin.application.before_load'.freeze
101
+ AfterLoadEvent = 'active_admin.application.after_load'.freeze
102
+
103
+ # Runs before the app's AA initializer
104
+ def setup!
105
+ register_default_assets
106
+ end
107
+
108
+ # Runs after the app's AA initializer
109
+ def prepare!
110
+ remove_active_admin_load_paths_from_rails_autoload
111
+ attach_reloader
112
+ end
113
+
114
+ # Registers a brand new configuration for the given resource.
115
+ def register(resource, options = {}, &block)
116
+ ns_name = namespace_name(options)
117
+ namespace(ns_name).register resource, options, &block
118
+ end
119
+
120
+ # Creates a namespace for the given name
121
+ #
122
+ # Yields the namespace if a block is given
123
+ #
124
+ # @returns [Namespace] the new or existing namespace
125
+ def namespace(name)
126
+ name ||= :root
127
+
128
+ if namespaces[name]
129
+ namespace = namespaces[name]
130
+ else
131
+ namespace = namespaces[name] = Namespace.new(self, name)
132
+ ActiveAdmin::Event.dispatch ActiveAdmin::Namespace::RegisterEvent, namespace
133
+ end
134
+
135
+ yield(namespace) if block_given?
136
+
137
+ namespace
138
+ end
139
+
140
+ # Register a page
141
+ #
142
+ # @param name [String] The page name
143
+ # @options [Hash] Accepts option :namespace.
144
+ # @&block The registration block.
145
+ #
146
+ def register_page(name, options = {}, &block)
147
+ ns_name = namespace_name(options)
148
+ namespace(ns_name).register_page name, options, &block
149
+ end
150
+
151
+ # Whether all configuration files have been loaded
152
+ def loaded?
153
+ @@loaded ||= false
154
+ end
155
+
156
+ # Removes all defined controllers from memory. Useful in
157
+ # development, where they are reloaded on each request.
158
+ def unload!
159
+ namespaces.values.each{ |namespace| namespace.unload! }
160
+ @@loaded = false
161
+ end
162
+
163
+ # Loads all ruby files that are within the load_paths setting.
164
+ # To reload everything simply call `ActiveAdmin.unload!`
165
+ def load!
166
+ unless loaded?
167
+ ActiveAdmin::Event.dispatch BeforeLoadEvent, self # before_load hook
168
+ files.each{ |file| load file } # load files
169
+ namespace(default_namespace) # init AA resources
170
+ ActiveAdmin::Event.dispatch AfterLoadEvent, self # after_load hook
171
+ @@loaded = true
172
+ end
173
+ end
174
+
175
+ # Returns ALL the files to be loaded
176
+ def files
177
+ load_paths.flatten.compact.uniq.map{ |path| Dir["#{path}/**/*.rb"] }.flatten
178
+ end
179
+
180
+ def router
181
+ @router ||= Router.new(self)
182
+ end
183
+
184
+ # One-liner called by user's config/routes.rb file
185
+ def routes(rails_router)
186
+ load!
187
+ router.apply(rails_router)
188
+ end
189
+
190
+ # Adds before, around and after filters to all controllers.
191
+ # Example usage:
192
+ # ActiveAdmin.before_filter :authenticate_admin!
193
+ #
194
+ %w(before_filter skip_before_filter after_filter around_filter).each do |name|
195
+ define_method name do |*args, &block|
196
+ ActiveAdmin::BaseController.send name, *args, &block
197
+ ActiveAdmin::Devise::PasswordsController.send name, *args, &block
198
+ ActiveAdmin::Devise::SessionsController.send name, *args, &block
199
+ ActiveAdmin::Devise::UnlocksController.send name, *args, &block
200
+ end
201
+ end
202
+
203
+ # Helper method to add a dashboard section
204
+ def dashboard_section(name, options = {}, &block)
205
+ ActiveAdmin::Dashboards.add_section(name, options, &block)
206
+ end
207
+
208
+ private
209
+
210
+ # Return either the passed in namespace or the default
211
+ def namespace_name(options)
212
+ options.fetch(:namespace){ default_namespace }
213
+ end
214
+
215
+ def register_default_assets
216
+ register_stylesheet 'active_admin.css', media: 'screen'
217
+ register_stylesheet 'active_admin/print.css', media: 'print'
218
+
219
+ register_javascript 'active_admin.js'
220
+ end
221
+
222
+ # Since the default load path, app/admin, is alphabetically before app/models, we have
223
+ # to remove it from the host app's +autoload_paths+ to prevent missing constant errors.
224
+ def remove_active_admin_load_paths_from_rails_autoload
225
+ ActiveSupport::Dependencies.autoload_paths.reject!{ |path| load_paths.include? path }
226
+ end
227
+
228
+ # Hooks the app/admin directory into our Rails Engine's +watchable_dirs+, so the
229
+ # files are automatically reloaded in your development environment.
230
+ #
231
+ # If files have changed on disk, we forcibly unload all AA configurations, and
232
+ # tell the host application to redraw routes (triggering AA itself to reload).
233
+ def attach_reloader
234
+ load_paths.each do |path|
235
+ ActiveAdmin::Engine.config.watchable_dirs[path] = [:rb]
236
+ end
237
+
238
+ app = self
239
+ ActionDispatch::Reloader.to_prepare do
240
+ app.unload!
241
+ Rails.application.reload_routes!
242
+ end
243
+ end
244
+ end
245
+ end