nsm-activeadmin 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (321) hide show
  1. data/.document +5 -0
  2. data/.gitignore +34 -0
  3. data/.travis.yml +4 -0
  4. data/.yardopts +8 -0
  5. data/CHANGELOG.rdoc +76 -0
  6. data/Gemfile +39 -0
  7. data/LICENSE +25 -0
  8. data/README.rdoc +487 -0
  9. data/Rakefile +27 -0
  10. data/activeadmin.gemspec +28 -0
  11. data/app/assets/images/active_admin/admin_notes_icon.png +0 -0
  12. data/app/assets/images/active_admin/datepicker/datepicker-header-bg.png +0 -0
  13. data/app/assets/images/active_admin/datepicker/datepicker-input-icon.png +0 -0
  14. data/app/assets/images/active_admin/datepicker/datepicker-next-link-icon.png +0 -0
  15. data/app/assets/images/active_admin/datepicker/datepicker-nipple.png +0 -0
  16. data/app/assets/images/active_admin/datepicker/datepicker-prev-link-icon.png +0 -0
  17. data/app/assets/images/active_admin/loading.gif +0 -0
  18. data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
  19. data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
  20. data/app/assets/images/active_admin/orderable.png +0 -0
  21. data/app/assets/javascripts/active_admin/base.js +12 -0
  22. data/app/assets/javascripts/active_admin/vendor.js +382 -0
  23. data/app/assets/stylesheets/active_admin/_base.css.scss +400 -0
  24. data/app/assets/stylesheets/active_admin/_forms.css.scss +256 -0
  25. data/app/assets/stylesheets/active_admin/_header.css.scss +110 -0
  26. data/app/assets/stylesheets/active_admin/_mixins.css.scss +1 -0
  27. data/app/assets/stylesheets/active_admin/_typography.css.scss +100 -0
  28. data/app/assets/stylesheets/active_admin/components/_comments.css.scss +40 -0
  29. data/app/assets/stylesheets/active_admin/components/_date_picker.css.scss +123 -0
  30. data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +38 -0
  31. data/app/assets/stylesheets/active_admin/mixins/_all.css.scss +8 -0
  32. data/app/assets/stylesheets/active_admin/mixins/_buttons.css.scss +27 -0
  33. data/app/assets/stylesheets/active_admin/mixins/_gradients.css.scss +29 -0
  34. data/app/assets/stylesheets/active_admin/mixins/_icons.css.scss +20 -0
  35. data/app/assets/stylesheets/active_admin/mixins/_reset.css.scss +165 -0
  36. data/app/assets/stylesheets/active_admin/mixins/_rounded.css.scss +43 -0
  37. data/app/assets/stylesheets/active_admin/mixins/_sections.css.scss +34 -0
  38. data/app/assets/stylesheets/active_admin/mixins/_shadows.css.scss +21 -0
  39. data/app/assets/stylesheets/active_admin/mixins/_variables.css.scss +21 -0
  40. data/app/views/active_admin/dashboard/index.html.arb +1 -0
  41. data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +8 -0
  42. data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +7 -0
  43. data/app/views/active_admin/devise/passwords/edit.html.erb +16 -0
  44. data/app/views/active_admin/devise/passwords/new.html.erb +14 -0
  45. data/app/views/active_admin/devise/sessions/new.html.erb +18 -0
  46. data/app/views/active_admin/devise/shared/_links.erb +20 -0
  47. data/app/views/active_admin/devise/unlocks/new.html.erb +12 -0
  48. data/app/views/active_admin/resource/edit.html.arb +1 -0
  49. data/app/views/active_admin/resource/index.csv.erb +20 -0
  50. data/app/views/active_admin/resource/index.html.arb +1 -0
  51. data/app/views/active_admin/resource/new.html.arb +1 -0
  52. data/app/views/active_admin/resource/show.html.arb +1 -0
  53. data/app/views/layouts/active_admin.html.arb +1 -0
  54. data/app/views/layouts/active_admin_logged_out.html.erb +35 -0
  55. data/cucumber.yml +2 -0
  56. data/docs/1-general-configuration.md +52 -0
  57. data/docs/2-resource-customization.md +35 -0
  58. data/docs/3-index-pages.md +55 -0
  59. data/docs/3-index-pages/index-as-block.md +16 -0
  60. data/docs/3-index-pages/index-as-blog.md +61 -0
  61. data/docs/3-index-pages/index-as-grid.md +21 -0
  62. data/docs/3-index-pages/index-as-table.md +74 -0
  63. data/docs/4-csv-format.md +14 -0
  64. data/docs/5-forms.md +39 -0
  65. data/docs/6-show-screens.md +22 -0
  66. data/docs/7-sidebars.md +35 -0
  67. data/docs/8-custom-actions.md +123 -0
  68. data/features/comments/commenting.feature +112 -0
  69. data/features/comments/viewing_index.feature +19 -0
  70. data/features/dashboard.feature +26 -0
  71. data/features/edit_page.feature +106 -0
  72. data/features/first_boot.feature +16 -0
  73. data/features/global_navigation.feature +30 -0
  74. data/features/index/format_as_csv.feature +46 -0
  75. data/features/index/formats.feature +12 -0
  76. data/features/index/index_as_block.feature +15 -0
  77. data/features/index/index_as_blog.feature +50 -0
  78. data/features/index/index_as_grid.feature +45 -0
  79. data/features/index/index_as_table.feature +81 -0
  80. data/features/index/index_blank_slate.feature +55 -0
  81. data/features/index/index_scopes.feature +52 -0
  82. data/features/index/pagination.feature +17 -0
  83. data/features/menu.feature +26 -0
  84. data/features/new_page.feature +75 -0
  85. data/features/registering_assets.feature +35 -0
  86. data/features/registering_resources.feature +33 -0
  87. data/features/show/default_content.feature +43 -0
  88. data/features/show/page_title.feature +33 -0
  89. data/features/sidebar_sections.feature +127 -0
  90. data/features/specifying_actions.feature +87 -0
  91. data/features/step_definitions/action_item_steps.rb +7 -0
  92. data/features/step_definitions/additional_web_steps.rb +77 -0
  93. data/features/step_definitions/asset_steps.rb +7 -0
  94. data/features/step_definitions/attribute_steps.rb +13 -0
  95. data/features/step_definitions/comment_steps.rb +8 -0
  96. data/features/step_definitions/configuration_steps.rb +31 -0
  97. data/features/step_definitions/dashboard_steps.rb +11 -0
  98. data/features/step_definitions/factory_steps.rb +29 -0
  99. data/features/step_definitions/flash_steps.rb +3 -0
  100. data/features/step_definitions/format_steps.rb +35 -0
  101. data/features/step_definitions/index_scope_steps.rb +20 -0
  102. data/features/step_definitions/layout_steps.rb +3 -0
  103. data/features/step_definitions/menu_steps.rb +7 -0
  104. data/features/step_definitions/pagination_steps.rb +8 -0
  105. data/features/step_definitions/sidebar_steps.rb +7 -0
  106. data/features/step_definitions/tab_steps.rb +3 -0
  107. data/features/step_definitions/user_steps.rb +26 -0
  108. data/features/step_definitions/web_steps.rb +211 -0
  109. data/features/sti_resource.feature +61 -0
  110. data/features/support/env.rb +90 -0
  111. data/features/support/paths.rb +50 -0
  112. data/features/support/selectors.rb +45 -0
  113. data/features/users/logging_in.feature +34 -0
  114. data/features/users/logging_out.feature +13 -0
  115. data/lib/active_admin.rb +74 -0
  116. data/lib/active_admin/abstract_view_factory.rb +95 -0
  117. data/lib/active_admin/application.rb +228 -0
  118. data/lib/active_admin/arbre.rb +23 -0
  119. data/lib/active_admin/arbre/attributes.rb +20 -0
  120. data/lib/active_admin/arbre/class_list.rb +28 -0
  121. data/lib/active_admin/arbre/collection.rb +27 -0
  122. data/lib/active_admin/arbre/context.rb +14 -0
  123. data/lib/active_admin/arbre/core_extensions.rb +5 -0
  124. data/lib/active_admin/arbre/document.rb +42 -0
  125. data/lib/active_admin/arbre/element.rb +151 -0
  126. data/lib/active_admin/arbre/html.rb +84 -0
  127. data/lib/active_admin/arbre/html5_elements.rb +47 -0
  128. data/lib/active_admin/arbre/tag.rb +137 -0
  129. data/lib/active_admin/arbre/text_node.rb +35 -0
  130. data/lib/active_admin/asset_registration.rb +34 -0
  131. data/lib/active_admin/callbacks.rb +89 -0
  132. data/lib/active_admin/comments.rb +88 -0
  133. data/lib/active_admin/comments/comment.rb +21 -0
  134. data/lib/active_admin/comments/configuration.rb +18 -0
  135. data/lib/active_admin/comments/namespace_helper.rb +14 -0
  136. data/lib/active_admin/comments/resource_helper.rb +17 -0
  137. data/lib/active_admin/comments/show_page_helper.rb +23 -0
  138. data/lib/active_admin/comments/views.rb +3 -0
  139. data/lib/active_admin/comments/views/active_admin_comment.rb +0 -0
  140. data/lib/active_admin/comments/views/active_admin_comments.rb +82 -0
  141. data/lib/active_admin/component.rb +22 -0
  142. data/lib/active_admin/controller_action.rb +12 -0
  143. data/lib/active_admin/csv_builder.rb +45 -0
  144. data/lib/active_admin/dashboards.rb +48 -0
  145. data/lib/active_admin/dashboards/dashboard_controller.rb +38 -0
  146. data/lib/active_admin/dashboards/section.rb +34 -0
  147. data/lib/active_admin/deprecation.rb +36 -0
  148. data/lib/active_admin/devise.rb +43 -0
  149. data/lib/active_admin/dsl.rb +224 -0
  150. data/lib/active_admin/engine.rb +4 -0
  151. data/lib/active_admin/event.rb +31 -0
  152. data/lib/active_admin/form_builder.rb +109 -0
  153. data/lib/active_admin/helpers/optional_display.rb +34 -0
  154. data/lib/active_admin/helpers/settings.rb +63 -0
  155. data/lib/active_admin/iconic.rb +51 -0
  156. data/lib/active_admin/iconic/icons.rb +142 -0
  157. data/lib/active_admin/locales/da.yml +28 -0
  158. data/lib/active_admin/locales/en.yml +40 -0
  159. data/lib/active_admin/locales/es.yml +39 -0
  160. data/lib/active_admin/locales/it.yml +39 -0
  161. data/lib/active_admin/locales/pt-BR.yml +36 -0
  162. data/lib/active_admin/locales/ru.yml +40 -0
  163. data/lib/active_admin/locales/zh_cn.yml +40 -0
  164. data/lib/active_admin/menu.rb +42 -0
  165. data/lib/active_admin/menu_item.rb +73 -0
  166. data/lib/active_admin/namespace.rb +206 -0
  167. data/lib/active_admin/page_config.rb +15 -0
  168. data/lib/active_admin/reloader.rb +30 -0
  169. data/lib/active_admin/renderer.rb +87 -0
  170. data/lib/active_admin/resource.rb +151 -0
  171. data/lib/active_admin/resource/action_items.rb +88 -0
  172. data/lib/active_admin/resource/belongs_to.rb +31 -0
  173. data/lib/active_admin/resource/menu.rb +45 -0
  174. data/lib/active_admin/resource/naming.rb +36 -0
  175. data/lib/active_admin/resource/scopes.rb +33 -0
  176. data/lib/active_admin/resource/sidebars.rb +36 -0
  177. data/lib/active_admin/resource_controller.rb +103 -0
  178. data/lib/active_admin/resource_controller/action_builder.rb +21 -0
  179. data/lib/active_admin/resource_controller/actions.rb +79 -0
  180. data/lib/active_admin/resource_controller/callbacks.rb +47 -0
  181. data/lib/active_admin/resource_controller/collection.rb +144 -0
  182. data/lib/active_admin/resource_controller/filters.rb +58 -0
  183. data/lib/active_admin/resource_controller/form.rb +42 -0
  184. data/lib/active_admin/resource_controller/menu.rb +29 -0
  185. data/lib/active_admin/resource_controller/page_configurations.rb +53 -0
  186. data/lib/active_admin/resource_controller/scoping.rb +36 -0
  187. data/lib/active_admin/resource_controller/sidebars.rb +18 -0
  188. data/lib/active_admin/router.rb +85 -0
  189. data/lib/active_admin/sass/active_admin.scss +3 -0
  190. data/lib/active_admin/sass/css_loader.rb +16 -0
  191. data/lib/active_admin/sass/helpers.rb +40 -0
  192. data/lib/active_admin/scope.rb +17 -0
  193. data/lib/active_admin/sidebar_section.rb +41 -0
  194. data/lib/active_admin/stylesheets/active_admin/mixins/_utilities.scss +0 -0
  195. data/lib/active_admin/version.rb +3 -0
  196. data/lib/active_admin/view_factory.rb +23 -0
  197. data/lib/active_admin/view_helpers.rb +22 -0
  198. data/lib/active_admin/view_helpers/active_admin_application_helper.rb +12 -0
  199. data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +7 -0
  200. data/lib/active_admin/view_helpers/auto_link_helper.rb +42 -0
  201. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +29 -0
  202. data/lib/active_admin/view_helpers/display_helper.rb +38 -0
  203. data/lib/active_admin/view_helpers/filter_form_helper.rb +186 -0
  204. data/lib/active_admin/view_helpers/form_helper.rb +13 -0
  205. data/lib/active_admin/view_helpers/icon_helper.rb +12 -0
  206. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +26 -0
  207. data/lib/active_admin/view_helpers/renderer_helper.rb +29 -0
  208. data/lib/active_admin/view_helpers/sidebar_helper.rb +15 -0
  209. data/lib/active_admin/view_helpers/title_helper.rb +11 -0
  210. data/lib/active_admin/view_helpers/view_factory_helper.rb +11 -0
  211. data/lib/active_admin/views.rb +8 -0
  212. data/lib/active_admin/views/action_items.rb +17 -0
  213. data/lib/active_admin/views/components/attributes_table.rb +66 -0
  214. data/lib/active_admin/views/components/blank_slate.rb +33 -0
  215. data/lib/active_admin/views/components/columns.rb +47 -0
  216. data/lib/active_admin/views/components/paginated_collection.rb +92 -0
  217. data/lib/active_admin/views/components/panel.rb +26 -0
  218. data/lib/active_admin/views/components/scopes.rb +70 -0
  219. data/lib/active_admin/views/components/sidebar_section.rb +28 -0
  220. data/lib/active_admin/views/components/status_tag.rb +55 -0
  221. data/lib/active_admin/views/components/table_for.rb +193 -0
  222. data/lib/active_admin/views/dashboard_section_renderer.rb +19 -0
  223. data/lib/active_admin/views/header_renderer.rb +53 -0
  224. data/lib/active_admin/views/index_as_block.rb +29 -0
  225. data/lib/active_admin/views/index_as_blog.rb +129 -0
  226. data/lib/active_admin/views/index_as_grid.rb +70 -0
  227. data/lib/active_admin/views/index_as_table.rb +148 -0
  228. data/lib/active_admin/views/pages/base.rb +155 -0
  229. data/lib/active_admin/views/pages/dashboard.rb +62 -0
  230. data/lib/active_admin/views/pages/edit.rb +28 -0
  231. data/lib/active_admin/views/pages/index.rb +74 -0
  232. data/lib/active_admin/views/pages/layout.rb +26 -0
  233. data/lib/active_admin/views/pages/new.rb +28 -0
  234. data/lib/active_admin/views/pages/show.rb +56 -0
  235. data/lib/active_admin/views/tabs_renderer.rb +58 -0
  236. data/lib/activeadmin.rb +1 -0
  237. data/lib/generators/active_admin/assets/assets_generator.rb +21 -0
  238. data/lib/generators/active_admin/assets/templates/3.0/active_admin.js +427 -0
  239. data/lib/generators/active_admin/assets/templates/3.1/active_admin.css.scss +6 -0
  240. data/lib/generators/active_admin/assets/templates/3.1/active_admin.js +1 -0
  241. data/lib/generators/active_admin/assets/templates/dashboards.rb +36 -0
  242. data/lib/generators/active_admin/devise/devise_generator.rb +49 -0
  243. data/lib/generators/active_admin/install/install_generator.rb +44 -0
  244. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +93 -0
  245. data/lib/generators/active_admin/install/templates/dashboards.rb +38 -0
  246. data/lib/generators/active_admin/install/templates/migrations/1_create_admin_notes.rb +16 -0
  247. data/lib/generators/active_admin/install/templates/migrations/2_move_admin_notes_to_comments.rb +25 -0
  248. data/lib/generators/active_admin/resource/resource_generator.rb +16 -0
  249. data/lib/generators/active_admin/resource/templates/admin.rb +3 -0
  250. data/script/local +44 -0
  251. data/script/use_rails +45 -0
  252. data/spec/integration/belongs_to_spec.rb +42 -0
  253. data/spec/integration/default_namespace.rb +77 -0
  254. data/spec/integration/javascript_spec.rb +20 -0
  255. data/spec/integration/stylesheets_spec.rb +41 -0
  256. data/spec/spec_helper.rb +157 -0
  257. data/spec/support/detect_rails_version.rb +11 -0
  258. data/spec/support/integration_example_group.rb +33 -0
  259. data/spec/support/jslint.yml +80 -0
  260. data/spec/support/rails_template.rb +32 -0
  261. data/spec/support/rails_template_with_data.rb +33 -0
  262. data/spec/support/templates/cucumber.rb +24 -0
  263. data/spec/unit/abstract_view_factory_spec.rb +79 -0
  264. data/spec/unit/action_builder_spec.rb +88 -0
  265. data/spec/unit/application_spec.rb +78 -0
  266. data/spec/unit/arbre/html/context_spec.rb +22 -0
  267. data/spec/unit/arbre/html/element_finder_methods_spec.rb +54 -0
  268. data/spec/unit/arbre/html/element_spec.rb +224 -0
  269. data/spec/unit/arbre/html/tag_attributes_spec.rb +61 -0
  270. data/spec/unit/arbre/html/tag_spec.rb +63 -0
  271. data/spec/unit/arbre/html_spec.rb +210 -0
  272. data/spec/unit/asset_registration_spec.rb +37 -0
  273. data/spec/unit/auto_link_spec.rb +39 -0
  274. data/spec/unit/belongs_to_spec.rb +45 -0
  275. data/spec/unit/breadcrumbs_spec.rb +110 -0
  276. data/spec/unit/comments_spec.rb +57 -0
  277. data/spec/unit/component_spec.rb +18 -0
  278. data/spec/unit/controller_filters_spec.rb +34 -0
  279. data/spec/unit/csv_builder_spec.rb +83 -0
  280. data/spec/unit/dashboard_controller_spec.rb +26 -0
  281. data/spec/unit/dashboard_section_spec.rb +56 -0
  282. data/spec/unit/dashboards_spec.rb +59 -0
  283. data/spec/unit/display_name_spec.rb +29 -0
  284. data/spec/unit/event_spec.rb +41 -0
  285. data/spec/unit/filter_form_builder_spec.rb +182 -0
  286. data/spec/unit/form_builder_spec.rb +239 -0
  287. data/spec/unit/generators/install_rails_3_1_spec.rb +16 -0
  288. data/spec/unit/helpers/settings_spec.rb +30 -0
  289. data/spec/unit/menu_item_spec.rb +143 -0
  290. data/spec/unit/menu_spec.rb +53 -0
  291. data/spec/unit/namespace_spec.rb +214 -0
  292. data/spec/unit/pretty_format_spec.rb +35 -0
  293. data/spec/unit/rails_spec.rb +43 -0
  294. data/spec/unit/registration_spec.rb +76 -0
  295. data/spec/unit/reloader_spec.rb +28 -0
  296. data/spec/unit/renderer_spec.rb +108 -0
  297. data/spec/unit/resource/action_items_spec.rb +62 -0
  298. data/spec/unit/resource/menu_spec.rb +80 -0
  299. data/spec/unit/resource/naming_spec.rb +56 -0
  300. data/spec/unit/resource/scopes_spec.rb +30 -0
  301. data/spec/unit/resource/sidebars_spec.rb +50 -0
  302. data/spec/unit/resource_controller/collection_spec.rb +34 -0
  303. data/spec/unit/resource_controller_spec.rb +152 -0
  304. data/spec/unit/resource_spec.rb +260 -0
  305. data/spec/unit/routing_spec.rb +88 -0
  306. data/spec/unit/sass/helpers_spec.rb +47 -0
  307. data/spec/unit/scope_spec.rb +31 -0
  308. data/spec/unit/tabs_renderer_spec.rb +85 -0
  309. data/spec/unit/view_factory_spec.rb +19 -0
  310. data/spec/unit/views/components/attributes_table_spec.rb +100 -0
  311. data/spec/unit/views/components/blank_slate_spec.rb +31 -0
  312. data/spec/unit/views/components/columns_spec.rb +75 -0
  313. data/spec/unit/views/components/panel_spec.rb +31 -0
  314. data/spec/unit/views/components/sidebar_section_spec.rb +37 -0
  315. data/spec/unit/views/components/status_tag_spec.rb +81 -0
  316. data/spec/unit/views/components/table_for_spec.rb +130 -0
  317. data/spec/unit/views/pages/layout_spec.rb +22 -0
  318. data/tasks/docs.rake +39 -0
  319. data/tasks/test.rake +49 -0
  320. data/tasks/yard.rake +6 -0
  321. metadata +510 -0
