activeadmin 0.4.4 → 0.5.0.pre

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 (310) hide show
  1. data/.gitignore +3 -0
  2. data/.travis.yml +5 -0
  3. data/CHANGELOG.md +50 -0
  4. data/CONTRIBUTING.md +2 -4
  5. data/Gemfile +10 -4
  6. data/Guardfile +0 -1
  7. data/LICENSE +1 -1
  8. data/README.rdoc +19 -8
  9. data/Rakefile +10 -1
  10. data/activeadmin.gemspec +2 -1
  11. data/app/assets/javascripts/active_admin/application.js +3 -9
  12. data/app/assets/javascripts/active_admin/base.js +1 -0
  13. data/app/assets/javascripts/active_admin/components/jquery.aa.checkbox-toggler.js.coffee +64 -0
  14. data/app/assets/javascripts/active_admin/components/jquery.aa.dropdown-menu.js.coffee +107 -0
  15. data/app/assets/javascripts/active_admin/components/jquery.aa.popover.js.coffee +100 -0
  16. data/app/assets/javascripts/active_admin/components/jquery.aa.table-checkbox-toggler.js.coffee +27 -0
  17. data/app/assets/javascripts/active_admin/lib/namespace.js.coffee +3 -0
  18. data/app/assets/javascripts/active_admin/pages/application.js.coffee +13 -0
  19. data/app/assets/javascripts/active_admin/pages/batch_actions.js.coffee +26 -0
  20. data/app/assets/stylesheets/active_admin/_base.css.scss +32 -26
  21. data/app/assets/stylesheets/active_admin/_forms.css.scss +12 -5
  22. data/app/assets/stylesheets/active_admin/_header.css.scss +1 -2
  23. data/app/assets/stylesheets/active_admin/_typography.css.scss +1 -1
  24. data/app/assets/stylesheets/active_admin/components/_batch_actions.css.scss +11 -0
  25. data/app/assets/stylesheets/active_admin/components/_buttons.scss +1 -2
  26. data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +151 -0
  27. data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +3 -3
  28. data/app/assets/stylesheets/active_admin/components/_popovers.css.scss +123 -0
  29. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +1 -1
  30. data/app/assets/stylesheets/active_admin/components/_table_tools.css.scss +20 -27
  31. data/app/assets/stylesheets/active_admin/components/_tables.css.scss +1 -0
  32. data/app/assets/stylesheets/active_admin/mixins/_buttons.css.scss +38 -36
  33. data/app/assets/stylesheets/active_admin/mixins/_gradients.css.scss +5 -5
  34. data/app/assets/stylesheets/active_admin/mixins/_icons.css.scss +7 -3
  35. data/app/assets/stylesheets/active_admin/mixins/_variables.css.scss +19 -17
  36. data/app/assets/stylesheets/active_admin/pages/_logged_out.scss +2 -2
  37. data/app/assets/stylesheets/active_admin/print.css.scss +290 -0
  38. data/app/views/active_admin/dashboard/index.html.arb +1 -1
  39. data/app/views/active_admin/devise/passwords/edit.html.erb +17 -14
  40. data/app/views/active_admin/devise/passwords/new.html.erb +4 -4
  41. data/app/views/active_admin/devise/sessions/new.html.erb +6 -6
  42. data/app/views/active_admin/devise/shared/_links.erb +6 -6
  43. data/app/views/active_admin/page/index.html.arb +1 -1
  44. data/app/views/active_admin/resource/edit.html.arb +1 -1
  45. data/app/views/active_admin/resource/index.csv.erb +1 -1
  46. data/app/views/active_admin/resource/index.html.arb +1 -1
  47. data/app/views/active_admin/resource/new.html.arb +1 -1
  48. data/app/views/active_admin/resource/show.html.arb +1 -1
  49. data/app/views/layouts/active_admin.html.arb +1 -1
  50. data/app/views/layouts/active_admin_logged_out.html.erb +2 -2
  51. data/cucumber.yml +1 -1
  52. data/docs/0-installation.md +10 -1
  53. data/docs/{9-custom-pages.md → 10-custom-pages.md} +0 -0
  54. data/docs/2-resource-customization.md +19 -1
  55. data/docs/3-index-pages.md +31 -0
  56. data/docs/4-csv-format.md +9 -0
  57. data/docs/6-show-screens.md +1 -1
  58. data/docs/9-batch-actions.md +161 -0
  59. data/features/dashboard.feature +31 -8
  60. data/features/development_reloading.feature +1 -1
  61. data/features/edit_page.feature +3 -3
  62. data/features/i18n.feature +35 -0
  63. data/features/index/batch_actions.feature +98 -0
  64. data/features/index/filters.feature +26 -0
  65. data/features/index/format_as_csv.feature +35 -0
  66. data/features/index/index_as_table.feature +30 -2
  67. data/features/index/index_blank_slate.feature +8 -3
  68. data/features/index/index_scopes.feature +130 -24
  69. data/features/index/page_title.feature +12 -0
  70. data/features/new_page.feature +3 -3
  71. data/features/registering_pages.feature +61 -0
  72. data/features/root_to.feature +17 -0
  73. data/features/show/default_content.feature +1 -1
  74. data/features/show/page_title.feature +14 -0
  75. data/features/sidebar_sections.feature +26 -0
  76. data/features/site_title.feature +1 -1
  77. data/features/specifying_actions.feature +7 -6
  78. data/features/step_definitions/action_link_steps.rb +1 -1
  79. data/features/step_definitions/additional_web_steps.rb +7 -1
  80. data/features/step_definitions/batch_action_steps.rb +94 -0
  81. data/features/step_definitions/configuration_steps.rb +30 -8
  82. data/features/step_definitions/factory_steps.rb +12 -0
  83. data/features/step_definitions/format_steps.rb +6 -2
  84. data/features/step_definitions/i18n_steps.rb +3 -0
  85. data/features/step_definitions/table_steps.rb +114 -0
  86. data/features/step_definitions/user_steps.rb +30 -4
  87. data/features/support/env.rb +54 -15
  88. data/features/support/paths.rb +2 -0
  89. data/features/users/logging_in.feature +1 -1
  90. data/features/users/logging_out.feature +2 -1
  91. data/features/users/resetting_password.feature +34 -0
  92. data/lib/active_admin.rb +46 -7
  93. data/lib/active_admin/application.rb +30 -15
  94. data/lib/active_admin/base_controller/menu.rb +3 -3
  95. data/lib/active_admin/batch_actions.rb +17 -0
  96. data/lib/active_admin/batch_actions/controller.rb +25 -0
  97. data/lib/active_admin/batch_actions/resource_extension.rb +126 -0
  98. data/lib/active_admin/batch_actions/views/batch_action_form.rb +35 -0
  99. data/lib/active_admin/batch_actions/views/batch_action_popover.rb +28 -0
  100. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +63 -0
  101. data/lib/active_admin/batch_actions/views/selection_cells.rb +37 -0
  102. data/lib/active_admin/comments.rb +5 -2
  103. data/lib/active_admin/comments/comment.rb +4 -3
  104. data/lib/active_admin/comments/views/active_admin_comments.rb +5 -5
  105. data/lib/active_admin/component.rb +1 -18
  106. data/lib/active_admin/csv_builder.rb +8 -3
  107. data/lib/active_admin/dashboards.rb +21 -4
  108. data/lib/active_admin/dashboards/dashboard_controller.rb +1 -5
  109. data/lib/active_admin/dependency_checker.rb +1 -1
  110. data/lib/active_admin/dsl.rb +61 -4
  111. data/lib/active_admin/engine.rb +1 -1
  112. data/lib/active_admin/filters.rb +8 -0
  113. data/lib/active_admin/filters/dsl.rb +12 -0
  114. data/lib/active_admin/filters/forms.rb +93 -0
  115. data/lib/active_admin/filters/resource_extension.rb +92 -0
  116. data/lib/active_admin/form_builder.rb +88 -33
  117. data/lib/active_admin/helpers/collection.rb +23 -0
  118. data/lib/active_admin/helpers/optional_display.rb +1 -1
  119. data/lib/active_admin/inputs/filter_select_input.rb +1 -1
  120. data/lib/active_admin/locales/bg.yml +37 -1
  121. data/lib/active_admin/locales/ca.yml +36 -0
  122. data/lib/active_admin/locales/cs.yml +36 -0
  123. data/lib/active_admin/locales/da.yml +36 -0
  124. data/lib/active_admin/locales/de.yml +42 -0
  125. data/lib/active_admin/locales/en.yml +27 -2
  126. data/lib/active_admin/locales/es.yml +45 -4
  127. data/lib/active_admin/locales/fr.yml +22 -0
  128. data/lib/active_admin/locales/{he_il.yml → he.yml} +37 -2
  129. data/lib/active_admin/locales/hr.yml +49 -5
  130. data/lib/active_admin/locales/hu.yml +21 -0
  131. data/lib/active_admin/locales/it.yml +36 -1
  132. data/lib/active_admin/locales/ja.yml +36 -0
  133. data/lib/active_admin/locales/ko.yml +36 -1
  134. data/lib/active_admin/locales/lv.yml +28 -2
  135. data/lib/active_admin/locales/nl.yml +42 -1
  136. data/lib/active_admin/locales/no-NB.yml +15 -0
  137. data/lib/active_admin/locales/pl.yml +45 -1
  138. data/lib/active_admin/locales/pt-BR.yml +36 -1
  139. data/lib/active_admin/locales/ro.yml +67 -0
  140. data/lib/active_admin/locales/ru.yml +43 -3
  141. data/lib/active_admin/locales/sv-SE.yml +41 -1
  142. data/lib/active_admin/locales/tr.yml +80 -0
  143. data/lib/active_admin/locales/vi.yml +80 -0
  144. data/lib/active_admin/locales/{zh_cn.yml → zh-CN.yml} +42 -2
  145. data/lib/active_admin/locales/zh-TW.yml +36 -1
  146. data/lib/active_admin/menu.rb +55 -30
  147. data/lib/active_admin/menu_builder.rb +65 -0
  148. data/lib/active_admin/menu_item.rb +55 -14
  149. data/lib/active_admin/namespace.rb +25 -55
  150. data/lib/active_admin/page.rb +15 -10
  151. data/lib/active_admin/resource.rb +9 -0
  152. data/lib/active_admin/resource/action_items.rb +4 -4
  153. data/lib/active_admin/resource/controllers.rb +1 -1
  154. data/lib/active_admin/resource/menu.rb +19 -21
  155. data/lib/active_admin/resource/naming.rb +55 -45
  156. data/lib/active_admin/resource/sidebars.rb +0 -13
  157. data/lib/active_admin/resource_collection.rb +10 -10
  158. data/lib/active_admin/resource_controller.rb +5 -5
  159. data/lib/active_admin/resource_controller/actions.rb +2 -0
  160. data/lib/active_admin/resource_controller/collection.rb +13 -4
  161. data/lib/active_admin/resource_dsl.rb +12 -6
  162. data/lib/active_admin/router.rb +27 -8
  163. data/lib/active_admin/scope.rb +1 -0
  164. data/lib/active_admin/sidebar_section.rb +2 -6
  165. data/lib/active_admin/version.rb +1 -1
  166. data/lib/active_admin/view_factory.rb +18 -13
  167. data/lib/active_admin/view_helpers.rb +0 -2
  168. data/lib/active_admin/view_helpers/auto_link_helper.rb +2 -1
  169. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +24 -25
  170. data/lib/active_admin/view_helpers/display_helper.rb +1 -1
  171. data/lib/active_admin/view_helpers/fields_for.rb +44 -0
  172. data/lib/active_admin/view_helpers/form_helper.rb +6 -0
  173. data/lib/active_admin/view_helpers/view_factory_helper.rb +1 -1
  174. data/lib/active_admin/views/components/action_list_popover.rb +29 -0
  175. data/lib/active_admin/views/components/attributes_table.rb +6 -2
  176. data/lib/active_admin/views/components/dropdown_menu.rb +73 -0
  177. data/lib/active_admin/views/components/paginated_collection.rb +13 -14
  178. data/lib/active_admin/views/components/popover.rb +27 -0
  179. data/lib/active_admin/views/components/scopes.rb +8 -13
  180. data/lib/active_admin/views/components/sidebar_section.rb +1 -1
  181. data/lib/active_admin/views/components/site_title.rb +55 -0
  182. data/lib/active_admin/views/components/status_tag.rb +4 -4
  183. data/lib/active_admin/views/components/table_for.rb +18 -18
  184. data/lib/active_admin/views/dashboard_section_renderer.rb +1 -1
  185. data/lib/active_admin/views/footer.rb +18 -0
  186. data/lib/active_admin/views/header.rb +31 -0
  187. data/lib/active_admin/views/index_as_block.rb +3 -0
  188. data/lib/active_admin/views/index_as_blog.rb +4 -0
  189. data/lib/active_admin/views/index_as_grid.rb +2 -0
  190. data/lib/active_admin/views/index_as_table.rb +19 -6
  191. data/lib/active_admin/views/pages/base.rb +14 -48
  192. data/lib/active_admin/views/pages/form.rb +3 -3
  193. data/lib/active_admin/views/pages/index.rb +56 -24
  194. data/lib/active_admin/views/pages/layout.rb +2 -2
  195. data/lib/active_admin/views/pages/page.rb +10 -4
  196. data/lib/active_admin/views/pages/show.rb +11 -8
  197. data/lib/active_admin/views/tabbed_navigation.rb +3 -3
  198. data/lib/active_admin/views/title_bar.rb +50 -0
  199. data/lib/active_admin/views/utility_nav.rb +41 -0
  200. data/lib/generators/active_admin/assets/assets_generator.rb +1 -1
  201. data/lib/generators/active_admin/assets/templates/3.0/active_admin.js +1 -0
  202. data/lib/generators/active_admin/assets/templates/3.1/active_admin.css.scss +26 -3
  203. data/lib/generators/active_admin/devise/devise_generator.rb +2 -2
  204. data/lib/generators/active_admin/install/install_generator.rb +10 -10
  205. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +21 -1
  206. data/lib/generators/active_admin/install/templates/admin_user.rb.erb +20 -0
  207. data/lib/generators/active_admin/install/templates/dashboard.rb +33 -0
  208. data/lib/generators/active_admin/resource/templates/admin.rb +1 -1
  209. data/spec/integration/memory_spec.rb +1 -11
  210. data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +50 -0
  211. data/spec/javascripts/coffeescripts/jquery.aa.popover-spec.js.coffee +82 -0
  212. data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +34 -0
  213. data/spec/javascripts/compiled/jquery.aa.checkbox-toggler-spec.js +60 -0
  214. data/spec/javascripts/compiled/jquery.aa.popover-spec.js +106 -0
  215. data/spec/javascripts/compiled/jquery.aa.table-checkbox-toggler-spec.js +37 -0
  216. data/spec/javascripts/fixtures/checkboxes.html +9 -0
  217. data/spec/javascripts/fixtures/table_checkboxes.html +17 -0
  218. data/spec/javascripts/helpers/SpecHelper.js +3 -0
  219. data/spec/javascripts/helpers/vendor/jasmine-fixture-0.0.5.js +108 -0
  220. data/spec/javascripts/helpers/vendor/jasmine-jquery.js +288 -0
  221. data/spec/javascripts/helpers/vendor/sinon-1.2.0.js +2915 -0
  222. data/spec/javascripts/support/jasmine.yml +74 -0
  223. data/spec/javascripts/support/jasmine_config.rb +23 -0
  224. data/spec/javascripts/support/jasmine_runner.rb +32 -0
  225. data/spec/javascripts/support/jquery-ui-1.8.16.custom.min.js +34 -0
  226. data/spec/javascripts/support/jquery.min.js +4 -0
  227. data/spec/spec_helper.rb +13 -13
  228. data/spec/spec_helper_without_rails.rb +2 -3
  229. data/spec/support/detect_rails_version.rb +16 -10
  230. data/spec/support/rails_template.rb +13 -1
  231. data/spec/support/templates/admin/stores.rb +1 -0
  232. data/spec/support/templates/en.yml +6 -0
  233. data/spec/unit/action_builder_spec.rb +38 -0
  234. data/spec/unit/application_spec.rb +12 -16
  235. data/spec/unit/base_controller_shared_examples.rb +3 -6
  236. data/spec/unit/batch_actions/resource_spec.rb +91 -0
  237. data/spec/unit/batch_actions/settings_spec.rb +61 -0
  238. data/spec/unit/breadcrumbs_spec.rb +33 -0
  239. data/spec/unit/comments_spec.rb +6 -0
  240. data/spec/unit/config_shared_examples.rb +17 -64
  241. data/spec/unit/csv_builder_spec.rb +12 -2
  242. data/spec/unit/dashboard_controller_spec.rb +11 -5
  243. data/spec/unit/dsl_include_spec.rb +20 -0
  244. data/spec/unit/{filter_form_builder_spec.rb → filters/filter_form_builder_spec.rb} +10 -7
  245. data/spec/unit/filters/resource_spec.rb +60 -0
  246. data/spec/unit/form_builder_spec.rb +180 -28
  247. data/spec/unit/helpers/collection_spec.rb +65 -0
  248. data/spec/unit/menu_item_spec.rb +48 -53
  249. data/spec/unit/menu_spec.rb +46 -32
  250. data/spec/unit/namespace/register_page_spec.rb +0 -6
  251. data/spec/unit/namespace/register_resource_spec.rb +1 -8
  252. data/spec/unit/namespace_spec.rb +8 -2
  253. data/spec/unit/page_spec.rb +20 -8
  254. data/spec/unit/resource/naming_spec.rb +27 -26
  255. data/spec/unit/resource/sidebars_spec.rb +0 -7
  256. data/spec/unit/resource_collection_spec.rb +11 -11
  257. data/spec/unit/resource_controller/collection_spec.rb +23 -1
  258. data/spec/unit/resource_controller/sidebars_spec.rb +46 -0
  259. data/spec/unit/resource_controller_spec.rb +43 -0
  260. data/spec/unit/resource_registration_spec.rb +2 -13
  261. data/spec/unit/resource_spec.rb +0 -42
  262. data/spec/unit/routing_spec.rb +60 -14
  263. data/spec/unit/scope_spec.rb +7 -0
  264. data/spec/unit/view_factory_spec.rb +9 -6
  265. data/spec/unit/view_helpers/fields_for_spec.rb +41 -0
  266. data/spec/unit/view_helpers/form_helper_spec.rb +18 -0
  267. data/spec/unit/views/components/action_list_popover_spec.rb +30 -0
  268. data/spec/unit/views/components/attributes_table_spec.rb +32 -20
  269. data/spec/unit/views/components/batch_action_popover_spec.rb +33 -0
  270. data/spec/unit/views/components/blank_slate_spec.rb +5 -3
  271. data/spec/unit/views/components/columns_spec.rb +32 -22
  272. data/spec/unit/views/components/paginated_collection_spec.rb +54 -12
  273. data/spec/unit/views/components/panel_spec.rb +11 -6
  274. data/spec/unit/views/components/popover_spec.rb +33 -0
  275. data/spec/unit/views/components/sidebar_section_spec.rb +6 -6
  276. data/spec/unit/views/components/site_title_spec.rb +78 -0
  277. data/spec/unit/views/components/status_tag_spec.rb +17 -10
  278. data/spec/unit/views/components/table_for_spec.rb +37 -17
  279. data/spec/unit/views/pages/layout_spec.rb +51 -10
  280. data/spec/unit/views/tabbed_navigation_spec.rb +44 -23
  281. data/tasks/js.rake +32 -0
  282. data/tasks/test.rake +1 -1
  283. metadata +233 -200
  284. data/lib/active_admin/arbre.rb +0 -22
  285. data/lib/active_admin/arbre/builder.rb +0 -125
  286. data/lib/active_admin/arbre/context.rb +0 -45
  287. data/lib/active_admin/arbre/html/attributes.rb +0 -20
  288. data/lib/active_admin/arbre/html/class_list.rb +0 -24
  289. data/lib/active_admin/arbre/html/collection.rb +0 -27
  290. data/lib/active_admin/arbre/html/document.rb +0 -42
  291. data/lib/active_admin/arbre/html/element.rb +0 -161
  292. data/lib/active_admin/arbre/html/html5_elements.rb +0 -47
  293. data/lib/active_admin/arbre/html/tag.rb +0 -145
  294. data/lib/active_admin/arbre/html/text_node.rb +0 -35
  295. data/lib/active_admin/filter_form_builder.rb +0 -53
  296. data/lib/active_admin/renderer.rb +0 -87
  297. data/lib/active_admin/resource_controller/filters.rb +0 -58
  298. data/lib/active_admin/stylesheets/active_admin/mixins/_utilities.scss +0 -0
  299. data/lib/active_admin/view_helpers/filter_form_helper.rb +0 -36
  300. data/lib/active_admin/view_helpers/renderer_helper.rb +0 -29
  301. data/lib/active_admin/views/header_renderer.rb +0 -82
  302. data/lib/generators/active_admin/assets/templates/dashboards.rb +0 -36
  303. data/lib/generators/active_admin/install/templates/dashboards.rb +0 -44
  304. data/spec/unit/arbre/context_spec.rb +0 -35
  305. data/spec/unit/arbre/html/element_finder_methods_spec.rb +0 -110
  306. data/spec/unit/arbre/html/element_spec.rb +0 -236
  307. data/spec/unit/arbre/html/tag_attributes_spec.rb +0 -61
  308. data/spec/unit/arbre/html/tag_spec.rb +0 -63
  309. data/spec/unit/arbre/html_spec.rb +0 -228
  310. data/spec/unit/renderer_spec.rb +0 -126
