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
@@ -1,52 +1,66 @@
1
- require 'spec_helper'
1
+ require 'spec_helper_without_rails'
2
+ require 'active_admin/menu'
3
+ require 'active_admin/menu_item'
4
+
5
+ include ActiveAdmin
2
6
 
3
7
  describe ActiveAdmin::Menu do
4
8
 
5
9
  context "with no items" do
6
- it "should be empty" do
7
- ActiveAdmin::Menu.new.items.should == []
10
+
11
+ it "should have an empty item collection" do
12
+ menu = Menu.new
13
+ menu.items.should be_empty
8
14
  end
9
-
15
+
10
16
  it "should accept new items" do
11
- menu = ActiveAdmin::Menu.new
12
- menu.add "Dashboard", "/admin"
13
- menu.items.first.should be_an_instance_of(ActiveAdmin::MenuItem)
14
- menu.items.first.name.should == "Dashboard"
15
- end
16
-
17
- it "should default new items to the priority of 10" do
18
- menu = ActiveAdmin::Menu.new
19
- menu.add "Dashboard", "/admin"
20
- menu.items.first.priority.should == 10
17
+ menu = Menu.new
18
+ item = MenuItem.new
19
+ menu.add item
20
+ menu.items.first.should == item
21
21
  end
22
+
22
23
  end
23
-
24
+
24
25
  context "with many item" do
25
26
  let(:menu) do
26
- ActiveAdmin::Menu.new do |m|
27
- m.add "Dashboard", "/admin"
28
- m.add "Blog", "/admin/blog"
29
- m.add "Users", "/admin/users"
30
- m.add "Settings", "/admin/settings" do |s|
31
- s.add "Admin Settings", "/admin/settings/admin" do |as|
32
- s.add "User Settings", "/admin/settings/users"
33
- end
34
- end
27
+ Menu.new do |m|
28
+ m.add MenuItem.new(:label => "Dashboard")
29
+ m.add MenuItem.new(:label => "Blog")
35
30
  end
36
31
  end
37
32
 
38
33
  it "should give access to the menu item as an array" do
39
- menu['Dashboard'].name.should == 'Dashboard'
34
+ menu['Dashboard'].label.should == 'Dashboard'
40
35
  end
41
-
42
- it "should find the item by a url on the top level" do
43
- menu.find_by_url("/admin").name.should == "Dashboard"
36
+ end
37
+
38
+ describe Menu::ItemCollection do
39
+
40
+ let(:collection) { Menu::ItemCollection.new }
41
+
42
+ it "should initialize" do
43
+ collection.should be_empty
44
44
  end
45
-
46
- it "should find the item deep in the tree" do
47
- menu.find_by_url("/admin/settings/users").name.should == "User Settings"
45
+
46
+ describe "#find_by_id" do
47
+ let(:menu_item) { MenuItem.new(:id => "an_id") }
48
+
49
+ before do
50
+ collection.push menu_item
51
+ end
52
+
53
+ it "retrieve an item id" do
54
+ MenuItem.should_receive(:generate_item_id).with("an_id").and_return("an_id")
55
+ collection.find_by_id("an_id").should == menu_item
56
+ end
57
+
58
+ it "returns nil when no matching ids" do
59
+ collection.find_by_id("not matching").should == nil
60
+ end
61
+
48
62
  end
49
-
63
+
50
64
  end
51
65
 
52
66
  end
@@ -20,7 +20,6 @@ describe ActiveAdmin::Namespace, "registering a page" do
20
20
  end
21
21
 
22
22
  it "should create a menu item" do
23
- namespace.load_menu!
24
23
  namespace.menu["Status"].should be_an_instance_of(ActiveAdmin::MenuItem)
25
24
  end
26
25
  end # context "with no configuration"
@@ -39,7 +38,6 @@ describe ActiveAdmin::Namespace, "registering a page" do
39
38
  describe "adding as a top level item" do
40
39
  before do
41
40
  namespace.register_page "Status"
42
- namespace.load_menu!
43
41
  end
44
42
 
45
43
  it "should add a new menu item" do
@@ -52,7 +50,6 @@ describe ActiveAdmin::Namespace, "registering a page" do
52
50
  namespace.register_page "Status" do
53
51
  menu :parent => 'Extra'
54
52
  end
55
- namespace.load_menu!
56
53
  end
57
54
  it "should generate the parent menu item" do
58
55
  namespace.menu['Extra'].should_not be_nil
@@ -67,7 +64,6 @@ describe ActiveAdmin::Namespace, "registering a page" do
67
64
  namespace.register_page "Status" do
68
65
  menu false
69
66
  end
70
- namespace.load_menu!
71
67
  end
72
68
  it "should not create a menu item" do
