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
@@ -1,41 +1,27 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
2
|
|
3
|
-
|
3
|
+
describe ActiveAdmin::ActionItems do
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
5
|
+
describe "rendering" do
|
6
|
+
include Arbre::HTML
|
7
|
+
let(:assigns){ {} }
|
8
|
+
let(:action_item) do
|
9
|
+
ActiveAdmin::ActionItems::ActionItem.new do
|
10
|
+
h2 "Hello World"
|
11
|
+
end
|
12
|
+
end
|
11
13
|
|
12
|
-
|
13
|
-
Admin::PostsController.action_items = @config_before
|
14
|
-
end
|
14
|
+
let(:rendered){ insert_tag ActiveAdmin::Views::ActionItems, [action_item]}
|
15
15
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
action_item *args, &block
|
16
|
+
it "should have a parent .action_items div" do
|
17
|
+
rendered.tag_name.should == 'div'
|
18
|
+
rendered.class_list.should include('action_items')
|
20
19
|
end
|
21
|
-
end
|
22
20
|
|
23
|
-
|
24
|
-
|
25
|
-
action_item
|
26
|
-
link_to "All Posts", collection_path
|
27
|
-
end
|
28
|
-
get :index
|
29
|
-
end
|
30
|
-
it "should add a new action item" do
|
31
|
-
Admin::PostsController.action_items.size.should == 1
|
32
|
-
end
|
33
|
-
it "should render the content in the context of the view" do
|
34
|
-
response.should have_tag('a', 'All Posts')
|
21
|
+
it "should render the contents of each action item" do
|
22
|
+
rendered.children.size.should == 1
|
23
|
+
rendered.content.strip.should == "<span class=\"action_item\">\n <h2>Hello World</h2>\n </span>"
|
35
24
|
end
|
36
25
|
end
|
37
26
|
|
38
|
-
# action_item 'New', new_post_path
|
39
|
-
context "when setting with as a link with text and a path"
|
40
|
-
|
41
27
|
end
|
@@ -14,24 +14,8 @@ describe ActiveAdmin do
|
|
14
14
|
Rails.application.config.eager_load_paths.should_not include(File.join(Rails.root, "app/admin"))
|
15
15
|
end
|
16
16
|
|
17
|
-
# TODO: Find a good way to test loading and unloading constants
|
18
|
-
# without blowing up all the other specs
|
19
|
-
#
|
20
|
-
#describe "loading" do
|
21
|
-
# it "should unload all registered controllers" do
|
22
|
-
# TestClass = Class.new(ActiveRecord::Base)
|
23
|
-
# ActiveAdmin.register(TestClass)
|
24
|
-
# Admin::TestClassesController
|
25
|
-
# ActiveAdmin.unload!
|
26
|
-
# lambda {
|
27
|
-
# Admin::TestClassesController
|
28
|
-
# }.should raise_error
|
29
|
-
# ActiveAdminIntegrationSpecHelper.load!
|
30
|
-
# end
|
31
|
-
#end
|
32
|
-
|
33
17
|
it "should default the application name" do
|
34
|
-
ActiveAdmin.site_title.should ==
|
18
|
+
ActiveAdmin.site_title.should == Rails.application.class.to_s.split('::').first
|
35
19
|
end
|
36
20
|
|
37
21
|
it "should set the site title" do
|
@@ -41,12 +25,16 @@ describe ActiveAdmin do
|
|
41
25
|
ActiveAdmin.site_title = old_title
|
42
26
|
end
|
43
27
|
|
44
|
-
it "should have a
|
45
|
-
ActiveAdmin.
|
28
|
+
it "should have a view factory" do
|
29
|
+
ActiveAdmin.view_factory.should be_an_instance_of(ActiveAdmin::ViewFactory)
|
46
30
|
end
|
47
|
-
|
48
|
-
it "should have
|
49
|
-
ActiveAdmin.
|
31
|
+
|
32
|
+
it "should have admin notes by default" do
|
33
|
+
ActiveAdmin.admin_notes.should be_true
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should have a default current_user_method" do
|
37
|
+
ActiveAdmin.current_user_method.should == false
|
50
38
|
end
|
51
39
|
|
52
40
|
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Arbre::HTML::Element, "Finder Methods" do
|
4
|
+
include Arbre::HTML
|
5
|
+
let(:assigns){ {} }
|
6
|
+
|
7
|
+
describe "finding elements by tag name" do
|
8
|
+
|
9
|
+
it "should return 0 when no elements exist" do
|
10
|
+
div.get_elements_by_tag_name("li").size.should == 0
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should return a child element" do
|
14
|
+
html = div do
|
15
|
+
ul
|
16
|
+
li
|
17
|
+
ul
|
18
|
+
end
|
19
|
+
elements = html.get_elements_by_tag_name("li")
|
20
|
+
elements.size.should == 1
|
21
|
+
elements[0].should be_instance_of(Arbre::HTML::Li)
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should return multple child elements" do
|
25
|
+
html = div do
|
26
|
+
ul
|
27
|
+
li
|
28
|
+
ul
|
29
|
+
li
|
30
|
+
end
|
31
|
+
elements = html.get_elements_by_tag_name("li")
|
32
|
+
elements.size.should == 2
|
33
|
+
elements[0].should be_instance_of(Arbre::HTML::Li)
|
34
|
+
elements[1].should be_instance_of(Arbre::HTML::Li)
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should return children's child elements" do
|
38
|
+
html = div do
|
39
|
+
ul
|
40
|
+
li do
|
41
|
+
li
|
42
|
+
end
|
43
|
+
end
|
44
|
+
elements = html.get_elements_by_tag_name("li")
|
45
|
+
elements.size.should == 2
|
46
|
+
elements[0].should be_instance_of(Arbre::HTML::Li)
|
47
|
+
elements[1].should be_instance_of(Arbre::HTML::Li)
|
48
|
+
elements[1].parent.should == elements[0]
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe "finding an element by id"
|
53
|
+
describe "finding an element by a class name"
|
54
|
+
end
|
@@ -0,0 +1,224 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'active_admin/arbre/element'
|
3
|
+
|
4
|
+
describe Arbre::HTML::Element do
|
5
|
+
include Arbre::HTML
|
6
|
+
|
7
|
+
let(:assigns){ {} }
|
8
|
+
let(:element){ Arbre::HTML::Element.new }
|
9
|
+
|
10
|
+
context "when initialized" do
|
11
|
+
it "should have no children" do
|
12
|
+
element.children.should be_empty
|
13
|
+
end
|
14
|
+
it "should have no parent" do
|
15
|
+
element.parent.should be_nil
|
16
|
+
end
|
17
|
+
it "should have no document" do
|
18
|
+
element.document.should be_nil
|
19
|
+
end
|
20
|
+
it "should respond to the HTML builder methods" do
|
21
|
+
element.should respond_to(:span)
|
22
|
+
end
|
23
|
+
it "should have a set of local assigns" do
|
24
|
+
element = Arbre::HTML::Element.new :hello => "World"
|
25
|
+
element.assigns[:hello].should == "World"
|
26
|
+
end
|
27
|
+
it "should have an empty hash with no local assigns" do
|
28
|
+
element.assigns.should == {}
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "passing in a helper object" do
|
33
|
+
let(:element){ Arbre::HTML::Element.new(nil, action_view) }
|
34
|
+
it "should call methods on the helper object and return TextNode objects" do
|
35
|
+
element.content_tag(:div).should == "<div></div>"
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should raise a NoMethodError if not found" do
|
39
|
+
lambda {
|
40
|
+
element.a_method_that_doesnt_exist
|
41
|
+
}.should raise_error(NoMethodError)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
describe "passing in assigns" do
|
46
|
+
let(:assigns){ {:post => Post.new(:title => "Hello")} }
|
47
|
+
it "should be accessible via a method call" do
|
48
|
+
post.should be_an_instance_of(Post)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe "adding a child" do
|
53
|
+
let(:child){ Arbre::HTML::Element.new }
|
54
|
+
before do
|
55
|
+
element.add_child child
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should add the child to the parent" do
|
59
|
+
element.children.first.should == child
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should set the parent of the child" do
|
63
|
+
child.parent.should == element
|
64
|
+
end
|
65
|
+
|
66
|
+
context "when the child is nil" do
|
67
|
+
let(:child){ nil }
|
68
|
+
it "should not add the child" do
|
69
|
+
element.children.should be_empty
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
context "when the child is a string" do
|
74
|
+
let(:child){ "Hello World" }
|
75
|
+
it "should add as a TextNode" do
|
76
|
+
element.children.first.should be_instance_of(Arbre::HTML::TextNode)
|
77
|
+
element.children.first.to_html.should == "Hello World"
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
describe "setting the content" do
|
83
|
+
|
84
|
+
context "when a string" do
|
85
|
+
before do
|
86
|
+
element.add_child "Hello World"
|
87
|
+
element.content = "Goodbye"
|
88
|
+
end
|
89
|
+
it "should clear the existing children" do
|
90
|
+
element.children.size.should == 1
|
91
|
+
end
|
92
|
+
|
93
|
+
it "should add the string as a child" do
|
94
|
+
element.children.first.to_html.should == "Goodbye"
|
95
|
+
end
|
96
|
+
|
97
|
+
it "should html escape the string" do
|
98
|
+
string = "Goodbye <br />"
|
99
|
+
element.content = string
|
100
|
+
element.content.to_html.should == "Goodbye <br />"
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
context "when a tag" do
|
105
|
+
before do
|
106
|
+
element.content = h2("Hello")
|
107
|
+
end
|
108
|
+
it "should set the content tag" do
|
109
|
+
element.children.first.should be_an_instance_of(Arbre::HTML::H2)
|
110
|
+
end
|
111
|
+
it "should set the tags parent" do
|
112
|
+
element.children.first.parent.should == element
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
context "when an array of tags" do
|
117
|
+
before do
|
118
|
+
element.content = [ul,div]
|
119
|
+
end
|
120
|
+
|
121
|
+
it "should set the content tag" do
|
122
|
+
element.children.first.should be_an_instance_of(Arbre::HTML::Ul)
|
123
|
+
end
|
124
|
+
it "should set the tags parent" do
|
125
|
+
element.children.first.parent.should == element
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
end
|
130
|
+
|
131
|
+
describe "setting the parent" do
|
132
|
+
let(:parent) do
|
133
|
+
doc = Arbre::HTML::Document.new
|
134
|
+
parent = Arbre::HTML::Element.new
|
135
|
+
doc << parent
|
136
|
+
parent
|
137
|
+
end
|
138
|
+
before { element.parent = parent }
|
139
|
+
|
140
|
+
it "should set the parent" do
|
141
|
+
element.parent.should == parent
|
142
|
+
end
|
143
|
+
it "should set the document to the parent's document" do
|
144
|
+
element.document.should == parent.document
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
describe "rendering to html" do
|
149
|
+
it "should render the children collection" do
|
150
|
+
element.children.should_receive(:to_html).and_return("content")
|
151
|
+
element.to_html.should == "content"
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
describe "adding elements together" do
|
156
|
+
|
157
|
+
context "when both elements are tags" do
|
158
|
+
let(:collection){ h1 + h2}
|
159
|
+
|
160
|
+
it "should return an instance of Collection" do
|
161
|
+
collection.should be_an_instance_of(Arbre::HTML::Collection)
|
162
|
+
end
|
163
|
+
|
164
|
+
it "should return the elements in the collection" do
|
165
|
+
collection.size.should == 2
|
166
|
+
collection.first.should be_an_instance_of(Arbre::HTML::H1)
|
167
|
+
collection[1].should be_an_instance_of(Arbre::HTML::H2)
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
context "when the left is a collection and the right is a tag" do
|
172
|
+
let(:collection){ Arbre::HTML::Collection.new([h1, h2]) + h3}
|
173
|
+
|
174
|
+
it "should return an instance of Collection" do
|
175
|
+
collection.should be_an_instance_of(Arbre::HTML::Collection)
|
176
|
+
end
|
177
|
+
|
178
|
+
it "should return the elements in the collection flattened" do
|
179
|
+
collection.size.should == 3
|
180
|
+
collection[0].should be_an_instance_of(Arbre::HTML::H1)
|
181
|
+
collection[1].should be_an_instance_of(Arbre::HTML::H2)
|
182
|
+
collection[2].should be_an_instance_of(Arbre::HTML::H3)
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
context "when the right is a collection and the left is a tag" do
|
187
|
+
let(:collection){ h1 + Arbre::HTML::Collection.new([h2,h3]) }
|
188
|
+
|
189
|
+
it "should return an instance of Collection" do
|
190
|
+
collection.should be_an_instance_of(Arbre::HTML::Collection)
|
191
|
+
end
|
192
|
+
|
193
|
+
it "should return the elements in the collection flattened" do
|
194
|
+
collection.size.should == 3
|
195
|
+
collection[0].should be_an_instance_of(Arbre::HTML::H1)
|
196
|
+
collection[1].should be_an_instance_of(Arbre::HTML::H2)
|
197
|
+
collection[2].should be_an_instance_of(Arbre::HTML::H3)
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
201
|
+
context "when the left is a tag and the right is a string" do
|
202
|
+
let(:collection){ h1 + "Hello World"}
|
203
|
+
|
204
|
+
it "should return an instance of Collection" do
|
205
|
+
collection.should be_an_instance_of(Arbre::HTML::Collection)
|
206
|
+
end
|
207
|
+
|
208
|
+
it "should return the elements in the collection" do
|
209
|
+
collection.size.should == 2
|
210
|
+
collection[0].should be_an_instance_of(Arbre::HTML::H1)
|
211
|
+
collection[1].should be_an_instance_of(Arbre::HTML::TextNode)
|
212
|
+
end
|
213
|
+
end
|
214
|
+
|
215
|
+
context "when the left is a string and the right is a tag" do
|
216
|
+
let(:collection){ "hello World" + h1}
|
217
|
+
|
218
|
+
it "should return a string" do
|
219
|
+
collection.strip.chomp.should == "hello World<h1></h1>"
|
220
|
+
end
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
224
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Arbre::HTML::Tag, "Attributes" do
|
4
|
+
include Arbre::HTML
|
5
|
+
let(:assigns){ {} }
|
6
|
+
|
7
|
+
let(:tag){ Arbre::HTML::Tag.new }
|
8
|
+
|
9
|
+
describe "attributes" do
|
10
|
+
before { tag.build :id => "my_id" }
|
11
|
+
|
12
|
+
it "should have an attributes hash" do
|
13
|
+
tag.attributes.should == {:id => "my_id"}
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should render the attributes to html" do
|
17
|
+
tag.to_html.should == <<-HTML
|
18
|
+
<tag id="my_id"></tag>
|
19
|
+
HTML
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should get an attribute value" do
|
23
|
+
tag.attr(:id).should == "my_id"
|
24
|
+
end
|
25
|
+
|
26
|
+
describe "#has_attribute?" do
|
27
|
+
context "when the attribute exists" do
|
28
|
+
it "should return true" do
|
29
|
+
tag.has_attribute?(:id).should == true
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context "when the attribute does not exist" do
|
34
|
+
it "should return false" do
|
35
|
+
tag.has_attribute?(:class).should == false
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should remove an attribute" do
|
41
|
+
tag.attributes.should == {:id => "my_id"}
|
42
|
+
tag.remove_attribute(:id).should == "my_id"
|
43
|
+
tag.attributes.should == {}
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe "rendering attributes" do
|
48
|
+
it "should html safe the attribute values" do
|
49
|
+
tag.set_attribute(:class, "\">bad things!")
|
50
|
+
tag.to_html.should == <<-HTML
|
51
|
+
<tag class="">bad things!"></tag>
|
52
|
+
HTML
|
53
|
+
end
|
54
|
+
it "should should escape the attribute names" do
|
55
|
+
tag.set_attribute(">bad", "things")
|
56
|
+
tag.to_html.should == <<-HTML
|
57
|
+
<tag >bad="things"></tag>
|
58
|
+
HTML
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Arbre::HTML::Tag do
|
4
|
+
include Arbre::HTML
|
5
|
+
let(:assigns){ {} }
|
6
|
+
|
7
|
+
let(:tag){ Arbre::HTML::Tag.new }
|
8
|
+
|
9
|
+
describe "building a new tag" do
|
10
|
+
before { tag.build "Hello World", :id => "my_id" }
|
11
|
+
|
12
|
+
it "should set the contents to a string" do
|
13
|
+
tag.content.should == "Hello World"
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should set the hash of options to the attributes" do
|
17
|
+
tag.attributes.should == { :id => "my_id" }
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "creating a tag 'for' an object" do
|
22
|
+
let(:model_name){ mock(:singular => "resource_class")}
|
23
|
+
let(:resource_class){ mock(:model_name => model_name) }
|
24
|
+
let(:resource){ mock(:class => resource_class, :to_key => ['5'])}
|
25
|
+
|
26
|
+
before do
|
27
|
+
tag.build :for => resource
|
28
|
+
end
|
29
|
+
it "should set the id to the type and id" do
|
30
|
+
tag.id.should == "resource_class_5"
|
31
|
+
end
|
32
|
+
it "should add a class name" do
|
33
|
+
tag.class_list.should include("resource_class")
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe "css class names" do
|
38
|
+
it "should add a class" do
|
39
|
+
tag.add_class "hello_world"
|
40
|
+
tag.class_names.should == "hello_world"
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should remove_class" do
|
44
|
+
tag.add_class "hello_world"
|
45
|
+
tag.class_names.should == "hello_world"
|
46
|
+
tag.remove_class "hello_world"
|
47
|
+
tag.class_names.should == ""
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should not add a class if it already exists" do
|
51
|
+
tag.add_class "hello_world"
|
52
|
+
tag.add_class "hello_world"
|
53
|
+
tag.class_names.should == "hello_world"
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should seperate classes with space" do
|
57
|
+
tag.add_class "hello world"
|
58
|
+
tag.class_list.size.should == 2
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
|
63
|
+
end
|