activeadmin 0.2.2 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of activeadmin might be problematic. Click here for more details.

Files changed (277) hide show
  1. data/.gitignore +34 -0
  2. data/.travis.yml +4 -0
  3. data/.yardopts +8 -0
  4. data/CHANGELOG.md +177 -0
  5. data/Gemfile +21 -32
  6. data/Guardfile +8 -0
  7. data/README.rdoc +75 -14
  8. data/Rakefile +7 -100
  9. data/activeadmin.gemspec +21 -353
  10. data/{lib/generators/active_admin/install/templates/images → app/assets/images/active_admin}/admin_notes_icon.png +0 -0
  11. data/app/assets/images/active_admin/datepicker/datepicker-header-bg.png +0 -0
  12. data/app/assets/images/active_admin/datepicker/datepicker-input-icon.png +0 -0
  13. data/app/assets/images/active_admin/datepicker/datepicker-next-link-icon.png +0 -0
  14. data/app/assets/images/active_admin/datepicker/datepicker-nipple.png +0 -0
  15. data/app/assets/images/active_admin/datepicker/datepicker-prev-link-icon.png +0 -0
  16. data/{lib/generators/active_admin/install/templates/images → app/assets/images/active_admin}/loading.gif +0 -0
  17. data/{lib/generators/active_admin/install/templates/images → app/assets/images/active_admin}/nested_menu_arrow.gif +0 -0
  18. data/{lib/generators/active_admin/install/templates/images → app/assets/images/active_admin}/nested_menu_arrow_dark.gif +0 -0
  19. data/{lib/generators/active_admin/install/templates/images → app/assets/images/active_admin}/orderable.png +0 -0
  20. data/app/assets/javascripts/active_admin/base.js +12 -0
  21. data/{lib/generators/active_admin/install/templates/active_admin_vendor.js → app/assets/javascripts/active_admin/vendor.js} +0 -0
  22. data/{lib/active_admin/stylesheets/active_admin.scss → app/assets/stylesheets/active_admin/_base.css.scss} +58 -82
  23. data/{lib/active_admin/stylesheets/active_admin/_forms.scss → app/assets/stylesheets/active_admin/_forms.css.scss} +94 -5
  24. data/{lib/active_admin/stylesheets/active_admin/_header.scss → app/assets/stylesheets/active_admin/_header.css.scss} +13 -11
  25. data/app/assets/stylesheets/active_admin/_mixins.css.scss +1 -0
  26. data/{lib/active_admin/stylesheets/active_admin/_typography.scss → app/assets/stylesheets/active_admin/_typography.css.scss} +0 -0
  27. data/{lib/active_admin/stylesheets/active_admin/_comments.scss → app/assets/stylesheets/active_admin/components/_comments.css.scss} +0 -0
  28. data/app/assets/stylesheets/active_admin/components/_date_picker.css.scss +123 -0
  29. data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +38 -0
  30. data/{lib/active_admin/stylesheets/active_admin/mixins/_all.scss → app/assets/stylesheets/active_admin/mixins/_all.css.scss} +0 -0
  31. data/{lib/active_admin/stylesheets/active_admin/mixins/_buttons.scss → app/assets/stylesheets/active_admin/mixins/_buttons.css.scss} +0 -0
  32. data/{lib/active_admin/stylesheets/active_admin/mixins/_gradients.scss → app/assets/stylesheets/active_admin/mixins/_gradients.css.scss} +8 -0
  33. data/{lib/active_admin/stylesheets/active_admin/mixins/_icons.scss → app/assets/stylesheets/active_admin/mixins/_icons.css.scss} +0 -0
  34. data/{lib/active_admin/stylesheets/active_admin/mixins/_reset.scss → app/assets/stylesheets/active_admin/mixins/_reset.css.scss} +0 -0
  35. data/{lib/active_admin/stylesheets/active_admin/mixins/_rounded.scss → app/assets/stylesheets/active_admin/mixins/_rounded.css.scss} +0 -0
  36. data/{lib/active_admin/stylesheets/active_admin/mixins/_sections.scss → app/assets/stylesheets/active_admin/mixins/_sections.css.scss} +9 -2
  37. data/{lib/active_admin/stylesheets/active_admin/mixins/_shadows.scss → app/assets/stylesheets/active_admin/mixins/_shadows.css.scss} +1 -1
  38. data/{lib/active_admin/stylesheets/active_admin/mixins/_variables.scss → app/assets/stylesheets/active_admin/mixins/_variables.css.scss} +12 -3
  39. data/{lib/active_admin/views/templates/active_admin_dashboard → app/views/active_admin/dashboard}/index.html.arb +0 -0
  40. data/{lib/active_admin/views/templates → app/views}/active_admin/devise/mailer/reset_password_instructions.html.erb +0 -0
  41. data/{lib/active_admin/views/templates → app/views}/active_admin/devise/mailer/unlock_instructions.html.erb +0 -0
  42. data/{lib/active_admin/views/templates → app/views}/active_admin/devise/passwords/edit.html.erb +0 -0
  43. data/{lib/active_admin/views/templates → app/views}/active_admin/devise/passwords/new.html.erb +0 -0
  44. data/{lib/active_admin/views/templates → app/views}/active_admin/devise/sessions/new.html.erb +1 -1
  45. data/{lib/active_admin/views/templates → app/views}/active_admin/devise/shared/_links.erb +0 -0
  46. data/{lib/active_admin/views/templates → app/views}/active_admin/devise/unlocks/new.html.erb +0 -0
  47. data/{lib/active_admin/views/templates/active_admin_default → app/views/active_admin/resource}/edit.html.arb +0 -0
  48. data/app/views/active_admin/resource/index.csv.erb +20 -0
  49. data/{lib/active_admin/views/templates/active_admin_default → app/views/active_admin/resource}/index.html.arb +0 -0
  50. data/{lib/active_admin/views/templates/active_admin_default → app/views/active_admin/resource}/new.html.arb +0 -0
  51. data/{lib/active_admin/views/templates/active_admin_default → app/views/active_admin/resource}/show.html.arb +0 -0
  52. data/app/views/layouts/active_admin.html.arb +1 -0
  53. data/{lib/active_admin/views/templates → app/views}/layouts/active_admin_logged_out.html.erb +8 -4
  54. data/docs/0-installation.md +50 -0
  55. data/docs/1-general-configuration.md +43 -0
  56. data/docs/2-resource-customization.md +35 -0
  57. data/docs/3-index-pages.md +55 -0
  58. data/docs/3-index-pages/index-as-block.md +16 -0
  59. data/docs/3-index-pages/index-as-blog.md +61 -0
  60. data/docs/3-index-pages/index-as-grid.md +21 -0
  61. data/docs/3-index-pages/index-as-table.md +90 -0
  62. data/docs/4-csv-format.md +14 -0
  63. data/docs/5-forms.md +39 -0
  64. data/docs/6-show-screens.md +22 -0
  65. data/docs/7-sidebars.md +35 -0
  66. data/docs/8-custom-actions.md +123 -0
  67. data/features/comments/commenting.feature +31 -4
  68. data/features/edit_page.feature +30 -1
  69. data/features/index/filters.feature +35 -0
  70. data/features/index/format_as_csv.feature +46 -0
  71. data/features/index/formats.feature +2 -0
  72. data/features/index/index_as_block.feature +1 -1
  73. data/features/index/index_as_grid.feature +1 -1
  74. data/features/index/index_as_table.feature +2 -0
  75. data/features/index/index_blank_slate.feature +56 -0
  76. data/features/index/pagination.feature +0 -6
  77. data/features/registering_assets.feature +2 -2
  78. data/features/sidebar_sections.feature +7 -8
  79. data/features/specifying_actions.feature +72 -1
  80. data/features/step_definitions/action_item_steps.rb +2 -2
  81. data/features/step_definitions/additional_web_steps.rb +26 -16
  82. data/features/step_definitions/attribute_steps.rb +5 -7
  83. data/features/step_definitions/configuration_steps.rb +9 -9
  84. data/features/step_definitions/factory_steps.rb +4 -3
  85. data/features/step_definitions/format_steps.rb +29 -1
  86. data/features/step_definitions/layout_steps.rb +3 -0
  87. data/features/step_definitions/menu_steps.rb +2 -2
  88. data/features/step_definitions/sidebar_steps.rb +1 -5
  89. data/features/step_definitions/user_steps.rb +8 -2
  90. data/features/step_definitions/web_steps.rb +82 -90
  91. data/features/sti_resource.feature +12 -0
  92. data/features/support/env.rb +12 -10
  93. data/features/support/paths.rb +2 -0
  94. data/features/support/selectors.rb +45 -0
  95. data/lib/active_admin.rb +33 -263
  96. data/lib/active_admin/application.rb +228 -0
  97. data/lib/active_admin/arbre.rb +10 -10
  98. data/lib/active_admin/arbre/{html.rb → builder.rb} +29 -2
  99. data/lib/active_admin/arbre/context.rb +8 -0
  100. data/lib/active_admin/arbre/{attributes.rb → html/attributes.rb} +0 -0
  101. data/lib/active_admin/arbre/{class_list.rb → html/class_list.rb} +0 -0
  102. data/lib/active_admin/arbre/{collection.rb → html/collection.rb} +0 -0
  103. data/lib/active_admin/arbre/{document.rb → html/document.rb} +0 -0
  104. data/lib/active_admin/arbre/{element.rb → html/element.rb} +6 -6
  105. data/lib/active_admin/arbre/{html5_elements.rb → html/html5_elements.rb} +0 -0
  106. data/lib/active_admin/arbre/{tag.rb → html/tag.rb} +0 -0
  107. data/lib/active_admin/arbre/{text_node.rb → html/text_node.rb} +0 -0
  108. data/lib/active_admin/asset_registration.rb +1 -1
  109. data/lib/active_admin/callbacks.rb +5 -3
  110. data/lib/active_admin/comments.rb +3 -3
  111. data/lib/active_admin/comments/comment.rb +6 -0
  112. data/lib/active_admin/comments/configuration.rb +8 -6
  113. data/lib/active_admin/comments/namespace_helper.rb +1 -1
  114. data/lib/active_admin/comments/views/active_admin_comments.rb +1 -1
  115. data/lib/active_admin/csv_builder.rb +45 -0
  116. data/lib/active_admin/dashboards.rb +1 -1
  117. data/lib/active_admin/dashboards/dashboard_controller.rb +3 -10
  118. data/lib/active_admin/dependency_checker.rb +28 -0
  119. data/lib/active_admin/deprecation.rb +36 -0
  120. data/lib/active_admin/devise.rb +14 -3
  121. data/lib/active_admin/dsl.rb +26 -4
  122. data/lib/active_admin/engine.rb +4 -0
  123. data/lib/active_admin/form_builder.rb +18 -9
  124. data/lib/active_admin/helpers/scope_chain.rb +23 -0
  125. data/lib/active_admin/helpers/settings.rb +70 -0
  126. data/lib/active_admin/locales/cs.yml +34 -0
  127. data/lib/active_admin/locales/da.yml +28 -0
  128. data/lib/active_admin/locales/en.yml +40 -0
  129. data/lib/active_admin/locales/es.yml +40 -0
  130. data/lib/active_admin/locales/fr.yml +40 -0
  131. data/lib/active_admin/locales/it.yml +39 -0
  132. data/lib/active_admin/locales/pl.yml +34 -0
  133. data/lib/active_admin/locales/pt-BR.yml +41 -0
  134. data/lib/active_admin/locales/ru.yml +40 -0
  135. data/lib/active_admin/locales/zh_cn.yml +40 -0
  136. data/lib/active_admin/menu_item.rb +6 -0
  137. data/lib/active_admin/namespace.rb +14 -5
  138. data/lib/active_admin/reloader.rb +30 -0
  139. data/lib/active_admin/renderer.rb +1 -1
  140. data/lib/active_admin/resource.rb +45 -88
  141. data/lib/active_admin/resource/action_items.rb +88 -0
  142. data/lib/active_admin/resource/menu.rb +45 -0
  143. data/lib/active_admin/resource/naming.rb +46 -0
  144. data/lib/active_admin/resource/scopes.rb +33 -0
  145. data/lib/active_admin/resource/sidebars.rb +36 -0
  146. data/lib/active_admin/resource_controller.rb +32 -37
  147. data/lib/active_admin/resource_controller/action_builder.rb +1 -1
  148. data/lib/active_admin/resource_controller/actions.rb +66 -40
  149. data/lib/active_admin/resource_controller/callbacks.rb +1 -1
  150. data/lib/active_admin/resource_controller/collection.rb +9 -14
  151. data/lib/active_admin/resource_controller/filters.rb +1 -1
  152. data/lib/active_admin/resource_controller/form.rb +1 -1
  153. data/lib/active_admin/resource_controller/menu.rb +1 -1
  154. data/lib/active_admin/resource_controller/page_configurations.rb +2 -2
  155. data/lib/active_admin/resource_controller/scoping.rb +1 -1
  156. data/lib/active_admin/resource_controller/sidebars.rb +1 -21
  157. data/lib/active_admin/router.rb +85 -0
  158. data/lib/active_admin/sass/active_admin.scss +3 -0
  159. data/lib/active_admin/sass/css_loader.rb +16 -0
  160. data/lib/active_admin/sass/helpers.rb +45 -0
  161. data/lib/active_admin/scope.rb +16 -2
  162. data/lib/active_admin/sidebar_section.rb +41 -0
  163. data/lib/active_admin/stylesheets/active_admin/mixins/_utilities.scss +0 -0
  164. data/lib/active_admin/version.rb +1 -1
  165. data/lib/active_admin/view_factory.rb +5 -3
  166. data/lib/active_admin/view_helpers.rb +1 -2
  167. data/lib/active_admin/view_helpers/active_admin_application_helper.rb +12 -0
  168. data/lib/active_admin/view_helpers/auto_link_helper.rb +2 -1
  169. data/lib/active_admin/view_helpers/display_helper.rb +1 -1
  170. data/lib/active_admin/view_helpers/filter_form_helper.rb +26 -14
  171. data/lib/active_admin/view_helpers/form_helper.rb +1 -0
  172. data/lib/active_admin/view_helpers/view_factory_helper.rb +1 -1
  173. data/lib/active_admin/views/components/attributes_table.rb +2 -2
  174. data/lib/active_admin/views/components/blank_slate.rb +17 -0
  175. data/lib/active_admin/views/components/columns.rb +1 -3
  176. data/lib/active_admin/views/components/paginated_collection.rb +26 -8
  177. data/lib/active_admin/views/components/scopes.rb +13 -8
  178. data/lib/active_admin/views/components/sidebar_section.rb +1 -3
  179. data/lib/active_admin/views/components/status_tag.rb +55 -0
  180. data/lib/active_admin/views/components/table_for.rb +25 -6
  181. data/lib/active_admin/views/header_renderer.rb +20 -4
  182. data/lib/active_admin/views/index_as_block.rb +12 -7
  183. data/lib/active_admin/views/index_as_blog.rb +61 -21
  184. data/lib/active_admin/views/index_as_grid.rb +22 -1
  185. data/lib/active_admin/views/index_as_table.rb +97 -6
  186. data/lib/active_admin/views/pages/base.rb +20 -9
  187. data/lib/active_admin/views/pages/dashboard.rb +7 -4
  188. data/lib/active_admin/views/pages/edit.rb +3 -2
  189. data/lib/active_admin/views/pages/index.rb +30 -5
  190. data/lib/active_admin/views/pages/layout.rb +26 -0
  191. data/lib/active_admin/views/pages/new.rb +3 -2
  192. data/lib/active_admin/views/pages/show.rb +1 -1
  193. data/lib/active_admin/views/tabbed_navigation.rb +94 -0
  194. data/lib/generators/active_admin/assets/assets_generator.rb +21 -0
  195. data/lib/generators/active_admin/assets/templates/3.0/active_admin.js +427 -0
  196. data/lib/generators/active_admin/assets/templates/3.1/active_admin.css.scss +6 -0
  197. data/lib/generators/active_admin/assets/templates/3.1/active_admin.js +1 -0
  198. data/lib/generators/active_admin/assets/templates/dashboards.rb +36 -0
  199. data/lib/generators/active_admin/install/install_generator.rb +2 -4
  200. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +26 -4
  201. data/lib/generators/active_admin/install/templates/dashboards.rb +4 -2
  202. data/lib/generators/active_admin/install/templates/migrations/2_move_admin_notes_to_comments.rb +2 -2
  203. data/script/local +44 -0
  204. data/script/use_rails +46 -0
  205. data/spec/integration/belongs_to_spec.rb +1 -1
  206. data/spec/integration/default_namespace.rb +77 -0
  207. data/spec/integration/javascript_spec.rb +20 -0
  208. data/spec/integration/stylesheets_spec.rb +41 -0
  209. data/spec/spec_helper.rb +21 -11
  210. data/spec/support/detect_rails_version.rb +10 -0
  211. data/spec/support/integration_example_group.rb +1 -1
  212. data/spec/support/jslint.yml +80 -0
  213. data/spec/support/rails_template.rb +1 -1
  214. data/spec/support/rails_template_with_data.rb +2 -1
  215. data/spec/support/templates/cucumber.rb +0 -4
  216. data/spec/unit/active_admin_spec.rb +8 -44
  217. data/spec/unit/application_spec.rb +78 -0
  218. data/spec/unit/arbre/context_spec.rb +22 -0
  219. data/spec/unit/arbre/html/element_finder_methods_spec.rb +2 -2
  220. data/spec/unit/arbre/html/element_spec.rb +2 -3
  221. data/spec/unit/arbre/html/tag_attributes_spec.rb +2 -2
  222. data/spec/unit/arbre/html/tag_spec.rb +2 -2
  223. data/spec/unit/arbre/html_spec.rb +2 -3
  224. data/spec/unit/auto_link_spec.rb +2 -1
  225. data/spec/unit/belongs_to_spec.rb +2 -1
  226. data/spec/unit/comments_spec.rb +43 -39
  227. data/spec/unit/controller_filters_spec.rb +11 -3
  228. data/spec/unit/csv_builder_spec.rb +83 -0
  229. data/spec/unit/devise_spec.rb +66 -0
  230. data/spec/unit/display_name_spec.rb +2 -2
  231. data/spec/unit/filter_form_builder_spec.rb +6 -3
  232. data/spec/unit/form_builder_spec.rb +20 -2
  233. data/spec/unit/generators/install_rails_3_1_spec.rb +16 -0
  234. data/spec/unit/helpers/scope_chain_spec.rb +36 -0
  235. data/spec/unit/helpers/settings_spec.rb +30 -0
  236. data/spec/unit/menu_item_spec.rb +6 -0
  237. data/spec/unit/namespace_spec.rb +68 -19
  238. data/spec/unit/rails_spec.rb +43 -0
  239. data/spec/unit/registration_spec.rb +18 -27
  240. data/spec/unit/reloader_spec.rb +28 -0
  241. data/spec/unit/resource/action_items_spec.rb +62 -0
  242. data/spec/unit/resource/menu_spec.rb +80 -0
  243. data/spec/unit/resource/naming_spec.rb +64 -0
  244. data/spec/unit/resource/scopes_spec.rb +30 -0
  245. data/spec/unit/resource/sidebars_spec.rb +50 -0
  246. data/spec/unit/resource_controller/collection_spec.rb +1 -1
  247. data/spec/unit/resource_controller_spec.rb +29 -24
  248. data/spec/unit/resource_spec.rb +78 -94
  249. data/spec/unit/sass/helpers_spec.rb +47 -0
  250. data/spec/unit/scope_spec.rb +11 -1
  251. data/spec/unit/view_factory_spec.rb +4 -1
  252. data/spec/unit/{components → views/components}/attributes_table_spec.rb +2 -2
  253. data/spec/unit/views/components/blank_slate_spec.rb +15 -0
  254. data/spec/unit/{components → views/components}/columns_spec.rb +2 -2
  255. data/spec/unit/{components → views/components}/panel_spec.rb +1 -3
  256. data/spec/unit/{components → views/components}/sidebar_section_spec.rb +3 -3
  257. data/spec/unit/views/components/status_tag_spec.rb +79 -0
  258. data/spec/unit/{components → views/components}/table_for_spec.rb +2 -1
  259. data/spec/unit/views/pages/layout_spec.rb +22 -0
  260. data/spec/unit/views/tabbed_navigation_spec.rb +125 -0
  261. data/tasks/docs.rake +39 -0
  262. data/tasks/test.rake +55 -0
  263. data/tasks/yard.rake +6 -0
  264. metadata +310 -189
  265. data/CHANGELOG.rdoc +0 -76
  266. data/lib/active_admin/action_items.rb +0 -37
  267. data/lib/active_admin/sidebar.rb +0 -39
  268. data/lib/active_admin/stylesheets/active_admin/_flash_messages.scss +0 -13
  269. data/lib/active_admin/view_helpers/status_tag_helper.rb +0 -13
  270. data/lib/active_admin/view_helpers/table_helper.rb +0 -12
  271. data/lib/active_admin/views/tabs_renderer.rb +0 -52
  272. data/lib/active_admin/views/templates/active_admin_default/index.csv.erb +0 -2
  273. data/lib/active_admin/views/templates/layouts/active_admin.html.erb +0 -39
  274. data/lib/generators/active_admin/install/templates/active_admin.js +0 -51
  275. data/spec/controllers/index_as_csv_spec.rb +0 -35
  276. data/spec/unit/action_items_spec.rb +0 -27
  277. data/spec/unit/tabs_renderer_spec.rb +0 -56
