activeadmin 0.3.4 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of activeadmin might be problematic. Click here for more details.

Files changed (244) hide show
  1. data/.gitignore +1 -0
  2. data/.travis.yml +3 -0
  3. data/CHANGELOG.md +164 -5
  4. data/CONTRIBUTING.md +113 -0
  5. data/Gemfile +7 -9
  6. data/LICENSE +1 -1
  7. data/README.rdoc +19 -20
  8. data/activeadmin.gemspec +4 -2
  9. data/app/assets/javascripts/active_admin/application.js +9 -0
  10. data/app/assets/javascripts/active_admin/base.js +4 -12
  11. data/app/assets/stylesheets/active_admin/_base.css.scss +17 -341
  12. data/app/assets/stylesheets/active_admin/_forms.css.scss +13 -7
  13. data/app/assets/stylesheets/active_admin/_header.css.scss +23 -4
  14. data/app/assets/stylesheets/active_admin/components/_blank_slates.scss +31 -0
  15. data/app/assets/stylesheets/active_admin/components/_breadcrumbs.scss +20 -0
  16. data/app/assets/stylesheets/active_admin/components/_buttons.scss +12 -0
  17. data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +2 -0
  18. data/app/assets/stylesheets/active_admin/components/_grid.scss +9 -0
  19. data/app/assets/stylesheets/active_admin/components/_links.scss +5 -0
  20. data/app/assets/stylesheets/active_admin/components/_pagination.scss +34 -0
  21. data/app/assets/stylesheets/active_admin/components/_panels.scss +6 -0
  22. data/app/assets/stylesheets/active_admin/components/_scopes.scss +10 -0
  23. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +12 -0
  24. data/app/assets/stylesheets/active_admin/components/_table_tools.css.scss +101 -0
  25. data/app/assets/stylesheets/active_admin/components/_tables.css.scss +43 -2
  26. data/app/assets/stylesheets/active_admin/mixins/_all.css.scss +2 -1
  27. data/app/assets/stylesheets/active_admin/mixins/_buttons.css.scss +50 -13
  28. data/app/assets/stylesheets/active_admin/mixins/_gradients.css.scss +9 -1
  29. data/app/assets/stylesheets/active_admin/mixins/_sections.css.scss +7 -5
  30. data/app/assets/stylesheets/active_admin/mixins/_shadows.css.scss +1 -0
  31. data/app/assets/stylesheets/active_admin/mixins/_typography.scss +3 -0
  32. data/app/assets/stylesheets/active_admin/mixins/_utilities.scss +9 -0
  33. data/app/assets/stylesheets/active_admin/mixins/_variables.css.scss +1 -0
  34. data/app/assets/stylesheets/active_admin/pages/_dashboard.scss +5 -0
  35. data/app/assets/stylesheets/active_admin/pages/_logged_out.scss +44 -0
  36. data/app/assets/stylesheets/active_admin/structure/_footer.scss +14 -0
  37. data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +26 -0
  38. data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +44 -0
  39. data/app/views/active_admin/devise/passwords/edit.html.erb +1 -1
  40. data/app/views/active_admin/devise/passwords/new.html.erb +1 -1
  41. data/app/views/active_admin/devise/sessions/new.html.erb +1 -1
  42. data/app/views/active_admin/devise/shared/_links.erb +1 -1
  43. data/app/views/active_admin/devise/unlocks/new.html.erb +1 -1
  44. data/app/views/active_admin/page/index.html.arb +1 -0
  45. data/app/views/layouts/active_admin_logged_out.html.erb +2 -2
  46. data/cucumber.yml +3 -2
  47. data/docs/1-general-configuration.md +46 -10
  48. data/docs/6-show-screens.md +7 -0
  49. data/docs/8-custom-actions.md +12 -2
  50. data/docs/9-custom-pages.md +84 -0
  51. data/features/belongs_to.feature +27 -0
  52. data/features/comments/commenting.feature +3 -2
  53. data/features/dashboard.feature +18 -0
  54. data/features/development_reloading.feature +43 -0
  55. data/features/index/filter_with_check_boxes.feature +25 -0
  56. data/features/index/index_as_table.feature +14 -0
  57. data/features/index/index_scopes.feature +59 -0
  58. data/features/index/pagination.feature +19 -1
  59. data/features/menu.feature +22 -2
  60. data/features/registering_assets.feature +2 -2
  61. data/features/registering_pages.feature +66 -0
  62. data/features/specifying_actions.feature +5 -0
  63. data/features/step_definitions/action_item_steps.rb +2 -6
  64. data/features/step_definitions/action_link_steps.rb +7 -0
  65. data/features/step_definitions/additional_web_steps.rb +11 -3
  66. data/features/step_definitions/asset_steps.rb +5 -1
  67. data/features/step_definitions/breadcrumb_steps.rb +5 -0
  68. data/features/step_definitions/comment_steps.rb +3 -3
  69. data/features/step_definitions/configuration_steps.rb +69 -13
  70. data/features/step_definitions/dashboard_steps.rb +7 -3
  71. data/features/step_definitions/factory_steps.rb +9 -2
  72. data/features/step_definitions/flash_steps.rb +9 -1
  73. data/features/step_definitions/format_steps.rb +9 -1
  74. data/features/step_definitions/index_scope_steps.rb +18 -6
  75. data/features/step_definitions/member_link_steps.rb +7 -0
  76. data/features/step_definitions/pagination_steps.rb +2 -2
  77. data/features/step_definitions/site_title_steps.rb +15 -0
  78. data/features/step_definitions/tab_steps.rb +1 -1
  79. data/features/step_definitions/user_steps.rb +1 -1
  80. data/features/step_definitions/web_steps.rb +4 -4
  81. data/features/support/paths.rb +6 -0
  82. data/features/users/logging_out.feature +11 -0
  83. data/lib/active_admin.rb +26 -10
  84. data/lib/active_admin/application.rb +64 -22
  85. data/lib/active_admin/arbre.rb +0 -1
  86. data/lib/active_admin/arbre/builder.rb +8 -5
  87. data/lib/active_admin/arbre/context.rb +1 -1
  88. data/lib/active_admin/arbre/html/attributes.rb +1 -1
  89. data/lib/active_admin/arbre/html/class_list.rb +0 -4
  90. data/lib/active_admin/arbre/html/collection.rb +2 -2
  91. data/lib/active_admin/arbre/html/document.rb +1 -1
  92. data/lib/active_admin/arbre/html/element.rb +19 -9
  93. data/lib/active_admin/arbre/html/tag.rb +3 -3
  94. data/lib/active_admin/arbre/html/text_node.rb +2 -2
  95. data/lib/active_admin/asset_registration.rb +15 -2
  96. data/lib/active_admin/base_controller.rb +61 -0
  97. data/lib/active_admin/{resource_controller → base_controller}/menu.rb +1 -1
  98. data/lib/active_admin/callbacks.rb +16 -18
  99. data/lib/active_admin/comments.rb +48 -54
  100. data/lib/active_admin/comments/comment.rb +13 -2
  101. data/lib/active_admin/comments/namespace_helper.rb +1 -1
  102. data/lib/active_admin/comments/views/active_admin_comments.rb +7 -3
  103. data/lib/active_admin/dashboards.rb +4 -0
  104. data/lib/active_admin/dashboards/dashboard_controller.rb +21 -5
  105. data/lib/active_admin/dsl.rb +6 -159
  106. data/lib/active_admin/event.rb +5 -3
  107. data/lib/active_admin/filter_form_builder.rb +53 -0
  108. data/lib/active_admin/form_builder.rb +25 -19
  109. data/lib/active_admin/helpers/settings.rb +6 -10
  110. data/lib/active_admin/inputs.rb +14 -0
  111. data/lib/active_admin/inputs/datepicker_input.rb +11 -0
  112. data/lib/active_admin/inputs/filter_base.rb +46 -0
  113. data/lib/active_admin/inputs/filter_check_boxes_input.rb +40 -0
  114. data/lib/active_admin/inputs/filter_date_range_input.rb +34 -0
  115. data/lib/active_admin/inputs/filter_numeric_input.rb +55 -0
  116. data/lib/active_admin/inputs/filter_select_input.rb +23 -0
  117. data/lib/active_admin/inputs/filter_string_input.rb +22 -0
  118. data/lib/active_admin/locales/ca.yml +44 -0
  119. data/lib/active_admin/locales/cs.yml +14 -10
  120. data/lib/active_admin/locales/de.yml +44 -0
  121. data/lib/active_admin/locales/en.yml +5 -0
  122. data/lib/active_admin/locales/hr.yml +40 -0
  123. data/lib/active_admin/locales/hu.yml +45 -0
  124. data/lib/active_admin/locales/it.yml +11 -6
  125. data/lib/active_admin/locales/ko.yml +40 -0
  126. data/lib/active_admin/locales/lv.yml +43 -0
  127. data/lib/active_admin/locales/nl.yml +40 -0
  128. data/lib/active_admin/locales/no-NB.yml +40 -0
  129. data/lib/active_admin/locales/pl.yml +7 -1
  130. data/lib/active_admin/locales/pt-BR.yml +6 -2
  131. data/lib/active_admin/menu_item.rb +25 -17
  132. data/lib/active_admin/namespace.rb +48 -33
  133. data/lib/active_admin/page.rb +65 -0
  134. data/lib/active_admin/page_controller.rb +15 -0
  135. data/lib/active_admin/page_dsl.rb +21 -0
  136. data/lib/active_admin/page_presenter.rb +30 -0
  137. data/lib/active_admin/reloader.rb +109 -42
  138. data/lib/active_admin/resource.rb +38 -44
  139. data/lib/active_admin/resource/action_items.rb +5 -0
  140. data/lib/active_admin/resource/belongs_to.rb +4 -2
  141. data/lib/active_admin/resource/controllers.rb +35 -0
  142. data/lib/active_admin/resource/menu.rb +1 -2
  143. data/lib/active_admin/resource/naming.rb +53 -31
  144. data/lib/active_admin/resource/page_presenters.rb +28 -0
  145. data/lib/active_admin/resource/scopes.rb +16 -3
  146. data/lib/active_admin/resource/sidebars.rb +4 -0
  147. data/lib/active_admin/resource_collection.rb +88 -0
  148. data/lib/active_admin/resource_controller.rb +18 -54
  149. data/lib/active_admin/resource_controller/action_builder.rb +1 -1
  150. data/lib/active_admin/resource_controller/actions.rb +8 -8
  151. data/lib/active_admin/resource_controller/callbacks.rb +1 -1
  152. data/lib/active_admin/resource_controller/collection.rb +8 -4
  153. data/lib/active_admin/resource_controller/filters.rb +1 -1
  154. data/lib/active_admin/resource_controller/resource_class_methods.rb +24 -0
  155. data/lib/active_admin/resource_controller/scoping.rb +1 -1
  156. data/lib/active_admin/resource_controller/sidebars.rb +1 -1
  157. data/lib/active_admin/resource_dsl.rb +157 -0
  158. data/lib/active_admin/router.rb +21 -14
  159. data/lib/active_admin/scope.rb +15 -3
  160. data/lib/active_admin/version.rb +1 -1
  161. data/lib/active_admin/view_factory.rb +4 -3
  162. data/lib/active_admin/view_helpers/auto_link_helper.rb +1 -10
  163. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +25 -21
  164. data/lib/active_admin/view_helpers/filter_form_helper.rb +0 -150
  165. data/lib/active_admin/views/components/attributes_table.rb +1 -1
  166. data/lib/active_admin/views/components/columns.rb +4 -4
  167. data/lib/active_admin/views/components/paginated_collection.rb +42 -13
  168. data/lib/active_admin/views/components/panel.rb +8 -0
  169. data/lib/active_admin/views/components/scopes.rb +24 -18
  170. data/lib/active_admin/views/components/status_tag.rb +6 -5
  171. data/lib/active_admin/views/components/table_for.rb +6 -2
  172. data/lib/active_admin/views/header_renderer.rb +31 -12
  173. data/lib/active_admin/views/index_as_block.rb +2 -2
  174. data/lib/active_admin/views/index_as_blog.rb +3 -3
  175. data/lib/active_admin/views/index_as_grid.rb +4 -4
  176. data/lib/active_admin/views/index_as_table.rb +13 -6
  177. data/lib/active_admin/views/pages/base.rb +4 -4
  178. data/lib/active_admin/views/pages/form.rb +49 -0
  179. data/lib/active_admin/views/pages/index.rb +18 -6
  180. data/lib/active_admin/views/pages/page.rb +24 -0
  181. data/lib/active_admin/views/pages/show.rb +1 -1
  182. data/lib/generators/active_admin/assets/assets_generator.rb +19 -1
  183. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +38 -12
  184. data/lib/generators/active_admin/install/templates/dashboards.rb +6 -0
  185. data/script/use_rails +14 -7
  186. data/spec/spec_helper.rb +9 -14
  187. data/spec/spec_helper_without_rails.rb +10 -0
  188. data/spec/support/detect_rails_version.rb +22 -3
  189. data/spec/support/integration_example_group.rb +5 -7
  190. data/spec/support/rails_template.rb +11 -0
  191. data/spec/support/rails_template_with_data.rb +25 -0
  192. data/spec/support/templates/cucumber_with_reloading.rb +5 -0
  193. data/spec/unit/active_admin_spec.rb +8 -0
  194. data/spec/unit/application_spec.rb +48 -2
  195. data/spec/unit/arbre/context_spec.rb +1 -1
  196. data/spec/unit/arbre/html/element_finder_methods_spec.rb +58 -2
  197. data/spec/unit/arbre/html/element_spec.rb +18 -5
  198. data/spec/unit/arbre/html/tag_attributes_spec.rb +3 -3
  199. data/spec/unit/arbre/html/tag_spec.rb +1 -1
  200. data/spec/unit/arbre/html_spec.rb +32 -22
  201. data/spec/unit/asset_registration_spec.rb +9 -3
  202. data/spec/unit/auto_link_spec.rb +2 -2
  203. data/spec/unit/base_controller_shared_examples.rb +28 -0
  204. data/spec/unit/base_controller_spec.rb +8 -0
  205. data/spec/unit/belongs_to_spec.rb +30 -33
  206. data/spec/unit/comments_spec.rb +45 -15
  207. data/spec/unit/config_shared_examples.rb +119 -0
  208. data/spec/unit/dashboard_controller_spec.rb +44 -0
  209. data/spec/unit/event_spec.rb +6 -0
  210. data/spec/unit/filter_form_builder_spec.rb +9 -0
  211. data/spec/unit/form_builder_spec.rb +8 -14
  212. data/spec/unit/menu_item_spec.rb +25 -20
  213. data/spec/unit/namespace/register_page_spec.rb +102 -0
  214. data/spec/unit/namespace/register_resource_spec.rb +188 -0
  215. data/spec/unit/namespace_spec.rb +11 -183
  216. data/spec/unit/page_controller_spec.rb +8 -0
  217. data/spec/unit/page_spec.rb +60 -0
  218. data/spec/unit/reloader_spec.rb +82 -38
  219. data/spec/unit/resource/menu_spec.rb +1 -51
  220. data/spec/unit/resource/naming_spec.rb +25 -20
  221. data/spec/unit/resource/page_presenters_spec.rb +32 -0
  222. data/spec/unit/resource/scopes_spec.rb +13 -0
  223. data/spec/unit/resource_collection_spec.rb +101 -0
  224. data/spec/unit/resource_controller_spec.rb +40 -32
  225. data/spec/unit/{registration_spec.rb → resource_registration_spec.rb} +0 -0
  226. data/spec/unit/resource_spec.rb +8 -24
  227. data/spec/unit/routing_spec.rb +50 -1
  228. data/spec/unit/scope_spec.rb +18 -4
  229. data/spec/unit/views/components/paginated_collection_spec.rb +163 -0
  230. data/spec/unit/views/components/panel_spec.rb +9 -0
  231. data/spec/unit/views/components/status_tag_spec.rb +9 -0
  232. data/spec/unit/views/tabbed_navigation_spec.rb +2 -1
  233. data/tasks/test.rake +44 -26
  234. metadata +176 -69
  235. data/app/assets/javascripts/active_admin/vendor.js +0 -382
  236. data/lib/active_admin/arbre/core_extensions.rb +0 -5
  237. data/lib/active_admin/comments/configuration.rb +0 -18
  238. data/lib/active_admin/page_config.rb +0 -15
  239. data/lib/active_admin/resource_controller/form.rb +0 -42
  240. data/lib/active_admin/resource_controller/page_configurations.rb +0 -53
  241. data/lib/active_admin/views/pages/edit.rb +0 -28
  242. data/lib/active_admin/views/pages/new.rb +0 -28
  243. data/lib/generators/active_admin/assets/templates/3.0/active_admin.js +0 -427
  244. data/spec/integration/belongs_to_spec.rb +0 -42
