andrewroth_activeadmin 0.3.4

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 (338) hide show
  1. data/.document +5 -0
  2. data/.gitignore +35 -0
  3. data/.travis.yml +4 -0
  4. data/.yardopts +8 -0
  5. data/CHANGELOG.md +301 -0
  6. data/Gemfile +40 -0
  7. data/Guardfile +8 -0
  8. data/LICENSE +25 -0
  9. data/README.rdoc +113 -0
  10. data/Rakefile +18 -0
  11. data/activeadmin.gemspec +28 -0
  12. data/app/assets/images/active_admin/admin_notes_icon.png +0 -0
  13. data/app/assets/images/active_admin/datepicker/datepicker-header-bg.png +0 -0
  14. data/app/assets/images/active_admin/datepicker/datepicker-input-icon.png +0 -0
  15. data/app/assets/images/active_admin/datepicker/datepicker-next-link-icon.png +0 -0
  16. data/app/assets/images/active_admin/datepicker/datepicker-nipple.png +0 -0
  17. data/app/assets/images/active_admin/datepicker/datepicker-prev-link-icon.png +0 -0
  18. data/app/assets/images/active_admin/loading.gif +0 -0
  19. data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
  20. data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
  21. data/app/assets/images/active_admin/orderable.png +0 -0
  22. data/app/assets/javascripts/active_admin/base.js +12 -0
  23. data/app/assets/javascripts/active_admin/vendor.js +382 -0
  24. data/app/assets/stylesheets/active_admin/_base.css.scss +363 -0
  25. data/app/assets/stylesheets/active_admin/_forms.css.scss +259 -0
  26. data/app/assets/stylesheets/active_admin/_header.css.scss +121 -0
  27. data/app/assets/stylesheets/active_admin/_mixins.css.scss +1 -0
  28. data/app/assets/stylesheets/active_admin/_typography.css.scss +102 -0
  29. data/app/assets/stylesheets/active_admin/components/_comments.css.scss +43 -0
  30. data/app/assets/stylesheets/active_admin/components/_date_picker.css.scss +125 -0
  31. data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +39 -0
  32. data/app/assets/stylesheets/active_admin/components/_tables.css.scss +68 -0
  33. data/app/assets/stylesheets/active_admin/mixins/_all.css.scss +10 -0
  34. data/app/assets/stylesheets/active_admin/mixins/_buttons.css.scss +27 -0
  35. data/app/assets/stylesheets/active_admin/mixins/_gradients.css.scss +29 -0
  36. data/app/assets/stylesheets/active_admin/mixins/_icons.css.scss +20 -0
  37. data/app/assets/stylesheets/active_admin/mixins/_reset.css.scss +165 -0
  38. data/app/assets/stylesheets/active_admin/mixins/_rounded.css.scss +43 -0
  39. data/app/assets/stylesheets/active_admin/mixins/_sections.css.scss +34 -0
  40. data/app/assets/stylesheets/active_admin/mixins/_shadows.css.scss +21 -0
  41. data/app/assets/stylesheets/active_admin/mixins/_utilities.scss +17 -0
  42. data/app/assets/stylesheets/active_admin/mixins/_variables.css.scss +21 -0
  43. data/app/views/active_admin/dashboard/index.html.arb +1 -0
  44. data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +8 -0
  45. data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +7 -0
  46. data/app/views/active_admin/devise/passwords/edit.html.erb +16 -0
  47. data/app/views/active_admin/devise/passwords/new.html.erb +14 -0
  48. data/app/views/active_admin/devise/sessions/new.html.erb +18 -0
  49. data/app/views/active_admin/devise/shared/_links.erb +20 -0
  50. data/app/views/active_admin/devise/unlocks/new.html.erb +12 -0
  51. data/app/views/active_admin/resource/edit.html.arb +1 -0
  52. data/app/views/active_admin/resource/index.csv.erb +20 -0
  53. data/app/views/active_admin/resource/index.html.arb +1 -0
  54. data/app/views/active_admin/resource/new.html.arb +1 -0
  55. data/app/views/active_admin/resource/show.html.arb +1 -0
  56. data/app/views/layouts/active_admin.html.arb +1 -0
  57. data/app/views/layouts/active_admin_logged_out.html.erb +35 -0
  58. data/cucumber.yml +2 -0
  59. data/docs/0-installation.md +50 -0
  60. data/docs/1-general-configuration.md +43 -0
  61. data/docs/2-resource-customization.md +114 -0
  62. data/docs/3-index-pages.md +55 -0
  63. data/docs/3-index-pages/index-as-block.md +16 -0
  64. data/docs/3-index-pages/index-as-blog.md +61 -0
  65. data/docs/3-index-pages/index-as-grid.md +21 -0
  66. data/docs/3-index-pages/index-as-table.md +90 -0
  67. data/docs/4-csv-format.md +14 -0
  68. data/docs/5-forms.md +39 -0
  69. data/docs/6-show-screens.md +36 -0
  70. data/docs/7-sidebars.md +35 -0
  71. data/docs/8-custom-actions.md +123 -0
  72. data/features/comments/commenting.feature +112 -0
  73. data/features/comments/viewing_index.feature +19 -0
  74. data/features/dashboard.feature +26 -0
  75. data/features/edit_page.feature +106 -0
  76. data/features/first_boot.feature +16 -0
  77. data/features/global_navigation.feature +30 -0
  78. data/features/index/filters.feature +35 -0
  79. data/features/index/format_as_csv.feature +46 -0
  80. data/features/index/formats.feature +12 -0
  81. data/features/index/index_as_block.feature +15 -0
  82. data/features/index/index_as_blog.feature +50 -0
  83. data/features/index/index_as_grid.feature +45 -0
  84. data/features/index/index_as_table.feature +81 -0
  85. data/features/index/index_blank_slate.feature +56 -0
  86. data/features/index/index_scopes.feature +52 -0
  87. data/features/index/pagination.feature +17 -0
  88. data/features/menu.feature +37 -0
  89. data/features/new_page.feature +75 -0
  90. data/features/registering_assets.feature +35 -0
  91. data/features/registering_resources.feature +33 -0
  92. data/features/show/default_content.feature +43 -0
  93. data/features/show/page_title.feature +33 -0
  94. data/features/sidebar_sections.feature +127 -0
  95. data/features/specifying_actions.feature +87 -0
  96. data/features/step_definitions/action_item_steps.rb +7 -0
  97. data/features/step_definitions/additional_web_steps.rb +77 -0
  98. data/features/step_definitions/asset_steps.rb +7 -0
  99. data/features/step_definitions/attribute_steps.rb +13 -0
  100. data/features/step_definitions/comment_steps.rb +8 -0
  101. data/features/step_definitions/configuration_steps.rb +31 -0
  102. data/features/step_definitions/dashboard_steps.rb +11 -0
  103. data/features/step_definitions/factory_steps.rb +29 -0
  104. data/features/step_definitions/flash_steps.rb +3 -0
  105. data/features/step_definitions/format_steps.rb +35 -0
  106. data/features/step_definitions/index_scope_steps.rb +20 -0
  107. data/features/step_definitions/layout_steps.rb +3 -0
  108. data/features/step_definitions/menu_steps.rb +7 -0
  109. data/features/step_definitions/pagination_steps.rb +8 -0
  110. data/features/step_definitions/sidebar_steps.rb +7 -0
  111. data/features/step_definitions/tab_steps.rb +3 -0
  112. data/features/step_definitions/user_steps.rb +26 -0
  113. data/features/step_definitions/web_steps.rb +211 -0
  114. data/features/sti_resource.feature +61 -0
  115. data/features/support/env.rb +96 -0
  116. data/features/support/paths.rb +50 -0
  117. data/features/support/selectors.rb +45 -0
  118. data/features/users/logging_in.feature +34 -0
  119. data/features/users/logging_out.feature +13 -0
  120. data/lib/active_admin.rb +82 -0
  121. data/lib/active_admin/abstract_view_factory.rb +95 -0
  122. data/lib/active_admin/application.rb +231 -0
  123. data/lib/active_admin/arbre.rb +23 -0
  124. data/lib/active_admin/arbre/builder.rb +111 -0
  125. data/lib/active_admin/arbre/context.rb +45 -0
  126. data/lib/active_admin/arbre/core_extensions.rb +5 -0
  127. data/lib/active_admin/arbre/html/attributes.rb +20 -0
  128. data/lib/active_admin/arbre/html/class_list.rb +28 -0
  129. data/lib/active_admin/arbre/html/collection.rb +27 -0
  130. data/lib/active_admin/arbre/html/document.rb +42 -0
  131. data/lib/active_admin/arbre/html/element.rb +151 -0
  132. data/lib/active_admin/arbre/html/html5_elements.rb +47 -0
  133. data/lib/active_admin/arbre/html/tag.rb +137 -0
  134. data/lib/active_admin/arbre/html/text_node.rb +35 -0
  135. data/lib/active_admin/asset_registration.rb +34 -0
  136. data/lib/active_admin/callbacks.rb +89 -0
  137. data/lib/active_admin/comments.rb +88 -0
  138. data/lib/active_admin/comments/comment.rb +21 -0
  139. data/lib/active_admin/comments/configuration.rb +18 -0
  140. data/lib/active_admin/comments/namespace_helper.rb +14 -0
  141. data/lib/active_admin/comments/resource_helper.rb +17 -0
  142. data/lib/active_admin/comments/show_page_helper.rb +23 -0
  143. data/lib/active_admin/comments/views.rb +3 -0
  144. data/lib/active_admin/comments/views/active_admin_comment.rb +0 -0
  145. data/lib/active_admin/comments/views/active_admin_comments.rb +82 -0
  146. data/lib/active_admin/component.rb +22 -0
  147. data/lib/active_admin/controller_action.rb +12 -0
  148. data/lib/active_admin/csv_builder.rb +45 -0
  149. data/lib/active_admin/dashboards.rb +48 -0
  150. data/lib/active_admin/dashboards/dashboard_controller.rb +38 -0
  151. data/lib/active_admin/dashboards/section.rb +34 -0
  152. data/lib/active_admin/dependency_checker.rb +30 -0
  153. data/lib/active_admin/deprecation.rb +36 -0
  154. data/lib/active_admin/devise.rb +54 -0
  155. data/lib/active_admin/dsl.rb +224 -0
  156. data/lib/active_admin/engine.rb +4 -0
  157. data/lib/active_admin/event.rb +31 -0
  158. data/lib/active_admin/form_builder.rb +118 -0
  159. data/lib/active_admin/helpers/optional_display.rb +34 -0
  160. data/lib/active_admin/helpers/scope_chain.rb +23 -0
  161. data/lib/active_admin/helpers/settings.rb +70 -0
  162. data/lib/active_admin/iconic.rb +51 -0
  163. data/lib/active_admin/iconic/icons.rb +142 -0
  164. data/lib/active_admin/locales/bg.yml +40 -0
  165. data/lib/active_admin/locales/cs.yml +34 -0
  166. data/lib/active_admin/locales/da.yml +28 -0
  167. data/lib/active_admin/locales/en.yml +40 -0
  168. data/lib/active_admin/locales/es.yml +40 -0
  169. data/lib/active_admin/locales/fr.yml +40 -0
  170. data/lib/active_admin/locales/it.yml +40 -0
  171. data/lib/active_admin/locales/ja.yml +40 -0
  172. data/lib/active_admin/locales/pl.yml +34 -0
  173. data/lib/active_admin/locales/pt-BR.yml +41 -0
  174. data/lib/active_admin/locales/ru.yml +40 -0
  175. data/lib/active_admin/locales/sv-SE.yml +40 -0
  176. data/lib/active_admin/locales/zh_cn.yml +40 -0
  177. data/lib/active_admin/menu.rb +42 -0
  178. data/lib/active_admin/menu_item.rb +73 -0
  179. data/lib/active_admin/namespace.rb +206 -0
  180. data/lib/active_admin/page_config.rb +15 -0
  181. data/lib/active_admin/reloader.rb +64 -0
  182. data/lib/active_admin/renderer.rb +87 -0
  183. data/lib/active_admin/resource.rb +159 -0
  184. data/lib/active_admin/resource/action_items.rb +88 -0
  185. data/lib/active_admin/resource/belongs_to.rb +31 -0
  186. data/lib/active_admin/resource/menu.rb +45 -0
  187. data/lib/active_admin/resource/naming.rb +50 -0
  188. data/lib/active_admin/resource/scopes.rb +33 -0
  189. data/lib/active_admin/resource/sidebars.rb +36 -0
  190. data/lib/active_admin/resource_controller.rb +105 -0
  191. data/lib/active_admin/resource_controller/action_builder.rb +21 -0
  192. data/lib/active_admin/resource_controller/actions.rb +79 -0
  193. data/lib/active_admin/resource_controller/callbacks.rb +47 -0
  194. data/lib/active_admin/resource_controller/collection.rb +138 -0
  195. data/lib/active_admin/resource_controller/filters.rb +58 -0
  196. data/lib/active_admin/resource_controller/form.rb +42 -0
  197. data/lib/active_admin/resource_controller/menu.rb +29 -0
  198. data/lib/active_admin/resource_controller/page_configurations.rb +53 -0
  199. data/lib/active_admin/resource_controller/scoping.rb +36 -0
  200. data/lib/active_admin/resource_controller/sidebars.rb +18 -0
  201. data/lib/active_admin/router.rb +85 -0
  202. data/lib/active_admin/sass/active_admin.scss +3 -0
  203. data/lib/active_admin/sass/css_loader.rb +16 -0
  204. data/lib/active_admin/sass/helpers.rb +45 -0
  205. data/lib/active_admin/scope.rb +31 -0
  206. data/lib/active_admin/sidebar_section.rb +41 -0
  207. data/lib/active_admin/stylesheets/active_admin/mixins/_utilities.scss +0 -0
  208. data/lib/active_admin/version.rb +3 -0
  209. data/lib/active_admin/view_factory.rb +23 -0
  210. data/lib/active_admin/view_helpers.rb +22 -0
  211. data/lib/active_admin/view_helpers/active_admin_application_helper.rb +12 -0
  212. data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +7 -0
  213. data/lib/active_admin/view_helpers/auto_link_helper.rb +42 -0
  214. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +29 -0
  215. data/lib/active_admin/view_helpers/display_helper.rb +38 -0
  216. data/lib/active_admin/view_helpers/filter_form_helper.rb +186 -0
  217. data/lib/active_admin/view_helpers/form_helper.rb +13 -0
  218. data/lib/active_admin/view_helpers/icon_helper.rb +12 -0
  219. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +26 -0
  220. data/lib/active_admin/view_helpers/renderer_helper.rb +29 -0
  221. data/lib/active_admin/view_helpers/sidebar_helper.rb +15 -0
  222. data/lib/active_admin/view_helpers/title_helper.rb +11 -0
  223. data/lib/active_admin/view_helpers/view_factory_helper.rb +11 -0
  224. data/lib/active_admin/views.rb +8 -0
  225. data/lib/active_admin/views/action_items.rb +17 -0
  226. data/lib/active_admin/views/components/attributes_table.rb +66 -0
  227. data/lib/active_admin/views/components/blank_slate.rb +17 -0
  228. data/lib/active_admin/views/components/columns.rb +47 -0
  229. data/lib/active_admin/views/components/paginated_collection.rb +92 -0
  230. data/lib/active_admin/views/components/panel.rb +26 -0
  231. data/lib/active_admin/views/components/scopes.rb +69 -0
  232. data/lib/active_admin/views/components/sidebar_section.rb +28 -0
  233. data/lib/active_admin/views/components/status_tag.rb +55 -0
  234. data/lib/active_admin/views/components/table_for.rb +193 -0
  235. data/lib/active_admin/views/dashboard_section_renderer.rb +19 -0
  236. data/lib/active_admin/views/header_renderer.rb +57 -0
  237. data/lib/active_admin/views/index_as_block.rb +29 -0
  238. data/lib/active_admin/views/index_as_blog.rb +129 -0
  239. data/lib/active_admin/views/index_as_grid.rb +70 -0
  240. data/lib/active_admin/views/index_as_table.rb +164 -0
  241. data/lib/active_admin/views/pages/base.rb +167 -0
  242. data/lib/active_admin/views/pages/dashboard.rb +62 -0
  243. data/lib/active_admin/views/pages/edit.rb +28 -0
  244. data/lib/active_admin/views/pages/index.rb +91 -0
  245. data/lib/active_admin/views/pages/layout.rb +26 -0
  246. data/lib/active_admin/views/pages/new.rb +28 -0
  247. data/lib/active_admin/views/pages/show.rb +56 -0
  248. data/lib/active_admin/views/tabbed_navigation.rb +94 -0
  249. data/lib/activeadmin.rb +1 -0
  250. data/lib/generators/active_admin/assets/assets_generator.rb +21 -0
  251. data/lib/generators/active_admin/assets/templates/3.0/active_admin.js +427 -0
  252. data/lib/generators/active_admin/assets/templates/3.1/active_admin.css.scss +6 -0
  253. data/lib/generators/active_admin/assets/templates/3.1/active_admin.js +1 -0
  254. data/lib/generators/active_admin/assets/templates/dashboards.rb +36 -0
  255. data/lib/generators/active_admin/devise/devise_generator.rb +49 -0
  256. data/lib/generators/active_admin/install/install_generator.rb +44 -0
  257. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +103 -0
  258. data/lib/generators/active_admin/install/templates/dashboards.rb +38 -0
  259. data/lib/generators/active_admin/install/templates/migrations/1_create_admin_notes.rb +16 -0
  260. data/lib/generators/active_admin/install/templates/migrations/2_move_admin_notes_to_comments.rb +25 -0
  261. data/lib/generators/active_admin/resource/resource_generator.rb +16 -0
  262. data/lib/generators/active_admin/resource/templates/admin.rb +3 -0
  263. data/script/local +44 -0
  264. data/script/use_rails +46 -0
  265. data/spec/integration/belongs_to_spec.rb +42 -0
  266. data/spec/integration/default_namespace.rb +77 -0
  267. data/spec/integration/javascript_spec.rb +20 -0
  268. data/spec/integration/memory_spec.rb +38 -0
  269. data/spec/integration/stylesheets_spec.rb +41 -0
  270. data/spec/spec_helper.rb +167 -0
  271. data/spec/support/detect_rails_version.rb +10 -0
  272. data/spec/support/integration_example_group.rb +33 -0
  273. data/spec/support/jslint.yml +80 -0
  274. data/spec/support/rails_template.rb +32 -0
  275. data/spec/support/rails_template_with_data.rb +33 -0
  276. data/spec/support/templates/cucumber.rb +24 -0
  277. data/spec/unit/abstract_view_factory_spec.rb +79 -0
  278. data/spec/unit/action_builder_spec.rb +88 -0
  279. data/spec/unit/active_admin_spec.rb +17 -0
  280. data/spec/unit/application_spec.rb +87 -0
  281. data/spec/unit/arbre/context_spec.rb +35 -0
  282. data/spec/unit/arbre/html/element_finder_methods_spec.rb +54 -0
  283. data/spec/unit/arbre/html/element_spec.rb +223 -0
  284. data/spec/unit/arbre/html/tag_attributes_spec.rb +61 -0
  285. data/spec/unit/arbre/html/tag_spec.rb +63 -0
  286. data/spec/unit/arbre/html_spec.rb +209 -0
  287. data/spec/unit/asset_registration_spec.rb +37 -0
  288. data/spec/unit/auto_link_spec.rb +39 -0
  289. data/spec/unit/belongs_to_spec.rb +45 -0
  290. data/spec/unit/breadcrumbs_spec.rb +110 -0
  291. data/spec/unit/comments_spec.rb +57 -0
  292. data/spec/unit/component_spec.rb +18 -0
  293. data/spec/unit/controller_filters_spec.rb +34 -0
  294. data/spec/unit/csv_builder_spec.rb +83 -0
  295. data/spec/unit/dashboard_controller_spec.rb +26 -0
  296. data/spec/unit/dashboard_section_spec.rb +56 -0
  297. data/spec/unit/dashboards_spec.rb +59 -0
  298. data/spec/unit/devise_spec.rb +66 -0
  299. data/spec/unit/display_name_spec.rb +29 -0
  300. data/spec/unit/event_spec.rb +41 -0
  301. data/spec/unit/filter_form_builder_spec.rb +182 -0
  302. data/spec/unit/form_builder_spec.rb +256 -0
  303. data/spec/unit/generators/install_rails_3_1_spec.rb +16 -0
  304. data/spec/unit/helpers/scope_chain_spec.rb +36 -0
  305. data/spec/unit/helpers/settings_spec.rb +30 -0
  306. data/spec/unit/menu_item_spec.rb +143 -0
  307. data/spec/unit/menu_spec.rb +53 -0
  308. data/spec/unit/namespace_spec.rb +214 -0
  309. data/spec/unit/pretty_format_spec.rb +35 -0
  310. data/spec/unit/rails_spec.rb +43 -0
  311. data/spec/unit/registration_spec.rb +76 -0
  312. data/spec/unit/reloader_spec.rb +80 -0
  313. data/spec/unit/renderer_spec.rb +108 -0
  314. data/spec/unit/resource/action_items_spec.rb +62 -0
  315. data/spec/unit/resource/menu_spec.rb +80 -0
  316. data/spec/unit/resource/naming_spec.rb +75 -0
  317. data/spec/unit/resource/scopes_spec.rb +30 -0
  318. data/spec/unit/resource/sidebars_spec.rb +50 -0
  319. data/spec/unit/resource_controller/collection_spec.rb +34 -0
  320. data/spec/unit/resource_controller_spec.rb +152 -0
  321. data/spec/unit/resource_spec.rb +269 -0
  322. data/spec/unit/routing_spec.rb +88 -0
  323. data/spec/unit/sass/helpers_spec.rb +47 -0
  324. data/spec/unit/scope_spec.rb +41 -0
  325. data/spec/unit/view_factory_spec.rb +19 -0
  326. data/spec/unit/views/components/attributes_table_spec.rb +100 -0
  327. data/spec/unit/views/components/blank_slate_spec.rb +15 -0
  328. data/spec/unit/views/components/columns_spec.rb +75 -0
  329. data/spec/unit/views/components/panel_spec.rb +29 -0
  330. data/spec/unit/views/components/sidebar_section_spec.rb +37 -0
  331. data/spec/unit/views/components/status_tag_spec.rb +79 -0
  332. data/spec/unit/views/components/table_for_spec.rb +131 -0
  333. data/spec/unit/views/pages/layout_spec.rb +22 -0
  334. data/spec/unit/views/tabbed_navigation_spec.rb +125 -0
  335. data/tasks/docs.rake +39 -0
  336. data/tasks/test.rake +57 -0
  337. data/tasks/yard.rake +6 -0
  338. metadata +646 -0