@@ -68,8 +68,12 @@ module ActiveAdmin
68
68
  # column("Author") { |post| post.author.full_name }
69
69
  # end
70
70
  #
71
- def csv(&block)
72
- config.csv_builder = CSVBuilder.new(&block)
71
+ # csv :separator => ";" do
72
+ # column :name
73
+ # end
74
+ #
75
+ def csv(options={}, &block)
76
+ config.csv_builder = CSVBuilder.new(options, &block)
73
77
  end
74
78
 
75
79
  # Member Actions give you the functionality of defining both the
@@ -93,14 +97,20 @@ module ActiveAdmin
93
97
  #
94
98
  def member_action(name, options = {}, &block)
95
99
  config.member_actions << ControllerAction.new(name, options)
100
+ title = options.delete(:title)
101
+
96
102
  controller do
103
+ before_filter(:only => [name]) { @page_title = title } if title
97
104
  define_method(name, &block || Proc.new{})
98
105
  end
99
106
  end
100
107
 
101
108
  def collection_action(name, options = {}, &block)
102
109
  config.collection_actions << ControllerAction.new(name, options)
110
+ title = options.delete(:title)
111
+
103
112
  controller do
113
+ before_filter(:only => [name]){ @page_title = title } if title
104
114
  define_method(name, &block || Proc.new{})