@@ -15,7 +15,7 @@ module ActiveAdmin
15
15
 
16
16
  describe "underscored resource name" do
17
17
  context "when class" do
18
- it "should be the underscored singular resource name" do
18
+ it "should be the underscored safe resource name" do
19
19
  config.underscored_resource_name.should == "category"
20
20
  end
21
21
  end
@@ -26,48 +26,53 @@ module ActiveAdmin
26
26
  end
27
27
  end
28
28
  context "when you pass the 'as' option" do
29
- it "should underscore the passed through string and singulralize" do
30
- config(:as => "Blog Categories").underscored_resource_name.should == "blog_category"
29
+ it "should underscore the passed through string" do
30
+ config(:as => "Blog Category").underscored_resource_name.should == "blog_category"
31
31
  end
32
32
  end
33
33
  end
34
34
 
35
35
  describe "camelized resource name" do
36
36
  it "should return a camelized version of the underscored resource name" do
37
- config(:as => "Blog Categories").camelized_resource_name.should == "BlogCategory"
37
+ config(:as => "Blog category").camelized_resource_name.should == "BlogCategory"
38
38
  end
39
39
  end
40
40
 
41
- describe "plural underscored resource name" do
42
- before(:all) do
43
- class ::CandyCane; end
44
- @config = Resource.new(namespace, CandyCane, {})
45
- end
46
-
47
- it "should return an underscored and pluralized resource name" do
48
- config.plural_underscored_resource_name.should == "candy_canes"
49
- end
50
- end
51
-
52
41
  describe "resource name" do