@@ -0,0 +1,3 @@
1
+ module ActiveAdmin
2
+ VERSION = '0.3.4'
3
+ end
@@ -0,0 +1,23 @@
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
+ :action_items => ActiveAdmin::Views::ActionItems,
9
+ :header => ActiveAdmin::Views::HeaderRenderer,
10
+ :dashboard_section => ActiveAdmin::Views::DashboardSection,
11
+ :index_scopes => ActiveAdmin::Views::Scopes,
12
+ :blank_slate => ActiveAdmin::Views::BlankSlate
13
+
14
+ # Register All The Pages
15
+ register :dashboard_page => ActiveAdmin::Views::Pages::Dashboard,
16
+ :index_page => ActiveAdmin::Views::Pages::Index,
17
+ :show_page => ActiveAdmin::Views::Pages::Show,
18
+ :new_page => ActiveAdmin::Views::Pages::New,
19
+ :edit_page => ActiveAdmin::Views::Pages::Edit,
20
+ :layout => ActiveAdmin::Views::Pages::Layout
21
+
22
+ end
23
+ end
@@ -0,0 +1,22 @@
1
+ module ActiveAdmin
2
+ module ViewHelpers
3
+
4
+ # Require all ruby files in the view helpers dir
5
+ Dir[File.expand_path('../view_helpers', __FILE__) + "/*.rb"].each{|f| require f }
6
+
7
+ include AssignsWithIndifferentAccessHelper
8
+ include ActiveAdminApplicationHelper
9
+ include RendererHelper
10
+ include AutoLinkHelper
11
+ include BreadcrumbHelper
12
+ include DisplayHelper
13
+ include IconHelper
14
+ include MethodOrProcHelper
15
+ include SidebarHelper
16
+ include FormHelper
17
+ include FilterFormHelper
18
+ include TitleHelper
19
+ include ViewFactoryHelper
20
+
21
+ end
22
+ 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,42 @@
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, send(registration.route_instance_path, resource))
19
+ rescue
20
+ end
21
+ end
22
+ content
23
+ end
24
+
25
+ # Returns the ActiveAdmin::Resource instance for a class
26
+ def active_admin_resource_for(klass)
27
+ active_admin_namespace.resource_for(klass)
28
+ end
29
+
30
+ # Returns the current Active Admin namespace
31
+ def active_admin_namespace
32
+ if respond_to?(:active_admin_config) && active_admin_config
33
+ active_admin_config.namespace
34
+ else
35
+ # Return a default namespace if none exists
36
+ active_admin_application.find_or_create_namespace(active_admin_application.default_namespace)
37
+ end
38
+ end
39
+
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,29 @@
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 = nil)
7
+ path ||= request.fullpath
8
+ parts = path.gsub(/^\//, '').split('/')
9
+ parts.pop unless %w{ create update }.include?(params[:action])
10
+ crumbs = []
11
+ parts.each_with_index do |part, index|
12
+ name = ""
13
+ if part =~ /^\d/ && parent = parts[index - 1]
14
+ begin
15
+ parent_class = parent.singularize.camelcase.constantize
16
+ obj = parent_class.find(part.to_i)
17
+ name = obj.display_name if obj.respond_to?(:display_name)
18
+ rescue
19
+ end
20
+ end
21
+ name = part.titlecase if name == ""
22
+ crumbs << link_to(name, "/" + parts[0..index].join('/'))
23
+ end
24
+ crumbs
25
+ end
26
+
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,38 @@
1
+ module ActiveAdmin
2
+ module ViewHelpers
3
+ module DisplayHelper
4
+
5
+ def display_name_method_for(resource)
6
+ @@display_name_methods_cache ||= {}
7
+ @@display_name_methods_cache[resource.class] ||=
8
+ active_admin_application.display_name_methods.find{|method| resource.respond_to? method }
9
+ end
10
+
11
+ # Tries to display an object with as friendly of output
12
+ # as possible.
13
+ def display_name(resource)
14
+ resource.send(display_name_method_for(resource))
15
+ end
16
+
17
+ # Return a pretty string for any object
18
+ # Date Time are formatted via #localize with :format => :long
19
+ # ActiveRecord objects are formatted via #auto_link
20
+ # We attempt to #display_name of any other objects
21
+ def pretty_format(object)
22
+ case object
23
+ when String
24
+ object
25
+ when Arbre::HTML::Element
26
+ object
27
+ when Date, Time
28
+ localize(object, :format => :long)
29
+ when ActiveRecord::Base
30
+ auto_link(object)
31
+ else
32
+ display_name(object)
33
+ end
34
+ end
35
+
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,186 @@
1
+ module ActiveAdmin
2
+
3
+ module ViewHelpers
4
+ module FilterFormHelper
5
+
6
+ # Helper method to render a filter form
7
+ def active_admin_filters_form_for(search, filters, options = {})
8
+ options[:builder] ||= ActiveAdmin::FilterFormBuilder
9
+ options[:url] ||= collection_path
10
+ options[:html] ||= {}
11
+ options[:html][:method] = :get
12
+ options[:html][:class] ||= "filter_form"
13
+ options[:as] = :q
14
+ clear_link = link_to(I18n.t('active_admin.clear_filters'), "#", :class => "clear_filters_btn")
15
+ form_for search, options do |f|
16
+ filters.each do |filter_options|
17
+ filter_options = filter_options.dup
18
+ attribute = filter_options.delete(:attribute)
19
+ f.filter attribute, filter_options
20
+ end
21
+
22
+ buttons = content_tag :div, :class => "buttons" do
23
+ f.submit(I18n.t('active_admin.filter')) +
24
+ clear_link +
25
+ hidden_field_tag("order", params[:order]) +
26
+ hidden_field_tag("scope", params[:scope])
27
+ end
28
+
29
+ f.form_buffers.last + buttons
30
+ end
31
+ end
32
+
33
+ end
34
+ end
35
+
36
+ # This form builder defines methods to build filter forms such
37
+ # as the one found in the sidebar of the index page of a standard resource.
38
+ class FilterFormBuilder < FormBuilder
39
+
40
+ def filter(method, options = {})
41
+ return "" if method.nil? || method == ""
42
+ options[:as] ||= default_filter_type(method)
43
+ return "" unless options[:as]
44
+ field_type = options.delete(:as)
45
+ options[:label] ||= default_filter_label(method)
46
+ content = with_new_form_buffer do
47
+ send("filter_#{field_type}_input", method, options)
48
+ end
49
+ @form_buffers.last << template.content_tag(:div, content, :class => "filter_form_field filter_#{field_type}")
50
+ end
51
+
52
+ protected
53
+
54
+ def filter_string_input(method, options = {})
55
+ field_name = "#{method}_contains"
56
+
57
+ [ label(field_name, I18n.t('active_admin.search_field', :field => options[:label])),
58
+ text_field(field_name)
59
+ ].join("\n").html_safe
60
+ end
61
+
62
+ def filter_date_range_input(method, options = {})
63
+ gt_field_name = "#{method}_gte"
64
+ lt_field_name = "#{method}_lte"
65
+
66
+ [ label(gt_field_name, options[:label]),
67
+ filter_date_text_field(gt_field_name),
68
+ template.content_tag(:span, "-", :class => "seperator"),
69
+ filter_date_text_field(lt_field_name)
70
+ ].join("\n").html_safe
71
+ end
72
+
73
+ def filter_date_text_field(method)
74
+ current_value = @object.send(method)
75
+ text_field(method, :size => 12, :class => "datepicker", :max => 10, :value => current_value.respond_to?(:strftime) ? current_value.strftime("%Y-%m-%d") : "")
76
+ end
77
+
78
+ def filter_numeric_input(method, options = {})
79
+ filters = numeric_filters_for_method(method, options.delete(:filters) || default_numeric_filters)
80
+ current_filter = current_numeric_scope(filters)
81
+ filter_select = @template.select_tag '', @template.options_for_select(filters, current_filter),
82
+ :onchange => "document.getElementById('#{method}_numeric').name = 'q[' + this.value + ']';"
83
+ filter_input = text_field current_filter, :size => 10, :id => "#{method}_numeric"
84
+
85
+ [ label(method, options[:label]),
86
+ filter_select,
87
+ " ",
88
+ filter_input
89
+ ].join("\n").html_safe
90
+ end
91
+
92
+ def numeric_filters_for_method(method, filters)
93
+ filters.collect{|scope| [scope[0], [method,scope[1]].join("_") ] }
94
+ end
95
+
96
+ # Returns the scope for which we are currently searching. If no search is available
97
+ # it returns the first scope
98
+ def current_numeric_scope(filters)
99
+ filters[1..-1].inject(filters.first){|a,b| object.send(b[1].to_sym) ? b : a }[1]
100
+ end
101
+
102
+ def default_numeric_filters
103
+ [[I18n.t('active_admin.equal_to'), 'eq'], [I18n.t('active_admin.greater_than'), 'gt'], [I18n.t('active_admin.less_than'), 'lt']]
104
+ end
105
+
106
+ def filter_select_input(method, options = {})
107
+ association_name = method.to_s.gsub(/_id$/, '').to_sym
108
+ input_name = (generate_association_input_name(method).to_s + "_eq").to_sym
109
+ collection = find_collection_for_column(association_name, options)
110
+
111
+ [ label(input_name, options[:label]),
112
+ select(input_name, collection, options.merge(:include_blank => I18n.t('active_admin.any')))
113
+ ].join("\n").html_safe
114
+ end
115
+
116
+ def filter_check_boxes_input(method, options = {})
117
+ input_name = (generate_association_input_name(method).to_s + "_in").to_sym
118
+ collection = find_collection_for_column(method, options)
119
+ selected_values = @object.send(input_name) || []
120
+ checkboxes = template.content_tag :div, :class => "check_boxes_wrapper" do
121
+ collection.map do |c|
122
+ label = c.is_a?(Array) ? c.first : c
123
+ value = c.is_a?(Array) ? c.last : c
124
+ "<label><input type=\"checkbox\" name=\"q[#{input_name}][]\" value=\"#{value}\" #{selected_values.include?(value) ? "checked" : ""}/> #{label}</label>"
125
+ end.join("\n").html_safe
126
+ end
127
+
128
+ [ label(input_name, options[:label]),
129
+ checkboxes
130
+ ].join("\n").html_safe
131
+ end
132
+
133
+ # Override the standard finder to accept a proc
134
+ def find_collection_for_column(method, options = {})
135
+ options = options.dup
136
+ case options[:collection]
137
+ when Proc
138
+ options[:collection] = options[:collection].call
139
+ end
140
+ super(method, options)
141
+ end
142
+
143
+ # Returns the default filter type for a given attribute
144
+ def default_filter_type(method)
145
+ if column = column_for(method)
146
+ case column.type
147
+ when :date, :datetime
148
+ return :date_range
149
+ when :string, :text
150
+ return :string
151
+ when :integer
152
+ return :select if reflection_for(method.to_s.gsub('_id','').to_sym)
153
+ return :numeric
154
+ when :float, :decimal
155
+ return :numeric
156
+ end
157
+ end
158
+
159
+ if reflection = reflection_for(method)
160
+ return :select if reflection.macro == :belongs_to && !reflection.options[:polymorphic]
161
+ end
162
+ end
163
+
164
+ # Returns the default label for a given attribute
165
+ # Will use ActiveModel I18n if possible
166
+ def default_filter_label(method)
167
+ if @object.base.respond_to?(:human_attribute_name)
168
+ @object.base.human_attribute_name(method)
169
+ else
170
+ method.to_s.titlecase
171
+ end
172
+ end
173
+
174
+ # Returns the column for an attribute on the object being searched
175
+ # if it exists. Otherwise returns nil
176
+ def column_for(method)
177
+ @object.base.columns_hash[method.to_s] if @object.base.respond_to?(:columns_hash)
178
+ end
179
+
180
+ # Returns the association reflection for the method if it exists
181
+ def reflection_for(method)
182
+ @object.base.reflect_on_association(method) if @object.base.respond_to?(:reflect_on_association)
183
+ end
184
+
185
+ end
186
+ end
@@ -0,0 +1,13 @@
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
+ semantic_form_for resource, options, &block
9
+ end
10
+
11
+ end
12
+ end
13
+ 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
@@ -0,0 +1,26 @@
1
+ module MethodOrProcHelper
2
+
3
+ # Many times throughout the views we want to either call a method on an object
4
+ # or instance_exec a proc passing in the object as the first parameter. This
5
+ # method takes care of this functionality.
6
+ #
7
+ # call_method_or_proc_on(@my_obj, :size) same as @my_obj.size
8
+ # OR
9
+ # proc = Proc.new{|s| s.size }
10
+ # call_method_or_proc_on(@my_obj, proc)
11
+ #
12
+ def call_method_or_proc_on(obj, symbol_or_proc, options = {})
13
+ exec = options[:exec].nil? ? true : options[:exec]
14
+ case symbol_or_proc
15
+ when Symbol, String
16
+ obj.send(symbol_or_proc.to_sym)
17
+ when Proc
18
+ if exec
19
+ instance_exec(obj, &symbol_or_proc)
20
+ else
21
+ symbol_or_proc.call(obj)
22
+ end
23
+ end
24
+ end
25
+
26
+ end
@@ -0,0 +1,29 @@
1
+ module ActiveAdmin
2
+ module ViewHelpers
3
+ module RendererHelper
4
+
5
+ # Adds the ability to render ActiveAdmin::Renderers using the
6
+ # standard render method.
7
+ #
8
+ # Example:
9
+ #
10
+ # render MyRendererClass, "Arg1", "Arg2"
11
+ #
12
+ # which is the same as doing
13
+ #
14
+ # MyRendererClass.new(self).to_html("Arg1", "Arg2")
15
+ def render(*args)
16
+ if args[0].is_a?(Class) && args[0].ancestors.include?(ActiveAdmin::Renderer)
17
+ renderer = args.shift
18
+ renderer.new(self).to_html(*args)
19
+ elsif args[0].is_a?(Class) && args[0].ancestors.include?(Arbre::HTML::Tag)
20
+ tag_class = args.shift
21
+ insert_tag tag_class, *args
22
+ else
23
+ super
24
+ end
25
+ end
26
+
27
+ end
28
+ end
29
+ end