activeadmin 0.1.1 → 0.2.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 (255) hide show
  1. data/CHANGELOG.rdoc +15 -1
  2. data/Gemfile +41 -11
  3. data/LICENSE +5 -0
  4. data/README.rdoc +202 -87
  5. data/Rakefile +51 -15
  6. data/activeadmin.gemspec +310 -131
  7. data/cucumber.yml +1 -0
  8. data/features/comments/commenting.feature +81 -0
  9. data/features/comments/viewing_index.feature +19 -0
  10. data/features/edit_page.feature +77 -0
  11. data/features/first_boot.feature +16 -0
  12. data/features/global_navigation.feature +30 -0
  13. data/features/index/formats.feature +10 -0
  14. data/features/index/index_as_block.feature +15 -0
  15. data/features/index/index_as_blog.feature +50 -0
  16. data/features/index/index_as_grid.feature +45 -0
  17. data/features/index/index_as_table.feature +79 -0
  18. data/features/index/index_scopes.feature +52 -0
  19. data/features/index/pagination.feature +23 -0
  20. data/features/new_page.feature +75 -0
  21. data/features/registering_assets.feature +35 -0
  22. data/features/registering_resources.feature +33 -0
  23. data/features/show/default_content.feature +43 -0
  24. data/features/show/page_title.feature +33 -0
  25. data/features/sidebar_sections.feature +128 -0
  26. data/features/specifying_actions.feature +16 -0
  27. data/features/step_definitions/action_item_steps.rb +7 -0
  28. data/features/step_definitions/additional_web_steps.rb +67 -0
  29. data/features/step_definitions/asset_steps.rb +7 -0
  30. data/features/step_definitions/attribute_steps.rb +15 -0
  31. data/features/step_definitions/comment_steps.rb +8 -0
  32. data/features/step_definitions/configuration_steps.rb +31 -0
  33. data/features/step_definitions/factory_steps.rb +28 -0
  34. data/features/step_definitions/flash_steps.rb +3 -0
  35. data/features/step_definitions/format_steps.rb +7 -0
  36. data/features/step_definitions/index_scope_steps.rb +20 -0
  37. data/features/step_definitions/pagination_steps.rb +8 -0
  38. data/features/step_definitions/sidebar_steps.rb +11 -0
  39. data/features/step_definitions/tab_steps.rb +3 -0
  40. data/features/step_definitions/user_steps.rb +20 -0
  41. data/features/step_definitions/web_steps.rb +219 -0
  42. data/features/support/env.rb +88 -0
  43. data/features/support/paths.rb +48 -0
  44. data/features/users/logging_in.feature +34 -0
  45. data/features/users/logging_out.feature +13 -0
  46. data/lib/active_admin.rb +155 -79
  47. data/lib/active_admin/abstract_view_factory.rb +95 -0
  48. data/lib/active_admin/action_items.rb +4 -15
  49. data/lib/active_admin/arbre.rb +23 -0
  50. data/lib/active_admin/arbre/attributes.rb +20 -0
  51. data/lib/active_admin/arbre/class_list.rb +28 -0
  52. data/lib/active_admin/arbre/collection.rb +27 -0
  53. data/lib/active_admin/arbre/context.rb +8 -0
  54. data/lib/active_admin/arbre/core_extensions.rb +5 -0
  55. data/lib/active_admin/arbre/document.rb +42 -0
  56. data/lib/active_admin/arbre/element.rb +151 -0
  57. data/lib/active_admin/arbre/html.rb +84 -0
  58. data/lib/active_admin/arbre/html5_elements.rb +47 -0
  59. data/lib/active_admin/arbre/tag.rb +129 -0
  60. data/lib/active_admin/arbre/text_node.rb +35 -0
  61. data/lib/active_admin/callbacks.rb +87 -0
  62. data/lib/active_admin/comments.rb +73 -0
  63. data/lib/active_admin/comments/comment.rb +15 -0
  64. data/lib/active_admin/comments/configuration.rb +16 -0
  65. data/lib/active_admin/comments/namespace_helper.rb +14 -0
  66. data/lib/active_admin/comments/resource_helper.rb +17 -0
  67. data/lib/active_admin/comments/show_page_helper.rb +23 -0
  68. data/lib/active_admin/comments/views.rb +3 -0
  69. data/lib/active_admin/comments/views/active_admin_comment.rb +0 -0
  70. data/lib/active_admin/comments/views/active_admin_comments.rb +82 -0
  71. data/lib/active_admin/component.rb +22 -0
  72. data/lib/active_admin/controller_action.rb +12 -0
  73. data/lib/active_admin/dashboards.rb +0 -2
  74. data/lib/active_admin/dashboards/dashboard_controller.rb +10 -5
  75. data/lib/active_admin/dashboards/section.rb +5 -14
  76. data/lib/active_admin/devise.rb +43 -0
  77. data/lib/active_admin/dsl.rb +202 -0
  78. data/lib/active_admin/event.rb +31 -0
  79. data/lib/active_admin/form_builder.rb +68 -50
  80. data/lib/active_admin/iconic.rb +51 -0
  81. data/lib/active_admin/iconic/icons.rb +142 -0
  82. data/lib/active_admin/namespace.rb +102 -16
  83. data/lib/active_admin/renderer.rb +18 -3
  84. data/lib/active_admin/resource.rb +110 -9
  85. data/lib/active_admin/resource/belongs_to.rb +31 -0
  86. data/lib/active_admin/resource_controller.rb +45 -260
  87. data/lib/active_admin/resource_controller/action_builder.rb +21 -0
  88. data/lib/active_admin/resource_controller/actions.rb +53 -0
  89. data/lib/active_admin/resource_controller/callbacks.rb +47 -0
  90. data/lib/active_admin/resource_controller/collection.rb +142 -0
  91. data/lib/active_admin/resource_controller/filters.rb +58 -0
  92. data/lib/active_admin/resource_controller/form.rb +42 -0
  93. data/lib/active_admin/resource_controller/menu.rb +29 -0
  94. data/lib/active_admin/resource_controller/page_configurations.rb +53 -0
  95. data/lib/active_admin/resource_controller/scoping.rb +36 -0
  96. data/lib/active_admin/resource_controller/sidebars.rb +38 -0
  97. data/lib/active_admin/scope.rb +17 -0
  98. data/lib/active_admin/sidebar.rb +8 -47
  99. data/lib/active_admin/stylesheets/active_admin.scss +418 -0
  100. data/lib/active_admin/stylesheets/active_admin/_comments.scss +40 -0
  101. data/lib/active_admin/stylesheets/active_admin/_flash_messages.scss +13 -0
  102. data/lib/active_admin/stylesheets/active_admin/_forms.scss +168 -0
  103. data/lib/active_admin/stylesheets/active_admin/_header.scss +108 -0
  104. data/lib/active_admin/stylesheets/active_admin/_typography.scss +100 -0
  105. data/lib/active_admin/stylesheets/active_admin/mixins/_all.scss +8 -0
  106. data/lib/active_admin/stylesheets/active_admin/mixins/_buttons.scss +27 -0
  107. data/lib/active_admin/stylesheets/active_admin/mixins/_gradients.scss +21 -0
  108. data/lib/active_admin/stylesheets/active_admin/mixins/_icons.scss +20 -0
  109. data/lib/active_admin/stylesheets/active_admin/mixins/_reset.scss +165 -0
  110. data/lib/active_admin/stylesheets/active_admin/mixins/_rounded.scss +43 -0
  111. data/lib/active_admin/stylesheets/active_admin/mixins/_sections.scss +27 -0
  112. data/lib/active_admin/stylesheets/active_admin/mixins/_shadows.scss +21 -0
  113. data/lib/active_admin/stylesheets/active_admin/mixins/_variables.scss +12 -0
  114. data/lib/active_admin/version.rb +1 -1
  115. data/lib/active_admin/view_factory.rb +21 -0
  116. data/lib/active_admin/view_helpers.rb +17 -100
  117. data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +7 -0
  118. data/lib/active_admin/view_helpers/auto_link_helper.rb +41 -0
  119. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +29 -0
  120. data/lib/active_admin/view_helpers/display_helper.rb +38 -0
  121. data/lib/active_admin/view_helpers/filter_form_helper.rb +174 -0
  122. data/lib/active_admin/view_helpers/form_helper.rb +12 -0
  123. data/lib/active_admin/view_helpers/icon_helper.rb +12 -0
  124. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +26 -0
  125. data/lib/active_admin/view_helpers/renderer_helper.rb +29 -0
  126. data/lib/active_admin/view_helpers/sidebar_helper.rb +15 -0
  127. data/lib/active_admin/view_helpers/status_tag_helper.rb +13 -0
  128. data/lib/active_admin/view_helpers/table_helper.rb +12 -0
  129. data/lib/active_admin/view_helpers/title_helper.rb +11 -0
  130. data/lib/active_admin/view_helpers/view_factory_helper.rb +11 -0
  131. data/lib/active_admin/views.rb +8 -0
  132. data/lib/active_admin/views/action_items.rb +17 -0
  133. data/lib/active_admin/views/components/attributes_table.rb +66 -0
  134. data/lib/active_admin/views/components/columns.rb +49 -0
  135. data/lib/active_admin/views/components/paginated_collection.rb +74 -0
  136. data/lib/active_admin/views/components/panel.rb +26 -0
  137. data/lib/active_admin/views/components/scopes.rb +64 -0
  138. data/lib/active_admin/views/components/sidebar_section.rb +30 -0
  139. data/lib/active_admin/views/components/table_for.rb +174 -0
  140. data/lib/active_admin/views/dashboard_section_renderer.rb +19 -0
  141. data/lib/active_admin/views/header_renderer.rb +37 -0
  142. data/lib/active_admin/views/index_as_block.rb +24 -0
  143. data/lib/active_admin/views/index_as_blog.rb +89 -0
  144. data/lib/active_admin/views/index_as_grid.rb +49 -0
  145. data/lib/active_admin/views/index_as_table.rb +73 -0
  146. data/lib/active_admin/views/pages/base.rb +138 -0
  147. data/lib/active_admin/views/pages/dashboard.rb +61 -0
  148. data/lib/active_admin/views/pages/edit.rb +27 -0
  149. data/lib/active_admin/views/pages/index.rb +64 -0
  150. data/lib/active_admin/views/pages/new.rb +27 -0
  151. data/lib/active_admin/views/pages/show.rb +56 -0
  152. data/lib/active_admin/views/tabs_renderer.rb +52 -0
  153. data/lib/active_admin/views/templates/active_admin/devise/mailer/reset_password_instructions.html.erb +8 -0
  154. data/lib/active_admin/views/templates/active_admin/devise/mailer/unlock_instructions.html.erb +7 -0
  155. data/lib/active_admin/views/templates/active_admin/devise/passwords/edit.html.erb +16 -0
  156. data/lib/active_admin/views/templates/active_admin/devise/passwords/new.html.erb +14 -0
  157. data/lib/active_admin/views/templates/active_admin/devise/sessions/new.html.erb +18 -0
  158. data/lib/active_admin/views/templates/active_admin/devise/shared/_links.erb +20 -0
  159. data/lib/active_admin/views/templates/active_admin/devise/unlocks/new.html.erb +12 -0
  160. data/lib/active_admin/views/templates/active_admin_dashboard/index.html.arb +1 -0
  161. data/lib/active_admin/views/templates/active_admin_default/edit.html.arb +1 -0
  162. data/lib/active_admin/views/{active_admin_default → templates/active_admin_default}/index.csv.erb +0 -0
  163. data/lib/active_admin/views/templates/active_admin_default/index.html.arb +1 -0
  164. data/lib/active_admin/views/templates/active_admin_default/new.html.arb +1 -0
  165. data/lib/active_admin/views/templates/active_admin_default/show.html.arb +1 -0
  166. data/lib/active_admin/views/{layouts → templates/layouts}/active_admin.html.erb +3 -4
  167. data/lib/active_admin/views/templates/layouts/active_admin_logged_out.html.erb +31 -0
  168. data/lib/generators/active_admin/devise/devise_generator.rb +45 -0
  169. data/lib/generators/active_admin/install/install_generator.rb +18 -3
  170. data/lib/generators/active_admin/install/templates/active_admin.js +41 -0
  171. data/lib/generators/active_admin/install/templates/{active_admin.rb → active_admin.rb.erb} +33 -3
  172. data/lib/generators/active_admin/install/templates/active_admin_vendor.js +1 -1
  173. data/lib/generators/active_admin/install/templates/dashboards.rb +3 -4
  174. data/lib/generators/active_admin/install/templates/images/admin_notes_icon.png +0 -0
  175. data/lib/generators/active_admin/install/templates/images/loading.gif +0 -0
  176. data/lib/generators/active_admin/install/templates/images/nested_menu_arrow.gif +0 -0
  177. data/lib/generators/active_admin/install/templates/images/nested_menu_arrow_dark.gif +0 -0
  178. data/lib/generators/active_admin/install/templates/images/orderable.png +0 -0
  179. data/lib/generators/active_admin/install/templates/migrations/1_create_admin_notes.rb +16 -0
  180. data/lib/generators/active_admin/install/templates/migrations/2_move_admin_notes_to_comments.rb +25 -0
  181. data/spec/integration/belongs_to_spec.rb +42 -0
  182. data/spec/integration/index_as_table_spec.rb +0 -119
  183. data/spec/integration/layout_spec.rb +3 -37
  184. data/spec/spec_helper.rb +89 -50
  185. data/spec/support/integration_example_group.rb +37 -0
  186. data/spec/support/rails_template.rb +21 -9
  187. data/spec/support/rails_template_with_data.rb +32 -0
  188. data/spec/support/templates/cucumber.rb +28 -0
  189. data/spec/unit/abstract_view_factory_spec.rb +79 -0
  190. data/spec/unit/action_builder_spec.rb +19 -7
  191. data/spec/unit/action_items_spec.rb +16 -30
  192. data/spec/unit/active_admin_spec.rb +10 -22
  193. data/spec/unit/arbre/html/element_finder_methods_spec.rb +54 -0
  194. data/spec/unit/arbre/html/element_spec.rb +224 -0
  195. data/spec/unit/arbre/html/tag_attributes_spec.rb +61 -0
  196. data/spec/unit/arbre/html/tag_spec.rb +63 -0
  197. data/spec/unit/arbre/html_spec.rb +185 -0
  198. data/spec/unit/auto_link_spec.rb +38 -0
  199. data/spec/unit/belongs_to_spec.rb +44 -0
  200. data/spec/unit/breadcrumbs_spec.rb +110 -0
  201. data/spec/unit/comments_spec.rb +53 -0
  202. data/spec/unit/component_spec.rb +18 -0
  203. data/spec/unit/components/attributes_table_spec.rb +100 -0
  204. data/spec/unit/components/columns_spec.rb +75 -0
  205. data/spec/unit/components/panel_spec.rb +31 -0
  206. data/spec/unit/components/sidebar_section_spec.rb +37 -0
  207. data/spec/unit/components/table_for_spec.rb +130 -0
  208. data/spec/unit/dashboard_controller_spec.rb +26 -0
  209. data/spec/unit/dashboard_section_spec.rb +10 -17
  210. data/spec/unit/display_name_spec.rb +29 -0
  211. data/spec/unit/event_spec.rb +41 -0
  212. data/spec/unit/filter_form_builder_spec.rb +99 -77
  213. data/spec/unit/form_builder_spec.rb +69 -69
  214. data/spec/unit/namespace_spec.rb +61 -3
  215. data/spec/unit/pretty_format_spec.rb +35 -0
  216. data/spec/unit/registration_spec.rb +40 -1
  217. data/spec/unit/renderer_spec.rb +8 -0
  218. data/spec/unit/resource_controller_spec.rb +105 -6
  219. data/spec/unit/resource_spec.rb +78 -11
  220. data/spec/unit/routing_spec.rb +82 -6
  221. data/spec/unit/scope_spec.rb +31 -0
  222. data/spec/unit/tabs_renderer_spec.rb +24 -2
  223. data/spec/unit/view_factory_spec.rb +16 -0
  224. metadata +268 -82
  225. data/.gitignore +0 -25
  226. data/active_admin.gemspec +0 -22
  227. data/lib/active_admin/action_builder.rb +0 -60
  228. data/lib/active_admin/breadcrumbs.rb +0 -26
  229. data/lib/active_admin/dashboards/renderer.rb +0 -45
  230. data/lib/active_admin/dashboards/section_renderer.rb +0 -28
  231. data/lib/active_admin/filters.rb +0 -189
  232. data/lib/active_admin/pages.rb +0 -11
  233. data/lib/active_admin/pages/base.rb +0 -92
  234. data/lib/active_admin/pages/edit.rb +0 -21
  235. data/lib/active_admin/pages/index.rb +0 -58
  236. data/lib/active_admin/pages/index/blog.rb +0 -65
  237. data/lib/active_admin/pages/index/table.rb +0 -48
  238. data/lib/active_admin/pages/index/thumbnails.rb +0 -40
  239. data/lib/active_admin/pages/new.rb +0 -21
  240. data/lib/active_admin/pages/show.rb +0 -54
  241. data/lib/active_admin/table_builder.rb +0 -162
  242. data/lib/active_admin/tabs_renderer.rb +0 -39
  243. data/lib/active_admin/views/active_admin_dashboard/index.html.erb +0 -1
  244. data/lib/active_admin/views/active_admin_default/edit.html.erb +0 -1
  245. data/lib/active_admin/views/active_admin_default/index.html.erb +0 -1
  246. data/lib/active_admin/views/active_admin_default/new.html.erb +0 -1
  247. data/lib/active_admin/views/active_admin_default/show.html.erb +0 -1
  248. data/lib/generators/active_admin/install/templates/active_admin.css +0 -325
  249. data/lib/generators/active_admin/install/templates/images/orderable.gif +0 -0
  250. data/spec/integration/index_as_blog_spec.rb +0 -65
  251. data/spec/integration/index_as_thumbnails_spec.rb +0 -43
  252. data/spec/integration/new_view_spec.rb +0 -52
  253. data/spec/integration/show_view_spec.rb +0 -91
  254. data/spec/unit/sidebar_spec.rb +0 -96
  255. data/spec/unit/table_builder_spec.rb +0 -162