53
42
  it "should return a pretty name" do
54
43
  config.resource_name.should == "Category"
55
44
  end
45
+
56
46
  it "should return the plural version" do
57
47
  config.plural_resource_name.should == "Categories"
58
48
  end
49
+
59
50
  context "when the :as option is given" do
60
51
  it "should return the custom name" do
61
52
  config(:as => "My Category").resource_name.should == "My Category"
62
53
  end
63
54
  end
64
- context "I18n" do
65
- before do
66
- I18n.stub(:translate) { 'Categorie' }
55
+
56
+ describe "I18n integration" do
57
+ describe "singular name" do
58
+ it "should return the titleized model_name.human" do
59
+ Category.model_name.should_receive(:human).and_return "Da category"
60
+
61
+ config.resource_name.should == "Da Category"
62
+ end
67
63
  end
68
- it "should return the plural version defined in the i18n if available" do
69
- config.plural_resource_name.should == "Categorie"
64
+
65
+ describe "plural name" do
66
+ it "should return the titleized plural version defined by i18n if available" do
67
+ Category.model_name.should_receive(:underscore).and_return "category"
68
+ Category.model_name.should_not_receive(:i18n_key) # Not implemented in Rails 3.0.0
69
+ I18n.should_receive(:translate!).
70
+ with("activerecord.models.category.other").
71
+ and_return("Da categories")
72
+ config.plural_resource_name.should == "Da Categories"
73
+ end
70
74
  end
