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
@@ -0,0 +1,12 @@
1
+ Feature: Index - Page Title
2
+
3
+ Modifying the page title on the index screen
4
+
5
+ Scenario: Set a string as the title
6
+ Given an index configuration of:
7
+ """
8
+ ActiveAdmin.register Post do
9
+ index :title => "Awesome Title"
10
+ end
11
+ """
12
+ Then I should see the page title "Awesome Title"
@@ -37,7 +37,7 @@ Feature: New Page
37
37
  f.inputs "Publishing" do
38
38
  f.input :published_at
39
39
  end
40
- f.buttons
40
+ f.actions
41
41
  end
42
42
  end
43
43
  """
@@ -57,7 +57,7 @@ Feature: New Page
57
57
  <% url = @post.new_record? ? admin_posts_path : admin_post_path(@post) %>
58
58
  <%= active_admin_form_for @post, :url => url do |f|
59
59
  f.inputs :title, :body
60
- f.buttons
60
+ f.actions
61
61
  end %>
62
62
  """
63
63
  Given a configuration of:
@@ -89,7 +89,7 @@ Feature: New Page
89
89
  f.inputs "Publishing" do
90
90
  f.input :published_at
91
91
  end
92
- f.buttons
92
+ f.actions
93
93
  end
94
94
  end
95
95
  """
@@ -20,6 +20,21 @@ Feature: Registering Pages
20
20
  And I should see the Active Admin layout
21
21
  And I should see the content "I love chocolate."
22
22
 
23
+ Scenario: Registering a page with a complex name
24
+ Given a configuration of:
25
+ """
26
+ ActiveAdmin.register_page "Chocolate I lØve You!" do
27
+ content do
28
+ "I love chocolate."
29
+ end
30
+ end
31
+ """
32
+ When I go to the dashboard
33
+ And I follow "Chocolate I lØve You!"
34
+ Then I should see the page title "Chocolate I lØve You!"
35
+ And I should see the Active Admin layout
36
+ And I should see the content "I love chocolate."
37
+
23
38
  Scenario: Registering an empty page
24
39
  Given a configuration of:
25
40
  """
@@ -30,6 +45,32 @@ Feature: Registering Pages
30
45
  Then I should see the page title "Status"
31
46
  And I should see the Active Admin layout
32
47
 
48
+ Scenario: Registering a page with a custom title as a string
49
+ Given a configuration of:
50
+ """
51
+ ActiveAdmin.register_page "Status" do
52
+ content :title => "Custom Page Title" do
53
+ "I love chocolate."
54
+ end
55
+ end
56
+ """
57
+ When I go to the dashboard
58
+ And I follow "Status"
59
+ Then I should see the page title "Custom Page Title"
60
+
61
+ Scenario: Registering a page with a custom title as a proc
62
+ Given a configuration of:
63
+ """
64
+ ActiveAdmin.register_page "Status" do
65
+ content :title => proc{ "Custom Page Title from Proc" } do
66
+ "I love chocolate."
67
+ end
68
+ end
69
+ """
70
+ When I go to the dashboard
71
+ And I follow "Status"
72
+ Then I should see the page title "Custom Page Title from Proc"
73
+
33
74
  Scenario: Adding a sidebar section to a page
34
75
  Given a configuration of:
35
76
  """
@@ -64,3 +105,23 @@ Feature: Registering Pages
64
105
  When I go to the dashboard
65
106
  And I follow "Status"
66
107
  Then I should see an action item link to "Visit"
108
+
109
+ Scenario: Adding a page action to a page
110
+ Given a configuration of:
111
+ """
112
+ ActiveAdmin.register_page "Status" do
113
+ page_action :check do
114
+ redirect_to admin_status_path
115
+ end
116
+
117
+ content do
118
+ ("Chocolate I lØve You!" + link_to("Check", admin_status_check_path)).html_safe
119
+ end
120
+ end
121
+ """
122
+ When I go to the dashboard
123
+ And I follow "Status"
124
+ And I follow "Check"
125
+ Then I should see the content "Chocolate I lØve You!"
126
+
127
+
@@ -0,0 +1,17 @@
1
+ Feature: Namespace root
2
+
3
+ As a developer
4
+ In order to customize the welcome page
5
+ I want to set it in the configuration
6
+
7
+ Scenario: Default root is the Dashboard
8
+ Given I am logged in with capybara
9
+ Then I should be on the dashboard
10
+
11
+ Scenario: Set root to "stores#index"
12
+ Given a configuration of:
13
+ """
14
+ ActiveAdmin.application.root_to = 'stores#index'
15
+ """
16
+ Given I am logged in with capybara
17
+ Then I should see the page title "Bookstores"
@@ -20,8 +20,8 @@ Feature: Show - Default Content
20
20
  Scenario: Attributes should link when linked resource is registered
21
21
  Given a show configuration of:
22
22
  """