73
69
  namespace.menu["Status"].should be_nil
@@ -79,7 +75,6 @@ describe ActiveAdmin::Namespace, "registering a page" do
79
75
  namespace.register_page "Status" do
80
76
  menu :priority => 2
81
77
  end
82
- namespace.load_menu!
83
78
  end
84
79
  it "should have a custom priority of 2" do
85
80
  namespace.menu["Status"].priority.should == 2
@@ -91,7 +86,6 @@ describe ActiveAdmin::Namespace, "registering a page" do
91
86
  namespace.register_page "Status" do
92
87
  menu :if => proc { false }
93
88
  end
94
- namespace.load_menu!
95
89
  end
96
90
  it "should have a proc returning false" do
97
91
  namespace.menu["Status"].display_if_block.should be_instance_of(Proc)
@@ -20,7 +20,6 @@ describe ActiveAdmin::Namespace, "registering a resource" do
20
20
  defined?(Admin::DashboardController).should be_true
21
21
  end
22
22
  it "should create a menu item" do
23
- namespace.load_menu!
24
23
  namespace.menu["Categories"].should be_an_instance_of(ActiveAdmin::MenuItem)
25
24
  namespace.menu["Categories"].url.should == :admin_categories_path
26
25
  end
@@ -43,13 +42,12 @@ describe ActiveAdmin::Namespace, "registering a resource" do
43
42
  end
44
43
 
45
44
  it "should store the namespaced registered configuration" do
46
- namespace.resources.keys.should include('MockResource')
45
+ namespace.resources.keys.should include('Mock::Resource')
47
46
  end
48
47
  it "should create a new controller in the default namespace" do
49
48
  defined?(Admin::MockResourcesController).should be_true
50
49
  end
51
50
  it "should create a menu item" do
52
- namespace.load_menu!
53
51
  namespace.menu["Mock Resources"].should be_an_instance_of(ActiveAdmin::MenuItem)
54
52
  end
55
53
 
@@ -88,7 +86,6 @@ describe ActiveAdmin::Namespace, "registering a resource" do
88
86
  describe "adding as a top level item" do
89
87
  before do
90
88
  namespace.register Category
91
- namespace.load_menu!
92
89
  end
93
90
  it "should add a new menu item" do
94
91
  namespace.menu['Categories'].should_not be_nil
@@ -100,7 +97,6 @@ describe ActiveAdmin::Namespace, "registering a resource" do
100
97
  namespace.register Category do
101
98
  menu :parent => 'Blog'
102
99
  end
103
- namespace.load_menu!
104
100
  end
105
101
  it "should generate the parent menu item" do
106
102
  namespace.menu['Blog'].should_not be_nil
@@ -115,7 +111,6 @@ describe ActiveAdmin::Namespace, "registering a resource" do
115
111
  namespace.register Category do
116
112
  menu false
117
113
  end
118
- namespace.load_menu!
119
114
  end
120
115
  it "should not create a menu item" do
121
116
  namespace.menu["Categories"].should be_nil
@@ -127,7 +122,6 @@ describe ActiveAdmin::Namespace, "registering a resource" do
127
122
  namespace.register Category do
128
123
  menu :priority => 2
129
124
  end
130
- namespace.load_menu!
131
125
  end
132
126
  it "should have a custom priority of 2" do
133
127
  namespace.menu["Categories"].priority.should == 2
@@ -139,7 +133,6 @@ describe ActiveAdmin::Namespace, "registering a resource" do
139
133
  namespace.register Category do
140
134
  menu :if => proc { false }
141
135
  end
142
- namespace.load_menu!
143
136
  end
144
137
  it "should have a proc returning false" do
145
138
  namespace.menu["Categories"].display_if_block.should be_instance_of(Proc)
@@ -19,8 +19,14 @@ describe ActiveAdmin::Namespace do
19
19
  namespace.resources.resources.should be_empty
20
20
  end
21
21
 
22
- it "should have an empty menu" do
23
- namespace.menu.items.should be_empty
22
+ it "should not have any menu item" do
23
+ if ActiveAdmin::Dashboards.built?
24
+ # DEPRECATED behavior. If a dashboard was built while running this
25
+ # spec, then an item gets added to the menu
26
+ namespace.menu.should have(1).item
27
+ else
28
+ namespace.menu.items.should be_empty
29
+ end
24
30
  end
25
31
  end # context "when new"
26
32
 
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  require 'spec_helper'
2
4
  require File.expand_path('config_shared_examples', File.dirname(__FILE__))
3
5
 
@@ -11,36 +13,46 @@ module ActiveAdmin
11
13
  let(:namespace){ Namespace.new(application, :admin) }
12
14
 
13
15
  def config(options = {})