75
+
71
76
  end
72
77
  end
73
78
 
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveAdmin::Resource::PagePresenters do
4
+
5
+ let(:namespace){ ActiveAdmin::Namespace.new(ActiveAdmin::Application.new, :admin) }
6
+ let(:resource){ namespace.register(Post) }
7
+
8
+ it "should have an empty set of configs on initialize" do
9
+ resource.page_presenters.should == {}
10
+ end
11
+
12
+ it "should add a page presenter" do
13
+ page_presenter = ActiveAdmin::PagePresenter.new
14
+ resource.set_page_presenter(:index, page_presenter)
15
+ resource.page_presenters[:index].should == page_presenter
16
+ end
17
+
18
+ describe "#get_page_presenter" do
19
+
20
+ it "should return a page config when set" do
21
+ page_presenter = ActiveAdmin::PagePresenter.new
22
+ resource.set_page_presenter(:index, page_presenter)
23
+ resource.get_page_presenter(:index).should == page_presenter
24
+ end
25
+
26
+ it "should return nil when no page config set" do
27
+ resource.get_page_presenter(:index).should == nil
28
+ end
29
+
30
+ end
31
+
32
+ end
@@ -25,6 +25,19 @@ module ActiveAdmin
25
25
  config.get_scope_by_id(:published).name.should == "Published"
