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,88 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveAdmin, "Routing" do
4
+
5
+ before :each do
6
+ load_defaults!
7
+ reload_routes!
8
+ end
9
+
10
+ include Rails.application.routes.url_helpers
11
+
12
+ describe "dashboard" do
13
+ context "when in admin namespace" do
14
+ it "should route the admin dashboard" do
15
+ admin_dashboard_path.should == "/admin"
16
+ end
17
+ end
18
+ context "when in root namespace" do
19
+ before(:each) do
20
+ load_resources { ActiveAdmin.register(Post, :namespace => false) }
21
+ end
22
+ it "should route the root dashboard" do
23
+ dashboard_path.should == "/"
24
+ end
25
+ end
26
+ end
27
+
28
+ describe "standard resources" do
29
+ context "when in admin namespace" do
30
+ it "should route the index path" do
31
+ admin_posts_path.should == "/admin/posts"
32
+ end
33
+
34
+ it "should route the show path" do
35
+ admin_post_path(1).should == "/admin/posts/1"
36
+ end
37
+
38
+ it "should route the new path" do
39
+ new_admin_post_path.should == "/admin/posts/new"
40
+ end
41
+
42
+ it "should route the edit path" do
43
+ edit_admin_post_path(1).should == "/admin/posts/1/edit"
44
+ end
45
+ end
46
+
47
+ context "when in root namespace" do
48
+ before(:each) do
49
+ load_resources { ActiveAdmin.register(Post, :namespace => false) }
50
+ end
51
+
52
+ it "should route the index path" do
53
+ posts_path.should == "/posts"
54
+ end
55
+
56
+ it "should route the show path" do
57
+ post_path(1).should == "/posts/1"
58
+ end
59
+
60
+ it "should route the new path" do
61
+ new_post_path.should == "/posts/new"
62
+ end
63
+
64
+ it "should route the edit path" do
65
+ edit_post_path(1).should == "/posts/1/edit"
66
+ end
67
+ end
68
+ end
69
+
70
+ describe "belongs to resource" do
71
+ it "should route the nested index path" do
72
+ admin_user_posts_path(1).should == "/admin/users/1/posts"
73
+ end
74
+
75
+ it "should route the nested show path" do
76
+ admin_user_post_path(1,2).should == "/admin/users/1/posts/2"
77
+ end
78
+
79
+ it "should route the nested new path" do
80
+ new_admin_user_post_path(1).should == "/admin/users/1/posts/new"
81
+ end
82
+
83
+ it "should route the nested edit path" do
84
+ edit_admin_user_post_path(1,2).should == "/admin/users/1/posts/2/edit"
85
+ end
86
+ end
87
+
88
+ end
@@ -0,0 +1,47 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveAdmin::Sass::Helpers do
4
+
5
+ include ActiveAdmin::Sass::Helpers
6
+
7
+ context "when not using the asset pipeline" do
8
+
9
+ before(:all)do
10
+ @actual_rails_version = Rails::VERSION::MINOR
11
+ silence_warnings { Rails::VERSION::MINOR = 0 }
12
+ end
13
+
14
+ after(:all) do
15
+ silence_warnings { Rails::VERSION::MINOR = @actual_rails_version }
16
+ end
17
+
18
+ it "should generate an image asset path to /images/active_admin" do
19
+ active_admin_image_path(Sass::Script::String.new('test.jpg')).should ==
20
+ Sass::Script::String.new("/images/active_admin/test.jpg", true)
21
+ end
22
+
23
+ end
24
+
25
+ context "when using the asset pipeline" do
26
+ before(:all)do
27
+ @actual_rails_version = Rails::VERSION::MINOR
28
+ silence_warnings { Rails::VERSION::MINOR = 1 }
29
+ end
30
+
31
+ after(:all) do
32
+ silence_warnings { Rails::VERSION::MINOR = @actual_rails_version }
33
+ end
34
+
35
+ before do
36
+ assets = mock(:enabled => true)
37
+ Rails.application.config.stub!(:assets => assets)
38
+ end
39
+
40
+ it "should call the sass-rails asset helper" do
41
+ self.should_receive(:asset_path).with(Sass::Script::String.new("active_admin/test.jpg"), Sass::Script::String.new('image'))
42
+ active_admin_image_path(::Sass::Script::String.new('test.jpg'))
43
+ end
44
+
45
+ end
46
+
47
+ end
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveAdmin::Scope do
4
+
5
+ describe "creating a scope" do
6
+ subject{ scope }
7
+
8
+ context "when just a scope method" do
9
+ let(:scope) { ActiveAdmin::Scope.new :published }
10
+ its(:name) { should == "Published"}
11
+ its(:id) { should == "published"}
12
+ its(:scope_method) { should == :published }
13
+ end
14
+
15
+ context "when a name and scope method" do
16
+ let(:scope) { ActiveAdmin::Scope.new "My Scope", :scope_method }
17
+ its(:name) { should == "My Scope"}
18
+ its(:id) { should == "my_scope"}
19
+ its(:scope_method) { should == :scope_method }
20
+ end
21
+
22
+ context "when a name and scope block" do
23
+ let(:scope) { ActiveAdmin::Scope.new("My Scope"){|s| s } }
24
+ its(:name) { should == "My Scope"}
25
+ its(:id) { should == "my_scope"}
26
+ its(:scope_method) { should == nil }
27
+ its(:scope_block) { should be_a(Proc)}
28
+ end
29
+ end
30
+
31
+ end
@@ -0,0 +1,85 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveAdmin::Views::TabsRenderer do
4
+
5
+ let(:renderer){ ActiveAdmin::Views::TabsRenderer.new(mock_action_view) }
6
+ let(:menu){ ActiveAdmin::Menu.new }
7
+ let(:html){ renderer.to_html(menu) }
8
+
9
+ # Generate a menu to use
10
+ before do
11
+ menu.add "Blog Posts", "/admin/blog-posts"
12
+ menu.add "Reports", "/admin/reports"
13
+ reports = menu["Reports"]
14
+ reports.add "A Sub Reports", "/admin/a-sub-reports"
15
+ reports.add "B Sub Reports", "/admin/b-sub-reports"
16
+ menu.add "Administration", "/admin/administration"
17
+ administration = menu["Administration"]
18
+ administration.add "User administration", '/admin/user-administration', 10, :if => proc { false }
19
+ menu.add "Management", "#"
20
+ management = menu["Management"]
21
+ management.add "Order management", '/admin/order-management', 10, :if => proc { false }
22
+ management.add "Bill management", '/admin/bill-management', 10, :if => :admin_logged_in?
23
+
24
+ renderer.stub!(:admin_logged_in?).and_return(false)
25
+ end
26
+
27
+ it "should generate a ul" do
28
+ html.should have_tag("ul")
29
+ end
30
+
31
+ it "should generate an li for each item" do
32
+ html.should have_tag("li", :parent => { :tag => "ul" })
33
+ end
34
+
35
+ it "should generate a link for each item" do
36
+ html.should have_tag("a", "Blog Posts", :attributes => { :href => '/admin/blog-posts' })
37
+ end
38
+
39
+ it "should generate a " do
40
+ html.should have_tag("a", "Blog Posts", :attributes => { :href => '/admin/blog-posts' })
41
+ end
42
+
43
+ it "should generate a nested list for children" do
44
+ html.should have_tag("ul", :parent => { :tag => "li" })
45
+ end
46
+
47
+ it "should generate a nested list with li for each child" do
48
+ html.should have_tag("li", :parent => { :tag => "ul" }, :attributes => {:id => "a_sub_reports"})
49
+ html.should have_tag("li", :parent => { :tag => "ul" }, :attributes => {:id => "b_sub_reports"})
50
+ end
51
+
52
+ it "should not generate a link for user administration" do
53
+ html.should_not have_tag("a", "User administration", :attributes => { :href => '/admin/user-administration' })
54
+ end
55
+
56
+ it "should generate the administration parent menu" do
57
+ html.should have_tag("a", "Administration", :attributes => { :href => '/admin/administration' })
58
+ end
59
+
60
+ it "should not generate a link for order management" do
61
+ html.should_not have_tag("a", "Order management", :attributes => { :href => '/admin/order-management' })
62
+ end
63
+
64
+ it "should not generate a link for bill management" do
65
+ html.should_not have_tag("a", "Bill management", :attributes => { :href => '/admin/bill-management' })
66
+ end
67
+
68
+ it "should not generate the management parent menu" do
69
+ html.should_not have_tag("a", "Management", :attributes => { :href => '#' })
70
+ end
71
+
72
+ describe "marking current item" do
73
+ it "should add the 'current' class to the li" do
74
+ renderer.instance_variable_set :@current_tab, "Blog Posts"
75
+ html.should have_tag("li", :attributes => { :class => "current" })
76
+ end
77
+
78
+ it "should add the 'current' and 'has_nested' classes to the li and 'current' to the sub li" do
79
+ renderer.instance_variable_set :@current_tab, "Reports/A Sub Reports"
80
+ html.should have_tag("li", :attributes => { :id => "reports", :class => "current has_nested" })
81
+ html.should have_tag("li", :attributes => { :id => "a_sub_reports", :class => "current" })
82
+ end
83
+ end
84
+
85
+ end
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+
3
+ def it_should_have_view(key, value)
4
+ it "should have #{value} for view key '#{key}'" do
5
+ subject.send(key).should == value
6
+ end
7
+ end
8
+
9
+ describe ActiveAdmin::ViewFactory do
10
+
11
+ it_should_have_view :global_navigation, ActiveAdmin::Views::TabsRenderer
12
+ it_should_have_view :action_items, ActiveAdmin::Views::ActionItems
13
+ it_should_have_view :header, ActiveAdmin::Views::HeaderRenderer
14
+ it_should_have_view :blank_slate, ActiveAdmin::Views::BlankSlate
15
+
16
+ it_should_have_view :dashboard_page, ActiveAdmin::Views::Pages::Dashboard
17
+ it_should_have_view :layout, ActiveAdmin::Views::Pages::Layout
18
+
19
+ end
@@ -0,0 +1,100 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveAdmin::Views::AttributesTable do
4
+ include Arbre::HTML
5
+ let(:assigns){ {} }
6
+
7
+ describe "creating with the dsl" do
8
+ let(:helpers) { action_view }
9
+
10
+ let(:post) do
11
+ post = Post.new :title => "Hello World", :body => nil
12
+ post.stub!(:id){ 1 }
13
+ post.stub!(:new_record?){ false }
14
+ post
15
+ end
16
+
17
+
18
+ # Loop through a few different ways to make the same table
19
+ # and ensure that they produce the same results
20
+ {
21
+ "when attributes are passed in to the builder methods" => proc {
22
+ attributes_table_for post, :id, :title, :body
23
+ },
24
+ "when attributes are built using the block" => proc {
25
+ attributes_table_for post do
26
+ rows :id, :title, :body
27
+ end
28
+ },
29
+ "when each attribute is passed in by itself" => proc {
30
+ attributes_table_for post do
31
+ row :id
32
+ row :title
33
+ row :body
34
+ end
35
+ },
36
+ "when you create each row with a custom block" => proc {
37
+ attributes_table_for post do
38
+ row("Id") { post.id }
39
+ row("Title"){ post.title }
40
+ row("Body") { post.body }
41
+ end
42
+ }
43
+
44
+ }.each do |context_title, table_decleration|
45
+ context context_title do
46
+ let(:table) { instance_eval &table_decleration }
47
+
48
+ it "should render a div wrapper with the class '.attributes_table'" do
49
+ table.tag_name.should == 'div'
50
+ table.attr(:class).should include('attributes_table')
51
+ end
52
+ it "should add id and type class" do
53
+ table.class_names.should include("post")
54
+ table.id.should == "attributes_table_post_1"
55
+ end
56
+
57
+ it "should render 3 rows" do
58
+ table.find_by_tag("tr").size.should == 3
59
+ end
60
+
61
+ describe "rendering the rows" do
62
+ [
63
+ ["Id" , "2"],
64
+ ["Title" , "Hello World"],
65
+ ["Body" , "<span class=\"empty\">Empty</span>"]
66
+ ].each_with_index do |set, i|
67
+ let(:title){ set[0] }
68
+ let(:content){ set[1] }
69
+ let(:current_row){ table.find_by_tag("tr")[i] }
70
+
71
+ describe "for #{set[0]}" do
72
+ it "should have the title '#{set[0]}'" do
73
+ current_row.find_by_tag("th").first.content.should == title
74
+ end
75
+ it "should have the content '#{set[1]}'" do
76
+ current_row.find_by_tag("td").first.content.chomp.strip.should == content
77
+ end
78
+ end
79
+ end
80
+ end # describe rendering rows
81
+
82
+ end
83
+ end # describe dsl styles
84
+
85
+ it "should allow html content inside the attributes table" do
86
+ table = attributes_table_for(post) do
87
+ row("ID"){ span(post.id, :class => 'id') }
88
+ end
89
+ table.find_by_tag("td").first.content.chomp.strip.should == "<span class=\"id\">1</span>"
90
+ end
91
+
92
+ it "should check if an association exists when an attribute has id in it" do
93
+ post.author = User.new(:username => "john_doe")
94
+ table = attributes_table_for post, :author_id
95
+ table.find_by_tag("td").first.content.should == "john_doe"
96
+ end
97
+
98
+ end
99
+
100
+ end
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveAdmin::Views::BlankSlate do
4
+ include Arbre::HTML
5
+
6
+ let(:assigns){ {} }
7
+
8
+ let(:helpers) { action_view }
9
+
10
+ describe "#blank_slate" do
11
+ subject { blank_slate("Posts", "/posts/new") }
12
+
13
+ its(:tag_name) { should eql 'div' }
14
+ its(:class_list) { should include('blank_slate_container') }
15
+
16
+ describe "content" do
17
+ subject { blank_slate("Posts", "/posts/new").content }
18
+
19
+ context "when url passed in" do
20
+ it { should include '<span class="blank_slate">There are no Posts yet. <a href="/posts/new">Create one</a></span>' }
21
+ end
22
+
23
+ context "when no url passed in" do
24
+ subject { blank_slate("Posts").content }
25
+
26
+ it { should include '<span class="blank_slate">There are no Posts yet.</span>' }
27
+ end
28
+ end
29
+
30
+ end
31
+ end
@@ -0,0 +1,75 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveAdmin::Views::Columns do
4
+ include Arbre::HTML
5
+ let(:assigns){ {} }
6
+
7
+ describe "Rendering one column" do
8
+ let(:cols) do
9
+ columns do
10
+ column { span "Hello World" }
11
+ end
12
+ end
13
+
14
+ it "should have the class .columns" do
15
+ cols.class_list.should include("columns")
16
+ end
17
+
18
+ it "should have one column" do
19
+ cols.children.size.should == 1
20
+ cols.children.first.class_list.should include("column")
21
+ end
22
+
23
+ it "should have one column with the width 100%" do
24
+ cols.children.first.attr(:style).should include("width: 100%")
25
+ end
26
+ end
27
+
28
+ describe "Rendering two columns" do
29
+ let(:cols) do
30
+ columns do
31
+ column { span "Hello World" }
32
+ column { span "Hello World" }
33
+ end
34
+ end
35
+
36
+ it "should have two columns" do
37
+ cols.children.size.should == 2
38
+ end
39
+
40
+ it "should have a first column with width 49% and margin 2%" do
41
+ cols.children.first.attr(:style).should == "width: 49%; margin-right: 2%;"
42
+ end
43
+
44
+ it "should have a second column with width 49% and no right margin" do
45
+ cols.children.last.attr(:style).should == "width: 49%;"
46
+ end
47
+ end
48
+
49
+ describe "Rendering four columns" do
50
+ let(:cols) do
51
+ columns do
52
+ column { span "Hello World" }
53
+ column { span "Hello World" }
54
+ column { span "Hello World" }
55
+ column { span "Hello World" }
56
+ end
57
+ end
58
+
59
+ it "should have four columns" do
60
+ cols.children.size.should == 4
61
+ end
62
+
63
+
64
+ (0..2).to_a.each do |index|
65
+ it "should have column #{index + 1} with width 49% and margin 2%" do
66
+ cols.children[index].attr(:style).should == "width: 23.5%; margin-right: 2%;"
67
+ end
68
+ end
69
+
70
+ it "should have column 4 with width 49% and no margin" do
71
+ cols.children[3].attr(:style).should == "width: 23.5%;"
72
+ end
73
+ end
74
+
75
+ end