@@ -0,0 +1,55 @@
1
+ # Customizing the Index Page
2
+
3
+ Filtering and listing resources is one of the most important tasks for
4
+ administering a web application. Active Admin provides many different tools for
5
+ you to build a compelling interface into your data for the admin staff.
6
+
7
+ Built in, Active Admin has the following index renderers:
8
+
9
+ * *Table*: A table drawn with each row being a resource ([View Table Docs](3-index-pages/index-as-table.md))
10
+ * *Grid*: A set of rows and columns each cell being a resource ([View Grid Docs](3-index-pages/index-as-grid.md))
11
+ * *Blocks*: A set of rows (not tabular) each row being a resource ([View Blocks Docs](3-index-pages/index-as-blocks.md))
12
+ * *Blog*: A title and body content, similar to a blog index ([View Blog Docs](3-index-pages/index-as-blog.md))
13
+
14
+ All index pages also support scopes, filters, pagination, action items, and
15
+ sidebar sections.
16
+
17
+ ## Index Filters
18
+
19
+ By default the index screen includes a "Filters" sidebar on the right hand side
20
+ with a filter for each attribute of the registered model. You can customize the
21
+ filters that are displayed as well as the type of widgets they use.
22
+
23
+ To display a filter for an attribute, use the filter method
24
+
25
+ ActiveAdmin.register Post do
26
+ filter :title
27
+ end
28
+
29
+ Out of the box, Active Admin supports the following filter types:
30
+
31
+ * *:string* - A search field
32
+ * *:date_range* - A start and end date field with calendar inputs
33
+ * *:numeric* - A drop down for selecting "Equal To", "Greater Than" or "Less
34
+ Than" and an input for a value.
35
+ * *:select* - A drop down which filters based on a selected item in a collection
36
+ or all.
37
+ * *:check_boxes* - A list of check boxes users can turn on and off to filter
38
+
39
+ By default, Active Admin will pick the most relevant filter based on the
40
+ attribute type. You can force the type by passing the :as option.
41
+
42
+ filter :author, :as => :check_boxes
43
+
44
+ The :check_boxes and :select types accept options for the collection. By default
45
+ it attempts to create a collection based on an association. But you can pass in
46
+ the collection as a proc to be called at render time.
47
+
48
+ # Will call available
49
+ filter :author, :as => :check_boxes, :collection => proc { Author.all }
50
+
51
+ You can change the filter label by passing a label option:
52
+
53
+ filter :author, :label => 'Author'
54
+
55
+ By default, Active Admin will try to use ActiveModel I18n to determine the label.
@@ -0,0 +1,16 @@
1
+ <!-- Please don't edit this file. It will be clobbered. -->
2
+
3
+ # Index as a Block
4
+
5
+ If you want to fully customize the display of your resources on the index
6
+ screen, Index as a Block allows you to render a block of content for each
7
+ resource.
8
+
9
+ index :as => :block do |product|
10
+ div :for => product do
11
+ h2 auto_link(product.title)
12
+ div do
13
+ simple_format product.description
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,61 @@
1
+ <!-- Please don't edit this file. It will be clobbered. -->
2
+
3
+ # Index as Blog
4
+
5
+ Render your index page as a set of posts. The post has two main options:
6
+ title and body.
7
+
8
+ index :as => :blog do
9
+ title :my_title # Calls #my_title on each resource
10
+ body :my_body # Calls #my_body on each resource
11
+ end
12
+
13
+ ## Post Title
14
+
15
+ The title is the content that will be rendered within a link to the
16
+ resource. There are two main ways to set the content for the title
17
+
18
+ First, you can pass in a method to be called on your
19
+ resource. For example:
20
+
21
+ index :as => :blog do
22
+ title :a_method_to_call
23
+ end
24
+
25
+ This will result in the title of the post being the return value of
26
+ Resource#a_method_to_call
27
+
28
+ Second, you can pass a block to the tile option which will then be
29
+ used as the contents fo the title. The resource being rendered
30
+ is passed in to the block. For Example:
31
+
32
+ index :as => :blog do
33
+ title do |post|
34
+ span post.title, :class => 'title'
35
+ span post.created_at, :class => 'created_at'
36
+ end
37
+ end
38
+
39
+ ## Post Body
40
+
41
+ The body is rendered underneath the title of each post. The same two
42
+ style of options work as the Post Title above.
43
+
44
+ Call a method on the resource as the body:
45
+
46
+ index :as => :blog do
47
+ title :my_title
48
+ body :my_body # Return value of #my_body will be the body
49
+ end
50
+
51
+ Or, render a block as the body:
52
+
53
+ index :as => :blog do
54
+ title :my_title
55
+ body do |post|
56
+ div truncate(post.title)
57
+ div :class => 'meta' do
58
+ span "Post in #{post.categories.join(', ')}"
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,21 @@
1
+ <!-- Please don't edit this file. It will be clobbered. -->
2
+
3
+ # Index as a Grid
4
+
5
+ Sometimes you want to display the index screen for a set of resources as a grid
6
+ (possibly a grid of thumbnail images). To do so, use the :grid option for the
7
+ index block.
8
+
9
+ index :as => :grid do |product|
10
+ link_to(image_tag(product.image_path), admin_products_path(product))
11
+ end
12
+
13
+ The block is rendered within a cell in the grid once for each resource in the
14
+ collection. The resource is passed into the block for you to use in the view.
15
+
16
+ You can customize the number of colums that are rendered using the columns
17
+ option:
18
+
19
+ index :as => :grid, :columns => 5 do |product|
20
+ link_to(image_tag(product.image_path), admin_products_path(product))
21
+ end
@@ -0,0 +1,90 @@
1
+ <!-- Please don't edit this file. It will be clobbered. -->
2
+
3
+ # Index as a Table
4
+
5
+ By default, the index page is a table with each of the models content columns and links to
6
+ show, edit and delete the object. There are many ways to customize what gets
7
+ displayed.
8
+
9
+ ## Defining Columns
10
+
11
+ To display an attribute or a method on a resource, simply pass a symbol into the
12
+ column method:
13
+
14
+ index do
15
+ column :title
16
+ end
17
+
18
+ If the default title does not work for you, pass it as the first argument:
19
+
20
+ index do
21
+ column "My Custom Title", :title
22
+ end
23
+
24
+ Sometimes calling methods just isn't enough and you need to write some view
25
+ specific code. For example, say we wanted a colum called Title which holds a
26
+ link to the posts admin screen.
27
+
28
+ The column method accepts a block as an argument which will then be rendered
29
+ within the context of the view for each of the objects in the collection.
30
+
31
+ index do
32
+ column "Title" do |post|
33
+ link_to post.title, admin_post_path(post)
34
+ end
35
+ end
36
+
37
+ The block gets called once for each resource in the collection. The resource gets passed into
38
+ the block as an argument.
39
+
40
+ To setup links to View, Edit and Delete a resource, use the default_actions method:
41
+
42
+ index do
43
+ column :title
44
+ default_actions
45
+ end
46
+
47
+ Alternatively, you can create a column with custom links:
48
+
49
+ index do
50
+ column :title
51
+ column "Actions" do |post|
52
+ link_to "View", admin_post_path(post)
53
+ end
54
+ end
55
+
56
+
57
+ ## Sorting
58
+
59
+ When a column is generated from an Active Record attribute, the table is
60
+ sortable by default. If you are creating a custom column, you may need to give
61
+ Active Admin a hint for how to sort the table.
62
+
63
+ If a column is defined using a block, you must pass the key to turn on sorting. The key
64
+ is the attribute which gets used to sort objects using Active Record.
65
+
66
+ index do
67
+ column "Title", :sortable => :title do |post|
68
+ link_to post.title, admin_post_path(post)
69
+ end
70
+ end
71
+
72
+ You can turn off sorting on any column by passing false:
73
+
74
+ index do
75
+ column :title, :sortable => false
76
+ end
77
+
78
+ ## Showing and Hiding Columns
79
+
80
+ The entire index block is rendered within the context of the view, so you can
81
+ easily do things that show or hide columns based on the current context.
82
+
83
+ For example, if you were using CanCan:
84
+
85
+ index do
86
+ column :title, :sortable => false
87
+ if can? :manage, Post
88
+ column :some_secret_data
89
+ end
90
+ end
@@ -0,0 +1,14 @@
1
+ # Customizing the CSV format
2
+
3
+ Active Admin provides CSV file downloads on the index screen for each Resource.
4
+ By default it will render a CSV file with all the content columns of your
5
+ registered model.
6
+
7
+ Customizing the CSV format is as simple as customizing the index page.
8
+
9
+ ActiveAdmin.register Post do
10
+ csv do
11
+ column :title
12
+ column("Author") { |post| post.author.full_name }
13
+ end
14
+ end
@@ -0,0 +1,39 @@
1
+ # Customizing the Form
2
+
3
+ Active Admin gives complete control over the output of the form by creating a thin DSL on top of
4
+ the fabulous DSL created by Formtastic (http://github.com/justinfrench/formtastic).
5
+
6
+ ActiveAdmin.register Post do
7
+
8
+ form do |f|
9
+ f.inputs "Details" do
10
+ f.input :title
11
+ f.input :published_at, :label => "Publish Post At"
12
+ f.input :category
13
+ end
14
+ f.inputs "Content" do
15
+ f.input :body
16
+ end
17
+ f.buttons
18
+ end
19
+
20
+ end
21
+
22
+ Please view the documentation for Formtastic to see all the wonderful things you can do:
23
+ http://github.com/justinfrench/formtastic
24
+
25
+ If you require a more custom form than can be provided through the DSL, you can pass
26
+ a partial in to render the form yourself.
27
+
28
+ For example:
29
+
30
+ ActiveAdmin.register Post do
31
+ form :partial => "form"
32
+ end
33
+
34
+ Then implement app/views/admin/posts/_form.html.erb:
35
+
36
+ <%= semantic_form_for [:admin, @post] do |f| %>
37
+ <%= f.inputs :title, :body %>
38
+ <%= f.buttons :commit %>
39
+ <% end %>
@@ -0,0 +1,22 @@
1
+ # Customizing the Show Screen
2
+
3
+ Customizing the show screen is as simple as implementing the show block:
4
+
5
+ ActiveAdmin.register Post do
6
+ show do
7
+ h3 post.title
8
+ div do
9
+ simple_format post.body
10
+ end
11
+ end
12
+ end
13
+
14
+ The show block is rendered within the context of the view and uses the Arbre HTML DSL. You
15
+ can also render a partial at any point.
16
+
17
+ ActiveAdmin.register Post do
18
+ show do
19
+ # renders app/views/admin/posts/_some_partial.html.erb
20
+ render "some_partial"
21
+ end
22
+ end
@@ -0,0 +1,35 @@
1
+ # Sidebar Sections
2
+
3
+ To add a sidebar section to all the screen within a section, use the sidebar method:
4
+
5
+ sidebar :help do
6
+ "Need help? Email us at help@example.com"
7
+ end
8
+
9
+ This will generate a sidebar section on each screen of the resource. With the block as
10
+ the contents of the section. The first argument is the section title.
11
+
12
+ You can also use Arbre syntax to define the content.
13
+
14
+ sidebar :help do
15
+ ul do
16
+ li "Second List First Item"
17
+ li "Second List Second Item"
18
+ end
19
+ end
20
+
21
+ Sidebar sections can be rendered on a specific action by using the :only or :except
22
+ options.
23
+
24
+ sidebar :help, :only => :index do
25
+ "Need help? Email us at help@example.com"
26
+ end
27
+
28
+ If you only pass a symbol, Active Admin will attempt to locate a partial to render.
29
+
30
+ # Will render app/views/admin/posts/_help_sidebar.html.erb
31
+ sidebar :help
32
+
33
+ Or you can pass your own custom partial to render.
34
+
35
+ sidebar :help, :partial => "custom_help_partial"
@@ -0,0 +1,123 @@
1
+ # Custom Controller Actions
2
+
3
+ Active Admin allows you to override and modify the underlying controller which
4
+ is generated for you. There are helpers to add collection and member actions, or
5
+ you can drop right in to the controller and modify its behavior.
6
+
7
+ ## Collection Actions
8
+
9
+ A collection action is a controller action which operates on the collection of
10
+ resources. This method adds both the action to the controller as well as
11
+ generating a route for you.
12
+
13
+ To add a collection action, use the collection_action method:
14
+
15
+
16
+ ActiveAdmin.register Post do
17
+
18
+ collection_action :import_csv, :method => :post do
19
+ # Do some CSV importing work here...
20
+ redirect_to :action => :index, :notice => "CSV imported successfully!"
21
+ end
22
+
23
+ end
24
+
25
+ This collection action will generate a route at "/admin/posts/import_csv"
26
+ pointing to the Admin::PostsController#import_csv controller action.
27
+
28
+ ## Member Actions
29
+
30
+ A member action is a controller action which operates on a single resource.
31
+
32
+ For example, to add a lock action to a user resource, you would do the
33
+ following:
34
+
35
+ ActiveAdmin.register User do
36
+
37
+ member_action :lock, :method => :put do
38
+ user = User.find(params[:id])
39
+ user.lock!
40
+ redirect_to :action => :show, :notice => "Locked!"
41
+ end
42
+
43
+ end
44
+
45
+ This will generate a route at "/admin/users/:id/lock" pointing to the
46
+ Admin::UserController#lock controller action.
47
+
48
+ ## Controller Action HTTP Verb
49
+
50
+ The collection_action and member_actions methods both accept the "method"
51
+ argument to set the HTTP verb for the controller action and route.
52
+
53
+ The generated routes will be scoped to the given method you pass in. By default
54
+ your action will use the :get verb.
55
+
56
+ ## Rendering in Custom Actions
57
+
58
+ Custom controller actions support rendering within the standard Active Admin
59
+ layout.
60
+
61
+ ActiveAdmin.register Post do
62
+
63
+ # /admin/posts/:id/comments
64
+ member_action :comments do
65
+ @post = Post.find(params[:id])
66
+
67
+ # This will render app/views/admin/posts/comments.html.erb
68
+ end
69
+
70
+ end
71
+
72
+ If you would like to use the same view syntax as the rest of Active Admin, you
73
+ can use the Arbre file extension: .arb.
74
+
75
+ For example, create app/views/admin/posts/comments.html.arb with:
76
+
77
+ table_for assigns[:post].comments do
78
+ column :id
79
+ column :author
80
+ column :body do |comment|
81
+ simple_format comment.body
82
+ end
83
+ end
84
+
85
+ ### Page Titles
86
+
87
+ The page title for the custom action will be the internationalized version of
88
+ the controller action name. For example, a member_action named "upload_csv" will
89
+ look up a translation key of "active_admin.upload_csv". If none are found, it
90
+ just title cases the controller action's name.
91
+
92
+ If this method doesn't work for your requirements, you can always set the
93
+ @page_title instance variable in your controller action to customize the page
94
+ title.
95
+
96
+ ActiveAdmin.register Post do
97
+
98
+ # /admin/posts/:id/comments
99
+ member_action :comments do
100
+ @post = Post.find(params[:id])
101
+ @page_title = "#{@post.title}: Comments" # Set the page title
102
+
103
+ # This will render app/views/admin/posts/comments.html.erb
104
+ end
105
+
106
+ end
107
+
108
+ ## Modify the Controller
109
+
110
+ The generated controller is available to you within the registration block by
111
+ using the #controller method.
112
+
113
+ ActiveAdmin.register Post do
114
+
115
+ controller do
116
+ # This code is evaluated within the controller class
117
+
118
+ def define_a_method
119
+ # Instance method
120
+ end
121
+ end
122
+
123
+ end