105
115
  end
106
116
  end
@@ -135,10 +145,6 @@ module ActiveAdmin
135
145
  delegate :before_save, :after_save, :to => :controller
136
146
  delegate :before_destroy, :after_destroy, :to => :controller
137
147
 
138
- # Filters
139
- delegate :filter, :to => :controller
140
-
141
-
142
148
  # Standard rails filters
143
149
  delegate :before_filter, :skip_before_filter, :after_filter, :around_filter, :to => :controller
144
150
 
@@ -14,14 +14,22 @@ module ActiveAdmin
14
14
  # end
15
15
  #
16
16
  def apply(router)
17
- # Define any necessary dashboard routes
17
+ # Define any necessary dashboard routes and root
18
18
  router.instance_exec(@application.namespaces.values) do |namespaces|
19
19
  namespaces.each do |namespace|
20
+ root_and_dashboard_routes = Proc.new do
21
+ root :to => (namespace.root_to || "dashboard#index")
22
+ if ActiveAdmin::Dashboards.built?
23
+ match '/dashboard' => 'dashboard#index', :as => 'dashboard'
24
+ end
25
+ end
26
+
20
27
  if namespace.root?
21
- match '/' => 'dashboard#index', :as => 'dashboard'
28
+ instance_eval &root_and_dashboard_routes
22
29
  else
