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,134 @@
1
+ module ActiveAdmin
2
+ # This is the class where all the register blocks are instance eval'd
3
+ class ResourceDSL < DSL
4
+ private
5
+
6
+ def belongs_to(target, options = {})
7
+ config.belongs_to(target, options)
8
+ end
9
+
10
+ # Scope collection to a relation
11
+ def scope_to(*args, &block)
12
+ config.scope_to(*args, &block)
13
+ end
14
+
15
+ # Create a scope
16
+ def scope(*args, &block)
17
+ config.scope(*args, &block)
18
+ end
19
+
20
+ # Configure the index page for the resource
21
+ def index(options = {}, &block)
22
+ options[:as] ||= :table
23
+ config.set_page_presenter :index, ActiveAdmin::PagePresenter.new(options, &block)
24
+ end
25
+
26
+ # Configure the show page for the resource
27
+ def show(options = {}, &block)
28
+ config.set_page_presenter :show, ActiveAdmin::PagePresenter.new(options, &block)
29
+ end
30
+
31
+ def form(options = {}, &block)
32
+ config.set_page_presenter :form, ActiveAdmin::PagePresenter.new(options, &block)
33
+ end
34
+
35
+ # Configure the CSV format
36
+ #
37
+ # For example:
38
+ #
39
+ # csv do
40
+ # column :name
41
+ # column("Author") { |post| post.author.full_name }
42
+ # end
43
+ #
44
+ # csv :col_sep => ";", :force_quotes => true do
45
+ # column :name
46
+ # end
47
+ #
48
+ def csv(options={}, &block)
49
+ config.csv_builder = CSVBuilder.new(options, &block)
50
+ end
51
+
52
+ # Member Actions give you the functionality of defining both the
53
+ # action and the route directly from your ActiveAdmin registration
54
+ # block.
55
+ #
56
+ # For example:
57
+ #
58
+ # ActiveAdmin.register Post do
59
+ # member_action :comments do
60
+ # @post = Post.find(params[:id]
61
+ # @comments = @post.comments
62
+ # end
63
+ # end
64
+ #
65
+ # Will create a new controller action comments and will hook it up to
66
+ # the named route (comments_admin_post_path) /admin/posts/:id/comments
67
+ #
68
+ # You can treat everything within the block as a standard Rails controller
69
+ # action.
70
+ #
71
+ def action(set, name, options = {}, &block)
72
+ set << ControllerAction.new(name, options)
73
+ title = options.delete(:title)
74
+
75
+ controller do
76
+ before_filter(:only => [name]) { @page_title = title } if title
77
+ define_method(name, &block || Proc.new{})
78
+ end
79
+ end
80
+
81
+ def member_action(name, options = {}, &block)
82
+ action config.member_actions, name, options, &block
83
+ end
84
+
85
+ def collection_action(name, options = {}, &block)
86
+ action config.collection_actions, name, options, &block
87
+ end
88
+
89
+ # Defined Callbacks
90
+ #
91
+ # == After Build
92
+ # Called after the resource is built in the new and create actions.
93
+ #
94
+ # ActiveAdmin.register Post do
95
+ # after_build do |post|
96
+ # post.author = current_user
97
+ # end
98
+ # end
99
+ #
100
+ # == Before / After Create
101
+ # Called before and after a resource is saved to the db on the create action.
102
+ #
103
+ # == Before / After Update
104
+ # Called before and after a resource is saved to the db on the update action.
105
+ #
106
+ # == Before / After Save
107
+ # Called before and after the object is saved in the create and update action.
108
+ # Note: Gets called after the create and update callbacks
109
+ #
110
+ # == Before / After Destroy
111
+ # Called before and after the object is destroyed from the database.
112
+ #
113
+ delegate :before_build, :after_build, :to => :controller
114
+ delegate :before_create, :after_create, :to => :controller
115
+ delegate :before_update, :after_update, :to => :controller
116
+ delegate :before_save, :after_save, :to => :controller
117
+ delegate :before_destroy, :after_destroy, :to => :controller
118
+
119
+ # Standard rails filters
120
+ delegate :before_filter, :skip_before_filter, :after_filter, :around_filter, :skip_filter, :to => :controller
121
+
122
+ # Specify which actions to create in the controller
123
+ #
124
+ # Eg:
125
+ #
126
+ # ActiveAdmin.register Post do
127
+ # actions :index, :show
128
+ # end
129
+ #
130
+ # Will only create the index and show actions (no create, update or delete)
131
+ delegate :actions, :to => :controller
132
+
133
+ end
134
+ end
@@ -0,0 +1,106 @@
1
+ module ActiveAdmin
2
+ class Router
3
+ def initialize(application)
4
+ @application = application
5
+ end
6
+
7
+ # Creates all the necessary routes for the ActiveAdmin configurations
8
+ #
9
+ # Use this within the routes.rb file:
10
+ #
11
+ # Application.routes.draw do |map|
12
+ # ActiveAdmin.routes(self)
13
+ # end
14
+ #
15
+ def apply(router)
16
+ define_root_routes router
17
+ define_resource_routes router
18
+ end
19
+
20
+ def define_root_routes(router)
21
+ router.instance_exec @application.namespaces.values do |namespaces|
22
+ namespaces.each do |namespace|
23
+ if namespace.root?
24
+ root :to => namespace.root_to
25
+ else
26
+ namespace namespace.name do
27
+ root :to => namespace.root_to
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+
34
+ # Defines the routes for each resource
35
+ def define_resource_routes(router)
36
+ router.instance_exec @application.namespaces, self do |namespaces, aa_router|
37
+ resources = namespaces.values.map{ |n| n.resources.values }.flatten
38
+ resources.each do |config|
39
+ routes = aa_router.resource_routes(config)
40
+
41
+ # Add in the parent if it exists
42
+ if config.belongs_to?
43
+ belongs_to = routes
44
+ routes = Proc.new do
45
+ # If it's optional, make the normal resource routes
46
+ instance_exec &belongs_to if config.belongs_to_config.optional?
47
+
48
+ # Make the nested belongs_to routes
49
+ # :only is set to nothing so that we don't clobber any existing routes on the resource
50
+ resources config.belongs_to_config.target.resource_name.plural, :only => [] do
51
+ instance_exec &belongs_to
52
+ end
53
+ end
54
+ end
55
+
56
+ # Add on the namespace if required
57
+ unless config.namespace.root?
58
+ nested = routes
59
+ routes = Proc.new do
60
+ namespace config.namespace.name do
61
+ instance_exec &nested
62
+ end
63
+ end
64
+ end
65
+
66
+ instance_exec &routes
67
+ end
68
+ end
69
+ end
70
+
71
+ def resource_routes(config)
72
+ Proc.new do
73
+ # Builds one route for each HTTP verb passed in
74
+ build_route = proc{ |verbs, *args|
75
+ [*verbs].each{ |verb| send verb, *args }
76
+ }
77
+ # Deals with +ControllerAction+ instances
78
+ build_action = proc{ |action|
79
+ build_route.call(action.http_verb, action.name)
80
+ }
81
+ case config
82
+ when ::ActiveAdmin::Resource
83
+ resources config.resource_name.route_key, :only => config.defined_actions do
84
+ member do
85
+ config.member_actions.each &build_action
86
+ end
87
+
88
+ collection do
89
+ config.collection_actions.each &build_action
90
+ post :batch_action
91
+ end
92
+ end
93
+ when ::ActiveAdmin::Page
94
+ page = config.underscored_resource_name
95
+ get "/#{page}" => "#{page}#index"
96
+ config.page_actions.each do |action|
97
+ build_route.call action.http_verb, "/#{page}/#{action.name}" => "#{page}##{action.name}"
98
+ end
99
+ else
100
+ raise "Unsupported config class: #{config.class}"
101
+ end
102
+ end
103
+
104
+ end
105
+ end
106
+ end
@@ -0,0 +1,57 @@
1
+ module ActiveAdmin
2
+ class Scope
3
+
4
+ attr_reader :scope_method, :id, :scope_block, :display_if_block, :show_count, :default_block
5
+
6
+ # Create a Scope
7
+ #
8
+ # Examples:
9
+ #
10
+ # Scope.new(:published)
11
+ # # => Scope with name 'Published' and scope method :published
12
+ #
13
+ # Scope.new('Published', :public)
14
+ # # => Scope with name 'Published' and scope method :public
15
+ #
16
+ # Scope.new 'Published', :public, :if => proc { current_admin_user.can? :manage, resource_class } do |articles|
17
+ # articles.where :published => true
18
+ # end
19
+ # # => Scope with name 'Published' and scope method :public, optionally displaying the scope per the :if block
20
+ #
21
+ # Scope.new('Published') { |articles| articles.where(:published => true) }
22
+ # # => Scope with name 'Published' using a block to scope
23
+ #
24
+ # Scope.new ->{Date.today.strftime '%A'}, :published_today
25
+ # # => Scope with dynamic title using the :published_today scope method
26
+ #
27
+ def initialize(name, method = nil, options = {}, &block)
28
+ @name, @scope_method = name, method.try(:to_sym)
29
+
30
+ if name.is_a? Proc
31
+ raise "A string/symbol is required as the second argument if your label is a proc." unless method
32
+ @id = method.to_s.gsub(' ', '').underscore
33
+ else
34
+ @scope_method ||= name.to_sym
35
+ @id = name.to_s.gsub(' ', '').underscore
36
+ end
37
+
38
+ @scope_method = nil if @scope_method == :all
39
+ @scope_method, @scope_block = nil, block if block_given?
40
+
41
+ @show_count = options[:show_count].nil? ? true : options[:show_count]
42
+ @display_if_block = options[:if] || proc{ true }
43
+ @default_block = options[:default] || proc{ false }
44
+
45
+ end
46
+
47
+ def name
48
+ case @name
49
+ when Proc then @name.call.to_s
50
+ when String then @name
51
+ when Symbol then @name.to_s.titleize
52
+ else @name.to_s
53
+ end
54
+ end
55
+
56
+ end
57
+ end
@@ -0,0 +1,37 @@
1
+ module ActiveAdmin
2
+
3
+ class SidebarSection
4
+ include ActiveAdmin::OptionalDisplay
5
+
6
+ attr_accessor :name, :options, :block
7
+
8
+ def initialize(name, options = {}, &block)
9
+ @name, @options, @block = name, options, block
10
+ normalize_display_options!
11
+ end
12
+
13
+ # The id gets used for the div in the view
14
+ def id
15
+ "#{name.to_s.downcase.underscore}_sidebar_section".parameterize
16
+ end
17
+
18
+ def icon?
19
+ !!options[:icon]
20
+ end
21
+
22
+ def icon
23
+ options[:icon] if icon?
24
+ end
25
+
26
+ # The title gets displayed within the section in the view
27
+ def title
28
+ I18n.t("active_admin.sidebars.#{name.to_s}", :default => name.to_s.titlecase)
29
+ end
30
+
31
+ # If a block is not passed in, the name of the partial to render
32
+ def partial_name
33
+ options[:partial] || "#{name.to_s.downcase.gsub(' ', '_')}_sidebar"
34
+ end
35
+ end
36
+
37
+ end
@@ -0,0 +1,3 @@
1
+ module ActiveAdmin
2
+ VERSION = '1.0.0.pre'
3
+ end
@@ -0,0 +1,27 @@
1
+ require 'active_admin/abstract_view_factory'
2
+
3
+ module ActiveAdmin
4
+ class ViewFactory < AbstractViewFactory
5
+
6
+ # Register Helper Renderers
7
+ register :global_navigation => ActiveAdmin::Views::TabbedNavigation,
8
+ :utility_navigation => ActiveAdmin::Views::TabbedNavigation,
9
+ :site_title => ActiveAdmin::Views::SiteTitle,
10
+ :action_items => ActiveAdmin::Views::ActionItems,
11
+ :title_bar => ActiveAdmin::Views::TitleBar,
12
+ :header => ActiveAdmin::Views::Header,
13
+ :footer => ActiveAdmin::Views::Footer,
14
+ :index_scopes => ActiveAdmin::Views::Scopes,
15
+ :blank_slate => ActiveAdmin::Views::BlankSlate,
16
+ :action_list_popover => ActiveAdmin::Views::ActionListPopover
17
+
18
+ # Register All The Pages
19
+ register :index_page => ActiveAdmin::Views::Pages::Index,
20
+ :show_page => ActiveAdmin::Views::Pages::Show,
21
+ :new_page => ActiveAdmin::Views::Pages::Form,
22
+ :edit_page => ActiveAdmin::Views::Pages::Form,
23
+ :layout => ActiveAdmin::Views::Pages::Layout,
24
+ :page => ActiveAdmin::Views::Pages::Page
25
+
26
+ end
27
+ end
@@ -0,0 +1,12 @@
1
+ module ActiveAdmin
2
+ module ViewHelpers
3
+ module ActiveAdminApplicationHelper
4
+
5
+ # Returns the current Active Admin application instance
6
+ def active_admin_application
7
+ ActiveAdmin.application
8
+ end
9
+
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,7 @@
1
+ module AssignsWithIndifferentAccessHelper
2
+
3
+ def assigns
4
+ @assigns_with_indifferent_access_helper ||= HashWithIndifferentAccess.new(super)
5
+ end
6
+
7
+ end
@@ -0,0 +1,34 @@
1
+ module ActiveAdmin
2
+ module ViewHelpers
3
+ module AutoLinkHelper
4
+
5
+ # Automatically links objects to their resource controllers. If
6
+ # the resource has not been registered, a string representation of
7
+ # the object is returned.
8
+ #
9
+ # The default content in the link is returned from ActiveAdmin::ViewHelpers::DisplayHelper#display_name
10
+ #
11
+ # You can pass in the content to display
12
+ # eg: auto_link(@post, "My Link Content")
13
+ #
14
+ def auto_link(resource, link_content = nil)
15
+ content = link_content || display_name(resource)
16
+ if (registration = active_admin_resource_for(resource.class))
17
+ begin
18
+ content = link_to(content, registration.route_instance_path(resource))
19
+ rescue
20
+ # ignored
21
+ end
22
+ end
23
+ content
24
+ end
25
+
26
+ # Returns the ActiveAdmin::Resource instance for a class
27
+ def active_admin_resource_for(klass)
28
+ return nil unless respond_to?(:active_admin_namespace)
29
+ active_admin_namespace.resource_for(klass)
30
+ end
31
+
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,26 @@
1
+ module ActiveAdmin
2
+ module ViewHelpers
3
+ module BreadcrumbHelper
4
+
5
+ # Returns an array of links to use in a breadcrumb
6
+ def breadcrumb_links(path = request.path)
7
+ parts = path[1..-1].split('/') # remove leading "/" and split up the URL
8
+ parts.pop # remove last since it's used as the page title
9
+
10
+ parts.each_with_index.map do |part, index|
11
+ # 1. try using `display_name` if we can locate a DB object
12
+ # 2. try using the model name translation
13
+ # 3. default to calling `titlecase` on the URL fragment
14
+ if part =~ /\A(\d+|[a-f0-9]{24})\z/ && parts[index-1]
15
+ config = active_admin_config.belongs_to_config.try(:target) || active_admin_config
16
+ name = display_name config.find_resource(part)
17
+ end
18
+ name ||= I18n.t "activerecord.models.#{part.singularize}", :count => 1.1, :default => part.titlecase
19
+
20
+ link_to name, '/' + parts[0..index].join('/')
21
+ end
22
+ end
23
+
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,49 @@
1
+ module ActiveAdmin
2
+ module ViewHelpers
3
+ module DisplayHelper
4
+
5
+ # Attempts to call any known display name methods on the resource.
6
+ # See the setting in `application.rb` for the list of methods and their priority.
7
+ def display_name(resource)
8
+ resource.send display_name_method_for resource if resource
9
+ end
10
+
11
+ # Looks up and caches the first available display name method.
12
+ def display_name_method_for(resource)
13
+ @@display_name_methods_cache ||= {}
14
+ @@display_name_methods_cache[resource.class] ||= begin
15
+ methods = active_admin_application.display_name_methods - association_methods_for(resource)
16
+ methods.detect{ |method| resource.respond_to? method }
17
+ end
18
+ end
19
+
20
+ # To prevent conflicts, we exclude any methods that happen to be associations.
21
+ def association_methods_for(resource)
22
+ return [] unless resource.class.respond_to? :reflect_on_all_associations
23
+ resource.class.reflect_on_all_associations.map(&:name)
24
+ end
25
+
26
+ # Return a pretty string for any object
27
+ # Date Time are formatted via #localize with :format => :long
28
+ # ActiveRecord and Mongoid objects are formatted via #auto_link
29
+ # We attempt to #display_name of any other objects
30
+ def pretty_format(object)
31
+ case object
32
+ when String
33
+ object
34
+ when Arbre::Element
35
+ object
36
+ when Date, Time
37
+ localize(object, :format => :long)
38
+ when ->(obj){defined?(::ActiveRecord) && obj.is_a?(ActiveRecord::Base)}
39
+ auto_link(object)
40
+ when ->(obj){defined?(::Mongoid) && obj.class.included_modules.include?(Mongoid::Document)}
41
+ auto_link(object)
42
+ else
43
+ display_name(object)
44
+ end
45
+ end
46
+
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,49 @@
1
+ module ActiveAdmin
2
+ module ViewHelpers
3
+ module DownloadFormatLinksHelper
4
+
5
+ module ClassMethods
6
+
7
+ # A ready only of formats to make available in index/paginated
8
+ # collection view.
9
+ # @return [Array]
10
+ # @see add_format for information on adding custom download link
11
+ # formats
12
+ def formats
13
+ @formats ||= [:csv, :xml, :json]
14
+ @formats.clone
15
+ end
16
+
17
+ # Adds a mime type extension to the list of available formats.
18
+ # You must register the extension prior to adding it to the list
19
+ # of avilable formats. This should be used by plugins that want
20
+ # to add additional formats to the download format links.
21
+ # @param [Symbol] extension the mime extension to add
22
+ # @return [Array] A copy of the updated formats array.
23
+ def add_format extension
24
+ unless formats.include?(extension)
25
+ if Mime::Type.lookup_by_extension(extension).nil?
26
+ raise ArgumentError, "The mime extension you defined: #{extension} is not registered. Please register it via Mime::Type.register before adding it to the available formats."
27
+ end
28
+ @formats << extension
29
+ end
30
+ formats
31
+ end
32
+ end
33
+
34
+ # TODO: Refactor to new HTML DSL
35
+ def build_download_format_links(formats = self.class.formats)
36
+ params = request.query_parameters.except :format, :commit
37
+ links = formats.map { |format| link_to format.to_s.upcase, params: params, format: format }
38
+ div :class => "download_links" do
39
+ text_node [I18n.t('active_admin.download'), links].flatten.join("&nbsp;").html_safe
40
+ end
41
+ end
42
+
43
+ def self.included base
44
+ base.extend ClassMethods
45
+ end
46
+ end
47
+ end
48
+ end
49
+
@@ -0,0 +1,50 @@
1
+ module ActiveAdmin
2
+ module ViewHelpers
3
+ module FormHelper
4
+
5
+ # Flatten a params Hash to an array of fields.
6
+ #
7
+ # @param params [Hash]
8
+ # @param options [Hash] :namespace and :except
9
+ #
10
+ # @return [Array] of [Hash] with one element.
11
+ #
12
+ # @example
13
+ # fields_for_params(scope: "all", users: ["greg"])
14
+ # => [ {"scope" => "all"} , {"users[]" => "greg"} ]
15
+ #
16
+ def fields_for_params(params, options = {})
17
+ namespace = options[:namespace]
18
+ except = options[:except].is_a?(Array) ? options[:except] : [options[:except]]
19
+
20
+ params.map do |k, v|
21
+ next if namespace.nil? && %w(controller action commit utf8).include?(k.to_s)
22
+ next if except.map(&:to_s).include?(k.to_s)
23
+
24
+ if namespace
25
+ k = "#{namespace}[#{k}]"
26
+ end
27
+
28
+ case v
29
+ when String
30
+ { k => v }
31
+ when Symbol
32
+ { k => v.to_s }
33
+ when Hash
34
+ fields_for_params(v, :namespace => k)
35
+ when Array
36
+ v.map do |v|
37
+ { "#{k}[]" => v }
38
+ end
39
+ when nil
40
+ { k => '' }
41
+ when TrueClass,FalseClass
42
+ { k => v }
43
+ else
44
+ raise "I don't know what to do with #{v.class} params: #{v.inspect}"
45
+ end
46
+ end.flatten.compact
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,13 @@
1
+ module ActiveAdmin
2
+ module ViewHelpers
3
+ module FlashHelper
4
+
5
+ # Returns all the flash keys to display in any Active Admin view.
6
+ # This method removes the :timedout key that Devise uses by default
7
+ def active_admin_flash_messages
8
+ @active_admin_flash_messages ||= flash.to_hash.except(:timedout)
9
+ end
10
+
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,24 @@
1
+ module ActiveAdmin
2
+ module ViewHelpers
3
+ module FormHelper
4
+
5
+ def active_admin_form_for(resource, options = {}, &block)
6
+ options = Marshal.load( Marshal.dump(options) )
7
+ options[:builder] ||= ActiveAdmin::FormBuilder
8
+
9
+ if ! options.fetch(:decorate, true)
10
+ resource = resource.model
11
+ end
12
+
13
+ semantic_form_for resource, options, &block
14
+ end
15
+
16
+ def hidden_field_tags_for(params, options={})
17
+ fields_for_params(params, options).map do |kv|
18
+ k, v = kv.first
19
+ hidden_field_tag k, v, :id => sanitize_to_id("hidden_active_admin_#{k}")
20
+ end.join("\n").html_safe
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,12 @@
1
+ module ActiveAdmin
2
+ module ViewHelpers
3
+ module IconHelper
4
+
5
+ # Render an icon from the Iconic icon set
6
+ def icon(*args)
7
+ ActiveAdmin::Iconic.icon(*args)
8
+ end
9
+
10
+ end
11
+ end
12
+ end