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,30 @@
1
+ require 'spec_helper'
2
+
3
+ module ActiveAdmin
4
+ describe Resource, "Scopes" do
5
+
6
+ before { load_defaults! }
7
+
8
+ let(:application){ ActiveAdmin::Application.new }
9
+ let(:namespace){ Namespace.new(application, :admin) }
10
+
11
+ def config(options = {})
12
+ @config ||= Resource.new(namespace, Category, options)
13
+ end
14
+
15
+ describe "adding a scope" do
16
+
17
+ it "should add a scope" do
18
+ config.scope :published
19
+ config.scopes.first.should be_a(ActiveAdmin::Scope)
20
+ config.scopes.first.name.should == "Published"
21
+ end
22
+
23
+ it "should retrive a scope by its id" do
24
+ config.scope :published
25
+ config.get_scope_by_id(:published).name.should == "Published"
26
+ end
27
+
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,50 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveAdmin::Resource::Sidebars do
4
+
5
+ let(:resource) do
6
+ namespace = ActiveAdmin::Namespace.new(ActiveAdmin::Application.new, :admin)
7
+ namespace.register(Post)
8
+ end
9
+
10
+ let(:sidebar) { ActiveAdmin::SidebarSection.new(:help) }
11
+
12
+ describe "adding a new sidebar section" do
13
+
14
+ before do
15
+ resource.clear_sidebar_sections!
16
+ resource.sidebar_sections << sidebar
17
+ end
18
+
19
+ it "should add a sidebar section" do
20
+ resource.should have(1).sidebar_sections
21
+ end
22
+
23
+ end
24
+
25
+ describe "retrieving sections for a controller action" do
26
+
27
+ let(:only_index){ ActiveAdmin::SidebarSection.new(:help, :only => :index) }
28
+ let(:only_show){ ActiveAdmin::SidebarSection.new(:help, :only => :show) }
29
+
30
+ before do
31
+ resource.clear_sidebar_sections!
32
+ resource.sidebar_sections << only_index
33
+ resource.sidebar_sections << only_show
34
+ end
35
+
36
+ it "should only return the relevant action items" do
37
+ resource.should have(2).sidebar_sections
38
+ resource.sidebar_sections_for("index").should == [only_index]
39
+ end
40
+
41
+ end
42
+
43
+ describe "default sidebar sections" do
44
+
45
+ it "should have a filters section by default" do
46
+ resource.sidebar_sections.first.name.should == :filters
47
+ end
48
+
49
+ end
50
+ end
@@ -0,0 +1,34 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveAdmin::ResourceController::Collection do
4
+ let(:params) do
5
+ {}
6
+ end
7
+
8
+ let(:controller) do
9
+ rc = Admin::PostsController.new
10
+ rc.stub!(:params) do
11
+ params
12
+ end
13
+ rc
14
+ end
15
+
16
+ describe ActiveAdmin::ResourceController::Collection::Search do
17
+ let(:params){ {:q => {} }}
18
+ it "should call the metasearch method" do
19
+ chain = mock("ChainObj")
20
+ chain.should_receive(:metasearch).with(params[:q]).once.and_return(Post.search)
21
+ controller.send :search, chain
22
+ end
23
+ end
24
+
25
+ describe ActiveAdmin::ResourceController::Collection::Sorting do
26
+ let(:params){ {:order => "id_asc" }}
27
+ it "should prepend the table name" do
28
+ chain = mock("ChainObj")
29
+ chain.should_receive(:order).with("\"posts\".id asc").once.and_return(Post.search)
30
+ controller.send :sort_order, chain
31
+ end
32
+ end
33
+
34
+ end
@@ -0,0 +1,152 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveAdmin::ResourceController do
4
+
5
+ [:index, :show].each do |page|
6
+ describe "#{page} config" do
7
+ before do
8
+ Admin::PostsController.send(:"reset_#{page}_config!")
9
+ end
10
+
11
+ it "should be set" do
12
+ Admin::PostsController.send(:set_page_config, page, {})
13
+ Admin::PostsController.send(:"#{page}_config").should be_an_instance_of(ActiveAdmin::PageConfig)
14
+ end
15
+
16
+ it "should store the block" do
17
+ block = Proc.new {}
18
+ Admin::PostsController.send(:set_page_config, page, {}, &block)
19
+ Admin::PostsController.send(:"#{page}_config").block.should == block
20
+ end
21
+
22
+ it "should be reset" do
23
+ Admin::PostsController.send(:"reset_#{page}_config!")
24
+ Admin::PostsController.send(:"#{page}_config").should == nil
25
+ end
26
+ end
27
+ end
28
+
29
+ describe "setting the current tab" do
30
+ let(:controller) { ActiveAdmin::ResourceController.new }
31
+ before do
32
+ controller.stub!(:active_admin_config => resource, :parent? => true)
33
+ controller.send :set_current_tab # Run the before filter
34
+ end
35
+ subject{ controller.instance_variable_get(:@current_tab) }
36
+
37
+ context "when menu item name is 'Resources' without a parent menu item" do
38
+ let(:resource){ mock(:menu_item_name => "Resources", :parent_menu_item_name => nil, :belongs_to? => false) }
39
+ it { should == "Resources" }
40
+ end
41
+
42
+ context "when there is a parent menu item of 'Admin'" do
43
+ let(:resource){ mock(:parent_menu_item_name => "Admin", :menu_item_name => "Resources", :belongs_to? => false) }
44
+ it { should == "Admin/Resources" }
45
+ end
46
+ end
47
+
48
+ describe "callbacks" do
49
+ let(:application){ ::ActiveAdmin::Application.new }
50
+ let(:namespace){ ActiveAdmin::Namespace.new(application, :admin) }
51
+
52
+ before :all do
53
+ namespace.register Post do
54
+ after_build :call_after_build
55
+ before_save :call_before_save
56
+ after_save :call_after_save
57
+ before_create :call_before_create
58
+ after_create :call_after_create
59
+ before_update :call_before_update
60
+ after_update :call_after_update
61
+ before_destroy :call_before_destroy
62
+ after_destroy :call_after_destroy
63
+
64
+ controller do
65
+ def call_after_build(obj); end
66
+ def call_before_save(obj); end
67
+ def call_after_save(obj); end
68
+ def call_before_create(obj); end
69
+ def call_after_create(obj); end
70
+ def call_before_update(obj); end
71
+ def call_after_update(obj); end
72
+ def call_before_destroy(obj); end
73
+ def call_after_destroy(obj); end
74
+ end
75
+ end
76
+ end
77
+
78
+ describe "performing create" do
79
+ let(:controller){ Admin::PostsController.new }
80
+ let(:resource){ mock("Resource", :save => true) }
81
+
82
+ before do
83
+ resource.should_receive(:save)
84
+ end
85
+
86
+ it "should call the before create callback" do
87
+ controller.should_receive(:call_before_create).with(resource)
88
+ controller.send :create_resource, resource
89
+ end
90
+ it "should call the before save callback" do
91
+ controller.should_receive(:call_before_save).with(resource)
92
+ controller.send :create_resource, resource
93
+ end
94
+ it "should call the after save callback" do
95
+ controller.should_receive(:call_after_save).with(resource)
96
+ controller.send :create_resource, resource
97
+ end
98
+ it "should call the after create callback" do
99
+ controller.should_receive(:call_after_create).with(resource)
100
+ controller.send :create_resource, resource
101
+ end
102
+ end
103
+
104
+ describe "performing update" do
105
+ let(:controller){ Admin::PostsController.new }
106
+ let(:resource){ mock("Resource", :attributes= => true, :save => true) }
107
+ let(:attributes){ {} }
108
+
109
+ before do
110
+ resource.should_receive(:attributes=).with(attributes)
111
+ resource.should_receive(:save)
112
+ end
113
+
114
+ it "should call the before update callback" do
115
+ controller.should_receive(:call_before_update).with(resource)
116
+ controller.send :update_resource, resource, attributes
117
+ end
118
+ it "should call the before save callback" do
119
+ controller.should_receive(:call_before_save).with(resource)
120
+ controller.send :update_resource, resource, attributes
121
+ end
122
+ it "should call the after save callback" do
123
+ controller.should_receive(:call_after_save).with(resource)
124
+ controller.send :update_resource, resource, attributes
125
+ end
126
+ it "should call the after create callback" do
127
+ controller.should_receive(:call_after_update).with(resource)
128
+ controller.send :update_resource, resource, attributes
129
+ end
130
+ end
131
+
132
+ describe "performing destroy" do
133
+ let(:controller){ Admin::PostsController.new }
134
+ let(:resource){ mock("Resource", :destroy => true) }
135
+
136
+ before do
137
+ resource.should_receive(:destroy)
138
+ end
139
+
140
+ it "should call the before destroy callback" do
141
+ controller.should_receive(:call_before_destroy).with(resource)
142
+ controller.send :destroy_resource, resource
143
+ end
144
+
145
+ it "should call the after destroy callback" do
146
+ controller.should_receive(:call_after_destroy).with(resource)
147
+ controller.send :destroy_resource, resource
148
+ end
149
+ end
150
+ end
151
+
152
+ end
@@ -0,0 +1,260 @@
1
+ require 'spec_helper'
2
+
3
+ module ActiveAdmin
4
+ describe Resource do
5
+
6
+ before { load_defaults! }
7
+
8
+ let(:application){ ActiveAdmin::Application.new }
9
+ let(:namespace){ Namespace.new(application, :admin) }
10
+
11
+ def config(options = {})
12
+ @config ||= Resource.new(namespace, Category, options)
13
+ end
14
+
15
+ describe "#resource_table_name" do
16
+ it "should return the resource's table name" do
17
+ config.resource_table_name.should == '"categories"'
18
+ end
19
+ context "when the :as option is given" do
20
+ it "should return the resource's table name" do
21
+ config(:as => "My Category").resource_table_name.should == '"categories"'
22
+ end
23
+ end
24
+ end
25
+
26
+ describe "namespace" do
27
+ it "should return the namespace" do
28
+ config.namespace.should == namespace
29
+ end
30
+ end
31
+
32
+ describe "controller name" do
33
+ it "should return a namespaced controller name" do
34
+ config.controller_name.should == "Admin::CategoriesController"
35
+ end
36
+ context "when non namespaced controller" do
37
+ let(:namespace){ ActiveAdmin::Namespace.new(application, :root) }
38
+ it "should return a non namespaced controller name" do
39
+ config.controller_name.should == "CategoriesController"
40
+ end
41
+ end
42
+ end
43
+
44
+ describe "#include_in_menu?" do
45
+ let(:namespace){ ActiveAdmin::Namespace.new(application, :admin) }
46
+ subject{ resource }
47
+
48
+ context "when regular resource" do
49
+ let(:resource){ namespace.register(Post) }
50
+ it { should be_include_in_menu }
51
+ end
52
+ context "when belongs to" do
53
+ let(:resource){ namespace.register(Post){ belongs_to :author } }
54
+ it { should_not be_include_in_menu }
55
+ end
56
+ context "when belongs to optional" do
57
+ let(:resource){ namespace.register(Post){ belongs_to :author, :optional => true} }
58
+ it { should be_include_in_menu }
59
+ end
60
+ context "when menu set to false" do
61
+ let(:resource){ namespace.register(Post){ menu false } }
62
+ it { should_not be_include_in_menu }
63
+ end
64
+ end
65
+
66
+ describe "menu item name" do
67
+ it "should be the resource name when not set" do
68
+ config.menu_item_name.should == "Categories"
69
+ end
70
+ it "should be settable" do
71
+ config.menu :label => "My Label"
72
+ config.menu_item_name.should == "My Label"
73
+ end
74
+ end
75
+
76
+ describe "parent menu item name" do
77
+ it "should be nil when not set" do
78
+ config.parent_menu_item_name.should == nil
79
+ end
80
+ it "should return the name if set" do
81
+ config.tap do |c|
82
+ c.menu :parent => "Blog"
83
+ end.parent_menu_item_name.should == "Blog"
84
+ end
85
+ end
86
+
87
+ describe "menu item priority" do
88
+ it "should be 10 when not set" do
89
+ config.menu_item_priority.should == 10
90
+ end
91
+ it "should be settable" do
92
+ config.menu :priority => 2
93
+ config.menu_item_priority.should == 2
94
+ end
95
+ end
96
+
97
+ describe "menu item display if" do
98
+ it "should be a proc always returning true if not set" do
99
+ config.menu_item_display_if.should be_instance_of(Proc)
100
+ config.menu_item_display_if.call.should == true
101
+ end
102
+ it "should be settable" do
103
+ config.menu :if => proc { false }
104
+ config.menu_item_display_if.call.should == false
105
+ end
106
+ end
107
+
108
+ describe "route names" do
109
+ let(:config){ application.register Category }
110
+ it "should return the route prefix" do
111
+ config.route_prefix.should == "admin"
112
+ end
113
+ it "should return the route collection path" do
114
+ config.route_collection_path.should == :admin_categories_path
115
+ end
116
+
117
+ context "when in the root namespace" do
118
+ let(:config){ application.register Category, :namespace => false}
119
+ it "should have a nil route_prefix" do
120
+ config.route_prefix.should == nil
121
+ end
122
+ end
123
+ end
124
+
125
+ describe "page configs" do
126
+ context "when initialized" do
127
+ it "should be empty" do
128
+ config.page_configs.should == {}
129
+ end
130
+ end
131
+ it "should be set-able" do
132
+ config.page_configs[:index] = "hello world"
133
+ config.page_configs[:index].should == "hello world"
134
+ end
135
+ end
136
+
137
+ describe "scoping" do
138
+ context "when using a block" do
139
+ before do
140
+ @resource = application.register Category do
141
+ scope_to do
142
+ "scoped"
143
+ end
144
+ end
145
+ end
146
+ it "should call the proc for the begin of association chain" do
147
+ begin_of_association_chain = @resource.controller.new.send(:begin_of_association_chain)
148
+ begin_of_association_chain.should == "scoped"
149
+ end
150
+ end
151
+
152
+ context "when using a symbol" do
153
+ before do
154
+ @resource = application.register Category do
155
+ scope_to :current_user
156
+ end
157
+ end
158
+ it "should call the method for the begin of association chain" do
159
+ controller = @resource.controller.new
160
+ controller.should_receive(:current_user).and_return(true)
161
+ begin_of_association_chain = controller.send(:begin_of_association_chain)
162
+ begin_of_association_chain.should == true
163
+ end
164
+ end
165
+
166
+ context "when not using a block or symbol" do
167
+ before do
168
+ @resource = application.register Category do
169
+ scope_to "Some string"
170
+ end
171
+ end
172
+ it "should raise and exception" do
173
+ lambda {
174
+ @resource.controller.new.send(:begin_of_association_chain)
175
+ }.should raise_error(ArgumentError)
176
+ end
177
+ end
178
+
179
+ describe "getting the method for the association chain" do
180
+ context "when a simple registration" do
181
+ before do
182
+ @resource = application.register Category do
183
+ scope_to :current_user
184
+ end
185
+ end
186
+ it "should return the pluralized collection name" do
187
+ @resource.controller.new.send(:method_for_association_chain).should == :categories
188
+ end
189
+ end
190
+ context "when passing in the method as an option" do
191
+ before do
192
+ @resource = application.register Category do
193
+ scope_to :current_user, :association_method => :blog_categories
194
+ end
195
+ end
196
+ it "should return the method from the option" do
197
+ @resource.controller.new.send(:method_for_association_chain).should == :blog_categories
198
+ end
199
+ end
200
+ end
201
+ end
202
+
203
+
204
+ describe "sort order" do
205
+
206
+ context "when resource class responds to primary_key" do
207
+ it "should sort by primary key desc by default" do
208
+ mock_resource = mock
209
+ mock_resource.should_receive(:primary_key).and_return("pk")
210
+ config = Resource.new(namespace, mock_resource)
211
+ config.sort_order.should == "pk_desc"
212
+ end
213
+ end
214
+
215
+ context "when resource class does not respond to primary_key" do
216
+ it "should default to id" do
217
+ mock_resource = mock
218
+ config = Resource.new(namespace, mock_resource)
219
+ config.sort_order.should == "id_desc"
220
+ end
221
+ end
222
+
223
+ it "should be set-able" do
224
+ config.sort_order = "task_id_desc"
225
+ config.sort_order.should == "task_id_desc"
226
+ end
227
+
228
+ end
229
+
230
+ describe "adding a scope" do
231
+
232
+ it "should add a scope" do
233
+ config.scope :published
234
+ config.scopes.first.should be_a(ActiveAdmin::Scope)
235
+ config.scopes.first.name.should == "Published"
236
+ end
237
+
238
+ it "should retrive a scope by its id" do
239
+ config.scope :published
240
+ config.get_scope_by_id(:published).name.should == "Published"
241
+ end
242
+ end
243
+
244
+ describe "#csv_builder" do
245
+ context "when no csv builder set" do
246
+ it "should return a default column builder with id and content columns" do
247
+ config.csv_builder.columns.size.should == Category.content_columns.size + 1
248
+ end
249
+ end
250
+
251
+ context "when csv builder set" do
252
+ it "shuld return the csv_builder we set" do
253
+ csv_builder = CSVBuilder.new
254
+ config.csv_builder = csv_builder
255
+ config.csv_builder.should == csv_builder
256
+ end
257
+ end
258
+ end
259
+ end
260
+ end