23
- ActiveAdmin.register User
24
23
  ActiveAdmin.register Post
24
+ ActiveAdmin.register User
25
25
  """
26
26
  Then I should see the attribute "Author" with "jane_doe"
27
27
  And I should see a link to "jane_doe"
@@ -31,3 +31,17 @@ Feature: Show - Page Title
31
31
  end
32
32
  """
33
33
  Then I should see the page title "Title: Hello World"
34
+
35
+ Scenario: Default title
36
+ Given a show configuration of:
37
+ """
38
+ ActiveAdmin.register Post
39
+ """
40
+ Then I should see the page title "Hello World"
41
+
42
+ Scenario: Default title with no display name method candidate
43
+ Given a show configuration of:
44
+ """
45
+ ActiveAdmin.register Tag
46
+ """
47
+ Then I should see the page title "Tag #"
@@ -98,6 +98,32 @@ Feature: Sidebar Sections
98
98
  When I follow "New Post"
99
99
  Then I should not see a sidebar titled "Help"
100
100
 
101
+ Scenario: Create a sidebar for only one action with if clause with method symbol
102
+ Given a configuration of:
103
+ """
104
+ module SidebarHelper
105
+ def can_sidebar?; false; end
106
+ end
107
+ ActiveAdmin.register Post do
108
+ controller { helper SidebarHelper }
109
+ sidebar :help, :only => :index, :if => :can_sidebar? do
110
+ "Need help? Email us at help@example.com"
111
+ end
112
+ end
113
+ """
114
+ When I am on the index page for posts
115
+ Then I should not see a sidebar titled "Help"
116
+
117
+ When I follow "View"
118
+ Then I should not see a sidebar titled "Help"
119
+
120
+ When I follow "Edit Post"
121
+ Then I should not see a sidebar titled "Help"
122
+
123
+ When I am on the index page for posts
124
+ When I follow "New Post"
125
+ Then I should not see a sidebar titled "Help"
126
+
101
127
  Scenario: Create a sidebar for only one action with if clause that returns true
102
128
  Given a configuration of:
103
129
  """
@@ -41,7 +41,7 @@ Feature: Site title
41
41
  Given a configuration of:
42
42
  """
43
43
  ActiveAdmin.application.site_title_image = nil # Configuration is not reset between scenarios
44
- ActiveAdmin.application.site_title = proc { "Hello #{controller.current_admin_user.email}" }
44
+ ActiveAdmin.application.site_title = proc { "Hello #{controller.current_admin_user.try(:email) || 'you!'}" }
45
45
  """
46
46
  When I am on the dashboard
47
47
  And I should see the site title "Hello admin@example.com"
@@ -9,15 +9,15 @@ Feature: Specifying Actions
9
9
  actions :index
10
10
  index do
11
11
  column do |post|
12
- link_to "View", admin_post_path(post)
12
+ link_to "View", "/admin/posts/1"
13
13
  end
14
14
  end
15
15
  end
16
16
  """
17
- And I am logged in
17
+ And I am logged in
18
18
  And a post with the title "Hello World" exists
19
19
  When I am on the index page for posts
20
- Then an "AbstractController::ActionNotFound" exception should be raised when I follow "View"
20
+ Then an "ActionController::RoutingError" exception should be raised when I follow "View"
21
21
 
22
22
  Scenario: Specify a custom collection action with template
23
23
  Given a configuration of:
@@ -30,9 +30,9 @@ Feature: Specifying Actions
30
30
  collection_action :import
31
31
  end
32
32
  """
33
- Given "app/views/admin/posts/import.html.erb" contains:
33
+ Given "app/views/admin/posts/import.html.arb" contains:
34
34
  """