14
- @config ||= Page.new(namespace, "Status", options)
16
+ @config ||= namespace.register_page("Chocolate I lØve You!", options)
15
17
  end
16
18
 
17
19
  describe "controller name" do
18
20
  it "should return a namespaced controller name" do
19
- config.controller_name.should == "Admin::StatusController"
21
+ config.controller_name.should == "Admin::ChocolateILoveYouController"
20
22
  end
21
23
  context "when non namespaced controller" do
22
24
  let(:namespace){ ActiveAdmin::Namespace.new(application, :root) }
23
25
  it "should return a non namespaced controller name" do
24
- config.controller_name.should == "StatusController"
26
+ config.controller_name.should == "ChocolateILoveYouController"
25
27
  end
26
28
  end
27
29
  end
28
30
 
29
31
  describe "#resource_name" do
30
32
  it "returns the name" do
31
- config.resource_name.should == "Status"
33
+ config.resource_name.should == "Chocolate I lØve You!"
34
+ end
35
+
36
+ it "returns the singular, lowercase name" do
37
+ config.resource_name.singular.should == "chocolate i lØve you!"
32
38
  end
33
39
  end
34
40
 
35
- describe "#plural_resource_name" do
41
+ describe "#plural_resource_label" do
36
42
  it "returns the singular name" do
37
- config.plural_resource_name.should == "Status"
43
+ config.plural_resource_label.should == "Chocolate I lØve You!"
38
44
  end
39
45
  end
40
46
 
41
47
  describe "#underscored_resource_name" do
42
- it "returns the underscored name" do
43
- config.underscored_resource_name.should == "status"
48
+ it "returns the resource name underscored" do
49
+ config.underscored_resource_name.should == "chocolate_i_love_you"
50
+ end
51
+ end
52
+
53
+ describe "#camelized_resource_name" do
54
+ it "returns the resource name camel case" do
55
+ config.camelized_resource_name.should == "ChocolateILoveYou"
44
56
  end
45
57
  end
46
58
 
@@ -12,64 +12,65 @@ module ActiveAdmin
12
12
  @config ||= Resource.new(namespace, Category, options)
13
13
  end
14
14
 
15
+ module ::Mock class Resource < ActiveRecord::Base; end; end
16
+ module NoActiveModel class Resource; end; end
15
17
 
16
- describe "underscored resource name" do
18
+ describe "singular resource name" do
17
19
  context "when class" do
18
- it "should be the underscored safe resource name" do
19
- config.underscored_resource_name.should == "category"
20
+ it "should be the underscored singular resource name" do
21
+ config.resource_name.singular.should == "category"
20
22
  end
21
23
  end
22
24
  context "when a class in a module" do
23
25
  it "should underscore the module and the class" do
24
- module ::Mock; class Resource; end; end
25
- Resource.new(namespace, Mock::Resource).underscored_resource_name.should == "mock_resource"
26
+ Resource.new(namespace, Mock::Resource).resource_name.singular.should == "mock_resource"
26
27
  end
27
28
  end
28
29
  context "when you pass the 'as' option" do
29
30
  it "should underscore the passed through string" do
30
- config(:as => "Blog Category").underscored_resource_name.should == "blog_category"
31
+ config(:as => "Blog Category").resource_name.singular.should == "blog_category"
31
32
  end
32
33
  end
33
34
  end
34
35
 
35
- describe "camelized resource name" do
36
- it "should return a camelized version of the underscored resource name" do
37
- config(:as => "Blog category").camelized_resource_name.should == "BlogCategory"
38
- end
39
- end
40
-
41
- describe "resource name" do
36
+ describe "resource label" do
42
37
  it "should return a pretty name" do
43
- config.resource_name.should == "Category"
38
+ config.resource_label.should == "Category"
44
39
  end
45
40
 
46
41
  it "should return the plural version" do
47
- config.plural_resource_name.should == "Categories"
42
+ config.plural_resource_label.should == "Categories"
48
43
  end
49
44
 
50
45
  context "when the :as option is given" do
51
46
  it "should return the custom name" do
52
- config(:as => "My Category").resource_name.should == "My Category"
47
+ config(:as => "My Category").resource_label.should == "My Category"
48
+ end
49
+ end
50
+
51
+ context "when a class in a module" do
52
+ it "should include the module and the class" do
53
+ Resource.new(namespace, Mock::Resource).resource_label.should == "Mock Resource"
54
+ end
55
+
56
+ it "should include the module and the pluralized class" do
57
+ Resource.new(namespace, Mock::Resource).plural_resource_label.should == "Mock Resources"
53
58
  end
54
59
  end
55
60
 
56
61
  describe "I18n integration" do
57
- describe "singular name" do
62
+ describe "singular label" do
58
63
  it "should return the titleized model_name.human" do
