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,147 @@
1
+ require 'active_admin/helpers/collection'
2
+
3
+ module ActiveAdmin
4
+ module Views
5
+ module Pages
6
+
7
+ class Index < Base
8
+
9
+ def title
10
+ case config[:title]
11
+ when Proc then controller.instance_eval(&config[:title])
12
+ when String then config[:title]
13
+ else
14
+ active_admin_config.plural_resource_label
15
+ end
16
+ end
17
+
18
+ # Retreives the given page presenter, or uses the default.
19
+ def config
20
+ active_admin_config.get_page_presenter(:index, params[:as]) ||
21
+ ActiveAdmin::PagePresenter.new(as: :table)
22
+ end
23
+
24
+ # Render's the index configuration that was set in the
25
+ # controller. Defaults to rendering the ActiveAdmin::Pages::Index::Table
26
+ def main_content
27
+ wrap_with_batch_action_form do
28
+ build_table_tools
29
+ build_collection
30
+ end
31
+ end
32
+
33
+ protected
34
+
35
+ def wrap_with_batch_action_form(&block)
36
+ if active_admin_config.batch_actions.any?
37
+ batch_action_form(&block)
38
+ else
39
+ block.call
40
+ end
41
+ end
42
+
43
+ include ::ActiveAdmin::Helpers::Collection
44
+
45
+ def items_in_collection?
46
+ !collection_is_empty?
47
+ end
48
+
49
+ def build_collection
50
+ if items_in_collection?
51
+ render_index
52
+ else
53
+ if params[:q] || params[:scope]
54
+ render_empty_results
55
+ else
56
+ render_blank_slate
57
+ end
58
+ end
59
+ end
60
+
61
+ include ::ActiveAdmin::ViewHelpers::DownloadFormatLinksHelper
62
+
63
+ def build_table_tools
64
+ div :class => "table_tools" do
65
+ build_batch_actions_selector
66
+ build_scopes
67
+ build_index_list
68
+ end if any_table_tools?
69
+ end
70
+
71
+ def any_table_tools?
72
+ active_admin_config.batch_actions.any? ||
73
+ active_admin_config.scopes.any? ||
74
+ active_admin_config.page_presenters[:index].try(:size).try(:>, 1)
75
+ end
76
+
77
+ def build_batch_actions_selector
78
+ if active_admin_config.batch_actions.any?
79
+ insert_tag view_factory.batch_action_selector, active_admin_config.batch_actions
80
+ end
81
+ end
82
+
83
+ def build_scopes
84
+ if active_admin_config.scopes.any?
85
+ scope_options = {
86
+ :scope_count => config[:scope_count].nil? ? true : config[:scope_count]
87
+ }
88
+
89
+ scopes_renderer active_admin_config.scopes, scope_options
90
+ end
91
+ end
92
+
93
+ def build_index_list
94
+ indexes = active_admin_config.page_presenters[:index]
95
+
96
+ if indexes.kind_of?(Hash) && indexes.length > 1
97
+ index_classes = []
98
+ active_admin_config.page_presenters[:index].each do |type, page_presenter|
99
+ index_classes << find_index_renderer_class(page_presenter[:as])
100
+ end
101
+
102
+ index_list_renderer index_classes
103
+ end
104
+ end
105
+
106
+ # Returns the actual class for renderering the main content on the index
107
+ # page. To set this, use the :as option in the page_presenter block.
108
+ def find_index_renderer_class(klass)
109
+ klass.is_a?(Class) ? klass :
110
+ ::ActiveAdmin::Views.const_get("IndexAs" + klass.to_s.camelcase)
111
+ end
112
+
113
+ def render_blank_slate
114
+ blank_slate_content = I18n.t("active_admin.blank_slate.content", :resource_name => active_admin_config.plural_resource_label)
115
+ if controller.action_methods.include?('new') && authorized?(ActiveAdmin::Auth::CREATE, active_admin_config.resource_class)
116
+ blank_slate_content += " " + link_to(I18n.t("active_admin.blank_slate.link"), new_resource_path)
117
+ end
118
+ insert_tag(view_factory.blank_slate, blank_slate_content)
119
+ end
120
+
121
+ def render_empty_results
122
+ empty_results_content = I18n.t("active_admin.pagination.empty", :model => active_admin_config.plural_resource_label)
123
+ insert_tag(view_factory.blank_slate, empty_results_content)
124
+ end
125
+
126
+ def render_index
127
+ renderer_class = find_index_renderer_class(config[:as])
128
+ paginator = config[:paginator].nil? ? true : config[:paginator]
129
+ download_links = config[:download_links].nil? ? active_admin_config.namespace.download_links : config[:download_links]
130
+ pagination_total = config[:pagination_total].nil? ? true : config[:pagination_total]
131
+
132
+ paginated_collection(collection, :entry_name => active_admin_config.resource_label,
133
+ :entries_name => active_admin_config.plural_resource_label(:count => collection_size),
134
+ :download_links => download_links,
135
+ :paginator => paginator,
136
+ :pagination_total => pagination_total) do
137
+ div :class => 'index_content' do
138
+ insert_tag(renderer_class, config, collection)
139
+ end
140
+ end
141
+ end
142
+
143
+ end
144
+ end
145
+ end
146
+ end
147
+
@@ -0,0 +1,26 @@
1
+ module ActiveAdmin
2
+ module Views
3
+ module Pages
4
+
5
+ # Acts as a standard rails Layout for use when logged
6
+ # out or when rendering custom actions.
7
+ class Layout < Base
8
+
9
+ def title
10
+ assigns[:page_title] || I18n.t("active_admin.#{params[:action]}", :default => params[:action].to_s.titleize)
11
+ end
12
+
13
+ # Render the content_for(:layout) into the main content area
14
+ def main_content
15
+ content_for_layout = content_for(:layout)
16
+ if content_for_layout.is_a?(Arbre::Element)
17
+ current_arbre_element.add_child content_for_layout.children
18
+ else
19
+ text_node content_for_layout
20
+ end
21
+ end
22
+ end
23
+
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,30 @@
1
+ module ActiveAdmin
2
+ module Views
3
+ module Pages
4
+ class Page < Base
5
+
6
+ def main_content
7
+ if page_presenter.block
8
+ instance_exec &page_presenter.block
9
+ else
10
+ nil
11
+ end
12
+ end
13
+
14
+ protected
15
+
16
+ def page_presenter
17
+ active_admin_config.get_page_presenter(:index) || ActiveAdmin::PagePresenter.new
18
+ end
19
+
20
+ def title
21
+ if page_presenter[:title]
22
+ render_or_call_method_or_proc_on self, page_presenter[:title]
23
+ else
24
+ active_admin_config.name
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,59 @@
1
+ module ActiveAdmin
2
+ module Views
3
+ module Pages
4
+ class Show < Base
5
+
6
+ def config
7
+ active_admin_config.get_page_presenter(:show) || super
8
+ end
9
+
10
+ def title
11
+ if config[:title]
12
+ render_or_call_method_or_proc_on(resource, config[:title])
13
+ else
14
+ default_title
15
+ end
16
+ end
17
+
18
+ def main_content
19
+ if config.block
20
+ # Eval the show config from the controller
21
+ instance_exec resource, &config.block
22
+ else
23
+ default_main_content
24
+ end
25
+ end
26
+
27
+ def attributes_table(*args, &block)
28
+ panel(I18n.t('active_admin.details', :model => active_admin_config.resource_label)) do
29
+ attributes_table_for resource, *args, &block
30
+ end
31
+ end
32
+
33
+ protected
34
+
35
+ def default_title
36
+ title = display_name(resource)
37
+
38
+ if title.nil? || title.empty? || title == resource.to_s
39
+ title = "#{active_admin_config.resource_label} ##{resource.id}"
40
+ end
41
+
42
+ title
43
+ end
44
+
45
+ module DefaultMainContent
46
+ def default_main_content
47
+ attributes_table *default_attribute_table_rows
48
+ end
49
+
50
+ def default_attribute_table_rows
51
+ resource.class.columns.collect{|column| column.name.to_sym }
52
+ end
53
+ end
54
+
55
+ include DefaultMainContent
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,62 @@
1
+ module ActiveAdmin
2
+ module Views
3
+
4
+ # Renders an ActiveAdmin::Menu as a set of unordered list items.
5
+ #
6
+ # This component takes cares of deciding which items should be
7
+ # displayed given the current context and renders them appropriately.
8
+ #
9
+ # The entire component is rendered within one ul element.
10
+ class TabbedNavigation < Component
11
+
12
+ attr_reader :menu
13
+
14
+ # Build a new tabbed navigation component.
15
+ #
16
+ # @param [ActiveAdmin::Menu] menu the Menu to render
17
+ # @param [Hash] options the options as passed to the underlying ul element.
18
+ #
19
+ def build(menu, options = {})
20
+ @menu = menu
21
+ super(default_options.merge(options))
22
+ build_menu
23
+ end
24
+
25
+ # The top-level menu items that should be displayed.
26
+ def menu_items
27
+ menu.items(self)
28
+ end
29
+
30
+ def tag_name
31
+ 'ul'
32
+ end
33
+
34
+ private
35
+
36
+ def build_menu
37
+ menu_items.each do |item|
38
+ build_menu_item(item)
39
+ end
40
+ end
41
+
42
+ def build_menu_item(item)
43
+ li :id => item.id do |li|
44
+ li.add_class "current" if item.current? assigns[:current_tab]
45
+
46
+ text_node link_to item.label(self), item.url(self), item.html_options
47
+
48
+ if children = item.items(self).presence
49
+ li.add_class "has_nested"
50
+ ul do
51
+ children.each{ |child| build_menu_item child }
52
+ end
53
+ end
54
+ end
55
+ end
56
+
57
+ def default_options
58
+ { :id => "tabs" }
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,53 @@
1
+ module ActiveAdmin
2
+ module Views
3
+ class TitleBar < Component
4
+
5
+ def build(title, action_items)
6
+ super(:id => "title_bar")
7
+ @title = title
8
+ @action_items = action_items
9
+ build_titlebar_left
10
+ build_titlebar_right
11
+ end
12
+
13
+ private
14
+
15
+ def build_titlebar_left
16
+ div :id => "titlebar_left" do
17
+ build_breadcrumb
18
+ build_title_tag
19
+ end
20
+ end
21
+
22
+ def build_titlebar_right
23
+ div :id => "titlebar_right" do
24
+ build_action_items
25
+ end
26
+ end
27
+
28
+ def build_breadcrumb(separator = "/")
29
+ links = if active_admin_config && active_admin_config.breadcrumb.present?
30
+ instance_exec(controller, &active_admin_config.breadcrumb)
31
+ else
32
+ breadcrumb_links
33
+ end
34
+ return unless links.present? && links.is_a?(::Array)
35
+ span :class => "breadcrumb" do
36
+ links.each do |link|
37
+ text_node link
38
+ span(separator, :class => "breadcrumb_sep")
39
+ end
40
+ end
41
+ end
42
+
43
+ def build_title_tag
44
+ h2(@title, :id => 'page_title')
45
+ end
46
+
47
+ def build_action_items
48
+ insert_tag(view_factory.action_items, @action_items) if @action_items.any?
49
+ end
50
+
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,8 @@
1
+ module ActiveAdmin
2
+ module Views
3
+
4
+ # Loads all the classes in views/*.rb
5
+ Dir[File.expand_path('../views', __FILE__) + "/**/*.rb"].sort.each{ |f| require f }
6
+
7
+ end
8
+ end
@@ -0,0 +1,125 @@
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 :Callbacks, 'active_admin/callbacks'
25
+ autoload :Component, 'active_admin/component'
26
+ autoload :BaseController, 'active_admin/base_controller'
27
+ autoload :ControllerAction, 'active_admin/controller_action'
28
+ autoload :CSVBuilder, 'active_admin/csv_builder'
29
+ autoload :Deprecation, 'active_admin/deprecation'
30
+ autoload :Devise, 'active_admin/devise'
31
+ autoload :DSL, 'active_admin/dsl'
32
+ autoload :Event, 'active_admin/event'
33
+ autoload :FormBuilder, 'active_admin/form_builder'
34
+ autoload :Inputs, 'active_admin/inputs'
35
+ autoload :Iconic, 'active_admin/iconic'
36
+ autoload :Menu, 'active_admin/menu'
37
+ autoload :MenuCollection, 'active_admin/menu_collection'
38
+ autoload :MenuItem, 'active_admin/menu_item'
39
+ autoload :Namespace, 'active_admin/namespace'
40
+ autoload :Page, 'active_admin/page'
41
+ autoload :PagePresenter, 'active_admin/page_presenter'
42
+ autoload :PageController, 'active_admin/page_controller'
43
+ autoload :PageDSL, 'active_admin/page_dsl'
44
+ autoload :Reloader, 'active_admin/reloader'
45
+ autoload :Resource, 'active_admin/resource'
46
+ autoload :ResourceController, 'active_admin/resource_controller'
47
+ autoload :ResourceDSL, 'active_admin/resource_dsl'
48
+ autoload :Scope, 'active_admin/scope'
49
+ autoload :ScopeChain, 'active_admin/helpers/scope_chain'
50
+ autoload :SidebarSection, 'active_admin/sidebar_section'
51
+ autoload :TableBuilder, 'active_admin/table_builder'
52
+ autoload :ViewFactory, 'active_admin/view_factory'
53
+ autoload :ViewHelpers, 'active_admin/view_helpers'
54
+ autoload :Views, 'active_admin/views'
55
+
56
+ class << self
57
+
58
+ attr_accessor :application
59
+
60
+ def application
61
+ @application ||= ::ActiveAdmin::Application.new
62
+ end
63
+
64
+ # Gets called within the initializer
65
+ def setup
66
+ application.setup!
67
+ yield(application)
68
+ application.prepare!
69
+ end
70
+
71
+ delegate :register, :to => :application
72
+ delegate :register_page, :to => :application
73
+ delegate :unload!, :to => :application
74
+ delegate :load!, :to => :application
75
+ delegate :routes, :to => :application
76
+
77
+ # A callback is triggered each time (before) Active Admin loads the configuration files.
78
+ # In development mode, this will happen whenever the user changes files. In production
79
+ # it only happens on boot.
80
+ #
81
+ # The block takes the current instance of [ActiveAdmin::Application]
82
+ #
83
+ # Example:
84
+ #
85
+ # ActiveAdmin.before_load do |app|
86
+ # # Do some stuff before AA loads
87
+ # end
88
+ #
89
+ # @param [Block] block A block to call each time (before) AA loads resources
90
+ def before_load(&block)
91
+ ActiveAdmin::Event.subscribe ActiveAdmin::Application::BeforeLoadEvent, &block
92
+ end
93
+
94
+ # A callback is triggered each time (after) Active Admin loads the configuration files. This
95
+ # is an opportunity to hook into Resources after they've been loaded.
96
+ #
97
+ # The block takes the current instance of [ActiveAdmin::Application]
98
+ #
99
+ # Example:
100
+ #
101
+ # ActiveAdmin.after_load do |app|
102
+ # app.namespaces.each do |name, namespace|
103
+ # puts "Namespace: #{name} loaded!"
104
+ # end
105
+ # end
106
+ #
107
+ # @param [Block] block A block to call each time (after) AA loads resources
108
+ def after_load(&block)
109
+ ActiveAdmin::Event.subscribe ActiveAdmin::Application::AfterLoadEvent, &block
110
+ end
111
+
112
+ end
113
+
114
+ end
115
+
116
+ # Require internal plugins
117
+ require 'active_admin/batch_actions'
118
+ require 'active_admin/filters'
119
+
120
+ # Require ORM-specific plugins
121
+ require 'active_admin/orm/active_record' if defined? ActiveRecord
122
+ require 'active_admin/orm/mongoid' if defined? Mongoid
123
+
124
+ # Load gem-specific code only if that gem is being used
125
+ require 'active_admin/cancan_adapter' if Gem.loaded_specs['cancan']
@@ -0,0 +1 @@
1
+ require 'active_admin'
@@ -0,0 +1,16 @@
1
+ module ActiveAdmin
2
+ module Generators
3
+ class AssetsGenerator < Rails::Generators::Base
4
+
5
+ def self.source_root
6
+ @_active_admin_source_root ||= File.expand_path("../templates", __FILE__)
7
+ end
8
+
9
+ def install_assets
10
+ template 'active_admin.js.coffee', 'app/assets/javascripts/active_admin.js.coffee'
11
+ template 'active_admin.css.scss', 'app/assets/stylesheets/active_admin.css.scss'
12
+ end
13
+
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,17 @@
1
+ // SASS variable overrides must be declared before loading up Active Admin's styles.
2
+ //
3
+ // To view the variables that Active Admin provides, take a look at
4
+ // `app/assets/stylesheets/active_admin/mixins/_variables.css.scss` in the
5
+ // Active Admin source.
6
+ //
7
+ // For example, to change the sidebar width:
8
+ // $sidebar-width: 242px;
9
+
10
+ // Active Admin's got SASS!
11
+ @import "active_admin/mixins";
12
+ @import "active_admin/base";
13
+
14
+ // Overriding any non-variable SASS must be done after the fact.
15
+ // For example, to change the default status-tag color:
16
+ //
17
+ // .status_tag { background: #6090DB; }
@@ -0,0 +1 @@
1
+ #= require active_admin/base
@@ -0,0 +1,86 @@
1
+ module ActiveAdmin
2
+ module Generators
3
+ class Error < Rails::Generators::Error
4
+ end
5
+
6
+ class DeviseGenerator < Rails::Generators::NamedBase
7
+ desc "Creates an admin user and uses Devise for authentication"
8
+ argument :name, :type => :string, :default => "AdminUser"
9
+
10
+ class_option :registerable, :type => :boolean, :default => false,
11
+ :desc => "Should the generated resource be registerable?"
12
+
13
+ RESERVED_NAMES = [:active_admin_user]
14
+
15
+ def install_devise
16
+ require 'devise'
17
+ if File.exists?(File.join(destination_root, "config", "initializers", "devise.rb"))
18
+ log :generate, "No need to install devise, already done."
19
+ else
20
+ log :generate, "devise:install"
21
+ invoke "devise:install"
22
+ end
23
+ end
24
+
25
+ def create_admin_user
26
+ if RESERVED_NAMES.include?(name.underscore)
27
+ raise Error, "The name #{name} is reserved by Active Admin"
28
+ end
29
+ invoke "devise", [name]
30
+ end
31
+
32
+ def remove_registerable_from_model
33
+ unless options[:registerable]
34
+ model_file = File.join(destination_root, "app", "models", "#{file_path}.rb")
35
+ gsub_file model_file, /\:registerable([.]*,)?/, ""
36
+ end
37
+ end
38
+
39
+ # This fixes a bug in the 3.0.0 release of Devise. For more info:
40
+ # https://github.com/plataformatec/devise/issues/2515
41
+ def add_attr_accessible_if_missing
42
+ require 'devise/version'
43
+ if ::Devise::VERSION == '3.0.0'
44
+ if Rails::VERSION::MAJOR == 3 && !defined?(ActionController::StrongParameters)
45
+ model = File.join(destination_root, "app", "models", "#{file_path}.rb")
46
+ inject_into_file model, "\n attr_accessible :email, :password, :password_confirmation, :remember_me\n",
47
+ :before => /end\s*\z/
48
+ end
49
+ end
50
+ end
51
+
52
+ def add_attr_accessible_if_needed
53
+ unless Rails::VERSION::MAJOR > 3 && !defined? ProtectedAttributes
54
+ model_file = File.join(destination_root, "app", "models", "#{file_path}.rb")
55
+ inject_into_file model_file, " attr_accessible :email, :password, :password_confirmation, :remember_me\n", before: /end\n*\z/
56
+ end
57
+ end
58
+
59
+ def set_namespace_for_path
60
+ routes_file = File.join(destination_root, "config", "routes.rb")
61
+ gsub_file routes_file, /devise_for :#{plural_table_name}$/, "devise_for :#{plural_table_name}, ActiveAdmin::Devise.config"
62
+ end
63
+
64
+ def add_default_user_to_migration
65
+ # Don't assume that we have a migration!
66
+ devise_migration_file = Dir["db/migrate/*_devise_create_#{table_name}.rb"].first
67
+ return if devise_migration_file.nil?
68
+
69
+ devise_migration_content = File.read(devise_migration_file)
70
+
71
+ if devise_migration_content["def change"]
72
+ inject_into_file devise_migration_file,
73
+ "def migrate(direction)\n super\n # Create a default user\n #{class_name}.create!(:email => 'admin@example.com', :password => 'password', :password_confirmation => 'password') if direction == :up\n end\n\n ",
74
+ :before => "def change"
75
+ elsif devise_migration_content[/def (self.)?up/]
76
+ inject_into_file devise_migration_file,
77
+ "# Create a default user\n #{class_name}.create!(:email => 'admin@example.com', :password => 'password', :password_confirmation => 'password')\n\n ",
78
+ :before => "add_index :#{table_name}, :email"
79
+ else
80
+ puts devise_migration_content
81
+ raise "Failed to add default admin user to migration."
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,46 @@
1
+ require 'rails/generators/active_record'
2
+
3
+ module ActiveAdmin
4
+ module Generators
5
+ class InstallGenerator < ActiveRecord::Generators::Base
6
+ desc "Installs Active Admin and generates the necessary migrations"
7
+ argument :name, :type => :string, :default => "AdminUser"
8
+
9
+ hook_for :users, :default => "devise", :desc => "Admin user generator to run. Skip with --skip-users"
10
+
11
+ def self.source_root
12
+ @_active_admin_source_root ||= File.expand_path("../templates", __FILE__)
13
+ end
14
+
15
+ def copy_initializer
16
+ @underscored_user_name = name.underscore
17
+ template 'active_admin.rb.erb', 'config/initializers/active_admin.rb'
18
+ end
19
+
20
+ def setup_directory
21
+ empty_directory "app/admin"
22
+ template 'dashboard.rb', 'app/admin/dashboard.rb'
23
+ if options[:users].present?
24
+ @user_class = name
25
+ template 'admin_user.rb.erb', "app/admin/#{name.underscore}.rb"
26
+ end
27
+ end
28
+
29
+ def setup_routes
30
+ if ARGV.include? "--skip-users"
31
+ route "ActiveAdmin.routes(self)"
32
+ else # Ensure Active Admin routes occur after Devise routes so that Devise has higher priority
33
+ inject_into_file "config/routes.rb", "\n ActiveAdmin.routes(self)", :after => /devise_for.*/
34
+ end
35
+ end
36
+
37
+ def create_assets
38
+ generate "active_admin:assets"
39
+ end
40
+
41
+ def create_migrations
42
+ migration_template 'migrations/create_active_admin_comments.rb', 'db/migrate/create_active_admin_comments.rb'
43
+ end
44
+ end
45
+ end
46
+ end