23
- name = namespace.name
24
- match name.to_s => "#{name}/dashboard#index", :as => "#{name.to_s}_dashboard"
30
+ namespace(namespace.name) do
31
+ instance_eval &root_and_dashboard_routes
32
+ end
25
33
  end
26
34
  end
27
35
  end
@@ -35,7 +43,7 @@ module ActiveAdmin
35
43
  route_definition_block = Proc.new do
36
44
  case config
37
45
  when Resource
38
- resources config.underscored_resource_name.pluralize do
46
+ resources config.resource_name.route_key, :only => config.defined_actions do
39
47
  # Define any member actions
40
48
  member do
41
49
  config.member_actions.each do |action|
@@ -49,9 +57,12 @@ module ActiveAdmin
49
57
  config.collection_actions.each do |action|
50
58
  send(action.http_verb, action.name)
51
59
  end
60
+
61
+ post :batch_action
52
62
  end
53
63
  end
54
64
  when Page
65
+
55
66
  match "/#{config.underscored_resource_name}" => "#{config.underscored_resource_name}#index"
56
67
  config.page_actions.each do |action|
57
68
  match "/#{config.underscored_resource_name}/#{action.name}" => "#{config.underscored_resource_name}##{action.name}", :via => action.http_verb
@@ -70,14 +81,23 @@ module ActiveAdmin
70
81
 