59
- Category.model_name.should_receive(:human).and_return "Da category"
64
+ config.resource_name.should_receive(:human).and_return "Da category"
60
65
 
61
- config.resource_name.should == "Da Category"
66
+ config.resource_label.should == "Da category"
62
67
  end
63
68
  end
64
69
 
65
- describe "plural name" do
70
+ describe "plural label" do
66
71
  it "should return the titleized plural version defined by i18n if available" do
67
- Category.model_name.should_receive(:underscore).and_return "category"
68
- Category.model_name.should_not_receive(:i18n_key) # Not implemented in Rails 3.0.0
69
- I18n.should_receive(:translate!).
70
- with("activerecord.models.category.other").
71
- and_return("Da categories")
72
- config.plural_resource_name.should == "Da Categories"
72
+ I18n.should_receive(:translate).at_least(:once).and_return("Da categories")
73
+ config.plural_resource_label.should == "Da categories"
73
74
  end
74
75
  end
75
76
 
@@ -40,11 +40,4 @@ describe ActiveAdmin::Resource::Sidebars do
40
40
 
41
41
  end
42
42
 
43
- describe "default sidebar sections" do
44
-
45
- it "should have a filters section by default" do
46
- resource.sidebar_sections.first.name.should == :filters
47
- end
48
-
49
- end
50
43
  end
@@ -12,19 +12,19 @@ describe ActiveAdmin::ResourceCollection do
12
12
  end
13
13
 
14
14
  it "should be enumerable" do
15
- resource = mock(:resource_key => "MyResource")
15
+ resource = mock(:resource_name => "MyResource")
16
16
  collection.add(resource)
17
17
  collection.each{|r| r.should == resource }
18
18
  end
19
19
 
20
20
  it "should return the available keys" do
21
- resource = mock(:resource_key => "MyResource")
21
+ resource = mock(:resource_name => "MyResource")
22
22
  collection.add resource
23
- collection.keys.should == [resource.resource_key]
23
+ collection.keys.should == [resource.resource_name]
24
24
  end
25
25
 
26
26
  describe "adding a new resource" do
27
- let(:resource){ mock(:resource_key => "MyResource") }
27
+ let(:resource){ mock(:resource_name => "MyResource") }
28
28
 
29
29
  it "should return the resource" do
30
30
  collection.add(resource).should == resource
@@ -37,13 +37,13 @@ describe ActiveAdmin::ResourceCollection do
37
37
 
38
38
  it "should be available by name" do
39
39
  collection.add(resource)
40
- collection.find_by_key(resource.resource_key).should == resource
40
+ collection.find_by_key(resource.resource_name).should == resource
41
41
  end
42
42
  end
43
43
 
44
44
  describe "adding a new resource when the key already exists" do
45
- let(:stored_resource){ mock(:resource_key => "MyResource") }
46
- let(:resource){ mock(:resource_key => "MyResource") }
45
+ let(:stored_resource){ mock(:resource_name => "MyResource") }
46
+ let(:resource){ mock(:resource_name => "MyResource") }
47
47
 
48
48
  before do
49
49
  collection.add(stored_resource)
@@ -60,8 +60,8 @@ describe ActiveAdmin::ResourceCollection do
60
60
  end
61
61
 
62
62
  describe "adding an existing resource key with a different resource class" do
63
- let(:stored_resource){ mock(:resource_key => "MyResource", :resource_class => mock) }
64
- let(:resource){ mock(:resource_key => "MyResource", :resource_class => mock) }
63
+ let(:stored_resource){ mock(:resource_name => "MyResource", :resource_class => mock) }
64
+ let(:resource){ mock(:resource_name => "MyResource", :resource_class => mock) }
65
65
 
66
66
  it "should raise a ActiveAdmin::ResourceMismatchError" do
67
67
  collection.add(stored_resource)
@@ -75,9 +75,9 @@ describe ActiveAdmin::ResourceCollection do
75
75
  describe "#find_by_resource_class" do
76
76
 
77
77
  let(:base_class){ mock(:to_s => "BaseClass")}
78
- let(:resource_from_base_class){ mock(:resource_key => "MyBaseClassResource", :resource_class => base_class )}
78
+ let(:resource_from_base_class){ mock(:resource_name => "MyBaseClassResource", :resource_class => base_class )}
79
79
  let(:resource_class){ mock(:base_class => base_class, :to_s => "ResourceClass") }
80
- let(:resource){ mock(:resource_key => "MyResource", :resource_class => resource_class) }
80
+ let(:resource){ mock(:resource_name => "MyResource", :resource_class => resource_class) }
81
81
 
82
82
  it "should find a resource when it's in the collection" do
83
83
  collection.add resource