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.
- data/CHANGELOG.rdoc +15 -1
- data/Gemfile +41 -11
- data/LICENSE +5 -0
- data/README.rdoc +202 -87
- data/Rakefile +51 -15
- data/activeadmin.gemspec +310 -131
- data/cucumber.yml +1 -0
- data/features/comments/commenting.feature +81 -0
- data/features/comments/viewing_index.feature +19 -0
- data/features/edit_page.feature +77 -0
- data/features/first_boot.feature +16 -0
- data/features/global_navigation.feature +30 -0
- data/features/index/formats.feature +10 -0
- data/features/index/index_as_block.feature +15 -0
- data/features/index/index_as_blog.feature +50 -0
- data/features/index/index_as_grid.feature +45 -0
- data/features/index/index_as_table.feature +79 -0
- data/features/index/index_scopes.feature +52 -0
- data/features/index/pagination.feature +23 -0
- data/features/new_page.feature +75 -0
- data/features/registering_assets.feature +35 -0
- data/features/registering_resources.feature +33 -0
- data/features/show/default_content.feature +43 -0
- data/features/show/page_title.feature +33 -0
- data/features/sidebar_sections.feature +128 -0
- data/features/specifying_actions.feature +16 -0
- data/features/step_definitions/action_item_steps.rb +7 -0
- data/features/step_definitions/additional_web_steps.rb +67 -0
- data/features/step_definitions/asset_steps.rb +7 -0
- data/features/step_definitions/attribute_steps.rb +15 -0
- data/features/step_definitions/comment_steps.rb +8 -0
- data/features/step_definitions/configuration_steps.rb +31 -0
- data/features/step_definitions/factory_steps.rb +28 -0
- data/features/step_definitions/flash_steps.rb +3 -0
- data/features/step_definitions/format_steps.rb +7 -0
- data/features/step_definitions/index_scope_steps.rb +20 -0
- data/features/step_definitions/pagination_steps.rb +8 -0
- data/features/step_definitions/sidebar_steps.rb +11 -0
- data/features/step_definitions/tab_steps.rb +3 -0
- data/features/step_definitions/user_steps.rb +20 -0
- data/features/step_definitions/web_steps.rb +219 -0
- data/features/support/env.rb +88 -0
- data/features/support/paths.rb +48 -0
- data/features/users/logging_in.feature +34 -0
- data/features/users/logging_out.feature +13 -0
- data/lib/active_admin.rb +155 -79
- data/lib/active_admin/abstract_view_factory.rb +95 -0
- data/lib/active_admin/action_items.rb +4 -15
- data/lib/active_admin/arbre.rb +23 -0
- data/lib/active_admin/arbre/attributes.rb +20 -0
- data/lib/active_admin/arbre/class_list.rb +28 -0
- data/lib/active_admin/arbre/collection.rb +27 -0
- data/lib/active_admin/arbre/context.rb +8 -0
- data/lib/active_admin/arbre/core_extensions.rb +5 -0
- data/lib/active_admin/arbre/document.rb +42 -0
- data/lib/active_admin/arbre/element.rb +151 -0
- data/lib/active_admin/arbre/html.rb +84 -0
- data/lib/active_admin/arbre/html5_elements.rb +47 -0
- data/lib/active_admin/arbre/tag.rb +129 -0
- data/lib/active_admin/arbre/text_node.rb +35 -0
- data/lib/active_admin/callbacks.rb +87 -0
- data/lib/active_admin/comments.rb +73 -0
- data/lib/active_admin/comments/comment.rb +15 -0
- data/lib/active_admin/comments/configuration.rb +16 -0
- data/lib/active_admin/comments/namespace_helper.rb +14 -0
- data/lib/active_admin/comments/resource_helper.rb +17 -0
- data/lib/active_admin/comments/show_page_helper.rb +23 -0
- data/lib/active_admin/comments/views.rb +3 -0
- data/lib/active_admin/comments/views/active_admin_comment.rb +0 -0
- data/lib/active_admin/comments/views/active_admin_comments.rb +82 -0
- data/lib/active_admin/component.rb +22 -0
- data/lib/active_admin/controller_action.rb +12 -0
- data/lib/active_admin/dashboards.rb +0 -2
- data/lib/active_admin/dashboards/dashboard_controller.rb +10 -5
- data/lib/active_admin/dashboards/section.rb +5 -14
- data/lib/active_admin/devise.rb +43 -0
- data/lib/active_admin/dsl.rb +202 -0
- data/lib/active_admin/event.rb +31 -0
- data/lib/active_admin/form_builder.rb +68 -50
- data/lib/active_admin/iconic.rb +51 -0
- data/lib/active_admin/iconic/icons.rb +142 -0
- data/lib/active_admin/namespace.rb +102 -16
- data/lib/active_admin/renderer.rb +18 -3
- data/lib/active_admin/resource.rb +110 -9
- data/lib/active_admin/resource/belongs_to.rb +31 -0
- data/lib/active_admin/resource_controller.rb +45 -260
- data/lib/active_admin/resource_controller/action_builder.rb +21 -0
- data/lib/active_admin/resource_controller/actions.rb +53 -0
- data/lib/active_admin/resource_controller/callbacks.rb +47 -0
- data/lib/active_admin/resource_controller/collection.rb +142 -0
- data/lib/active_admin/resource_controller/filters.rb +58 -0
- data/lib/active_admin/resource_controller/form.rb +42 -0
- data/lib/active_admin/resource_controller/menu.rb +29 -0
- data/lib/active_admin/resource_controller/page_configurations.rb +53 -0
- data/lib/active_admin/resource_controller/scoping.rb +36 -0
- data/lib/active_admin/resource_controller/sidebars.rb +38 -0
- data/lib/active_admin/scope.rb +17 -0
- data/lib/active_admin/sidebar.rb +8 -47
- data/lib/active_admin/stylesheets/active_admin.scss +418 -0
- data/lib/active_admin/stylesheets/active_admin/_comments.scss +40 -0
- data/lib/active_admin/stylesheets/active_admin/_flash_messages.scss +13 -0
- data/lib/active_admin/stylesheets/active_admin/_forms.scss +168 -0
- data/lib/active_admin/stylesheets/active_admin/_header.scss +108 -0
- data/lib/active_admin/stylesheets/active_admin/_typography.scss +100 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_all.scss +8 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_buttons.scss +27 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_gradients.scss +21 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_icons.scss +20 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_reset.scss +165 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_rounded.scss +43 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_sections.scss +27 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_shadows.scss +21 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_variables.scss +12 -0
- data/lib/active_admin/version.rb +1 -1
- data/lib/active_admin/view_factory.rb +21 -0
- data/lib/active_admin/view_helpers.rb +17 -100
- data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +7 -0
- data/lib/active_admin/view_helpers/auto_link_helper.rb +41 -0
- data/lib/active_admin/view_helpers/breadcrumb_helper.rb +29 -0
- data/lib/active_admin/view_helpers/display_helper.rb +38 -0
- data/lib/active_admin/view_helpers/filter_form_helper.rb +174 -0
- data/lib/active_admin/view_helpers/form_helper.rb +12 -0
- data/lib/active_admin/view_helpers/icon_helper.rb +12 -0
- data/lib/active_admin/view_helpers/method_or_proc_helper.rb +26 -0
- data/lib/active_admin/view_helpers/renderer_helper.rb +29 -0
- data/lib/active_admin/view_helpers/sidebar_helper.rb +15 -0
- data/lib/active_admin/view_helpers/status_tag_helper.rb +13 -0
- data/lib/active_admin/view_helpers/table_helper.rb +12 -0
- data/lib/active_admin/view_helpers/title_helper.rb +11 -0
- data/lib/active_admin/view_helpers/view_factory_helper.rb +11 -0
- data/lib/active_admin/views.rb +8 -0
- data/lib/active_admin/views/action_items.rb +17 -0
- data/lib/active_admin/views/components/attributes_table.rb +66 -0
- data/lib/active_admin/views/components/columns.rb +49 -0
- data/lib/active_admin/views/components/paginated_collection.rb +74 -0
- data/lib/active_admin/views/components/panel.rb +26 -0
- data/lib/active_admin/views/components/scopes.rb +64 -0
- data/lib/active_admin/views/components/sidebar_section.rb +30 -0
- data/lib/active_admin/views/components/table_for.rb +174 -0
- data/lib/active_admin/views/dashboard_section_renderer.rb +19 -0
- data/lib/active_admin/views/header_renderer.rb +37 -0
- data/lib/active_admin/views/index_as_block.rb +24 -0
- data/lib/active_admin/views/index_as_blog.rb +89 -0
- data/lib/active_admin/views/index_as_grid.rb +49 -0
- data/lib/active_admin/views/index_as_table.rb +73 -0
- data/lib/active_admin/views/pages/base.rb +138 -0
- data/lib/active_admin/views/pages/dashboard.rb +61 -0
- data/lib/active_admin/views/pages/edit.rb +27 -0
- data/lib/active_admin/views/pages/index.rb +64 -0
- data/lib/active_admin/views/pages/new.rb +27 -0
- data/lib/active_admin/views/pages/show.rb +56 -0
- data/lib/active_admin/views/tabs_renderer.rb +52 -0
- data/lib/active_admin/views/templates/active_admin/devise/mailer/reset_password_instructions.html.erb +8 -0
- data/lib/active_admin/views/templates/active_admin/devise/mailer/unlock_instructions.html.erb +7 -0
- data/lib/active_admin/views/templates/active_admin/devise/passwords/edit.html.erb +16 -0
- data/lib/active_admin/views/templates/active_admin/devise/passwords/new.html.erb +14 -0
- data/lib/active_admin/views/templates/active_admin/devise/sessions/new.html.erb +18 -0
- data/lib/active_admin/views/templates/active_admin/devise/shared/_links.erb +20 -0
- data/lib/active_admin/views/templates/active_admin/devise/unlocks/new.html.erb +12 -0
- data/lib/active_admin/views/templates/active_admin_dashboard/index.html.arb +1 -0
- data/lib/active_admin/views/templates/active_admin_default/edit.html.arb +1 -0
- data/lib/active_admin/views/{active_admin_default → templates/active_admin_default}/index.csv.erb +0 -0
- data/lib/active_admin/views/templates/active_admin_default/index.html.arb +1 -0
- data/lib/active_admin/views/templates/active_admin_default/new.html.arb +1 -0
- data/lib/active_admin/views/templates/active_admin_default/show.html.arb +1 -0
- data/lib/active_admin/views/{layouts → templates/layouts}/active_admin.html.erb +3 -4
- data/lib/active_admin/views/templates/layouts/active_admin_logged_out.html.erb +31 -0
- data/lib/generators/active_admin/devise/devise_generator.rb +45 -0
- data/lib/generators/active_admin/install/install_generator.rb +18 -3
- data/lib/generators/active_admin/install/templates/active_admin.js +41 -0
- data/lib/generators/active_admin/install/templates/{active_admin.rb → active_admin.rb.erb} +33 -3
- data/lib/generators/active_admin/install/templates/active_admin_vendor.js +1 -1
- data/lib/generators/active_admin/install/templates/dashboards.rb +3 -4
- data/lib/generators/active_admin/install/templates/images/admin_notes_icon.png +0 -0
- data/lib/generators/active_admin/install/templates/images/loading.gif +0 -0
- data/lib/generators/active_admin/install/templates/images/nested_menu_arrow.gif +0 -0
- data/lib/generators/active_admin/install/templates/images/nested_menu_arrow_dark.gif +0 -0
- data/lib/generators/active_admin/install/templates/images/orderable.png +0 -0
- data/lib/generators/active_admin/install/templates/migrations/1_create_admin_notes.rb +16 -0
- data/lib/generators/active_admin/install/templates/migrations/2_move_admin_notes_to_comments.rb +25 -0
- data/spec/integration/belongs_to_spec.rb +42 -0
- data/spec/integration/index_as_table_spec.rb +0 -119
- data/spec/integration/layout_spec.rb +3 -37
- data/spec/spec_helper.rb +89 -50
- data/spec/support/integration_example_group.rb +37 -0
- data/spec/support/rails_template.rb +21 -9
- data/spec/support/rails_template_with_data.rb +32 -0
- data/spec/support/templates/cucumber.rb +28 -0
- data/spec/unit/abstract_view_factory_spec.rb +79 -0
- data/spec/unit/action_builder_spec.rb +19 -7
- data/spec/unit/action_items_spec.rb +16 -30
- data/spec/unit/active_admin_spec.rb +10 -22
- data/spec/unit/arbre/html/element_finder_methods_spec.rb +54 -0
- data/spec/unit/arbre/html/element_spec.rb +224 -0
- data/spec/unit/arbre/html/tag_attributes_spec.rb +61 -0
- data/spec/unit/arbre/html/tag_spec.rb +63 -0
- data/spec/unit/arbre/html_spec.rb +185 -0
- data/spec/unit/auto_link_spec.rb +38 -0
- data/spec/unit/belongs_to_spec.rb +44 -0
- data/spec/unit/breadcrumbs_spec.rb +110 -0
- data/spec/unit/comments_spec.rb +53 -0
- data/spec/unit/component_spec.rb +18 -0
- data/spec/unit/components/attributes_table_spec.rb +100 -0
- data/spec/unit/components/columns_spec.rb +75 -0
- data/spec/unit/components/panel_spec.rb +31 -0
- data/spec/unit/components/sidebar_section_spec.rb +37 -0
- data/spec/unit/components/table_for_spec.rb +130 -0
- data/spec/unit/dashboard_controller_spec.rb +26 -0
- data/spec/unit/dashboard_section_spec.rb +10 -17
- data/spec/unit/display_name_spec.rb +29 -0
- data/spec/unit/event_spec.rb +41 -0
- data/spec/unit/filter_form_builder_spec.rb +99 -77
- data/spec/unit/form_builder_spec.rb +69 -69
- data/spec/unit/namespace_spec.rb +61 -3
- data/spec/unit/pretty_format_spec.rb +35 -0
- data/spec/unit/registration_spec.rb +40 -1
- data/spec/unit/renderer_spec.rb +8 -0
- data/spec/unit/resource_controller_spec.rb +105 -6
- data/spec/unit/resource_spec.rb +78 -11
- data/spec/unit/routing_spec.rb +82 -6
- data/spec/unit/scope_spec.rb +31 -0
- data/spec/unit/tabs_renderer_spec.rb +24 -2
- data/spec/unit/view_factory_spec.rb +16 -0
- metadata +268 -82
- data/.gitignore +0 -25
- data/active_admin.gemspec +0 -22
- data/lib/active_admin/action_builder.rb +0 -60
- data/lib/active_admin/breadcrumbs.rb +0 -26
- data/lib/active_admin/dashboards/renderer.rb +0 -45
- data/lib/active_admin/dashboards/section_renderer.rb +0 -28
- data/lib/active_admin/filters.rb +0 -189
- data/lib/active_admin/pages.rb +0 -11
- data/lib/active_admin/pages/base.rb +0 -92
- data/lib/active_admin/pages/edit.rb +0 -21
- data/lib/active_admin/pages/index.rb +0 -58
- data/lib/active_admin/pages/index/blog.rb +0 -65
- data/lib/active_admin/pages/index/table.rb +0 -48
- data/lib/active_admin/pages/index/thumbnails.rb +0 -40
- data/lib/active_admin/pages/new.rb +0 -21
- data/lib/active_admin/pages/show.rb +0 -54
- data/lib/active_admin/table_builder.rb +0 -162
- data/lib/active_admin/tabs_renderer.rb +0 -39
- data/lib/active_admin/views/active_admin_dashboard/index.html.erb +0 -1
- data/lib/active_admin/views/active_admin_default/edit.html.erb +0 -1
- data/lib/active_admin/views/active_admin_default/index.html.erb +0 -1
- data/lib/active_admin/views/active_admin_default/new.html.erb +0 -1
- data/lib/active_admin/views/active_admin_default/show.html.erb +0 -1
- data/lib/generators/active_admin/install/templates/active_admin.css +0 -325
- data/lib/generators/active_admin/install/templates/images/orderable.gif +0 -0
- data/spec/integration/index_as_blog_spec.rb +0 -65
- data/spec/integration/index_as_thumbnails_spec.rb +0 -43
- data/spec/integration/new_view_spec.rb +0 -52
- data/spec/integration/show_view_spec.rb +0 -91
- data/spec/unit/sidebar_spec.rb +0 -96
- 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><br /></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><br /></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><br /></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
|