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,91 @@
1
+ require 'active_admin/helpers/optional_display'
2
+
3
+ module ActiveAdmin
4
+
5
+ class Resource
6
+ module ActionItems
7
+
8
+ # Adds the default action items to a resource when it's initialized
9
+ def initialize(*args)
10
+ super
11
+ add_default_action_items
12
+ end
13
+
14
+ # @return [Array] The set of action items for this resource
15
+ def action_items
16
+ @action_items ||= []
17
+ end
18
+
19
+ # Add a new action item to a resource
20
+ #
21
+ # @param [Hash] options valid keys include:
22
+ # :only: A single or array of controller actions to display
23
+ # this action item on.
24
+ # :except: A single or array of controller actions not to
25
+ # display this action item on.
26
+ def add_action_item(options = {}, &block)
27
+ self.action_items << ActiveAdmin::ActionItem.new(options, &block)
28
+ end
29
+
30
+ # Returns a set of action items to display for a specific controller action
31
+ #
32
+ # @param [String, Symbol] action the action to retrieve action items for
33
+ #
34
+ # @return [Array] Array of ActionItems for the controller actions
35
+ def action_items_for(action, render_context = nil)
36
+ action_items.select{ |item| item.display_on? action, render_context }
37
+ end
38
+
39
+ # Clears all the existing action items for this resource
40
+ def clear_action_items!
41
+ @action_items = []
42
+ end
43
+
44
+ # Used by active_admin Base view
45
+ def action_items?
46
+ !!@action_items && @action_items.any?
47
+ end
48
+
49
+ private
50
+
51
+ # Adds the default action items to each resource
52
+ def add_default_action_items
53
+ # New link on index
54
+ add_action_item only: :index do
55
+ if controller.action_methods.include?('new') && authorized?(ActiveAdmin::Auth::CREATE, active_admin_config.resource_class)
56
+ link_to I18n.t('active_admin.new_model', model: active_admin_config.resource_label), new_resource_path
57
+ end
58
+ end
59
+
60
+ # Edit link on show
61
+ add_action_item only: :show do
62
+ if controller.action_methods.include?('edit') && authorized?(ActiveAdmin::Auth::UPDATE, resource)
63
+ link_to I18n.t('active_admin.edit_model', model: active_admin_config.resource_label), edit_resource_path(resource)
64
+ end
65
+ end
66
+
67
+ # Destroy link on show
68
+ add_action_item only: :show do
69
+ if controller.action_methods.include?('destroy') && authorized?(ActiveAdmin::Auth::DESTROY, resource)
70
+ link_to I18n.t('active_admin.delete_model', model: active_admin_config.resource_label), resource_path(resource),
71
+ method: :delete, data: {confirm: I18n.t('active_admin.delete_confirmation')}
72
+ end
73
+ end
74
+ end
75
+
76
+ end
77
+ end
78
+
79
+ # Model class to store the data for ActionItems
80
+ class ActionItem
81
+ include ActiveAdmin::OptionalDisplay
82
+
83
+ attr_accessor :block
84
+
85
+ def initialize(options = {}, &block)
86
+ @options, @block = options, block
87
+ normalize_display_options!
88
+ end
89
+ end
90
+
91
+ end
@@ -0,0 +1,36 @@
1
+ require 'active_admin/resource'
2
+
3
+ module ActiveAdmin
4
+ class Resource
5
+ class BelongsTo
6
+
7
+ class TargetNotFound < StandardError; end
8
+
9
+ # The resource which initiated this relationship
10
+ attr_reader :owner
11
+
12
+ def initialize(owner, target_name, options = {})
13
+ @owner, @target_name, @options = owner, target_name, options
14
+ end
15
+
16
+ # Returns the target resource class or raises an exception if it doesn't exist
17
+ def target
18
+ key = @target_name.to_s.camelize
19
+ namespace.resources[key] or raise TargetNotFound, "Could not find #{key} in" +
20
+ " #{namespace.name} with #{namespace.resources.map(&:resource_name)}"
21
+ end
22
+
23
+ def namespace
24
+ @owner.namespace
25
+ end
26
+
27
+ def optional?
28
+ @options[:optional]
29
+ end
30
+
31
+ def required?
32
+ !optional?
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,18 @@
1
+ module ActiveAdmin
2
+ class Resource
3
+ module Controllers
4
+
5
+ # Returns a properly formatted controller name for this
6
+ # config within its namespace
7
+ def controller_name
8
+ [namespace.module_name, resource_name.plural.camelize + "Controller"].compact.join('::')
9
+ end
10
+
11
+ # Returns the controller for this config
12
+ def controller
13
+ @controller ||= controller_name.constantize
14
+ end
15
+
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,64 @@
1
+ module ActiveAdmin
2
+ class Resource
3
+
4
+ module Menu
5
+
6
+ # Set the menu options.
7
+ # To disable this menu item, call `menu(false)` from the DSL
8
+ def menu_item_options=(options)
9
+ if options == false
10
+ @include_in_menu = false
11
+ @menu_item_options = {}
12
+ else
13
+ @navigation_menu_name = options[:menu_name]
14
+ @menu_item_options = default_menu_options.merge options
15
+ end
16
+ end
17
+
18
+ def menu_item_options
19
+ @menu_item_options ||= default_menu_options
20
+ end
21
+
22
+ def default_menu_options
23
+ # These local variables are accessible to the procs.
24
+ menu_resource_class = respond_to?(:resource_class) ? resource_class : self
25
+ resource = self
26
+ {
27
+ :id => resource_name.plural,
28
+ :label => proc{ resource.plural_resource_label },
29
+ :url => proc{ resource.route_collection_path(params) },
30
+ :if => proc{ authorized?(:read, menu_resource_class) }
31
+ }
32
+ end
33
+
34
+ attr_writer :navigation_menu_name
35
+
36
+ def navigation_menu_name
37
+ case @navigation_menu_name ||= DEFAULT_MENU
38
+ when Proc
39
+ controller.instance_eval(&@navigation_menu_name).to_sym
40
+ else
41
+ @navigation_menu_name
42
+ end
43
+ end
44
+
45
+ def navigation_menu
46
+ namespace.fetch_menu(navigation_menu_name)
47
+ end
48
+
49
+ def add_to_menu(menu_collection)
50
+ if include_in_menu?
51
+ @menu_item = menu_collection.add navigation_menu_name, menu_item_options
52
+ end
53
+ end
54
+
55
+ attr_reader :menu_item
56
+
57
+ # Should this resource be added to the menu system?
58
+ def include_in_menu?
59
+ @include_in_menu != false
60
+ end
61
+
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,84 @@
1
+ module ActiveAdmin
2
+ class Resource
3
+
4
+ module Naming
5
+
6
+ # Returns a name used to uniquely identify this resource
7
+ # this should be an instance of ActiveAdmin:Resource::Name, which responds to
8
+ # #singular, #plural, #route_key, #human etc.
9
+ def resource_name
10
+ custom_name = @options[:as] && @options[:as].gsub(/\s/,'')
11
+ @resource_name ||= if custom_name || !resource_class.respond_to?(:model_name)
12
+ Resource::Name.new(resource_class, custom_name)
13
+ else
14
+ Resource::Name.new(resource_class)
15
+ end
16
+ end
17
+
18
+ # Returns the name to call this resource such as "Bank Account"
19
+ def resource_label
20
+ resource_name.translate :count => 1, :default => resource_name.to_s.gsub('::', ' ').titleize
21
+ end
22
+
23
+ # Returns the plural version of this resource such as "Bank Accounts"
24
+ def plural_resource_label(options = {})
25
+ resource_name.translate ({:count => 1.1, :default => resource_label.pluralize.titleize}).merge(options)
26
+ end
27
+ end
28
+
29
+ # A subclass of ActiveModel::Name which supports the different APIs presented
30
+ # in Rails < 3.1 and > 3.1.
31
+ class Name < ActiveModel::Name
32
+
33
+ delegate :hash, :to => :to_str
34
+
35
+ def initialize(klass, name = nil)
36
+ if ActiveModel::Name.instance_method(:initialize).arity == 1
37
+ super(proxy_for_initializer(klass, name))
38
+ else
39
+ super(klass, nil, name)
40
+ end
41
+ end
42
+
43
+ def translate(options = {})
44
+ I18n.t i18n_key, {:scope => [:activerecord, :models]}.merge(options)
45
+ end
46
+
47
+ def proxy_for_initializer(klass, name)
48
+ return klass unless name
49
+ return StringClassProxy.new(klass, name) if klass
50
+
51
+ StringProxy.new(name)
52
+ end
53
+
54
+ def route_key
55
+ plural
56
+ end
57
+
58
+ def eql?(other)
59
+ to_str.eql?(other.to_str)
60
+ end
61
+
62
+ class StringProxy
63
+ def initialize(name)
64
+ @name = name
65
+ end
66
+
67
+ def name
68
+ @name
69
+ end
70
+ end
71
+
72
+ class StringClassProxy < StringProxy
73
+ delegate :lookup_ancestors, :i18n_scope, :to => :"@klass"
74
+
75
+ def initialize(klass, name)
76
+ @klass = klass || name
77
+ super(name)
78
+ end
79
+ end
80
+
81
+ end
82
+
83
+ end
84
+ end
@@ -0,0 +1,82 @@
1
+ module ActiveAdmin
2
+ class Resource
3
+ module PagePresenters
4
+
5
+ # for setting default css class in admin ui
6
+ def default_index_class
7
+ @default_index
8
+ end
9
+
10
+ # A hash of page configurations for the controller indexed by action name
11
+ def page_presenters
12
+ @page_presenters ||= {}
13
+ end
14
+
15
+ # Sets a page config for a given action
16
+ #
17
+ # @param [String, Symbol] action The action to store this configuration for
18
+ # @param [PagePresenter] page_presenter The instance of PagePresenter to store
19
+ def set_page_presenter(action, page_presenter)
20
+
21
+ if action.to_s == "index" && page_presenter[:as]
22
+ index_class = find_index_class(page_presenter[:as])
23
+ page_presenter_key = index_class.index_name.to_sym
24
+ set_index_presenter page_presenter_key, page_presenter
25
+ else
26
+ page_presenters[action.to_sym] = page_presenter
27
+ end
28
+
29
+ end
30
+
31
+ # Returns a stored page config
32
+ #
33
+ # @param [Symbol, String] action The action to get the config for
34
+ # @param [String] type The string specified in the presenters index_name method
35
+ # @returns [PagePresenter, nil]
36
+ def get_page_presenter(action, type=nil)
37
+
38
+ if action.to_s == "index" && type && page_presenters[:index].kind_of?(Hash)
39
+ page_presenters[:index][type.to_sym]
40
+ elsif action.to_s == "index" && page_presenters[:index].kind_of?(Hash)
41
+ page_presenters[:index].default
42
+ else
43
+ page_presenters[action.to_sym]
44
+ end
45
+
46
+ end
47
+
48
+ protected
49
+
50
+ # Stores a config for all index actions supplied
51
+ #
52
+ # @param [Symbol] index_as The index type to store in the configuration
53
+ # @param [PagePresenter] page_presenter The intance of PagePresenter to store
54
+ def set_index_presenter(index_as, page_presenter)
55
+ page_presenters[:index] ||= {}
56
+
57
+ #set first index as default value or the index with default param set to to true
58
+ if page_presenters[:index].empty? || page_presenter[:default] == true
59
+ page_presenters[:index].default = page_presenter
60
+ @default_index = find_index_class(page_presenter[:as])
61
+ end
62
+
63
+ page_presenters[:index][index_as] = page_presenter
64
+ end
65
+
66
+ # Returns the actual class for renderering the main content on the index
67
+ # page. To set this, use the :as option in the page_presenter block.
68
+ #
69
+ # @param [Symbol, Class] symbol_or_class The component symbol or class
70
+ # @return [Class]
71
+ def find_index_class(symbol_or_class)
72
+ case symbol_or_class
73
+ when Symbol
74
+ ::ActiveAdmin::Views.const_get("IndexAs" + symbol_or_class.to_s.camelcase)
75
+ when Class
76
+ symbol_or_class
77
+ end
78
+ end
79
+
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,19 @@
1
+ module ActiveAdmin
2
+
3
+ class Resource
4
+ module Pagination
5
+
6
+ # The default number of records to display per page
7
+ attr_accessor :per_page
8
+
9
+ # Enable / disable pagination (defaults to true)
10
+ attr_accessor :paginate
11
+
12
+ def initialize(*args)
13
+ super
14
+ @paginate = true
15
+ @per_page = namespace.default_per_page
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,99 @@
1
+ module ActiveAdmin
2
+ class Resource
3
+ module Routes
4
+ # @params params [Hash] of params: {study_id: 3}
5
+ # @return [String] the path to this resource collection page
6
+ # @example "/admin/posts"
7
+ def route_collection_path(params = {})
8
+ RouteBuilder.new(self).collection_path(params)
9
+ end
10
+
11
+ # @param resource [ActiveRecord::Base] the instance we want the path of
12
+ # @return [String] the path to this resource collection page
13
+ # @example "/admin/posts/1"
14
+ def route_instance_path(resource)
15
+ RouteBuilder.new(self).instance_path(resource)
16
+ end
17
+
18
+ # Returns the routes prefix for this config
19
+ def route_prefix
20
+ namespace.module_name.try(:underscore)
21
+ end
22
+
23
+ def route_uncountable?
24
+ config = controller.resources_configuration[:self]
25
+
26
+ config[:route_collection_name] == config[:route_instance_name]
27
+ end
28
+
29
+ private
30
+
31
+ class RouteBuilder
32
+ def initialize(resource)
33
+ @resource = resource
34
+ end
35
+
36
+ def collection_path(params)
37
+ route_name = route_name(
38
+ resource.controller.resources_configuration[:self][:route_collection_name],
39
+ (resource.route_uncountable? ? 'index_path' : 'path')
40
+ )
41
+
42
+ routes.send(route_name, *route_collection_params(params))
43
+ end
44
+
45
+ # @return [String] the path to this resource collection page
46
+ # @param instance [ActiveRecord::Base] the instance we want the path of
47
+ # @example "/admin/posts/1"
48
+ def instance_path(instance)
49
+ route_name = route_name(resource.controller.resources_configuration[:self][:route_instance_name])
50
+
51
+ routes.send(route_name, *route_instance_params(instance))
52
+ end
53
+
54
+ private
55
+
56
+ attr_reader :resource
57
+
58
+ def route_name(resource_path_name, suffix = 'path')
59
+ route = []
60
+
61
+ route << resource.route_prefix # "admin"
62
+ route << belongs_to_name if nested? # "category"
63
+ route << resource_path_name # "posts" or "post"
64
+ route << suffix # "path" or "index path"
65
+
66
+ route.compact.join('_').to_sym # :admin_category_posts_path
67
+ end
68
+
69
+
70
+ # @return params to pass to instance path
71
+ def route_instance_params(instance)
72
+ if nested?
73
+ [instance.send(belongs_to_name).to_param, instance.to_param]
74
+ else
75
+ instance.to_param
76
+ end
77
+ end
78
+
79
+ def route_collection_params(params)
80
+ if nested?
81
+ params[:"#{belongs_to_name}_id"]
82
+ end
83
+ end
84
+
85
+ def nested?
86
+ resource.belongs_to? && resource.belongs_to_config.required?
87
+ end
88
+
89
+ def belongs_to_name
90
+ resource.belongs_to_config.target.resource_name.singular if nested?
91
+ end
92
+
93
+ def routes
94
+ Rails.application.routes.url_helpers
95
+ end
96
+ end
97
+ end
98
+ end
99
+ end
@@ -0,0 +1,74 @@
1
+ module ActiveAdmin
2
+ class Resource
3
+ module ScopeTo
4
+
5
+ # Scope this controller to some object which has a relation
6
+ # to the resource. Can either accept a block or a symbol
7
+ # of a method to call.
8
+ #
9
+ # Eg:
10
+ #
11
+ # ActiveAdmin.register Post do
12
+ # scope_to :current_user
13
+ # end
14
+ #
15
+ # Then every time we instantiate and object, it would call
16
+ #
17
+ # current_user.posts.build
18
+ #
19
+ # By default Active Admin will use the resource name to build a
20
+ # method to call as the association. If its different, you can
21
+ # pass in the association_method as an option.
22
+ #
23
+ # scope_to :current_user, :association_method => :blog_posts
24
+ #
25
+ # will result in the following
26
+ #
27
+ # current_user.blog_posts.build
28
+ #
29
+ # To conditionally use this scope, you can use conditional procs
30
+ #
31
+ # scope_to :current_user, :if => proc{ admin_user_signed_in? }
32
+ #
33
+ # or
34
+ #
35
+ # scope_to :current_user, :unless => proc{ current_user.admin? }
36
+ #
37
+ def scope_to(*args, &block)
38
+ options = args.extract_options!
39
+ method = args.first
40
+
41
+ scope_to_config[:method] = block || method
42
+ scope_to_config[:association_method] = options[:association_method]
43
+ scope_to_config[:if] = options[:if]
44
+ scope_to_config[:unless] = options[:unless]
45
+
46
+ end
47
+
48
+ def scope_to_association_method
49
+ scope_to_config[:association_method]
50
+ end
51
+
52
+ def scope_to_method
53
+ scope_to_config[:method]
54
+ end
55
+
56
+ def scope_to_config
57
+ @scope_to_config ||= {
58
+ :method => nil,
59
+ :association_method => nil,
60
+ :if => nil,
61
+ :unless => nil
62
+ }
63
+ end
64
+
65
+ def scope_to?(context = nil)
66
+ return false if scope_to_method.nil?
67
+ return render_in_context(context, scope_to_config[:if]) unless scope_to_config[:if].nil?
68
+ return !render_in_context(context, scope_to_config[:unless]) unless scope_to_config[:unless].nil?
69
+ true
70
+ end
71
+
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,50 @@
1
+ module ActiveAdmin
2
+ class Resource
3
+ module Scopes
4
+
5
+ # Return an array of scopes for this resource
6
+ def scopes
7
+ @scopes ||= []
8
+ end
9
+
10
+ # Returns a scope for this object by its identifier
11
+ def get_scope_by_id(id)
12
+ id = id.to_s
13
+ scopes.find{|s| s.id == id }
14
+ end
15
+
16
+ def default_scope(context = nil)
17
+ scopes.detect do |scope|
18
+ if scope.default_block.is_a?(Proc)
19
+ render_in_context(context, scope.default_block)
20
+ else
21
+ scope.default_block
22
+ end
23
+ end
24
+ end
25
+
26
+ # Create a new scope object for this resource.
27
+ # If you want to internationalize the scope name, you can add
28
+ # to your i18n files a key like "active_admin.scopes.scope_method".
29
+ def scope(*args, &block)
30
+ options = args.extract_options!
31
+ title = args[0] rescue nil
32
+ method = args[1] rescue nil
33
+
34
+ scope = ActiveAdmin::Scope.new(title, method, options, &block)
35
+
36
+ # Finds and replaces a scope by the same name if it already exists
37
+ existing_scope_index = scopes.index{|existing_scope| existing_scope.id == scope.id }
38
+ if existing_scope_index
39
+ scopes.delete_at(existing_scope_index)
40
+ scopes.insert(existing_scope_index, scope)
41
+ else
42
+ self.scopes << scope
43
+ end
44
+
45
+ scope
46
+ end
47
+
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,27 @@
1
+ require 'active_admin/helpers/optional_display'
2
+
3
+ module ActiveAdmin
4
+
5
+ class Resource
6
+ module Sidebars
7
+
8
+ def sidebar_sections
9
+ @sidebar_sections ||= []
10
+ end
11
+
12
+ def clear_sidebar_sections!
13
+ @sidebar_sections = []
14
+ end
15
+
16
+ def sidebar_sections_for(action, render_context = nil)
17
+ sidebar_sections.select{|section| section.display_on?(action, render_context) }
18
+ end
19
+
20
+ def sidebar_sections?
21
+ !!@sidebar_sections && @sidebar_sections.any?
22
+ end
23
+
24
+ end
25
+ end
26
+
27
+ end