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,70 @@
1
+ require 'devise'
2
+
3
+ module ActiveAdmin
4
+ module Devise
5
+
6
+ def self.config
7
+ config = {
8
+ :path => ActiveAdmin.application.default_namespace,
9
+ :controllers => ActiveAdmin::Devise.controllers,
10
+ :path_names => { :sign_in => 'login', :sign_out => "logout" }
11
+ }
12
+
13
+ if ::Devise.respond_to?(:sign_out_via)
14
+ logout_methods = [::Devise.sign_out_via, ActiveAdmin.application.logout_link_method].flatten.uniq
15
+ config.merge!( :sign_out_via => logout_methods)
16
+ end
17
+
18
+ config
19
+ end
20
+
21
+ def self.controllers
22
+ {
23
+ :sessions => "active_admin/devise/sessions",
24
+ :passwords => "active_admin/devise/passwords",
25
+ :unlocks => "active_admin/devise/unlocks"
26
+ }
27
+ end
28
+
29
+ module Controller
30
+ extend ::ActiveSupport::Concern
31
+ included do
32
+ layout 'active_admin_logged_out'
33
+ helper ::ActiveAdmin::ViewHelpers
34
+ end
35
+
36
+ # Redirect to the default namespace on logout
37
+ def root_path
38
+ namespace = ActiveAdmin.application.default_namespace.presence
39
+ root_path_method = [namespace, :root_path].compact.join('_')
40
+
41
+ url_helpers = Rails.application.routes.url_helpers
42
+
43
+ path = if url_helpers.respond_to? root_path_method
44
+ url_helpers.send root_path_method
45
+ else
46
+ # Guess a root_path when url_helpers not helpful
47
+ "/#{namespace}"
48
+ end
49
+
50
+ # NOTE: `relative_url_root` is deprecated by rails.
51
+ # Remove prefix here if it is removed completely.
52
+ prefix = Rails.configuration.action_controller[:relative_url_root] || ''
53
+ prefix + path
54
+ end
55
+ end
56
+
57
+ class SessionsController < ::Devise::SessionsController
58
+ include ::ActiveAdmin::Devise::Controller
59
+ end
60
+
61
+ class PasswordsController < ::Devise::PasswordsController
62
+ include ::ActiveAdmin::Devise::Controller
63
+ end
64
+
65
+ class UnlocksController < ::Devise::UnlocksController
66
+ include ::ActiveAdmin::Devise::Controller
67
+ end
68
+
69
+ end
70
+ end
@@ -0,0 +1,166 @@
1
+ module ActiveAdmin
2
+
3
+ #
4
+ # The Active Admin DSL. This class is where all the registration blocks
5
+ # are instance eval'd. This is the central place for the API given to
6
+ # users of Active Admin
7
+ #
8
+ class DSL
9
+
10
+ def initialize(config)
11
+ @config = config
12
+ end
13
+
14
+ # Runs the registration block inside this object
15
+ def run_registration_block(&block)
16
+ instance_eval &block if block_given?
17
+ end
18
+
19
+ # The instance of ActiveAdmin::Config that's being registered
20
+ # currently. You can use this within your registration blocks to
21
+ # modify options:
22
+ #
23
+ # eg:
24
+ #
25
+ # ActiveAdmin.register Post do
26
+ # config.sort_order = "id_desc"
27
+ # end
28
+ #
29
+ def config
30
+ @config
31
+ end
32
+
33
+ # Include a module with this resource. The modules's `included` method
34
+ # is called with the instance of the `ActiveAdmin::DSL` passed into it.
35
+ #
36
+ # eg:
37
+ #
38
+ # module HelpSidebar
39
+ #
40
+ # def self.included(dsl)
41
+ # dsl.sidebar "Help" do
42
+ # "Call us for Help"
43
+ # end
44
+ # end
45
+ #
46
+ # end
47
+ #
48
+ # ActiveAdmin.register Post do
49
+ # include HelpSidebar
50
+ # end
51
+ #
52
+ # @param [Module] mod A module to include
53
+ #
54
+ # @returns [Nil]
55
+ def include(mod)
56
+ mod.included(self)
57
+ end
58
+
59
+ # Returns the controller for this resource. If you pass a
60
+ # block, it will be eval'd in the controller
61
+ #
62
+ # Example:
63
+ #
64
+ # ActiveAdmin.register Post do
65
+ #
66
+ # controller do
67
+ # def some_method_on_controller
68
+ # # Method gets added to Admin::PostsController
69
+ # end
70
+ # end
71
+ #
72
+ # end
73
+ #
74
+ def controller(&block)
75
+ @config.controller.class_eval(&block) if block_given?
76
+ @config.controller
77
+ end
78
+
79
+ # Add a new action item to the resource
80
+ #
81
+ # @param [Hash] options valid keys include:
82
+ # :only: A single or array of controller actions to display
83
+ # this action item on.
84
+ # :except: A single or array of controller actions not to
85
+ # display this action item on.
86
+ def action_item(options = {}, &block)
87
+ config.add_action_item(options, &block)
88
+ end
89
+
90
+ # Add a new batch action item to the resource
91
+ # Provide a symbol/string to register the action, options, & block to execute on request
92
+ #
93
+ # To unregister an existing action, just provide the symbol & pass false as the second param
94
+ #
95
+ # @param [Symbol or String] title
96
+ # @param [Hash] options valid keys include:
97
+ # => :if is a proc that will be called to determine if the BatchAction should be displayed
98
+ # => :sort_order is used to sort the batch actions ascending
99
+ # => :confirm is a string which the user will have to accept in order to process the action
100
+ #
101
+ def batch_action(title, options = {}, &block)
102
+ # Create symbol & title information
103
+ if title.is_a? String
104
+ sym = title.titleize.gsub(' ', '').underscore.to_sym
105
+ else
106
+ sym = title
107
+ title = sym.to_s.titleize
108
+ end
109
+
110
+ # Either add/remove the batch action
111
+ unless options == false
112
+ config.add_batch_action( sym, title, options, &block )
113
+ else
114
+ config.remove_batch_action sym
115
+ end
116
+ end
117
+
118
+ # Set the options that are available for the item that will be placed in the global
119
+ # navigation of the menu.
120
+ def menu(options = {})
121
+ config.menu_item_options = options
122
+ end
123
+
124
+ # Set the name of the navigation menu to display. This is mainly used in conjuction with the
125
+ # `#belongs_to` functionality.
126
+ #
127
+ # @param [Symbol] menu_name The name of the menu to display as the global navigation
128
+ # when viewing this resource. Defaults to a menu named `:default`.
129
+ #
130
+ # Pass a block returning the name of a menu you want rendered for the request, being
131
+ # executed in the context of the controller
132
+ #
133
+ def navigation_menu(menu_name=nil, &block)
134
+ config.navigation_menu_name = menu_name || block
135
+ end
136
+
137
+ # Rewrite breadcrumb links.
138
+ # Block will be executed inside controller.
139
+ # Block must return an array if you want to rewrite breadcrumb links.
140
+ #
141
+ # Example:
142
+ # ActiveAdmin.register Post do
143
+ #
144
+ # breadcrumb do
145
+ # [
146
+ # link_to('my piece', '/my/link/to/piece')
147
+ # ]
148
+ # end
149
+ # end
150
+ #
151
+ def breadcrumb(&block)
152
+ config.breadcrumb = block
153
+ end
154
+
155
+ def sidebar(name, options = {}, &block)
156
+ config.sidebar_sections << ActiveAdmin::SidebarSection.new(name, options, &block)
157
+ end
158
+
159
+ def decorate_with(decorator_class)
160
+ # Force storage as a string. This will help us with reloading issues.
161
+ # Assuming decorator_class.to_s will return the name of the class allows
162
+ # us to handle a string or a class.
163
+ config.decorator_class_name = "::#{ decorator_class }"
164
+ end
165
+ end
166
+ end
@@ -0,0 +1,7 @@
1
+ module ActiveAdmin
2
+ class Engine < ::Rails::Engine
3
+ initializer "ActiveAdmin precompile hook", :group => :all do |app|
4
+ app.config.assets.precompile += %w(active_admin.js active_admin.css active_admin/print.css)
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,33 @@
1
+ module ActiveAdmin
2
+
3
+ class EventDispatcher
4
+ def initialize
5
+ @events = {}
6
+ end
7
+
8
+ def clear_all_subscribers!
9
+ @events = {}
10
+ end
11
+
12
+ def subscribe(*event_names, &block)
13
+ event_names.each do |event|
14
+ @events[event] ||= []
15
+ @events[event] << block
16
+ end
17
+ end
18
+
19
+ def subscribers(event)
20
+ @events[event] || []
21
+ end
22
+
23
+ def dispatch(event, *args)
24
+ subscribers(event).each do |subscriber|
25
+ subscriber.call(*args)
26
+ end
27
+ end
28
+ end
29
+
30
+ # ActiveAdmin::Event is set to a dispatcher
31
+ Event = EventDispatcher.new
32
+
33
+ end
@@ -0,0 +1,21 @@
1
+ module ActiveAdmin
2
+ module Filters
3
+ module DSL
4
+
5
+ # For docs, please see ActiveAdmin::Filters::ResourceExtension#add_filter
6
+ def filter(attribute, options = {})
7
+ config.add_filter(attribute, options)
8
+ end
9
+
10
+ # For docs, please see ActiveAdmin::Filters::ResourceExtension#remove_filter
11
+ def remove_filter(attribute)
12
+ config.remove_filter(attribute)
13
+ end
14
+
15
+ # For docs, please see ActiveAdmin::Filters::ResourceExtension#preserve_default_filters!
16
+ def preserve_default_filters!
17
+ config.preserve_default_filters!
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,89 @@
1
+ module ActiveAdmin
2
+ module Filters
3
+
4
+ # This form builder defines methods to build filter forms such
5
+ # as the one found in the sidebar of the index page of a standard resource.
6
+ class FormBuilder < ::ActiveAdmin::FormBuilder
7
+ include ::ActiveAdmin::Filters::FormtasticAddons
8
+
9
+ def initialize(*args)
10
+ @use_form_buffer = true # force ActiveAdmin::FormBuilder to use the form buffer
11
+ super
12
+ end
13
+
14
+ def filter(method, options = {})
15
+ if method.present? && options[:as] ||= default_input_type(method)
16
+ input(method, options)
17
+ end
18
+ end
19
+
20
+ protected
21
+
22
+ # Returns the default filter type for a given attribute. If you want
23
+ # to use a custom search method, you have to specify the type yourself.
24
+ def default_input_type(method, options = {})
25
+ if method =~ /_(contains|starts_with|ends_with)\z/
26
+ :string
27
+ elsif reflection_for(method) || polymorphic_foreign_type?(method)
28
+ :select
29
+ elsif column = column_for(method)
30
+ case column.type
31
+ when :date, :datetime
32
+ :date_range
33
+ when :string, :text
34
+ :string
35
+ when :integer, :float, :decimal
36
+ :numeric
37
+ when :boolean
38
+ :boolean
39
+ end
40
+ end
41
+ end
42
+
43
+ def custom_input_class_name(as)
44
+ "Filter#{as.to_s.camelize}Input"
45
+ end
46
+
47
+ def active_admin_input_class_name(as)
48
+ "ActiveAdmin::Inputs::Filter#{as.to_s.camelize}Input"
49
+ end
50
+
51
+ end
52
+
53
+
54
+ # This module is included into the view
55
+ module ViewHelper
56
+
57
+ # Helper method to render a filter form
58
+ def active_admin_filters_form_for(search, filters, options = {})
59
+ defaults = { :builder => ActiveAdmin::Filters::FormBuilder,
60
+ :url => collection_path,
61
+ :html => {:class => 'filter_form'} }
62
+ required = { :html => {:method => :get},
63
+ :as => :q }
64
+ options = defaults.deep_merge(options).deep_merge(required)
65
+
66
+ form_for search, options do |f|
67
+ filters.each do |attribute, opts|
68
+ should = opts.delete(:if) || proc{ true }
69
+ shouldnt = opts.delete(:unless) || proc{ false }
70
+
71
+ if call_method_or_proc_on(self, should) && !call_method_or_proc_on(self, shouldnt)
72
+ f.filter attribute, opts
73
+ end
74
+ end
75
+
76
+ buttons = content_tag :div, :class => "buttons" do
77
+ f.submit(I18n.t('active_admin.filters.buttons.filter')) +
78
+ link_to(I18n.t('active_admin.filters.buttons.clear'), '#', :class => 'clear_filters_btn') +
79
+ hidden_field_tags_for(params, :except => [:q, :page])
80
+ end
81
+
82
+ f.form_buffers.last + buttons
83
+ end
84
+ end
85
+
86
+ end
87
+
88
+ end
89
+ end
@@ -0,0 +1,70 @@
1
+ module ActiveAdmin
2
+ module Filters
3
+ module FormtasticAddons
4
+
5
+ #
6
+ # The below are Formtastic method overrides that jump inside of the Ransack
7
+ # search object to get at the object being searched upon.
8
+ #
9
+
10
+ def humanized_method_name
11
+ if klass.respond_to?(:human_attribute_name)
12
+ klass.human_attribute_name(method)
13
+ else
14
+ method.to_s.send(builder.label_str_method)
15
+ end
16
+ end
17
+
18
+ def reflection_for(method)
19
+ klass.reflect_on_association(method) if klass.respond_to? :reflect_on_association
20
+ end
21
+
22
+ def column_for(method)
23
+ klass.columns_hash[method.to_s] if klass.respond_to? :columns_hash
24
+ end
25
+
26
+ def column
27
+ column_for method
28
+ end
29
+
30
+ #
31
+ # The below are custom methods that Formtastic does not provide.
32
+ #
33
+
34
+ # The resource class, unwrapped from Ransack
35
+ def klass
36
+ @object.object.klass
37
+ end
38
+
39
+ def polymorphic_foreign_type?(method)
40
+ klass.reflections.values.select{ |r| r.macro == :belongs_to && r.options[:polymorphic] }
41
+ .map(&:foreign_type).include? method.to_s
42
+ end
43
+
44
+ def searchable_through_association?(method = method)
45
+ ref = reflection_for(method)
46
+ ref.options[:through] && ref.through_reflection.klass.ransackable_attributes.include?(ref.foreign_key) if ref
47
+ end
48
+
49
+ #
50
+ # These help figure out whether the given method will be recognized by Ransack.
51
+ #
52
+
53
+ def seems_searchable?
54
+ has_predicate? || ransacker?
55
+ end
56
+
57
+ # If the given method has a predicate (like _eq or _lteq), it's pretty
58
+ # likely we're dealing with a valid search method.
59
+ def has_predicate?
60
+ !!Ransack::Predicate.detect_and_strip_from_string!(method.to_s)
61
+ end
62
+
63
+ # Ransack lets you define custom search methods, so we need to check for them.
64
+ def ransacker?
65
+ klass._ransackers.key? method.to_s
66
+ end
67
+
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,136 @@
1
+ module ActiveAdmin
2
+ module Filters
3
+
4
+ class Disabled < RuntimeError
5
+ def initialize
6
+ super "Can't remove a filter when filters are disabled. Enable filters with 'config.filters = true'"
7
+ end
8
+ end
9
+
10
+ module ResourceExtension
11
+
12
+ def initialize(*)
13
+ super
14
+ add_filters_sidebar_section
15
+ end
16
+
17
+ # Returns the filters for this resource. If filters are not enabled,
18
+ # it will always return an empty array.
19
+ #
20
+ # @return [Array] Filters that apply for this resource
21
+ def filters
22
+ return [] unless filters_enabled?
23
+ filter_lookup
24
+ end
25
+
26
+ # Setter to enable / disable filters on this resource.
27
+ #
28
+ # Set to `nil` to inherit the setting from the namespace
29
+ def filters=(bool)
30
+ @filters_enabled = bool
31
+ end
32
+
33
+ # @return [Boolean] If filters are enabled for this resource
34
+ def filters_enabled?
35
+ @filters_enabled.nil? ? namespace.filters : @filters_enabled
36
+ end
37
+
38
+ def preserve_default_filters!
39
+ @preserve_default_filters = true
40
+ end
41
+
42
+ def preserve_default_filters?
43
+ @preserve_default_filters == true
44
+ end
45
+
46
+ # Remove a filter for this resource. If filters are not enabled, this method
47
+ # will raise a RuntimeError
48
+ #
49
+ # @param [Symbol] attribute The attribute to not filter on
50
+ def remove_filter(attribute)
51
+ raise Disabled unless filters_enabled?
52
+
53
+ (@filters_to_remove ||= []) << attribute.to_sym
54
+ end
55
+
56
+ # Add a filter for this resource. If filters are not enabled, this method
57
+ # will raise a RuntimeError
58
+ #
59
+ # @param [Symbol] attribute The attribute to filter on
60
+ # @param [Hash] options The set of options that are passed through to
61
+ # ransack for the field definition.
62
+ def add_filter(attribute, options = {})
63
+ raise Disabled unless filters_enabled?
64
+
65
+ (@filters ||= {})[attribute.to_sym] = options
66
+ end
67
+
68
+ # Reset the filters to use defaults
69
+ def reset_filters!
70
+ @filters = nil
71
+ @filters_to_remove = nil
72
+ end
73
+
74
+ private
75
+
76
+ # Collapses the waveform, if you will, of which filters should be displayed.
77
+ # Removes filters and adds in default filters as desired.
78
+ def filter_lookup
79
+ filters = @filters.try(:deep_dup) || {}
80
+
81
+ if filters.empty? || preserve_default_filters?
82
+ default_filters.each do |f|
83
+ filters[f] ||= {}
84
+ end
85
+ end
86
+
87
+ if @filters_to_remove
88
+ @filters_to_remove.each &filters.method(:delete)
89
+ end
90
+
91
+ filters
92
+ end
93
+
94
+ # @return [Array] The array of default filters for this resource
95
+ def default_filters
96
+ default_association_filters + default_content_filters
97
+ end
98
+
99
+ # Returns a default set of filters for the associations
100
+ def default_association_filters
101
+ if resource_class.respond_to?(:reflect_on_all_associations)
102
+ poly, not_poly = resource_class.reflect_on_all_associations.partition{ |r| r.macro == :belongs_to && r.options[:polymorphic] }
103
+
104
+ # remove associations nested more than twice
105
+ not_poly.reject!{ |r| r.chain.length > 2 }
106
+
107
+ filters = poly.map(&:foreign_type) + not_poly.map(&:name)
108
+ filters.map &:to_sym
109
+ else
110
+ []
111
+ end
112
+ end
113
+
114
+ # Returns a default set of filters for the content columns
115
+ def default_content_filters
116
+ if resource_class.respond_to? :content_columns
117
+ resource_class.content_columns.map{ |c| c.name.to_sym }
118
+ else
119
+ []
120
+ end
121
+ end
122
+
123
+ def add_filters_sidebar_section
124
+ self.sidebar_sections << filters_sidebar_section
125
+ end
126
+
127
+ def filters_sidebar_section
128
+ ActiveAdmin::SidebarSection.new :filters, only: :index, if: ->{ active_admin_config.filters.any? } do
129
+ active_admin_filters_form_for assigns[:search], active_admin_config.filters
130
+ end
131
+ end
132
+
133
+ end
134
+
135
+ end
136
+ end
@@ -0,0 +1,9 @@
1
+ require 'active_admin/filters/dsl'
2
+ require 'active_admin/filters/resource_extension'
3
+ require 'active_admin/filters/formtastic_addons'
4
+ require 'active_admin/filters/forms'
5
+
6
+ # Add our Extensions
7
+ ActiveAdmin::ResourceDSL.send :include, ActiveAdmin::Filters::DSL
8
+ ActiveAdmin::Resource.send :include, ActiveAdmin::Filters::ResourceExtension
9
+ ActiveAdmin::ViewHelpers.send :include, ActiveAdmin::Filters::ViewHelper