71
82
  # Make the nested belongs_to routes
72
83
  # :only is set to nothing so that we don't clobber any existing routes on the resource
73
- resources config.belongs_to_config.target.underscored_resource_name.pluralize, :only => [] do
84
+ resources config.belongs_to_config.target.resource_name.plural, :only => [] do
74
85
  instance_eval &routes_for_belongs_to
75
86
  end
87
+
88
+ # Batch action path is not nested.
89
+ if config.is_a?(Resource)
90
+ resources config.resource_name.route_key, :only => config.defined_actions do
91
+ collection do
92
+ post :batch_action
93
+ end
94
+ end
95
+ end
76
96
  end
77
97
  end
78
98
 
79
99
  # Add on the namespace if required
80
- if !config.namespace.root?
100
+ unless config.namespace.root?
81
101
  routes_in_namespace = route_definition_block.dup
82
102
  route_definition_block = Proc.new do
83
103
  namespace config.namespace.name do
@@ -90,6 +110,5 @@ module ActiveAdmin
90
110
  end
91
111
  end
92
112
  end
93
-
94
113
  end
95
114
  end
@@ -24,6 +24,7 @@ module ActiveAdmin
24
24
  @scope_method = method
25
25
  # Scope ':all' means no scoping
26
26
  @scope_method ||= name.to_sym unless name.to_sym == :all