26
26
  end
27
27
 
28
+ it "should not add a scope with the same name twice" do
29
+ config.scope :published
30
+ config.scope :published
31
+ config.scopes.size.should == 1
32
+ end
33
+
34
+ it "should update a scope with the same id" do
35
+ config.scope :published
36
+ config.scopes.first.scope_block.should be_nil
37
+ config.scope(:published){ }
38
+ config.scopes.first.scope_block.should_not be_nil
39
+ end
40
+
28
41
  end
29
42
  end
30
43
  end
@@ -0,0 +1,101 @@
1
+ require 'spec_helper'
2
+ require 'active_admin/resource_collection'
3
+
4
+ include ActiveAdmin
5
+
6
+ describe ActiveAdmin::ResourceCollection do
7
+
8
+ let(:collection){ ResourceCollection.new }
9
+
10
+ it "should have no resources when new" do
11
+ collection.resources.should == []
12
+ end
13
+
14
+ it "should be enumerable" do
15
+ resource = mock(:resource_key => "MyResource")
16
+ collection.add(resource)
17
+ collection.each{|r| r.should == resource }
18
+ end
19
+
20
+ it "should return the available keys" do
21
+ resource = mock(:resource_key => "MyResource")
22
+ collection.add resource
23
+ collection.keys.should == [resource.resource_key]
24
+ end
25
+
26
+ describe "adding a new resource" do
27
+ let(:resource){ mock(:resource_key => "MyResource") }
28
+
29
+ it "should return the resource" do
30
+ collection.add(resource).should == resource
31
+ end
32
+
33
+ it "should add a new resource" do
34
+ collection.add(resource)
35
+ collection.resources.should == [resource]
36
+ end
37
+
38
+ it "should be available by name" do
39
+ collection.add(resource)
40
+ collection.find_by_key(resource.resource_key).should == resource
41
+ end
42
+ end
43
+
44
+ describe "adding a new resource when the key already exists" do
45
+ let(:stored_resource){ mock(:resource_key => "MyResource") }
46
+ let(:resource){ mock(:resource_key => "MyResource") }
47
+
48
+ before do
49
+ collection.add(stored_resource)
50
+ end
51
+
52
+ it "should return the original resource" do
53
+ collection.add(resource).should == stored_resource
54
+ end
55
+
56
+ it "should not add a new resource" do
57
+ collection.add(resource)
58
+ collection.resources.should == [stored_resource]
59
+ end
60
+ end
61
+
62
+ describe "adding an existing resource key with a different resource class" do
63
+ let(:stored_resource){ mock(:resource_key => "MyResource", :resource_class => mock) }
64
+ let(:resource){ mock(:resource_key => "MyResource", :resource_class => mock) }
65
+
66
+ it "should raise a ActiveAdmin::ResourceMismatchError" do
67
+ collection.add(stored_resource)
68
+ lambda {
69
+ collection.add(resource)
70
+ }.should raise_error(ActiveAdmin::ResourceMismatchError)
71
+ end
72
+
73
+ end
74
+
75
+ describe "#find_by_resource_class" do
76
+
77
+ let(:base_class){ mock(:to_s => "BaseClass")}
78
+ let(:resource_from_base_class){ mock(:resource_key => "MyBaseClassResource", :resource_class => base_class )}
79
+ let(:resource_class){ mock(:base_class => base_class, :to_s => "ResourceClass") }
80
+ let(:resource){ mock(:resource_key => "MyResource", :resource_class => resource_class) }
81
+
82
+ it "should find a resource when it's in the collection" do
83
+ collection.add resource
84
+ collection.find_by_resource_class(resource_class).should == resource
85
+ end
86
+
87
+ it "should return nil when the resource class is not in the collection" do
88
+ collection.find_by_resource_class(resource_class).should == nil
89
+ end
90
+
91
+ it "should return the resource when it and it's base class is in the collection" do
92
+ collection.add resource_from_base_class
93
+ collection.find_by_resource_class(resource_class).should == resource_from_base_class
94
+ end
95
+
96
+ it "should return nil the resource_class does not repond to base_class and it's not in the collection" do
97
+ collection.find_by_resource_class(mock).should == nil
98
+ end
99
+ end
100
+
101
+ end
@@ -1,47 +1,55 @@
1
1
  require 'spec_helper'
