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,16 @@
1
+ require 'spec_helper'
2
+
3
+
4
+ if Rails.version[0..2] == '3.1'
5
+ describe "Installing in Rails 3.1" do
6
+
7
+ it "should add active_admin.css to app/assets/stylesheets/" do
8
+ File.exists?(Rails.root + "app/assets/stylesheets/active_admin.css.scss").should be_true
9
+ end
10
+
11
+ it "should add active_admin.js to app/assets/javascripts" do
12
+ File.exists?(Rails.root + "app/assets/javascripts/active_admin.js").should be_true
13
+ end
14
+
15
+ end
16
+ end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+ require 'active_admin/helpers/settings'
3
+
4
+ describe ActiveAdmin::Settings do
5
+
6
+ # A Class with settings module included
7
+ let(:klass) do
8
+ Class.new do
9
+ include ActiveAdmin::Settings
10
+ end
11
+ end
12
+
13
+ it "should add a new setting with a default" do
14
+ klass.setting :my_setting, "Hello World"
15
+ klass.default_settings[:my_setting].should == "Hello World"
16
+ end
17
+
18
+ it "should initialize the defaults" do
19
+ klass.setting :my_setting, "Hello World"
20
+ klass.new.my_setting.should == "Hello World"
21
+ end
22
+
23
+ it "should support settings of nil" do
24
+ klass.setting :my_setting, :some_val
25
+ inst = klass.new
26
+ inst.my_setting = nil
27
+ inst.my_setting.should == nil
28
+ end
29
+
30
+ end
@@ -0,0 +1,143 @@
1
+ require 'spec_helper'
2
+
3
+ module ActiveAdmin
4
+ describe MenuItem do
5
+
6
+ it "should have a name" do
7
+ item = MenuItem.new("Dashboard", "/admin")
8
+ item.name.should == "Dashboard"
9
+ end
10
+
11
+ it "should have a url" do
12
+ item = MenuItem.new("Dashboard", "/admin")
13
+ item.url.should == "/admin"
14
+ end
15
+
16
+ it "should have a priority of 10 by default" do
17
+ item = MenuItem.new("Dashboard", "/admin")
18
+ item.priority.should == 10
19
+ end
20
+
21
+ it "should accept an optional options hash" do
22
+ item = MenuItem.new("Dashboard", "/admin", 10, :if => lambda{ logged_in? } )
23
+ end
24
+
25
+ it "should have a display if block" do
26
+ block = lambda{ logged_in? }
27
+ item = MenuItem.new("Dashboard", "/admin", 10, :if => block )
28
+ item.display_if_block.should == block
29
+ end
30
+
31
+ it "should have a default display if block always returning true" do
32
+ item = MenuItem.new("Dashboard", "/admin")
33
+ item.display_if_block.should be_instance_of(Proc)
34
+ item.display_if_block.call(self).should == true
35
+ end
36
+
37
+ describe "url generation and caching" do
38
+ it "should generate a url if it is a symbol" do
39
+ MenuItem.new("Posts", :admin_posts_path).url.should == "/admin/posts"
40
+ end
41
+
42
+ it "should generate a url if it is a string" do
43
+ MenuItem.new("Posts", "/admin/posts").url.should == "/admin/posts"
44
+ end
45
+ end
46
+
47
+ context "with no children" do
48
+ it "should be empty" do
49
+ item = MenuItem.new("Blog", "/admin/blog")
50
+ item.children.should == []
51
+ end
52
+
53
+ it "should accept new children" do
54
+ item = MenuItem.new("Blog", "/admin/blog")
55
+ item.add "Dashboard", "/admin"
56
+ item.children.first.should be_an_instance_of(MenuItem)
57
+ item.children.first.name.should == "Dashboard"
58
+ end
59
+ end
60
+
61
+ context "with many children" do
62
+ let(:item) do
63
+ i = MenuItem.new("Dashboard", "/admin")
64
+ i.add "Blog", "/"
65
+ i.add "Cars", "/"
66
+ i.add "Users", "/", 1
67
+ i.add "Settings", "/", 2
68
+ i.add "Analytics", "/", 44
69
+ i
70
+ end
71
+
72
+ it "should give access to the menu item as an array" do
73
+ item['Blog'].name.should == 'Blog'
74
+ end
75
+
76
+ it "should sort items based on priority and name" do
77
+ item.children[0].name.should == 'Users'
78
+ item.children[1].name.should == 'Settings'
79
+ item.children[2].name.should == 'Blog'
80
+ item.children[3].name.should == 'Cars'
81
+ item.children[4].name.should == 'Analytics'
82
+ end
83
+
84
+ it "children should hold a reference to their parent" do
85
+ item["Blog"].parent.should == item
86
+ end
87
+ end
88
+
89
+ describe "building children using block syntax" do
90
+ let(:item) do
91
+ MenuItem.new("Blog", "/") do |blog|
92
+ blog.add "Create New", "/blog/new"
93
+ blog.add("Comments", "/blog/comments") do |comments|
94
+ comments.add "Approved", "/blog/comments?status=approved"
95
+ end
96
+ end
97
+ end
98
+
99
+ it "should have 2 children" do
100
+ item.children.size.should == 2
101
+ end
102
+
103
+ it "should have sub-sub items" do
104
+ item["Comments"]["Approved"].name.should == 'Approved'
105
+ end
106
+ end
107
+
108
+ describe "accessing ancestory" do
109
+ let(:item){ MenuItem.new "Blog", "/blog" }
110
+
111
+ context "with no parent" do
112
+ it "should return an empty array" do
113
+ item.ancestors.should == []
114
+ end
115
+ end
116
+
117
+ context "with one parent" do
118
+ let(:sub_item) do
119
+ item.add "Create New", "/blog/new"
120
+ item["Create New"]
121
+ end
122
+ it "should return an array with the parent" do
123
+ sub_item.ancestors.should == [item]
124
+ end
125
+ end
126
+
127
+ context "with many parents" do
128
+ before(:each) do
129
+ item.add "C1", "/c1" do |c1|
130
+ c1.add "C2", "/c2" do |c2|
131
+ c2.add "C3", "/c3"
132
+ end
133
+ end
134
+ end
135
+ let(:sub_item){ item["C1"]["C2"]["C3"] }
136
+ it "should return an array with the parents in reverse order" do
137
+ sub_item.ancestors.should == [item["C1"]["C2"], item["C1"], item]
138
+ end
139
+ end
140
+ end # accessing ancestory
141
+
142
+ end
143
+ end
@@ -0,0 +1,53 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveAdmin::Menu do
4
+
5
+ context "with no items" do
6
+ it "should be empty" do
7
+ ActiveAdmin::Menu.new.items.should == []
8
+ end
9
+
10
+ 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
21
+ end
22
+ end
23
+
24
+ context "with many item" do
25
+ 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
35
+ end
36
+ end
37
+
38
+ it "should give access to the menu item as an array" do
39
+ menu['Dashboard'].name.should == 'Dashboard'
40
+ 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"
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"
48
+ end
49
+
50
+ end
51
+
52
+ end
53
+
@@ -0,0 +1,214 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveAdmin::Namespace do
4
+
5
+ let(:application){ ActiveAdmin::Application.new }
6
+
7
+ context "when new" do
8
+ let(:namespace){ ActiveAdmin::Namespace.new(application, :admin) }
9
+
10
+ it "should have an application instance" do
11
+ namespace.application.should == application
12
+ end
13
+
14
+ it "should have a name" do
15
+ namespace.name.should == :admin
16
+ end
17
+
18
+ it "should have no resources" do
19
+ namespace.resources.should == {}
20
+ end
21
+
22
+ it "should have an empty menu" do
23
+ namespace.menu.items.should be_empty
24
+ end
25
+ end
26
+
27
+ describe "registering a resource" do
28
+
29
+ let(:namespace){ ActiveAdmin::Namespace.new(application, :admin) }
30
+
31
+ context "with no configuration" do
32
+ before do
33
+ namespace.register Category
34
+ end
35
+ it "should store the namespaced registered configuration" do
36
+ namespace.resources.keys.should include('Category')
37
+ end
38
+ it "should create a new controller in the default namespace" do
39
+ defined?(Admin::CategoriesController).should be_true
40
+ end
41
+ it "should create the dashboard controller" do
42
+ defined?(Admin::DashboardController).should be_true
43
+ end
44
+ it "should create a menu item" do
45
+ namespace.load_menu!
46
+ namespace.menu["Categories"].should be_an_instance_of(ActiveAdmin::MenuItem)
47
+ namespace.menu["Categories"].url.should == "/admin/categories"
48
+ end
49
+ end
50
+
51
+ context "with a block configuration" do
52
+ it "should be evaluated in the dsl" do
53
+ lambda {
54
+ namespace.register Category do
55
+ raise "Hello World"
56
+ end
57
+ }.should raise_error
58
+ end
59
+ end
60
+
61
+ context "with a resource that's namespaced" do
62
+
63
+ before do
64
+ module ::Mock; class Resource; def self.has_many(arg1, arg2); end; end; end
65
+ namespace.register Mock::Resource
66
+ end
67
+
68
+ it "should store the namespaced registered configuration" do
69
+ namespace.resources.keys.should include('MockResource')
70
+ end
71
+ it "should create a new controller in the default namespace" do
72
+ defined?(Admin::MockResourcesController).should be_true
73
+ end
74
+ it "should create a menu item" do
75
+ namespace.load_menu!
76
+ namespace.menu["Mock Resources"].should be_an_instance_of(ActiveAdmin::MenuItem)
77
+ end
78
+ it "should use the resource as the model in the controller" do
79
+ Admin::MockResourcesController.resource_class.should == Mock::Resource
80
+ end
81
+
82
+ end
83
+
84
+ describe "finding resource instances" do
85
+
86
+ let(:namespace){ ActiveAdmin::Namespace.new(application, :admin) }
87
+
88
+ it "should return the resource when its been registered" do
89
+ post = namespace.register Post
90
+ namespace.resource_for(Post).should == post
91
+ end
92
+
93
+ it 'should return nil when the resource has not been registered' do
94
+ namespace.resource_for(Post).should == nil
95
+ end
96
+
97
+ it "should return the parent when the parent class has been registered and the child has not" do
98
+ user = namespace.register User
99
+ namespace.resource_for(Publisher).should == user
100
+ end
101
+
102
+ it "should return the resource if it and it's parent were registered" do
103
+ user = namespace.register User
104
+ publisher = namespace.register Publisher
105
+ namespace.resource_for(Publisher).should == publisher
106
+ end
107
+
108
+ end
109
+
110
+ describe "adding to the menu" do
111
+
112
+ describe "adding as a top level item" do
113
+ before do
114
+ namespace.register Category
115
+ namespace.load_menu!
116
+ end
117
+ it "should add a new menu item" do
118
+ namespace.menu['Categories'].should_not be_nil
119
+ end
120
+ end
121
+
122
+ describe "adding as a child" do
123
+ before do
124
+ namespace.register Category do
125
+ menu :parent => 'Blog'
126
+ end
127
+ namespace.load_menu!
128
+ end
129
+ it "should generate the parent menu item" do
130
+ namespace.menu['Blog'].should_not be_nil
131
+ end
132
+ it "should generate its own child item" do
133
+ namespace.menu['Blog']['Categories'].should_not be_nil
134
+ end
135
+ end
136
+
137
+ describe "disabling the menu" do
138
+ before do
139
+ namespace.register Category do
140
+ menu false
141
+ end
142
+ namespace.load_menu!
143
+ end
144
+ it "should not create a menu item" do
145
+ namespace.menu["Categories"].should be_nil
146
+ end
147
+ end
148
+
149
+ describe "setting menu priority" do
150
+ before do
151
+ namespace.register Category do
152
+ menu :priority => 2
153
+ end
154
+ namespace.load_menu!
155
+ end
156
+ it "should have a custom priority of 2" do
157
+ namespace.menu["Categories"].priority.should == 2
158
+ end
159
+ end
160
+
161
+ describe "setting a condition for displaying" do
162
+ before do
163
+ namespace.register Category do
164
+ menu :if => proc { false }
165
+ end
166
+ namespace.load_menu!
167
+ end
168
+ it "should have a proc returning false" do
169
+ namespace.menu["Categories"].display_if_block.should be_instance_of(Proc)
170
+ namespace.menu["Categories"].display_if_block.call.should == false
171
+ end
172
+ end
173
+
174
+ describe "adding as a belongs to" do
175
+ context "when not optional" do
176
+ before do
177
+ namespace.register Post do
178
+ belongs_to :author
179
+ end
180
+ end
181
+ it "should not show up in the menu" do
182
+ namespace.menu["Posts"].should be_nil
183
+ end
184
+ end
185
+ context "when optional" do
186
+ before do
187
+ namespace.register Post do
188
+ belongs_to :author, :optional => true
189
+ end
190
+ end
191
+ it "should show up in the menu" do
192
+ namespace.menu["Posts"].should_not be_nil
193
+ end
194
+ end
195
+ end
196
+ end
197
+
198
+ describe "dashboard controller name" do
199
+ context "when namespaced" do
200
+ it "should be namespaced" do
201
+ namespace = ActiveAdmin::Namespace.new(application, :admin)
202
+ namespace.dashboard_controller_name.should == "Admin::DashboardController"
203
+ end
204
+ end
205
+ context "when not namespaced" do
206
+ it "should not be namespaced" do
207
+ namespace = ActiveAdmin::Namespace.new(application, :root)
208
+ namespace.dashboard_controller_name.should == "DashboardController"
209
+ end
210
+ end
211
+ end
212
+
213
+ end
214
+ end