@@ -0,0 +1,110 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Breadcrumbs" do
4
+
5
+ include ActiveAdmin::ViewHelpers
6
+
7
+ describe "generating a trail from paths" do
8
+
9
+ # Mock our params
10
+ def params; {}; end
11
+ # Mock link to and return a hash
12
+ def link_to(name, url); {:name => name, :path => url}; end
13
+
14
+ let(:trail) { breadcrumb_links(path) }
15
+
16
+ context "when request '/admin'" do
17
+ let(:path){ "/admin" }
18
+
19
+ it "should not have any items" do
20
+ trail.size.should == 0
21
+ end
22
+ end
23
+
24
+ context "when path '/admin/posts'" do
25
+ let(:path) { "/admin/posts" }
26
+
27
+ it "should have one item" do
28
+ trail.size.should == 1
29
+ end
30
+ it "should have a link to /admin" do
31
+ trail[0][:name].should == "Admin"
32
+ trail[0][:path].should == "/admin"
33
+ end
34
+ end
35
+
36
+ context "when path '/admin/posts/1'" do
37
+ let(:path) { "/admin/posts/1" }
38
+
39
+ it "should have 2 items" do
40
+ trail.size.should == 2
41
+ end
42
+ it "should have a link to /admin" do
43
+ trail[0][:name].should == "Admin"
44
+ trail[0][:path].should == "/admin"
45
+ end
46
+ it "should have a link to /admin/posts" do
47
+ trail[1][:name].should == "Posts"
48
+ trail[1][:path].should == "/admin/posts"
49
+ end
50
+ end
51
+
52
+ context "when path '/admin/posts/1/comments'" do
53
+ let(:path) { "/admin/posts/1/comments" }
54
+
55
+ it "should have 3 items" do
56
+ trail.size.should == 3
57
+ end
58
+ it "should have a link to /admin" do
59
+ trail[0][:name].should == "Admin"
60
+ trail[0][:path].should == "/admin"
61
+ end
62
+ it "should have a link to /admin/posts" do
63
+ trail[1][:name].should == "Posts"
64
+ trail[1][:path].should == "/admin/posts"
65
+ end
66
+
67
+ context "when Post.find(1) doesn't exist" do
68
+ it "should have a link to /admin/posts/1" do
69
+ trail[2][:name].should == "1"
70
+ trail[2][:path].should == "/admin/posts/1"
71
+ end
72
+ end
73
+
74
+ context "when Post.find(1) does exist" do
75
+ before do
76
+ Post.stub!(:find).and_return{ mock(:display_name => "Hello World") }
77
+ end
78
+ it "should have a link to /admin/posts/1 using display name" do
79
+ trail[2][:name].should == "Hello World"
80
+ trail[2][:path].should == "/admin/posts/1"
81
+ end
82
+ end
83
+ end
84
+
85
+ context "when path '/admin/posts/1/coments/1'" do
86
+ let(:path) { "/admin/posts/1/comments/1" }
87
+
88
+ it "should have 4 items" do
89
+ trail.size.should == 4
90
+ end
91
+ it "should have a link to /admin" do
92
+ trail[0][:name].should == "Admin"
93
+ trail[0][:path].should == "/admin"
94
+ end
95
+ it "should have a link to /admin/posts" do
96
+ trail[1][:name].should == "Posts"
97
+ trail[1][:path].should == "/admin/posts"
98
+ end
99
+ it "should have a link to /admin/posts/1" do
100
+ trail[2][:name].should == "1"
101
+ trail[2][:path].should == "/admin/posts/1"
102
+ end
103
+ it "should have a link to /admin/posts/1/comments" do
104
+ trail[3][:name].should == "Comments"
105
+ trail[3][:path].should == "/admin/posts/1/comments"
106
+ end
107
+ end
108
+
109
+ end
110
+ end
@@ -0,0 +1,57 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Comments" do
4
+ let(:application){ ActiveAdmin::Application.new }
5
+
6
+ describe "Configuration" do
7
+ it "should have an array of namespaces which allow comments" do
8
+ application.allow_comments_in.should be_an_instance_of(Array)
9
+ end
10
+
11
+ it "should allow comments in the default namespace by default" do
12
+ application.allow_comments_in.should include(application.default_namespace)
13
+ end
14
+ end
15
+
16
+ describe ActiveAdmin::Comment do
17
+ describe "Associations and Validations" do
18
+ it { should belong_to :resource }
19
+ it { should belong_to :author }
20
+
21
+ it { should validate_presence_of :resource_id }
22
+ it { should validate_presence_of :resource_type }
23
+ it { should validate_presence_of :body }
24
+ it { should validate_presence_of :namespace }
25
+ end
26
+ end
27
+
28
+ describe ActiveAdmin::Comments::NamespaceHelper do
29
+ describe "#comments?" do
30
+ it "should have comments if the namespace is in the settings" do
31
+ ns = ActiveAdmin::Namespace.new(application, :admin)
32
+ ns.comments?.should be_true
33
+ end
34
+ it "should not have comments if the namespace is not in the settings" do
35
+ ns = ActiveAdmin::Namespace.new(application, :not_in_comments)
36
+ ns.comments?.should be_false
37
+ end
38
+ end
39
+ end
40
+
41
+ describe ActiveAdmin::Comments::ResourceHelper do
42
+ it "should add an attr_accessor :comments to ActiveAdmin::Resource" do
43
+ ns = ActiveAdmin::Namespace.new(application, :admin)
44
+ resource = ActiveAdmin::Resource.new(ns, Post)
45
+ resource.comments.should be_nil
46
+ resource.comments = true
47
+ resource.comments.should be_true
48
+ end
49
+
50
+ it "should not have comment if set to false by in allow_comments_in" do
51
+ ns = ActiveAdmin::Namespace.new(application, application.default_namespace)
52
+ resource = ActiveAdmin::Resource.new(ns, Post)
53
+ resource.comments = false
54
+ resource.comments?.should be_false
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ class MockComponentClass < ActiveAdmin::Component; end
4
+
5
+ describe ActiveAdmin::Component do
6
+
7
+ let(:component_class){ MockComponentClass }
8
+ let(:component){ component_class.new }
9
+
10
+ it "should be a subclass of an html div" do
11
+ ActiveAdmin::Component.ancestors.should include(Arbre::HTML::Div)
12
+ end
13
+
14
+ it "should render to a div, even as a subclass" do
15
+ component.tag_name.should == 'div'
16
+ end
17
+
18
+ end
@@ -0,0 +1,34 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveAdmin, "filters" do
4
+ let(:application){ ActiveAdmin::Application.new }
5
+
6
+ describe "before filters" do
7
+ it "should add a new before filter to ActiveAdmin::ResourceController" do
8
+ ActiveAdmin::ResourceController.should_receive(:before_filter).and_return(true)
9
+ application.before_filter :my_filter, :only => :show
10
+ end
11
+ end
12
+
13
+ describe "skip before filters" do
14
+ it "should add a new skip before filter to ActiveAdmin::ResourceController" do
15
+ ActiveAdmin::ResourceController.should_receive(:skip_before_filter).and_return(true)
16
+ application.skip_before_filter :my_filter, :only => :show
17
+ end
18
+ end
19
+
20
+ describe "after filters" do
21
+ it "should add a new after filter to ActiveAdmin::ResourceController" do
22
+ ActiveAdmin::ResourceController.should_receive(:after_filter).and_return(true)
23
+ application.after_filter :my_filter, :only => :show
24
+ end
25
+ end
26
+
27
+ describe "around filters" do
28
+ it "should add a new around filter to ActiveAdmin::ResourceController" do
29
+ ActiveAdmin::ResourceController.should_receive(:around_filter).and_return(true)
30
+ application.around_filter :my_filter, :only => :show
31
+ end
32
+ end
33
+
34
+ end
@@ -0,0 +1,83 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveAdmin::CSVBuilder do
4
+
5
+ describe '.default_for_resource using Post' do
6
+ let(:csv_builder) { ActiveAdmin::CSVBuilder.default_for_resource(Post) }
7
+
8
+ it "should return a default csv_builder for Post" do
9
+ csv_builder.should be_a(ActiveAdmin::CSVBuilder)
10
+ end
11
+
12
+ specify "the first column should be Id" do
13
+ csv_builder.columns.first.name.should == 'Id'
14
+ csv_builder.columns.first.data.should == :id
15
+ end
16
+
17
+ specify "the following columns should be content_column" do
18
+ csv_builder.columns[1..-1].each_with_index do |column, index|
19
+ column.name.should == Post.content_columns[index].name.titleize
20
+ column.data.should == Post.content_columns[index].name.to_sym
21
+ end
22
+ end
23
+ end
24
+
25
+ context 'when empty' do
26
+ let(:builder){ ActiveAdmin::CSVBuilder.new }
27
+
28
+ it "should have no columns" do
29
+ builder.columns.should == []
30
+ end
31
+ end
32
+
33
+ context "with a symbol column (:title)" do
34
+ let(:builder) do
35
+ ActiveAdmin::CSVBuilder.new do
36
+ column :title
37
+ end
38
+ end
39
+
40
+ it "should have one colum" do
41
+ builder.columns.size.should == 1
42
+ end
43
+
44
+ describe "the column" do
45
+ let(:column){ builder.columns.first }
46
+
47
+ it "should have a name of 'Title'" do
48
+ column.name.should == "Title"
49
+ end
50
+
51
+ it "should have the data :title" do
52
+ column.data.should == :title
53
+ end
54
+ end
55
+ end
56
+
57
+ context "with a block and title" do
58
+ let(:builder) do
59
+ ActiveAdmin::CSVBuilder.new do
60
+ column "My title" do
61
+ # nothing
62
+ end
63
+ end
64
+ end
65
+
66
+ it "should have one colum" do
67
+ builder.columns.size.should == 1
68
+ end
69
+
70
+ describe "the column" do
71
+ let(:column){ builder.columns.first }
72
+
73
+ it "should have a name of 'My title'" do
74
+ column.name.should == "My title"
75
+ end
76
+
77
+ it "should have the data :title" do
78
+ column.data.should be_an_instance_of(Proc)
79
+ end
80
+ end
81
+ end
82
+
83
+ end
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+
3
+
4
+ module Admin
5
+ class DashboardController < ActiveAdmin::Dashboards::DashboardController
6
+ end
7
+ end
8
+ class DashboardController < ActiveAdmin::Dashboards::DashboardController; end
9
+
10
+ describe ActiveAdmin::Dashboards::DashboardController do
11
+
12
+ describe "getting the namespace name" do
13
+ subject{ controller.send :namespace }
14
+
15
+ context "when admin namespace" do
16
+ let(:controller){ Admin::DashboardController.new }
17
+ it { should == :admin }
18
+ end
19
+
20
+ context "when root namespace" do
21
+ let(:controller){ DashboardController.new }
22
+ it { should == :root }
23
+ end
24
+ end
25
+
26
+ end
@@ -0,0 +1,56 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveAdmin::Dashboards::Section do
4
+
5
+ def section(options = {})
6
+ name = options.delete(:name) || "Recent Posts"
7
+ ActiveAdmin::Dashboards::Section.new(:admin, name, options){ }
8
+ end
9
+
10
+ describe "accessors" do
11
+ it "should have a namespace" do
12
+ section.namespace.should == :admin
13
+ end
14
+
15
+ it "should have a block" do
16
+ section.block.class.should == Proc
17
+ end
18
+
19
+ it "should have a name" do
20
+ section.name.should == 'Recent Posts'
21
+ end
22
+ end
23
+
24
+ describe "priority" do
25
+ context "when not set" do
26
+ subject{ section.priority }
27
+ it { should == ActiveAdmin::Dashboards::Section::DEFAULT_PRIORITY }
28
+ end
29
+
30
+ context "when set" do
31
+ subject{ section(:priority => 1).priority }
32
+ it { should == 1 }
33
+ end
34
+ end
35
+
36
+ describe "icon" do
37
+ it "should set the icon" do
38
+ s = section(:icon => :my_icon)
39
+ s.icon.should == :my_icon
40
+ end
41
+ it "should be nil by default" do
42
+ section.icon.should be_nil
43
+ end
44
+ end
45
+
46
+ describe "sorting sections" do
47
+ it "should sort by priority then alpha" do
48
+ s1 = section :name => "Woot"
49
+ s2 = section :name => :Alpha
50
+ s3 = section :name => "Zulu", :priority => 1
51
+ s4 = section :name => "Beta", :priority => 100
52
+ [s1,s2,s3,s4].sort.should == [s3, s2, s1, s4]
53
+ end
54
+ end
55
+
56
+ end
@@ -0,0 +1,59 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveAdmin::Dashboards do
4
+
5
+ after(:each) do
6
+ ActiveAdmin::Dashboards.clear_all_sections!
7
+ end
8
+
9
+ describe "adding sections" do
10
+ before do
11
+ ActiveAdmin::Dashboards.clear_all_sections!
12
+ ActiveAdmin::Dashboards.add_section('Recent Posts')
13
+ end
14
+ it "should add a new section namespaced" do
15
+ ActiveAdmin::Dashboards.sections[:admin].first.should be_an_instance_of(ActiveAdmin::Dashboards::Section)
16
+ end
17
+ end
18
+
19
+ describe "adding sections using the build syntax" do
20
+ before do
21
+ ActiveAdmin::Dashboards.clear_all_sections!
22
+ ActiveAdmin::Dashboards.build do
23
+ section "Recent Posts" do
24
+ end
25
+ end
26
+ end
27
+
28
+ it "should add a new section" do
29
+ ActiveAdmin::Dashboards.sections[:admin].first.should be_an_instance_of(ActiveAdmin::Dashboards::Section)
30
+ end
31
+ end
32
+
33
+ describe "clearing all sections" do
34
+ before do
35
+ ActiveAdmin::Dashboards.add_section('Recent Posts')
36
+ end
37
+ it "should clear all sections" do
38
+ ActiveAdmin::Dashboards.clear_all_sections!
39
+ ActiveAdmin::Dashboards.sections.keys.should be_empty
40
+ end
41
+ end
42
+
43
+ describe "finding namespaced sections" do
44
+ context "when the namespace exists" do
45
+ before do
46
+ ActiveAdmin::Dashboards.add_section('Recent Posts')
47
+ end
48
+ it "should return an array of sections" do
49
+ ActiveAdmin::Dashboards.sections_for_namespace(:admin).should_not be_empty
50
+ end
51
+ end
52
+
53
+ context "when the namespace does not exists" do
54
+ it "should return an empty array" do
55
+ ActiveAdmin::Dashboards.sections_for_namespace(:not_a_namespace).should be_empty
56
+ end
57
+ end
58
+ end
59
+ end