2
+ require File.expand_path('base_controller_shared_examples', File.dirname(__FILE__))
2
3
 
3
4
  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
5
 
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
6
+ let(:controller) { ActiveAdmin::ResourceController.new }
15
7
 
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
8
+ it_should_behave_like "BaseController"
21
9
 
22
- it "should be reset" do
23
- Admin::PostsController.send(:"reset_#{page}_config!")
24
- Admin::PostsController.send(:"#{page}_config").should == nil
25
- end
10
+ describe "authenticating the user" do
11
+ let(:controller){ Admin::PostsController.new }
12
+
13
+ it "should do nothing when no authentication_method set" do
14
+ namespace = controller.class.active_admin_config.namespace
15
+ namespace.should_receive(:authentication_method).once.and_return(nil)
16
+
17
+ controller.send(:authenticate_active_admin_user)
26
18
  end
27
- end
28
19
 
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
20
+ it "should call the authentication_method when set" do
21
+ namespace = controller.class.active_admin_config.namespace
22
+
23
+ namespace.should_receive(:authentication_method).twice.
24
+ and_return(:authenticate_admin_user!)
25
+
26
+ controller.should_receive(:authenticate_admin_user!).and_return(true)
27
+
28
+ controller.send(:authenticate_active_admin_user)
34
29
  end
