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,78 @@
1
+ require 'inherited_resources'
2
+
3
+ require 'active_admin/base_controller/authorization'
4
+ require 'active_admin/base_controller/menu'
5
+
6
+ module ActiveAdmin
7
+ # BaseController for ActiveAdmin.
8
+ # It implements ActiveAdmin controllers core features.
9
+ class BaseController < ::InheritedResources::Base
10
+ helper ::ActiveAdmin::ViewHelpers
11
+
12
+ layout :determine_active_admin_layout
13
+
14
+ before_filter :only_render_implemented_actions
15
+ before_filter :authenticate_active_admin_user
16
+
17
+ class << self
18
+ # Ensure that this method is available for the DSL
19
+ public :actions
20
+
21
+ # Reference to the Resource object which initialized
22
+ # this controller
23
+ attr_accessor :active_admin_config
24
+ end
25
+
26
+ # By default Rails will render un-implemented actions when the view exists. Becuase Active
27
+ # Admin allows you to not render any of the actions by using the #actions method, we need
28
+ # to check if they are implemented.
29
+ def only_render_implemented_actions
30
+ raise AbstractController::ActionNotFound unless action_methods.include?(params[:action])
31
+ end
32
+
33
+ include Menu
34
+ include Authorization
35
+
36
+ private
37
+
38
+ # Calls the authentication method as defined in ActiveAdmin.authentication_method
39
+ def authenticate_active_admin_user
40
+ send(active_admin_namespace.authentication_method) if active_admin_namespace.authentication_method
41
+ end
42
+
43
+ def current_active_admin_user
44
+ send(active_admin_namespace.current_user_method) if active_admin_namespace.current_user_method
45
+ end
46
+ helper_method :current_active_admin_user
47
+
48
+ def current_active_admin_user?
49
+ !!current_active_admin_user
50
+ end
51
+ helper_method :current_active_admin_user?
52
+
53
+ def active_admin_config
54
+ self.class.active_admin_config
55
+ end
56
+ helper_method :active_admin_config
57
+
58
+ def active_admin_namespace
59
+ active_admin_config.namespace
60
+ end
61
+ helper_method :active_admin_namespace
62
+
63
+
64
+ ACTIVE_ADMIN_ACTIONS = [:index, :show, :new, :create, :edit, :update, :destroy]
65
+
66
+ # Determine which layout to use.
67
+ #
68
+ # 1. If we're rendering a standard Active Admin action, we want layout(false)
69
+ # because these actions are subclasses of the Base page (which implements
70
+ # all the required layout code)
71
+ # 2. If we're rendering a custom action, we'll use the active_admin layout so
72
+ # that users can render any template inside Active Admin.
73
+ def determine_active_admin_layout
74
+ ACTIVE_ADMIN_ACTIONS.include?(params[:action].to_sym) ? false : 'active_admin'
75
+ end
76
+
77
+ end
78
+ end
@@ -0,0 +1,24 @@
1
+ module ActiveAdmin
2
+ module BatchActions
3
+ module Controller
4
+
5
+ # Controller Action that get's called when submitting the batch action form
6
+ def batch_action
7
+ if selected_batch_action
8
+ selected_ids = params[:collection_selection] || []
9
+ instance_exec selected_ids, &selected_batch_action.block
10
+ else
11
+ raise "Couldn't find batch action \"#{params[:batch_action]}\""
12
+ end
13
+ end
14
+
15
+ protected
16
+
17
+ def selected_batch_action
18
+ return unless params[:batch_action].present?
19
+ active_admin_config.batch_actions.detect { |action| action.sym.to_s == params[:batch_action] }
20
+ end
21
+
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,127 @@
1
+ module ActiveAdmin
2
+
3
+ module BatchActions
4
+ module ResourceExtension
5
+ def initialize(*)
6
+ super
7
+ @batch_actions = {}
8
+ add_default_batch_actions
9
+ end
10
+
11
+ # @return [Array] The set of batch actions for this resource
12
+ def batch_actions
13
+ batch_actions_enabled? ? @batch_actions.values.sort : []
14
+ end
15
+
16
+ # @return [Boolean] If batch actions are enabled for this resource
17
+ def batch_actions_enabled?
18
+ # If the resource config has been set, use it. Otherwise
19
+ # return the namespace setting
20
+ @batch_actions_enabled.nil? ? namespace.batch_actions : @batch_actions_enabled
21
+ end
22
+
23
+ # Disable or Enable batch actions for this resource
24
+ # Set to `nil` to inherit the setting from the namespace
25
+ def batch_actions=(bool)
26
+ @batch_actions_enabled = bool
27
+ end
28
+
29
+ # Add a new batch item to a resource
30
+ # @param [String] title
31
+ # @param [Hash] options
32
+ # => :if is a proc that will be called to determine if the BatchAction should be displayed
33
+ # => :sort_order is used to sort the batch actions ascending
34
+ # => :confirm is a string which the user will have to accept in order to process the action
35
+ #
36
+ def add_batch_action(sym, title, options = {}, &block)
37
+ @batch_actions[sym] = ActiveAdmin::BatchAction.new(sym, title, options, &block)
38
+ end
39
+
40
+ # Remove a batch action
41
+ # @param [Symbol] sym
42
+ # @returns [ActiveAdmin::BatchAction] the batch action, if it was present
43
+ #
44
+ def remove_batch_action(sym)
45
+ @batch_actions.delete(sym.to_sym)
46
+ end
47
+
48
+ # Clears all the existing batch actions for this resource
49
+ def clear_batch_actions!
50
+ @batch_actions = {}
51
+ end
52
+
53
+ # Path to the batch action itself
54
+ def batch_action_path(params = {})
55
+ [route_collection_path(params), "batch_action"].join("/")
56
+ end
57
+
58
+ private
59
+
60
+ # @return [ActiveAdmin::BatchAction] The default "delete" action
61
+ def add_default_batch_actions
62
+ destroy_options = {
63
+ :priority => 100,
64
+ :confirm => proc { I18n.t('active_admin.batch_actions.delete_confirmation', :plural_model => active_admin_config.plural_resource_label.downcase) },
65
+ :if => proc{ controller.action_methods.include?('destroy') && authorized?(ActiveAdmin::Auth::DESTROY, active_admin_config.resource_class) }
66
+ }
67
+
68
+ add_batch_action :destroy, proc { I18n.t('active_admin.delete') }, destroy_options do |selected_ids|
69
+ active_admin_config.resource_class.find(selected_ids).each { |r| r.destroy }
70
+
71
+ redirect_to active_admin_config.route_collection_path(params),
72
+ :notice => I18n.t("active_admin.batch_actions.succesfully_destroyed",
73
+ :count => selected_ids.count,
74
+ :model => active_admin_config.resource_label.downcase,
75
+ :plural_model => active_admin_config.plural_resource_label(:count => selected_ids.count).downcase)
76
+ end
77
+ end
78
+
79
+ end
80
+ end
81
+
82
+ class BatchAction
83
+
84
+ include Comparable
85
+
86
+ attr_reader :block, :title, :sym, :confirm
87
+
88
+ # Create a Batch Action
89
+ #
90
+ # Examples:
91
+ #
92
+ # BatchAction.new :flag
93
+ # => Will create an action that appears in the action list popover
94
+ #
95
+ # BatchAction.new( :flag ) { |selection| redirect_to collection_path, :notice => "#{selection.length} users flagged" }
96
+ # => Will create an action that uses a block to process the request (which receives one paramater of the selected objects)
97
+ #
98
+ # BatchAction.new( "Perform Long Operation on the" ) { |selection| }
99
+ # => You can create batch actions with a title instead of a Symbol
100
+ #
101
+ # BatchAction.new( :flag, :if => proc { can? :flag, AdminUser } ) { |selection| }
102
+ # => You can provide an optional :if proc to optionally display the batch action
103
+ #
104
+ def initialize(sym, title, options = {}, &block)
105
+ @sym, @title, @options, @block, @confirm = sym, title, options, block, options[:confirm]
106
+ @block ||= proc {}
107
+ end
108
+
109
+ # Returns the display if block. If the block was not explicitly defined
110
+ # a default block always returning true will be returned.
111
+ def display_if_block
112
+ @options[:if] || proc { true }
113
+ end
114
+
115
+ # Used for sorting
116
+ def priority
117
+ @options[:priority] || 10
118
+ end
119
+
120
+ # sort operator
121
+ def <=>(other)
122
+ self.priority <=> other.priority
123
+ end
124
+
125
+ end
126
+
127
+ end
@@ -0,0 +1,35 @@
1
+ require 'active_admin/component'
2
+
3
+ module ActiveAdmin
4
+ module BatchActions
5
+
6
+ # Build an BatchActionForm
7
+ class BatchActionForm < ActiveAdmin::Component
8
+ builder_method :batch_action_form
9
+
10
+ attr_reader :prefix_html
11
+
12
+ def build(options = {}, &block)
13
+ options[:id] ||= "collection_selection"
14
+
15
+ # Open a form
16
+ text_node form_tag(active_admin_config.batch_action_path(params), :id => options[:id])
17
+ input(:name => :batch_action, :id => :batch_action, :type => :hidden)
18
+
19
+ super(options)
20
+ end
21
+
22
+ # Override the default to_s to include a closing form tag
23
+ def to_s
24
+ content + closing_form_tag
25
+ end
26
+
27
+ private
28
+
29
+ def closing_form_tag
30
+ '</form>'.html_safe
31
+ end
32
+
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,28 @@
1
+ require 'active_admin/views/components/action_list_popover'
2
+
3
+ module ActiveAdmin
4
+ module BatchActions
5
+ # Build an BatchActionPopover
6
+ class BatchActionPopover < ActiveAdmin::Views::ActionListPopover
7
+ builder_method :batch_action_popover
8
+
9
+ def build(options = {}, &block)
10
+ options[:id] ||= "batch_actions_popover"
11
+ super(options)
12
+ end
13
+
14
+ def action(batch_action, options = {})
15
+ options[:class] ||= []
16
+ options[:class] += %w(batch_action)
17
+ options.merge! "data-action" => batch_action.sym,
18
+ "data-confirm" => batch_action.confirm
19
+
20
+ title = I18n.t("active_admin.batch_actions.labels.#{batch_action.sym}", :default => batch_action.title)
21
+ label = I18n.t("active_admin.batch_actions.action_label", :title => title)
22
+
23
+ super(label, "#", options)
24
+ end
25
+
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,66 @@
1
+ require 'active_admin/component'
2
+
3
+ module ActiveAdmin
4
+ module BatchActions
5
+
6
+ class BatchActionSelector < ActiveAdmin::Component
7
+ builder_method :batch_action_selector
8
+
9
+ # Build a new batch actions selector
10
+ #
11
+ # @param [Array] batch_actions An array of batch actions
12
+ def build(batch_actions)
13
+ @batch_actions = Array(batch_actions)
14
+ @drop_down = build_drop_down
15
+ end
16
+
17
+ # We don't want to wrap the action list (or any other children) in
18
+ # an unecessary div, so instead we just return the children
19
+ def to_s
20
+ children.to_s
21
+ end
22
+
23
+ private
24
+
25
+ def build_drop_down
26
+ dropdown_menu I18n.t("active_admin.batch_actions.button_label"),
27
+ :id => "batch_actions_selector",
28
+ :button => { :class => "disabled" } do
29
+ batch_actions_to_display.each do |batch_action|
30
+ confirmation_text = render_or_call_method_or_proc_on(self, batch_action.confirm)
31
+
32
+ options = {
33
+ :class => "batch_action",
34
+ "data-action" => batch_action.sym,
35
+ "data-confirm" => confirmation_text
36
+ }
37
+
38
+ default_title = render_or_call_method_or_proc_on(self, batch_action.title)
39
+ title = I18n.t("active_admin.batch_actions.labels.#{batch_action.sym}", :default => default_title)
40
+ label = I18n.t("active_admin.batch_actions.action_label", :title => title)
41
+
42
+ item label, "#", options
43
+ end
44
+ end
45
+ end
46
+
47
+ # Return the set of batch actions that should be displayed
48
+ def batch_actions_to_display
49
+ @batch_actions.select do |batch_action|
50
+ call_method_or_proc_on(self, batch_action.display_if_block)
51
+ end
52
+ end
53
+
54
+ # def build_batch_action_button
55
+ # a :class => 'table_tools_button dropdown_button disabled', :href => "#batch_actions_popover", :id => "batch_actions_button" do
56
+ # text_node I18n.t("active_admin.batch_actions.button_label")
57
+ # end
58
+ # end
59
+
60
+ # def build_batch_action_popover
61
+ # end
62
+
63
+ end
64
+
65
+ end
66
+ end
@@ -0,0 +1,37 @@
1
+ require 'active_admin/component'
2
+
3
+ module ActiveAdmin
4
+ module BatchActions
5
+
6
+ # Creates the toggle checkbox used to toggle the collection selection on/off
7
+ class ResourceSelectionToggleCell < ActiveAdmin::Component
8
+ builder_method :resource_selection_toggle_cell
9
+
10
+ def build
11
+ input( :type => "checkbox", :id => "collection_selection_toggle_all", :name => "collection_selection_toggle_all", :class => "toggle_all" )
12
+ end
13
+ end
14
+
15
+ # Creates the checkbox used to select a resource in the collection selection
16
+ class ResourceSelectionCell < ActiveAdmin::Component
17
+ builder_method :resource_selection_cell
18
+
19
+ def build(resource)
20
+ input :type => "checkbox", :id => "batch_action_item_#{resource.id}", :value => resource.id, :class => "collection_selection", :name => "collection_selection[]"
21
+ end
22
+ end
23
+
24
+ # Creates a wrapper panel for all index pages, except for the table, as the table has the checkbox in the thead
25
+ class ResourceSelectionTogglePanel < ActiveAdmin::Component
26
+ builder_method :resource_selection_toggle_panel
27
+
28
+ def build
29
+ super(:id => "collection_selection_toggle_panel")
30
+ resource_selection_toggle_cell
31
+ div(:id => "collection_selection_toggle_explaination" ) { I18n.t('active_admin.batch_actions.selection_toggle_explanation', :default => "(Toggle Selection)") }
32
+ end
33
+
34
+ end
35
+
36
+ end
37
+ end
@@ -0,0 +1,17 @@
1
+ ActiveAdmin.before_load do |app|
2
+ require "active_admin/batch_actions/resource_extension"
3
+ require "active_admin/batch_actions/controller"
4
+
5
+ # Add our Extensions
6
+ ActiveAdmin::Resource.send :include, ActiveAdmin::BatchActions::ResourceExtension
7
+ ActiveAdmin::ResourceController.send :include, ActiveAdmin::BatchActions::Controller
8
+
9
+ # Require all the views
10
+ require "active_admin/batch_actions/views/batch_action_form"
11
+ require "active_admin/batch_actions/views/batch_action_popover"
12
+ require "active_admin/batch_actions/views/selection_cells"
13
+ require "active_admin/batch_actions/views/batch_action_selector"
14
+
15
+ # Register the views with the view factory
16
+ app.view_factory.register :batch_action_selector => ActiveAdmin::BatchActions::BatchActionSelector
17
+ end
@@ -0,0 +1,87 @@
1
+ module ActiveAdmin
2
+ module Callbacks
3
+ extend ActiveSupport::Concern
4
+
5
+ protected
6
+
7
+ # Simple callback system. Implements before and after callbacks for
8
+ # use within the controllers.
9
+ #
10
+ # We didn't use the ActiveSupport callbacks becuase they do not support
11
+ # passing in any arbitrary object into the callback method (which we
12
+ # need to do)
13
+
14
+ def call_callback_with(method, *args)
15
+ case method
16
+ when Symbol
17
+ send(method, *args)
18
+ when Proc
19
+ instance_exec(*args, &method)
20
+ else
21
+ raise "Please register with callbacks using a symbol or a block/proc."
22
+ end
23
+ end
24
+
25
+ module ClassMethods
26
+
27
+ # Define a new callback.
28
+ #
29
+ # Example:
30
+ #
31
+ # class MyClassWithCallbacks
32
+ # include ActiveAdmin::Callbacks
33
+ #
34
+ # define_active_admin_callbacks :save
35
+ #
36
+ # before_save do |arg1, arg2|
37
+ # # runs before save
38
+ # end
39
+ #
40
+ # after_save :call_after_save
41
+ #
42
+ # def save
43
+ # # Will run before, yield, then after
44
+ # run_save_callbacks :arg1, :arg2 do
45
+ # save!
46
+ # end
47
+ # end
48
+ #
49
+ # protected
50
+ #
51
+ # def call_after_save(arg1, arg2)
52
+ # # runs after save
53
+ # end
54
+ # end
55
+ #
56
+ def define_active_admin_callbacks(*names)
57
+ names.each do |name|
58
+ [:before, :after].each do |type|
59
+
60
+ # Define a method to set the callback
61
+ class_eval(<<-EOS, __FILE__, __LINE__ + 1)
62
+ # def self.before_create_callbacks
63
+ def self.#{type}_#{name}_callbacks
64
+ @#{type}_#{name}_callbacks ||= []
65
+ end
66
+
67
+ # def self.before_create
68
+ def self.#{type}_#{name}(method = nil, &block)
69
+ #{type}_#{name}_callbacks << (method || block)
70
+ end
71
+ EOS
72
+ end
73
+
74
+ # Define a method to run the callbacks
75
+ class_eval(<<-EOS, __FILE__, __LINE__ + 1)
76
+ def run_#{name}_callbacks(*args)
77
+ self.class.before_#{name}_callbacks.each{|callback| call_callback_with(callback, *args)}
78
+ value = yield if block_given?
79
+ self.class.after_#{name}_callbacks.each{|callback| call_callback_with(callback, *args)}
80
+ return value
81
+ end
82
+ EOS
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,40 @@
1
+ require 'cancan'
2
+
3
+ # Add a setting to the application to configure the ability
4
+ ActiveAdmin::Application.inheritable_setting :cancan_ability_class, "Ability"
5
+
6
+ module ActiveAdmin
7
+
8
+ class CanCanAdapter < AuthorizationAdapter
9
+
10
+ def authorized?(action, subject = nil)
11
+ cancan_ability.can?(action, subject)
12
+ end
13
+
14
+ def cancan_ability
15
+ @cancan_ability ||= initialize_cancan_ability
16
+ end
17
+
18
+ def scope_collection(collection, action = ActiveAdmin::Auth::READ)
19
+ collection.accessible_by(cancan_ability, action)
20
+ end
21
+
22
+ private
23
+
24
+ # The setting allows the class to be stored as a string
25
+ # to enable reloading in development.
26
+ def initialize_cancan_ability
27
+ ability_class_name = resource.namespace.cancan_ability_class
28
+
29
+ if ability_class_name.is_a?(String)
30
+ ability_class = ActiveSupport::Dependencies.constantize(ability_class_name)
31
+ else
32
+ ability_class = ability_class_name
33
+ end
34
+
35
+ ability_class.new(user)
36
+ end
37
+
38
+ end
39
+
40
+ end
@@ -0,0 +1,5 @@
1
+ module ActiveAdmin
2
+ class Component < Arbre::Component
3
+
4
+ end
5
+ end
@@ -0,0 +1,12 @@
1
+ module ActiveAdmin
2
+ class ControllerAction
3
+ attr_reader :name
4
+ def initialize(name, options = {})
5
+ @name, @options = name, options
6
+ end
7
+
8
+ def http_verb
9
+ @options[:method] ||= :get
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,49 @@
1
+ module ActiveAdmin
2
+ # CSVBuilder stores CSV configuration
3
+ #
4
+ # Usage example:
5
+ #
6
+ # csv_builder = CSVBuilder.new
7
+ # csv_builder.column :id
8
+ # csv_builder.column("Name") { |resource| resource.full_name }
9
+ #
10
+ # csv_builder = CSVBuilder.new :col_sep => ";"
11
+ # csv_builder.column :id
12
+ #
13
+ #
14
+ class CSVBuilder
15
+
16
+ # Return a default CSVBuilder for a resource
17
+ # The CSVBuilder's columns would be Id followed by this
18
+ # resource's content columns
19
+ def self.default_for_resource(resource)
20
+ new.tap do |csv_builder|
21
+ csv_builder.column(:id)
22
+ resource.content_columns.each do |content_column|
23
+ csv_builder.column(content_column.name.to_sym)
24
+ end
25
+ end
26
+ end
27
+
28
+ attr_reader :columns, :options
29
+
30
+ def initialize(options={}, &block)
31
+ @columns, @options = [], options
32
+ instance_eval &block if block_given?
33
+ end
34
+
35
+ # Add a column
36
+ def column(name, &block)
37
+ @columns << Column.new(name, block)
38
+ end
39
+
40
+ class Column
41
+ attr_reader :name, :data
42
+
43
+ def initialize(name, block = nil)
44
+ @name = name.is_a?(Symbol) ? name.to_s.titleize : name
45
+ @data = block || name.to_sym
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,36 @@
1
+ module ActiveAdmin
2
+ module Deprecation
3
+ module_function
4
+
5
+ def warn(message, callstack = caller)
6
+ ActiveSupport::Deprecation.warn "Active Admin: #{message}", callstack
7
+ end
8
+
9
+ # Deprecate a method.
10
+ #
11
+ # @param [Module] klass the Class or Module to deprecate the method on
12
+ # @param [Symbol] method the method to deprecate
13
+ # @param [String] message the message to display to the end user
14
+ #
15
+ # Example:
16
+ #
17
+ # class MyClass
18
+ # def my_method
19
+ # # ...
20
+ # end
21
+ # ActiveAdmin::Deprecation.deprecate self, :my_method,
22
+ # "MyClass#my_method is being removed in the next release"
23
+ # end
24
+ #
25
+ def deprecate(klass, method, message)
26
+ klass.class_eval <<-EOC, __FILE__, __LINE__ + 1
27
+ alias_method :deprecated_#{method}, :#{method}
28
+ def #{method}(*args)
29
+ ActiveAdmin::Deprecation.warn('#{message}', caller)
30
+ send(:deprecated_#{method}, *args)
31
+ end
32
+ EOC
33
+ end
34
+
35
+ end
36
+ end