27
+ @scope_method = nil if method && method.to_s == 'all'
27
28
  @id = @name.gsub(' ', '').underscore
28
29
  if block_given?
29
30
  @scope_method = nil
@@ -12,7 +12,7 @@ module ActiveAdmin
12
12
 
13
13
  # The id gets used for the div in the view
14
14
  def id
15
- name.to_s.downcase.underscore + '_sidebar_section'
15
+ "#{name.to_s.downcase.underscore}_sidebar_section".parameterize
16
16
  end
17
17
 
18
18
  def icon?
@@ -25,11 +25,7 @@ module ActiveAdmin
25
25
 
26
26
  # The title gets displayed within the section in the view
27
27
  def title
28
- begin
29
- I18n.t!("active_admin.sidebars.#{name.to_s}")
30
- rescue I18n::MissingTranslationData
31
- name.to_s.titlecase
32
- end
28
+ I18n.t("active_admin.sidebars.#{name.to_s}", :default => name.to_s.titlecase)
33
29
  end
34
30
 
35
31
  # If a block is not passed in, the name of the partial to render
@@ -1,3 +1,3 @@
1
1
  module ActiveAdmin
2
- VERSION = '0.4.4'
2
+ VERSION = '0.5.0.pre'
3
3
  end
@@ -4,21 +4,26 @@ module ActiveAdmin
4
4
  class ViewFactory < AbstractViewFactory