35
- subject{ controller.instance_variable_get(:@current_tab) }
36
30
 
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" }
31
+ end
32
+
33
+ describe "retrieving the current user" do
34
+ let(:controller){ Admin::PostsController.new }
35
+
36
+ it "should return nil when no current_user_method set" do
37
+ namespace = controller.class.active_admin_config.namespace
38
+ namespace.should_receive(:current_user_method).once.and_return(nil)
39
+
40
+ controller.send(:current_active_admin_user).should == nil
40
41
  end
41
42
 
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" }
43
+ it "should call the current_user_method when set" do
44
+ user = mock
45
+ namespace = controller.class.active_admin_config.namespace
46
+
47
+ namespace.should_receive(:current_user_method).twice.
48
+ and_return(:current_admin_user)
49
+
50
+ controller.should_receive(:current_admin_user).and_return(user)
51
+
52
+ controller.send(:current_active_admin_user).should == user
45
53
  end
46
54
  end
47
55
 
@@ -1,8 +1,11 @@
1
1
  require 'spec_helper'
2
+ require File.expand_path('config_shared_examples', File.dirname(__FILE__))
2
3
 
3
4
  module ActiveAdmin
4
5
  describe Resource do
5
6
 
7
+ it_should_behave_like "ActiveAdmin::Config"
8
+
6
9
  before { load_defaults! }
7
10
 
8
11
  let(:application){ ActiveAdmin::Application.new }
@@ -12,6 +15,8 @@ module ActiveAdmin
12
15
  @config ||= Resource.new(namespace, Category, options)
13
16
  end
14
17
 
18
+ it { respond_to :resource_class }
19
+
15
20
  describe "#resource_table_name" do
16
21
  it "should return the resource's table name" do