35
- <p>We are currently working on this feature...</p>
35
+ para "We are currently working on this feature..."
36
36
  """
37
37
  And I am logged in
38
38
  When I am on the index page for posts
@@ -46,7 +46,7 @@ Feature: Specifying Actions
46
46
  action_item(:only => :show) do
47
47
  link_to('Review', review_admin_post_path)
48
48
  end
49
-
49
+
50
50
  member_action :review do
51
51
  @post = Post.find(params[:id])
52
52
  end
@@ -90,3 +90,4 @@ Feature: Specifying Actions
90
90
  Then I should see "Review: Hello World"
91
91
  And I should see the page title "Review"
92
92
  And I should see the Active Admin layout
93
+
@@ -3,5 +3,5 @@ Then /^I should see a member link to "([^"]*)"$/ do |name|
3
3
  end
4
4
 
5
5
  Then /^I should not see a member link to "([^"]*)"$/ do |name|
6
- page.should_not have_css("a.member_link", :text => name)
6
+ %{Then I should not see "#{name}" within "a.member_link"}
7
7
  end
@@ -10,6 +10,10 @@ Then /^I should see a sortable table header with "([^"]*)"$/ do |content|
10
10
  page.should have_css('th.sortable', :text => content)
11
11
  end
12
12
 
13
+ Then /^I should not see a sortable table header with "([^"]*)"$/ do |content|
14
+ page.should_not have_css('th.sortable', :text => content)
15
+ end
16
+
13
17
  Then /^I should not see a sortable table header$/ do
14
18
  step "I should not see \"th.sortable\""
15
19
  end
@@ -64,7 +68,9 @@ Then /^I should wait and see "([^"]*)"(?: within "([^"]*)")?$/ do |text, selecto
64
68
  end
65
69
 
66
70
  Then /^I should see the page title "([^"]*)"$/ do |title|
67
- page.should have_css('h2#page_title', :text => title)
71
+ within('h2#page_title') do
72
+ page.should have_content(title)
73
+ end
68
74
  end
69
75
 
70
76
  Then /^I should see a fieldset titled "([^"]*)"$/ do |title|
@@ -0,0 +1,94 @@
1
+ Then /^I (should|should not) see the batch action "([^"]*)"$/ do |maybe, title|
2
+ %{Then I #{maybe} see the batch action :#{title.gsub(' ','').gsub(" Selected", "").underscore} "#{title}"}
3
+ end
4
+
5
+ Then /^I (should|should not) be asked to confirm "([^"]*)" for "([^"]*)"$/ do |maybe, confirmation, title|
6
+ within "#batch_actions_popover" do
7
+ unless maybe == "should not"
8
+ link = page.find "a.batch_action", :text => title
9
+ link["data-confirm"].should match( confirmation )
10
+ else
11
+ page.should_not have_css("a.batch_action", :text => title)
12
+ end
13
+ end
14
+ end
15
+
16
+ Then /^I (should|should not) see the batch action :([^\s]*) "([^"]*)"$/ do |maybe, sym, title|
17
+ within "#batch_actions_selector" do
18
+ unless maybe == "should not"
19
+ link = page.find "a.batch_action", :text => title
20
+ link["data-action"].should match( sym )
21
+ link[:href].should match( "#" )
22
+ else
23
+ page.should_not have_css("a.batch_action", :text => title)
24
+ end
25
+ end
26
+ end
27
+
28
+ Then /^the (\d+)(?:st|nd|rd|th) batch action should be "([^"]*)"$/ do |index, title|
29
+ within "#batch_actions_selector" do
30
+ page.all( "a.batch_action" )[index.to_i - 1].text.should match( title )
31
+ end
32
+ end
33
+
34
+ When /^I check the (\d+)(?:st|nd|rd|th) record$/ do |index|
35
+ page.all( "table.index_table input[type=checkbox]" )[index.to_i].set( true )
36
+ end
37
+
38
+ When /^I uncheck the (\d+)(?:st|nd|rd|th) record$/ do |index|
39
+ page.all( "table.index_table input[type='checkbox']" )[index.to_i].set( false )
40
+ end
41
+
42
+ When /^I toggle the collection selection$/ do
43
+ toggle_box = page.find( "#collection_selection_toggle_all" )
44
+ toggle_box.click
45
+ end
46
+
47
+ Then /^I should see (\d+) record(?:s)? selected$/ do |count|
48
+ within "table.index_table" do
49
+ unless count.to_i == 0
50
+ page.should have_xpath(".//input[@type='checkbox' and @checked='checked']", :count => count)
51
+ else
52
+ page.should have_no_xpath(".//input[@type='checkbox' and @checked='checked']")
53
+ end
54
+ end
55
+ end
56
+
57
+ Then /^I should see that the batch action button is disabled$/ do
58
+ page.should have_css("#batch_actions_selector .dropdown_menu_button.disabled")
59
+ end
60
+
61
+ Then /^I (should|should not) see the batch action button$/ do |maybe|
62
+ if maybe == "should not"
63
+ page.should_not have_css("div.table_tools #batch_actions_selector .dropdown_menu_button")
64
+ else
65
+ page.should have_css("div.table_tools #batch_actions_selector .dropdown_menu_button")
66
+ end
67
+ end
68
+
69
+ Then "I should not see the batch actions selector" do
70
+ page.should_not have_css("div.table_tools #batch_actions_selector")
71
+ end
72
+
73
+ Then /^I should see the batch action popover exists$/ do
74
+ page.should have_css("#batch_actions_selector")
75
+ end
76
+
77
+ Given /^I submit the batch action form with "([^"]*)"$/ do |action|
78
+ page.find(:css, "#batch_action").set(action)
79
+
80
+ within("#main_content") do
81
+ @params = page.all("input").reduce({}) do |acc, input|
82
+ acc.store(input['name'], input['value'])
83
+ acc
84
+ end
85
+ end
86
+
87
+ form = page.find("#collection_selection")
88
+
89
+ page.driver.submit(form['method'].to_sym, form['action'], @params)
90
+ end
91
+
92
+ Then /^I should not see checkboxes in the table$/ do
93
+ page.should_not have_css( ".paginated_collection table input[type=checkbox]" )
94
+ end
@@ -1,10 +1,11 @@
1
1
  module ActiveAdminReloading
2
2
 
3
3
  def load_active_admin_configuration(configuration_content)
4
+ ActiveAdmin::Event.dispatch ActiveAdmin::Application::BeforeLoadEvent, ActiveAdmin.application
4
5
  eval(configuration_content)
5
- ActiveAdmin::Event.dispatch ActiveAdmin::Application::LoadEvent, ActiveAdmin.application
6
+ ActiveAdmin::Event.dispatch ActiveAdmin::Application::AfterLoadEvent, ActiveAdmin.application
6
7
  Rails.application.reload_routes!
7
- ActiveAdmin.application.namespaces.values.each{|n| n.load_menu! }
8
+ ActiveAdmin.application.namespaces.values.each{|n| n.reset_menu! }
8
9
  end
9
10
 
10
11
  end
@@ -26,10 +27,22 @@ module ActiveAdminContentsRollback
26
27
  def self.rollback!
27
28
  recorded_files.each do |filename, contents|
28
29
  # contents will be nil if the file didin't exist
29
- if contents
30
- File.open(filename, "w+") {|f| f << contents }
30
+ if contents.present?
31
+ File.open(filename, "w") {|f| f << contents }
31
32
  else
32
33
  File.delete(filename)
34
+
35
+ # Delete parent directories
36
+ begin
37
+ dir = File.dirname(filename)
38
+ until dir == Rails.root
39
+ Dir.rmdir(dir)
40
+ dir = dir.split('/')[0..-2].join('/')
41
+ end
42
+ rescue Errno::ENOTEMPTY
43
+ # Directory not empty
44
+ end
45
+
33
46
  end
34
47
  end
35
48
 
@@ -46,7 +59,6 @@ end
46
59
 
47
60
  Given /^a configuration of:$/ do |configuration_content|
48
61
  load_active_admin_configuration(configuration_content)
49
- ActiveAdmin.application.namespaces.values.each{|n| n.load_menu! }
50
62
  end
51
63
 
52
64
  Given /^an index configuration of:$/ do |configuration_content|
@@ -57,11 +69,21 @@ Given /^an index configuration of:$/ do |configuration_content|
57
69
  end
58
70
 
59
71
  Given /^a show configuration of:$/ do |configuration_content|
72
+ resource = configuration_content.match(/ActiveAdmin\.register (\w+)/)[1]
60
73
  load_active_admin_configuration(configuration_content)
61
74
 
62
- step 'I am logged in'
63
- step "I am on the index page for posts"
64
- step 'I follow "View"'
75
+ case resource
76
+ when "Post"
77
+ step 'I am logged in'
78
+ step "I am on the index page for posts"
79
+ step 'I follow "View"'
80
+ when "Tag"
81
+ step 'I am logged in'
82
+ Tag.create!
83
+ visit admin_tag_path(Tag.last)
84
+ else
85
+ raise "#{resource} is not supported"
86
+ end
65
87
  end
66
88
 
67
89
  Given /^"([^"]*)" contains:$/ do |filename, contents|