@@ -0,0 +1,185 @@
1
+ require 'spec_helper'
2
+
3
+ describe Arbre::HTML do
4
+ include Arbre::HTML
5
+
6
+ let(:assigns){ {} }
7
+
8
+ it "should render a single element" do
9
+ content = span("Hello World")
10
+ content.to_html.should == <<-HTML
11
+ <span>Hello World</span>
12
+ HTML
13
+ end
14
+
15
+ it "should render a child element" do
16
+ content = span do
17
+ span "Hello World"
18
+ end
19
+ content.to_html.should == <<-HTML
20
+ <span>
21
+ <span>Hello World</span>
22
+ </span>
23
+ HTML
24
+ end
25
+
26
+ it "should render an unordered list" do
27
+ content = ul do
28
+ li "First"
29
+ li "Second"
30
+ li "Third"
31
+ end
32
+ content.to_html.should == <<-HTML
33
+ <ul>
34
+ <li>First</li>
35
+ <li>Second</li>
36
+ <li>Third</li>
37
+ </ul>
38
+ HTML
39
+ end
40
+
41
+ it "should return the correct object" do
42
+ list_1 = ul
43
+ list_2 = li
44
+ list_1.should be_instance_of(Arbre::HTML::Ul)
45
+ list_2.should be_instance_of(Arbre::HTML::Li)
46
+ end
47
+
48
+ it "should allow local variables inside the tags" do
49
+ first = "First"
50
+ second = "Second"
51
+ content = ul do
52
+ li first
53
+ li second
54
+ end
55
+ content.to_html.should == <<-EOS
56
+ <ul>
57
+ <li>First</li>
58
+ <li>Second</li>
59
+ </ul>
60
+ EOS
61
+ end
62
+
63
+ it "should add children and nested" do
64
+ content = div do
65
+ ul
66
+ li do
67
+ li
68
+ end
69
+ end
70
+ content.to_html.should == <<-HTML
71
+ <div>
72
+ <ul></ul>
73
+ <li>
74
+ <li></li>
75
+ </li>
76
+ </div>
77
+ HTML
78
+ end
79
+
80
+ it "should pass the element in to the block if asked for" do
81
+ content = div do |d|
82
+ d.ul do
83
+ li
84
+ end
85
+ end
86
+ content.to_html.should == <<-HTML
87
+ <div>
88
+ <ul>
89
+ <li></li>
90
+ </ul>
91
+ </div>
92
+ HTML
93
+ end
94
+
95
+ it "should move content tags between parents" do
96
+ content = div do
97
+ span(ul(li))
98
+ end
99
+ content.to_html.should == <<-HTML
100
+ <div>
101
+ <span>
102
+ <ul>
103
+ <li></li>
104
+ </ul>
105
+ </span>
106
+ </div>
107
+ HTML
108
+ end
109
+
110
+ it "should add content to the parent if the element is passed into block" do
111
+ content = div do |d|
112
+ d.id = "my-tag"
113
+ ul do
114
+ li
115
+ end
116
+ end
117
+ content.to_html.should == <<-HTML
118
+ <div id="my-tag">
119
+ <ul>
120
+ <li></li>
121
+ </ul>
122
+ </div>
123
+ HTML
124
+ end
125
+
126
+ it "should have the parent set on it" do
127
+ item = nil
128
+ list = ul do
129
+ li "Hello"
130
+ item = li "World"
131
+ end
132
+ item.parent.should == list
133
+ end
134
+
135
+ it "should set a string content return value with no children" do
136
+ li do
137
+ "Hello World"
138
+ end.to_html.should == <<-HTML
139
+ <li>Hello World</li>
140
+ HTML
141
+ end
142
+
143
+ describe "text nodes" do
144
+ it "should turn strings into text nodes" do
145
+ li do
146
+ "Hello World"
147
+ end.children.first.should be_instance_of(Arbre::HTML::TextNode)
148
+ end
149
+ end
150
+
151
+ describe "html safe" do
152
+ it "should escape the contents" do
153
+ span("<br />").to_html.should == <<-HTML
154
+ <span>&lt;br /&gt;</span>
155
+ HTML
156
+ end
157
+
158
+ it "should return html safe strings" do
159
+ span("<br />").to_html.should be_html_safe
160
+ end
161
+
162
+ it "should not escape html passed in" do
163
+ span(span("<br />")).to_html.should == <<-HTML
164
+ <span>
165
+ <span>&lt;br /&gt;</span>
166
+ </span>
167
+ HTML
168
+ end
169
+
170
+ it "should escape string contents when passed in block" do
171
+ span {
172
+ span {
173
+ "<br />"
174
+ }
175
+ }.to_html.should == <<-HTML
176
+ <span>
177
+ <span>&lt;br /&gt;</span>
178
+ </span>
179
+ HTML
180
+ end
181
+
182
+ it "should escape the contents of attributes"
183
+ end
184
+
185
+ end
@@ -0,0 +1,38 @@
1
+ require 'spec_helper'
2
+
3
+ class AutoLinkMockResource
4
+ attr_accessor :namespace
5
+ def initialize(namespace)
6
+ @namespace = namespace
7
+ end
8
+ end
9
+
10
+ describe "auto linking resources" do
11
+ include ActiveAdmin::ViewHelpers::AutoLinkHelper
12
+ include ActiveAdmin::ViewHelpers::DisplayHelper
13
+
14
+ let(:active_admin_config) { AutoLinkMockResource.new(namespace) }
15
+ let(:namespace){ ActiveAdmin::Namespace.new(:admin) }
16
+ let(:post){ Post.create! :title => "Hello World" }
17
+
18
+ def admin_post_path(post)
19
+ "/admin/posts/#{post.id}"
20
+ end
21
+
22
+ context "when the resource is not registered" do
23
+ it "should return the display name of the object" do
24
+ auto_link(post).should == "Hello World"
25
+ end
26
+ end
27
+
28
+ context "when the resource is registered" do
29
+ before do
30
+ namespace.register Post
31
+ end
32
+ it "should return a link with the display name of the object" do
33
+ self.should_receive(:link_to).with("Hello World", admin_post_path(post))
34
+ auto_link(post)
35
+ end
36
+ end
37
+
38
+ end
@@ -0,0 +1,44 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ module ActiveAdmin
4
+ class Resource
5
+ describe BelongsTo do
6
+
7
+ let(:namespace){ Namespace.new(:admin) }
8
+ let(:post){ namespace.register(Post) }
9
+ let(:belongs_to){ BelongsTo.new(post, :user) }
10
+
11
+ it "should have an owner" do
12
+ belongs_to.owner.should == post
13
+ end
14
+
15
+ it "should have a namespace" do
16
+ belongs_to.namespace.should == namespace
17
+ end
18
+
19
+ describe "finding the target" do
20
+ context "when the resource has been registered" do
21
+ let(:user){ namespace.register(User) }
22
+ before { user } # Ensure user is registered
23
+
24
+ it "should return the target resource" do
25
+ belongs_to.target.should == user
26
+ end
27
+ end
28
+
29
+ context "when the resource has not been registered" do
30
+ it "should raise a ActiveAdmin::BelongsTo::TargetNotFound" do
31
+ lambda {
32
+ belongs_to.target
33
+ }.should raise_error(ActiveAdmin::Resource::BelongsTo::TargetNotFound)
34
+ end
35
+ end
36
+ end
37
+
38
+ it "should be optional" do
39
+ belongs_to = BelongsTo.new post, :user, :optional => true
40
+ belongs_to.should be_optional
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,110 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe "Breadcrumbs" do
4
+
5
+ include ActiveAdmin::ViewHelpers
6
+
7
+ describe "generating a trail from paths" do
8
+
9
+ # Mock our params
10
+ def params; {}; end
11
+ # Mock link to and return a hash
12
+ def link_to(name, url); {:name => name, :path => url}; end
13
+
14
+ let(:trail) { breadcrumb_links(path) }
15
+
16
+ context "when request '/admin'" do
17
+ let(:path){ "/admin" }
18
+
19
+ it "should not have any items" do
20
+ trail.size.should == 0
21
+ end
22
+ end
23
+
24
+ context "when path '/admin/posts'" do
25
+ let(:path) { "/admin/posts" }
26
+
27
+ it "should have one item" do
28
+ trail.size.should == 1
29
+ end
30
+ it "should have a link to /admin" do
31
+ trail[0][:name].should == "Admin"
32
+ trail[0][:path].should == "/admin"
33
+ end
34
+ end
35
+
36
+ context "when path '/admin/posts/1'" do
37
+ let(:path) { "/admin/posts/1" }
38
+
39
+ it "should have 2 items" do
40
+ trail.size.should == 2
41
+ end
42
+ it "should have a link to /admin" do
43
+ trail[0][:name].should == "Admin"
44
+ trail[0][:path].should == "/admin"
45
+ end
46
+ it "should have a link to /admin/posts" do
47
+ trail[1][:name].should == "Posts"
48
+ trail[1][:path].should == "/admin/posts"
49
+ end
50
+ end
51
+
52
+ context "when path '/admin/posts/1/comments'" do
53
+ let(:path) { "/admin/posts/1/comments" }
54
+
55
+ it "should have 3 items" do
56
+ trail.size.should == 3
57
+ end
58
+ it "should have a link to /admin" do
59
+ trail[0][:name].should == "Admin"
60
+ trail[0][:path].should == "/admin"
61
+ end
62
+ it "should have a link to /admin/posts" do
63
+ trail[1][:name].should == "Posts"
64
+ trail[1][:path].should == "/admin/posts"
65
+ end
66
+
67
+ context "when Post.find(1) doesn't exist" do
68
+ it "should have a link to /admin/posts/1" do
69
+ trail[2][:name].should == "1"
70
+ trail[2][:path].should == "/admin/posts/1"
71
+ end
72
+ end
73
+
74
+ context "when Post.find(1) does exist" do
75
+ before do
76
+ Post.stub!(:find).and_return{ mock(:display_name => "Hello World") }
77
+ end
78
+ it "should have a link to /admin/posts/1 using display name" do
79
+ trail[2][:name].should == "Hello World"
80
+ trail[2][:path].should == "/admin/posts/1"
81
+ end
82
+ end
83
+ end
84
+
85
+ context "when path '/admin/posts/1/coments/1'" do
86
+ let(:path) { "/admin/posts/1/comments/1" }
87
+
88
+ it "should have 4 items" do
89
+ trail.size.should == 4
90
+ end
91
+ it "should have a link to /admin" do
92
+ trail[0][:name].should == "Admin"
93
+ trail[0][:path].should == "/admin"
94
+ end
95
+ it "should have a link to /admin/posts" do
96
+ trail[1][:name].should == "Posts"
97
+ trail[1][:path].should == "/admin/posts"
98
+ end
99
+ it "should have a link to /admin/posts/1" do
100
+ trail[2][:name].should == "1"
101
+ trail[2][:path].should == "/admin/posts/1"
102
+ end
103
+ it "should have a link to /admin/posts/1/comments" do
104
+ trail[3][:name].should == "Comments"
105
+ trail[3][:path].should == "/admin/posts/1/comments"
106
+ end
107
+ end
108
+
109
+ end
110
+ end
@@ -0,0 +1,53 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe "Configuration" do
4
+ it "should have an array of namespaces which allow comments" do
5
+ ActiveAdmin.allow_comments_in.should be_an_instance_of(Array)
6
+ end
7
+
8
+ it "should allow comments in the default namespace by default" do
9
+ ActiveAdmin.allow_comments_in.should include(ActiveAdmin.default_namespace)
10
+ end
11
+ end
12
+
13
+ describe ActiveAdmin::Comment do
14
+ describe "Associations and Validations" do
15
+ it { should belong_to :resource }
16
+ it { should belong_to :author }
17
+
18
+ it { should validate_presence_of :resource_id }
19
+ it { should validate_presence_of :resource_type }
20
+ it { should validate_presence_of :body }
21
+ it { should validate_presence_of :namespace }
22
+ end
23
+ end
24
+
25
+ describe ActiveAdmin::Comments::NamespaceHelper do
26
+ describe "#comments?" do
27
+ it "should have comments if the namespace is in the settings" do
28
+ ns = ActiveAdmin::Namespace.new(ActiveAdmin.default_namespace)
29
+ ns.comments?.should be_true
30
+ end
31
+ it "should not have comments if the namespace is not in the settings" do
32
+ ns = ActiveAdmin::Namespace.new(:not_in_comments)
33
+ ns.comments?.should be_false
34
+ end
35
+ end
36
+ end
37
+
38
+ describe ActiveAdmin::Comments::ResourceHelper do
39
+ it "should add an attr_accessor :comments to ActiveAdmin::Resource" do
40
+ ns = ActiveAdmin::Namespace.new(:admin)
41
+ resource = ActiveAdmin::Resource.new(ns, Post)
42
+ resource.comments.should be_nil
43
+ resource.comments = true
44
+ resource.comments.should be_true
45
+ end
46
+
47
+ it "should not have comment if set to false by in allow_comments_in" do
48
+ ns = ActiveAdmin::Namespace.new(ActiveAdmin.default_namespace)
49
+ resource = ActiveAdmin::Resource.new(ns, Post)
50
+ resource.comments = false
51
+ resource.comments?.should be_false
52
+ end
53
+ end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ class MockComponentClass < ActiveAdmin::Component; end
4
+
5
+ describe ActiveAdmin::Component do
6
+
7
+ let(:component_class){ MockComponentClass }
8
+ let(:component){ component_class.new }
9
+
10
+ it "should be a subclass of an html div" do
11
+ ActiveAdmin::Component.ancestors.should include(Arbre::HTML::Div)
12
+ end
13
+
14
+ it "should render to a div, even as a subclass" do
15
+ component.tag_name.should == 'div'
16
+ end
17
+
18
+ end