17
22
  config.resource_table_name.should == '"categories"'
@@ -23,12 +28,6 @@ module ActiveAdmin
23
28
  end
24
29
  end
25
30
 
26
- describe "namespace" do
27
- it "should return the namespace" do
28
- config.namespace.should == namespace
29
- end
30
- end
31
-
32
31
  describe "controller name" do
33
32
  it "should return a namespaced controller name" do
34
33
  config.controller_name.should == "Admin::CategoriesController"
@@ -106,7 +105,6 @@ module ActiveAdmin
106
105
  end
107
106
 
108
107
  describe "route names" do
109
- let(:config){ application.register Category }
110
108
  it "should return the route prefix" do
111
109
  config.route_prefix.should == "admin"
112
110
  end
@@ -131,18 +129,6 @@ module ActiveAdmin
131
129
  end
132
130
  end
133
131
 
134
- describe "page configs" do
135
- context "when initialized" do
136
- it "should be empty" do
137
- config.page_configs.should == {}
138
- end
139
- end
140
- it "should be set-able" do
141
- config.page_configs[:index] = "hello world"
142
- config.page_configs[:index].should == "hello world"
143
- end
144
- end
145
-
146
132
  describe "scoping" do
147
133
  context "when using a block" do
148
134
  before do
@@ -214,17 +200,15 @@ module ActiveAdmin
214
200
 
215
201
  context "when resource class responds to primary_key" do
216
202
  it "should sort by primary key desc by default" do
217
- mock_resource = mock
218
- mock_resource.should_receive(:primary_key).and_return("pk")
219
- config = Resource.new(namespace, mock_resource)
203
+ MockResource.should_receive(:primary_key).and_return("pk")
204
+ config = Resource.new(namespace, MockResource)
220
205
  config.sort_order.should == "pk_desc"
221
206
  end
222
207
  end
223
208
 
224
209
  context "when resource class does not respond to primary_key" do
225
210
  it "should default to id" do
226
- mock_resource = mock
227
- config = Resource.new(namespace, mock_resource)
211
+ config = Resource.new(namespace, MockResource)
228
212
  config.sort_order.should == "id_desc"
229
213
  end
230
214
  end
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe ActiveAdmin, "Routing" do
3
+ describe ActiveAdmin, "Routing", :type => :routing do
4
4
 
5
5
  before :each do
6
6
  load_defaults!
@@ -83,6 +83,55 @@ describe ActiveAdmin, "Routing" do
83
83
  it "should route the nested edit path" do
84
84
  edit_admin_user_post_path(1,2).should == "/admin/users/1/posts/2/edit"
85
85
  end
86
+
87
+ context "with collection action" do
88
+ before do
89
+ load_resources do
90
+ ActiveAdmin.register(Post) do
91
+ belongs_to :user, :optional => true
92
+ end
93
+ ActiveAdmin.register(User) do
94
+ collection_action "do_something"
95
+ end
96
+ end
97
+ end
98
+
99
+ it "should properly route the collection action" do
100
+ { :get => "/admin/users/do_something" }.
101
+ should route_to({ :controller => 'admin/users',:action => 'do_something'})
102
+ end
103
+ end
86
104
  end
87
105
 
106
+ describe "page" do
107
+ context "when default namespace" do
108
+ before(:each) do
109
+ load_resources { ActiveAdmin.register_page("Status") }
110
+ end
111
+
112
+ it "should route to the page under /admin" do
113
+ admin_status_path.should == "/admin/status"
114
+ end
115
+
116
+ context "when in the root namespace" do
117
+ before(:each) do
118
+ load_resources { ActiveAdmin.register_page("Status", :namespace => false) }
119
+ end
120
+
121
+ it "should route to page under /" do
122
+ status_path.should == "/status"
123
+ end
124
+ end
125
+
126
+ context "when singular page name" do
127
+ before(:each) do
128
+ load_resources { ActiveAdmin.register_page("Log") }
129
+ end
130
+
131
+ it "should not inject _index_ into the route name" do
132
+ admin_log_path.should == "/admin/log"
133
+ end
134
+ end
135
+ end
136
+ end
88
137
  end