5
5
 
6
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
7
+ register :global_navigation => ActiveAdmin::Views::TabbedNavigation,
8
+ :site_title => ActiveAdmin::Views::SiteTitle,
9
+ :utility_navigation => ActiveAdmin::Views::UtilityNav,
10
+ :action_items => ActiveAdmin::Views::ActionItems,
11
+ :title_bar => ActiveAdmin::Views::TitleBar,
12
+ :header => ActiveAdmin::Views::Header,
13
+ :footer => ActiveAdmin::Views::Footer,
14
+ :dashboard_section => ActiveAdmin::Views::DashboardSection,
15
+ :index_scopes => ActiveAdmin::Views::Scopes,
16
+ :blank_slate => ActiveAdmin::Views::BlankSlate,
17
+ :action_list_popover => ActiveAdmin::Views::ActionListPopover
13
18
 
14
19
  # 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::Form,
19
- :edit_page => ActiveAdmin::Views::Pages::Form,
20
- :layout => ActiveAdmin::Views::Pages::Layout,
21
- :page => ActiveAdmin::Views::Pages::Page
20
+ register :dashboard_page => ActiveAdmin::Views::Pages::Dashboard,
21
+ :index_page => ActiveAdmin::Views::Pages::Index,
22
+ :show_page => ActiveAdmin::Views::Pages::Show,
23
+ :new_page => ActiveAdmin::Views::Pages::Form,
24
+ :edit_page => ActiveAdmin::Views::Pages::Form,
25
+ :layout => ActiveAdmin::Views::Pages::Layout,
26
+ :page => ActiveAdmin::Views::Pages::Page
22
27
 
23
28
  end
24
29
  end
@@ -6,7 +6,6 @@ module ActiveAdmin
6
6
 
7
7
  include AssignsWithIndifferentAccessHelper
8
8
  include ActiveAdminApplicationHelper
9
- include RendererHelper
10
9
  include AutoLinkHelper
11
10
  include BreadcrumbHelper
12
11
  include DisplayHelper
@@ -14,7 +13,6 @@ module ActiveAdmin
14
13
  include MethodOrProcHelper
15
14
  include SidebarHelper
16
15
  include FormHelper
17
- include FilterFormHelper
18
16
  include TitleHelper
19
17
  include ViewFactoryHelper
20
18
 
@@ -13,10 +13,11 @@ module ActiveAdmin
13
13
  #
14
14
  def auto_link(resource, link_content = nil)
15
15
  content = link_content || display_name(resource)
16
- if registration = active_admin_resource_for(resource.class)
16
+ if (registration = active_admin_resource_for(resource.class))
17
17
  begin
18
18
  content = link_to(content, send(registration.route_instance_path, resource))
19
19
  rescue
20
+ # ignored
20
21
  end
21
22
  end
22
23
  content
@@ -2,31 +2,30 @@ module ActiveAdmin
2
2
  module ViewHelpers
3
3
  module BreadcrumbHelper
4
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
- begin
23
- crumbs << link_to( I18n.translate!("activerecord.models.#{part.singularize}", :count => 2), "/" + parts[0..index].join('/'))
24
- rescue I18n::MissingTranslationData
25
- crumbs << link_to( name, "/" + parts[0..index].join('/'))
26
- end
27
- end
28
- crumbs
29
- end
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 = nil
13
+ if part =~ /^\d|^[a-f0-9]{24}$/ && (parent = parts[index - 1])
14
+ begin
15
+ parent_class = parent.singularize.camelcase.constantize
16
+ obj = parent_class.find(part[/^[a-f0-9]{24}$/] ? part : part.to_i)
17
+ name = display_name(obj)
18
+ rescue
19
+ # ignored
20
+ end
21
+ end
22
+
23
+ name ||= I18n.t("activerecord.models.#{part.singularize}", :count => 1.1, :default => part.titlecase)
24
+
25
+ crumbs << link_to( name, "/" + parts[0..index].join('/'))
26
+ end
27
+ crumbs
28
+ end
30
29
 
31
30
  end
32
31
  end
@@ -22,7 +22,7 @@ module ActiveAdmin
22
22
  case object
23
23
  when String
24
24
  object
25
- when Arbre::HTML::Element
25
+ when Arbre::Element
26
26
  object
27
27
  when Date, Time
28
28
  localize(object, :format => :long)
@@ -0,0 +1,44 @@
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 Hash
32
+ fields_for_params(v, :namespace => k)
33
+ when Array
34
+ v.map do |v|
35
+ { "#{k}[]" => v }
36
+ end
37
+ else
38
+ raise "I don't know what to do with #{v.class} params: #{v.inspect}"
39
+ end
40
+ end.flatten.compact
41
+ end
42
+ end
43
+ end
44
+ end
@@ -8,6 +8,12 @@ module ActiveAdmin
8
8
  semantic_form_for resource, options, &block
9
9
  end
10
10
 
11
+ def hidden_field_tags_for(params, options={})
12
+ fields_for_params(params, options).map do |kv|
13
+ k, v = kv.first
14
+ hidden_field_tag k, v
15
+ end.join("\n").html_safe
16
+ end
11
17
  end
12
18
  end
13
19
  end
@@ -3,7 +3,7 @@ module ActiveAdmin
3
3
  module ViewFactoryHelper
4
4
 
5
5
  def view_factory
6
- active_admin_application.view_factory
6
+ active_admin_namespace.view_factory
7
7
  end
8
8
 
9
9
  end
@@ -0,0 +1,29 @@
1
+ require 'active_admin/views/components/popover'
2
+
3
+ module ActiveAdmin
4
+ module Views
5
+ # Build an ActionListPopover
6
+ class ActionListPopover < ActiveAdmin::Views::Popover
7
+ builder_method :action_list_popover
8
+
9
+
10
+ def build(*args, &block)
11
+ @contents = ul :class => "popover_contents"
12
+
13
+ options = args.extract_options!
14
+
15
+ super(options)
16
+ end
17
+
18
+ def action(title, url, *args)
19
+ options = args.extract_options!
20
+ within @contents do
21
+ li do
22
+ text_node link_to( title, url, options )
23
+ end
24
+ end
25
+ end
26
+
27
+ end
28
+ end
29
+ end
@@ -35,7 +35,11 @@ module ActiveAdmin
35
35
  end
36
36
 
37
37
  def header_content_for(attr)
38
- @record.class.respond_to?(:human_attribute_name) ? @record.class.human_attribute_name(attr).titleize : attr.to_s.titleize
38
+ if @record.class.respond_to?(:human_attribute_name)
39
+ @record.class.human_attribute_name(attr, :default => attr.to_s.titleize)
40
+ else
41
+ attr.to_s.titleize
42
+ end
39
43
  end
40
44
 
41
45
  def empty_value
@@ -50,7 +54,7 @@ module ActiveAdmin
50
54
  content_for_attribute(attr_or_proc)
51
55
  end
52
56
  value = pretty_format(value)
53
- value == "" || value == nil ? empty_value : value
57
+ value == "" || value.nil? ? empty_value : value
54
58
  end
55
59
 
56
60
  def content_for_attribute(attr)
@@ -0,0 +1,73 @@
1
+ require 'active_admin/views/components/popover'
2
+
3
+ module ActiveAdmin
4
+ module Views
5
+
6
+ # Action List - A button with a drop down menu of links
7
+ #
8
+ # Creating a new action list:
9
+ #
10
+ # dropdown_menu "Administration" do
11
+ # item "Edit Details", edit_details_path
12
+ # item "Edit My Account", edit_my_acccount_path
13
+ # end
14
+ #
15
+ # This will create a button with the label "Administration" and
16
+ # a drop down once clicked with 2 options.
17
+ #
18
+ class DropdownMenu < ActiveAdmin::Component
19
+ builder_method :dropdown_menu
20
+
21
+ # Build a new action list
22
+ #
23
+ # @param [String] name The name to display in the button
24
+ #
25
+ # @param [Hash] options A set of options that get passed along to
26
+ # to the parent dom element.
27
+ def build(name, options = {})
28
+ options = options.dup
29
+
30
+ # Easily set options for the button or menu
31
+ button_options = options.delete(:button) || {}
32
+ menu_options = options.delete(:menu) || {}
33
+
34
+ @button = build_button(name, button_options)
35
+ @menu = build_menu(menu_options)
36
+
37
+ super(options)
38
+ end
39
+
40
+ def item(*args)
41
+ within @menu do
42
+ li link_to(*args)
43
+ end
44
+ end
45
+
46
+ private
47
+
48
+ def build_button(name, button_options)
49
+ button_options[:class] ||= ""
50
+ button_options[:class] << " dropdown_menu_button"
51
+
52
+ button_options[:href] = "#"
53
+
54
+ a name, button_options
55
+ end
56
+
57
+ def build_menu(options)
58
+ options[:class] ||= ""
59
+ options[:class] << " dropdown_menu_list"
60
+
61
+ menu_list = nil
62
+
63
+ div :class => "dropdown_menu_list_wrapper", :style => "display:none;" do
64
+ menu_list = ul(options)
65
+ end
66
+
67
+ menu_list
68
+ end
69
+
70
+ end
71
+
72
+ end
73
+ end